From 7d2b8ba6d2c10baffca95c9517fd4ec681b73b0f Mon Sep 17 00:00:00 2001 From: Brian Zalewski Date: Wed, 30 Nov 2022 05:47:56 +0000 Subject: [PATCH] Update .vim/autoload/lightline/colorscheme/Betelgeuse.vim, .vim/autoload/plug.vim, .vim/colors/betelgeuse.vim, .vscode/extensions.json, .vscode/settings.json Deleted dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/config.yml, dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/report-a-bug.md, dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-a-new-linter-or-fixer.md, dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-an-improvement.md, dotfiles/.vim/plugged/ale/.github/workflows/main.yml, dotfiles/.vim/plugged/ale/.github/CODE_OF_CONDUCT.md, dotfiles/.vim/plugged/ale/.github/CONTRIBUTING.md, dotfiles/.vim/plugged/ale/.github/PULL_REQUEST_TEMPLATE.md, dotfiles/.vim/plugged/ale/.github/stale.yml, dotfiles/.vim/plugged/ale/ale_linters/ada/adals.vim, dotfiles/.vim/plugged/ale/ale_linters/ada/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/ada/gcc.vim, dotfiles/.vim/plugged/ale/ale_linters/ansible/ansible_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/apiblueprint/drafter.vim, dotfiles/.vim/plugged/ale/ale_linters/apkbuild/apkbuild_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/apkbuild/secfixes_check.vim, dotfiles/.vim/plugged/ale/ale_linters/asciidoc/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/asciidoc/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/asciidoc/languagetool.vim, dotfiles/.vim/plugged/ale/ale_linters/asciidoc/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/asciidoc/redpen.vim, dotfiles/.vim/plugged/ale/ale_linters/asciidoc/textlint.vim, dotfiles/.vim/plugged/ale/ale_linters/asciidoc/vale.vim, dotfiles/.vim/plugged/ale/ale_linters/asciidoc/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/asm/gcc.vim, dotfiles/.vim/plugged/ale/ale_linters/avra/avra.vim, dotfiles/.vim/plugged/ale/ale_linters/awk/gawk.vim, dotfiles/.vim/plugged/ale/ale_linters/bats/shellcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/bib/bibclean.vim, dotfiles/.vim/plugged/ale/ale_linters/bicep/bicep.vim, dotfiles/.vim/plugged/ale/ale_linters/bitbake/oelint_adv.vim, dotfiles/.vim/plugged/ale/ale_linters/c/cc.vim, dotfiles/.vim/plugged/ale/ale_linters/c/ccls.vim, dotfiles/.vim/plugged/ale/ale_linters/c/clangd.vim, dotfiles/.vim/plugged/ale/ale_linters/c/clangtidy.vim, dotfiles/.vim/plugged/ale/ale_linters/c/cppcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/c/cpplint.vim, dotfiles/.vim/plugged/ale/ale_linters/c/cquery.vim, dotfiles/.vim/plugged/ale/ale_linters/c/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/c/flawfinder.vim, dotfiles/.vim/plugged/ale/ale_linters/cairo/starknet.vim, dotfiles/.vim/plugged/ale/ale_linters/chef/cookstyle.vim, dotfiles/.vim/plugged/ale/ale_linters/chef/foodcritic.vim, dotfiles/.vim/plugged/ale/ale_linters/clojure/clj_kondo.vim, dotfiles/.vim/plugged/ale/ale_linters/clojure/joker.vim, dotfiles/.vim/plugged/ale/ale_linters/cloudformation/cfn_python_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/cmake/cmake_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/cmake/cmakelint.vim, dotfiles/.vim/plugged/ale/ale_linters/coffee/coffee.vim, dotfiles/.vim/plugged/ale/ale_linters/coffee/coffeelint.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/cc.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/ccls.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/clangcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/clangd.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/clangtidy.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/clazy.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/cppcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/cpplint.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/cquery.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/cpp/flawfinder.vim, dotfiles/.vim/plugged/ale/ale_linters/crystal/ameba.vim, dotfiles/.vim/plugged/ale/ale_linters/crystal/crystal.vim, dotfiles/.vim/plugged/ale/ale_linters/cs/csc.vim, dotfiles/.vim/plugged/ale/ale_linters/cs/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/cs/mcs.vim, dotfiles/.vim/plugged/ale/ale_linters/cs/mcsc.vim, dotfiles/.vim/plugged/ale/ale_linters/css/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/css/csslint.vim, dotfiles/.vim/plugged/ale/ale_linters/css/fecs.vim, dotfiles/.vim/plugged/ale/ale_linters/css/stylelint.vim, dotfiles/.vim/plugged/ale/ale_linters/css/vscodecss.vim, dotfiles/.vim/plugged/ale/ale_linters/cucumber/cucumber.vim, dotfiles/.vim/plugged/ale/ale_linters/cuda/clangd.vim, dotfiles/.vim/plugged/ale/ale_linters/cuda/nvcc.vim, dotfiles/.vim/plugged/ale/ale_linters/cypher/cypher_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/d/dls.vim, dotfiles/.vim/plugged/ale/ale_linters/d/dmd.vim, dotfiles/.vim/plugged/ale/ale_linters/dafny/dafny.vim, dotfiles/.vim/plugged/ale/ale_linters/dart/analysis_server.vim, dotfiles/.vim/plugged/ale/ale_linters/dart/dart_analyze.vim, dotfiles/.vim/plugged/ale/ale_linters/dart/language_server.vim, dotfiles/.vim/plugged/ale/ale_linters/desktop/desktop_file_validate.vim, dotfiles/.vim/plugged/ale/ale_linters/dockerfile/dockerfile_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/dockerfile/hadolint.vim, dotfiles/.vim/plugged/ale/ale_linters/elixir/credo.vim, dotfiles/.vim/plugged/ale/ale_linters/elixir/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/elixir/dialyxir.vim, dotfiles/.vim/plugged/ale/ale_linters/elixir/dogma.vim, dotfiles/.vim/plugged/ale/ale_linters/elixir/elixir_ls.vim, dotfiles/.vim/plugged/ale/ale_linters/elixir/mix.vim, dotfiles/.vim/plugged/ale/ale_linters/elm/elm_ls.vim, dotfiles/.vim/plugged/ale/ale_linters/elm/make.vim, dotfiles/.vim/plugged/ale/ale_linters/erlang/dialyzer.vim, dotfiles/.vim/plugged/ale/ale_linters/erlang/elvis.vim, dotfiles/.vim/plugged/ale/ale_linters/erlang/erlc.vim, dotfiles/.vim/plugged/ale/ale_linters/erlang/syntaxerl.vim, dotfiles/.vim/plugged/ale/ale_linters/eruby/erb.vim, dotfiles/.vim/plugged/ale/ale_linters/eruby/erblint.vim, dotfiles/.vim/plugged/ale/ale_linters/eruby/erubi.vim, dotfiles/.vim/plugged/ale/ale_linters/eruby/erubis.vim, dotfiles/.vim/plugged/ale/ale_linters/eruby/ruumba.vim, dotfiles/.vim/plugged/ale/ale_linters/fish/fish.vim, dotfiles/.vim/plugged/ale/ale_linters/fortran/gcc.vim, dotfiles/.vim/plugged/ale/ale_linters/fortran/language_server.vim, dotfiles/.vim/plugged/ale/ale_linters/fountain/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/fuse/fusionlint.vim, dotfiles/.vim/plugged/ale/ale_linters/gitcommit/gitlint.vim, dotfiles/.vim/plugged/ale/ale_linters/glsl/glslang.vim, dotfiles/.vim/plugged/ale/ale_linters/glsl/glslls.vim, dotfiles/.vim/plugged/ale/ale_linters/go/bingo.vim, dotfiles/.vim/plugged/ale/ale_linters/go/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/go/gobuild.vim, dotfiles/.vim/plugged/ale/ale_linters/go/gofmt.vim, dotfiles/.vim/plugged/ale/ale_linters/go/golangci_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/go/golint.vim, dotfiles/.vim/plugged/ale/ale_linters/go/gometalinter.vim, dotfiles/.vim/plugged/ale/ale_linters/go/gopls.vim, dotfiles/.vim/plugged/ale/ale_linters/go/gosimple.vim, dotfiles/.vim/plugged/ale/ale_linters/go/gotype.vim, dotfiles/.vim/plugged/ale/ale_linters/go/govet.vim, dotfiles/.vim/plugged/ale/ale_linters/go/langserver.vim, dotfiles/.vim/plugged/ale/ale_linters/go/revive.vim, dotfiles/.vim/plugged/ale/ale_linters/go/staticcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/graphql/eslint.vim, dotfiles/.vim/plugged/ale/ale_linters/graphql/gqlint.vim, dotfiles/.vim/plugged/ale/ale_linters/hack/hack.vim, dotfiles/.vim/plugged/ale/ale_linters/hack/hhast.vim, dotfiles/.vim/plugged/ale/ale_linters/haml/hamllint.vim, dotfiles/.vim/plugged/ale/ale_linters/handlebars/embertemplatelint.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/cabal_ghc.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc_mod.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/hdevtools.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/hie.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/hlint.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/hls.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_build.vim, dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_ghc.vim, dotfiles/.vim/plugged/ale/ale_linters/help/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/help/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/help/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/help/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/html/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/html/angular.vim, dotfiles/.vim/plugged/ale/ale_linters/html/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/html/fecs.vim, dotfiles/.vim/plugged/ale/ale_linters/html/htmlhint.vim, dotfiles/.vim/plugged/ale/ale_linters/html/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/html/stylelint.vim, dotfiles/.vim/plugged/ale/ale_linters/html/tidy.vim, dotfiles/.vim/plugged/ale/ale_linters/html/vscodehtml.vim, dotfiles/.vim/plugged/ale/ale_linters/html/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/idris/idris.vim, dotfiles/.vim/plugged/ale/ale_linters/ink/ls.vim, dotfiles/.vim/plugged/ale/ale_linters/inko/inko.vim, dotfiles/.vim/plugged/ale/ale_linters/ispc/ispc.vim, dotfiles/.vim/plugged/ale/ale_linters/java/checkstyle.vim, dotfiles/.vim/plugged/ale/ale_linters/java/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/java/eclipselsp.vim, dotfiles/.vim/plugged/ale/ale_linters/java/javac.vim, dotfiles/.vim/plugged/ale/ale_linters/java/javalsp.vim, dotfiles/.vim/plugged/ale/ale_linters/java/pmd.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/deno.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/eslint.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/fecs.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/flow.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/flow_ls.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/jscs.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/jshint.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/standard.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/tsserver.vim, dotfiles/.vim/plugged/ale/ale_linters/javascript/xo.vim, dotfiles/.vim/plugged/ale/ale_linters/json/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/json/eslint.vim, dotfiles/.vim/plugged/ale/ale_linters/json/jq.vim, dotfiles/.vim/plugged/ale/ale_linters/json/jsonlint.vim, dotfiles/.vim/plugged/ale/ale_linters/json/spectral.vim, dotfiles/.vim/plugged/ale/ale_linters/json/vscodejson.vim, dotfiles/.vim/plugged/ale/ale_linters/json5/eslint.vim, dotfiles/.vim/plugged/ale/ale_linters/jsonc/eslint.vim, dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnet_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnetfmt.vim, dotfiles/.vim/plugged/ale/ale_linters/julia/languageserver.vim, dotfiles/.vim/plugged/ale/ale_linters/kotlin/kotlinc.vim, dotfiles/.vim/plugged/ale/ale_linters/kotlin/ktlint.vim, dotfiles/.vim/plugged/ale/ale_linters/kotlin/languageserver.vim, dotfiles/.vim/plugged/ale/ale_linters/less/lessc.vim, dotfiles/.vim/plugged/ale/ale_linters/less/stylelint.vim, dotfiles/.vim/plugged/ale/ale_linters/llvm/llc.vim, dotfiles/.vim/plugged/ale/ale_linters/lua/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/lua/luac.vim, dotfiles/.vim/plugged/ale/ale_linters/lua/luacheck.vim, dotfiles/.vim/plugged/ale/ale_linters/lua/selene.vim, dotfiles/.vim/plugged/ale/ale_linters/mail/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/mail/languagetool.vim, dotfiles/.vim/plugged/ale/ale_linters/mail/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/mail/vale.vim, dotfiles/.vim/plugged/ale/ale_linters/make/checkmake.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/languagetool.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/markdownlint.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/mdl.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/redpen.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/remark_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/textlint.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/vale.vim, dotfiles/.vim/plugged/ale/ale_linters/markdown/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/matlab/mlint.vim, dotfiles/.vim/plugged/ale/ale_linters/mercury/mmc.vim, dotfiles/.vim/plugged/ale/ale_linters/nasm/nasm.vim, dotfiles/.vim/plugged/ale/ale_linters/nim/nimcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/nim/nimlsp.vim, dotfiles/.vim/plugged/ale/ale_linters/nix/nix.vim, dotfiles/.vim/plugged/ale/ale_linters/nix/rnix_lsp.vim, dotfiles/.vim/plugged/ale/ale_linters/nix/statix.vim, dotfiles/.vim/plugged/ale/ale_linters/nroff/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/nroff/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/nroff/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/objc/ccls.vim, dotfiles/.vim/plugged/ale/ale_linters/objc/clang.vim, dotfiles/.vim/plugged/ale/ale_linters/objc/clangd.vim, dotfiles/.vim/plugged/ale/ale_linters/objcpp/clang.vim, dotfiles/.vim/plugged/ale/ale_linters/objcpp/clangd.vim, dotfiles/.vim/plugged/ale/ale_linters/ocaml/merlin.vim, dotfiles/.vim/plugged/ale/ale_linters/ocaml/ocamllsp.vim, dotfiles/.vim/plugged/ale/ale_linters/ocaml/ols.vim, dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/merlin.vim, dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/ocamllsp.vim, dotfiles/.vim/plugged/ale/ale_linters/openapi/ibm_validator.vim, dotfiles/.vim/plugged/ale/ale_linters/openapi/yamllint.vim, dotfiles/.vim/plugged/ale/ale_linters/openscad/sca2d.vim, dotfiles/.vim/plugged/ale/ale_linters/perl/perl.vim, dotfiles/.vim/plugged/ale/ale_linters/perl/perlcritic.vim, dotfiles/.vim/plugged/ale/ale_linters/perl6/perl6.vim, dotfiles/.vim/plugged/ale/ale_linters/php/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/php/intelephense.vim, dotfiles/.vim/plugged/ale/ale_linters/php/langserver.vim, dotfiles/.vim/plugged/ale/ale_linters/php/phan.vim, dotfiles/.vim/plugged/ale/ale_linters/php/php.vim, dotfiles/.vim/plugged/ale/ale_linters/php/phpactor.vim, dotfiles/.vim/plugged/ale/ale_linters/php/phpcs.vim, dotfiles/.vim/plugged/ale/ale_linters/php/phpmd.vim, dotfiles/.vim/plugged/ale/ale_linters/php/phpstan.vim, dotfiles/.vim/plugged/ale/ale_linters/php/psalm.vim, dotfiles/.vim/plugged/ale/ale_linters/php/tlint.vim, dotfiles/.vim/plugged/ale/ale_linters/po/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/po/msgfmt.vim, dotfiles/.vim/plugged/ale/ale_linters/po/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/po/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/pod/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/pod/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/pod/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/pony/ponyc.vim, dotfiles/.vim/plugged/ale/ale_linters/powershell/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/powershell/powershell.vim, dotfiles/.vim/plugged/ale/ale_linters/powershell/psscriptanalyzer.vim, dotfiles/.vim/plugged/ale/ale_linters/prolog/swipl.vim, dotfiles/.vim/plugged/ale/ale_linters/proto/buf_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/proto/protoc_gen_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/proto/protolint.vim, dotfiles/.vim/plugged/ale/ale_linters/pug/puglint.vim, dotfiles/.vim/plugged/ale/ale_linters/puppet/languageserver.vim, dotfiles/.vim/plugged/ale/ale_linters/puppet/puppet.vim, dotfiles/.vim/plugged/ale/ale_linters/puppet/puppetlint.vim, dotfiles/.vim/plugged/ale/ale_linters/purescript/ls.vim, dotfiles/.vim/plugged/ale/ale_linters/pyrex/cython.vim, dotfiles/.vim/plugged/ale/ale_linters/python/bandit.vim, dotfiles/.vim/plugged/ale/ale_linters/python/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/python/flake8.vim, dotfiles/.vim/plugged/ale/ale_linters/python/flakehell.vim, dotfiles/.vim/plugged/ale/ale_linters/python/jedils.vim, dotfiles/.vim/plugged/ale/ale_linters/python/mypy.vim, dotfiles/.vim/plugged/ale/ale_linters/python/prospector.vim, dotfiles/.vim/plugged/ale/ale_linters/python/pycodestyle.vim, dotfiles/.vim/plugged/ale/ale_linters/python/pydocstyle.vim, dotfiles/.vim/plugged/ale/ale_linters/python/pyflakes.vim, dotfiles/.vim/plugged/ale/ale_linters/python/pylama.vim, dotfiles/.vim/plugged/ale/ale_linters/python/pylint.vim, dotfiles/.vim/plugged/ale/ale_linters/python/pylsp.vim, dotfiles/.vim/plugged/ale/ale_linters/python/pyre.vim, dotfiles/.vim/plugged/ale/ale_linters/python/pyright.vim, dotfiles/.vim/plugged/ale/ale_linters/python/unimport.vim, dotfiles/.vim/plugged/ale/ale_linters/python/vulture.vim, dotfiles/.vim/plugged/ale/ale_linters/qml/qmlfmt.vim, dotfiles/.vim/plugged/ale/ale_linters/qml/qmllint.vim, dotfiles/.vim/plugged/ale/ale_linters/r/languageserver.vim, dotfiles/.vim/plugged/ale/ale_linters/r/lintr.vim, dotfiles/.vim/plugged/ale/ale_linters/racket/langserver.vim, dotfiles/.vim/plugged/ale/ale_linters/racket/raco.vim, dotfiles/.vim/plugged/ale/ale_linters/reason/ls.vim, dotfiles/.vim/plugged/ale/ale_linters/reason/merlin.vim, dotfiles/.vim/plugged/ale/ale_linters/reason/ols.vim, dotfiles/.vim/plugged/ale/ale_linters/rego/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/rego/opacheck.vim, dotfiles/.vim/plugged/ale/ale_linters/review/redpen.vim, dotfiles/.vim/plugged/ale/ale_linters/robot/rflint.vim, dotfiles/.vim/plugged/ale/ale_linters/rst/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/rst/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/rst/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/rst/redpen.vim, dotfiles/.vim/plugged/ale/ale_linters/rst/rstcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/rst/textlint.vim, dotfiles/.vim/plugged/ale/ale_linters/rst/vale.vim, dotfiles/.vim/plugged/ale/ale_linters/rst/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/brakeman.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/debride.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/rails_best_practices.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/reek.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/rubocop.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/ruby.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/solargraph.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/sorbet.vim, dotfiles/.vim/plugged/ale/ale_linters/ruby/standardrb.vim, dotfiles/.vim/plugged/ale/ale_linters/rust/analyzer.vim, dotfiles/.vim/plugged/ale/ale_linters/rust/cargo.vim, dotfiles/.vim/plugged/ale/ale_linters/rust/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/rust/rls.vim, dotfiles/.vim/plugged/ale/ale_linters/rust/rustc.vim, dotfiles/.vim/plugged/ale/ale_linters/salt/salt_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/sass/sasslint.vim, dotfiles/.vim/plugged/ale/ale_linters/sass/stylelint.vim, dotfiles/.vim/plugged/ale/ale_linters/scala/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/scala/fsc.vim, dotfiles/.vim/plugged/ale/ale_linters/scala/metals.vim, dotfiles/.vim/plugged/ale/ale_linters/scala/sbtserver.vim, dotfiles/.vim/plugged/ale/ale_linters/scala/scalac.vim, dotfiles/.vim/plugged/ale/ale_linters/scala/scalastyle.vim, dotfiles/.vim/plugged/ale/ale_linters/scss/sasslint.vim, dotfiles/.vim/plugged/ale/ale_linters/scss/scsslint.vim, dotfiles/.vim/plugged/ale/ale_linters/scss/stylelint.vim, dotfiles/.vim/plugged/ale/ale_linters/sh/bashate.vim, dotfiles/.vim/plugged/ale/ale_linters/sh/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/sh/language_server.vim, dotfiles/.vim/plugged/ale/ale_linters/sh/shell.vim, dotfiles/.vim/plugged/ale/ale_linters/sh/shellcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/slim/slimlint.vim, dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj.vim, dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj_cm.vim, dotfiles/.vim/plugged/ale/ale_linters/solidity/solc.vim, dotfiles/.vim/plugged/ale/ale_linters/solidity/solhint.vim, dotfiles/.vim/plugged/ale/ale_linters/solidity/solium.vim, dotfiles/.vim/plugged/ale/ale_linters/spec/rpmlint.vim, dotfiles/.vim/plugged/ale/ale_linters/sql/sqlint.vim, dotfiles/.vim/plugged/ale/ale_linters/sql/sqllint.vim, dotfiles/.vim/plugged/ale/ale_linters/stylus/stylelint.vim, dotfiles/.vim/plugged/ale/ale_linters/sugarss/stylelint.vim, dotfiles/.vim/plugged/ale/ale_linters/svelte/svelteserver.vim, dotfiles/.vim/plugged/ale/ale_linters/swift/appleswiftformat.vim, dotfiles/.vim/plugged/ale/ale_linters/swift/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/swift/sourcekitlsp.vim, dotfiles/.vim/plugged/ale/ale_linters/swift/swiftlint.vim, dotfiles/.vim/plugged/ale/ale_linters/systemd/systemd_analyze.vim, dotfiles/.vim/plugged/ale/ale_linters/tcl/nagelfar.vim, dotfiles/.vim/plugged/ale/ale_linters/terraform/checkov.vim, dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform.vim, dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_ls.vim, dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_lsp.vim, dotfiles/.vim/plugged/ale/ale_linters/terraform/tflint.vim, dotfiles/.vim/plugged/ale/ale_linters/terraform/tfsec.vim, dotfiles/.vim/plugged/ale/ale_linters/testft/testlinter.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/chktex.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/lacheck.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/redpen.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/texlab.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/textlint.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/vale.vim, dotfiles/.vim/plugged/ale/ale_linters/tex/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/texinfo/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/texinfo/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/texinfo/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/texinfo/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/text/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/text/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/text/languagetool.vim, dotfiles/.vim/plugged/ale/ale_linters/text/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/text/redpen.vim, dotfiles/.vim/plugged/ale/ale_linters/text/textlint.vim, dotfiles/.vim/plugged/ale/ale_linters/text/vale.vim, dotfiles/.vim/plugged/ale/ale_linters/text/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/thrift/thrift.vim, dotfiles/.vim/plugged/ale/ale_linters/thrift/thriftcheck.vim, dotfiles/.vim/plugged/ale/ale_linters/typescript/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/typescript/deno.vim, dotfiles/.vim/plugged/ale/ale_linters/typescript/eslint.vim, dotfiles/.vim/plugged/ale/ale_linters/typescript/standard.vim, dotfiles/.vim/plugged/ale/ale_linters/typescript/tslint.vim, dotfiles/.vim/plugged/ale/ale_linters/typescript/tsserver.vim, dotfiles/.vim/plugged/ale/ale_linters/typescript/typecheck.vim, dotfiles/.vim/plugged/ale/ale_linters/typescript/xo.vim, dotfiles/.vim/plugged/ale/ale_linters/v/v.vim, dotfiles/.vim/plugged/ale/ale_linters/vala/vala_lint.vim, dotfiles/.vim/plugged/ale/ale_linters/verilog/hdl_checker.vim, dotfiles/.vim/plugged/ale/ale_linters/verilog/iverilog.vim, dotfiles/.vim/plugged/ale/ale_linters/verilog/verilator.vim, dotfiles/.vim/plugged/ale/ale_linters/verilog/vlog.vim, dotfiles/.vim/plugged/ale/ale_linters/verilog/xvlog.vim, dotfiles/.vim/plugged/ale/ale_linters/verilog/yosys.vim, dotfiles/.vim/plugged/ale/ale_linters/vhdl/ghdl.vim, dotfiles/.vim/plugged/ale/ale_linters/vhdl/hdl_checker.vim, dotfiles/.vim/plugged/ale/ale_linters/vhdl/vcom.vim, dotfiles/.vim/plugged/ale/ale_linters/vhdl/xvhdl.vim, dotfiles/.vim/plugged/ale/ale_linters/vim/ale_custom_linting_rules.vim, dotfiles/.vim/plugged/ale/ale_linters/vim/vimls.vim, dotfiles/.vim/plugged/ale/ale_linters/vim/vint.vim, dotfiles/.vim/plugged/ale/ale_linters/vue/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/vue/vls.vim, dotfiles/.vim/plugged/ale/ale_linters/vue/volar.vim, dotfiles/.vim/plugged/ale/ale_linters/wgsl/naga.vim, dotfiles/.vim/plugged/ale/ale_linters/xhtml/alex.vim, dotfiles/.vim/plugged/ale/ale_linters/xhtml/cspell.vim, dotfiles/.vim/plugged/ale/ale_linters/xhtml/proselint.vim, dotfiles/.vim/plugged/ale/ale_linters/xhtml/writegood.vim, dotfiles/.vim/plugged/ale/ale_linters/xml/xmllint.vim, dotfiles/.vim/plugged/ale/ale_linters/yaml/actionlint.vim, dotfiles/.vim/plugged/ale/ale_linters/yaml/circleci.vim, dotfiles/.vim/plugged/ale/ale_linters/yaml/gitlablint.vim, dotfiles/.vim/plugged/ale/ale_linters/yaml/ls.vim, dotfiles/.vim/plugged/ale/ale_linters/yaml/spectral.vim, dotfiles/.vim/plugged/ale/ale_linters/yaml/swaglint.vim, dotfiles/.vim/plugged/ale/ale_linters/yaml/yamllint.vim, dotfiles/.vim/plugged/ale/ale_linters/yang/yang_lsp.vim, dotfiles/.vim/plugged/ale/ale_linters/zeek/zeek.vim, dotfiles/.vim/plugged/ale/ale_linters/zig/zls.vim, dotfiles/.vim/plugged/ale/autoload/ale/completion/python.vim, dotfiles/.vim/plugged/ale/autoload/ale/engine/ignore.vim, dotfiles/.vim/plugged/ale/autoload/ale/fix/registry.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/appleswiftformat.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/astyle.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoflake.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoimport.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/autopep8.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/bibclean.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/black.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/brittany.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/buf_format.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/buildifier.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangformat.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangtidy.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/cmakeformat.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/crystal.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/css_beautify.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dart_format.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dartfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/deno.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_format.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_freeze.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_lint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dotnet_format.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dprint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/dune.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/elm_format.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/erblint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/erlfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/eslint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/fecs.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/fish_indent.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/fixjson.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/floskell.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic_python.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/gnatpp.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofumpt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/goimports.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/golines.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/gomod.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/google_java_format.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/hackfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/help.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/hfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/hindent.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/hlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/html_beautify.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/importjs.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/isort.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/jq.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/jsonnetfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/ktlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/latexindent.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/lua_format.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/luafmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/mix_format.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/nimpretty.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixpkgsfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocamlformat.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocp_indent.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/opafmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/ormolu.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/packer.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/pandoc.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/perltidy.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/pgformatter.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/php_cs_fixer.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/phpcbf.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/pint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_eslint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_standard.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/protolint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/ptop.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/puppetlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/purs_tidy.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/purty.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/pyflyby.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/qmlfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/refmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/remark_lint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/reorder_python_imports.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/rubocop.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/rufo.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/rustfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/scalafmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/shfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/sorbet.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlformat.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/standard.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/standardrb.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/statix.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylelint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/styler.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylish_haskell.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylua.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/swiftformat.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/syntax_tree.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/terraform.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/textlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/tidy.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/tslint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/uncrustify.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/vfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/xmllint.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/xo.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/yamlfix.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/yapf.vim, dotfiles/.vim/plugged/ale/autoload/ale/fixers/zigfmt.vim, dotfiles/.vim/plugged/ale/autoload/ale/gradle/init.gradle, dotfiles/.vim/plugged/ale/autoload/ale/handlers/actionlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/alex.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/atools.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/ccls.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/cppcheck.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/cpplint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/cspell.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/css.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/deno.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/elixir.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/eslint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/fecs.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/flawfinder.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/gawk.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/gcc.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/go.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell_stack.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/hdl_checker.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/hlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/inko.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/ktlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/languagetool.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/markdownlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/naga.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/ocamllsp.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/ols.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/openscad.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/pony.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/redpen.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/ruby.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/rust.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/scala.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/sh.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/shellcheck.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/sml.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/solhint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/spectral.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/statix.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/textlint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/tslint.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/tsserver.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/unix.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/vale.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/writegood.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/xo.vim, dotfiles/.vim/plugged/ale/autoload/ale/handlers/yamllint.vim, dotfiles/.vim/plugged/ale/autoload/ale/lsp/message.vim, dotfiles/.vim/plugged/ale/autoload/ale/lsp/reset.vim, dotfiles/.vim/plugged/ale/autoload/ale/lsp/response.vim, dotfiles/.vim/plugged/ale/autoload/ale/lsp/tsserver_message.vim, dotfiles/.vim/plugged/ale/autoload/ale/uri/jdt.vim, dotfiles/.vim/plugged/ale/autoload/ale/ant.vim, dotfiles/.vim/plugged/ale/autoload/ale/args.vim, dotfiles/.vim/plugged/ale/autoload/ale/assert.vim, dotfiles/.vim/plugged/ale/autoload/ale/balloon.vim, dotfiles/.vim/plugged/ale/autoload/ale/c.vim, dotfiles/.vim/plugged/ale/autoload/ale/code_action.vim, dotfiles/.vim/plugged/ale/autoload/ale/codefix.vim, dotfiles/.vim/plugged/ale/autoload/ale/command.vim, dotfiles/.vim/plugged/ale/autoload/ale/completion.vim, dotfiles/.vim/plugged/ale/autoload/ale/cursor.vim, dotfiles/.vim/plugged/ale/autoload/ale/d.vim, dotfiles/.vim/plugged/ale/autoload/ale/debugging.vim, dotfiles/.vim/plugged/ale/autoload/ale/definition.vim, dotfiles/.vim/plugged/ale/autoload/ale/dhall.vim, dotfiles/.vim/plugged/ale/autoload/ale/engine.vim, dotfiles/.vim/plugged/ale/autoload/ale/events.vim, dotfiles/.vim/plugged/ale/autoload/ale/filename_mapping.vim, dotfiles/.vim/plugged/ale/autoload/ale/filerename.vim, dotfiles/.vim/plugged/ale/autoload/ale/filetypes.vim, dotfiles/.vim/plugged/ale/autoload/ale/fix.vim, dotfiles/.vim/plugged/ale/autoload/ale/floating_preview.vim, dotfiles/.vim/plugged/ale/autoload/ale/go.vim, dotfiles/.vim/plugged/ale/autoload/ale/gradle.vim, dotfiles/.vim/plugged/ale/autoload/ale/highlight.vim, dotfiles/.vim/plugged/ale/autoload/ale/history.vim, dotfiles/.vim/plugged/ale/autoload/ale/hover.vim, dotfiles/.vim/plugged/ale/autoload/ale/java.vim, dotfiles/.vim/plugged/ale/autoload/ale/job.vim, dotfiles/.vim/plugged/ale/autoload/ale/julia.vim, dotfiles/.vim/plugged/ale/autoload/ale/linter.vim, dotfiles/.vim/plugged/ale/autoload/ale/list.vim, dotfiles/.vim/plugged/ale/autoload/ale/loclist_jumping.vim, dotfiles/.vim/plugged/ale/autoload/ale/lsp.vim, dotfiles/.vim/plugged/ale/autoload/ale/lsp_linter.vim, dotfiles/.vim/plugged/ale/autoload/ale/lsp_window.vim, dotfiles/.vim/plugged/ale/autoload/ale/maven.vim, dotfiles/.vim/plugged/ale/autoload/ale/node.vim, dotfiles/.vim/plugged/ale/autoload/ale/organize_imports.vim, dotfiles/.vim/plugged/ale/autoload/ale/other_source.vim, dotfiles/.vim/plugged/ale/autoload/ale/path.vim, dotfiles/.vim/plugged/ale/autoload/ale/pattern_options.vim, dotfiles/.vim/plugged/ale/autoload/ale/powershell.vim, dotfiles/.vim/plugged/ale/autoload/ale/preview.vim, dotfiles/.vim/plugged/ale/autoload/ale/python.vim, dotfiles/.vim/plugged/ale/autoload/ale/racket.vim, dotfiles/.vim/plugged/ale/autoload/ale/references.vim, dotfiles/.vim/plugged/ale/autoload/ale/rename.vim, dotfiles/.vim/plugged/ale/autoload/ale/ruby.vim, dotfiles/.vim/plugged/ale/autoload/ale/semver.vim, dotfiles/.vim/plugged/ale/autoload/ale/sign.vim, dotfiles/.vim/plugged/ale/autoload/ale/socket.vim, dotfiles/.vim/plugged/ale/autoload/ale/statusline.vim, dotfiles/.vim/plugged/ale/autoload/ale/swift.vim, dotfiles/.vim/plugged/ale/autoload/ale/symbol.vim, dotfiles/.vim/plugged/ale/autoload/ale/test.vim, dotfiles/.vim/plugged/ale/autoload/ale/toggle.vim, dotfiles/.vim/plugged/ale/autoload/ale/uri.vim, dotfiles/.vim/plugged/ale/autoload/ale/util.vim, dotfiles/.vim/plugged/ale/autoload/ale/virtualtext.vim, dotfiles/.vim/plugged/ale/autoload/asyncomplete/sources/ale.vim, dotfiles/.vim/plugged/ale/autoload/ale.vim, dotfiles/.vim/plugged/ale/doc/ale-ada.txt, dotfiles/.vim/plugged/ale/doc/ale-ansible.txt, dotfiles/.vim/plugged/ale/doc/ale-apkbuild.txt, dotfiles/.vim/plugged/ale/doc/ale-asciidoc.txt, dotfiles/.vim/plugged/ale/doc/ale-asm.txt, dotfiles/.vim/plugged/ale/doc/ale-avra.txt, dotfiles/.vim/plugged/ale/doc/ale-awk.txt, dotfiles/.vim/plugged/ale/doc/ale-bats.txt, dotfiles/.vim/plugged/ale/doc/ale-bazel.txt, dotfiles/.vim/plugged/ale/doc/ale-bib.txt, dotfiles/.vim/plugged/ale/doc/ale-bicep.txt, dotfiles/.vim/plugged/ale/doc/ale-bitbake.txt, dotfiles/.vim/plugged/ale/doc/ale-c.txt, dotfiles/.vim/plugged/ale/doc/ale-cairo.txt, dotfiles/.vim/plugged/ale/doc/ale-chef.txt, dotfiles/.vim/plugged/ale/doc/ale-clojure.txt, dotfiles/.vim/plugged/ale/doc/ale-cloudformation.txt, dotfiles/.vim/plugged/ale/doc/ale-cmake.txt, dotfiles/.vim/plugged/ale/doc/ale-cpp.txt, dotfiles/.vim/plugged/ale/doc/ale-cs.txt, dotfiles/.vim/plugged/ale/doc/ale-css.txt, dotfiles/.vim/plugged/ale/doc/ale-cuda.txt, dotfiles/.vim/plugged/ale/doc/ale-d.txt, dotfiles/.vim/plugged/ale/doc/ale-dafny.txt, dotfiles/.vim/plugged/ale/doc/ale-dart.txt, dotfiles/.vim/plugged/ale/doc/ale-desktop.txt, dotfiles/.vim/plugged/ale/doc/ale-development.txt, dotfiles/.vim/plugged/ale/doc/ale-dhall.txt, dotfiles/.vim/plugged/ale/doc/ale-dockerfile.txt, dotfiles/.vim/plugged/ale/doc/ale-elixir.txt, dotfiles/.vim/plugged/ale/doc/ale-elm.txt, dotfiles/.vim/plugged/ale/doc/ale-erlang.txt, dotfiles/.vim/plugged/ale/doc/ale-eruby.txt, dotfiles/.vim/plugged/ale/doc/ale-fish.txt, dotfiles/.vim/plugged/ale/doc/ale-fortran.txt, dotfiles/.vim/plugged/ale/doc/ale-fountain.txt, dotfiles/.vim/plugged/ale/doc/ale-fuse.txt, dotfiles/.vim/plugged/ale/doc/ale-gitcommit.txt, dotfiles/.vim/plugged/ale/doc/ale-glsl.txt, dotfiles/.vim/plugged/ale/doc/ale-go.txt, dotfiles/.vim/plugged/ale/doc/ale-graphql.txt, dotfiles/.vim/plugged/ale/doc/ale-hack.txt, dotfiles/.vim/plugged/ale/doc/ale-handlebars.txt, dotfiles/.vim/plugged/ale/doc/ale-haskell.txt, dotfiles/.vim/plugged/ale/doc/ale-hcl.txt, dotfiles/.vim/plugged/ale/doc/ale-help.txt, dotfiles/.vim/plugged/ale/doc/ale-html.txt, dotfiles/.vim/plugged/ale/doc/ale-idris.txt, dotfiles/.vim/plugged/ale/doc/ale-ink.txt, dotfiles/.vim/plugged/ale/doc/ale-inko.txt, dotfiles/.vim/plugged/ale/doc/ale-ispc.txt, dotfiles/.vim/plugged/ale/doc/ale-java.txt, dotfiles/.vim/plugged/ale/doc/ale-javascript.txt, dotfiles/.vim/plugged/ale/doc/ale-json.txt, dotfiles/.vim/plugged/ale/doc/ale-json5.txt, dotfiles/.vim/plugged/ale/doc/ale-jsonc.txt, dotfiles/.vim/plugged/ale/doc/ale-jsonnet.txt, dotfiles/.vim/plugged/ale/doc/ale-julia.txt, dotfiles/.vim/plugged/ale/doc/ale-kotlin.txt, dotfiles/.vim/plugged/ale/doc/ale-latex.txt, dotfiles/.vim/plugged/ale/doc/ale-less.txt, dotfiles/.vim/plugged/ale/doc/ale-llvm.txt, dotfiles/.vim/plugged/ale/doc/ale-lua.txt, dotfiles/.vim/plugged/ale/doc/ale-markdown.txt, dotfiles/.vim/plugged/ale/doc/ale-mercury.txt, dotfiles/.vim/plugged/ale/doc/ale-nasm.txt, dotfiles/.vim/plugged/ale/doc/ale-nim.txt, dotfiles/.vim/plugged/ale/doc/ale-nix.txt, dotfiles/.vim/plugged/ale/doc/ale-nroff.txt, dotfiles/.vim/plugged/ale/doc/ale-objc.txt, dotfiles/.vim/plugged/ale/doc/ale-objcpp.txt, dotfiles/.vim/plugged/ale/doc/ale-ocaml.txt, dotfiles/.vim/plugged/ale/doc/ale-openapi.txt, dotfiles/.vim/plugged/ale/doc/ale-openscad.txt, dotfiles/.vim/plugged/ale/doc/ale-packer.txt, dotfiles/.vim/plugged/ale/doc/ale-pascal.txt, dotfiles/.vim/plugged/ale/doc/ale-pawn.txt, dotfiles/.vim/plugged/ale/doc/ale-perl.txt, dotfiles/.vim/plugged/ale/doc/ale-perl6.txt, dotfiles/.vim/plugged/ale/doc/ale-php.txt, dotfiles/.vim/plugged/ale/doc/ale-po.txt, dotfiles/.vim/plugged/ale/doc/ale-pod.txt, dotfiles/.vim/plugged/ale/doc/ale-pony.txt, dotfiles/.vim/plugged/ale/doc/ale-powershell.txt, dotfiles/.vim/plugged/ale/doc/ale-prolog.txt, dotfiles/.vim/plugged/ale/doc/ale-proto.txt, dotfiles/.vim/plugged/ale/doc/ale-pug.txt, dotfiles/.vim/plugged/ale/doc/ale-puppet.txt, dotfiles/.vim/plugged/ale/doc/ale-purescript.txt, dotfiles/.vim/plugged/ale/doc/ale-pyrex.txt, dotfiles/.vim/plugged/ale/doc/ale-python.txt, dotfiles/.vim/plugged/ale/doc/ale-qml.txt, dotfiles/.vim/plugged/ale/doc/ale-r.txt, dotfiles/.vim/plugged/ale/doc/ale-reasonml.txt, dotfiles/.vim/plugged/ale/doc/ale-rego.txt, dotfiles/.vim/plugged/ale/doc/ale-restructuredtext.txt, dotfiles/.vim/plugged/ale/doc/ale-robot.txt, dotfiles/.vim/plugged/ale/doc/ale-ruby.txt, dotfiles/.vim/plugged/ale/doc/ale-rust.txt, dotfiles/.vim/plugged/ale/doc/ale-salt.tmt, dotfiles/.vim/plugged/ale/doc/ale-sass.txt, dotfiles/.vim/plugged/ale/doc/ale-scala.txt, dotfiles/.vim/plugged/ale/doc/ale-scss.txt, dotfiles/.vim/plugged/ale/doc/ale-sh.txt, dotfiles/.vim/plugged/ale/doc/ale-sml.txt, dotfiles/.vim/plugged/ale/doc/ale-solidity.txt, dotfiles/.vim/plugged/ale/doc/ale-spec.txt, dotfiles/.vim/plugged/ale/doc/ale-sql.txt, dotfiles/.vim/plugged/ale/doc/ale-stylus.txt, dotfiles/.vim/plugged/ale/doc/ale-sugarss.txt, dotfiles/.vim/plugged/ale/doc/ale-supported-languages-and-tools.txt, dotfiles/.vim/plugged/ale/doc/ale-svelte.txt, dotfiles/.vim/plugged/ale/doc/ale-swift.txt, dotfiles/.vim/plugged/ale/doc/ale-systemd.txt, dotfiles/.vim/plugged/ale/doc/ale-tcl.txt, dotfiles/.vim/plugged/ale/doc/ale-terraform.txt, dotfiles/.vim/plugged/ale/doc/ale-tex.txt, dotfiles/.vim/plugged/ale/doc/ale-texinfo.txt, dotfiles/.vim/plugged/ale/doc/ale-text.txt, dotfiles/.vim/plugged/ale/doc/ale-thrift.txt, dotfiles/.vim/plugged/ale/doc/ale-toml.txt, dotfiles/.vim/plugged/ale/doc/ale-typescript.txt, dotfiles/.vim/plugged/ale/doc/ale-v.txt, dotfiles/.vim/plugged/ale/doc/ale-vala.txt, dotfiles/.vim/plugged/ale/doc/ale-verilog.txt, dotfiles/.vim/plugged/ale/doc/ale-vhdl.txt, dotfiles/.vim/plugged/ale/doc/ale-vim-help.txt, dotfiles/.vim/plugged/ale/doc/ale-vim.txt, dotfiles/.vim/plugged/ale/doc/ale-vue.txt, dotfiles/.vim/plugged/ale/doc/ale-wgsl.txt, dotfiles/.vim/plugged/ale/doc/ale-xhtml.txt, dotfiles/.vim/plugged/ale/doc/ale-xml.txt, dotfiles/.vim/plugged/ale/doc/ale-yaml.txt, dotfiles/.vim/plugged/ale/doc/ale-yang.txt, dotfiles/.vim/plugged/ale/doc/ale-zeek.txt, dotfiles/.vim/plugged/ale/doc/ale-zig.txt, dotfiles/.vim/plugged/ale/doc/ale.txt, dotfiles/.vim/plugged/ale/ftplugin/ale-fix-suggest.vim, dotfiles/.vim/plugged/ale/ftplugin/ale-preview-selection.vim, dotfiles/.vim/plugged/ale/ftplugin/ale-preview.vim, dotfiles/.vim/plugged/ale/plugin/ale.vim, dotfiles/.vim/plugged/ale/rplugin/python3/deoplete/sources/ale.py, dotfiles/.vim/plugged/ale/syntax/ale-fix-suggest.vim, dotfiles/.vim/plugged/ale/syntax/ale-preview-selection.vim, dotfiles/.vim/plugged/ale/test/.config/nvim/init.vim, dotfiles/.vim/plugged/ale/test/completion/test_ale_import_command.vader, dotfiles/.vim/plugged/ale/test/completion/test_complete_events.vader, dotfiles/.vim/plugged/ale/test/completion/test_completion_events.vader, dotfiles/.vim/plugged/ale/test/completion/test_completion_filtering.vader, dotfiles/.vim/plugged/ale/test/completion/test_completion_prefixes.vader, dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_messages.vader, dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_parsing.vader, dotfiles/.vim/plugged/ale/test/completion/test_omnifunc_completion.vader, dotfiles/.vim/plugged/ale/test/completion/test_public_completion_api.vader, dotfiles/.vim/plugged/ale/test/completion/test_tsserver_completion_parsing.vader, dotfiles/.vim/plugged/ale/test/fix/test_ale_fix.vader, dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_aliases.vader, dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion.vader, dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion_filter.vader, dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_ignore.vader, dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_suggest.vader, dotfiles/.vim/plugged/ale/test/fixers/test_appleswiftformat_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_astyle_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_autoflake_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_autoimport_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_autopep8_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_bibclean_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_black_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_break_up_long_lines_python_fixer.vader, dotfiles/.vim/plugged/ale/test/fixers/test_brittany_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_buf_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_buildifier_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_clangformat_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_clangtidy_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_cmakeformat_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_crystal_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_css_beautify_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dart_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dartfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dhall_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dhall_freeze_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dhall_lint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dotnet_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dprint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_dune_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_elm_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_erblint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_erlfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_eslint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_fecs_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_fish_indent_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_fixjson_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_floskell_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_gnatpp_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_gofmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_gofumpt_fixer.vader, dotfiles/.vim/plugged/ale/test/fixers/test_goimports_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_golines_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_gomod_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_goofle_java_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_hackfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_hfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_hindent_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_hlint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_html_beautify_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_importjs_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_isort_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_jq_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_jsonnetfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_ktlint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_latexindent_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_lua_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_luafmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_mix_format_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_nimpretty_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_nixfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_nixpkgsfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_ocamlformat_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_ocp_indent_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_opa_fmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_ormolu_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_packer_fmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_pandoc_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_perltidy_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_pgformatter_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_php_cs_fixer.vader, dotfiles/.vim/plugged/ale/test/fixers/test_phpcbf_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_pint_fixer.vader, dotfiles/.vim/plugged/ale/test/fixers/test_prettier_eslint_fixer.callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_prettier_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_prettier_standard_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_protolint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_ptop_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_puppetlint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_purs_tidy_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_purty_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_pyflyby_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_python_add_blank_lines_fixer.vader, dotfiles/.vim/plugged/ale/test/fixers/test_qmlfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_refmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_remark_lint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_reorder_python_imports_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_rubocop_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_rufo_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_rustfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_scalafmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_shfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_sorbet_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_sqlfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_sqlformat_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_standard_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_standardrb_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_statix_fixer.vader, dotfiles/.vim/plugged/ale/test/fixers/test_stylelint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_styler_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_stylish_haskell_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_stylua_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_swiftformat_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_syntax_tree_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_terraform_fmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_textlint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_tidy_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_trim_whitespace.vader, dotfiles/.vim/plugged/ale/test/fixers/test_tslint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_uncrustify_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_vfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_vim_help_tags_alignment_fixer.vader, dotfiles/.vim/plugged/ale/test/fixers/test_xmllint_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_xo_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_xots_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_yamlfix_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_yapf_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/fixers/test_zigfmt_fixer_callback.vader, dotfiles/.vim/plugged/ale/test/handler/test_actionlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ada_gcc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_alex_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ameba_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ansible_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_appleswiftformat_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_asm_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_atools_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_avra_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_bandit_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_bashate_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_bibclean_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_bicep_bicep_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_bitbake_oelint_adv_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_brakeman_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_cfn_python_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_checkmake_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_checkov_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_checkstyle_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_circleci_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_clang_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_clojure_clj_kondo_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_clojure_joker_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_cmake_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_coffeelint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_common_handlers.vader, dotfiles/.vim/plugged/ale/test/handler/test_cookstyle_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_cppcheck_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_cpplint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_credo_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_crystal_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_csc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_cspell_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_cucumber_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_cuda_nvcc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_cypher_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_dafny_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_dart_analyze_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_debride_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_desktop_file_validate_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_dmd_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_dockerfile_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_dogma_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_drafter_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_elmmake_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_embertemplatelint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_erblint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_erlang_dialyzer_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_erlang_elvis_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_eslint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_eslint_json_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_fecs_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_fish_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_flake8_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_flakehell_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_flawfinder_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_flow_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_foodcritic_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_fortran_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_gawk_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_gcc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ghc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ghc_mod_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ghdl_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_gitlablint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_gitlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_glslang_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_go_generic_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_gobuild_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_golangci_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_gometalinter_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_hadolint.vader, dotfiles/.vim/plugged/ale/test/handler/test_haskell_stack_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_hlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ibm_openapi_validator_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_idris_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_inko_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ispc_ispc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_javac_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_jscs_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ktlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_lacheck_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_languagetool_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_lessc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_llc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_lua_selene_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_luac_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_luacheck_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_markdownlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_mcs_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_mcsc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_mdl_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_mercury_mmc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_mix_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_msgfmt_hander.vader, dotfiles/.vim/plugged/ale/test/handler/test_mypy_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_naga_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_nagelfar_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_nasm_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_nim_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_nix_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_openscad_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_perl6_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_perl_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_perlcritic_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_php_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_php_phan_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_php_phpmd_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_phpcs_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_phpstan_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_pmd_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_pony_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_powershell_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_prospector_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_psscriptanalyzer_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_puglint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_puppet_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_pycodestyle_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_pydocstyle_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_pyflakes_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_pylama_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_pylint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_pyrex_cython_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_qmlfmt_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_qmllint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_raco_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_rails_best_practices_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_redpen_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_reek_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_remark_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_rflint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_rpmlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_rstcheck_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_rubocop_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_ruby_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_rust_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_salt_salt_lint.vader, dotfiles/.vim/plugged/ale/test/handler/test_scala_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_scalastyle_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_shell_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_shellcheck_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_slim_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_sml_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_solc_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_solhint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_spectral_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_sqlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_sqllint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_standard_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_starknet_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_statix_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_stylelint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_swaglint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_swiftlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_swipl_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_syntaxerl_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_systemd_analyze_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_terraform_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_textlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_tflint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_tfsec_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_thrift_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_thriftcheck_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_tlint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_tslint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_typecheck_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_unimport_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_v_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_vala_lint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_vale_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_vcom_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_verilator_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_vint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_vlog_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_vulture_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_write_good_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_xmllint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_xvhdl_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_xvlog_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_yamllint_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_yosys_handler.vader, dotfiles/.vim/plugged/ale/test/handler/test_zeek_handler.vader, dotfiles/.vim/plugged/ale/test/jsonnet_files/testfile.jsonnet, dotfiles/.vim/plugged/ale/test/linter/test_ada_gcc.vader, dotfiles/.vim/plugged/ale/test/linter/test_adals.vader, dotfiles/.vim/plugged/ale/test/linter/test_alex.vader, dotfiles/.vim/plugged/ale/test/linter/test_ameba.vader, dotfiles/.vim/plugged/ale/test/linter/test_angular.vader, dotfiles/.vim/plugged/ale/test/linter/test_ansible_lint.vader, dotfiles/.vim/plugged/ale/test/linter/test_asciidoc_textlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_asm_gcc.vader, dotfiles/.vim/plugged/ale/test/linter/test_avra_avra.vader, dotfiles/.vim/plugged/ale/test/linter/test_bandit.vader, dotfiles/.vim/plugged/ale/test/linter/test_bashate.vader, dotfiles/.vim/plugged/ale/test/linter/test_bib_bibclean.vader, dotfiles/.vim/plugged/ale/test/linter/test_bicep_bicep.vader, dotfiles/.vim/plugged/ale/test/linter/test_bingo.vader, dotfiles/.vim/plugged/ale/test/linter/test_bitbake.vader, dotfiles/.vim/plugged/ale/test/linter/test_brakeman.vader, dotfiles/.vim/plugged/ale/test/linter/test_buf_lint.vader, dotfiles/.vim/plugged/ale/test/linter/test_c_cc.vader, dotfiles/.vim/plugged/ale/test/linter/test_c_ccls.vader, dotfiles/.vim/plugged/ale/test/linter/test_c_clang_tidy.vader, dotfiles/.vim/plugged/ale/test/linter/test_c_clangd.vader, dotfiles/.vim/plugged/ale/test/linter/test_c_cppcheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_c_cquery.vader, dotfiles/.vim/plugged/ale/test/linter/test_c_flawfinder.vader, dotfiles/.vim/plugged/ale/test/linter/test_c_import_paths.vader, dotfiles/.vim/plugged/ale/test/linter/test_cargo.vader, dotfiles/.vim/plugged/ale/test/linter/test_checkov.vader, dotfiles/.vim/plugged/ale/test/linter/test_checkstyle.vader, dotfiles/.vim/plugged/ale/test/linter/test_circleci.vader, dotfiles/.vim/plugged/ale/test/linter/test_clang_tidy.vader, dotfiles/.vim/plugged/ale/test/linter/test_clj_kondo.vader, dotfiles/.vim/plugged/ale/test/linter/test_cmake_cmake_lint.vader, dotfiles/.vim/plugged/ale/test/linter/test_cookstyle.vader, dotfiles/.vim/plugged/ale/test/linter/test_cpp_cc.vader, dotfiles/.vim/plugged/ale/test/linter/test_cpp_ccls.vader, dotfiles/.vim/plugged/ale/test/linter/test_cpp_clangcheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_cpp_clazy.vader, dotfiles/.vim/plugged/ale/test/linter/test_cpp_cppcheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_cpp_cquery.vader, dotfiles/.vim/plugged/ale/test/linter/test_cpp_flawfinder.vader, dotfiles/.vim/plugged/ale/test/linter/test_cpplint.vader, dotfiles/.vim/plugged/ale/test/linter/test_cs_csc.vader, dotfiles/.vim/plugged/ale/test/linter/test_cs_mcs.vader, dotfiles/.vim/plugged/ale/test/linter/test_cs_mcsc.vader, dotfiles/.vim/plugged/ale/test/linter/test_cspell.vader, dotfiles/.vim/plugged/ale/test/linter/test_cucumber.vader, dotfiles/.vim/plugged/ale/test/linter/test_cuda_nvcc.vader, dotfiles/.vim/plugged/ale/test/linter/test_cypher_cypher_lint.vader, dotfiles/.vim/plugged/ale/test/linter/test_d_dls.vader, dotfiles/.vim/plugged/ale/test/linter/test_dart_analysis_server.vader, dotfiles/.vim/plugged/ale/test/linter/test_dart_language_server.vader, dotfiles/.vim/plugged/ale/test/linter/test_desktop_file_validate.vader, dotfiles/.vim/plugged/ale/test/linter/test_dialyxir.vader, dotfiles/.vim/plugged/ale/test/linter/test_dmd_commandline.vader, dotfiles/.vim/plugged/ale/test/linter/test_dockerfile_lint.vader, dotfiles/.vim/plugged/ale/test/linter/test_dogma.vader, dotfiles/.vim/plugged/ale/test/linter/test_eclipselsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_elixir_credo.vader, dotfiles/.vim/plugged/ale/test/linter/test_elixir_ls.vader, dotfiles/.vim/plugged/ale/test/linter/test_elixir_mix.vader, dotfiles/.vim/plugged/ale/test/linter/test_elm_ls.vader, dotfiles/.vim/plugged/ale/test/linter/test_elm_make.vader, dotfiles/.vim/plugged/ale/test/linter/test_embertemplatelint.vader, dotfiles/.vim/plugged/ale/test/linter/test_erb.vader, dotfiles/.vim/plugged/ale/test/linter/test_erblint.vader, dotfiles/.vim/plugged/ale/test/linter/test_erlang_dialyzer.vader, dotfiles/.vim/plugged/ale/test/linter/test_erlang_elvis.vader, dotfiles/.vim/plugged/ale/test/linter/test_erlang_erlc.vader, dotfiles/.vim/plugged/ale/test/linter/test_erlang_syntaxerl.vader, dotfiles/.vim/plugged/ale/test/linter/test_erubi.vader, dotfiles/.vim/plugged/ale/test/linter/test_erubis.vader, dotfiles/.vim/plugged/ale/test/linter/test_eslint.vader, dotfiles/.vim/plugged/ale/test/linter/test_fecs.vader, dotfiles/.vim/plugged/ale/test/linter/test_flake8.vader, dotfiles/.vim/plugged/ale/test/linter/test_flakehell.vader, dotfiles/.vim/plugged/ale/test/linter/test_flow.vader, dotfiles/.vim/plugged/ale/test/linter/test_foodcritic.vader, dotfiles/.vim/plugged/ale/test/linter/test_fortran_fortls.vader, dotfiles/.vim/plugged/ale/test/linter/test_fsc.vader, dotfiles/.vim/plugged/ale/test/linter/test_fusionlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_gawk.vader, dotfiles/.vim/plugged/ale/test/linter/test_gfortran.vader, dotfiles/.vim/plugged/ale/test/linter/test_ghdl.vader, dotfiles/.vim/plugged/ale/test/linter/test_gitlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_glslang.vader, dotfiles/.vim/plugged/ale/test/linter/test_glslls.vader, dotfiles/.vim/plugged/ale/test/linter/test_gobuild.vader, dotfiles/.vim/plugged/ale/test/linter/test_gofmt.vader, dotfiles/.vim/plugged/ale/test/linter/test_golangci_lint.vader, dotfiles/.vim/plugged/ale/test/linter/test_golangserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_golint.vader, dotfiles/.vim/plugged/ale/test/linter/test_gometalinter.vader, dotfiles/.vim/plugged/ale/test/linter/test_gopls.vader, dotfiles/.vim/plugged/ale/test/linter/test_gosimple.vader, dotfiles/.vim/plugged/ale/test/linter/test_gotype.vader, dotfiles/.vim/plugged/ale/test/linter/test_govet.vader, dotfiles/.vim/plugged/ale/test/linter/test_graphql_gqlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_haml_hamllint.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_cabal_ghc.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc_mod.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_hdevtools.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_hie.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_hlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_hls.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_build.vader, dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_ghc.vader, dotfiles/.vim/plugged/ale/test/linter/test_hdl_checker_options.vader, dotfiles/.vim/plugged/ale/test/linter/test_html_stylelint.vader, dotfiles/.vim/plugged/ale/test/linter/test_htmlhint.vader, dotfiles/.vim/plugged/ale/test/linter/test_ibm_openapi_validator.vader, dotfiles/.vim/plugged/ale/test/linter/test_idris.vader, dotfiles/.vim/plugged/ale/test/linter/test_ink_ls.vader, dotfiles/.vim/plugged/ale/test/linter/test_inko_inko.vader, dotfiles/.vim/plugged/ale/test/linter/test_ispc_ispc.vader, dotfiles/.vim/plugged/ale/test/linter/test_iverilog.vader, dotfiles/.vim/plugged/ale/test/linter/test_javac.vader, dotfiles/.vim/plugged/ale/test/linter/test_javalsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_javascript_deno_lsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_javascript_tsserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_jq.vader, dotfiles/.vim/plugged/ale/test/linter/test_jscs.vader, dotfiles/.vim/plugged/ale/test/linter/test_jshint.vader, dotfiles/.vim/plugged/ale/test/linter/test_jsonnet_lint.vader, dotfiles/.vim/plugged/ale/test/linter/test_jsonnetfmt.vader, dotfiles/.vim/plugged/ale/test/linter/test_julia_languageserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_kotlin_languageserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_kotlinc.vader, dotfiles/.vim/plugged/ale/test/linter/test_languagetool.vader, dotfiles/.vim/plugged/ale/test/linter/test_less_stylelint.vader, dotfiles/.vim/plugged/ale/test/linter/test_lessc.vader, dotfiles/.vim/plugged/ale/test/linter/test_lintr.vader, dotfiles/.vim/plugged/ale/test/linter/test_llc.vader, dotfiles/.vim/plugged/ale/test/linter/test_lua_selene.vader, dotfiles/.vim/plugged/ale/test/linter/test_luac.vader, dotfiles/.vim/plugged/ale/test/linter/test_luacheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_markdown_markdownlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_markdown_mdl.vader, dotfiles/.vim/plugged/ale/test/linter/test_markdown_vale.vader, dotfiles/.vim/plugged/ale/test/linter/test_mercury_mmc.vader, dotfiles/.vim/plugged/ale/test/linter/test_mypy.vader, dotfiles/.vim/plugged/ale/test/linter/test_naga.vader, dotfiles/.vim/plugged/ale/test/linter/test_nagelfar.vader, dotfiles/.vim/plugged/ale/test/linter/test_nasm_nasm.vader, dotfiles/.vim/plugged/ale/test/linter/test_nimlsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_nix_statix.vader, dotfiles/.vim/plugged/ale/test/linter/test_objc_ccls.vader, dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ocamllsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ols.vader, dotfiles/.vim/plugged/ale/test/linter/test_ocamlinterface_ocamllsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_openscad_sca2d.vader, dotfiles/.vim/plugged/ale/test/linter/test_perl.vader, dotfiles/.vim/plugged/ale/test/linter/test_perl6.vader, dotfiles/.vim/plugged/ale/test/linter/test_perlcritic.vader, dotfiles/.vim/plugged/ale/test/linter/test_php.vader, dotfiles/.vim/plugged/ale/test/linter/test_php_intelephense.vader, dotfiles/.vim/plugged/ale/test/linter/test_php_langserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_phpactor.vader, dotfiles/.vim/plugged/ale/test/linter/test_phpcs.vader, dotfiles/.vim/plugged/ale/test/linter/test_phpmd.vader, dotfiles/.vim/plugged/ale/test/linter/test_phpstan.vader, dotfiles/.vim/plugged/ale/test/linter/test_pony_ponyc.vader, dotfiles/.vim/plugged/ale/test/linter/test_prospector.vader, dotfiles/.vim/plugged/ale/test/linter/test_proto.vader, dotfiles/.vim/plugged/ale/test/linter/test_protolint.vader, dotfiles/.vim/plugged/ale/test/linter/test_psalm.vader, dotfiles/.vim/plugged/ale/test/linter/test_puglint.vader, dotfiles/.vim/plugged/ale/test/linter/test_purescript_ls.vader, dotfiles/.vim/plugged/ale/test/linter/test_pycodestyle.vader, dotfiles/.vim/plugged/ale/test/linter/test_pydocstyle.vader, dotfiles/.vim/plugged/ale/test/linter/test_pyflakes.vader, dotfiles/.vim/plugged/ale/test/linter/test_pylama.vader, dotfiles/.vim/plugged/ale/test/linter/test_pylint.vader, dotfiles/.vim/plugged/ale/test/linter/test_pylsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_pyre.vader, dotfiles/.vim/plugged/ale/test/linter/test_pyrex_cython.vader, dotfiles/.vim/plugged/ale/test/linter/test_pyright.vader, dotfiles/.vim/plugged/ale/test/linter/test_qmlfmt.vader, dotfiles/.vim/plugged/ale/test/linter/test_r_languageserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_racket_langserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_racket_raco.vader, dotfiles/.vim/plugged/ale/test/linter/test_rails_best_practices.vader, dotfiles/.vim/plugged/ale/test/linter/test_reason_ls.vader, dotfiles/.vim/plugged/ale/test/linter/test_reason_ols.vader, dotfiles/.vim/plugged/ale/test/linter/test_reek.vader, dotfiles/.vim/plugged/ale/test/linter/test_rego_opacheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_remark_lint.vader, dotfiles/.vim/plugged/ale/test/linter/test_revive.vader, dotfiles/.vim/plugged/ale/test/linter/test_rflint.vader, dotfiles/.vim/plugged/ale/test/linter/test_rnix.vader, dotfiles/.vim/plugged/ale/test/linter/test_rst_textlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_rubocop.vader, dotfiles/.vim/plugged/ale/test/linter/test_ruby.vader, dotfiles/.vim/plugged/ale/test/linter/test_ruby_debride.vader, dotfiles/.vim/plugged/ale/test/linter/test_ruby_solargraph.vader, dotfiles/.vim/plugged/ale/test/linter/test_rust_analyzer.vader, dotfiles/.vim/plugged/ale/test/linter/test_rust_rls.vader, dotfiles/.vim/plugged/ale/test/linter/test_rustc.vader, dotfiles/.vim/plugged/ale/test/linter/test_ruumba.vader, dotfiles/.vim/plugged/ale/test/linter/test_sass_sasslint.vader, dotfiles/.vim/plugged/ale/test/linter/test_scala_metals.vader, dotfiles/.vim/plugged/ale/test/linter/test_scala_sbtserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_scalac.vader, dotfiles/.vim/plugged/ale/test/linter/test_scalastyle.vader, dotfiles/.vim/plugged/ale/test/linter/test_scss_sasslint.vader, dotfiles/.vim/plugged/ale/test/linter/test_scss_stylelint.vader, dotfiles/.vim/plugged/ale/test/linter/test_shellcheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_slimlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_solc.vader, dotfiles/.vim/plugged/ale/test/linter/test_solc_commit.vader, dotfiles/.vim/plugged/ale/test/linter/test_solhint.vader, dotfiles/.vim/plugged/ale/test/linter/test_sorbet.vader, dotfiles/.vim/plugged/ale/test/linter/test_spectral.vader, dotfiles/.vim/plugged/ale/test/linter/test_sqllint.vader, dotfiles/.vim/plugged/ale/test/linter/test_standard.vader, dotfiles/.vim/plugged/ale/test/linter/test_standardrb.vader, dotfiles/.vim/plugged/ale/test/linter/test_standardts.vader, dotfiles/.vim/plugged/ale/test/linter/test_starknet.vader, dotfiles/.vim/plugged/ale/test/linter/test_staticcheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_sugarss_stylelint.vader, dotfiles/.vim/plugged/ale/test/linter/test_svelteserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_swaglint.vader, dotfiles/.vim/plugged/ale/test/linter/test_swift_appleswiftformat.vader, dotfiles/.vim/plugged/ale/test/linter/test_swift_sourcekitlsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_swiftlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_systemd_analyze.vader, dotfiles/.vim/plugged/ale/test/linter/test_terraform_ls.vader, dotfiles/.vim/plugged/ale/test/linter/test_terraform_lsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_terraform_terraform.vader, dotfiles/.vim/plugged/ale/test/linter/test_terraform_tflint.vader, dotfiles/.vim/plugged/ale/test/linter/test_terraform_tfsec.vader, dotfiles/.vim/plugged/ale/test/linter/test_tex_lacheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_tex_textlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_texlab.vader, dotfiles/.vim/plugged/ale/test/linter/test_textlint.vader, dotfiles/.vim/plugged/ale/test/linter/test_thrift.vader, dotfiles/.vim/plugged/ale/test/linter/test_thriftcheck.vader, dotfiles/.vim/plugged/ale/test/linter/test_tslint.vader, dotfiles/.vim/plugged/ale/test/linter/test_typescript_deno_lsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_typescript_tsserver.vader, dotfiles/.vim/plugged/ale/test/linter/test_unimport.vader, dotfiles/.vim/plugged/ale/test/linter/test_v_command_callback.vader, dotfiles/.vim/plugged/ale/test/linter/test_vcom.vader, dotfiles/.vim/plugged/ale/test/linter/test_verilator.vader, dotfiles/.vim/plugged/ale/test/linter/test_vim_vimls.vader, dotfiles/.vim/plugged/ale/test/linter/test_vint.vader, dotfiles/.vim/plugged/ale/test/linter/test_vlog.vader, dotfiles/.vim/plugged/ale/test/linter/test_volar.vader, dotfiles/.vim/plugged/ale/test/linter/test_vulture.vader, dotfiles/.vim/plugged/ale/test/linter/test_write_good.vader, dotfiles/.vim/plugged/ale/test/linter/test_xmllint.vader, dotfiles/.vim/plugged/ale/test/linter/test_xo.vader, dotfiles/.vim/plugged/ale/test/linter/test_xots.vader, dotfiles/.vim/plugged/ale/test/linter/test_xvhdl.vader, dotfiles/.vim/plugged/ale/test/linter/test_xvlog.vader, dotfiles/.vim/plugged/ale/test/linter/test_yaml_ls.vader, dotfiles/.vim/plugged/ale/test/linter/test_yang_lsp.vader, dotfiles/.vim/plugged/ale/test/linter/test_zeek.vader, dotfiles/.vim/plugged/ale/test/linter/test_zig_zls.vader, dotfiles/.vim/plugged/ale/test/lsp/test_closing_documents.vader, dotfiles/.vim/plugged/ale/test/lsp/test_did_save_event.vader, dotfiles/.vim/plugged/ale/test/lsp/test_engine_lsp_response_handling.vader, dotfiles/.vim/plugged/ale/test/lsp/test_handling_window_requests.vader, dotfiles/.vim/plugged/ale/test/lsp/test_lsp_client_messages.vader, dotfiles/.vim/plugged/ale/test/lsp/test_lsp_command_formatting.vader, dotfiles/.vim/plugged/ale/test/lsp/test_lsp_connections.vader, dotfiles/.vim/plugged/ale/test/lsp/test_lsp_custom_request.vader, dotfiles/.vim/plugged/ale/test/lsp/test_lsp_error_parsing.vader, dotfiles/.vim/plugged/ale/test/lsp/test_lsp_root_detection.vader, dotfiles/.vim/plugged/ale/test/lsp/test_lsp_startup.vader, dotfiles/.vim/plugged/ale/test/lsp/test_other_initialize_message_handling.vader, dotfiles/.vim/plugged/ale/test/lsp/test_read_lsp_diagnostics.vader, dotfiles/.vim/plugged/ale/test/lsp/test_reset_lsp.vader, dotfiles/.vim/plugged/ale/test/lsp/test_update_config.vader, dotfiles/.vim/plugged/ale/test/python/test_deoplete_source.py, dotfiles/.vim/plugged/ale/test/script/block-padding-checker, dotfiles/.vim/plugged/ale/test/script/check-duplicate-tags, dotfiles/.vim/plugged/ale/test/script/check-supported-tools-tables, dotfiles/.vim/plugged/ale/test/script/check-tag-alignment, dotfiles/.vim/plugged/ale/test/script/check-tag-references, dotfiles/.vim/plugged/ale/test/script/check-toc, dotfiles/.vim/plugged/ale/test/script/custom-checks, dotfiles/.vim/plugged/ale/test/script/custom-linting-rules, dotfiles/.vim/plugged/ale/test/script/dumb_named_pipe_server.py, dotfiles/.vim/plugged/ale/test/script/dumb_tcp_client.py, dotfiles/.vim/plugged/ale/test/script/dumb_tcp_server.py, dotfiles/.vim/plugged/ale/test/script/run-vader-tests, dotfiles/.vim/plugged/ale/test/script/run-vint, dotfiles/.vim/plugged/ale/test/sign/test_linting_sets_signs.vader, dotfiles/.vim/plugged/ale/test/sign/test_sign_column_highlighting.vader, dotfiles/.vim/plugged/ale/test/sign/test_sign_limits.vader, dotfiles/.vim/plugged/ale/test/sign/test_sign_parsing.vader, dotfiles/.vim/plugged/ale/test/sign/test_sign_placement.vader, dotfiles/.vim/plugged/ale/test/test-files/.circleci/config.yml, dotfiles/.vim/plugged/ale/test/test-files/ada/testfile.adb, dotfiles/.vim/plugged/ale/test/test-files/alex/node-modules/node_modules/.bin/alex, dotfiles/.vim/plugged/ale/test/test-files/alex/node-modules-2/node_modules/alex/cli.js, dotfiles/.vim/plugged/ale/test/test-files/angular/node_modules/@angular/language-server/bin/ngserver, dotfiles/.vim/plugged/ale/test/test-files/angular/node_modules/@angular/language-service/dummy, dotfiles/.vim/plugged/ale/test/test-files/ant/ant-project/build.xml, dotfiles/.vim/plugged/ale/test/test-files/ant/bin/ant, dotfiles/.vim/plugged/ale/test/test-files/ant/bin/ant.exe, dotfiles/.vim/plugged/ale/test/test-files/bazel/BUILD, dotfiles/.vim/plugged/ale/test/test-files/bazel/WORKSPACE, dotfiles/.vim/plugged/ale/test/test-files/bazel/defs.bzl, dotfiles/.vim/plugged/ale/test/test-files/bib/dummy.bib, dotfiles/.vim/plugged/ale/test/test-files/c/build_compile_commands_project/build/bad_folder_to_test_priority, dotfiles/.vim/plugged/ale/test/test-files/c/build_compile_commands_project/build/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/include/test.h, dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/subdir/Makefile, dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/Makefile, dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/configure, dotfiles/.vim/plugged/ale/test/test-files/c/git_and_nested_makefiles/include/test.h, dotfiles/.vim/plugged/ale/test/test-files/c/git_and_nested_makefiles/src/Makefile, dotfiles/.vim/plugged/ale/test/test-files/c/gnumakefile_project/GNUmakefile, dotfiles/.vim/plugged/ale/test/test-files/c/gnumakefile_project/file.c, dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/subdir/dummy, dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/Makefile, dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/test.h, dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/subdir/dummy, dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/Makefile, dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/test.hpp, dotfiles/.vim/plugged/ale/test/test-files/c/json_project/build/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/c/json_project/include/test.h, dotfiles/.vim/plugged/ale/test/test-files/c/json_project/subdir/dummy, dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/include/test.h, dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/args, dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/dummy, dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/file.c, dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/Makefile, dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/_astylerc, dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/args, dotfiles/.vim/plugged/ale/test/test-files/c/dummy.c, dotfiles/.vim/plugged/ale/test/test-files/cargo/workspace_paths/subpath/Cargo.toml, dotfiles/.vim/plugged/ale/test/test-files/cargo/workspace_paths/Cargo.toml, dotfiles/.vim/plugged/ale/test/test-files/cargo/Cargo.toml, dotfiles/.vim/plugged/ale/test/test-files/ccls/with_build_dir/unusual_build_dir_name/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/ccls/with_ccls/.ccls, dotfiles/.vim/plugged/ale/test/test-files/ccls/with_ccls-root/.ccls-root, dotfiles/.vim/plugged/ale/test/test-files/ccls/with_compile_commands_json/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/checkstyle/other_config.xml, dotfiles/.vim/plugged/ale/test/test-files/clangd/with_build_dir/unusual_build_dir_name/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/clangd/with_compile_commands/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/clangformat/with_clangformat/.clang-format, dotfiles/.vim/plugged/ale/test/test-files/cpp/.astylerc, dotfiles/.vim/plugged/ale/test/test-files/cpp/dummy.cpp, dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/two/three/file.c, dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/two/three/file.cpp, dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/cppcheck/with_build_dir/build/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/cquery/build/compile_commands.json, dotfiles/.vim/plugged/ale/test/test-files/cquery/with_cquery/.cquery, dotfiles/.vim/plugged/ale/test/test-files/cspell/node-modules/node_modules/.bin/cspell, dotfiles/.vim/plugged/ale/test/test-files/cspell/node-modules-2/node_modules/cspell/bin.js, dotfiles/.vim/plugged/ale/test/test-files/csslint/other-app/testfile.css, dotfiles/.vim/plugged/ale/test/test-files/csslint/some-app/subdir/testfile.css, dotfiles/.vim/plugged/ale/test/test-files/csslint/some-app/.csslintrc, dotfiles/.vim/plugged/ale/test/test-files/cucumber/features/step_definitions/base_steps.rb, dotfiles/.vim/plugged/ale/test/test-files/cucumber/features/cuke.feature, dotfiles/.vim/plugged/ale/test/test-files/d/test.d, dotfiles/.vim/plugged/ale/test/test-files/dart/.packages, dotfiles/.vim/plugged/ale/test/test-files/dart/testfile.dart, dotfiles/.vim/plugged/ale/test/test-files/dprint/blank.ts, dotfiles/.vim/plugged/ale/test/test-files/dprint/dprint.json, dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/lib/app.ex, dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/mix.exs, dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app1/lib/app.ex, dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app1/mix.exs, dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app2/lib/app.ex, dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app2/mix.exs, dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/mix.exs, dotfiles/.vim/plugged/ale/test/test-files/elixir/testfile.ex, dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/node_modules/.bin/elm, dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/node_modules/.bin/elm-test, dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/src/Main.elm, dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/tests/TestSuite.elm, dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/elm.json, dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/node_modules/.bin/elm, dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/tests/TestMain.elm, dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/elm.json, dotfiles/.vim/plugged/ale/test/test-files/elm/node_modules/.bin/elm-format, dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/node_modules/.bin/elm, dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/node_modules/.bin/elm-test, dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/src/Main.elm, dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/tests/TestSuite.elm, dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/elm-package.json, dotfiles/.vim/plugged/ale/test/test-files/elm/src/subdir/testfile.elm, dotfiles/.vim/plugged/ale/test/test-files/eruby/dummy.html.erb, dotfiles/.vim/plugged/ale/test/test-files/eslint/app-with-eslint-d/node_modules/.bin/eslint_d, dotfiles/.vim/plugged/ale/test/test-files/eslint/node_modules/.bin/eslint, dotfiles/.vim/plugged/ale/test/test-files/eslint/other-app/subdir/testfile.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/eslint/bin/eslint.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/standard/bin/cmd.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/stylelint/bin/stylelint.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/xo/cli.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.css, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.ts, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-config/.eslintrc, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-package-json/node_modules/.gitkeep, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-package-json/package.json, dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/.eslintrc.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/yarn2-app/.yarn/sdks/eslint/bin/eslint.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/yarn2-app/subdir/testfile.js, dotfiles/.vim/plugged/ale/test/test-files/eslint/package.json, dotfiles/.vim/plugged/ale/test/test-files/fecs/fecs, dotfiles/.vim/plugged/ale/test/test-files/fecs/fecs.exe, dotfiles/.vim/plugged/ale/test/test-files/fish/testfile.fish, dotfiles/.vim/plugged/ale/test/test-files/flow/a/sub/dummy, dotfiles/.vim/plugged/ale/test/test-files/flow/a/.flowconfig, dotfiles/.vim/plugged/ale/test/test-files/flow/b/sub/dummy, dotfiles/.vim/plugged/ale/test/test-files/fortls-project/.fortls, dotfiles/.vim/plugged/ale/test/test-files/go/go1/prj1/file.go, dotfiles/.vim/plugged/ale/test/test-files/go/go2/prj2/file.go, dotfiles/.vim/plugged/ale/test/test-files/go/gopath/bin/gopls, dotfiles/.vim/plugged/ale/test/test-files/go/gopath/bin/staticcheck, dotfiles/.vim/plugged/ale/test/test-files/go/go.mod, dotfiles/.vim/plugged/ale/test/test-files/go/testfile.go, dotfiles/.vim/plugged/ale/test/test-files/go/testfile2.go, dotfiles/.vim/plugged/ale/test/test-files/gradle/build-gradle-project/src/main/kotlin/dummy.kt, dotfiles/.vim/plugged/ale/test/test-files/gradle/build-gradle-project/build.gradle, dotfiles/.vim/plugged/ale/test/test-files/gradle/non-gradle-project/src/main/kotlin/dummy.kt, dotfiles/.vim/plugged/ale/test/test-files/gradle/settings-gradle-project/src/main/kotlin/dummy.kt, dotfiles/.vim/plugged/ale/test/test-files/gradle/settings-gradle-project/settings.gradle, dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/src/main/kotlin/dummy.kt, dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/build.gradle, dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/settings.gradle, dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/src/main/kotlin/dummy.kt, dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/build.gradle, dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/gradlew, dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/settings.gradle, dotfiles/.vim/plugged/ale/test/test-files/gradle/gradle, dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/subdir/file.haml, dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/.haml-lint.yml, dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/.rubocop.yml, dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-yml/subdir/file.haml, dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-yml/.haml-lint.yml, dotfiles/.vim/plugged/ale/test/test-files/hamllint/rubocop-yml/subdir/file.haml, dotfiles/.vim/plugged/ale/test/test-files/hamllint/rubocop-yml/.rubocop.yml, dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/.hdl_checker.config, dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/_hdl_checker.config, dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/foo.vhd, dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_git/files/foo.vhd, dotfiles/.vim/plugged/ale/test/test-files/hdl_server/foo.vhd, dotfiles/.vim/plugged/ale/test/test-files/hie_paths/file.hs, dotfiles/.vim/plugged/ale/test/test-files/html_beautify/html-beautify, dotfiles/.vim/plugged/ale/test/test-files/html_beautify/test.html, dotfiles/.vim/plugged/ale/test/test-files/htmlhint/node_modules/.bin/htmlhint, dotfiles/.vim/plugged/ale/test/test-files/htmlhint/with_config/.htmlhintrc, dotfiles/.vim/plugged/ale/test/test-files/ink/story/main.ink, dotfiles/.vim/plugged/ale/test/test-files/inko/tests/test/test_foo.inko, dotfiles/.vim/plugged/ale/test/test-files/inko/test.inko, dotfiles/.vim/plugged/ale/test/test-files/java/no_main/src/test/java/com/something/dummy, dotfiles/.vim/plugged/ale/test/test-files/java/with_jaxb/src/main/java/com/something/dummy, dotfiles/.vim/plugged/ale/test/test-files/java/with_jaxb/src/main/jaxb/com/something/dummy, dotfiles/.vim/plugged/ale/test/test-files/java/with_main/build/gen/main/java/com/something/dummy, dotfiles/.vim/plugged/ale/test/test-files/java/with_main/build/gen2/main/java/com/something/dummy, dotfiles/.vim/plugged/ale/test/test-files/java/with_main/src/main/java/com/something/dummy, dotfiles/.vim/plugged/ale/test/test-files/java/with_main/src/test/java/com/something/dummy, dotfiles/.vim/plugged/ale/test/test-files/javascript/test.js, dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/custom_import_map.json, dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/import_map.json, dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/main.js, dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/tsconfig.json, dotfiles/.vim/plugged/ale/test/test-files/json/testfile.json, dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app/node_modules/.bin/jsonlint, dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app/src/app.json, dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app-without-jsonlint/src/app.json, dotfiles/.vim/plugged/ale/test/test-files/jsonlint/node_modules/jsonlint/lib/cli.js, dotfiles/.vim/plugged/ale/test/test-files/julia/REQUIRE, dotfiles/.vim/plugged/ale/test/test-files/julia/test.jl, dotfiles/.vim/plugged/ale/test/test-files/kotlin/testfile.kt, dotfiles/.vim/plugged/ale/test/test-files/lessc/node_modules/.bin/lessc, dotfiles/.vim/plugged/ale/test/test-files/long-line/setup.cfg, dotfiles/.vim/plugged/ale/test/test-files/lua/testfile.lua, dotfiles/.vim/plugged/ale/test/test-files/markdown/testfile.md, dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/src/main/java/dummy1.java, dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/mvnw, dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/mvnw.cmd, dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/pom.xml, dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/src/main/java/dummy2.java, dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/pom.xml, dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/src/main/kotlin/dummy.kt, dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/pom.xml, dotfiles/.vim/plugged/ale/test/test-files/maven/non-maven-project/src/main/java/dummy.java, dotfiles/.vim/plugged/ale/test/test-files/maven/mvn, dotfiles/.vim/plugged/ale/test/test-files/nim/with-git/src/source.nim, dotfiles/.vim/plugged/ale/test/test-files/ocaml/testfile.ml, dotfiles/.vim/plugged/ale/test/test-files/ocamllsp/dune-project, dotfiles/.vim/plugged/ale/test/test-files/ols/node_modules/.bin/ocaml-language-server, dotfiles/.vim/plugged/ale/test/test-files/ols/.merlin, dotfiles/.vim/plugged/ale/test/test-files/pascal/test.pas, dotfiles/.vim/plugged/ale/test/test-files/php/project-with-php-cs-fixer/vendor/bin/php-cs-fixer, dotfiles/.vim/plugged/ale/test/test-files/php/project-with-php-cs-fixer/test.php, dotfiles/.vim/plugged/ale/test/test-files/php/project-with-phpcbf/foo/test.php, dotfiles/.vim/plugged/ale/test/test-files/php/project-with-phpcbf/vendor/bin/phpcbf, dotfiles/.vim/plugged/ale/test/test-files/php/project-with-pint/vendor/bin/pint, dotfiles/.vim/plugged/ale/test/test-files/php/project-with-pint/test.php, dotfiles/.vim/plugged/ale/test/test-files/php/project-without-php-cs-fixer/test.php, dotfiles/.vim/plugged/ale/test/test-files/php/project-without-phpcbf/foo/test.php, dotfiles/.vim/plugged/ale/test/test-files/php/project-without-pint/test.php, dotfiles/.vim/plugged/ale/test/test-files/php/vendor/bin/php-language-server.php, dotfiles/.vim/plugged/ale/test/test-files/php/with-composer/vendor/bin/php-language-server.php, dotfiles/.vim/plugged/ale/test/test-files/php/with-composer/composer.json, dotfiles/.vim/plugged/ale/test/test-files/php/with-git/vendor/bin/php-language-server.php, dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-with-phpcs/foo/test.php, dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-with-phpcs/vendor/bin/phpcs, dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-without-phpcs/foo/test.php, dotfiles/.vim/plugged/ale/test/test-files/prettier/with_config/.prettierrc, dotfiles/.vim/plugged/ale/test/test-files/prettier/with_config/testfile.js, dotfiles/.vim/plugged/ale/test/test-files/prettier/with_prettierignore/src/testfile.js, dotfiles/.vim/plugged/ale/test/test-files/prettier/with_prettierignore/.prettierignore, dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile, dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.css, dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.js, dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.json, dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.scss, dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.ts, dotfiles/.vim/plugged/ale/test/test-files/proto/testfile.proto, dotfiles/.vim/plugged/ale/test/test-files/psalm/vendor/bin/psalm, dotfiles/.vim/plugged/ale/test/test-files/puglint/node_modules/.bin/pug-lint, dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_dir/.pug-lintrc, dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_js_dir/.pug-lintrc.js, dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_json_dir/.pug-lintrc.json, dotfiles/.vim/plugged/ale/test/test-files/puglint/package.json, dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/lib/puppet/types/exampletype.rb, dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/template/template.epp, dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/metadata.json, dotfiles/.vim/plugged/ale/test/test-files/puppet/old-style-module/manifests/init.pp, dotfiles/.vim/plugged/ale/test/test-files/puppet/old-style-module/templates/template.epp, dotfiles/.vim/plugged/ale/test/test-files/puppet/dummy.pp, dotfiles/.vim/plugged/ale/test/test-files/purescript/bower/Foo.purs, dotfiles/.vim/plugged/ale/test/test-files/purescript/bower/bower.json, dotfiles/.vim/plugged/ale/test/test-files/purescript/psc-package/Foo.purs, dotfiles/.vim/plugged/ale/test/test-files/purescript/psc-package/psc-package.json, dotfiles/.vim/plugged/ale/test/test-files/purescript/spago/Foo.purs, dotfiles/.vim/plugged/ale/test/test-files/purescript/spago/spago.dhall, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/namespace/foo/__init__.py, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/namespace/foo/bar.py, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/MANIFEST.in, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/namespace/foo/__init__.py, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/namespace/foo/bar.py, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/pytest.ini, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/namespace/foo/__init__.py, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/namespace/foo/bar.py, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/setup.cfg, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/namespace/foo/__init__.py, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/namespace/foo/bar.py, dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/tox.ini, dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/COMMIT_EDITMSG, dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/__init__.py, dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/bar.py, dotfiles/.vim/plugged/ale/test/test-files/python/pipenv/Pipfile.lock, dotfiles/.vim/plugged/ale/test/test-files/python/poetry/poetry.lock, dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/foo/__init__.py, dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/foo/bar.py, dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/.pyre_configuration.local, dotfiles/.vim/plugged/ale/test/test-files/python/python-package-project/package-name/module.py, dotfiles/.vim/plugged/ale/test/test-files/python/python-package-project/.flake8, dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/namespace/foo/__init__.py, dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/namespace/foo/bar.py, dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/.bandit, dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/tests/testsubfolder/my_tests.py, dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/tests/pytest.ini, dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/mypy.ini, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/dir_with_yapf_config/.style.yapf, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/activate, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autoflake.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autoimport.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autopep8.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/black.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/flake8.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/flakehell.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/gitlint.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/isort.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/mypy.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pyflakes.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylama.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylint.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylsp.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pyre.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/reorder-python-imports.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/tidy-imports.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/unimport.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/vulture.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/yamlfix.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/yapf.exe, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/activate, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autoflake, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autoimport, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autopep8, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/black, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/flake8, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/flakehell, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/gitlint, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/isort, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/mypy, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pyflakes, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylama, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylint, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylsp, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pyre, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/reorder-python-imports, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/tidy-imports, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/unimport, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/vulture, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/yamlfix, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/yapf, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/COMMIT_EDITMSG, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/__init__.py, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/bar.py, dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/bar.pyi, dotfiles/.vim/plugged/ale/test/test-files/r/.Rprofile, dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/foo.rkt, dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/init.rkt, dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/foo.rkt, dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/init.rkt, dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/foo.rkt, dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/init.rkt, dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/foo.rkt, dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/init.rkt, dotfiles/.vim/plugged/ale/test/test-files/racket/simple-script/foo.rkt, dotfiles/.vim/plugged/ale/test/test-files/reasonml/bsconfig.json, dotfiles/.vim/plugged/ale/test/test-files/reasonml/testfile.re, dotfiles/.vim/plugged/ale/test/test-files/remark_lint/with_bin_path/node_modules/.bin/remark, dotfiles/.vim/plugged/ale/test/test-files/ruby/not_a_rails_app/file.rb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/models/thing.rb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/views/my_great_view.html.erb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/dummy.rb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/config/dummy.rb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/db/dummy.rb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app1/lib/file.rb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app1/Rakefile, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app2/lib/file.rb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app2/Gemfile, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app3/lib/file.rb, dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app3/.solargraph.yml, dotfiles/.vim/plugged/ale/test/test-files/ruby/with_config/.rubocop.yml, dotfiles/.vim/plugged/ale/test/test-files/ruby/with_config/.standard.yml, dotfiles/.vim/plugged/ale/test/test-files/ruby/dummy.rb, dotfiles/.vim/plugged/ale/test/test-files/rust/cargo/Cargo.toml, dotfiles/.vim/plugged/ale/test/test-files/rust/cargo/testfile.rs, dotfiles/.vim/plugged/ale/test/test-files/rust/rust-project/rust-project.json, dotfiles/.vim/plugged/ale/test/test-files/rust/rust-project/testfile.rs, dotfiles/.vim/plugged/ale/test/test-files/sasslint/with-bin/node_modules/.bin/sass-lint, dotfiles/.vim/plugged/ale/test/test-files/sasslint/with-source/node_modules/sass-lint/bin/sass-lint.js, dotfiles/.vim/plugged/ale/test/test-files/scala/invalid_sbt_project/Main.scala, dotfiles/.vim/plugged/ale/test/test-files/scala/valid_sbt_project/Main.scala, dotfiles/.vim/plugged/ale/test/test-files/scala/valid_sbt_project/build.sbt, dotfiles/.vim/plugged/ale/test/test-files/scala/dummy.scala, dotfiles/.vim/plugged/ale/test/test-files/slimlint/subdir/file.slim, dotfiles/.vim/plugged/ale/test/test-files/slimlint/.rubocop.yml, dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/path/to/bar.sml, dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/foo.sml, dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/sources.cm, dotfiles/.vim/plugged/ale/test/test-files/smlnj/file/qux.sml, dotfiles/.vim/plugged/ale/test/test-files/solhint/node_modules/.bin/solhint, dotfiles/.vim/plugged/ale/test/test-files/solhint/node_modules/solhint/index.js, dotfiles/.vim/plugged/ale/test/test-files/solhint/Contract.sol, dotfiles/.vim/plugged/ale/test/test-files/solhint/package.json, dotfiles/.vim/plugged/ale/test/test-files/spectral/node_modules/.bin/spectral, dotfiles/.vim/plugged/ale/test/test-files/spectral/openapi.yaml, dotfiles/.vim/plugged/ale/test/test-files/stack/stack.yaml, dotfiles/.vim/plugged/ale/test/test-files/standard/with-bin/node_modules/.bin/standard, dotfiles/.vim/plugged/ale/test/test-files/standard/with-cmd/node_modules/standard/bin/cmd.js, dotfiles/.vim/plugged/ale/test/test-files/stylelint/node_modules/.bin/stylelint, dotfiles/.vim/plugged/ale/test/test-files/swaglint/docs/swagger.yaml, dotfiles/.vim/plugged/ale/test/test-files/swaglint/node_modules/.bin/swaglint, dotfiles/.vim/plugged/ale/test/test-files/swift/non-swift-package-project/src/folder/dummy.swift, dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project/src/folder/dummy.swift, dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project/Package.swift, dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/src/folder/dummy.swift, dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/.swift-format, dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/Package.swift, dotfiles/.vim/plugged/ale/test/test-files/swift/dummy.swift, dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods/Pods/SwiftLint/swiftlint, dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods-and-react-native/Pods/SwiftLint/swiftlint, dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods-and-react-native/ios/Pods/SwiftLint/swiftlint, dotfiles/.vim/plugged/ale/test/test-files/swiftlint/react-native/ios/Pods/SwiftLint/swiftlint, dotfiles/.vim/plugged/ale/test/test-files/terraform/.terraform/dummy, dotfiles/.vim/plugged/ale/test/test-files/terraform/main.tf, dotfiles/.vim/plugged/ale/test/test-files/tex/sample1.tex, dotfiles/.vim/plugged/ale/test/test-files/tex/sample2.tex, dotfiles/.vim/plugged/ale/test/test-files/tex/testfile.tex, dotfiles/.vim/plugged/ale/test/test-files/textlint/with_bin_path/node_modules/.bin/textlint, dotfiles/.vim/plugged/ale/test/test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js, dotfiles/.vim/plugged/ale/test/test-files/tflint/foo/.tflint.hcl, dotfiles/.vim/plugged/ale/test/test-files/tflint/foo/bar.tf, dotfiles/.vim/plugged/ale/test/test-files/tfsec/json/.tfsec/config.json, dotfiles/.vim/plugged/ale/test/test-files/tfsec/json/main.tf, dotfiles/.vim/plugged/ale/test/test-files/tfsec/yml/.tfsec/config.yml, dotfiles/.vim/plugged/ale/test/test-files/tfsec/yml/main.tf, dotfiles/.vim/plugged/ale/test/test-files/tidy/.tidyrc, dotfiles/.vim/plugged/ale/test/test-files/tidy/test.html, dotfiles/.vim/plugged/ale/test/test-files/tidy/tidy, dotfiles/.vim/plugged/ale/test/test-files/tidy/tidy.exe, dotfiles/.vim/plugged/ale/test/test-files/top/ale-special-directory-name-dont-use-this-please/empty-file, dotfiles/.vim/plugged/ale/test/test-files/top/middle/bottom/dummy.txt, dotfiles/.vim/plugged/ale/test/test-files/top/example.ini, dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/level-2/file3.ts, dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/file2.ts, dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/tsconfig.json, dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/file1.ts, dotfiles/.vim/plugged/ale/test/test-files/tsserver/tsconfig.json, dotfiles/.vim/plugged/ale/test/test-files/typescript/custom_import_map.json, dotfiles/.vim/plugged/ale/test/test-files/typescript/import_map.json, dotfiles/.vim/plugged/ale/test/test-files/typescript/test.ts, dotfiles/.vim/plugged/ale/test/test-files/typescript/tsconfig.json, dotfiles/.vim/plugged/ale/test/test-files/vim/invalid_vim_project/test.vim, dotfiles/.vim/plugged/ale/test/test-files/vim/node_modules/.bin/vim-language-server, dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_autoload/autoload/test.vim, dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_autoload/test.vim, dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_initvim/init.vim, dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_plugin/plugin/test.vim, dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_plugin/test.vim, dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_vimrc/.vimrc, dotfiles/.vim/plugged/ale/test/test-files/volar/node_modules/.bin/vue-language-server, dotfiles/.vim/plugged/ale/test/test-files/volar/node_modules/typescript/lib/tsserverlibrary.js, dotfiles/.vim/plugged/ale/test/test-files/volar/src/App.vue, dotfiles/.vim/plugged/ale/test/test-files/volar/package.json, dotfiles/.vim/plugged/ale/test/test-files/write-good/node-modules/node_modules/.bin/write-good, dotfiles/.vim/plugged/ale/test/test-files/write-good/node-modules-2/node_modules/write-good/bin/write-good.js, dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/node_modules/xo/cli.js, dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/index.js, dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/index.ts, dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/package.json, dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/package.json, dotfiles/.vim/plugged/ale/test/test-files/yaml/test.yaml, dotfiles/.vim/plugged/ale/test/test-files/zig/build.zig, dotfiles/.vim/plugged/ale/test/test-files/.gitignore, dotfiles/.vim/plugged/ale/test/util/test_cd_string_commands.vader, dotfiles/.vim/plugged/ale/test/v_files/testfile.v, dotfiles/.vim/plugged/ale/test/smoke_test.vader, dotfiles/.vim/plugged/ale/test/test_ale_has.vader, dotfiles/.vim/plugged/ale/test/test_ale_info.vader, dotfiles/.vim/plugged/ale/test/test_ale_info_to_clipboard.vader, dotfiles/.vim/plugged/ale/test/test_ale_lint_command.vader, dotfiles/.vim/plugged/ale/test/test_ale_lint_stop_command.vader, dotfiles/.vim/plugged/ale/test/test_ale_populate_command.vader, dotfiles/.vim/plugged/ale/test/test_ale_toggle.vader, dotfiles/.vim/plugged/ale/test/test_ale_var.vader, dotfiles/.vim/plugged/ale/test/test_alejobstarted_autocmd.vader, dotfiles/.vim/plugged/ale/test/test_alelint_autocmd.vader, dotfiles/.vim/plugged/ale/test/test_ant_build_classpath_command.vader, dotfiles/.vim/plugged/ale/test/test_ant_find_project_root.vader, dotfiles/.vim/plugged/ale/test/test_autocmd_commands.vader, dotfiles/.vim/plugged/ale/test/test_backwards_compatibility.vader, dotfiles/.vim/plugged/ale/test/test_balloon_messages.vader, dotfiles/.vim/plugged/ale/test/test_c_flag_parsing.vader, dotfiles/.vim/plugged/ale/test/test_checkingbuffer_autocmd.vader, dotfiles/.vim/plugged/ale/test/test_cleanup.vader, dotfiles/.vim/plugged/ale/test/test_code_action.vader, dotfiles/.vim/plugged/ale/test/test_code_action_corner_cases.vader, dotfiles/.vim/plugged/ale/test/test_code_action_python.vader, dotfiles/.vim/plugged/ale/test/test_codefix.vader, dotfiles/.vim/plugged/ale/test/test_computed_lint_file_values.vader, dotfiles/.vim/plugged/ale/test/test_csslint_config_detection.vader, dotfiles/.vim/plugged/ale/test/test_cursor_warnings.vader, dotfiles/.vim/plugged/ale/test/test_deferred_command_string.vader, dotfiles/.vim/plugged/ale/test/test_deferred_executable_string.vader, dotfiles/.vim/plugged/ale/test/test_deno_executable_detection.vader, dotfiles/.vim/plugged/ale/test/test_disabling_ale.vader, dotfiles/.vim/plugged/ale/test/test_dockerfile_hadolint_linter.vader, dotfiles/.vim/plugged/ale/test/test_env_function.vader, dotfiles/.vim/plugged/ale/test/test_errors_removed_after_filetype_changed.vader, dotfiles/.vim/plugged/ale/test/test_filename_mapping.vader, dotfiles/.vim/plugged/ale/test/test_filerename.vader, dotfiles/.vim/plugged/ale/test/test_filetype_linter_defaults.vader, dotfiles/.vim/plugged/ale/test/test_filetype_mapping.vader, dotfiles/.vim/plugged/ale/test/test_find_nearest_directory.vader, dotfiles/.vim/plugged/ale/test/test_find_references.vader, dotfiles/.vim/plugged/ale/test/test_floating_preview.vader, dotfiles/.vim/plugged/ale/test/test_format_command.vader, dotfiles/.vim/plugged/ale/test/test_format_temporary_file_creation.vader, dotfiles/.vim/plugged/ale/test/test_function_arg_count.vader, dotfiles/.vim/plugged/ale/test/test_fuzzy_json_decode.vader, dotfiles/.vim/plugged/ale/test/test_get_abspath.vader, dotfiles/.vim/plugged/ale/test/test_get_loclist.vader, dotfiles/.vim/plugged/ale/test/test_getmatches.vader, dotfiles/.vim/plugged/ale/test/test_go_to_definition.vader, dotfiles/.vim/plugged/ale/test/test_gradle_build_classpath_command.vader, dotfiles/.vim/plugged/ale/test/test_gradle_find_executable.vader, dotfiles/.vim/plugged/ale/test/test_gradle_find_project_root.vader, dotfiles/.vim/plugged/ale/test/test_helptags.vader, dotfiles/.vim/plugged/ale/test/test_highlight_placement.vader, dotfiles/.vim/plugged/ale/test/test_highlight_position_chunking.vader, dotfiles/.vim/plugged/ale/test/test_history_saving.vader, dotfiles/.vim/plugged/ale/test/test_hover.vader, dotfiles/.vim/plugged/ale/test/test_hover_parsing.vader, dotfiles/.vim/plugged/ale/test/test_ignoring_linters.vader, dotfiles/.vim/plugged/ale/test/test_jq_linter.vader, dotfiles/.vim/plugged/ale/test/test_jsonlint_executable_detection.vader, dotfiles/.vim/plugged/ale/test/test_line_join.vader, dotfiles/.vim/plugged/ale/test/test_lint_file_linters.vader, dotfiles/.vim/plugged/ale/test/test_lint_on_enter_when_file_changed.vader, dotfiles/.vim/plugged/ale/test/test_lint_on_filetype_changed.vader, dotfiles/.vim/plugged/ale/test/test_linter_defintion_processing.vader, dotfiles/.vim/plugged/ale/test/test_linter_retrieval.vader, dotfiles/.vim/plugged/ale/test/test_linter_type_mapping.vader, dotfiles/.vim/plugged/ale/test/test_linting_blacklist.vader, dotfiles/.vim/plugged/ale/test/test_linting_updates_loclist.vader, dotfiles/.vim/plugged/ale/test/test_list_formatting.vader, dotfiles/.vim/plugged/ale/test/test_list_opening.vader, dotfiles/.vim/plugged/ale/test/test_list_titles.vader, dotfiles/.vim/plugged/ale/test/test_load_all_linters.vader, dotfiles/.vim/plugged/ale/test/test_loclist_binary_search.vader, dotfiles/.vim/plugged/ale/test/test_loclist_corrections.vader, dotfiles/.vim/plugged/ale/test/test_loclist_jumping.vader, dotfiles/.vim/plugged/ale/test/test_loclist_sorting.vader, dotfiles/.vim/plugged/ale/test/test_maven_build_classpath_command.vader, dotfiles/.vim/plugged/ale/test/test_maven_find_executable.vader, dotfiles/.vim/plugged/ale/test/test_maven_find_project_root.vader, dotfiles/.vim/plugged/ale/test/test_nearest_file_search.vader, dotfiles/.vim/plugged/ale/test/test_nimlsp_project_root.vader, dotfiles/.vim/plugged/ale/test/test_no_linting_on_write_quit.vader, dotfiles/.vim/plugged/ale/test/test_organize_imports.vader, dotfiles/.vim/plugged/ale/test/test_other_sources.vader, dotfiles/.vim/plugged/ale/test/test_parse_command_args.vader, dotfiles/.vim/plugged/ale/test/test_path_dirname.vader, dotfiles/.vim/plugged/ale/test/test_path_equality.vader, dotfiles/.vim/plugged/ale/test/test_path_upwards.vader, dotfiles/.vim/plugged/ale/test/test_path_uri.vader, dotfiles/.vim/plugged/ale/test/test_pattern_options.vader, dotfiles/.vim/plugged/ale/test/test_prepare_command.vader, dotfiles/.vim/plugged/ale/test/test_puppet_path_detection.vader, dotfiles/.vim/plugged/ale/test/test_python_find_project_root.vader, dotfiles/.vim/plugged/ale/test/test_python_pipenv.vader, dotfiles/.vim/plugged/ale/test/test_python_poetry.vader, dotfiles/.vim/plugged/ale/test/test_python_traceback.vader, dotfiles/.vim/plugged/ale/test/test_python_virtualenv.vader, dotfiles/.vim/plugged/ale/test/test_quickfix_deduplication.vader, dotfiles/.vim/plugged/ale/test/test_quitting_variable.vader, dotfiles/.vim/plugged/ale/test/test_redundant_tsserver_rendering_avoided.vader, dotfiles/.vim/plugged/ale/test/test_regex_escaping.vader, dotfiles/.vim/plugged/ale/test/test_rename.vader, dotfiles/.vim/plugged/ale/test/test_resolve_local_path.vader, dotfiles/.vim/plugged/ale/test/test_results_not_cleared_when_opening_loclist.vader, dotfiles/.vim/plugged/ale/test/test_sandbox_execution.vader, dotfiles/.vim/plugged/ale/test/test_semver_utils.vader, dotfiles/.vim/plugged/ale/test/test_set_list_timers.vader, dotfiles/.vim/plugged/ale/test/test_setting_loclist_from_another_buffer.vader, dotfiles/.vim/plugged/ale/test/test_setting_problems_found_in_previous_buffers.vader, dotfiles/.vim/plugged/ale/test/test_shell_detection.vader, dotfiles/.vim/plugged/ale/test/test_should_do_nothing_conditions.vader, dotfiles/.vim/plugged/ale/test/test_sml_command.vader, dotfiles/.vim/plugged/ale/test/test_socket_connections.vader, dotfiles/.vim/plugged/ale/test/test_statusline.vader, dotfiles/.vim/plugged/ale/test/test_swift_find_project_root.vader, dotfiles/.vim/plugged/ale/test/test_symbol_search.vader, dotfiles/.vim/plugged/ale/test/test_temporary_file_management.vader, dotfiles/.vim/plugged/ale/test/test_tmpdir_wrapper.vader, dotfiles/.vim/plugged/ale/test/test_vim8_processid_parsing.vader, dotfiles/.vim/plugged/ale/test/test_windows_escaping.vader, dotfiles/.vim/plugged/ale/test/test_wrap_comand.vader, dotfiles/.vim/plugged/ale/test/test_writefile_function.vader, dotfiles/.vim/plugged/ale/test/vimrc, dotfiles/.vim/plugged/ale/.appveyor.yml, dotfiles/.vim/plugged/ale/.editorconfig, dotfiles/.vim/plugged/ale/.gitattributes, dotfiles/.vim/plugged/ale/.gitignore, dotfiles/.vim/plugged/ale/.gitrepo, dotfiles/.vim/plugged/ale/.vintrc.yaml, dotfiles/.vim/plugged/ale/Dockerfile, dotfiles/.vim/plugged/ale/LICENSE, dotfiles/.vim/plugged/ale/README.md, dotfiles/.vim/plugged/ale/run-tests, dotfiles/.vim/plugged/ale/run-tests.bat, dotfiles/.vim/plugged/ale/supported-tools.md, dotfiles/.vim/plugged/ansible-vim/UltiSnips/.gitignore, dotfiles/.vim/plugged/ansible-vim/UltiSnips/README.md, dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.py, dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.sh, dotfiles/.vim/plugged/ansible-vim/ftdetect/ansible.vim, dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible.vim, dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible_hosts.vim, dotfiles/.vim/plugged/ansible-vim/indent/ansible.vim, dotfiles/.vim/plugged/ansible-vim/syntax/ansible.vim, dotfiles/.vim/plugged/ansible-vim/syntax/ansible_hosts.vim, dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim, dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim_LICENSE, dotfiles/.vim/plugged/ansible-vim/.gitrepo, dotfiles/.vim/plugged/ansible-vim/LICENSE, dotfiles/.vim/plugged/ansible-vim/README.md, dotfiles/.vim/plugged/coc.nvim/autoload/coc/api.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/client.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/color.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/compat.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/cursor.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/dialog.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/dict.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/float.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/helper.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/highlight.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/list.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/math.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/notify.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/prompt.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/pum.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/rpc.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/snippet.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/string.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/task.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/terminal.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/ui.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/util.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/vtext.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc/window.vim, dotfiles/.vim/plugged/coc.nvim/autoload/health/coc.vim, dotfiles/.vim/plugged/coc.nvim/autoload/coc.vim, dotfiles/.vim/plugged/coc.nvim/bin/fuzzy.wasm, dotfiles/.vim/plugged/coc.nvim/bin/prompt.js, dotfiles/.vim/plugged/coc.nvim/bin/strwidth.wasm, dotfiles/.vim/plugged/coc.nvim/bin/terminateProcess.sh, dotfiles/.vim/plugged/coc.nvim/build/index.js, dotfiles/.vim/plugged/coc.nvim/data/schema.json, dotfiles/.vim/plugged/coc.nvim/doc/coc-config.txt, dotfiles/.vim/plugged/coc.nvim/doc/coc.txt, dotfiles/.vim/plugged/coc.nvim/lua/coc/highlight.lua, dotfiles/.vim/plugged/coc.nvim/plugin/coc.vim, dotfiles/.vim/plugged/coc.nvim/.gitignore, dotfiles/.vim/plugged/coc.nvim/.gitrepo, dotfiles/.vim/plugged/coc.nvim/LICENSE.md, dotfiles/.vim/plugged/coc.nvim/Readme.md, dotfiles/.vim/plugged/coc.nvim/history.md, dotfiles/.vim/plugged/coc.nvim/package.json, dotfiles/.vim/plugged/dockerfile.vim/ftdetect/Dockerfile.vim, dotfiles/.vim/plugged/dockerfile.vim/ftdetect/docker-compose.vim, dotfiles/.vim/plugged/dockerfile.vim/ftplugin/Dockerfile.vim, dotfiles/.vim/plugged/dockerfile.vim/ftplugin/docker-compose.vim, dotfiles/.vim/plugged/dockerfile.vim/indent/Dockerfile.vim, dotfiles/.vim/plugged/dockerfile.vim/snippets/Dockerfile.snippets, dotfiles/.vim/plugged/dockerfile.vim/snippets/docker-compose.snippets, dotfiles/.vim/plugged/dockerfile.vim/syntax/Dockerfile.vim, dotfiles/.vim/plugged/dockerfile.vim/syntax/docker-compose.vim, dotfiles/.vim/plugged/dockerfile.vim/.gitignore, dotfiles/.vim/plugged/dockerfile.vim/.gitrepo, dotfiles/.vim/plugged/dockerfile.vim/LICENSE, dotfiles/.vim/plugged/dockerfile.vim/Makefile, dotfiles/.vim/plugged/dockerfile.vim/README.md, dotfiles/.vim/plugged/dockerfile.vim/vim-dockerfile-example.png, dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/fnmatch.vim, dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/handler.vim, dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/ini.vim, dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/util.vim, dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig.vim, dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core.vim, dotfiles/.vim/plugged/editorconfig-vim/doc/editorconfig.txt, dotfiles/.vim/plugged/editorconfig-vim/plugin/editorconfig.vim, dotfiles/.vim/plugged/editorconfig-vim/tests/core/CMakeLists.txt, dotfiles/.vim/plugged/editorconfig-vim/tests/core/CTestCustom.cmake, dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvbslib.vbs, dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvimlib.ps1, dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig, dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig.bat, dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig1.vbs, dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig2.ps1, dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/.editorconfig, dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/editorconfig_spec.rb, dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/.gitignore, dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile, dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile.lock, dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Rakefile, dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.bat, dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.sh, dotfiles/.vim/plugged/editorconfig-vim/tests/travis-test.sh, dotfiles/.vim/plugged/editorconfig-vim/.appveyor.yml, dotfiles/.vim/plugged/editorconfig-vim/.editorconfig, dotfiles/.vim/plugged/editorconfig-vim/.gitignore, dotfiles/.vim/plugged/editorconfig-vim/.gitmodules, dotfiles/.vim/plugged/editorconfig-vim/.gitrepo, dotfiles/.vim/plugged/editorconfig-vim/.travis.yml, dotfiles/.vim/plugged/editorconfig-vim/CONTRIBUTORS, dotfiles/.vim/plugged/editorconfig-vim/LICENSE, dotfiles/.vim/plugged/editorconfig-vim/LICENSE.PSF, dotfiles/.vim/plugged/editorconfig-vim/README.md, dotfiles/.vim/plugged/editorconfig-vim/mkzip.sh, dotfiles/.vim/plugged/fzf/.github/workflows/codeql-analysis.yml, dotfiles/.vim/plugged/fzf/.github/workflows/linux.yml, dotfiles/.vim/plugged/fzf/.github/workflows/macos.yml, dotfiles/.vim/plugged/fzf/.github/FUNDING.yml, dotfiles/.vim/plugged/fzf/.github/ISSUE_TEMPLATE.md, dotfiles/.vim/plugged/fzf/.github/dependabot.yml, dotfiles/.vim/plugged/fzf/bin/fzf-tmux, dotfiles/.vim/plugged/fzf/doc/fzf.txt, dotfiles/.vim/plugged/fzf/man/man1/fzf-tmux.1, dotfiles/.vim/plugged/fzf/man/man1/fzf.1, dotfiles/.vim/plugged/fzf/plugin/fzf.vim, dotfiles/.vim/plugged/fzf/shell/completion.bash, dotfiles/.vim/plugged/fzf/shell/completion.zsh, dotfiles/.vim/plugged/fzf/shell/key-bindings.bash, dotfiles/.vim/plugged/fzf/shell/key-bindings.fish, dotfiles/.vim/plugged/fzf/shell/key-bindings.zsh, dotfiles/.vim/plugged/fzf/src/algo/algo.go, dotfiles/.vim/plugged/fzf/src/algo/algo_test.go, dotfiles/.vim/plugged/fzf/src/algo/normalize.go, dotfiles/.vim/plugged/fzf/src/protector/protector.go, dotfiles/.vim/plugged/fzf/src/protector/protector_openbsd.go, dotfiles/.vim/plugged/fzf/src/tui/dummy.go, dotfiles/.vim/plugged/fzf/src/tui/light.go, dotfiles/.vim/plugged/fzf/src/tui/light_unix.go, dotfiles/.vim/plugged/fzf/src/tui/light_windows.go, dotfiles/.vim/plugged/fzf/src/tui/tcell.go, dotfiles/.vim/plugged/fzf/src/tui/tcell_test.go, dotfiles/.vim/plugged/fzf/src/tui/ttyname_unix.go, dotfiles/.vim/plugged/fzf/src/tui/ttyname_windows.go, dotfiles/.vim/plugged/fzf/src/tui/tui.go, dotfiles/.vim/plugged/fzf/src/tui/tui_test.go, dotfiles/.vim/plugged/fzf/src/util/atomicbool.go, dotfiles/.vim/plugged/fzf/src/util/atomicbool_test.go, dotfiles/.vim/plugged/fzf/src/util/chars.go, dotfiles/.vim/plugged/fzf/src/util/chars_test.go, dotfiles/.vim/plugged/fzf/src/util/eventbox.go, dotfiles/.vim/plugged/fzf/src/util/eventbox_test.go, dotfiles/.vim/plugged/fzf/src/util/slab.go, dotfiles/.vim/plugged/fzf/src/util/util.go, dotfiles/.vim/plugged/fzf/src/util/util_test.go, dotfiles/.vim/plugged/fzf/src/util/util_unix.go, dotfiles/.vim/plugged/fzf/src/util/util_windows.go, dotfiles/.vim/plugged/fzf/src/LICENSE, dotfiles/.vim/plugged/fzf/src/ansi.go, dotfiles/.vim/plugged/fzf/src/ansi_test.go, dotfiles/.vim/plugged/fzf/src/cache.go, dotfiles/.vim/plugged/fzf/src/cache_test.go, dotfiles/.vim/plugged/fzf/src/chunklist.go, dotfiles/.vim/plugged/fzf/src/chunklist_test.go, dotfiles/.vim/plugged/fzf/src/constants.go, dotfiles/.vim/plugged/fzf/src/core.go, dotfiles/.vim/plugged/fzf/src/history.go, dotfiles/.vim/plugged/fzf/src/history_test.go, dotfiles/.vim/plugged/fzf/src/item.go, dotfiles/.vim/plugged/fzf/src/item_test.go, dotfiles/.vim/plugged/fzf/src/matcher.go, dotfiles/.vim/plugged/fzf/src/merger.go, dotfiles/.vim/plugged/fzf/src/merger_test.go, dotfiles/.vim/plugged/fzf/src/options.go, dotfiles/.vim/plugged/fzf/src/options_test.go, dotfiles/.vim/plugged/fzf/src/pattern.go, dotfiles/.vim/plugged/fzf/src/pattern_test.go, dotfiles/.vim/plugged/fzf/src/reader.go, dotfiles/.vim/plugged/fzf/src/reader_test.go, dotfiles/.vim/plugged/fzf/src/result.go, dotfiles/.vim/plugged/fzf/src/result_others.go, dotfiles/.vim/plugged/fzf/src/result_test.go, dotfiles/.vim/plugged/fzf/src/result_x86.go, dotfiles/.vim/plugged/fzf/src/terminal.go, dotfiles/.vim/plugged/fzf/src/terminal_test.go, dotfiles/.vim/plugged/fzf/src/terminal_unix.go, dotfiles/.vim/plugged/fzf/src/terminal_windows.go, dotfiles/.vim/plugged/fzf/src/tokenizer.go, dotfiles/.vim/plugged/fzf/src/tokenizer_test.go, dotfiles/.vim/plugged/fzf/test/fzf.vader, dotfiles/.vim/plugged/fzf/test/test_go.rb, dotfiles/.vim/plugged/fzf/.gitignore, dotfiles/.vim/plugged/fzf/.gitrepo, dotfiles/.vim/plugged/fzf/.goreleaser.yml, dotfiles/.vim/plugged/fzf/.rubocop.yml, dotfiles/.vim/plugged/fzf/.tool-versions, dotfiles/.vim/plugged/fzf/ADVANCED.md, dotfiles/.vim/plugged/fzf/BUILD.md, dotfiles/.vim/plugged/fzf/CHANGELOG.md, dotfiles/.vim/plugged/fzf/Dockerfile, dotfiles/.vim/plugged/fzf/LICENSE, dotfiles/.vim/plugged/fzf/Makefile, dotfiles/.vim/plugged/fzf/README-VIM.md, dotfiles/.vim/plugged/fzf/README.md, dotfiles/.vim/plugged/fzf/go.mod, dotfiles/.vim/plugged/fzf/go.sum, dotfiles/.vim/plugged/fzf/install, dotfiles/.vim/plugged/fzf/install.ps1, dotfiles/.vim/plugged/fzf/main.go, dotfiles/.vim/plugged/fzf/uninstall, dotfiles/.vim/plugged/fzf.vim/.github/FUNDING.yml, dotfiles/.vim/plugged/fzf.vim/.github/ISSUE_TEMPLATE.md, dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim/complete.vim, dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim.vim, dotfiles/.vim/plugged/fzf.vim/bin/preview.rb, dotfiles/.vim/plugged/fzf.vim/bin/preview.sh, dotfiles/.vim/plugged/fzf.vim/bin/tagpreview.sh, dotfiles/.vim/plugged/fzf.vim/bin/tags.pl, dotfiles/.vim/plugged/fzf.vim/doc/fzf-vim.txt, dotfiles/.vim/plugged/fzf.vim/plugin/fzf.vim, dotfiles/.vim/plugged/fzf.vim/.gitattributes, dotfiles/.vim/plugged/fzf.vim/.gitignore, dotfiles/.vim/plugged/fzf.vim/.gitrepo, dotfiles/.vim/plugged/fzf.vim/LICENSE, dotfiles/.vim/plugged/fzf.vim/README.md, dotfiles/.vim/plugged/lightline.vim/.github/workflows/ci.yaml, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/16color.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/OldHope.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/PaperColor.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/PaperColor_dark.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/PaperColor_light.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow_Night.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow_Night_Blue.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow_Night_Bright.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow_Night_Eighties.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/apprentice.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/ayu_dark.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/ayu_light.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/ayu_mirage.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/darcula.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/default.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/deus.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/jellybeans.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/landscape.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/materia.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/material.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/molokai.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/nord.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/one.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/powerline.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/powerlineish.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/rosepine.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/selenized_black.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/selenized_dark.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/selenized_light.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/selenized_white.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/seoul256.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/simpleblack.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/solarized.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/srcery_drk.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/wombat.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colortable.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline/tab.vim, dotfiles/.vim/plugged/lightline.vim/autoload/lightline.vim, dotfiles/.vim/plugged/lightline.vim/doc/lightline.txt, dotfiles/.vim/plugged/lightline.vim/plugin/lightline.vim, dotfiles/.vim/plugged/lightline.vim/test/.themisrc, dotfiles/.vim/plugged/lightline.vim/test/autocmd.vim, dotfiles/.vim/plugged/lightline.vim/test/concatenate.vim, dotfiles/.vim/plugged/lightline.vim/test/error.vim, dotfiles/.vim/plugged/lightline.vim/test/expand.vim, dotfiles/.vim/plugged/lightline.vim/test/highlight.vim, dotfiles/.vim/plugged/lightline.vim/test/link.vim, dotfiles/.vim/plugged/lightline.vim/test/mode.vim, dotfiles/.vim/plugged/lightline.vim/test/onetab.vim, dotfiles/.vim/plugged/lightline.vim/test/popup.vim, dotfiles/.vim/plugged/lightline.vim/test/quickfix.vim, dotfiles/.vim/plugged/lightline.vim/test/subseparator.vim, dotfiles/.vim/plugged/lightline.vim/test/tabline.vim, dotfiles/.vim/plugged/lightline.vim/test/tabs.vim, dotfiles/.vim/plugged/lightline.vim/test/toggle.vim, dotfiles/.vim/plugged/lightline.vim/test/uniq.vim, dotfiles/.vim/plugged/lightline.vim/.gitignore, dotfiles/.vim/plugged/lightline.vim/.gitrepo, dotfiles/.vim/plugged/lightline.vim/LICENSE, dotfiles/.vim/plugged/lightline.vim/README.md, dotfiles/.vim/plugged/lightline.vim/colorscheme.md, dotfiles/.vim/plugged/nerdtree/.github/ISSUE_TEMPLATE/bug.md, dotfiles/.vim/plugged/nerdtree/.github/ISSUE_TEMPLATE/feature_request.md, dotfiles/.vim/plugged/nerdtree/.github/ISSUE_TEMPLATE/question.md, dotfiles/.vim/plugged/nerdtree/.github/workflows/vint.yml, dotfiles/.vim/plugged/nerdtree/.github/PULL_REQUEST_TEMPLATE.md, dotfiles/.vim/plugged/nerdtree/autoload/nerdtree/ui_glue.vim, dotfiles/.vim/plugged/nerdtree/autoload/nerdtree.vim, dotfiles/.vim/plugged/nerdtree/doc/NERDTree.txt, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/bookmark.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/creator.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/event.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/flag_set.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/key_map.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/menu_controller.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/menu_item.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/nerdtree.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/notifier.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/opener.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/path.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/tree_dir_node.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/tree_file_node.vim, dotfiles/.vim/plugged/nerdtree/lib/nerdtree/ui.vim, dotfiles/.vim/plugged/nerdtree/nerdtree_plugin/exec_menuitem.vim, dotfiles/.vim/plugged/nerdtree/nerdtree_plugin/fs_menu.vim, dotfiles/.vim/plugged/nerdtree/nerdtree_plugin/vcs.vim, dotfiles/.vim/plugged/nerdtree/plugin/NERD_tree.vim, dotfiles/.vim/plugged/nerdtree/syntax/nerdtree.vim, dotfiles/.vim/plugged/nerdtree/.gitignore, dotfiles/.vim/plugged/nerdtree/.gitrepo, dotfiles/.vim/plugged/nerdtree/.vintrc.yaml, dotfiles/.vim/plugged/nerdtree/CHANGELOG.md, dotfiles/.vim/plugged/nerdtree/LICENCE, dotfiles/.vim/plugged/nerdtree/README.markdown, dotfiles/.vim/plugged/nerdtree/_config.yml, dotfiles/.vim/plugged/nerdtree/screenshot.png, dotfiles/.vim/plugged/php.vim/attic/0-bootstrap.inc.php, dotfiles/.vim/plugged/php.vim/attic/10-collect.php, dotfiles/.vim/plugged/php.vim/attic/20-generate.php, dotfiles/.vim/plugged/php.vim/attic/30-update.php, dotfiles/.vim/plugged/php.vim/attic/Dockerfile, dotfiles/.vim/plugged/php.vim/attic/syntax.ini, dotfiles/.vim/plugged/php.vim/attic/update.sh, dotfiles/.vim/plugged/php.vim/syntax/php.vim, dotfiles/.vim/plugged/php.vim/.gitrepo, dotfiles/.vim/plugged/php.vim/README.md, dotfiles/.vim/plugged/python-syntax/folding-ideas/python.vim.1.13, dotfiles/.vim/plugged/python-syntax/folding-ideas/python.vim.1.14, dotfiles/.vim/plugged/python-syntax/syntax/python.vim, dotfiles/.vim/plugged/python-syntax/.gitrepo, dotfiles/.vim/plugged/python-syntax/CHANGES.txt, dotfiles/.vim/plugged/python-syntax/LICENSE, dotfiles/.vim/plugged/python-syntax/README.rst, dotfiles/.vim/plugged/python-syntax/TODO.txt, dotfiles/.vim/plugged/python-syntax/syntax.txt, dotfiles/.vim/plugged/python-syntax/test.py, dotfiles/.vim/plugged/syntastic/_assets/screenshot_1.png, dotfiles/.vim/plugged/syntastic/autoload/syntastic/c.vim, dotfiles/.vim/plugged/syntastic/autoload/syntastic/log.vim, dotfiles/.vim/plugged/syntastic/autoload/syntastic/postprocess.vim, dotfiles/.vim/plugged/syntastic/autoload/syntastic/preprocess.vim, dotfiles/.vim/plugged/syntastic/autoload/syntastic/util.vim, dotfiles/.vim/plugged/syntastic/doc/syntastic-checkers.txt, dotfiles/.vim/plugged/syntastic/doc/syntastic.txt, dotfiles/.vim/plugged/syntastic/plugin/syntastic/autoloclist.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/balloons.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/checker.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/cursor.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/highlighting.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/loclist.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/modemap.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/notifiers.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/registry.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic/signs.vim, dotfiles/.vim/plugged/syntastic/plugin/syntastic.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/actionscript/mxmlc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ada/gcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ansible/ansible_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/apiblueprint/drafter.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/applescript/osacompile.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/asciidoc/asciidoc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/asciidoc/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/asl/iasl.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/asm/gcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/bro/bro.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/avrgcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/checkpatch.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/clang_check.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/clang_tidy.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/cppcheck.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/cppclean.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/flawfinder.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/gcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/make.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/oclint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/pc_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/sparse.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/c/splint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cabal/cabal.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/chef/foodcritic.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cmake/cmakelint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/co/coco.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cobol/cobc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/coffee/coffee.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/coffee/coffee_jshint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/coffee/coffeelint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/coq/coqtop.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/avrgcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/clang_check.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/clang_tidy.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/cppcheck.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/cppclean.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/cpplint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/flawfinder.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/gcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/oclint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/pc_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/verapp.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cs/mcs.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/css/csslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/css/mixedindentlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/css/phpcs.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/css/prettycss.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/css/recess.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/css/stylelint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cucumber/cucumber.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/cuda/nvcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/d/dmd.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/d/dscanner.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/dart/dartanalyzer.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/docbk/igor.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/docbk/xmllint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/dockerfile/dockerfile_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/dockerfile/hadolint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/dustjs/swiffer.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/elixir/elixir.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/erlang/erlang_check_file.erl, dotfiles/.vim/plugged/syntastic/syntax_checkers/erlang/escript.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/erlang/syntaxerl.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/eruby/ruby.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/fortran/gfortran.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/glsl/cgc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/go/go.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/go/gofmt.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/go/golangci_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/go/golint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/go/gometalinter.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/go/gotype.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/go/govet.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/haml/haml.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/haml/haml_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/handlebars/handlebars.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/haskell/hdevtools.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/haskell/hlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/haskell/scan.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/haxe/haxe.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/help/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/hss/hss.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/eslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/gjslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/htmlhint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/jshint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/stylelint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/textlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/tidy.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/validator.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/html/w3.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/jade/jade_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/java/checkstyle.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/java/javac.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/closurecompiler.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/eslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/flow.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/gjslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jscs.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jshint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jsl.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jsxhint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/lynt.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/mixedindentlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/standard.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/tern_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/json/jsonlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/json/jsonval.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/less/less-lint.coffee, dotfiles/.vim/plugged/syntastic/syntax_checkers/less/less-lint.js, dotfiles/.vim/plugged/syntastic/syntax_checkers/less/lessc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/less/recess.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/lex/flex.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/limbo/limbo.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/lisp/clisp.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/llvm/llvm.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/lua/luac.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/lua/luacheck.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/markdown/mdl.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/markdown/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/markdown/remark_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/markdown/textlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/matlab/mlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/mercury/mmc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/nasm/nasm.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/nix/nix.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/nroff/igor.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/nroff/mandoc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/nroff/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/objc/gcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/objc/oclint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/objcpp/gcc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/objcpp/oclint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ocaml/camlp4o.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/perl/perl.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/perl/perlcritic.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/perl/podchecker.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/perl6/perl6.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/php/php.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/php/phpcs.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/php/phplint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/php/phpmd.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/php/phpstan.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/po/dennis.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/po/msgfmt.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/pod/podchecker.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/pod/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/pug/pug_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/puppet/puppet.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/puppet/puppetlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/bandit.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/codec.py, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/compile.py, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/flake8.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/frosted.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/mypy.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pep257.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pep8.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/prospector.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/py3kwarn.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pycodestyle.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pydocstyle.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pyflakes.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pylama.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pylint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/python/python.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/qml/qmllint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/r/lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/r/lintr.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/r/svtools.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/racket/code-ayatollah.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/racket/racket.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/raku/raku.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/rmd/lintr.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/rnc/rnv.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/rst/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/rst/rst2pseudoxml.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/rst/rstcheck.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/rst/sphinx.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/flog.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/jruby.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/macruby.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/mri.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/reek.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/rubocop.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/rubylint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/sorbet.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sass/sass.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sass/sass_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sass/sassc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/scala/fsc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/scala/scalac.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/scala/scalastyle.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/mixedindentlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/sass.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/sass_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/sassc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/scss_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/bashate.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/checkbashisms.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/sh.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/shellcheck.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/shfmt.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/slim/slim_lint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/slim/slimrb.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sml/smlnj.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/solidity/solc.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/solidity/solhint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/solidity/solium.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/spec/rpmlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sql/sqlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/sql/tsqllint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/stylus/stylint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/svg/validator.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/svg/w3.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/tcl/nagelfar.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/tex/chktex.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/tex/lacheck.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/tex/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/texinfo/makeinfo.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/texinfo/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/text/atdtool.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/text/igor.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/text/language_check.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/text/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/text/textlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/trig/rapper.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/turtle/rapper.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/turtle/ttl.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/twig/twigcs.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/twig/twiglint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/typescript/eslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/typescript/lynt.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/typescript/tslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/verilog/iverilog.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/verilog/verilator.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/vhdl/ghdl.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/vhdl/vcom.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/vim/vimlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/vim/vint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/vue/eslint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/vue/pug_lint_vue.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/vue/stylelint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/jshint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/proselint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/tidy.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/validator.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/w3.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xml/plutil.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xml/xmllint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xquery/basex.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/xslt/xmllint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/yacc/bison.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/yaml/jsyaml.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/yaml/yamllint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/yaml/yamlxs.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/yang/pyang.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/yara/yara.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/z80/z80syntaxchecker.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/zpt/zptlint.vim, dotfiles/.vim/plugged/syntastic/syntax_checkers/zsh/zsh.vim, dotfiles/.vim/plugged/syntastic/.gitignore, dotfiles/.vim/plugged/syntastic/.gitrepo, dotfiles/.vim/plugged/syntastic/CONTRIBUTING.md, dotfiles/.vim/plugged/syntastic/LICENCE, dotfiles/.vim/plugged/syntastic/README.markdown, dotfiles/.vim/plugged/vim-airline/.github/workflows/ci.yml, dotfiles/.vim/plugged/vim-airline/.github/workflows/reviewdog.yml, dotfiles/.vim/plugged/vim-airline/.github/ISSUE_TEMPLATE.md, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/default.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/jsformatter.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/short_path.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/tabnr.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/unique_tail.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/unique_tail_improved.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/autoshow.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/buffers.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/buflist.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/builder.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/ctrlspace.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/tabs.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/tabws.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/xtabline.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/wordcount/formatters/default.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/wordcount/formatters/readingtime.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/ale.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/battery.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/bookmark.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/branch.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/bufferline.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/capslock.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/coc.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/commandt.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/csv.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/ctrlp.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/ctrlspace.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/cursormode.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/default.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/denite.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/dirvish.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/eclim.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/example.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/fern.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/fugitiveline.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/fzf.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/gen_tags.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/gina.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/grepper.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/gutentags.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/hunks.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/keymap.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/languageclient.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/localsearch.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/lsp.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/neomake.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/netrw.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/nrrwrgn.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/nvimlsp.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/obsession.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/omnisharp.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/po.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/poetv.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/promptline.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/quickfix.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/rufo.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/scrollbar.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/searchcount.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/syntastic.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tagbar.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/taglist.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/term.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tmuxline.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/undotree.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/unicode.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/unite.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vim9lsp.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vimagit.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vimcmake.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vimtex.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/virtualenv.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vista.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/whitespace.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/windowswap.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/wordcount.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/xkblayout.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/ycm.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/zoomwintab.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/formatter/short_path.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/themes/dark.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/async.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/builder.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/debug.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/highlighter.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/init.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/msdos.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/parts.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/section.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/themes.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline/util.vim, dotfiles/.vim/plugged/vim-airline/autoload/airline.vim, dotfiles/.vim/plugged/vim-airline/doc/airline.txt, dotfiles/.vim/plugged/vim-airline/plugin/airline.vim, dotfiles/.vim/plugged/vim-airline/test/.themisrc, dotfiles/.vim/plugged/vim-airline/test/airline.vimspec, dotfiles/.vim/plugged/vim-airline/test/builder.vimspec, dotfiles/.vim/plugged/vim-airline/test/commands.vimspec, dotfiles/.vim/plugged/vim-airline/test/extensions_default.vimspec, dotfiles/.vim/plugged/vim-airline/test/extensions_tabline.vimspec, dotfiles/.vim/plugged/vim-airline/test/highlighter.vimspec, dotfiles/.vim/plugged/vim-airline/test/init.vimspec, dotfiles/.vim/plugged/vim-airline/test/parts.vimspec, dotfiles/.vim/plugged/vim-airline/test/section.vimspec, dotfiles/.vim/plugged/vim-airline/test/themes.vimspec, dotfiles/.vim/plugged/vim-airline/test/util.vimspec, dotfiles/.vim/plugged/vim-airline/.gitignore, dotfiles/.vim/plugged/vim-airline/.gitrepo, dotfiles/.vim/plugged/vim-airline/CHANGELOG.md, dotfiles/.vim/plugged/vim-airline/CONTRIBUTING.md, dotfiles/.vim/plugged/vim-airline/LICENSE, dotfiles/.vim/plugged/vim-airline/README.md, dotfiles/.vim/plugged/vim-carbon-now-sh/doc/vim-carbon-now-sh.txt, dotfiles/.vim/plugged/vim-carbon-now-sh/plugin/vim-carbon-now-sh.vim, dotfiles/.vim/plugged/vim-carbon-now-sh/.gitrepo, dotfiles/.vim/plugged/vim-carbon-now-sh/LICENSE, dotfiles/.vim/plugged/vim-carbon-now-sh/README.md, dotfiles/.vim/plugged/vim-devicons/.github/workflows/ci.yml, dotfiles/.vim/plugged/vim-devicons/.github/workflows/vint.yml, dotfiles/.vim/plugged/vim-devicons/.github/ISSUE_TEMPLATE.md, dotfiles/.vim/plugged/vim-devicons/.github/PULL_REQUEST_TEMPLATE.md, dotfiles/.vim/plugged/vim-devicons/autoload/airline/extensions/tabline/formatters/webdevicons.vim, dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/ctrlp.vim, dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/denite.vim, dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/flagship.vim, dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/startify.vim, dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/unite.vim, dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/vimfiler.vim, dotfiles/.vim/plugged/vim-devicons/autoload/vimfiler/columns/devicons.vim, dotfiles/.vim/plugged/vim-devicons/doc/webdevicons.txt, dotfiles/.vim/plugged/vim-devicons/nerdtree_plugin/webdevicons.vim, dotfiles/.vim/plugged/vim-devicons/plugin/webdevicons.vim, dotfiles/.vim/plugged/vim-devicons/pythonx/vim_devicons/powerline/__init__.py, dotfiles/.vim/plugged/vim-devicons/pythonx/vim_devicons/powerline/segments.py, dotfiles/.vim/plugged/vim-devicons/pythonx/vim_devicons/__init__.py, dotfiles/.vim/plugged/vim-devicons/rplugin/python3/denite/filter/devicons_denite_converter.py, dotfiles/.vim/plugged/vim-devicons/test/.themisrc, dotfiles/.vim/plugged/vim-devicons/test/default_setting.vim, dotfiles/.vim/plugged/vim-devicons/test/fileformat.vim, dotfiles/.vim/plugged/vim-devicons/test/filetype.vim, dotfiles/.vim/plugged/vim-devicons/.gitignore, dotfiles/.vim/plugged/vim-devicons/.gitrepo, dotfiles/.vim/plugged/vim-devicons/CHANGELOG.md, dotfiles/.vim/plugged/vim-devicons/CODE_OF_CONDUCT.md, dotfiles/.vim/plugged/vim-devicons/CONTRIBUTING.md, dotfiles/.vim/plugged/vim-devicons/DEVELOPER.md, dotfiles/.vim/plugged/vim-devicons/LICENSE, dotfiles/.vim/plugged/vim-devicons/README.md, dotfiles/.vim/plugged/vim-fugitive/.github/FUNDING.yml, dotfiles/.vim/plugged/vim-fugitive/autoload/fugitive.vim, dotfiles/.vim/plugged/vim-fugitive/doc/fugitive.txt, dotfiles/.vim/plugged/vim-fugitive/ftdetect/fugitive.vim, dotfiles/.vim/plugged/vim-fugitive/ftplugin/fugitiveblame.vim, dotfiles/.vim/plugged/vim-fugitive/plugin/fugitive.vim, dotfiles/.vim/plugged/vim-fugitive/syntax/fugitive.vim, dotfiles/.vim/plugged/vim-fugitive/syntax/fugitiveblame.vim, dotfiles/.vim/plugged/vim-fugitive/.gitattributes, dotfiles/.vim/plugged/vim-fugitive/.gitignore, dotfiles/.vim/plugged/vim-fugitive/.gitrepo, dotfiles/.vim/plugged/vim-fugitive/CONTRIBUTING.markdown, dotfiles/.vim/plugged/vim-fugitive/README.markdown, dotfiles/.vim/plugged/vim-gitgutter/.github/issue_template.md, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/async.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/debug.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/diff.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/diff_highlight.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/fold.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/highlight.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/hunk.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/sign.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/utility.vim, dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim, dotfiles/.vim/plugged/vim-gitgutter/doc/gitgutter.txt, dotfiles/.vim/plugged/vim-gitgutter/plugin/gitgutter.vim, dotfiles/.vim/plugged/vim-gitgutter/test/cp932.txt, dotfiles/.vim/plugged/vim-gitgutter/test/fixture.txt, dotfiles/.vim/plugged/vim-gitgutter/test/fixture_dos.txt, dotfiles/.vim/plugged/vim-gitgutter/test/runner.vim, dotfiles/.vim/plugged/vim-gitgutter/test/test, dotfiles/.vim/plugged/vim-gitgutter/test/test_gitgutter.vim, dotfiles/.vim/plugged/vim-gitgutter/.gitignore, dotfiles/.vim/plugged/vim-gitgutter/.gitrepo, dotfiles/.vim/plugged/vim-gitgutter/LICENCE, dotfiles/.vim/plugged/vim-gitgutter/README.mkd, dotfiles/.vim/plugged/vim-gitgutter/screenshot.png, dotfiles/.vim/plugged/vim-go/.github/workflows/git.yml, dotfiles/.vim/plugged/vim-go/.github/workflows/test.yml, dotfiles/.vim/plugged/vim-go/.github/CONTRIBUTING.md, dotfiles/.vim/plugged/vim-go/.github/FUNDING.yml, dotfiles/.vim/plugged/vim-go/.github/ISSUE_TEMPLATE.md, dotfiles/.vim/plugged/vim-go/assets/vim-go.png, dotfiles/.vim/plugged/vim-go/assets/vim-go.svg, dotfiles/.vim/plugged/vim-go/autoload/ctrlp/decls.vim, dotfiles/.vim/plugged/vim-go/autoload/fzf/decls.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lsp/completionitemkind.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lsp/filechangetype.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lsp/lsp.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lsp/lsp_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lsp/message.vim, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/cmd/bad.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/complete/complete.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/config/buildtags/buildtags.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/config/buildtags/constrainedfoo.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/config/buildtags/foo.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/config/buildtags/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/debug/compilerror/main.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/debug/debugmain/debugmain.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/def/jump.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/src/imports/vendor/gh.com/gi/foo-logging/logger.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/src/imports/goimports.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/src/imports/goimports_golden.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/hello.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/hello_golden.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/job/dir has spaces/main.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/errcheck/compilererror/compilererror.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/errcheck/errcheck.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/errcheck/errcheck_test.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/errcheck/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/foo/foo.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/foo/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/golangci-lint/problems/importabs/ok.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/golangci-lint/problems/importabs/problems.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/golangci-lint/problems/multiple/problems.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/golangci-lint/problems/shadow/problems.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/baz.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/lint.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/quux.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/vet/compilererror/compilererror.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/vet/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/vet/vet.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/fmt/format.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/fmt/format_golden.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/fmt/newline.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/imports/imports.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/imports/imports_golden.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/bar/.gitkeep, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/baz/.gitkeep, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/vendor/foo/.gitkeep, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/package.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/add_all_golden.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/add_all_golden_options.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/add_all_input.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/remove_all_golden.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/remove_all_input.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/term/term.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/compilerror/compilerror.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/compilerror/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/example/example_test.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/example/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/play/mock/controller.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/play/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/play/play_test.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/showname/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/showname/showname_test.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/testcompilerror/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/testcompilerror/testcompilerror_test.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/timeout/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/timeout/timeout_test.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/veterror/go.mod, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/veterror/veterror.go, dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/.gitignore, dotfiles/.vim/plugged/vim-go/autoload/go/alternate.vim, dotfiles/.vim/plugged/vim-go/autoload/go/asmfmt.vim, dotfiles/.vim/plugged/vim-go/autoload/go/auto.vim, dotfiles/.vim/plugged/vim-go/autoload/go/calls.vim, dotfiles/.vim/plugged/vim-go/autoload/go/calls_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/cmd.vim, dotfiles/.vim/plugged/vim-go/autoload/go/cmd_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/complete.vim, dotfiles/.vim/plugged/vim-go/autoload/go/complete_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/config.vim, dotfiles/.vim/plugged/vim-go/autoload/go/config_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/coverage.vim, dotfiles/.vim/plugged/vim-go/autoload/go/debug.vim, dotfiles/.vim/plugged/vim-go/autoload/go/debug_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/decls.vim, dotfiles/.vim/plugged/vim-go/autoload/go/def.vim, dotfiles/.vim/plugged/vim-go/autoload/go/def_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/doc.vim, dotfiles/.vim/plugged/vim-go/autoload/go/fillstruct.vim, dotfiles/.vim/plugged/vim-go/autoload/go/fillstruct_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/fmt.vim, dotfiles/.vim/plugged/vim-go/autoload/go/fmt_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/guru.vim, dotfiles/.vim/plugged/vim-go/autoload/go/guru_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/highlight_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/iferr.vim, dotfiles/.vim/plugged/vim-go/autoload/go/impl.vim, dotfiles/.vim/plugged/vim-go/autoload/go/impl_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/implements.vim, dotfiles/.vim/plugged/vim-go/autoload/go/import.vim, dotfiles/.vim/plugged/vim-go/autoload/go/import_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/indent_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/issue.vim, dotfiles/.vim/plugged/vim-go/autoload/go/job.vim, dotfiles/.vim/plugged/vim-go/autoload/go/job_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/keyify.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lint.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lint_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/list.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lsp.vim, dotfiles/.vim/plugged/vim-go/autoload/go/lsp_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/mod.vim, dotfiles/.vim/plugged/vim-go/autoload/go/package.vim, dotfiles/.vim/plugged/vim-go/autoload/go/package_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/path.vim, dotfiles/.vim/plugged/vim-go/autoload/go/play.vim, dotfiles/.vim/plugged/vim-go/autoload/go/promise.vim, dotfiles/.vim/plugged/vim-go/autoload/go/promise_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/referrers.vim, dotfiles/.vim/plugged/vim-go/autoload/go/rename.vim, dotfiles/.vim/plugged/vim-go/autoload/go/statusline.vim, dotfiles/.vim/plugged/vim-go/autoload/go/tags.vim, dotfiles/.vim/plugged/vim-go/autoload/go/tags_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/template.vim, dotfiles/.vim/plugged/vim-go/autoload/go/template_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/term.vim, dotfiles/.vim/plugged/vim-go/autoload/go/term_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/test_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/textobj.vim, dotfiles/.vim/plugged/vim-go/autoload/go/tool.vim, dotfiles/.vim/plugged/vim-go/autoload/go/tool_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/ui.vim, dotfiles/.vim/plugged/vim-go/autoload/go/uri.vim, dotfiles/.vim/plugged/vim-go/autoload/go/uri_test.vim, dotfiles/.vim/plugged/vim-go/autoload/go/util.vim, dotfiles/.vim/plugged/vim-go/autoload/unite/sources/decls.vim, dotfiles/.vim/plugged/vim-go/autoload/gotest.vim, dotfiles/.vim/plugged/vim-go/compiler/go.vim, dotfiles/.vim/plugged/vim-go/doc/vim-go.txt, dotfiles/.vim/plugged/vim-go/ftdetect/gofiletype.vim, dotfiles/.vim/plugged/vim-go/ftplugin/go/commands.vim, dotfiles/.vim/plugged/vim-go/ftplugin/go/mappings.vim, dotfiles/.vim/plugged/vim-go/ftplugin/go/snippets.vim, dotfiles/.vim/plugged/vim-go/ftplugin/go/tagbar.vim, dotfiles/.vim/plugged/vim-go/ftplugin/gomod/commands.vim, dotfiles/.vim/plugged/vim-go/ftplugin/gomod/mappings.vim, dotfiles/.vim/plugged/vim-go/ftplugin/asm.vim, dotfiles/.vim/plugged/vim-go/ftplugin/go.vim, dotfiles/.vim/plugged/vim-go/ftplugin/gohtmltmpl.vim, dotfiles/.vim/plugged/vim-go/ftplugin/gomod.vim, dotfiles/.vim/plugged/vim-go/gosnippets/UltiSnips/go.snippets, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_eq, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_err, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_errt, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_errw, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_f, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_ff, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_fori, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_pkg, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_sp, dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_tt, dotfiles/.vim/plugged/vim-go/gosnippets/snippets/go.snip, dotfiles/.vim/plugged/vim-go/indent/go.vim, dotfiles/.vim/plugged/vim-go/indent/gohtmltmpl.vim, dotfiles/.vim/plugged/vim-go/plugin/go.vim, dotfiles/.vim/plugged/vim-go/rplugin/python3/denite/source/decls.py, dotfiles/.vim/plugged/vim-go/scripts/bench-syntax, dotfiles/.vim/plugged/vim-go/scripts/docker-test, dotfiles/.vim/plugged/vim-go/scripts/install-tools, dotfiles/.vim/plugged/vim-go/scripts/install-vim, dotfiles/.vim/plugged/vim-go/scripts/lint, dotfiles/.vim/plugged/vim-go/scripts/run-vim, dotfiles/.vim/plugged/vim-go/scripts/runbench.vim, dotfiles/.vim/plugged/vim-go/scripts/runtest.vim, dotfiles/.vim/plugged/vim-go/scripts/test, dotfiles/.vim/plugged/vim-go/syntax/go.vim, dotfiles/.vim/plugged/vim-go/syntax/godebugoutput.vim, dotfiles/.vim/plugged/vim-go/syntax/godebugstacktrace.vim, dotfiles/.vim/plugged/vim-go/syntax/godebugvariables.vim, dotfiles/.vim/plugged/vim-go/syntax/godefstack.vim, dotfiles/.vim/plugged/vim-go/syntax/gohtmltmpl.vim, dotfiles/.vim/plugged/vim-go/syntax/gomod.vim, dotfiles/.vim/plugged/vim-go/syntax/gosum.vim, dotfiles/.vim/plugged/vim-go/syntax/gotexttmpl.vim, dotfiles/.vim/plugged/vim-go/syntax/gowork.vim, dotfiles/.vim/plugged/vim-go/syntax/vimgo.vim, dotfiles/.vim/plugged/vim-go/templates/hello_world.go, dotfiles/.vim/plugged/vim-go/templates/hello_world_test.go, dotfiles/.vim/plugged/vim-go/test/parse.go, dotfiles/.vim/plugged/vim-go/.codecov.yml, dotfiles/.vim/plugged/vim-go/.coveragerc, dotfiles/.vim/plugged/vim-go/.dockerignore, dotfiles/.vim/plugged/vim-go/.editorconfig, dotfiles/.vim/plugged/vim-go/.gitignore, dotfiles/.vim/plugged/vim-go/.gitrepo, dotfiles/.vim/plugged/vim-go/.vintrc.yaml, dotfiles/.vim/plugged/vim-go/CHANGELOG.md, dotfiles/.vim/plugged/vim-go/Dockerfile, dotfiles/.vim/plugged/vim-go/LICENSE, dotfiles/.vim/plugged/vim-go/Makefile, dotfiles/.vim/plugged/vim-go/README.md, dotfiles/.vim/plugged/vim-go/addon-info.json, dotfiles/.vim/plugged/vim-javascript/after/ftplugin/javascript.vim, dotfiles/.vim/plugged/vim-javascript/compiler/eslint.vim, dotfiles/.vim/plugged/vim-javascript/extras/ctags, dotfiles/.vim/plugged/vim-javascript/extras/flow.vim, dotfiles/.vim/plugged/vim-javascript/extras/jsdoc.vim, dotfiles/.vim/plugged/vim-javascript/extras/ngdoc.vim, dotfiles/.vim/plugged/vim-javascript/ftdetect/flow.vim, dotfiles/.vim/plugged/vim-javascript/ftdetect/javascript.vim, dotfiles/.vim/plugged/vim-javascript/indent/javascript.vim, dotfiles/.vim/plugged/vim-javascript/syntax/flow.vim, dotfiles/.vim/plugged/vim-javascript/syntax/javascript.vim, dotfiles/.vim/plugged/vim-javascript/.gitrepo, dotfiles/.vim/plugged/vim-javascript/ISSUE_TEMPLATE.md, dotfiles/.vim/plugged/vim-javascript/README.md, dotfiles/.vim/plugged/vim-jsx/after/ftplugin/jsx.vim, dotfiles/.vim/plugged/vim-jsx/after/indent/jsx.vim, dotfiles/.vim/plugged/vim-jsx/after/syntax/jsx.vim, dotfiles/.vim/plugged/vim-jsx/ftdetect/javascript.vim, dotfiles/.vim/plugged/vim-jsx/.gitrepo, dotfiles/.vim/plugged/vim-jsx/README.md, dotfiles/.vim/plugged/vim-markdown/.github/workflows/reviewdog.yml, dotfiles/.vim/plugged/vim-markdown/.github/workflows/vader.yml, dotfiles/.vim/plugged/vim-markdown/.github/workflows/vint.yml, dotfiles/.vim/plugged/vim-markdown/after/ftplugin/markdown.vim, dotfiles/.vim/plugged/vim-markdown/doc/vim-markdown.txt, dotfiles/.vim/plugged/vim-markdown/ftdetect/markdown.vim, dotfiles/.vim/plugged/vim-markdown/ftplugin/markdown.vim, dotfiles/.vim/plugged/vim-markdown/indent/markdown.vim, dotfiles/.vim/plugged/vim-markdown/registry/markdown.yaml, dotfiles/.vim/plugged/vim-markdown/syntax/markdown.vim, dotfiles/.vim/plugged/vim-markdown/test/README.md, dotfiles/.vim/plugged/vim-markdown/test/folding-toc.vader, dotfiles/.vim/plugged/vim-markdown/test/folding.vader, dotfiles/.vim/plugged/vim-markdown/test/ge_test.md, dotfiles/.vim/plugged/vim-markdown/test/indent-new-list-item.vader, dotfiles/.vim/plugged/vim-markdown/test/indent.md, dotfiles/.vim/plugged/vim-markdown/test/indent.vader, dotfiles/.vim/plugged/vim-markdown/test/insert-toc.vader, dotfiles/.vim/plugged/vim-markdown/test/map.vader, dotfiles/.vim/plugged/vim-markdown/test/python-folding.vader, dotfiles/.vim/plugged/vim-markdown/test/run-tests.sh, dotfiles/.vim/plugged/vim-markdown/test/syntax-singleline.vader, dotfiles/.vim/plugged/vim-markdown/test/syntax.md, dotfiles/.vim/plugged/vim-markdown/test/syntax.vader, dotfiles/.vim/plugged/vim-markdown/test/table-format.vader, dotfiles/.vim/plugged/vim-markdown/test/toc-autofit.vader, dotfiles/.vim/plugged/vim-markdown/test/toc.vader, dotfiles/.vim/plugged/vim-markdown/test/vimrc, dotfiles/.vim/plugged/vim-markdown/.gitignore, dotfiles/.vim/plugged/vim-markdown/.gitrepo, dotfiles/.vim/plugged/vim-markdown/.vintrc.yaml, dotfiles/.vim/plugged/vim-markdown/CONTRIBUTING.md, dotfiles/.vim/plugged/vim-markdown/Makefile, dotfiles/.vim/plugged/vim-markdown/README.md, dotfiles/.vim/plugged/vim-multiple-cursors/assets/example1.gif, dotfiles/.vim/plugged/vim-multiple-cursors/assets/example2.gif, dotfiles/.vim/plugged/vim-multiple-cursors/assets/example3.gif, dotfiles/.vim/plugged/vim-multiple-cursors/assets/example4.gif, dotfiles/.vim/plugged/vim-multiple-cursors/autoload/multiple_cursors.vim, dotfiles/.vim/plugged/vim-multiple-cursors/doc/multiple_cursors.txt, dotfiles/.vim/plugged/vim-multiple-cursors/plugin/multiple_cursors.vim, dotfiles/.vim/plugged/vim-multiple-cursors/spec/benchmark_spec.rb, dotfiles/.vim/plugged/vim-multiple-cursors/spec/multiple_cursors_spec.rb, dotfiles/.vim/plugged/vim-multiple-cursors/spec/spec_helper.rb, dotfiles/.vim/plugged/vim-multiple-cursors/.gitignore, dotfiles/.vim/plugged/vim-multiple-cursors/.gitrepo, dotfiles/.vim/plugged/vim-multiple-cursors/.rspec, dotfiles/.vim/plugged/vim-multiple-cursors/.travis.yml, dotfiles/.vim/plugged/vim-multiple-cursors/CHANGELOG.md, dotfiles/.vim/plugged/vim-multiple-cursors/CONTRIBUTING.md, dotfiles/.vim/plugged/vim-multiple-cursors/Gemfile, dotfiles/.vim/plugged/vim-multiple-cursors/Gemfile.lock, dotfiles/.vim/plugged/vim-multiple-cursors/MIT-LICENSE.txt, dotfiles/.vim/plugged/vim-multiple-cursors/README.md, dotfiles/.vim/plugged/vim-multiple-cursors/Rakefile, dotfiles/.vim/plugged/vim-prettier/.github/ISSUE_TEMPLATE.md, dotfiles/.vim/plugged/vim-prettier/.github/PULL_REQUEST_TEMPLATE.md, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/bridge/parser.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/job/async/neovim.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/job/async/vim.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/job/runner.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/logging/error.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/presets/fb.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/resolver/config.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/resolver/executable.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/resolver/preset.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/utils/buffer.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/utils/quickfix.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier/utils/shim.vim, dotfiles/.vim/plugged/vim-prettier/autoload/prettier.vim, dotfiles/.vim/plugged/vim-prettier/doc/prettier.txt, dotfiles/.vim/plugged/vim-prettier/ftdetect/css.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/graphql.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/html.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/javascript.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/json.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/less.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/lua.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/markdown.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/php.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/ruby.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/scss.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/svelte.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/typescript.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/vue.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/xml.vim, dotfiles/.vim/plugged/vim-prettier/ftdetect/yaml.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/css.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/graphql.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/html.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/javascript.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/json.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/less.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/lua.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/markdown.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/php.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/ruby.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/scss.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/svelte.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/typescript.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/vue.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/xml.vim, dotfiles/.vim/plugged/vim-prettier/ftplugin/yaml.vim, dotfiles/.vim/plugged/vim-prettier/media/vim-prettier.gif, dotfiles/.vim/plugged/vim-prettier/plugin/prettier.vim, dotfiles/.vim/plugged/vim-prettier/tests/__snapshots__/formatting.test.js.snap, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.css, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.graphql, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.html, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.js, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.json, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.less, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.lua, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.md, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.php, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.rb, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.scss, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.ts, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.vue, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.xml, dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.yaml, dotfiles/.vim/plugged/vim-prettier/tests/formatting.test.js, dotfiles/.vim/plugged/vim-prettier/tests/vimrc, dotfiles/.vim/plugged/vim-prettier/.gitignore, dotfiles/.vim/plugged/vim-prettier/.gitrepo, dotfiles/.vim/plugged/vim-prettier/CHANGELOG.md, dotfiles/.vim/plugged/vim-prettier/Dockerfile, dotfiles/.vim/plugged/vim-prettier/LICENSE, dotfiles/.vim/plugged/vim-prettier/Makefile, dotfiles/.vim/plugged/vim-prettier/README.md, dotfiles/.vim/plugged/vim-prettier/package.json, dotfiles/.vim/plugged/vim-prettier/yarn.lock, dotfiles/.vim/plugged/vim-sensible/.github/FUNDING.yml, dotfiles/.vim/plugged/vim-sensible/plugin/sensible.vim, dotfiles/.vim/plugged/vim-sensible/.gitrepo, dotfiles/.vim/plugged/vim-sensible/README.markdown, dotfiles/.vim/plugged/vim-surround/.github/FUNDING.yml, dotfiles/.vim/plugged/vim-surround/doc/surround.txt, dotfiles/.vim/plugged/vim-surround/plugin/surround.vim, dotfiles/.vim/plugged/vim-surround/.gitignore, dotfiles/.vim/plugged/vim-surround/.gitrepo, dotfiles/.vim/plugged/vim-surround/README.markdown, dotfiles/.vim/plugged/zoxide.vim/autoload/zoxide.vim, dotfiles/.vim/plugged/zoxide.vim/doc/zoxide-vim.txt, dotfiles/.vim/plugged/zoxide.vim/lua/zoxide-vim.lua, dotfiles/.vim/plugged/zoxide.vim/plugin/zoxide.vim, dotfiles/.vim/plugged/zoxide.vim/.gitrepo, dotfiles/.vim/plugged/zoxide.vim/LICENSE, dotfiles/.vim/plugged/zoxide.vim/README.md, dotfiles/Library/Developer/Xcode/UserData/FontAndColorThemes/Betelgeuse Dark.dvtcolortheme, dotfiles/Library/Developer/Xcode/UserData/FontAndColorThemes/Betelgeuse Light.dvtcolortheme, dotfiles/Library/Preferences/com.apple.Terminal.plist, dotfiles/.bash_logout, .local/p10k.zsh, .local/fzf-tmux.sh, dotfiles/.Xresources, dotfiles/.bashrc, dotfiles/.bash_profile, dotfiles/.editorconfig, dotfiles/.gitconfig, dotfiles/.inputrc, dotfiles/.npmrc, dotfiles/.profile, dotfiles/.tmux.conf, dotfiles/.tmux.conf.local, dotfiles/.vimrc, dotfiles/.zshrc --- .local/fzf-tmux.sh | 224 - .local/p10k.zsh | 1641 ---- .../lightline/colorscheme/Betelgeuse.vim | 0 {dotfiles/.vim => .vim}/autoload/plug.vim | 0 {dotfiles/.vim => .vim}/colors/betelgeuse.vim | 0 {dotfiles/.vscode => .vscode}/extensions.json | 0 {dotfiles/.vscode => .vscode}/settings.json | 0 dotfiles/.Xresources | 38 - dotfiles/.bash_logout | 5 - dotfiles/.bash_profile | 28 - dotfiles/.bashrc | 80 - dotfiles/.editorconfig | 15 - dotfiles/.gitconfig | 87 - dotfiles/.inputrc | 46 - dotfiles/.npmrc | 3 - dotfiles/.profile | 121 - dotfiles/.tmux.conf | 1534 --- dotfiles/.tmux.conf.local | 431 - dotfiles/.vim/plugged/ale/.appveyor.yml | 48 - dotfiles/.vim/plugged/ale/.editorconfig | 14 - dotfiles/.vim/plugged/ale/.gitattributes | 13 - .../plugged/ale/.github/CODE_OF_CONDUCT.md | 3 - .../.vim/plugged/ale/.github/CONTRIBUTING.md | 25 - .../ale/.github/ISSUE_TEMPLATE/config.yml | 6 - .../.github/ISSUE_TEMPLATE/report-a-bug.md | 48 - .../suggest-a-new-linter-or-fixer.md | 21 - .../ISSUE_TEMPLATE/suggest-an-improvement.md | 8 - .../ale/.github/PULL_REQUEST_TEMPLATE.md | 13 - dotfiles/.vim/plugged/ale/.github/stale.yml | 17 - .../plugged/ale/.github/workflows/main.yml | 37 - dotfiles/.vim/plugged/ale/.gitignore | 12 - dotfiles/.vim/plugged/ale/.gitrepo | 12 - dotfiles/.vim/plugged/ale/.vintrc.yaml | 5 - dotfiles/.vim/plugged/ale/Dockerfile | 27 - dotfiles/.vim/plugged/ale/LICENSE | 22 - dotfiles/.vim/plugged/ale/README.md | 963 -- .../plugged/ale/ale_linters/ada/adals.vim | 26 - .../plugged/ale/ale_linters/ada/cspell.vim | 5 - .../.vim/plugged/ale/ale_linters/ada/gcc.vim | 54 - .../ale/ale_linters/ansible/ansible_lint.vim | 128 - .../ale/ale_linters/apiblueprint/drafter.vim | 38 - .../ale_linters/apkbuild/apkbuild_lint.vim | 12 - .../ale_linters/apkbuild/secfixes_check.vim | 12 - .../plugged/ale/ale_linters/asciidoc/alex.vim | 4 - .../ale/ale_linters/asciidoc/cspell.vim | 5 - .../ale/ale_linters/asciidoc/languagetool.vim | 5 - .../ale/ale_linters/asciidoc/proselint.vim | 9 - .../ale/ale_linters/asciidoc/redpen.vim | 9 - .../ale/ale_linters/asciidoc/textlint.vim | 9 - .../plugged/ale/ale_linters/asciidoc/vale.vim | 9 - .../ale/ale_linters/asciidoc/writegood.vim | 4 - .../.vim/plugged/ale/ale_linters/asm/gcc.vim | 37 - .../plugged/ale/ale_linters/avra/avra.vim | 36 - .../.vim/plugged/ale/ale_linters/awk/gawk.vim | 23 - .../ale/ale_linters/bats/shellcheck.vim | 4 - .../plugged/ale/ale_linters/bib/bibclean.vim | 80 - .../plugged/ale/ale_linters/bicep/bicep.vim | 64 - .../ale/ale_linters/bitbake/oelint_adv.vim | 47 - .../.vim/plugged/ale/ale_linters/c/cc.vim | 67 - .../.vim/plugged/ale/ale_linters/c/ccls.vim | 15 - .../.vim/plugged/ale/ale_linters/c/clangd.vim | 22 - .../plugged/ale/ale_linters/c/clangtidy.vim | 52 - .../plugged/ale/ale_linters/c/cppcheck.vim | 29 - .../plugged/ale/ale_linters/c/cpplint.vim | 20 - .../.vim/plugged/ale/ale_linters/c/cquery.vim | 30 - .../.vim/plugged/ale/ale_linters/c/cspell.vim | 5 - .../plugged/ale/ale_linters/c/flawfinder.vim | 25 - .../ale/ale_linters/cairo/starknet.vim | 37 - .../ale/ale_linters/chef/cookstyle.vim | 54 - .../ale/ale_linters/chef/foodcritic.vim | 41 - .../ale/ale_linters/clojure/clj_kondo.vim | 47 - .../plugged/ale/ale_linters/clojure/joker.vim | 34 - .../cloudformation/cfn_python_lint.vim | 36 - .../ale/ale_linters/cmake/cmake_lint.vim | 43 - .../ale/ale_linters/cmake/cmakelint.vim | 24 - .../plugged/ale/ale_linters/coffee/coffee.vim | 23 - .../ale/ale_linters/coffee/coffeelint.vim | 43 - .../.vim/plugged/ale/ale_linters/cpp/cc.vim | 67 - .../.vim/plugged/ale/ale_linters/cpp/ccls.vim | 15 - .../ale/ale_linters/cpp/clangcheck.vim | 35 - .../plugged/ale/ale_linters/cpp/clangd.vim | 22 - .../plugged/ale/ale_linters/cpp/clangtidy.vim | 53 - .../plugged/ale/ale_linters/cpp/clazy.vim | 32 - .../plugged/ale/ale_linters/cpp/cppcheck.vim | 29 - .../plugged/ale/ale_linters/cpp/cpplint.vim | 20 - .../plugged/ale/ale_linters/cpp/cquery.vim | 30 - .../plugged/ale/ale_linters/cpp/cspell.vim | 5 - .../ale/ale_linters/cpp/flawfinder.vim | 25 - .../plugged/ale/ale_linters/crystal/ameba.vim | 57 - .../ale/ale_linters/crystal/crystal.vim | 35 - .../.vim/plugged/ale/ale_linters/cs/csc.vim | 90 - .../plugged/ale/ale_linters/cs/cspell.vim | 5 - .../.vim/plugged/ale/ale_linters/cs/mcs.vim | 37 - .../.vim/plugged/ale/ale_linters/cs/mcsc.vim | 91 - .../plugged/ale/ale_linters/css/cspell.vim | 5 - .../plugged/ale/ale_linters/css/csslint.vim | 18 - .../.vim/plugged/ale/ale_linters/css/fecs.vim | 9 - .../plugged/ale/ale_linters/css/stylelint.vim | 19 - .../plugged/ale/ale_linters/css/vscodecss.vim | 16 - .../ale/ale_linters/cucumber/cucumber.vim | 46 - .../plugged/ale/ale_linters/cuda/clangd.vim | 23 - .../plugged/ale/ale_linters/cuda/nvcc.vim | 46 - .../ale/ale_linters/cypher/cypher_lint.vim | 26 - .../.vim/plugged/ale/ale_linters/d/dls.vim | 22 - .../.vim/plugged/ale/ale_linters/d/dmd.vim | 116 - .../plugged/ale/ale_linters/dafny/dafny.vim | 41 - .../ale/ale_linters/dart/analysis_server.vim | 29 - .../ale/ale_linters/dart/dart_analyze.vim | 29 - .../ale/ale_linters/dart/language_server.vim | 20 - .../desktop/desktop_file_validate.vim | 31 - .../dockerfile/dockerfile_lint.vim | 76 - .../ale/ale_linters/dockerfile/hadolint.vim | 122 - .../plugged/ale/ale_linters/elixir/credo.vim | 71 - .../plugged/ale/ale_linters/elixir/cspell.vim | 5 - .../ale/ale_linters/elixir/dialyxir.vim | 34 - .../plugged/ale/ale_linters/elixir/dogma.vim | 39 - .../ale/ale_linters/elixir/elixir_ls.vim | 21 - .../plugged/ale/ale_linters/elixir/mix.vim | 45 - .../plugged/ale/ale_linters/elm/elm_ls.vim | 40 - .../.vim/plugged/ale/ale_linters/elm/make.vim | 242 - .../ale/ale_linters/erlang/dialyzer.vim | 97 - .../plugged/ale/ale_linters/erlang/elvis.vim | 40 - .../plugged/ale/ale_linters/erlang/erlc.vim | 104 - .../ale/ale_linters/erlang/syntaxerl.vim | 42 - .../plugged/ale/ale_linters/eruby/erb.vim | 25 - .../plugged/ale/ale_linters/eruby/erblint.vim | 51 - .../plugged/ale/ale_linters/eruby/erubi.vim | 32 - .../plugged/ale/ale_linters/eruby/erubis.vim | 23 - .../plugged/ale/ale_linters/eruby/ruumba.vim | 62 - .../plugged/ale/ale_linters/fish/fish.vim | 67 - .../plugged/ale/ale_linters/fortran/gcc.vim | 72 - .../ale_linters/fortran/language_server.vim | 19 - .../ale/ale_linters/fountain/proselint.vim | 9 - .../ale/ale_linters/fuse/fusionlint.vim | 33 - .../ale/ale_linters/gitcommit/gitlint.vim | 51 - .../plugged/ale/ale_linters/glsl/glslang.vim | 40 - .../plugged/ale/ale_linters/glsl/glslls.vim | 30 - .../.vim/plugged/ale/ale_linters/go/bingo.vim | 31 - .../plugged/ale/ale_linters/go/cspell.vim | 5 - .../plugged/ale/ale_linters/go/gobuild.vim | 57 - .../.vim/plugged/ale/ale_linters/go/gofmt.vim | 15 - .../ale/ale_linters/go/golangci_lint.vim | 64 - .../plugged/ale/ale_linters/go/golint.vim | 21 - .../ale/ale_linters/go/gometalinter.vim | 58 - .../.vim/plugged/ale/ale_linters/go/gopls.vim | 39 - .../plugged/ale/ale_linters/go/gosimple.vim | 12 - .../plugged/ale/ale_linters/go/gotype.vim | 24 - .../.vim/plugged/ale/ale_linters/go/govet.vim | 28 - .../plugged/ale/ale_linters/go/langserver.vim | 29 - .../plugged/ale/ale_linters/go/revive.vim | 21 - .../ale/ale_linters/go/staticcheck.vim | 34 - .../ale/ale_linters/graphql/eslint.vim | 10 - .../ale/ale_linters/graphql/gqlint.vim | 10 - .../plugged/ale/ale_linters/hack/hack.vim | 22 - .../plugged/ale/ale_linters/hack/hhast.vim | 40 - .../plugged/ale/ale_linters/haml/hamllint.vim | 57 - .../handlebars/embertemplatelint.vim | 67 - .../ale/ale_linters/haskell/cabal_ghc.vim | 20 - .../ale/ale_linters/haskell/cspell.vim | 5 - .../plugged/ale/ale_linters/haskell/ghc.vim | 18 - .../ale/ale_linters/haskell/ghc_mod.vim | 19 - .../ale/ale_linters/haskell/hdevtools.vim | 20 - .../plugged/ale/ale_linters/haskell/hie.vim | 41 - .../plugged/ale/ale_linters/haskell/hlint.vim | 46 - .../plugged/ale/ale_linters/haskell/hls.vim | 65 - .../ale/ale_linters/haskell/stack_build.vim | 23 - .../ale/ale_linters/haskell/stack_ghc.vim | 21 - .../plugged/ale/ale_linters/help/alex.vim | 4 - .../plugged/ale/ale_linters/help/cspell.vim | 5 - .../ale/ale_linters/help/proselint.vim | 9 - .../ale/ale_linters/help/writegood.vim | 4 - .../plugged/ale/ale_linters/html/alex.vim | 4 - .../plugged/ale/ale_linters/html/angular.vim | 56 - .../plugged/ale/ale_linters/html/cspell.vim | 5 - .../plugged/ale/ale_linters/html/fecs.vim | 9 - .../plugged/ale/ale_linters/html/htmlhint.vim | 32 - .../ale/ale_linters/html/proselint.vim | 9 - .../ale/ale_linters/html/stylelint.vim | 27 - .../plugged/ale/ale_linters/html/tidy.vim | 70 - .../ale/ale_linters/html/vscodehtml.vim | 16 - .../ale/ale_linters/html/writegood.vim | 4 - .../plugged/ale/ale_linters/idris/idris.vim | 81 - .../.vim/plugged/ale/ale_linters/ink/ls.vim | 35 - .../plugged/ale/ale_linters/inko/inko.vim | 33 - .../plugged/ale/ale_linters/ispc/ispc.vim | 45 - .../ale/ale_linters/java/checkstyle.vim | 73 - .../plugged/ale/ale_linters/java/cspell.vim | 5 - .../ale/ale_linters/java/eclipselsp.vim | 200 - .../plugged/ale/ale_linters/java/javac.vim | 163 - .../plugged/ale/ale_linters/java/javalsp.vim | 55 - .../.vim/plugged/ale/ale_linters/java/pmd.vim | 36 - .../ale/ale_linters/javascript/cspell.vim | 5 - .../ale/ale_linters/javascript/deno.vim | 11 - .../ale/ale_linters/javascript/eslint.vim | 11 - .../ale/ale_linters/javascript/fecs.vim | 10 - .../ale/ale_linters/javascript/flow.vim | 160 - .../ale/ale_linters/javascript/flow_ls.vim | 28 - .../ale/ale_linters/javascript/jscs.vim | 61 - .../ale/ale_linters/javascript/jshint.vim | 33 - .../ale/ale_linters/javascript/standard.vim | 32 - .../ale/ale_linters/javascript/tsserver.vim | 17 - .../plugged/ale/ale_linters/javascript/xo.vim | 9 - .../plugged/ale/ale_linters/json/cspell.vim | 5 - .../plugged/ale/ale_linters/json/eslint.vim | 16 - .../.vim/plugged/ale/ale_linters/json/jq.vim | 24 - .../plugged/ale/ale_linters/json/jsonlint.vim | 43 - .../plugged/ale/ale_linters/json/spectral.vim | 14 - .../ale/ale_linters/json/vscodejson.vim | 16 - .../plugged/ale/ale_linters/json5/eslint.vim | 16 - .../plugged/ale/ale_linters/jsonc/eslint.vim | 16 - .../ale/ale_linters/jsonnet/jsonnet_lint.vim | 59 - .../ale/ale_linters/jsonnet/jsonnetfmt.vim | 52 - .../ale/ale_linters/julia/languageserver.vim | 21 - .../ale/ale_linters/kotlin/kotlinc.vim | 177 - .../plugged/ale/ale_linters/kotlin/ktlint.vim | 10 - .../ale/ale_linters/kotlin/languageserver.vim | 29 - .../plugged/ale/ale_linters/less/lessc.vim | 47 - .../ale/ale_linters/less/stylelint.vim | 20 - .../.vim/plugged/ale/ale_linters/llvm/llc.vim | 24 - .../plugged/ale/ale_linters/lua/cspell.vim | 5 - .../.vim/plugged/ale/ale_linters/lua/luac.vim | 31 - .../plugged/ale/ale_linters/lua/luacheck.vim | 44 - .../plugged/ale/ale_linters/lua/selene.vim | 46 - .../plugged/ale/ale_linters/mail/alex.vim | 4 - .../ale/ale_linters/mail/languagetool.vim | 5 - .../ale/ale_linters/mail/proselint.vim | 9 - .../plugged/ale/ale_linters/mail/vale.vim | 9 - .../ale/ale_linters/make/checkmake.vim | 25 - .../plugged/ale/ale_linters/markdown/alex.vim | 4 - .../ale/ale_linters/markdown/cspell.vim | 5 - .../ale/ale_linters/markdown/languagetool.vim | 5 - .../ale/ale_linters/markdown/markdownlint.vim | 22 - .../plugged/ale/ale_linters/markdown/mdl.vim | 43 - .../ale/ale_linters/markdown/proselint.vim | 9 - .../ale/ale_linters/markdown/redpen.vim | 9 - .../ale/ale_linters/markdown/remark_lint.vim | 48 - .../ale/ale_linters/markdown/textlint.vim | 9 - .../plugged/ale/ale_linters/markdown/vale.vim | 24 - .../ale/ale_linters/markdown/writegood.vim | 4 - .../plugged/ale/ale_linters/matlab/mlint.vim | 44 - .../plugged/ale/ale_linters/mercury/mmc.vim | 38 - .../plugged/ale/ale_linters/nasm/nasm.vim | 41 - .../plugged/ale/ale_linters/nim/nimcheck.vim | 79 - .../plugged/ale/ale_linters/nim/nimlsp.vim | 33 - .../.vim/plugged/ale/ale_linters/nix/nix.vim | 63 - .../plugged/ale/ale_linters/nix/rnix_lsp.vim | 16 - .../plugged/ale/ale_linters/nix/statix.vim | 18 - .../plugged/ale/ale_linters/nroff/alex.vim | 4 - .../ale/ale_linters/nroff/proselint.vim | 9 - .../ale/ale_linters/nroff/writegood.vim | 4 - .../plugged/ale/ale_linters/objc/ccls.vim | 15 - .../plugged/ale/ale_linters/objc/clang.vim | 23 - .../plugged/ale/ale_linters/objc/clangd.vim | 17 - .../plugged/ale/ale_linters/objcpp/clang.vim | 23 - .../plugged/ale/ale_linters/objcpp/clangd.vim | 17 - .../plugged/ale/ale_linters/ocaml/merlin.vim | 17 - .../ale/ale_linters/ocaml/ocamllsp.vim | 13 - .../plugged/ale/ale_linters/ocaml/ols.vim | 14 - .../ale/ale_linters/ocamlinterface/merlin.vim | 17 - .../ale_linters/ocamlinterface/ocamllsp.vim | 13 - .../ale/ale_linters/openapi/ibm_validator.vim | 58 - .../ale/ale_linters/openapi/yamllint.vim | 9 - .../ale/ale_linters/openscad/sca2d.vim | 24 - .../plugged/ale/ale_linters/perl/perl.vim | 64 - .../ale/ale_linters/perl/perlcritic.vim | 61 - .../plugged/ale/ale_linters/perl6/perl6.vim | 166 - .../plugged/ale/ale_linters/php/cspell.vim | 5 - .../ale/ale_linters/php/intelephense.vim | 32 - .../ale/ale_linters/php/langserver.vim | 27 - .../.vim/plugged/ale/ale_linters/php/phan.vim | 75 - .../.vim/plugged/ale/ale_linters/php/php.vim | 39 - .../plugged/ale/ale_linters/php/phpactor.vim | 23 - .../plugged/ale/ale_linters/php/phpcs.vim | 54 - .../plugged/ale/ale_linters/php/phpmd.vim | 38 - .../plugged/ale/ale_linters/php/phpstan.vim | 89 - .../plugged/ale/ale_linters/php/psalm.vim | 32 - .../plugged/ale/ale_linters/php/tlint.vim | 80 - .../.vim/plugged/ale/ale_linters/po/alex.vim | 4 - .../plugged/ale/ale_linters/po/msgfmt.vim | 30 - .../plugged/ale/ale_linters/po/proselint.vim | 9 - .../plugged/ale/ale_linters/po/writegood.vim | 4 - .../.vim/plugged/ale/ale_linters/pod/alex.vim | 4 - .../plugged/ale/ale_linters/pod/proselint.vim | 9 - .../plugged/ale/ale_linters/pod/writegood.vim | 4 - .../plugged/ale/ale_linters/pony/ponyc.vim | 16 - .../ale/ale_linters/powershell/cspell.vim | 5 - .../ale/ale_linters/powershell/powershell.vim | 100 - .../powershell/psscriptanalyzer.vim | 76 - .../plugged/ale/ale_linters/prolog/swipl.vim | 110 - .../ale/ale_linters/proto/buf_lint.vim | 26 - .../ale/ale_linters/proto/protoc_gen_lint.vim | 27 - .../ale/ale_linters/proto/protolint.vim | 24 - .../plugged/ale/ale_linters/pug/puglint.vim | 56 - .../ale/ale_linters/puppet/languageserver.vim | 37 - .../plugged/ale/ale_linters/puppet/puppet.vim | 39 - .../ale/ale_linters/puppet/puppetlint.vim | 18 - .../plugged/ale/ale_linters/purescript/ls.vim | 49 - .../plugged/ale/ale_linters/pyrex/cython.vim | 36 - .../plugged/ale/ale_linters/python/bandit.vim | 76 - .../plugged/ale/ale_linters/python/cspell.vim | 5 - .../plugged/ale/ale_linters/python/flake8.vim | 170 - .../ale/ale_linters/python/flakehell.vim | 175 - .../plugged/ale/ale_linters/python/jedils.vim | 34 - .../plugged/ale/ale_linters/python/mypy.vim | 103 - .../ale/ale_linters/python/prospector.vim | 106 - .../ale/ale_linters/python/pycodestyle.vim | 81 - .../ale/ale_linters/python/pydocstyle.vim | 77 - .../ale/ale_linters/python/pyflakes.vim | 56 - .../plugged/ale/ale_linters/python/pylama.vim | 154 - .../plugged/ale/ale_linters/python/pylint.vim | 120 - .../plugged/ale/ale_linters/python/pylsp.vim | 43 - .../plugged/ale/ale_linters/python/pyre.vim | 44 - .../ale/ale_linters/python/pyright.vim | 43 - .../ale/ale_linters/python/unimport.vim | 75 - .../ale/ale_linters/python/vulture.vim | 79 - .../plugged/ale/ale_linters/qml/qmlfmt.vim | 25 - .../plugged/ale/ale_linters/qml/qmllint.vim | 29 - .../ale/ale_linters/r/languageserver.vim | 27 - .../.vim/plugged/ale/ale_linters/r/lintr.vim | 35 - .../ale/ale_linters/racket/langserver.vim | 7 - .../plugged/ale/ale_linters/racket/raco.vim | 34 - .../plugged/ale/ale_linters/reason/ls.vim | 23 - .../plugged/ale/ale_linters/reason/merlin.vim | 17 - .../plugged/ale/ale_linters/reason/ols.vim | 14 - .../plugged/ale/ale_linters/rego/cspell.vim | 4 - .../plugged/ale/ale_linters/rego/opacheck.vim | 56 - .../plugged/ale/ale_linters/review/redpen.vim | 9 - .../plugged/ale/ale_linters/robot/rflint.vim | 46 - .../.vim/plugged/ale/ale_linters/rst/alex.vim | 4 - .../plugged/ale/ale_linters/rst/cspell.vim | 5 - .../plugged/ale/ale_linters/rst/proselint.vim | 9 - .../plugged/ale/ale_linters/rst/redpen.vim | 9 - .../plugged/ale/ale_linters/rst/rstcheck.vim | 31 - .../plugged/ale/ale_linters/rst/textlint.vim | 9 - .../.vim/plugged/ale/ale_linters/rst/vale.vim | 9 - .../plugged/ale/ale_linters/rst/writegood.vim | 4 - .../plugged/ale/ale_linters/ruby/brakeman.vim | 51 - .../plugged/ale/ale_linters/ruby/cspell.vim | 5 - .../plugged/ale/ale_linters/ruby/debride.vim | 42 - .../ale_linters/ruby/rails_best_practices.vim | 49 - .../plugged/ale/ale_linters/ruby/reek.vim | 69 - .../plugged/ale/ale_linters/ruby/rubocop.vim | 31 - .../plugged/ale/ale_linters/ruby/ruby.vim | 12 - .../ale/ale_linters/ruby/solargraph.vim | 22 - .../plugged/ale/ale_linters/ruby/sorbet.vim | 26 - .../ale/ale_linters/ruby/standardrb.vim | 23 - .../plugged/ale/ale_linters/rust/analyzer.vim | 36 - .../plugged/ale/ale_linters/rust/cargo.vim | 110 - .../plugged/ale/ale_linters/rust/cspell.vim | 5 - .../.vim/plugged/ale/ale_linters/rust/rls.vim | 27 - .../plugged/ale/ale_linters/rust/rustc.vim | 33 - .../ale/ale_linters/salt/salt_lint.vim | 33 - .../plugged/ale/ale_linters/sass/sasslint.vim | 28 - .../ale/ale_linters/sass/stylelint.vim | 13 - .../plugged/ale/ale_linters/scala/cspell.vim | 5 - .../plugged/ale/ale_linters/scala/fsc.vim | 14 - .../plugged/ale/ale_linters/scala/metals.vim | 50 - .../ale/ale_linters/scala/sbtserver.vim | 31 - .../plugged/ale/ale_linters/scala/scalac.vim | 15 - .../ale/ale_linters/scala/scalastyle.vim | 86 - .../plugged/ale/ale_linters/scss/sasslint.vim | 28 - .../plugged/ale/ale_linters/scss/scsslint.vim | 34 - .../ale/ale_linters/scss/stylelint.vim | 19 - .../plugged/ale/ale_linters/sh/bashate.vim | 43 - .../plugged/ale/ale_linters/sh/cspell.vim | 5 - .../ale/ale_linters/sh/language_server.vim | 32 - .../.vim/plugged/ale/ale_linters/sh/shell.vim | 59 - .../plugged/ale/ale_linters/sh/shellcheck.vim | 4 - .../plugged/ale/ale_linters/slim/slimlint.vim | 55 - .../plugged/ale/ale_linters/sml/smlnj.vim | 9 - .../plugged/ale/ale_linters/sml/smlnj_cm.vim | 21 - .../plugged/ale/ale_linters/solidity/solc.vim | 53 - .../ale/ale_linters/solidity/solhint.vim | 12 - .../ale/ale_linters/solidity/solium.vim | 9 - .../plugged/ale/ale_linters/spec/rpmlint.vim | 90 - .../plugged/ale/ale_linters/sql/sqlint.vim | 28 - .../plugged/ale/ale_linters/sql/sqllint.vim | 33 - .../ale/ale_linters/stylus/stylelint.vim | 20 - .../ale/ale_linters/sugarss/stylelint.vim | 21 - .../ale/ale_linters/svelte/svelteserver.vim | 21 - .../ale_linters/swift/appleswiftformat.vim | 43 - .../plugged/ale/ale_linters/swift/cspell.vim | 5 - .../ale/ale_linters/swift/sourcekitlsp.vim | 13 - .../ale/ale_linters/swift/swiftlint.vim | 69 - .../ale_linters/systemd/systemd_analyze.vim | 18 - .../plugged/ale/ale_linters/tcl/nagelfar.vim | 39 - .../ale/ale_linters/terraform/checkov.vim | 41 - .../ale/ale_linters/terraform/terraform.vim | 69 - .../ale_linters/terraform/terraform_ls.vim | 38 - .../ale_linters/terraform/terraform_lsp.vim | 25 - .../ale/ale_linters/terraform/tflint.vim | 105 - .../ale/ale_linters/terraform/tfsec.vim | 87 - .../ale/ale_linters/testft/testlinter.vim | 10 - .../.vim/plugged/ale/ale_linters/tex/alex.vim | 4 - .../plugged/ale/ale_linters/tex/chktex.vim | 54 - .../plugged/ale/ale_linters/tex/cspell.vim | 5 - .../plugged/ale/ale_linters/tex/lacheck.vim | 43 - .../plugged/ale/ale_linters/tex/proselint.vim | 9 - .../plugged/ale/ale_linters/tex/redpen.vim | 9 - .../plugged/ale/ale_linters/tex/texlab.vim | 26 - .../plugged/ale/ale_linters/tex/textlint.vim | 9 - .../.vim/plugged/ale/ale_linters/tex/vale.vim | 9 - .../plugged/ale/ale_linters/tex/writegood.vim | 4 - .../plugged/ale/ale_linters/texinfo/alex.vim | 4 - .../ale/ale_linters/texinfo/cspell.vim | 5 - .../ale/ale_linters/texinfo/proselint.vim | 9 - .../ale/ale_linters/texinfo/writegood.vim | 4 - .../plugged/ale/ale_linters/text/alex.vim | 4 - .../plugged/ale/ale_linters/text/cspell.vim | 5 - .../ale/ale_linters/text/languagetool.vim | 4 - .../ale/ale_linters/text/proselint.vim | 9 - .../plugged/ale/ale_linters/text/redpen.vim | 9 - .../plugged/ale/ale_linters/text/textlint.vim | 9 - .../plugged/ale/ale_linters/text/vale.vim | 9 - .../ale/ale_linters/text/writegood.vim | 4 - .../plugged/ale/ale_linters/thrift/thrift.vim | 87 - .../ale/ale_linters/thrift/thriftcheck.vim | 46 - .../ale/ale_linters/typescript/cspell.vim | 5 - .../ale/ale_linters/typescript/deno.vim | 12 - .../ale/ale_linters/typescript/eslint.vim | 10 - .../ale/ale_linters/typescript/standard.vim | 31 - .../ale/ale_linters/typescript/tslint.vim | 75 - .../ale/ale_linters/typescript/tsserver.vim | 18 - .../ale/ale_linters/typescript/typecheck.vim | 33 - .../plugged/ale/ale_linters/typescript/xo.vim | 6 - dotfiles/.vim/plugged/ale/ale_linters/v/v.vim | 82 - .../ale/ale_linters/vala/vala_lint.vim | 66 - .../ale/ale_linters/verilog/hdl_checker.vim | 5 - .../ale/ale_linters/verilog/iverilog.vim | 43 - .../ale/ale_linters/verilog/verilator.vim | 60 - .../plugged/ale/ale_linters/verilog/vlog.vim | 52 - .../plugged/ale/ale_linters/verilog/xvlog.vim | 35 - .../plugged/ale/ale_linters/verilog/yosys.vim | 42 - .../plugged/ale/ale_linters/vhdl/ghdl.vim | 37 - .../ale/ale_linters/vhdl/hdl_checker.vim | 5 - .../plugged/ale/ale_linters/vhdl/vcom.vim | 38 - .../plugged/ale/ale_linters/vhdl/xvhdl.vim | 37 - .../vim/ale_custom_linting_rules.vim | 70 - .../plugged/ale/ale_linters/vim/vimls.vim | 61 - .../.vim/plugged/ale/ale_linters/vim/vint.vim | 65 - .../plugged/ale/ale_linters/vue/cspell.vim | 5 - .../.vim/plugged/ale/ale_linters/vue/vls.vim | 22 - .../plugged/ale/ale_linters/vue/volar.vim | 80 - .../plugged/ale/ale_linters/wgsl/naga.vim | 12 - .../plugged/ale/ale_linters/xhtml/alex.vim | 4 - .../plugged/ale/ale_linters/xhtml/cspell.vim | 5 - .../ale/ale_linters/xhtml/proselint.vim | 9 - .../ale/ale_linters/xhtml/writegood.vim | 4 - .../plugged/ale/ale_linters/xml/xmllint.vim | 65 - .../ale/ale_linters/yaml/actionlint.vim | 11 - .../plugged/ale/ale_linters/yaml/circleci.vim | 35 - .../ale/ale_linters/yaml/gitlablint.vim | 49 - .../.vim/plugged/ale/ale_linters/yaml/ls.vim | 34 - .../plugged/ale/ale_linters/yaml/spectral.vim | 14 - .../plugged/ale/ale_linters/yaml/swaglint.vim | 40 - .../plugged/ale/ale_linters/yaml/yamllint.vim | 11 - .../plugged/ale/ale_linters/yang/yang_lsp.vim | 15 - .../plugged/ale/ale_linters/zeek/zeek.vim | 22 - .../.vim/plugged/ale/ale_linters/zig/zls.vim | 20 - dotfiles/.vim/plugged/ale/autoload/ale.vim | 284 - .../.vim/plugged/ale/autoload/ale/ant.vim | 45 - .../.vim/plugged/ale/autoload/ale/args.vim | 43 - .../.vim/plugged/ale/autoload/ale/assert.vim | 424 - .../.vim/plugged/ale/autoload/ale/balloon.vim | 74 - dotfiles/.vim/plugged/ale/autoload/ale/c.vim | 622 -- .../plugged/ale/autoload/ale/code_action.vim | 389 - .../.vim/plugged/ale/autoload/ale/codefix.vim | 497 - .../.vim/plugged/ale/autoload/ale/command.vim | 473 - .../plugged/ale/autoload/ale/completion.vim | 1069 --- .../ale/autoload/ale/completion/python.vim | 3 - .../.vim/plugged/ale/autoload/ale/cursor.vim | 189 - dotfiles/.vim/plugged/ale/autoload/ale/d.vim | 16 - .../plugged/ale/autoload/ale/debugging.vim | 276 - .../plugged/ale/autoload/ale/definition.vim | 224 - .../.vim/plugged/ale/autoload/ale/dhall.vim | 24 - .../.vim/plugged/ale/autoload/ale/engine.vim | 738 -- .../ale/autoload/ale/engine/ignore.vim | 50 - .../.vim/plugged/ale/autoload/ale/events.vim | 165 - .../ale/autoload/ale/filename_mapping.vim | 22 - .../plugged/ale/autoload/ale/filerename.vim | 133 - .../plugged/ale/autoload/ale/filetypes.vim | 58 - .../.vim/plugged/ale/autoload/ale/fix.vim | 399 - .../plugged/ale/autoload/ale/fix/registry.vim | 780 -- .../autoload/ale/fixers/appleswiftformat.vim | 16 - .../ale/autoload/ale/fixers/astyle.vim | 59 - .../ale/autoload/ale/fixers/autoflake.vim | 28 - .../ale/autoload/ale/fixers/autoimport.vim | 27 - .../ale/autoload/ale/fixers/autopep8.vim | 26 - .../ale/autoload/ale/fixers/bibclean.vim | 15 - .../plugged/ale/autoload/ale/fixers/black.vim | 52 - .../ale/autoload/ale/fixers/brittany.vim | 22 - .../ale/autoload/ale/fixers/buf_format.vim | 12 - .../ale/autoload/ale/fixers/buildifier.vim | 26 - .../ale/autoload/ale/fixers/clangformat.vim | 47 - .../ale/autoload/ale/fixers/clangtidy.vim | 52 - .../ale/autoload/ale/fixers/cmakeformat.vim | 16 - .../ale/autoload/ale/fixers/crystal.vim | 14 - .../ale/autoload/ale/fixers/css_beautify.vim | 20 - .../ale/autoload/ale/fixers/dart_format.vim | 18 - .../ale/autoload/ale/fixers/dartfmt.vim | 18 - .../plugged/ale/autoload/ale/fixers/deno.vim | 17 - .../plugged/ale/autoload/ale/fixers/dfmt.vim | 18 - .../ale/autoload/ale/fixers/dhall_format.vim | 11 - .../ale/autoload/ale/fixers/dhall_freeze.vim | 14 - .../ale/autoload/ale/fixers/dhall_lint.vim | 11 - .../ale/autoload/ale/fixers/dotnet_format.vim | 18 - .../ale/autoload/ale/fixers/dprint.vim | 29 - .../plugged/ale/autoload/ale/fixers/dune.vim | 16 - .../ale/autoload/ale/fixers/elm_format.vim | 23 - .../ale/autoload/ale/fixers/erblint.vim | 40 - .../ale/autoload/ale/fixers/erlfmt.vim | 21 - .../ale/autoload/ale/fixers/eslint.vim | 83 - .../plugged/ale/autoload/ale/fixers/fecs.vim | 17 - .../ale/autoload/ale/fixers/fish_indent.vim | 19 - .../ale/autoload/ale/fixers/fixjson.vim | 28 - .../ale/autoload/ale/fixers/floskell.vim | 20 - .../ale/autoload/ale/fixers/generic.vim | 25 - .../autoload/ale/fixers/generic_python.vim | 75 - .../ale/autoload/ale/fixers/gnatpp.vim | 17 - .../plugged/ale/autoload/ale/fixers/gofmt.vim | 16 - .../ale/autoload/ale/fixers/gofumpt.vim | 17 - .../ale/autoload/ale/fixers/goimports.vim | 23 - .../ale/autoload/ale/fixers/golines.vim | 21 - .../plugged/ale/autoload/ale/fixers/gomod.vim | 11 - .../ale/fixers/google_java_format.vim | 23 - .../ale/autoload/ale/fixers/hackfmt.vim | 18 - .../plugged/ale/autoload/ale/fixers/help.vim | 24 - .../plugged/ale/autoload/ale/fixers/hfmt.vim | 16 - .../ale/autoload/ale/fixers/hindent.vim | 20 - .../plugged/ale/autoload/ale/fixers/hlint.vim | 13 - .../ale/autoload/ale/fixers/html_beautify.vim | 20 - .../ale/autoload/ale/fixers/importjs.vim | 25 - .../plugged/ale/autoload/ale/fixers/isort.vim | 71 - .../plugged/ale/autoload/ale/fixers/jq.vim | 22 - .../ale/autoload/ale/fixers/jsonnetfmt.vim | 18 - .../ale/autoload/ale/fixers/ktlint.vim | 8 - .../ale/autoload/ale/fixers/latexindent.vim | 16 - .../ale/autoload/ale/fixers/lua_format.vim | 16 - .../ale/autoload/ale/fixers/luafmt.vim | 13 - .../ale/autoload/ale/fixers/mix_format.vim | 25 - .../ale/autoload/ale/fixers/nimpretty.vim | 15 - .../ale/autoload/ale/fixers/nixfmt.vim | 15 - .../ale/autoload/ale/fixers/nixpkgsfmt.vim | 12 - .../ale/autoload/ale/fixers/ocamlformat.vim | 17 - .../ale/autoload/ale/fixers/ocp_indent.vim | 18 - .../ale/autoload/ale/fixers/opafmt.vim | 15 - .../ale/autoload/ale/fixers/ormolu.vim | 12 - .../ale/autoload/ale/fixers/packer.vim | 17 - .../ale/autoload/ale/fixers/pandoc.vim | 16 - .../ale/autoload/ale/fixers/perltidy.vim | 18 - .../ale/autoload/ale/fixers/pgformatter.vim | 12 - .../ale/autoload/ale/fixers/php_cs_fixer.vim | 24 - .../ale/autoload/ale/fixers/phpcbf.vim | 26 - .../plugged/ale/autoload/ale/fixers/pint.vim | 25 - .../ale/autoload/ale/fixers/prettier.vim | 124 - .../autoload/ale/fixers/prettier_eslint.vim | 56 - .../autoload/ale/fixers/prettier_standard.vim | 24 - .../ale/autoload/ale/fixers/protolint.vim | 26 - .../plugged/ale/autoload/ale/fixers/ptop.vim | 17 - .../ale/autoload/ale/fixers/puppetlint.vim | 22 - .../ale/autoload/ale/fixers/purs_tidy.vim | 24 - .../plugged/ale/autoload/ale/fixers/purty.vim | 22 - .../ale/autoload/ale/fixers/pyflyby.vim | 41 - .../ale/autoload/ale/fixers/qmlfmt.vim | 11 - .../plugged/ale/autoload/ale/fixers/refmt.vim | 18 - .../ale/autoload/ale/fixers/remark_lint.vim | 24 - .../ale/fixers/reorder_python_imports.vim | 25 - .../ale/autoload/ale/fixers/rubocop.vim | 38 - .../plugged/ale/autoload/ale/fixers/rufo.vim | 20 - .../ale/autoload/ale/fixers/rustfmt.vim | 15 - .../ale/autoload/ale/fixers/scalafmt.vim | 25 - .../plugged/ale/autoload/ale/fixers/shfmt.vim | 17 - .../ale/autoload/ale/fixers/sorbet.vim | 19 - .../ale/autoload/ale/fixers/sqlfmt.vim | 13 - .../ale/autoload/ale/fixers/sqlformat.vim | 16 - .../ale/autoload/ale/fixers/standard.vim | 33 - .../ale/autoload/ale/fixers/standardrb.vim | 23 - .../ale/autoload/ale/fixers/statix.vim | 17 - .../ale/autoload/ale/fixers/stylelint.vim | 26 - .../ale/autoload/ale/fixers/styler.vim | 16 - .../autoload/ale/fixers/stylish_haskell.vim | 21 - .../ale/autoload/ale/fixers/stylua.vim | 14 - .../ale/autoload/ale/fixers/swiftformat.vim | 25 - .../ale/autoload/ale/fixers/syntax_tree.vim | 19 - .../ale/autoload/ale/fixers/terraform.vim | 17 - .../ale/autoload/ale/fixers/textlint.vim | 15 - .../plugged/ale/autoload/ale/fixers/tidy.vim | 26 - .../ale/autoload/ale/fixers/tslint.vim | 22 - .../ale/autoload/ale/fixers/uncrustify.vim | 33 - .../plugged/ale/autoload/ale/fixers/vfmt.vim | 13 - .../ale/autoload/ale/fixers/xmllint.vim | 29 - .../plugged/ale/autoload/ale/fixers/xo.vim | 36 - .../ale/autoload/ale/fixers/yamlfix.vim | 25 - .../plugged/ale/autoload/ale/fixers/yapf.vim | 26 - .../ale/autoload/ale/fixers/zigfmt.vim | 14 - .../ale/autoload/ale/floating_preview.vim | 231 - dotfiles/.vim/plugged/ale/autoload/ale/go.vim | 58 - .../.vim/plugged/ale/autoload/ale/gradle.vim | 74 - .../ale/autoload/ale/gradle/init.gradle | 23 - .../ale/autoload/ale/handlers/actionlint.vim | 36 - .../ale/autoload/ale/handlers/alex.vim | 55 - .../ale/autoload/ale/handlers/atools.vim | 41 - .../ale/autoload/ale/handlers/ccls.vim | 26 - .../ale/autoload/ale/handlers/cppcheck.vim | 89 - .../ale/autoload/ale/handlers/cpplint.vim | 21 - .../ale/autoload/ale/handlers/cspell.vim | 54 - .../plugged/ale/autoload/ale/handlers/css.vim | 70 - .../ale/autoload/ale/handlers/deno.vim | 76 - .../ale/autoload/ale/handlers/elixir.vim | 28 - .../ale/autoload/ale/handlers/eslint.vim | 280 - .../ale/autoload/ale/handlers/fecs.vim | 52 - .../ale/autoload/ale/handlers/flawfinder.vim | 48 - .../ale/autoload/ale/handlers/gawk.vim | 27 - .../plugged/ale/autoload/ale/handlers/gcc.vim | 176 - .../plugged/ale/autoload/ale/handlers/go.vim | 29 - .../ale/autoload/ale/handlers/haskell.vim | 119 - .../autoload/ale/handlers/haskell_stack.vim | 7 - .../ale/autoload/ale/handlers/hdl_checker.vim | 73 - .../ale/autoload/ale/handlers/hlint.vim | 8 - .../ale/autoload/ale/handlers/inko.vim | 37 - .../ale/autoload/ale/handlers/ktlint.vim | 45 - .../autoload/ale/handlers/languagetool.vim | 77 - .../autoload/ale/handlers/markdownlint.vim | 24 - .../ale/autoload/ale/handlers/naga.vim | 30 - .../ale/autoload/ale/handlers/ocamllsp.vim | 30 - .../plugged/ale/autoload/ale/handlers/ols.vim | 26 - .../ale/autoload/ale/handlers/openscad.vim | 73 - .../ale/autoload/ale/handlers/pony.vim | 33 - .../ale/autoload/ale/handlers/redpen.vim | 65 - .../ale/autoload/ale/handlers/ruby.vim | 38 - .../ale/autoload/ale/handlers/rust.vim | 78 - .../ale/autoload/ale/handlers/scala.vim | 37 - .../plugged/ale/autoload/ale/handlers/sh.vim | 37 - .../ale/autoload/ale/handlers/shellcheck.vim | 123 - .../plugged/ale/autoload/ale/handlers/sml.vim | 102 - .../ale/autoload/ale/handlers/solhint.vim | 98 - .../ale/autoload/ale/handlers/spectral.vim | 31 - .../ale/autoload/ale/handlers/statix.vim | 24 - .../ale/autoload/ale/handlers/textlint.vim | 39 - .../ale/autoload/ale/handlers/tslint.vim | 13 - .../ale/autoload/ale/handlers/tsserver.vim | 8 - .../ale/autoload/ale/handlers/unix.vim | 26 - .../ale/autoload/ale/handlers/vale.vim | 39 - .../ale/autoload/ale/handlers/writegood.vim | 72 - .../plugged/ale/autoload/ale/handlers/xo.vim | 44 - .../ale/autoload/ale/handlers/yamllint.vim | 39 - .../plugged/ale/autoload/ale/highlight.vim | 242 - .../.vim/plugged/ale/autoload/ale/history.vim | 62 - .../.vim/plugged/ale/autoload/ale/hover.vim | 368 - .../.vim/plugged/ale/autoload/ale/java.vim | 26 - .../.vim/plugged/ale/autoload/ale/job.vim | 385 - .../.vim/plugged/ale/autoload/ale/julia.vim | 19 - .../.vim/plugged/ale/autoload/ale/linter.vim | 462 - .../.vim/plugged/ale/autoload/ale/list.vim | 274 - .../ale/autoload/ale/loclist_jumping.vim | 163 - .../.vim/plugged/ale/autoload/ale/lsp.vim | 718 -- .../plugged/ale/autoload/ale/lsp/message.vim | 212 - .../plugged/ale/autoload/ale/lsp/reset.vim | 25 - .../plugged/ale/autoload/ale/lsp/response.vim | 152 - .../ale/autoload/ale/lsp/tsserver_message.vim | 165 - .../plugged/ale/autoload/ale/lsp_linter.vim | 547 -- .../plugged/ale/autoload/ale/lsp_window.vim | 58 - .../.vim/plugged/ale/autoload/ale/maven.vim | 57 - .../.vim/plugged/ale/autoload/ale/node.vim | 22 - .../ale/autoload/ale/organize_imports.vim | 65 - .../plugged/ale/autoload/ale/other_source.vim | 21 - .../.vim/plugged/ale/autoload/ale/path.vim | 252 - .../ale/autoload/ale/pattern_options.vim | 47 - .../plugged/ale/autoload/ale/powershell.vim | 32 - .../.vim/plugged/ale/autoload/ale/preview.vim | 137 - .../.vim/plugged/ale/autoload/ale/python.vim | 170 - .../.vim/plugged/ale/autoload/ale/racket.vim | 12 - .../plugged/ale/autoload/ale/references.vim | 187 - .../.vim/plugged/ale/autoload/ale/rename.vim | 210 - .../.vim/plugged/ale/autoload/ale/ruby.vim | 83 - .../.vim/plugged/ale/autoload/ale/semver.vim | 78 - .../.vim/plugged/ale/autoload/ale/sign.vim | 496 - .../.vim/plugged/ale/autoload/ale/socket.vim | 151 - .../plugged/ale/autoload/ale/statusline.vim | 135 - .../.vim/plugged/ale/autoload/ale/swift.vim | 70 - .../.vim/plugged/ale/autoload/ale/symbol.vim | 110 - .../.vim/plugged/ale/autoload/ale/test.vim | 205 - .../.vim/plugged/ale/autoload/ale/toggle.vim | 101 - .../.vim/plugged/ale/autoload/ale/uri.vim | 43 - .../.vim/plugged/ale/autoload/ale/uri/jdt.vim | 110 - .../.vim/plugged/ale/autoload/ale/util.vim | 574 -- .../plugged/ale/autoload/ale/virtualtext.vim | 187 - .../ale/autoload/asyncomplete/sources/ale.vim | 26 - dotfiles/.vim/plugged/ale/doc/ale-ada.txt | 71 - dotfiles/.vim/plugged/ale/doc/ale-ansible.txt | 16 - .../.vim/plugged/ale/doc/ale-apkbuild.txt | 30 - .../.vim/plugged/ale/doc/ale-asciidoc.txt | 24 - dotfiles/.vim/plugged/ale/doc/ale-asm.txt | 25 - dotfiles/.vim/plugged/ale/doc/ale-avra.txt | 26 - dotfiles/.vim/plugged/ale/doc/ale-awk.txt | 25 - dotfiles/.vim/plugged/ale/doc/ale-bats.txt | 13 - dotfiles/.vim/plugged/ale/doc/ale-bazel.txt | 28 - dotfiles/.vim/plugged/ale/doc/ale-bib.txt | 19 - dotfiles/.vim/plugged/ale/doc/ale-bicep.txt | 24 - dotfiles/.vim/plugged/ale/doc/ale-bitbake.txt | 31 - dotfiles/.vim/plugged/ale/doc/ale-c.txt | 451 - dotfiles/.vim/plugged/ale/doc/ale-cairo.txt | 15 - dotfiles/.vim/plugged/ale/doc/ale-chef.txt | 46 - dotfiles/.vim/plugged/ale/doc/ale-clojure.txt | 36 - .../plugged/ale/doc/ale-cloudformation.txt | 46 - dotfiles/.vim/plugged/ale/doc/ale-cmake.txt | 62 - dotfiles/.vim/plugged/ale/doc/ale-cpp.txt | 401 - dotfiles/.vim/plugged/ale/doc/ale-cs.txt | 236 - dotfiles/.vim/plugged/ale/doc/ale-css.txt | 93 - dotfiles/.vim/plugged/ale/doc/ale-cuda.txt | 50 - dotfiles/.vim/plugged/ale/doc/ale-d.txt | 32 - dotfiles/.vim/plugged/ale/doc/ale-dafny.txt | 16 - dotfiles/.vim/plugged/ale/doc/ale-dart.txt | 124 - dotfiles/.vim/plugged/ale/doc/ale-desktop.txt | 21 - .../.vim/plugged/ale/doc/ale-development.txt | 466 - dotfiles/.vim/plugged/ale/doc/ale-dhall.txt | 52 - .../.vim/plugged/ale/doc/ale-dockerfile.txt | 66 - dotfiles/.vim/plugged/ale/doc/ale-elixir.txt | 108 - dotfiles/.vim/plugged/ale/doc/ale-elm.txt | 100 - dotfiles/.vim/plugged/ale/doc/ale-erlang.txt | 106 - dotfiles/.vim/plugged/ale/doc/ale-eruby.txt | 58 - dotfiles/.vim/plugged/ale/doc/ale-fish.txt | 31 - dotfiles/.vim/plugged/ale/doc/ale-fortran.txt | 55 - .../.vim/plugged/ale/doc/ale-fountain.txt | 6 - dotfiles/.vim/plugged/ale/doc/ale-fuse.txt | 25 - .../.vim/plugged/ale/doc/ale-gitcommit.txt | 44 - dotfiles/.vim/plugged/ale/doc/ale-glsl.txt | 56 - dotfiles/.vim/plugged/ale/doc/ale-go.txt | 372 - dotfiles/.vim/plugged/ale/doc/ale-graphql.txt | 22 - dotfiles/.vim/plugged/ale/doc/ale-hack.txt | 51 - .../.vim/plugged/ale/doc/ale-handlebars.txt | 34 - dotfiles/.vim/plugged/ale/doc/ale-haskell.txt | 228 - dotfiles/.vim/plugged/ale/doc/ale-hcl.txt | 16 - dotfiles/.vim/plugged/ale/doc/ale-help.txt | 12 - dotfiles/.vim/plugged/ale/doc/ale-html.txt | 202 - dotfiles/.vim/plugged/ale/doc/ale-idris.txt | 23 - dotfiles/.vim/plugged/ale/doc/ale-ink.txt | 40 - dotfiles/.vim/plugged/ale/doc/ale-inko.txt | 22 - dotfiles/.vim/plugged/ale/doc/ale-ispc.txt | 24 - dotfiles/.vim/plugged/ale/doc/ale-java.txt | 284 - .../.vim/plugged/ale/doc/ale-javascript.txt | 354 - dotfiles/.vim/plugged/ale/doc/ale-json.txt | 170 - dotfiles/.vim/plugged/ale/doc/ale-json5.txt | 15 - dotfiles/.vim/plugged/ale/doc/ale-jsonc.txt | 15 - dotfiles/.vim/plugged/ale/doc/ale-jsonnet.txt | 43 - dotfiles/.vim/plugged/ale/doc/ale-julia.txt | 20 - dotfiles/.vim/plugged/ale/doc/ale-kotlin.txt | 113 - dotfiles/.vim/plugged/ale/doc/ale-latex.txt | 21 - dotfiles/.vim/plugged/ale/doc/ale-less.txt | 66 - dotfiles/.vim/plugged/ale/doc/ale-llvm.txt | 19 - dotfiles/.vim/plugged/ale/doc/ale-lua.txt | 118 - .../.vim/plugged/ale/doc/ale-markdown.txt | 113 - dotfiles/.vim/plugged/ale/doc/ale-mercury.txt | 26 - dotfiles/.vim/plugged/ale/doc/ale-nasm.txt | 26 - dotfiles/.vim/plugged/ale/doc/ale-nim.txt | 45 - dotfiles/.vim/plugged/ale/doc/ale-nix.txt | 79 - dotfiles/.vim/plugged/ale/doc/ale-nroff.txt | 12 - dotfiles/.vim/plugged/ale/doc/ale-objc.txt | 73 - dotfiles/.vim/plugged/ale/doc/ale-objcpp.txt | 42 - dotfiles/.vim/plugged/ale/doc/ale-ocaml.txt | 117 - dotfiles/.vim/plugged/ale/doc/ale-openapi.txt | 74 - .../.vim/plugged/ale/doc/ale-openscad.txt | 25 - dotfiles/.vim/plugged/ale/doc/ale-packer.txt | 24 - dotfiles/.vim/plugged/ale/doc/ale-pascal.txt | 24 - dotfiles/.vim/plugged/ale/doc/ale-pawn.txt | 12 - dotfiles/.vim/plugged/ale/doc/ale-perl.txt | 91 - dotfiles/.vim/plugged/ale/doc/ale-perl6.txt | 43 - dotfiles/.vim/plugged/ale/doc/ale-php.txt | 367 - dotfiles/.vim/plugged/ale/doc/ale-po.txt | 12 - dotfiles/.vim/plugged/ale/doc/ale-pod.txt | 12 - dotfiles/.vim/plugged/ale/doc/ale-pony.txt | 25 - .../.vim/plugged/ale/doc/ale-powershell.txt | 75 - dotfiles/.vim/plugged/ale/doc/ale-prolog.txt | 56 - dotfiles/.vim/plugged/ale/doc/ale-proto.txt | 98 - dotfiles/.vim/plugged/ale/doc/ale-pug.txt | 44 - dotfiles/.vim/plugged/ale/doc/ale-puppet.txt | 57 - .../.vim/plugged/ale/doc/ale-purescript.txt | 69 - dotfiles/.vim/plugged/ale/doc/ale-pyrex.txt | 25 - dotfiles/.vim/plugged/ale/doc/ale-python.txt | 1229 --- dotfiles/.vim/plugged/ale/doc/ale-qml.txt | 18 - dotfiles/.vim/plugged/ale/doc/ale-r.txt | 68 - .../.vim/plugged/ale/doc/ale-reasonml.txt | 76 - dotfiles/.vim/plugged/ale/doc/ale-rego.txt | 50 - .../plugged/ale/doc/ale-restructuredtext.txt | 33 - dotfiles/.vim/plugged/ale/doc/ale-robot.txt | 16 - dotfiles/.vim/plugged/ale/doc/ale-ruby.txt | 243 - dotfiles/.vim/plugged/ale/doc/ale-rust.txt | 292 - dotfiles/.vim/plugged/ale/doc/ale-salt.tmt | 43 - dotfiles/.vim/plugged/ale/doc/ale-sass.txt | 31 - dotfiles/.vim/plugged/ale/doc/ale-scala.txt | 130 - dotfiles/.vim/plugged/ale/doc/ale-scss.txt | 64 - dotfiles/.vim/plugged/ale/doc/ale-sh.txt | 144 - dotfiles/.vim/plugged/ale/doc/ale-sml.txt | 36 - .../.vim/plugged/ale/doc/ale-solidity.txt | 41 - dotfiles/.vim/plugged/ale/doc/ale-spec.txt | 43 - dotfiles/.vim/plugged/ale/doc/ale-sql.txt | 68 - dotfiles/.vim/plugged/ale/doc/ale-stylus.txt | 33 - dotfiles/.vim/plugged/ale/doc/ale-sugarss.txt | 31 - .../doc/ale-supported-languages-and-tools.txt | 688 -- dotfiles/.vim/plugged/ale/doc/ale-svelte.txt | 31 - dotfiles/.vim/plugged/ale/doc/ale-swift.txt | 67 - dotfiles/.vim/plugged/ale/doc/ale-systemd.txt | 14 - dotfiles/.vim/plugged/ale/doc/ale-tcl.txt | 25 - .../.vim/plugged/ale/doc/ale-terraform.txt | 138 - dotfiles/.vim/plugged/ale/doc/ale-tex.txt | 95 - dotfiles/.vim/plugged/ale/doc/ale-texinfo.txt | 18 - dotfiles/.vim/plugged/ale/doc/ale-text.txt | 48 - dotfiles/.vim/plugged/ale/doc/ale-thrift.txt | 65 - dotfiles/.vim/plugged/ale/doc/ale-toml.txt | 12 - .../.vim/plugged/ale/doc/ale-typescript.txt | 223 - dotfiles/.vim/plugged/ale/doc/ale-v.txt | 45 - dotfiles/.vim/plugged/ale/doc/ale-vala.txt | 33 - dotfiles/.vim/plugged/ale/doc/ale-verilog.txt | 142 - dotfiles/.vim/plugged/ale/doc/ale-vhdl.txt | 157 - .../.vim/plugged/ale/doc/ale-vim-help.txt | 12 - dotfiles/.vim/plugged/ale/doc/ale-vim.txt | 82 - dotfiles/.vim/plugged/ale/doc/ale-vue.txt | 68 - dotfiles/.vim/plugged/ale/doc/ale-wgsl.txt | 17 - dotfiles/.vim/plugged/ale/doc/ale-xhtml.txt | 18 - dotfiles/.vim/plugged/ale/doc/ale-xml.txt | 34 - dotfiles/.vim/plugged/ale/doc/ale-yaml.txt | 331 - dotfiles/.vim/plugged/ale/doc/ale-yang.txt | 17 - dotfiles/.vim/plugged/ale/doc/ale-zeek.txt | 23 - dotfiles/.vim/plugged/ale/doc/ale-zig.txt | 45 - dotfiles/.vim/plugged/ale/doc/ale.txt | 4634 --------- .../plugged/ale/ftplugin/ale-fix-suggest.vim | 2 - .../ale/ftplugin/ale-preview-selection.vim | 16 - .../.vim/plugged/ale/ftplugin/ale-preview.vim | 2 - dotfiles/.vim/plugged/ale/plugin/ale.vim | 353 - .../rplugin/python3/deoplete/sources/ale.py | 62 - dotfiles/.vim/plugged/ale/run-tests | 269 - dotfiles/.vim/plugged/ale/run-tests.bat | 30 - dotfiles/.vim/plugged/ale/supported-tools.md | 694 -- .../plugged/ale/syntax/ale-fix-suggest.vim | 13 - .../ale/syntax/ale-preview-selection.vim | 11 - .../plugged/ale/test/.config/nvim/init.vim | 1 - .../completion/test_ale_import_command.vader | 562 -- .../completion/test_complete_events.vader | 35 - .../completion/test_completion_events.vader | 486 - .../test_completion_filtering.vader | 142 - .../completion/test_completion_prefixes.vader | 65 - .../test_lsp_completion_messages.vader | 307 - .../test_lsp_completion_parsing.vader | 736 -- .../completion/test_omnifunc_completion.vader | 60 - .../test_public_completion_api.vader | 47 - .../test_tsserver_completion_parsing.vader | 309 - .../plugged/ale/test/fix/test_ale_fix.vader | 884 -- .../ale/test/fix/test_ale_fix_aliases.vader | 5 - .../test/fix/test_ale_fix_completion.vader | 23 - .../fix/test_ale_fix_completion_filter.vader | 14 - .../ale/test/fix/test_ale_fix_ignore.vader | 110 - .../ale/test/fix/test_ale_fix_suggest.vader | 102 - ...test_appleswiftformat_fixer_callback.vader | 47 - .../fixers/test_astyle_fixer_callback.vader | 96 - .../test_autoflake_fixer_callback.vader | 49 - .../test_autoimport_fixer_callback.vader | 47 - .../fixers/test_autopep8_fixer_callback.vader | 37 - .../fixers/test_bibclean_fixer_callback.vader | 30 - .../fixers/test_black_fixer_callback.vader | 67 - ...est_break_up_long_lines_python_fixer.vader | 39 - .../fixers/test_brittany_fixer_callback.vader | 24 - .../test_buf_format_fixer_callback.vader | 21 - .../test_buildifier_fixer_callback.vader | 29 - .../test_clangformat_fixer_callback.vader | 64 - .../test_clangtidy_fixer_callback.vader | 47 - .../test_cmakeformat_fixer_callback.vader | 36 - .../test_crystal_format_fixer_callback.vader | 33 - .../test_css_beautify_fixer_callback.vader | 12 - .../test_dart_format_fixer_callback.vader | 40 - .../fixers/test_dartfmt_fixer_callback.vader | 40 - .../fixers/test_dfmt_fixer_callback.vader | 40 - .../test_dhall_format_fixer_callback.vader | 22 - .../test_dhall_freeze_fixer_callback.vader | 22 - .../test_dhall_lint_fixer_callback.vader | 20 - .../test_dotnet_format_fixer_callback.vader | 41 - .../fixers/test_dprint_fixer_callback.vader | 44 - .../fixers/test_dune_fixer_callback.vader | 36 - .../test_elm_format_fixer_callback.vader | 74 - .../fixers/test_erblint_fixer_callback.vader | 55 - .../fixers/test_erlfmt_fixer_callback.vader | 25 - .../fixers/test_eslint_fixer_callback.vader | 339 - .../fixers/test_fecs_fixer_callback.vader | 24 - .../test_fish_indent_fixer_callback.vader | 40 - .../fixers/test_fixjson_fixer_callback.vader | 50 - .../fixers/test_floskell_fixer_callback.vader | 23 - .../fixers/test_gnatpp_fixer_callback.vader | 28 - .../fixers/test_gofmt_fixer_callback.vader | 50 - .../ale/test/fixers/test_gofumpt_fixer.vader | 27 - .../test_goimports_fixer_callback.vader | 57 - .../fixers/test_golines_fixer_callback.vader | 54 - .../fixers/test_gomod_fixer_callback.vader | 41 - ...st_goofle_java_format_fixer_callback.vader | 27 - .../fixers/test_hackfmt_fixer_callback.vader | 37 - .../fixers/test_hfmt_fixer_callback.vader | 24 - .../fixers/test_hindent_fixer_callback.vader | 18 - .../fixers/test_hlint_fixer_callback.vader | 20 - .../test_html_beautify_fixer_callback.vader | 12 - .../fixers/test_importjs_fixer_callback.vader | 35 - .../fixers/test_isort_fixer_callback.vader | 70 - .../test/fixers/test_jq_fixer_callback.vader | 26 - .../test_jsonnetfmt_fixer_callback.vader | 38 - .../fixers/test_ktlint_fixer_callback.vader | 42 - .../test_latexindent_fixer_callback.vader | 36 - .../test_lua_format_fixer_callback.vader | 35 - .../fixers/test_luafmt_fixer_callback.vader | 35 - .../test_mix_format_fixer_callback.vader | 36 - .../test_nimpretty_fixer_callback.vader | 23 - .../fixers/test_nixfmt_fixer_callback.vader | 24 - .../test_nixpkgsfmt_fixer_callback.vader | 24 - .../test_ocamlformat_fixer_callback.vader | 36 - .../test_ocp_indent_fixer_callback.vader | 34 - .../fixers/test_opa_fmt_fixer_callback.vader | 33 - .../fixers/test_ormolu_fixer_callback.vader | 24 - .../test_packer_fmt_fixer_callback.vader | 34 - .../fixers/test_pandoc_fixer_callback.vader | 23 - .../fixers/test_perltidy_fixer_callback.vader | 40 - .../test_pgformatter_fixer_callback.vader | 24 - .../ale/test/fixers/test_php_cs_fixer.vader | 62 - .../fixers/test_phpcbf_fixer_callback.vader | 117 - .../ale/test/fixers/test_pint_fixer.vader | 62 - .../test_prettier_eslint_fixer.callback.vader | 97 - .../fixers/test_prettier_fixer_callback.vader | 337 - .../test_prettier_standard_callback.vader | 15 - .../test_protolint_fixer_callback.vader | 28 - .../fixers/test_ptop_fixer_callback.vader | 38 - .../test_puppetlint_fixer_callback.vader | 24 - .../test_purs_tidy_fixer_callback.vader | 20 - .../fixers/test_purty_fixer_callback.vader | 24 - .../fixers/test_pyflyby_fixer_callback.vader | 38 - .../test_python_add_blank_lines_fixer.vader | 167 - .../fixers/test_qmlfmt_fixer_callback.vader | 12 - .../fixers/test_refmt_fixer_callback.vader | 41 - .../test_remark_lint_fixer_callback.vader | 24 - ...eorder_python_imports_fixer_callback.vader | 46 - .../fixers/test_rubocop_fixer_callback.vader | 89 - .../fixers/test_rufo_fixer_callback.vader | 30 - .../fixers/test_rustfmt_fixer_callback.vader | 16 - .../fixers/test_scalafmt_fixer_callback.vader | 66 - .../fixers/test_shfmt_fixer_callback.vader | 27 - .../fixers/test_sorbet_fixer_callback.vader | 38 - .../fixers/test_sqlfmt_fixer_callback.vader | 26 - .../test_sqlformat_fixer_callback.vader | 24 - .../fixers/test_standard_fixer_callback.vader | 31 - .../test_standardrb_fixer_callback.vader | 51 - .../ale/test/fixers/test_statix_fixer.vader | 18 - .../test_stylelint_fixer_callback.vader | 34 - .../fixers/test_styler_fixer_callback.vader | 21 - .../test_stylish_haskell_fixer_callback.vader | 24 - .../fixers/test_stylua_fixer_callback.vader | 19 - .../test_swiftformat_fixer_callback.vader | 35 - .../test_syntax_tree_fixer_callback.vader | 37 - .../test_terraform_fmt_fixer_callback.vader | 34 - .../fixers/test_textlint_fixer_callback.vader | 42 - .../fixers/test_tidy_fixer_callback.vader | 25 - .../test/fixers/test_trim_whitespace.vader | 28 - .../fixers/test_tslint_fixer_callback.vader | 42 - .../test_uncrustify_fixer_callback.vader | 108 - .../fixers/test_vfmt_fixer_callback.vader | 44 - .../test_vim_help_tags_alignment_fixer.vader | 19 - .../fixers/test_xmllint_fixer_callback.vader | 46 - .../test/fixers/test_xo_fixer_callback.vader | 45 - .../fixers/test_xots_fixer_callback.vader | 45 - .../fixers/test_yamlfix_fixer_callback.vader | 33 - .../fixers/test_yapf_fixer_callback.vader | 39 - .../fixers/test_zigfmt_fixer_callback.vader | 20 - .../handler/test_actionlint_handler.vader | 43 - .../test/handler/test_ada_gcc_handler.vader | 36 - .../ale/test/handler/test_alex_handler.vader | 54 - .../ale/test/handler/test_ameba_handler.vader | 44 - .../handler/test_ansible_lint_handler.vader | 95 - .../test_appleswiftformat_handler.vader | 28 - .../ale/test/handler/test_asm_handler.vader | 26 - .../test/handler/test_atools_handler.vader | 85 - .../ale/test/handler/test_avra_handler.vader | 24 - .../test/handler/test_bandit_handler.vader | 42 - .../test/handler/test_bashate_handler.vader | 36 - .../test/handler/test_bibclean_handler.vader | 88 - .../handler/test_bicep_bicep_handler.vader | 30 - .../test_bitbake_oelint_adv_handler.vader | 28 - .../test/handler/test_brakeman_handler.vader | 83 - .../test_cfn_python_lint_handler.vader | 33 - .../test/handler/test_checkmake_handler.vader | 23 - .../test/handler/test_checkov_handler.vader | 66 - .../handler/test_checkstyle_handler.vader | 53 - .../test/handler/test_circleci_handler.vader | 39 - .../ale/test/handler/test_clang_handler.vader | 30 - .../test_clojure_clj_kondo_handler.vader | 89 - .../handler/test_clojure_joker_handler.vader | 75 - .../handler/test_cmake_lint_handler.vader | 30 - .../handler/test_coffeelint_handler.vader | 20 - .../test/handler/test_common_handlers.vader | 181 - .../test/handler/test_cookstyle_handler.vader | 22 - .../test/handler/test_cppcheck_handler.vader | 93 - .../test/handler/test_cpplint_handler.vader | 29 - .../ale/test/handler/test_credo_handler.vader | 53 - .../test/handler/test_crystal_handler.vader | 28 - .../ale/test/handler/test_csc_handler.vader | 98 - .../test/handler/test_cspell_handler.vader | 13 - .../test/handler/test_cucumber_handler.vader | 18 - .../test/handler/test_cuda_nvcc_handler.vader | 41 - .../handler/test_cypher_lint_handler.vader | 21 - .../ale/test/handler/test_dafny_handler.vader | 36 - .../handler/test_dart_analyze_handler.vader | 35 - .../test/handler/test_debride_handler.vader | 27 - .../test_desktop_file_validate_handler.vader | 26 - .../ale/test/handler/test_dmd_handler.vader | 41 - .../test_dockerfile_lint_handler.vader | 112 - .../ale/test/handler/test_dogma_handler.vader | 30 - .../test/handler/test_drafter_handler.vader | 37 - .../test/handler/test_elmmake_handler.vader | 299 - .../test_embertemplatelint_handler.vader | 81 - .../test/handler/test_erblint_handler.vader | 70 - .../test_erlang_dialyzer_handler.vader | 27 - .../handler/test_erlang_elvis_handler.vader | 40 - .../test/handler/test_eslint_handler.vader | 438 - .../handler/test_eslint_json_handler.vader | 376 - .../ale/test/handler/test_fecs_handler.vader | 35 - .../ale/test/handler/test_fish_handler.vader | 61 - .../test/handler/test_flake8_handler.vader | 276 - .../test/handler/test_flakehell_handler.vader | 276 - .../handler/test_flawfinder_handler.vader | 57 - .../ale/test/handler/test_flow_handler.vader | 507 - .../handler/test_foodcritic_handler.vader | 44 - .../test/handler/test_fortran_handler.vader | 95 - .../ale/test/handler/test_gawk_handler.vader | 39 - .../ale/test/handler/test_gcc_handler.vader | 316 - .../ale/test/handler/test_ghc_handler.vader | 177 - .../test/handler/test_ghc_mod_handler.vader | 37 - .../ale/test/handler/test_ghdl_handler.vader | 26 - .../handler/test_gitlablint_handler.vader | 35 - .../test/handler/test_gitlint_handler.vader | 89 - .../test/handler/test_glslang_handler.vader | 24 - .../handler/test_go_generic_handler.vader | 38 - .../test/handler/test_gobuild_handler.vader | 45 - .../handler/test_golangci_lint_handler.vader | 84 - .../handler/test_gometalinter_handler.vader | 57 - .../ale/test/handler/test_hadolint.vader | 59 - .../handler/test_haskell_stack_handler.vader | 7 - .../ale/test/handler/test_hlint_handler.vader | 80 - .../test_ibm_openapi_validator_handler.vader | 49 - .../ale/test/handler/test_idris_handler.vader | 66 - .../ale/test/handler/test_inko_handler.vader | 54 - .../test/handler/test_ispc_ispc_handler.vader | 90 - .../ale/test/handler/test_javac_handler.vader | 97 - .../ale/test/handler/test_jscs_handler.vader | 39 - .../test/handler/test_ktlint_handler.vader | 21 - .../test/handler/test_lacheck_handler.vader | 34 - .../handler/test_languagetool_handler.vader | 62 - .../ale/test/handler/test_lessc_handler.vader | 69 - .../ale/test/handler/test_llc_handler.vader | 58 - .../handler/test_lua_selene_handler.vader | 38 - .../ale/test/handler/test_luac_handler.vader | 36 - .../test/handler/test_luacheck_handler.vader | 62 - .../handler/test_markdownlint_handler.vader | 91 - .../ale/test/handler/test_mcs_handler.vader | 37 - .../ale/test/handler/test_mcsc_handler.vader | 88 - .../ale/test/handler/test_mdl_handler.vader | 25 - .../handler/test_mercury_mmc_handler.vader | 58 - .../ale/test/handler/test_mix_handler.vader | 21 - .../ale/test/handler/test_msgfmt_hander.vader | 24 - .../ale/test/handler/test_mypy_handler.vader | 141 - .../ale/test/handler/test_naga_handler.vader | 23 - .../test/handler/test_nagelfar_handler.vader | 174 - .../ale/test/handler/test_nasm_handler.vader | 30 - .../ale/test/handler/test_nim_handler.vader | 80 - .../ale/test/handler/test_nix_handler.vader | 91 - .../test/handler/test_openscad_handler.vader | 76 - .../ale/test/handler/test_perl6_handler.vader | 277 - .../ale/test/handler/test_perl_handler.vader | 109 - .../handler/test_perlcritic_handler.vader | 20 - .../ale/test/handler/test_php_handler.vader | 93 - .../test/handler/test_php_phan_handler.vader | 26 - .../test/handler/test_php_phpmd_handler.vader | 24 - .../ale/test/handler/test_phpcs_handler.vader | 28 - .../test/handler/test_phpstan_handler.vader | 51 - .../ale/test/handler/test_pmd_handler.vader | 42 - .../ale/test/handler/test_pony_handler.vader | 21 - .../handler/test_powershell_handler.vader | 109 - .../handler/test_prospector_handler.vader | 163 - .../test_psscriptanalyzer_handler.vader | 42 - .../test/handler/test_puglint_handler.vader | 45 - .../test/handler/test_puppet_handler.vader | 77 - .../handler/test_pycodestyle_handler.vader | 154 - .../handler/test_pydocstyle_handler.vader | 116 - .../test/handler/test_pyflakes_handler.vader | 24 - .../test/handler/test_pylama_handler.vader | 268 - .../test/handler/test_pylint_handler.vader | 135 - .../handler/test_pyrex_cython_handler.vader | 26 - .../test/handler/test_qmlfmt_handler.vader | 19 - .../test/handler/test_qmllint_handler.vader | 19 - .../ale/test/handler/test_raco_handler.vader | 27 - .../test_rails_best_practices_handler.vader | 52 - .../test/handler/test_redpen_handler.vader | 98 - .../ale/test/handler/test_reek_handler.vader | 81 - .../handler/test_remark_lint_handler.vader | 39 - .../test/handler/test_rflint_handler.vader | 33 - .../test/handler/test_rpmlint_handler.vader | 33 - .../handler/test_rstcheck_lint_handler.vader | 42 - .../test/handler/test_rubocop_handler.vader | 76 - .../ale/test/handler/test_ruby_handler.vader | 38 - .../ale/test/handler/test_rust_handler.vader | 483 - .../test/handler/test_salt_salt_lint.vader | 34 - .../ale/test/handler/test_scala_handler.vader | 32 - .../handler/test_scalastyle_handler.vader | 53 - .../ale/test/handler/test_shell_handler.vader | 177 - .../handler/test_shellcheck_handler.vader | 43 - .../ale/test/handler/test_slim_handler.vader | 34 - .../ale/test/handler/test_sml_handler.vader | 119 - .../ale/test/handler/test_solc_handler.vader | 34 - .../test/handler/test_solhint_handler.vader | 84 - .../test/handler/test_spectral_handler.vader | 52 - .../test/handler/test_sqlint_handler.vader | 34 - .../test/handler/test_sqllint_handler.vader | 23 - .../test/handler/test_standard_handler.vader | 37 - .../test/handler/test_starknet_handler.vader | 36 - .../test/handler/test_statix_handler.vader | 16 - .../test/handler/test_stylelint_handler.vader | 43 - .../test/handler/test_swaglint_handler.vader | 68 - .../test/handler/test_swiftlint_handler.vader | 30 - .../ale/test/handler/test_swipl_handler.vader | 155 - .../test/handler/test_syntaxerl_handler.vader | 24 - .../test_systemd_analyze_handler.vader | 19 - .../test/handler/test_terraform_handler.vader | 138 - .../test/handler/test_textlint_handler.vader | 41 - .../test/handler/test_tflint_handler.vader | 99 - .../ale/test/handler/test_tfsec_handler.vader | 52 - .../test/handler/test_thrift_handler.vader | 63 - .../handler/test_thriftcheck_handler.vader | 28 - .../ale/test/handler/test_tlint_handler.vader | 34 - .../test/handler/test_tslint_handler.vader | 315 - .../test/handler/test_typecheck_handler.vader | 24 - .../test/handler/test_unimport_handler.vader | 18 - .../ale/test/handler/test_v_handler.vader | 54 - .../test/handler/test_vala_lint_handler.vader | 54 - .../ale/test/handler/test_vale_handler.vader | 88 - .../ale/test/handler/test_vcom_handler.vader | 36 - .../test/handler/test_verilator_handler.vader | 52 - .../ale/test/handler/test_vint_handler.vader | 65 - .../ale/test/handler/test_vlog_handler.vader | 47 - .../test/handler/test_vulture_handler.vader | 92 - .../handler/test_write_good_handler.vader | 37 - .../test/handler/test_xmllint_handler.vader | 30 - .../ale/test/handler/test_xvhdl_handler.vader | 24 - .../ale/test/handler/test_xvlog_handler.vader | 18 - .../test/handler/test_yamllint_handler.vader | 59 - .../ale/test/handler/test_yosys_handler.vader | 27 - .../ale/test/handler/test_zeek_handler.vader | 17 - .../ale/test/jsonnet_files/testfile.jsonnet | 1 - .../ale/test/linter/test_ada_gcc.vader | 42 - .../plugged/ale/test/linter/test_adals.vader | 17 - .../plugged/ale/test/linter/test_alex.vader | 34 - .../plugged/ale/test/linter/test_ameba.vader | 20 - .../ale/test/linter/test_angular.vader | 28 - .../ale/test/linter/test_ansible_lint.vader | 26 - .../test/linter/test_asciidoc_textlint.vader | 65 - .../ale/test/linter/test_asm_gcc.vader | 19 - .../ale/test/linter/test_avra_avra.vader | 29 - .../plugged/ale/test/linter/test_bandit.vader | 90 - .../ale/test/linter/test_bashate.vader | 15 - .../ale/test/linter/test_bib_bibclean.vader | 24 - .../ale/test/linter/test_bicep_bicep.vader | 21 - .../plugged/ale/test/linter/test_bingo.vader | 74 - .../ale/test/linter/test_bitbake.vader | 13 - .../ale/test/linter/test_brakeman.vader | 37 - .../ale/test/linter/test_buf_lint.vader | 32 - .../plugged/ale/test/linter/test_c_cc.vader | 94 - .../plugged/ale/test/linter/test_c_ccls.vader | 69 - .../ale/test/linter/test_c_clang_tidy.vader | 77 - .../ale/test/linter/test_c_clangd.vader | 47 - .../ale/test/linter/test_c_cppcheck.vader | 63 - .../ale/test/linter/test_c_cquery.vader | 37 - .../ale/test/linter/test_c_flawfinder.vader | 24 - .../ale/test/linter/test_c_import_paths.vader | 162 - .../plugged/ale/test/linter/test_cargo.vader | 222 - .../ale/test/linter/test_checkov.vader | 14 - .../ale/test/linter/test_checkstyle.vader | 72 - .../ale/test/linter/test_circleci.vader | 13 - .../ale/test/linter/test_clang_tidy.vader | 84 - .../ale/test/linter/test_clj_kondo.vader | 15 - .../test/linter/test_cmake_cmake_lint.vader | 13 - .../ale/test/linter/test_cookstyle.vader | 19 - .../plugged/ale/test/linter/test_cpp_cc.vader | 94 - .../ale/test/linter/test_cpp_ccls.vader | 69 - .../ale/test/linter/test_cpp_clangcheck.vader | 35 - .../ale/test/linter/test_cpp_clazy.vader | 56 - .../ale/test/linter/test_cpp_cppcheck.vader | 83 - .../ale/test/linter/test_cpp_cquery.vader | 40 - .../ale/test/linter/test_cpp_flawfinder.vader | 26 - .../ale/test/linter/test_cpplint.vader | 17 - .../plugged/ale/test/linter/test_cs_csc.vader | 42 - .../plugged/ale/test/linter/test_cs_mcs.vader | 13 - .../ale/test/linter/test_cs_mcsc.vader | 42 - .../plugged/ale/test/linter/test_cspell.vader | 71 - .../ale/test/linter/test_cucumber.vader | 18 - .../ale/test/linter/test_cuda_nvcc.vader | 20 - .../test/linter/test_cypher_cypher_lint.vader | 8 - .../plugged/ale/test/linter/test_d_dls.vader | 19 - .../linter/test_dart_analysis_server.vader | 15 - .../linter/test_dart_language_server.vader | 8 - .../linter/test_desktop_file_validate.vader | 15 - .../ale/test/linter/test_dialyxir.vader | 16 - .../test/linter/test_dmd_commandline.vader | 96 - .../test/linter/test_dockerfile_lint.vader | 19 - .../plugged/ale/test/linter/test_dogma.vader | 16 - .../ale/test/linter/test_eclipselsp.vader | 111 - .../ale/test/linter/test_elixir_credo.vader | 43 - .../ale/test/linter/test_elixir_ls.vader | 34 - .../ale/test/linter/test_elixir_mix.vader | 19 - .../plugged/ale/test/linter/test_elm_ls.vader | 29 - .../ale/test/linter/test_elm_make.vader | 63 - .../test/linter/test_embertemplatelint.vader | 23 - .../plugged/ale/test/linter/test_erb.vader | 16 - .../ale/test/linter/test_erblint.vader | 26 - .../test/linter/test_erlang_dialyzer.vader | 45 - .../ale/test/linter/test_erlang_elvis.vader | 16 - .../ale/test/linter/test_erlang_erlc.vader | 62 - .../test/linter/test_erlang_syntaxerl.vader | 45 - .../plugged/ale/test/linter/test_erubi.vader | 32 - .../plugged/ale/test/linter/test_erubis.vader | 16 - .../plugged/ale/test/linter/test_eslint.vader | 85 - .../plugged/ale/test/linter/test_fecs.vader | 9 - .../plugged/ale/test/linter/test_flake8.vader | 219 - .../ale/test/linter/test_flakehell.vader | 203 - .../plugged/ale/test/linter/test_flow.vader | 42 - .../ale/test/linter/test_foodcritic.vader | 18 - .../ale/test/linter/test_fortran_fortls.vader | 18 - .../plugged/ale/test/linter/test_fsc.vader | 13 - .../ale/test/linter/test_fusionlint.vader | 19 - .../plugged/ale/test/linter/test_gawk.vader | 25 - .../ale/test/linter/test_gfortran.vader | 24 - .../plugged/ale/test/linter/test_ghdl.vader | 19 - .../ale/test/linter/test_gitlint.vader | 43 - .../ale/test/linter/test_glslang.vader | 19 - .../plugged/ale/test/linter/test_glslls.vader | 19 - .../ale/test/linter/test_gobuild.vader | 33 - .../plugged/ale/test/linter/test_gofmt.vader | 26 - .../ale/test/linter/test_golangci_lint.vader | 50 - .../ale/test/linter/test_golangserver.vader | 76 - .../plugged/ale/test/linter/test_golint.vader | 30 - .../ale/test/linter/test_gometalinter.vader | 49 - .../plugged/ale/test/linter/test_gopls.vader | 96 - .../ale/test/linter/test_gosimple.vader | 19 - .../plugged/ale/test/linter/test_gotype.vader | 24 - .../plugged/ale/test/linter/test_govet.vader | 32 - .../ale/test/linter/test_graphql_gqlint.vader | 9 - .../ale/test/linter/test_haml_hamllint.vader | 43 - .../test/linter/test_haskell_cabal_ghc.vader | 13 - .../ale/test/linter/test_haskell_ghc.vader | 12 - .../test/linter/test_haskell_ghc_mod.vader | 10 - .../test/linter/test_haskell_hdevtools.vader | 16 - .../ale/test/linter/test_haskell_hie.vader | 27 - .../ale/test/linter/test_haskell_hlint.vader | 17 - .../ale/test/linter/test_haskell_hls.vader | 32 - .../linter/test_haskell_stack_build.vader | 13 - .../test/linter/test_haskell_stack_ghc.vader | 18 - .../linter/test_hdl_checker_options.vader | 86 - .../ale/test/linter/test_html_stylelint.vader | 60 - .../ale/test/linter/test_htmlhint.vader | 51 - .../linter/test_ibm_openapi_validator.vader | 15 - .../plugged/ale/test/linter/test_idris.vader | 21 - .../plugged/ale/test/linter/test_ink_ls.vader | 22 - .../ale/test/linter/test_inko_inko.vader | 20 - .../ale/test/linter/test_ispc_ispc.vader | 20 - .../ale/test/linter/test_iverilog.vader | 14 - .../plugged/ale/test/linter/test_javac.vader | 326 - .../ale/test/linter/test_javalsp.vader | 80 - .../linter/test_javascript_deno_lsp.vader | 79 - .../linter/test_javascript_tsserver.vader | 16 - .../plugged/ale/test/linter/test_jq.vader | 8 - .../plugged/ale/test/linter/test_jscs.vader | 15 - .../plugged/ale/test/linter/test_jshint.vader | 17 - .../ale/test/linter/test_jsonnet_lint.vader | 19 - .../ale/test/linter/test_jsonnetfmt.vader | 19 - .../linter/test_julia_languageserver.vader | 30 - .../linter/test_kotlin_languageserver.vader | 23 - .../ale/test/linter/test_kotlinc.vader | 9 - .../ale/test/linter/test_languagetool.vader | 22 - .../ale/test/linter/test_less_stylelint.vader | 32 - .../plugged/ale/test/linter/test_lessc.vader | 46 - .../plugged/ale/test/linter/test_lintr.vader | 34 - .../plugged/ale/test/linter/test_llc.vader | 21 - .../ale/test/linter/test_lua_selene.vader | 19 - .../plugged/ale/test/linter/test_luac.vader | 13 - .../ale/test/linter/test_luacheck.vader | 23 - .../linter/test_markdown_markdownlint.vader | 13 - .../ale/test/linter/test_markdown_mdl.vader | 19 - .../ale/test/linter/test_markdown_vale.vader | 32 - .../ale/test/linter/test_mercury_mmc.vader | 22 - .../plugged/ale/test/linter/test_mypy.vader | 106 - .../plugged/ale/test/linter/test_naga.vader | 10 - .../ale/test/linter/test_nagelfar.vader | 19 - .../ale/test/linter/test_nasm_nasm.vader | 32 - .../plugged/ale/test/linter/test_nimlsp.vader | 12 - .../ale/test/linter/test_nix_statix.vader | 19 - .../ale/test/linter/test_objc_ccls.vader | 66 - .../ale/test/linter/test_ocaml_ocamllsp.vader | 29 - .../ale/test/linter/test_ocaml_ols.vader | 41 - .../linter/test_ocamlinterface_ocamllsp.vader | 29 - .../ale/test/linter/test_openscad_sca2d.vader | 12 - .../plugged/ale/test/linter/test_perl.vader | 14 - .../plugged/ale/test/linter/test_perl6.vader | 14 - .../ale/test/linter/test_perlcritic.vader | 36 - .../plugged/ale/test/linter/test_php.vader | 15 - .../test/linter/test_php_intelephense.vader | 26 - .../ale/test/linter/test_php_langserver.vader | 32 - .../ale/test/linter/test_phpactor.vader | 20 - .../plugged/ale/test/linter/test_phpcs.vader | 42 - .../plugged/ale/test/linter/test_phpmd.vader | 12 - .../ale/test/linter/test_phpstan.vader | 121 - .../ale/test/linter/test_pony_ponyc.vader | 12 - .../ale/test/linter/test_prospector.vader | 35 - .../plugged/ale/test/linter/test_proto.vader | 16 - .../ale/test/linter/test_protolint.vader | 24 - .../plugged/ale/test/linter/test_psalm.vader | 44 - .../ale/test/linter/test_puglint.vader | 48 - .../ale/test/linter/test_purescript_ls.vader | 31 - .../ale/test/linter/test_pycodestyle.vader | 46 - .../ale/test/linter/test_pydocstyle.vader | 45 - .../ale/test/linter/test_pyflakes.vader | 60 - .../plugged/ale/test/linter/test_pylama.vader | 88 - .../plugged/ale/test/linter/test_pylint.vader | 96 - .../plugged/ale/test/linter/test_pylsp.vader | 70 - .../plugged/ale/test/linter/test_pyre.vader | 67 - .../ale/test/linter/test_pyrex_cython.vader | 30 - .../ale/test/linter/test_pyright.vader | 116 - .../plugged/ale/test/linter/test_qmlfmt.vader | 13 - .../test/linter/test_r_languageserver.vader | 22 - .../test/linter/test_racket_langserver.vader | 45 - .../ale/test/linter/test_racket_raco.vader | 10 - .../linter/test_rails_best_practices.vader | 42 - .../ale/test/linter/test_reason_ls.vader | 21 - .../ale/test/linter/test_reason_ols.vader | 42 - .../plugged/ale/test/linter/test_reek.vader | 49 - .../ale/test/linter/test_rego_opacheck.vader | 16 - .../ale/test/linter/test_remark_lint.vader | 37 - .../plugged/ale/test/linter/test_revive.vader | 30 - .../plugged/ale/test/linter/test_rflint.vader | 20 - .../plugged/ale/test/linter/test_rnix.vader | 12 - .../ale/test/linter/test_rst_textlint.vader | 65 - .../ale/test/linter/test_rubocop.vader | 26 - .../plugged/ale/test/linter/test_ruby.vader | 13 - .../ale/test/linter/test_ruby_debride.vader | 8 - .../test/linter/test_ruby_solargraph.vader | 43 - .../ale/test/linter/test_rust_analyzer.vader | 28 - .../ale/test/linter/test_rust_rls.vader | 33 - .../plugged/ale/test/linter/test_rustc.vader | 25 - .../plugged/ale/test/linter/test_ruumba.vader | 26 - .../ale/test/linter/test_sass_sasslint.vader | 43 - .../ale/test/linter/test_scala_metals.vader | 21 - .../test/linter/test_scala_sbtserver.vader | 23 - .../plugged/ale/test/linter/test_scalac.vader | 13 - .../ale/test/linter/test_scalastyle.vader | 34 - .../ale/test/linter/test_scss_sasslint.vader | 43 - .../ale/test/linter/test_scss_stylelint.vader | 33 - .../ale/test/linter/test_shellcheck.vader | 106 - .../ale/test/linter/test_slimlint.vader | 19 - .../plugged/ale/test/linter/test_solc.vader | 13 - .../ale/test/linter/test_solc_commit.vader | 14 - .../ale/test/linter/test_solhint.vader | 28 - .../plugged/ale/test/linter/test_sorbet.vader | 34 - .../ale/test/linter/test_spectral.vader | 31 - .../ale/test/linter/test_sqllint.vader | 12 - .../ale/test/linter/test_standard.vader | 43 - .../ale/test/linter/test_standardrb.vader | 26 - .../ale/test/linter/test_standardts.vader | 43 - .../ale/test/linter/test_starknet.vader | 13 - .../ale/test/linter/test_staticcheck.vader | 49 - .../test/linter/test_sugarss_stylelint.vader | 33 - .../ale/test/linter/test_svelteserver.vader | 8 - .../ale/test/linter/test_swaglint.vader | 29 - .../linter/test_swift_appleswiftformat.vader | 42 - .../test/linter/test_swift_sourcekitlsp.vader | 21 - .../ale/test/linter/test_swiftlint.vader | 43 - .../test/linter/test_systemd_analyze.vader | 9 - .../ale/test/linter/test_terraform_ls.vader | 42 - .../ale/test/linter/test_terraform_lsp.vader | 29 - .../linter/test_terraform_terraform.vader | 15 - .../test/linter/test_terraform_tflint.vader | 28 - .../test/linter/test_terraform_tfsec.vader | 38 - .../ale/test/linter/test_tex_lacheck.vader | 13 - .../ale/test/linter/test_tex_textlint.vader | 65 - .../plugged/ale/test/linter/test_texlab.vader | 35 - .../ale/test/linter/test_textlint.vader | 65 - .../plugged/ale/test/linter/test_thrift.vader | 53 - .../ale/test/linter/test_thriftcheck.vader | 21 - .../plugged/ale/test/linter/test_tslint.vader | 23 - .../linter/test_typescript_deno_lsp.vader | 79 - .../linter/test_typescript_tsserver.vader | 8 - .../ale/test/linter/test_unimport.vader | 71 - .../test/linter/test_v_command_callback.vader | 25 - .../plugged/ale/test/linter/test_vcom.vader | 19 - .../ale/test/linter/test_verilator.vader | 14 - .../ale/test/linter/test_vim_vimls.vader | 77 - .../plugged/ale/test/linter/test_vint.vader | 34 - .../plugged/ale/test/linter/test_vlog.vader | 19 - .../plugged/ale/test/linter/test_volar.vader | 27 - .../ale/test/linter/test_vulture.vader | 62 - .../ale/test/linter/test_write_good.vader | 55 - .../ale/test/linter/test_xmllint.vader | 20 - .../plugged/ale/test/linter/test_xo.vader | 23 - .../plugged/ale/test/linter/test_xots.vader | 23 - .../plugged/ale/test/linter/test_xvhdl.vader | 19 - .../plugged/ale/test/linter/test_xvlog.vader | 19 - .../ale/test/linter/test_yaml_ls.vader | 21 - .../ale/test/linter/test_yang_lsp.vader | 12 - .../plugged/ale/test/linter/test_zeek.vader | 17 - .../ale/test/linter/test_zig_zls.vader | 15 - .../ale/test/lsp/test_closing_documents.vader | 176 - .../ale/test/lsp/test_did_save_event.vader | 147 - .../test_engine_lsp_response_handling.vader | 428 - .../lsp/test_handling_window_requests.vader | 94 - .../test/lsp/test_lsp_client_messages.vader | 389 - .../lsp/test_lsp_command_formatting.vader | 44 - .../ale/test/lsp/test_lsp_connections.vader | 227 - .../test/lsp/test_lsp_custom_request.vader | 158 - .../ale/test/lsp/test_lsp_error_parsing.vader | 74 - .../test/lsp/test_lsp_root_detection.vader | 90 - .../ale/test/lsp/test_lsp_startup.vader | 492 - ...st_other_initialize_message_handling.vader | 216 - .../test/lsp/test_read_lsp_diagnostics.vader | 257 - .../plugged/ale/test/lsp/test_reset_lsp.vader | 98 - .../ale/test/lsp/test_update_config.vader | 21 - .../ale/test/python/test_deoplete_source.py | 121 - .../ale/test/script/block-padding-checker | 145 - .../ale/test/script/check-duplicate-tags | 5 - .../test/script/check-supported-tools-tables | 60 - .../ale/test/script/check-tag-alignment | 11 - .../ale/test/script/check-tag-references | 22 - .../.vim/plugged/ale/test/script/check-toc | 90 - .../plugged/ale/test/script/custom-checks | 80 - .../ale/test/script/custom-linting-rules | 166 - .../ale/test/script/dumb_named_pipe_server.py | 42 - .../ale/test/script/dumb_tcp_client.py | 33 - .../ale/test/script/dumb_tcp_server.py | 40 - .../plugged/ale/test/script/run-vader-tests | 167 - .../.vim/plugged/ale/test/script/run-vint | 20 - .../test/sign/test_linting_sets_signs.vader | 76 - .../sign/test_sign_column_highlighting.vader | 68 - .../ale/test/sign/test_sign_limits.vader | 57 - .../ale/test/sign/test_sign_parsing.vader | 88 - .../ale/test/sign/test_sign_placement.vader | 315 - .../.vim/plugged/ale/test/smoke_test.vader | 181 - .../ale/test/test-files/.circleci/config.yml | 0 .../plugged/ale/test/test-files/.gitignore | 2 - .../ale/test/test-files/ada/testfile.adb | 0 .../node-modules-2/node_modules/alex/cli.js | 0 .../alex/node-modules/node_modules/.bin/alex | 0 .../@angular/language-server/bin/ngserver | 0 .../@angular/language-service/dummy | 0 .../test/test-files/ant/ant-project/build.xml | 0 .../plugged/ale/test/test-files/ant/bin/ant | 0 .../ale/test/test-files/ant/bin/ant.exe | 0 .../plugged/ale/test/test-files/bazel/BUILD | 0 .../ale/test/test-files/bazel/WORKSPACE | 0 .../ale/test/test-files/bazel/defs.bzl | 0 .../plugged/ale/test/test-files/bib/dummy.bib | 0 .../build/bad_folder_to_test_priority | 0 .../build/compile_commands.json | 0 .../test-files/c/configure_project/Makefile | 0 .../test-files/c/configure_project/configure | 0 .../c/configure_project/include/test.h | 0 .../c/configure_project/subdir/Makefile | 0 .../plugged/ale/test/test-files/c/dummy.c | 0 .../c/git_and_nested_makefiles/include/test.h | 0 .../c/git_and_nested_makefiles/src/Makefile | 0 .../c/gnumakefile_project/GNUmakefile | 0 .../test-files/c/gnumakefile_project/file.c | 0 .../test/test-files/c/h_file_project/Makefile | 0 .../test-files/c/h_file_project/subdir/dummy | 0 .../test/test-files/c/h_file_project/test.h | 0 .../test-files/c/hpp_file_project/Makefile | 0 .../c/hpp_file_project/subdir/dummy | 0 .../test-files/c/hpp_file_project/test.hpp | 0 .../json_project/build/compile_commands.json | 0 .../test-files/c/json_project/include/test.h | 0 .../test-files/c/json_project/subdir/dummy | 0 .../test-files/c/makefile_project/Makefile | 0 .../test-files/c/makefile_project/_astylerc | 0 .../test/test-files/c/makefile_project/args | 3 - .../c/makefile_project/include/test.h | 0 .../test-files/c/makefile_project/subdir/args | 1 - .../c/makefile_project/subdir/dummy | 0 .../c/makefile_project/subdir/file.c | 0 .../ale/test/test-files/cargo/Cargo.toml | 0 .../cargo/workspace_paths/Cargo.toml | 0 .../cargo/workspace_paths/subpath/Cargo.toml | 0 .../compile_commands.json | 0 .../test-files/ccls/with_ccls-root/.ccls-root | 0 .../ale/test/test-files/ccls/with_ccls/.ccls | 0 .../compile_commands.json | 0 .../test-files/checkstyle/other_config.xml | 0 .../compile_commands.json | 0 .../compile_commands.json | 0 .../with_clangformat/.clang-format | 0 .../plugged/ale/test/test-files/cpp/.astylerc | 0 .../plugged/ale/test/test-files/cpp/dummy.cpp | 0 .../cppcheck/one/compile_commands.json | 0 .../test-files/cppcheck/one/two/three/file.c | 0 .../cppcheck/one/two/three/file.cpp | 0 .../build/compile_commands.json | 0 .../cquery/build/compile_commands.json | 0 .../test-files/cquery/with_cquery/.cquery | 0 .../node-modules-2/node_modules/cspell/bin.js | 0 .../node-modules/node_modules/.bin/cspell | 0 .../test-files/csslint/other-app/testfile.css | 0 .../test-files/csslint/some-app/.csslintrc | 0 .../csslint/some-app/subdir/testfile.css | 0 .../test-files/cucumber/features/cuke.feature | 0 .../features/step_definitions/base_steps.rb | 0 .../.vim/plugged/ale/test/test-files/d/test.d | 0 .../ale/test/test-files/dart/.packages | 0 .../ale/test/test-files/dart/testfile.dart | 0 .../ale/test/test-files/dprint/blank.ts | 0 .../ale/test/test-files/dprint/dprint.json | 0 .../test-files/elixir/mix_project/lib/app.ex | 0 .../test-files/elixir/mix_project/mix.exs | 3 - .../ale/test/test-files/elixir/testfile.ex | 0 .../umbrella_project/apps/app1/lib/app.ex | 0 .../elixir/umbrella_project/apps/app1/mix.exs | 0 .../umbrella_project/apps/app2/lib/app.ex | 0 .../elixir/umbrella_project/apps/app2/mix.exs | 0 .../elixir/umbrella_project/mix.exs | 0 .../test-files/elm/newapp-notests/elm.json | 0 .../elm/newapp-notests/node_modules/.bin/elm | 0 .../elm/newapp-notests/tests/TestMain.elm | 0 .../ale/test/test-files/elm/newapp/elm.json | 0 .../elm/newapp/node_modules/.bin/elm | 0 .../elm/newapp/node_modules/.bin/elm-test | 0 .../test/test-files/elm/newapp/src/Main.elm | 0 .../test-files/elm/newapp/tests/TestSuite.elm | 0 .../elm/node_modules/.bin/elm-format | 0 .../test-files/elm/oldapp/elm-package.json | 0 .../elm/oldapp/node_modules/.bin/elm | 0 .../elm/oldapp/node_modules/.bin/elm-test | 0 .../test/test-files/elm/oldapp/src/Main.elm | 0 .../test-files/elm/oldapp/tests/TestSuite.elm | 0 .../test-files/elm/src/subdir/testfile.elm | 0 .../ale/test/test-files/eruby/dummy.html.erb | 0 .../node_modules/.bin/eslint_d | 0 .../eslint/node_modules/.bin/eslint | 0 .../eslint/other-app/subdir/testfile.js | 0 .../ale/test/test-files/eslint/package.json | 0 .../test-files/eslint/react-app/.eslintrc.js | 0 .../node_modules/eslint/bin/eslint.js | 0 .../node_modules/standard/bin/cmd.js | 0 .../node_modules/stylelint/bin/stylelint.js | 0 .../eslint/react-app/node_modules/xo/cli.js | 0 .../react-app/subdir-with-config/.eslintrc | 0 .../node_modules/.gitkeep | 0 .../subdir-with-package-json/package.json | 0 .../eslint/react-app/subdir/testfile.css | 0 .../eslint/react-app/subdir/testfile.js | 0 .../eslint/react-app/subdir/testfile.ts | 0 .../yarn2-app/.yarn/sdks/eslint/bin/eslint.js | 0 .../eslint/yarn2-app/subdir/testfile.js | 0 .../plugged/ale/test/test-files/fecs/fecs | 0 .../plugged/ale/test/test-files/fecs/fecs.exe | 0 .../ale/test/test-files/fish/testfile.fish | 0 .../ale/test/test-files/flow/a/.flowconfig | 0 .../ale/test/test-files/flow/a/sub/dummy | 0 .../ale/test/test-files/flow/b/sub/dummy | 0 .../test/test-files/fortls-project/.fortls | 2 - .../plugged/ale/test/test-files/go/go.mod | 1 - .../ale/test/test-files/go/go1/prj1/file.go | 0 .../ale/test/test-files/go/go2/prj2/file.go | 0 .../ale/test/test-files/go/gopath/bin/gopls | 0 .../test/test-files/go/gopath/bin/staticcheck | 0 .../ale/test/test-files/go/testfile.go | 0 .../ale/test/test-files/go/testfile2.go | 0 .../gradle/build-gradle-project/build.gradle | 0 .../src/main/kotlin/dummy.kt | 0 .../plugged/ale/test/test-files/gradle/gradle | 0 .../src/main/kotlin/dummy.kt | 0 .../settings-gradle-project/settings.gradle | 0 .../src/main/kotlin/dummy.kt | 0 .../gradle/unwrapped-project/build.gradle | 0 .../gradle/unwrapped-project/settings.gradle | 0 .../src/main/kotlin/dummy.kt | 0 .../gradle/wrapped-project/build.gradle | 0 .../test-files/gradle/wrapped-project/gradlew | 0 .../gradle/wrapped-project/settings.gradle | 0 .../wrapped-project/src/main/kotlin/dummy.kt | 0 .../haml-lint-and-rubocop/.haml-lint.yml | 0 .../haml-lint-and-rubocop/.rubocop.yml | 0 .../haml-lint-and-rubocop/subdir/file.haml | 0 .../hamllint/haml-lint-yml/.haml-lint.yml | 0 .../hamllint/haml-lint-yml/subdir/file.haml | 0 .../hamllint/rubocop-yml/.rubocop.yml | 0 .../hamllint/rubocop-yml/subdir/file.haml | 0 .../ale/test/test-files/hdl_server/foo.vhd | 0 .../with_config_file/.hdl_checker.config | 0 .../with_config_file/_hdl_checker.config | 0 .../hdl_server/with_config_file/foo.vhd | 0 .../hdl_server/with_git/files/foo.vhd | 1 - .../ale/test/test-files/hie_paths/file.hs | 0 .../test-files/html_beautify/html-beautify | 0 .../test/test-files/html_beautify/test.html | 0 .../htmlhint/node_modules/.bin/htmlhint | 0 .../htmlhint/with_config/.htmlhintrc | 0 .../ale/test/test-files/ink/story/main.ink | 0 .../ale/test/test-files/inko/test.inko | 0 .../test-files/inko/tests/test/test_foo.inko | 0 .../no_main/src/test/java/com/something/dummy | 0 .../src/main/java/com/something/dummy | 0 .../src/main/jaxb/com/something/dummy | 0 .../build/gen/main/java/com/something/dummy | 0 .../build/gen2/main/java/com/something/dummy | 0 .../src/main/java/com/something/dummy | 0 .../src/test/java/com/something/dummy | 0 .../ale/test/test-files/javascript/test.js | 0 .../javascript_deno/custom_import_map.json | 3 - .../javascript_deno/import_map.json | 3 - .../test/test-files/javascript_deno/main.js | 1 - .../test-files/javascript_deno/tsconfig.json | 16 - .../ale/test/test-files/json/testfile.json | 1 - .../app-without-jsonlint/src/app.json | 0 .../jsonlint/app/node_modules/.bin/jsonlint | 0 .../test/test-files/jsonlint/app/src/app.json | 0 .../jsonlint/node_modules/jsonlint/lib/cli.js | 0 .../plugged/ale/test/test-files/julia/REQUIRE | 0 .../plugged/ale/test/test-files/julia/test.jl | 0 .../ale/test/test-files/kotlin/testfile.kt | 0 .../test-files/lessc/node_modules/.bin/lessc | 0 .../ale/test/test-files/long-line/setup.cfg | 2 - .../ale/test/test-files/lua/testfile.lua | 0 .../ale/test/test-files/markdown/testfile.md | 0 .../maven/maven-java-project/module1/mvnw | 0 .../maven/maven-java-project/module1/mvnw.cmd | 0 .../maven/maven-java-project/module1/pom.xml | 1 - .../module1/src/main/java/dummy1.java | 0 .../maven/maven-java-project/module2/pom.xml | 1 - .../module2/src/main/java/dummy2.java | 0 .../maven/maven-kotlin-project/pom.xml | 1 - .../src/main/kotlin/dummy.kt | 1 - .../plugged/ale/test/test-files/maven/mvn | 0 .../src/main/java/dummy.java | 0 .../test-files/nim/with-git/src/source.nim | 0 .../ale/test/test-files/ocaml/testfile.ml | 0 .../ale/test/test-files/ocamllsp/dune-project | 0 .../plugged/ale/test/test-files/ols/.merlin | 0 .../node_modules/.bin/ocaml-language-server | 0 .../ale/test/test-files/pascal/test.pas | 0 .../php/project-with-php-cs-fixer/test.php | 0 .../vendor/bin/php-cs-fixer | 0 .../php/project-with-phpcbf/foo/test.php | 0 .../php/project-with-phpcbf/vendor/bin/phpcbf | 0 .../test-files/php/project-with-pint/test.php | 0 .../php/project-with-pint/vendor/bin/pint | 0 .../php/project-without-php-cs-fixer/test.php | 0 .../php/project-without-phpcbf/foo/test.php | 0 .../php/project-without-pint/test.php | 0 .../php/vendor/bin/php-language-server.php | 0 .../php/with-composer/composer.json | 0 .../vendor/bin/php-language-server.php | 0 .../vendor/bin/php-language-server.php | 0 .../phpcs/project-with-phpcs/foo/test.php | 0 .../phpcs/project-with-phpcs/vendor/bin/phpcs | 0 .../phpcs/project-without-phpcs/foo/test.php | 0 .../ale/test/test-files/prettier/testfile | 0 .../ale/test/test-files/prettier/testfile.css | 0 .../ale/test/test-files/prettier/testfile.js | 0 .../test/test-files/prettier/testfile.json | 0 .../test/test-files/prettier/testfile.scss | 0 .../ale/test/test-files/prettier/testfile.ts | 0 .../prettier/with_config/.prettierrc | 0 .../prettier/with_config/testfile.js | 0 .../with_prettierignore/.prettierignore | 0 .../with_prettierignore/src/testfile.js | 0 .../ale/test/test-files/proto/testfile.proto | 0 .../test/test-files/psalm/vendor/bin/psalm | 0 .../puglint/node_modules/.bin/pug-lint | 0 .../ale/test/test-files/puglint/package.json | 0 .../puglint/puglint_rc_dir/.pug-lintrc | 0 .../puglint/puglint_rc_js_dir/.pug-lintrc.js | 0 .../puglint_rc_json_dir/.pug-lintrc.json | 0 .../ale/test/test-files/puppet/dummy.pp | 0 .../lib/puppet/types/exampletype.rb | 0 .../puppet/new-style-module/metadata.json | 0 .../new-style-module/template/template.epp | 0 .../puppet/old-style-module/manifests/init.pp | 0 .../old-style-module/templates/template.epp | 0 .../test/test-files/purescript/bower/Foo.purs | 0 .../test-files/purescript/bower/bower.json | 0 .../purescript/psc-package/Foo.purs | 0 .../purescript/psc-package/psc-package.json | 0 .../test/test-files/purescript/spago/Foo.purs | 0 .../test-files/purescript/spago/spago.dhall | 0 .../namespace_package_manifest/MANIFEST.in | 3 - .../namespace/foo/__init__.py | 0 .../namespace/foo/bar.py | 0 .../namespace/foo/__init__.py | 0 .../namespace/foo/bar.py | 0 .../namespace_package_pytest/pytest.ini | 2 - .../namespace/foo/__init__.py | 0 .../namespace/foo/bar.py | 0 .../python/namespace_package_setup/setup.cfg | 2 - .../namespace/foo/__init__.py | 0 .../namespace/foo/bar.py | 0 .../python/namespace_package_tox/tox.ini | 3 - .../no_virtualenv/subdir/foo/COMMIT_EDITMSG | 0 .../no_virtualenv/subdir/foo/__init__.py | 0 .../python/no_virtualenv/subdir/foo/bar.py | 0 .../test-files/python/pipenv/Pipfile.lock | 0 .../test/test-files/python/poetry/poetry.lock | 0 .../.pyre_configuration.local | 0 .../pyre_configuration_dir/foo/__init__.py | 0 .../python/pyre_configuration_dir/foo/bar.py | 0 .../python/python-package-project/.flake8 | 0 .../package-name/module.py | 0 .../test-files/python/with_bandit/.bandit | 0 .../with_bandit/namespace/foo/__init__.py | 0 .../python/with_bandit/namespace/foo/bar.py | 0 .../with_mypy_ini_and_pytest_ini/mypy.ini | 0 .../tests/pytest.ini | 0 .../tests/testsubfolder/my_tests.py | 0 .../dir_with_yapf_config/.style.yapf | 0 .../with_virtualenv/env/Scripts/activate | 0 .../with_virtualenv/env/Scripts/autoflake.exe | 0 .../env/Scripts/autoimport.exe | 0 .../with_virtualenv/env/Scripts/autopep8.exe | 0 .../with_virtualenv/env/Scripts/black.exe | 0 .../with_virtualenv/env/Scripts/flake8.exe | 0 .../with_virtualenv/env/Scripts/flakehell.exe | 0 .../with_virtualenv/env/Scripts/gitlint.exe | 0 .../with_virtualenv/env/Scripts/isort.exe | 0 .../with_virtualenv/env/Scripts/mypy.exe | 0 .../with_virtualenv/env/Scripts/pyflakes.exe | 0 .../with_virtualenv/env/Scripts/pylama.exe | 0 .../with_virtualenv/env/Scripts/pylint.exe | 0 .../with_virtualenv/env/Scripts/pylsp.exe | 0 .../with_virtualenv/env/Scripts/pyre.exe | 0 .../env/Scripts/reorder-python-imports.exe | 0 .../env/Scripts/tidy-imports.exe | 0 .../with_virtualenv/env/Scripts/unimport.exe | 0 .../with_virtualenv/env/Scripts/vulture.exe | 0 .../with_virtualenv/env/Scripts/yamlfix.exe | 0 .../with_virtualenv/env/Scripts/yapf.exe | 0 .../python/with_virtualenv/env/bin/activate | 0 .../python/with_virtualenv/env/bin/autoflake | 0 .../python/with_virtualenv/env/bin/autoimport | 0 .../python/with_virtualenv/env/bin/autopep8 | 0 .../python/with_virtualenv/env/bin/black | 0 .../python/with_virtualenv/env/bin/flake8 | 0 .../python/with_virtualenv/env/bin/flakehell | 0 .../python/with_virtualenv/env/bin/gitlint | 0 .../python/with_virtualenv/env/bin/isort | 0 .../python/with_virtualenv/env/bin/mypy | 0 .../python/with_virtualenv/env/bin/pyflakes | 0 .../python/with_virtualenv/env/bin/pylama | 0 .../python/with_virtualenv/env/bin/pylint | 0 .../python/with_virtualenv/env/bin/pylsp | 0 .../python/with_virtualenv/env/bin/pyre | 0 .../env/bin/reorder-python-imports | 0 .../with_virtualenv/env/bin/tidy-imports | 0 .../python/with_virtualenv/env/bin/unimport | 0 .../python/with_virtualenv/env/bin/vulture | 0 .../python/with_virtualenv/env/bin/yamlfix | 0 .../python/with_virtualenv/env/bin/yapf | 0 .../with_virtualenv/subdir/foo/COMMIT_EDITMSG | 0 .../with_virtualenv/subdir/foo/__init__.py | 0 .../python/with_virtualenv/subdir/foo/bar.py | 0 .../python/with_virtualenv/subdir/foo/bar.pyi | 0 .../plugged/ale/test/test-files/r/.Rprofile | 0 .../racket/many-inits/a/b/c/foo.rkt | 3 - .../racket/many-inits/a/b/c/init.rkt | 1 - .../test-files/racket/many-inits/a/b/foo.rkt | 3 - .../test-files/racket/many-inits/a/b/init.rkt | 1 - .../test-files/racket/many-inits/a/foo.rkt | 3 - .../test-files/racket/many-inits/a/init.rkt | 1 - .../test/test-files/racket/many-inits/foo.rkt | 3 - .../test-files/racket/many-inits/init.rkt | 1 - .../test-files/racket/simple-script/foo.rkt | 3 - .../test/test-files/reasonml/bsconfig.json | 0 .../ale/test/test-files/reasonml/testfile.re | 0 .../with_bin_path/node_modules/.bin/remark | 0 .../plugged/ale/test/test-files/ruby/dummy.rb | 0 .../test-files/ruby/not_a_rails_app/file.rb | 0 .../ruby/valid_rails_app/app/dummy.rb | 0 .../ruby/valid_rails_app/app/models/thing.rb | 0 .../app/views/my_great_view.html.erb | 0 .../ruby/valid_rails_app/config/dummy.rb | 0 .../ruby/valid_rails_app/db/dummy.rb | 0 .../test-files/ruby/valid_ruby_app1/Rakefile | 0 .../ruby/valid_ruby_app1/lib/file.rb | 0 .../test-files/ruby/valid_ruby_app2/Gemfile | 0 .../ruby/valid_ruby_app2/lib/file.rb | 0 .../ruby/valid_ruby_app3/.solargraph.yml | 0 .../ruby/valid_ruby_app3/lib/file.rb | 0 .../test-files/ruby/with_config/.rubocop.yml | 0 .../test-files/ruby/with_config/.standard.yml | 0 .../ale/test/test-files/rust/cargo/Cargo.toml | 0 .../test/test-files/rust/cargo/testfile.rs | 0 .../rust/rust-project/rust-project.json | 0 .../test-files/rust/rust-project/testfile.rs | 0 .../with-bin/node_modules/.bin/sass-lint | 0 .../node_modules/sass-lint/bin/sass-lint.js | 0 .../ale/test/test-files/scala/dummy.scala | 0 .../scala/invalid_sbt_project/Main.scala | 0 .../scala/valid_sbt_project/Main.scala | 0 .../scala/valid_sbt_project/build.sbt | 0 .../ale/test/test-files/slimlint/.rubocop.yml | 0 .../test/test-files/slimlint/subdir/file.slim | 0 .../ale/test/test-files/smlnj/cm/foo.sml | 0 .../test/test-files/smlnj/cm/path/to/bar.sml | 0 .../ale/test/test-files/smlnj/cm/sources.cm | 0 .../ale/test/test-files/smlnj/file/qux.sml | 0 .../ale/test/test-files/solhint/Contract.sol | 0 .../solhint/node_modules/.bin/solhint | 0 .../solhint/node_modules/solhint/index.js | 0 .../ale/test/test-files/solhint/package.json | 0 .../spectral/node_modules/.bin/spectral | 0 .../ale/test/test-files/spectral/openapi.yaml | 0 .../ale/test/test-files/stack/stack.yaml | 0 .../with-bin/node_modules/.bin/standard | 0 .../with-cmd/node_modules/standard/bin/cmd.js | 0 .../stylelint/node_modules/.bin/stylelint | 0 .../test-files/swaglint/docs/swagger.yaml | 0 .../swaglint/node_modules/.bin/swaglint | 0 .../ale/test/test-files/swift/dummy.swift | 0 .../src/folder/dummy.swift | 0 .../.swift-format | 10 - .../Package.swift | 0 .../src/folder/dummy.swift | 0 .../swift/swift-package-project/Package.swift | 0 .../src/folder/dummy.swift | 0 .../Pods/SwiftLint/swiftlint | 0 .../ios/Pods/SwiftLint/swiftlint | 0 .../cocoapods/Pods/SwiftLint/swiftlint | 0 .../react-native/ios/Pods/SwiftLint/swiftlint | 0 .../test-files/terraform/.terraform/dummy | 0 .../ale/test/test-files/terraform/main.tf | 0 .../ale/test/test-files/tex/sample1.tex | 0 .../ale/test/test-files/tex/sample2.tex | 0 .../ale/test/test-files/tex/testfile.tex | 0 .../with_bin_path/node_modules/.bin/textlint | 0 .../node_modules/textlint/bin/textlint.js | 0 .../test/test-files/tflint/foo/.tflint.hcl | 0 .../ale/test/test-files/tflint/foo/bar.tf | 0 .../test-files/tfsec/json/.tfsec/config.json | 0 .../ale/test/test-files/tfsec/json/main.tf | 0 .../test-files/tfsec/yml/.tfsec/config.yml | 0 .../ale/test/test-files/tfsec/yml/main.tf | 0 .../plugged/ale/test/test-files/tidy/.tidyrc | 0 .../ale/test/test-files/tidy/test.html | 0 .../plugged/ale/test/test-files/tidy/tidy | 0 .../plugged/ale/test/test-files/tidy/tidy.exe | 0 .../empty-file | 0 .../ale/test/test-files/top/example.ini | 0 .../test-files/top/middle/bottom/dummy.txt | 0 .../ale/test/test-files/tsserver/src/file1.ts | 0 .../test-files/tsserver/src/level-1/file2.ts | 0 .../tsserver/src/level-1/level-2/file3.ts | 0 .../tsserver/src/level-1/tsconfig.json | 0 .../test/test-files/tsserver/tsconfig.json | 0 .../typescript/custom_import_map.json | 0 .../test-files/typescript/import_map.json | 0 .../ale/test/test-files/typescript/test.ts | 0 .../test/test-files/typescript/tsconfig.json | 0 .../vim/invalid_vim_project/test.vim | 0 .../vim/node_modules/.bin/vim-language-server | 0 .../vim/path_with_autoload/autoload/test.vim | 0 .../vim/path_with_autoload/test.vim | 0 .../test-files/vim/path_with_initvim/init.vim | 0 .../vim/path_with_plugin/plugin/test.vim | 0 .../test-files/vim/path_with_plugin/test.vim | 0 .../test-files/vim/path_with_vimrc/.vimrc | 0 .../node_modules/.bin/vue-language-server | 0 .../typescript/lib/tsserverlibrary.js | 0 .../ale/test/test-files/volar/package.json | 0 .../ale/test/test-files/volar/src/App.vue | 0 .../node_modules/write-good/bin/write-good.js | 0 .../node-modules/node_modules/.bin/write-good | 0 .../xo/monorepo/node_modules/xo/cli.js | 0 .../test/test-files/xo/monorepo/package.json | 0 .../xo/monorepo/packages/a/index.js | 0 .../xo/monorepo/packages/a/index.ts | 0 .../xo/monorepo/packages/a/package.json | 0 .../ale/test/test-files/yaml/test.yaml | 0 .../plugged/ale/test/test-files/zig/build.zig | 0 .../.vim/plugged/ale/test/test_ale_has.vader | 13 - .../.vim/plugged/ale/test/test_ale_info.vader | 777 -- .../ale/test/test_ale_info_to_clipboard.vader | 15 - .../ale/test/test_ale_lint_command.vader | 77 - .../ale/test/test_ale_lint_stop_command.vader | 27 - .../ale/test/test_ale_populate_command.vader | 96 - .../plugged/ale/test/test_ale_toggle.vader | 444 - .../.vim/plugged/ale/test/test_ale_var.vader | 24 - .../ale/test/test_alejobstarted_autocmd.vader | 46 - .../ale/test/test_alelint_autocmd.vader | 40 - .../test_ant_build_classpath_command.vader | 27 - .../ale/test/test_ant_find_project_root.vader | 35 - .../ale/test/test_autocmd_commands.vader | 238 - .../test/test_backwards_compatibility.vader | 19 - .../ale/test/test_balloon_messages.vader | 87 - .../ale/test/test_c_flag_parsing.vader | 689 -- .../test/test_checkingbuffer_autocmd.vader | 57 - .../.vim/plugged/ale/test/test_cleanup.vader | 14 - .../plugged/ale/test/test_code_action.vader | 605 -- .../test/test_code_action_corner_cases.vader | 141 - .../ale/test/test_code_action_python.vader | 59 - .../.vim/plugged/ale/test/test_codefix.vader | 549 -- .../test/test_computed_lint_file_values.vader | 150 - .../test/test_csslint_config_detection.vader | 29 - .../ale/test/test_cursor_warnings.vader | 256 - .../test/test_deferred_command_string.vader | 50 - .../test_deferred_executable_string.vader | 46 - .../test/test_deno_executable_detection.vader | 20 - .../plugged/ale/test/test_disabling_ale.vader | 119 - .../test_dockerfile_hadolint_linter.vader | 90 - .../plugged/ale/test/test_env_function.vader | 8 - ...rrors_removed_after_filetype_changed.vader | 78 - .../ale/test/test_filename_mapping.vader | 62 - .../plugged/ale/test/test_filerename.vader | 224 - .../test/test_filetype_linter_defaults.vader | 137 - .../ale/test/test_filetype_mapping.vader | 29 - .../test/test_find_nearest_directory.vader | 17 - .../ale/test/test_find_references.vader | 480 - .../ale/test/test_floating_preview.vader | 92 - .../ale/test/test_format_command.vader | 186 - .../test_format_temporary_file_creation.vader | 63 - .../ale/test/test_function_arg_count.vader | 45 - .../ale/test/test_fuzzy_json_decode.vader | 29 - .../plugged/ale/test/test_get_abspath.vader | 29 - .../plugged/ale/test/test_get_loclist.vader | 31 - .../plugged/ale/test/test_getmatches.vader | 163 - .../ale/test/test_go_to_definition.vader | 689 -- .../test_gradle_build_classpath_command.vader | 52 - .../test/test_gradle_find_executable.vader | 37 - .../test/test_gradle_find_project_root.vader | 35 - .../.vim/plugged/ale/test/test_helptags.vader | 2 - .../ale/test/test_highlight_placement.vader | 465 - .../test_highlight_position_chunking.vader | 76 - .../ale/test/test_history_saving.vader | 177 - .../.vim/plugged/ale/test/test_hover.vader | 272 - .../plugged/ale/test/test_hover_parsing.vader | 173 - .../ale/test/test_ignoring_linters.vader | 403 - .../plugged/ale/test/test_jq_linter.vader | 18 - .../test_jsonlint_executable_detection.vader | 45 - .../plugged/ale/test/test_line_join.vader | 84 - .../ale/test/test_lint_file_linters.vader | 317 - ...test_lint_on_enter_when_file_changed.vader | 84 - .../test/test_lint_on_filetype_changed.vader | 77 - .../test_linter_defintion_processing.vader | 501 - .../ale/test/test_linter_retrieval.vader | 190 - .../ale/test/test_linter_type_mapping.vader | 120 - .../ale/test/test_linting_blacklist.vader | 16 - .../test/test_linting_updates_loclist.vader | 96 - .../ale/test/test_list_formatting.vader | 188 - .../plugged/ale/test/test_list_opening.vader | 290 - .../plugged/ale/test/test_list_titles.vader | 77 - .../ale/test/test_load_all_linters.vader | 6 - .../ale/test/test_loclist_binary_search.vader | 66 - .../ale/test/test_loclist_corrections.vader | 469 - .../ale/test/test_loclist_jumping.vader | 121 - .../ale/test/test_loclist_sorting.vader | 43 - .../test_maven_build_classpath_command.vader | 53 - .../ale/test/test_maven_find_executable.vader | 46 - .../test/test_maven_find_project_root.vader | 28 - .../ale/test/test_nearest_file_search.vader | 15 - .../ale/test/test_nimlsp_project_root.vader | 19 - .../test/test_no_linting_on_write_quit.vader | 118 - .../ale/test/test_organize_imports.vader | 172 - .../plugged/ale/test/test_other_sources.vader | 153 - .../ale/test/test_parse_command_args.vader | 52 - .../plugged/ale/test/test_path_dirname.vader | 13 - .../plugged/ale/test/test_path_equality.vader | 82 - .../plugged/ale/test/test_path_upwards.vader | 48 - .../.vim/plugged/ale/test/test_path_uri.vader | 73 - .../ale/test/test_pattern_options.vader | 107 - .../ale/test/test_prepare_command.vader | 96 - .../ale/test/test_puppet_path_detection.vader | 22 - .../test/test_python_find_project_root.vader | 11 - .../plugged/ale/test/test_python_pipenv.vader | 19 - .../plugged/ale/test/test_python_poetry.vader | 19 - .../ale/test/test_python_traceback.vader | 79 - .../ale/test/test_python_virtualenv.vader | 12 - .../test/test_quickfix_deduplication.vader | 50 - .../ale/test/test_quitting_variable.vader | 39 - ...redundant_tsserver_rendering_avoided.vader | 178 - .../ale/test/test_regex_escaping.vader | 4 - .../.vim/plugged/ale/test/test_rename.vader | 504 - .../ale/test/test_resolve_local_path.vader | 17 - ...lts_not_cleared_when_opening_loclist.vader | 30 - .../ale/test/test_sandbox_execution.vader | 103 - .../plugged/ale/test/test_semver_utils.vader | 43 - .../ale/test/test_set_list_timers.vader | 29 - ..._setting_loclist_from_another_buffer.vader | 26 - ...g_problems_found_in_previous_buffers.vader | 98 - .../ale/test/test_shell_detection.vader | 177 - .../test_should_do_nothing_conditions.vader | 88 - .../plugged/ale/test/test_sml_command.vader | 45 - .../ale/test/test_socket_connections.vader | 139 - .../plugged/ale/test/test_statusline.vader | 157 - .../test/test_swift_find_project_root.vader | 18 - .../plugged/ale/test/test_symbol_search.vader | 189 - .../test/test_temporary_file_management.vader | 146 - .../ale/test/test_tmpdir_wrapper.vader | 32 - .../test/test_vim8_processid_parsing.vader | 5 - .../ale/test/test_windows_escaping.vader | 42 - .../plugged/ale/test/test_wrap_comand.vader | 48 - .../ale/test/test_writefile_function.vader | 117 - .../test/util/test_cd_string_commands.vader | 20 - .../.vim/plugged/ale/test/v_files/testfile.v | 0 dotfiles/.vim/plugged/ale/test/vimrc | 42 - dotfiles/.vim/plugged/ansible-vim/.gitrepo | 12 - dotfiles/.vim/plugged/ansible-vim/LICENSE | 21 - dotfiles/.vim/plugged/ansible-vim/README.md | 161 - .../plugged/ansible-vim/UltiSnips/.gitignore | 1 - .../plugged/ansible-vim/UltiSnips/README.md | 35 - .../plugged/ansible-vim/UltiSnips/generate.py | 389 - .../plugged/ansible-vim/UltiSnips/generate.sh | 12 - .../plugged/ansible-vim/ftdetect/ansible.vim | 45 - .../plugged/ansible-vim/ftplugin/ansible.vim | 2 - .../ansible-vim/ftplugin/ansible_hosts.vim | 9 - .../plugged/ansible-vim/indent/ansible.vim | 63 - .../plugged/ansible-vim/syntax/ansible.vim | 126 - .../ansible-vim/syntax/ansible_hosts.vim | 31 - .../plugged/ansible-vim/syntax/jinja2.vim | 97 - .../ansible-vim/syntax/jinja2.vim_LICENSE | 31 - dotfiles/.vim/plugged/coc.nvim/.gitignore | 13 - dotfiles/.vim/plugged/coc.nvim/.gitrepo | 12 - dotfiles/.vim/plugged/coc.nvim/LICENSE.md | 7 - dotfiles/.vim/plugged/coc.nvim/Readme.md | 827 -- .../.vim/plugged/coc.nvim/autoload/coc.vim | 183 - .../plugged/coc.nvim/autoload/coc/api.vim | 704 -- .../plugged/coc.nvim/autoload/coc/client.vim | 371 - .../plugged/coc.nvim/autoload/coc/color.vim | 626 -- .../plugged/coc.nvim/autoload/coc/compat.vim | 222 - .../plugged/coc.nvim/autoload/coc/cursor.vim | 59 - .../plugged/coc.nvim/autoload/coc/dialog.vim | 667 -- .../plugged/coc.nvim/autoload/coc/dict.vim | 32 - .../plugged/coc.nvim/autoload/coc/float.vim | 1445 --- .../plugged/coc.nvim/autoload/coc/helper.vim | 148 - .../coc.nvim/autoload/coc/highlight.vim | 802 -- .../plugged/coc.nvim/autoload/coc/list.vim | 312 - .../plugged/coc.nvim/autoload/coc/math.vim | 11 - .../plugged/coc.nvim/autoload/coc/notify.vim | 532 -- .../plugged/coc.nvim/autoload/coc/prompt.vim | 216 - .../plugged/coc.nvim/autoload/coc/pum.vim | 587 -- .../plugged/coc.nvim/autoload/coc/rpc.vim | 131 - .../plugged/coc.nvim/autoload/coc/snippet.vim | 159 - .../plugged/coc.nvim/autoload/coc/string.vim | 195 - .../plugged/coc.nvim/autoload/coc/task.vim | 179 - .../coc.nvim/autoload/coc/terminal.vim | 115 - .../.vim/plugged/coc.nvim/autoload/coc/ui.vim | 473 - .../plugged/coc.nvim/autoload/coc/util.vim | 646 -- .../plugged/coc.nvim/autoload/coc/vtext.vim | 36 - .../plugged/coc.nvim/autoload/coc/window.vim | 210 - .../plugged/coc.nvim/autoload/health/coc.vim | 100 - dotfiles/.vim/plugged/coc.nvim/bin/fuzzy.wasm | Bin 18363 -> 0 bytes dotfiles/.vim/plugged/coc.nvim/bin/prompt.js | 97 - .../.vim/plugged/coc.nvim/bin/strwidth.wasm | Bin 15630 -> 0 bytes .../plugged/coc.nvim/bin/terminateProcess.sh | 12 - dotfiles/.vim/plugged/coc.nvim/build/index.js | 323 - .../.vim/plugged/coc.nvim/data/schema.json | 2153 ----- .../.vim/plugged/coc.nvim/doc/coc-config.txt | 1753 ---- dotfiles/.vim/plugged/coc.nvim/doc/coc.txt | 3984 -------- dotfiles/.vim/plugged/coc.nvim/history.md | 1650 ---- .../plugged/coc.nvim/lua/coc/highlight.lua | 85 - dotfiles/.vim/plugged/coc.nvim/package.json | 17 - dotfiles/.vim/plugged/coc.nvim/plugin/coc.vim | 751 -- .../.vim/plugged/dockerfile.vim/.gitignore | 2 - dotfiles/.vim/plugged/dockerfile.vim/.gitrepo | 12 - dotfiles/.vim/plugged/dockerfile.vim/LICENSE | 20 - dotfiles/.vim/plugged/dockerfile.vim/Makefile | 22 - .../.vim/plugged/dockerfile.vim/README.md | 55 - .../dockerfile.vim/ftdetect/Dockerfile.vim | 13 - .../ftdetect/docker-compose.vim | 4 - .../dockerfile.vim/ftplugin/Dockerfile.vim | 33 - .../ftplugin/docker-compose.vim | 5 - .../dockerfile.vim/indent/Dockerfile.vim | 23 - .../snippets/Dockerfile.snippets | 67 - .../snippets/docker-compose.snippets | 166 - .../dockerfile.vim/syntax/Dockerfile.vim | 59 - .../dockerfile.vim/syntax/docker-compose.vim | 80 - .../dockerfile.vim/vim-dockerfile-example.png | Bin 57722 -> 0 bytes .../plugged/editorconfig-vim/.appveyor.yml | 107 - .../plugged/editorconfig-vim/.editorconfig | 27 - .../.vim/plugged/editorconfig-vim/.gitignore | 8 - .../.vim/plugged/editorconfig-vim/.gitmodules | 6 - .../.vim/plugged/editorconfig-vim/.gitrepo | 12 - .../.vim/plugged/editorconfig-vim/.travis.yml | 30 - .../plugged/editorconfig-vim/CONTRIBUTORS | 6 - .../.vim/plugged/editorconfig-vim/LICENSE | 26 - .../.vim/plugged/editorconfig-vim/LICENSE.PSF | 53 - .../.vim/plugged/editorconfig-vim/README.md | 148 - .../autoload/editorconfig.vim | 60 - .../autoload/editorconfig_core.vim | 147 - .../autoload/editorconfig_core/fnmatch.vim | 465 - .../autoload/editorconfig_core/handler.vim | 183 - .../autoload/editorconfig_core/ini.vim | 273 - .../autoload/editorconfig_core/util.vim | 84 - .../editorconfig-vim/doc/editorconfig.txt | 203 - .../.vim/plugged/editorconfig-vim/mkzip.sh | 3 - .../editorconfig-vim/plugin/editorconfig.vim | 521 -- .../tests/core/CMakeLists.txt | 53 - .../tests/core/CTestCustom.cmake | 34 - .../editorconfig-vim/tests/core/ecvbslib.vbs | 171 - .../editorconfig-vim/tests/core/ecvimlib.ps1 | 140 - .../editorconfig-vim/tests/core/editorconfig | 219 - .../tests/core/editorconfig.bat | 11 - .../tests/core/editorconfig1.vbs | 39 - .../tests/core/editorconfig2.ps1 | 218 - .../editorconfig-vim/tests/fetch-vim.bat | 12 - .../editorconfig-vim/tests/fetch-vim.sh | 41 - .../editorconfig-vim/tests/plugin/.gitignore | 2 - .../editorconfig-vim/tests/plugin/Gemfile | 5 - .../tests/plugin/Gemfile.lock | 27 - .../editorconfig-vim/tests/plugin/Rakefile | 8 - .../tests/plugin/spec/.editorconfig | 4 - .../tests/plugin/spec/editorconfig_spec.rb | 162 - .../editorconfig-vim/tests/travis-test.sh | 56 - dotfiles/.vim/plugged/fzf.vim/.gitattributes | 1 - .../.vim/plugged/fzf.vim/.github/FUNDING.yml | 1 - .../plugged/fzf.vim/.github/ISSUE_TEMPLATE.md | 25 - dotfiles/.vim/plugged/fzf.vim/.gitignore | 1 - dotfiles/.vim/plugged/fzf.vim/.gitrepo | 12 - dotfiles/.vim/plugged/fzf.vim/LICENSE | 21 - dotfiles/.vim/plugged/fzf.vim/README.md | 431 - .../.vim/plugged/fzf.vim/autoload/fzf/vim.vim | 1455 --- .../fzf.vim/autoload/fzf/vim/complete.vim | 164 - dotfiles/.vim/plugged/fzf.vim/bin/preview.rb | 3 - dotfiles/.vim/plugged/fzf.vim/bin/preview.sh | 83 - .../.vim/plugged/fzf.vim/bin/tagpreview.sh | 73 - dotfiles/.vim/plugged/fzf.vim/bin/tags.pl | 15 - dotfiles/.vim/plugged/fzf.vim/doc/fzf-vim.txt | 497 - dotfiles/.vim/plugged/fzf.vim/plugin/fzf.vim | 154 - dotfiles/.vim/plugged/fzf/.github/FUNDING.yml | 1 - .../plugged/fzf/.github/ISSUE_TEMPLATE.md | 22 - .../.vim/plugged/fzf/.github/dependabot.yml | 10 - .../fzf/.github/workflows/codeql-analysis.yml | 44 - .../plugged/fzf/.github/workflows/linux.yml | 45 - .../plugged/fzf/.github/workflows/macos.yml | 45 - dotfiles/.vim/plugged/fzf/.gitignore | 14 - dotfiles/.vim/plugged/fzf/.gitrepo | 12 - dotfiles/.vim/plugged/fzf/.goreleaser.yml | 123 - dotfiles/.vim/plugged/fzf/.rubocop.yml | 28 - dotfiles/.vim/plugged/fzf/.tool-versions | 1 - dotfiles/.vim/plugged/fzf/ADVANCED.md | 609 -- dotfiles/.vim/plugged/fzf/BUILD.md | 49 - dotfiles/.vim/plugged/fzf/CHANGELOG.md | 1345 --- dotfiles/.vim/plugged/fzf/Dockerfile | 11 - dotfiles/.vim/plugged/fzf/LICENSE | 21 - dotfiles/.vim/plugged/fzf/Makefile | 173 - dotfiles/.vim/plugged/fzf/README-VIM.md | 486 - dotfiles/.vim/plugged/fzf/README.md | 711 -- dotfiles/.vim/plugged/fzf/bin/fzf-tmux | 229 - dotfiles/.vim/plugged/fzf/doc/fzf.txt | 512 - dotfiles/.vim/plugged/fzf/go.mod | 21 - dotfiles/.vim/plugged/fzf/go.sum | 32 - dotfiles/.vim/plugged/fzf/install | 377 - dotfiles/.vim/plugged/fzf/install.ps1 | 65 - dotfiles/.vim/plugged/fzf/main.go | 14 - dotfiles/.vim/plugged/fzf/man/man1/fzf-tmux.1 | 68 - dotfiles/.vim/plugged/fzf/man/man1/fzf.1 | 1042 --- dotfiles/.vim/plugged/fzf/plugin/fzf.vim | 1060 --- .../.vim/plugged/fzf/shell/completion.bash | 381 - .../.vim/plugged/fzf/shell/completion.zsh | 324 - .../.vim/plugged/fzf/shell/key-bindings.bash | 102 - .../.vim/plugged/fzf/shell/key-bindings.fish | 172 - .../.vim/plugged/fzf/shell/key-bindings.zsh | 120 - dotfiles/.vim/plugged/fzf/src/LICENSE | 21 - dotfiles/.vim/plugged/fzf/src/algo/algo.go | 946 -- .../.vim/plugged/fzf/src/algo/algo_test.go | 198 - .../.vim/plugged/fzf/src/algo/normalize.go | 492 - dotfiles/.vim/plugged/fzf/src/ansi.go | 433 - dotfiles/.vim/plugged/fzf/src/ansi_test.go | 428 - dotfiles/.vim/plugged/fzf/src/cache.go | 81 - dotfiles/.vim/plugged/fzf/src/cache_test.go | 39 - dotfiles/.vim/plugged/fzf/src/chunklist.go | 89 - .../.vim/plugged/fzf/src/chunklist_test.go | 80 - dotfiles/.vim/plugged/fzf/src/constants.go | 85 - dotfiles/.vim/plugged/fzf/src/core.go | 354 - dotfiles/.vim/plugged/fzf/src/history.go | 96 - dotfiles/.vim/plugged/fzf/src/history_test.go | 68 - dotfiles/.vim/plugged/fzf/src/item.go | 44 - dotfiles/.vim/plugged/fzf/src/item_test.go | 23 - dotfiles/.vim/plugged/fzf/src/matcher.go | 235 - dotfiles/.vim/plugged/fzf/src/merger.go | 120 - dotfiles/.vim/plugged/fzf/src/merger_test.go | 88 - dotfiles/.vim/plugged/fzf/src/options.go | 1845 ---- dotfiles/.vim/plugged/fzf/src/options_test.go | 468 - dotfiles/.vim/plugged/fzf/src/pattern.go | 427 - dotfiles/.vim/plugged/fzf/src/pattern_test.go | 209 - .../plugged/fzf/src/protector/protector.go | 8 - .../fzf/src/protector/protector_openbsd.go | 10 - dotfiles/.vim/plugged/fzf/src/reader.go | 201 - dotfiles/.vim/plugged/fzf/src/reader_test.go | 63 - dotfiles/.vim/plugged/fzf/src/result.go | 258 - .../.vim/plugged/fzf/src/result_others.go | 16 - dotfiles/.vim/plugged/fzf/src/result_test.go | 174 - dotfiles/.vim/plugged/fzf/src/result_x86.go | 16 - dotfiles/.vim/plugged/fzf/src/terminal.go | 3008 ------ .../.vim/plugged/fzf/src/terminal_test.go | 638 -- .../.vim/plugged/fzf/src/terminal_unix.go | 26 - .../.vim/plugged/fzf/src/terminal_windows.go | 45 - dotfiles/.vim/plugged/fzf/src/tokenizer.go | 253 - .../.vim/plugged/fzf/src/tokenizer_test.go | 112 - dotfiles/.vim/plugged/fzf/src/tui/dummy.go | 46 - dotfiles/.vim/plugged/fzf/src/tui/light.go | 1026 -- .../.vim/plugged/fzf/src/tui/light_unix.go | 110 - .../.vim/plugged/fzf/src/tui/light_windows.go | 145 - dotfiles/.vim/plugged/fzf/src/tui/tcell.go | 738 -- .../.vim/plugged/fzf/src/tui/tcell_test.go | 392 - .../.vim/plugged/fzf/src/tui/ttyname_unix.go | 47 - .../plugged/fzf/src/tui/ttyname_windows.go | 14 - dotfiles/.vim/plugged/fzf/src/tui/tui.go | 626 -- dotfiles/.vim/plugged/fzf/src/tui/tui_test.go | 20 - .../.vim/plugged/fzf/src/util/atomicbool.go | 34 - .../plugged/fzf/src/util/atomicbool_test.go | 17 - dotfiles/.vim/plugged/fzf/src/util/chars.go | 198 - .../.vim/plugged/fzf/src/util/chars_test.go | 46 - .../.vim/plugged/fzf/src/util/eventbox.go | 96 - .../plugged/fzf/src/util/eventbox_test.go | 61 - dotfiles/.vim/plugged/fzf/src/util/slab.go | 12 - dotfiles/.vim/plugged/fzf/src/util/util.go | 155 - .../.vim/plugged/fzf/src/util/util_test.go | 66 - .../.vim/plugged/fzf/src/util/util_unix.go | 47 - .../.vim/plugged/fzf/src/util/util_windows.go | 83 - dotfiles/.vim/plugged/fzf/test/fzf.vader | 175 - dotfiles/.vim/plugged/fzf/test/test_go.rb | 2817 ------ dotfiles/.vim/plugged/fzf/uninstall | 113 - .../lightline.vim/.github/workflows/ci.yaml | 39 - .../.vim/plugged/lightline.vim/.gitignore | 1 - dotfiles/.vim/plugged/lightline.vim/.gitrepo | 12 - dotfiles/.vim/plugged/lightline.vim/LICENSE | 21 - dotfiles/.vim/plugged/lightline.vim/README.md | 433 - .../lightline.vim/autoload/lightline.vim | 485 - .../autoload/lightline/colorscheme.vim | 257 - .../lightline/colorscheme/16color.vim | 53 - .../lightline/colorscheme/OldHope.vim | 44 - .../lightline/colorscheme/PaperColor.vim | 12 - .../lightline/colorscheme/PaperColor_dark.vim | 60 - .../colorscheme/PaperColor_light.vim | 55 - .../lightline/colorscheme/Tomorrow.vim | 42 - .../lightline/colorscheme/Tomorrow_Night.vim | 42 - .../colorscheme/Tomorrow_Night_Blue.vim | 43 - .../colorscheme/Tomorrow_Night_Bright.vim | 43 - .../colorscheme/Tomorrow_Night_Eighties.vim | 43 - .../lightline/colorscheme/apprentice.vim | 46 - .../lightline/colorscheme/ayu_dark.vim | 42 - .../lightline/colorscheme/ayu_light.vim | 42 - .../lightline/colorscheme/ayu_mirage.vim | 42 - .../lightline/colorscheme/darcula.vim | 37 - .../lightline/colorscheme/default.vim | 8 - .../autoload/lightline/colorscheme/deus.vim | 39 - .../lightline/colorscheme/jellybeans.vim | 41 - .../lightline/colorscheme/landscape.vim | 25 - .../lightline/colorscheme/materia.vim | 63 - .../lightline/colorscheme/material.vim | 63 - .../lightline/colorscheme/molokai.vim | 35 - .../autoload/lightline/colorscheme/nord.vim | 46 - .../autoload/lightline/colorscheme/one.vim | 60 - .../lightline/colorscheme/powerline.vim | 28 - .../lightline/colorscheme/powerlineish.vim | 28 - .../lightline/colorscheme/rosepine.vim | 58 - .../lightline/colorscheme/selenized_black.vim | 49 - .../lightline/colorscheme/selenized_dark.vim | 49 - .../lightline/colorscheme/selenized_light.vim | 49 - .../lightline/colorscheme/selenized_white.vim | 49 - .../lightline/colorscheme/seoul256.vim | 43 - .../lightline/colorscheme/simpleblack.vim | 43 - .../lightline/colorscheme/solarized.vim | 80 - .../lightline/colorscheme/srcery_drk.vim | 45 - .../autoload/lightline/colorscheme/wombat.vim | 42 - .../autoload/lightline/colortable.vim | 52 - .../lightline.vim/autoload/lightline/tab.vim | 33 - .../.vim/plugged/lightline.vim/colorscheme.md | 153 - .../plugged/lightline.vim/doc/lightline.txt | 1145 --- .../lightline.vim/plugin/lightline.vim | 33 - .../.vim/plugged/lightline.vim/test/.themisrc | 24 - .../plugged/lightline.vim/test/autocmd.vim | 23 - .../lightline.vim/test/concatenate.vim | 90 - .../.vim/plugged/lightline.vim/test/error.vim | 15 - .../plugged/lightline.vim/test/expand.vim | 667 -- .../plugged/lightline.vim/test/highlight.vim | 171 - .../.vim/plugged/lightline.vim/test/link.vim | 157 - .../.vim/plugged/lightline.vim/test/mode.vim | 14 - .../plugged/lightline.vim/test/onetab.vim | 98 - .../.vim/plugged/lightline.vim/test/popup.vim | 19 - .../plugged/lightline.vim/test/quickfix.vim | 25 - .../lightline.vim/test/subseparator.vim | 407 - .../plugged/lightline.vim/test/tabline.vim | 67 - .../.vim/plugged/lightline.vim/test/tabs.vim | 99 - .../plugged/lightline.vim/test/toggle.vim | 51 - .../.vim/plugged/lightline.vim/test/uniq.vim | 46 - .../nerdtree/.github/ISSUE_TEMPLATE/bug.md | 46 - .../.github/ISSUE_TEMPLATE/feature_request.md | 8 - .../.github/ISSUE_TEMPLATE/question.md | 13 - .../nerdtree/.github/PULL_REQUEST_TEMPLATE.md | 22 - .../nerdtree/.github/workflows/vint.yml | 15 - dotfiles/.vim/plugged/nerdtree/.gitignore | 3 - dotfiles/.vim/plugged/nerdtree/.gitrepo | 12 - dotfiles/.vim/plugged/nerdtree/.vintrc.yaml | 5 - dotfiles/.vim/plugged/nerdtree/CHANGELOG.md | 307 - dotfiles/.vim/plugged/nerdtree/LICENCE | 13 - .../.vim/plugged/nerdtree/README.markdown | 227 - dotfiles/.vim/plugged/nerdtree/_config.yml | 1 - .../plugged/nerdtree/autoload/nerdtree.vim | 249 - .../nerdtree/autoload/nerdtree/ui_glue.vim | 732 -- .../.vim/plugged/nerdtree/doc/NERDTree.txt | 1534 --- .../nerdtree/lib/nerdtree/bookmark.vim | 365 - .../plugged/nerdtree/lib/nerdtree/creator.vim | 402 - .../plugged/nerdtree/lib/nerdtree/event.vim | 13 - .../nerdtree/lib/nerdtree/flag_set.vim | 58 - .../plugged/nerdtree/lib/nerdtree/key_map.vim | 164 - .../nerdtree/lib/nerdtree/menu_controller.vim | 211 - .../nerdtree/lib/nerdtree/menu_item.vim | 118 - .../nerdtree/lib/nerdtree/nerdtree.vim | 209 - .../nerdtree/lib/nerdtree/notifier.vim | 35 - .../plugged/nerdtree/lib/nerdtree/opener.vim | 326 - .../plugged/nerdtree/lib/nerdtree/path.vim | 852 -- .../nerdtree/lib/nerdtree/tree_dir_node.vim | 706 -- .../nerdtree/lib/nerdtree/tree_file_node.vim | 349 - .../.vim/plugged/nerdtree/lib/nerdtree/ui.vim | 532 -- .../nerdtree_plugin/exec_menuitem.vim | 40 - .../nerdtree/nerdtree_plugin/fs_menu.vim | 484 - .../plugged/nerdtree/nerdtree_plugin/vcs.vim | 47 - .../plugged/nerdtree/plugin/NERD_tree.vim | 234 - dotfiles/.vim/plugged/nerdtree/screenshot.png | Bin 87896 -> 0 bytes .../.vim/plugged/nerdtree/syntax/nerdtree.vim | 97 - dotfiles/.vim/plugged/php.vim/.gitrepo | 12 - dotfiles/.vim/plugged/php.vim/README.md | 143 - .../plugged/php.vim/attic/0-bootstrap.inc.php | 6 - .../.vim/plugged/php.vim/attic/10-collect.php | 52 - .../plugged/php.vim/attic/20-generate.php | 103 - .../.vim/plugged/php.vim/attic/30-update.php | 71 - .../.vim/plugged/php.vim/attic/Dockerfile | 154 - .../.vim/plugged/php.vim/attic/syntax.ini | 83 - dotfiles/.vim/plugged/php.vim/attic/update.sh | 13 - dotfiles/.vim/plugged/php.vim/syntax/php.vim | 1048 --- dotfiles/.vim/plugged/python-syntax/.gitrepo | 12 - .../.vim/plugged/python-syntax/CHANGES.txt | 224 - dotfiles/.vim/plugged/python-syntax/LICENSE | 21 - .../.vim/plugged/python-syntax/README.rst | 147 - dotfiles/.vim/plugged/python-syntax/TODO.txt | 26 - .../folding-ideas/python.vim.1.13 | 237 - .../folding-ideas/python.vim.1.14 | 236 - .../.vim/plugged/python-syntax/syntax.txt | 65 - .../plugged/python-syntax/syntax/python.vim | 568 -- dotfiles/.vim/plugged/python-syntax/test.py | 143 - dotfiles/.vim/plugged/syntastic/.gitignore | 4 - dotfiles/.vim/plugged/syntastic/.gitrepo | 12 - .../.vim/plugged/syntastic/CONTRIBUTING.md | 119 - dotfiles/.vim/plugged/syntastic/LICENCE | 13 - .../.vim/plugged/syntastic/README.markdown | 575 -- .../syntastic/_assets/screenshot_1.png | Bin 92425 -> 0 bytes .../syntastic/autoload/syntastic/c.vim | 341 - .../syntastic/autoload/syntastic/log.vim | 222 - .../autoload/syntastic/postprocess.vim | 84 - .../autoload/syntastic/preprocess.vim | 809 -- .../syntastic/autoload/syntastic/util.vim | 640 -- .../syntastic/doc/syntastic-checkers.txt | 8258 ----------------- .../.vim/plugged/syntastic/doc/syntastic.txt | 1214 --- .../plugged/syntastic/plugin/syntastic.vim | 798 -- .../plugin/syntastic/autoloclist.vim | 55 - .../syntastic/plugin/syntastic/balloons.vim | 58 - .../syntastic/plugin/syntastic/checker.vim | 282 - .../syntastic/plugin/syntastic/cursor.vim | 138 - .../plugin/syntastic/highlighting.vim | 104 - .../syntastic/plugin/syntastic/loclist.vim | 445 - .../syntastic/plugin/syntastic/modemap.vim | 118 - .../syntastic/plugin/syntastic/notifiers.vim | 86 - .../syntastic/plugin/syntastic/registry.vim | 444 - .../syntastic/plugin/syntastic/signs.vim | 138 - .../syntax_checkers/actionscript/mxmlc.vim | 67 - .../syntastic/syntax_checkers/ada/gcc.vim | 47 - .../syntax_checkers/ansible/ansible_lint.vim | 57 - .../syntax_checkers/apiblueprint/drafter.vim | 66 - .../applescript/osacompile.vim | 49 - .../syntax_checkers/asciidoc/asciidoc.vim | 47 - .../syntax_checkers/asciidoc/proselint.vim | 23 - .../syntastic/syntax_checkers/asl/iasl.vim | 59 - .../syntastic/syntax_checkers/asm/gcc.vim | 62 - .../syntax_checkers/bemhtml/bemhtmllint.vim | 35 - .../syntastic/syntax_checkers/bro/bro.vim | 58 - .../syntastic/syntax_checkers/c/avrgcc.vim | 57 - .../syntax_checkers/c/checkpatch.vim | 61 - .../syntax_checkers/c/clang_check.vim | 62 - .../syntax_checkers/c/clang_tidy.vim | 62 - .../syntastic/syntax_checkers/c/cppcheck.vim | 67 - .../syntastic/syntax_checkers/c/cppclean.vim | 40 - .../syntax_checkers/c/flawfinder.vim | 61 - .../syntastic/syntax_checkers/c/gcc.vim | 59 - .../syntastic/syntax_checkers/c/make.vim | 61 - .../syntastic/syntax_checkers/c/oclint.vim | 63 - .../syntastic/syntax_checkers/c/pc_lint.vim | 63 - .../syntastic/syntax_checkers/c/sparse.vim | 46 - .../syntastic/syntax_checkers/c/splint.vim | 53 - .../syntastic/syntax_checkers/cabal/cabal.vim | 56 - .../syntax_checkers/chef/foodcritic.vim | 39 - .../syntax_checkers/cmake/cmakelint.vim | 40 - .../syntastic/syntax_checkers/co/coco.vim | 47 - .../syntastic/syntax_checkers/cobol/cobc.vim | 47 - .../syntax_checkers/coffee/coffee.vim | 58 - .../syntax_checkers/coffee/coffee_jshint.vim | 44 - .../syntax_checkers/coffee/coffeelint.vim | 44 - .../syntastic/syntax_checkers/coq/coqtop.vim | 40 - .../syntastic/syntax_checkers/cpp/avrgcc.vim | 24 - .../syntax_checkers/cpp/clang_check.vim | 22 - .../syntax_checkers/cpp/clang_tidy.vim | 22 - .../syntax_checkers/cpp/cppcheck.vim | 22 - .../syntax_checkers/cpp/cppclean.vim | 22 - .../syntastic/syntax_checkers/cpp/cpplint.vim | 52 - .../syntax_checkers/cpp/flawfinder.vim | 26 - .../syntastic/syntax_checkers/cpp/gcc.vim | 56 - .../syntastic/syntax_checkers/cpp/oclint.vim | 22 - .../syntastic/syntax_checkers/cpp/pc_lint.vim | 23 - .../syntastic/syntax_checkers/cpp/verapp.vim | 46 - .../syntastic/syntax_checkers/cs/mcs.vim | 39 - .../syntastic/syntax_checkers/css/csslint.vim | 48 - .../syntax_checkers/css/mixedindentlint.vim | 22 - .../syntastic/syntax_checkers/css/phpcs.vim | 23 - .../syntax_checkers/css/prettycss.vim | 61 - .../syntastic/syntax_checkers/css/recess.vim | 24 - .../syntax_checkers/css/stylelint.vim | 48 - .../syntax_checkers/cucumber/cucumber.vim | 42 - .../syntastic/syntax_checkers/cuda/nvcc.vim | 89 - .../syntastic/syntax_checkers/d/dmd.vim | 133 - .../syntastic/syntax_checkers/d/dscanner.vim | 48 - .../syntax_checkers/dart/dartanalyzer.vim | 79 - .../syntastic/syntax_checkers/docbk/igor.vim | 55 - .../syntax_checkers/docbk/xmllint.vim | 23 - .../dockerfile/dockerfile_lint.vim | 53 - .../syntax_checkers/dockerfile/hadolint.vim | 41 - .../syntax_checkers/dustjs/swiffer.vim | 38 - .../syntax_checkers/elixir/elixir.vim | 57 - .../erlang/erlang_check_file.erl | 307 - .../syntax_checkers/erlang/escript.vim | 65 - .../syntax_checkers/erlang/syntaxerl.vim | 42 - .../syntastic/syntax_checkers/eruby/ruby.vim | 85 - .../syntax_checkers/fortran/gfortran.vim | 99 - .../syntastic/syntax_checkers/glsl/cgc.vim | 66 - .../syntastic/syntax_checkers/go/go.vim | 104 - .../syntastic/syntax_checkers/go/gofmt.vim | 45 - .../syntax_checkers/go/golangci_lint.vim | 49 - .../syntastic/syntax_checkers/go/golint.vim | 42 - .../syntax_checkers/go/gometalinter.vim | 54 - .../syntastic/syntax_checkers/go/gotype.vim | 65 - .../syntastic/syntax_checkers/go/govet.vim | 51 - .../syntastic/syntax_checkers/haml/haml.vim | 46 - .../syntax_checkers/haml/haml_lint.vim | 37 - .../syntax_checkers/handlebars/handlebars.vim | 43 - .../syntax_checkers/haskell/hdevtools.vim | 57 - .../syntax_checkers/haskell/hlint.vim | 56 - .../syntax_checkers/haskell/scan.vim | 43 - .../syntastic/syntax_checkers/haxe/haxe.vim | 64 - .../syntax_checkers/help/proselint.vim | 23 - .../syntastic/syntax_checkers/hss/hss.vim | 38 - .../syntastic/syntax_checkers/html/eslint.vim | 23 - .../syntax_checkers/html/gjslint.vim | 23 - .../syntax_checkers/html/htmlhint.vim | 46 - .../syntastic/syntax_checkers/html/jshint.vim | 50 - .../syntax_checkers/html/proselint.vim | 23 - .../syntax_checkers/html/stylelint.vim | 25 - .../syntax_checkers/html/textlint.vim | 23 - .../syntastic/syntax_checkers/html/tidy.vim | 212 - .../syntax_checkers/html/validator.vim | 94 - .../syntastic/syntax_checkers/html/w3.vim | 91 - .../syntax_checkers/jade/jade_lint.vim | 24 - .../syntax_checkers/java/checkstyle.vim | 87 - .../syntastic/syntax_checkers/java/javac.vim | 428 - .../javascript/closurecompiler.vim | 77 - .../syntax_checkers/javascript/eslint.vim | 78 - .../syntax_checkers/javascript/flow.vim | 68 - .../syntax_checkers/javascript/gjslint.vim | 46 - .../syntax_checkers/javascript/jscs.vim | 53 - .../syntax_checkers/javascript/jshint.vim | 60 - .../syntax_checkers/javascript/jsl.vim | 48 - .../syntax_checkers/javascript/jslint.vim | 51 - .../syntax_checkers/javascript/jsxhint.vim | 56 - .../syntax_checkers/javascript/lynt.vim | 49 - .../javascript/mixedindentlint.vim | 40 - .../syntax_checkers/javascript/standard.vim | 55 - .../syntax_checkers/javascript/tern_lint.vim | 53 - .../syntax_checkers/json/jsonlint.vim | 43 - .../syntax_checkers/json/jsonval.vim | 41 - .../syntax_checkers/less/less-lint.coffee | 41 - .../syntax_checkers/less/less-lint.js | 57 - .../syntastic/syntax_checkers/less/lessc.vim | 59 - .../syntastic/syntax_checkers/less/recess.vim | 44 - .../syntastic/syntax_checkers/lex/flex.vim | 50 - .../syntastic/syntax_checkers/limbo/limbo.vim | 47 - .../syntastic/syntax_checkers/lisp/clisp.vim | 57 - .../syntastic/syntax_checkers/llvm/llvm.vim | 39 - .../syntastic/syntax_checkers/lua/luac.vim | 65 - .../syntax_checkers/lua/luacheck.vim | 67 - .../syntax_checkers/markdown/mdl.vim | 47 - .../syntax_checkers/markdown/proselint.vim | 23 - .../syntax_checkers/markdown/remark_lint.vim | 54 - .../syntax_checkers/markdown/textlint.vim | 23 - .../syntax_checkers/matlab/mlint.vim | 41 - .../syntastic/syntax_checkers/mercury/mmc.vim | 49 - .../syntastic/syntax_checkers/nasm/nasm.vim | 42 - .../syntastic/syntax_checkers/nix/nix.vim | 45 - .../syntastic/syntax_checkers/nroff/igor.vim | 23 - .../syntax_checkers/nroff/mandoc.vim | 41 - .../syntax_checkers/nroff/proselint.vim | 23 - .../syntastic/syntax_checkers/objc/gcc.vim | 59 - .../syntastic/syntax_checkers/objc/oclint.vim | 22 - .../syntastic/syntax_checkers/objcpp/gcc.vim | 59 - .../syntax_checkers/objcpp/oclint.vim | 22 - .../syntax_checkers/ocaml/camlp4o.vim | 132 - .../syntastic/syntax_checkers/perl/perl.vim | 95 - .../syntax_checkers/perl/perlcritic.vim | 52 - .../syntax_checkers/perl/podchecker.vim | 23 - .../syntastic/syntax_checkers/perl6/perl6.vim | 25 - .../syntastic/syntax_checkers/php/php.vim | 52 - .../syntastic/syntax_checkers/php/phpcs.vim | 41 - .../syntastic/syntax_checkers/php/phplint.vim | 91 - .../syntastic/syntax_checkers/php/phpmd.vim | 77 - .../syntastic/syntax_checkers/php/phpstan.vim | 49 - .../syntastic/syntax_checkers/po/dennis.vim | 43 - .../syntastic/syntax_checkers/po/msgfmt.vim | 50 - .../syntax_checkers/pod/podchecker.vim | 51 - .../syntax_checkers/pod/proselint.vim | 23 - .../syntax_checkers/pug/pug_lint.vim | 40 - .../syntax_checkers/puppet/puppet.vim | 48 - .../syntax_checkers/puppet/puppetlint.vim | 52 - .../syntax_checkers/python/bandit.vim | 54 - .../syntastic/syntax_checkers/python/codec.py | 31 - .../syntax_checkers/python/compile.py | 13 - .../syntax_checkers/python/flake8.vim | 71 - .../syntax_checkers/python/frosted.vim | 63 - .../syntastic/syntax_checkers/python/mypy.vim | 46 - .../syntax_checkers/python/pep257.vim | 23 - .../syntastic/syntax_checkers/python/pep8.vim | 23 - .../syntax_checkers/python/prospector.vim | 73 - .../syntax_checkers/python/py3kwarn.vim | 36 - .../syntax_checkers/python/pycodestyle.vim | 48 - .../syntax_checkers/python/pydocstyle.vim | 66 - .../syntax_checkers/python/pyflakes.vim | 74 - .../syntax_checkers/python/pylama.vim | 79 - .../syntax_checkers/python/pylint.vim | 98 - .../syntax_checkers/python/python.vim | 57 - .../syntastic/syntax_checkers/qml/qmllint.vim | 39 - .../syntastic/syntax_checkers/r/lint.vim | 84 - .../syntastic/syntax_checkers/r/lintr.vim | 83 - .../syntastic/syntax_checkers/r/svtools.vim | 76 - .../syntax_checkers/racket/code-ayatollah.vim | 62 - .../syntax_checkers/racket/racket.vim | 51 - .../syntastic/syntax_checkers/raku/raku.vim | 106 - .../syntastic/syntax_checkers/rmd/lintr.vim | 23 - .../syntastic/syntax_checkers/rnc/rnv.vim | 38 - .../syntax_checkers/rst/proselint.vim | 23 - .../syntax_checkers/rst/rst2pseudoxml.vim | 65 - .../syntax_checkers/rst/rstcheck.vim | 50 - .../syntastic/syntax_checkers/rst/sphinx.vim | 81 - .../syntastic/syntax_checkers/ruby/flog.vim | 72 - .../syntastic/syntax_checkers/ruby/jruby.vim | 50 - .../syntax_checkers/ruby/macruby.vim | 49 - .../syntastic/syntax_checkers/ruby/mri.vim | 82 - .../syntastic/syntax_checkers/ruby/reek.vim | 56 - .../syntax_checkers/ruby/rubocop.vim | 57 - .../syntax_checkers/ruby/rubylint.vim | 45 - .../syntastic/syntax_checkers/ruby/sorbet.vim | 48 - .../syntastic/syntax_checkers/sass/sass.vim | 85 - .../syntax_checkers/sass/sass_lint.vim | 51 - .../syntastic/syntax_checkers/sass/sassc.vim | 38 - .../syntastic/syntax_checkers/scala/fsc.vim | 50 - .../syntax_checkers/scala/scalac.vim | 44 - .../syntax_checkers/scala/scalastyle.vim | 77 - .../syntax_checkers/scss/mixedindentlint.vim | 22 - .../syntastic/syntax_checkers/scss/sass.vim | 23 - .../syntax_checkers/scss/sass_lint.vim | 23 - .../syntastic/syntax_checkers/scss/sassc.vim | 23 - .../syntax_checkers/scss/scss_lint.vim | 64 - .../syntastic/syntax_checkers/sh/bashate.vim | 50 - .../syntax_checkers/sh/checkbashisms.vim | 42 - .../syntastic/syntax_checkers/sh/sh.vim | 99 - .../syntax_checkers/sh/shellcheck.vim | 67 - .../syntastic/syntax_checkers/sh/shfmt.vim | 40 - .../syntax_checkers/slim/slim_lint.vim | 39 - .../syntastic/syntax_checkers/slim/slimrb.vim | 55 - .../syntastic/syntax_checkers/sml/smlnj.vim | 47 - .../syntax_checkers/solidity/solc.vim | 40 - .../syntax_checkers/solidity/solhint.vim | 43 - .../syntax_checkers/solidity/solium.vim | 43 - .../syntax_checkers/spec/rpmlint.vim | 43 - .../syntastic/syntax_checkers/sql/sqlint.vim | 50 - .../syntax_checkers/sql/tsqllint.vim | 43 - .../syntax_checkers/stylus/stylint.vim | 55 - .../syntax_checkers/svg/validator.vim | 23 - .../syntastic/syntax_checkers/svg/w3.vim | 23 - .../syntax_checkers/tcl/nagelfar.vim | 44 - .../syntastic/syntax_checkers/tex/chktex.vim | 58 - .../syntastic/syntax_checkers/tex/lacheck.vim | 40 - .../syntax_checkers/tex/proselint.vim | 23 - .../syntax_checkers/texinfo/makeinfo.vim | 47 - .../syntax_checkers/texinfo/proselint.vim | 23 - .../syntax_checkers/text/atdtool.vim | 61 - .../syntastic/syntax_checkers/text/igor.vim | 23 - .../syntax_checkers/text/language_check.vim | 37 - .../syntax_checkers/text/proselint.vim | 45 - .../syntax_checkers/text/textlint.vim | 42 - .../syntastic/syntax_checkers/trig/rapper.vim | 23 - .../syntax_checkers/turtle/rapper.vim | 46 - .../syntastic/syntax_checkers/turtle/ttl.vim | 43 - .../syntastic/syntax_checkers/twig/twigcs.vim | 41 - .../syntax_checkers/twig/twiglint.vim | 41 - .../syntax_checkers/typescript/eslint.vim | 23 - .../syntax_checkers/typescript/lynt.vim | 23 - .../syntax_checkers/typescript/tslint.vim | 53 - .../syntax_checkers/verilog/iverilog.vim | 38 - .../syntax_checkers/verilog/verilator.vim | 44 - .../syntastic/syntax_checkers/vhdl/ghdl.vim | 38 - .../syntastic/syntax_checkers/vhdl/vcom.vim | 55 - .../syntastic/syntax_checkers/vim/vimlint.vim | 113 - .../syntastic/syntax_checkers/vim/vint.vim | 55 - .../syntastic/syntax_checkers/vue/eslint.vim | 23 - .../syntax_checkers/vue/pug_lint_vue.vim | 42 - .../syntax_checkers/vue/stylelint.vim | 24 - .../syntax_checkers/xhtml/jshint.vim | 23 - .../syntax_checkers/xhtml/proselint.vim | 23 - .../syntastic/syntax_checkers/xhtml/tidy.vim | 92 - .../syntax_checkers/xhtml/validator.vim | 23 - .../syntastic/syntax_checkers/xhtml/w3.vim | 23 - .../syntastic/syntax_checkers/xml/plutil.vim | 42 - .../syntastic/syntax_checkers/xml/xmllint.vim | 54 - .../syntax_checkers/xquery/basex.vim | 52 - .../syntax_checkers/xslt/xmllint.vim | 23 - .../syntastic/syntax_checkers/yacc/bison.vim | 55 - .../syntastic/syntax_checkers/yaml/jsyaml.vim | 48 - .../syntax_checkers/yaml/yamllint.vim | 52 - .../syntastic/syntax_checkers/yaml/yamlxs.vim | 74 - .../syntastic/syntax_checkers/yang/pyang.vim | 46 - .../syntastic/syntax_checkers/yara/yara.vim | 41 - .../syntax_checkers/z80/z80syntaxchecker.vim | 39 - .../syntastic/syntax_checkers/zpt/zptlint.vim | 42 - .../syntastic/syntax_checkers/zsh/zsh.vim | 38 - .../vim-airline/.github/ISSUE_TEMPLATE.md | 26 - .../vim-airline/.github/workflows/ci.yml | 44 - .../.github/workflows/reviewdog.yml | 22 - dotfiles/.vim/plugged/vim-airline/.gitignore | 8 - dotfiles/.vim/plugged/vim-airline/.gitrepo | 12 - .../.vim/plugged/vim-airline/CHANGELOG.md | 251 - .../.vim/plugged/vim-airline/CONTRIBUTING.md | 45 - dotfiles/.vim/plugged/vim-airline/LICENSE | 21 - dotfiles/.vim/plugged/vim-airline/README.md | 371 - .../plugged/vim-airline/autoload/airline.vim | 313 - .../vim-airline/autoload/airline/async.vim | 382 - .../vim-airline/autoload/airline/builder.vim | 246 - .../vim-airline/autoload/airline/debug.vim | 51 - .../autoload/airline/extensions.vim | 522 -- .../autoload/airline/extensions/ale.vim | 138 - .../autoload/airline/extensions/battery.vim | 23 - .../autoload/airline/extensions/bookmark.vim | 30 - .../autoload/airline/extensions/branch.vim | 369 - .../airline/extensions/bufferline.vim | 28 - .../autoload/airline/extensions/capslock.vim | 17 - .../autoload/airline/extensions/coc.vim | 54 - .../autoload/airline/extensions/commandt.vim | 19 - .../autoload/airline/extensions/csv.vim | 33 - .../autoload/airline/extensions/ctrlp.vim | 82 - .../autoload/airline/extensions/ctrlspace.vim | 21 - .../airline/extensions/cursormode.vim | 126 - .../autoload/airline/extensions/default.vim | 97 - .../autoload/airline/extensions/denite.vim | 55 - .../autoload/airline/extensions/dirvish.vim | 36 - .../autoload/airline/extensions/eclim.vim | 62 - .../autoload/airline/extensions/example.vim | 55 - .../autoload/airline/extensions/fern.vim | 36 - .../airline/extensions/fugitiveline.vim | 61 - .../autoload/airline/extensions/fzf.vim | 44 - .../autoload/airline/extensions/gen_tags.vim | 19 - .../autoload/airline/extensions/gina.vim | 28 - .../autoload/airline/extensions/grepper.vim | 18 - .../autoload/airline/extensions/gutentags.vim | 18 - .../autoload/airline/extensions/hunks.vim | 127 - .../autoload/airline/extensions/keymap.vim | 31 - .../airline/extensions/languageclient.vim | 113 - .../airline/extensions/localsearch.vim | 41 - .../autoload/airline/extensions/lsp.vim | 111 - .../autoload/airline/extensions/neomake.vim | 37 - .../autoload/airline/extensions/netrw.vim | 35 - .../autoload/airline/extensions/nrrwrgn.vim | 58 - .../autoload/airline/extensions/nvimlsp.vim | 69 - .../autoload/airline/extensions/obsession.vim | 23 - .../autoload/airline/extensions/omnisharp.vim | 45 - .../autoload/airline/extensions/po.vim | 105 - .../autoload/airline/extensions/poetv.vim | 32 - .../airline/extensions/promptline.vim | 36 - .../autoload/airline/extensions/quickfix.vim | 58 - .../autoload/airline/extensions/rufo.vim | 38 - .../autoload/airline/extensions/scrollbar.vim | 37 - .../airline/extensions/searchcount.vim | 50 - .../autoload/airline/extensions/syntastic.vim | 44 - .../autoload/airline/extensions/tabline.vim | 480 - .../airline/extensions/tabline/autoshow.vim | 53 - .../airline/extensions/tabline/buffers.vim | 267 - .../airline/extensions/tabline/buflist.vim | 85 - .../airline/extensions/tabline/builder.vim | 232 - .../airline/extensions/tabline/ctrlspace.vim | 169 - .../extensions/tabline/formatters/default.vim | 85 - .../tabline/formatters/jsformatter.vim | 15 - .../tabline/formatters/short_path.vim | 22 - .../extensions/tabline/formatters/tabnr.vim | 15 - .../tabline/formatters/unique_tail.vim | 46 - .../formatters/unique_tail_improved.vim | 91 - .../airline/extensions/tabline/tabs.vim | 142 - .../airline/extensions/tabline/tabws.vim | 156 - .../airline/extensions/tabline/xtabline.vim | 404 - .../autoload/airline/extensions/tagbar.vim | 59 - .../autoload/airline/extensions/taglist.vim | 37 - .../autoload/airline/extensions/term.vim | 80 - .../autoload/airline/extensions/tmuxline.vim | 28 - .../autoload/airline/extensions/undotree.vim | 29 - .../autoload/airline/extensions/unicode.vim | 25 - .../autoload/airline/extensions/unite.vim | 25 - .../autoload/airline/extensions/vim9lsp.vim | 27 - .../autoload/airline/extensions/vimagit.vim | 30 - .../autoload/airline/extensions/vimcmake.vim | 30 - .../autoload/airline/extensions/vimtex.vim | 84 - .../airline/extensions/virtualenv.vim | 32 - .../autoload/airline/extensions/vista.vim | 18 - .../airline/extensions/whitespace.vim | 199 - .../airline/extensions/windowswap.vim | 30 - .../autoload/airline/extensions/wordcount.vim | 123 - .../wordcount/formatters/default.vim | 47 - .../wordcount/formatters/readingtime.vim | 47 - .../autoload/airline/extensions/xkblayout.vim | 24 - .../autoload/airline/extensions/ycm.vim | 42 - .../airline/extensions/zoomwintab.vim | 27 - .../autoload/airline/formatter/short_path.vim | 8 - .../autoload/airline/highlighter.vim | 686 -- .../vim-airline/autoload/airline/init.vim | 287 - .../vim-airline/autoload/airline/msdos.vim | 83 - .../vim-airline/autoload/airline/parts.vim | 206 - .../vim-airline/autoload/airline/section.vim | 84 - .../vim-airline/autoload/airline/themes.vim | 155 - .../autoload/airline/themes/dark.vim | 163 - .../vim-airline/autoload/airline/util.vim | 239 - .../.vim/plugged/vim-airline/doc/airline.txt | 2111 ----- .../plugged/vim-airline/plugin/airline.vim | 308 - .../.vim/plugged/vim-airline/test/.themisrc | 28 - .../plugged/vim-airline/test/airline.vimspec | 64 - .../plugged/vim-airline/test/builder.vimspec | 107 - .../plugged/vim-airline/test/commands.vimspec | 50 - .../test/extensions_default.vimspec | 47 - .../test/extensions_tabline.vimspec | 14 - .../vim-airline/test/highlighter.vimspec | 28 - .../plugged/vim-airline/test/init.vimspec | 109 - .../plugged/vim-airline/test/parts.vimspec | 58 - .../plugged/vim-airline/test/section.vimspec | 77 - .../plugged/vim-airline/test/themes.vimspec | 91 - .../plugged/vim-airline/test/util.vimspec | 69 - .../.vim/plugged/vim-carbon-now-sh/.gitrepo | 12 - .../.vim/plugged/vim-carbon-now-sh/LICENSE | 21 - .../.vim/plugged/vim-carbon-now-sh/README.md | 60 - .../doc/vim-carbon-now-sh.txt | 60 - .../plugin/vim-carbon-now-sh.vim | 122 - .../vim-devicons/.github/ISSUE_TEMPLATE.md | 24 - .../.github/PULL_REQUEST_TEMPLATE.md | 15 - .../vim-devicons/.github/workflows/ci.yml | 42 - .../vim-devicons/.github/workflows/vint.yml | 32 - dotfiles/.vim/plugged/vim-devicons/.gitignore | 5 - dotfiles/.vim/plugged/vim-devicons/.gitrepo | 12 - .../.vim/plugged/vim-devicons/CHANGELOG.md | 249 - .../plugged/vim-devicons/CODE_OF_CONDUCT.md | 76 - .../.vim/plugged/vim-devicons/CONTRIBUTING.md | 18 - .../.vim/plugged/vim-devicons/DEVELOPER.md | 68 - dotfiles/.vim/plugged/vim-devicons/LICENSE | 22 - dotfiles/.vim/plugged/vim-devicons/README.md | 107 - .../tabline/formatters/webdevicons.vim | 14 - .../autoload/devicons/plugins/ctrlp.vim | 30 - .../autoload/devicons/plugins/denite.vim | 10 - .../autoload/devicons/plugins/flagship.vim | 15 - .../autoload/devicons/plugins/startify.vim | 6 - .../autoload/devicons/plugins/unite.vim | 37 - .../autoload/devicons/plugins/vimfiler.vim | 8 - .../autoload/vimfiler/columns/devicons.vim | 80 - .../plugged/vim-devicons/doc/webdevicons.txt | 1078 --- .../nerdtree_plugin/webdevicons.vim | 389 - .../vim-devicons/plugin/webdevicons.vim | 703 -- .../pythonx/vim_devicons/__init__.py | 2 - .../vim_devicons/powerline/__init__.py | 2 - .../vim_devicons/powerline/segments.py | 28 - .../filter/devicons_denite_converter.py | 31 - .../.vim/plugged/vim-devicons/test/.themisrc | 1 - .../vim-devicons/test/default_setting.vim | 39 - .../plugged/vim-devicons/test/fileformat.vim | 29 - .../plugged/vim-devicons/test/filetype.vim | 344 - .../.vim/plugged/vim-fugitive/.gitattributes | 2 - .../plugged/vim-fugitive/.github/FUNDING.yml | 2 - dotfiles/.vim/plugged/vim-fugitive/.gitignore | 1 - dotfiles/.vim/plugged/vim-fugitive/.gitrepo | 12 - .../vim-fugitive/CONTRIBUTING.markdown | 24 - .../.vim/plugged/vim-fugitive/README.markdown | 137 - .../vim-fugitive/autoload/fugitive.vim | 8127 ---------------- .../plugged/vim-fugitive/doc/fugitive.txt | 730 -- .../vim-fugitive/ftdetect/fugitive.vim | 1 - .../vim-fugitive/ftplugin/fugitiveblame.vim | 6 - .../plugged/vim-fugitive/plugin/fugitive.vim | 751 -- .../plugged/vim-fugitive/syntax/fugitive.vim | 57 - .../vim-fugitive/syntax/fugitiveblame.vim | 7 - .../vim-gitgutter/.github/issue_template.md | 4 - .../.vim/plugged/vim-gitgutter/.gitignore | 5 - dotfiles/.vim/plugged/vim-gitgutter/.gitrepo | 12 - dotfiles/.vim/plugged/vim-gitgutter/LICENCE | 22 - .../.vim/plugged/vim-gitgutter/README.mkd | 744 -- .../vim-gitgutter/autoload/gitgutter.vim | 265 - .../autoload/gitgutter/async.vim | 107 - .../autoload/gitgutter/debug.vim | 109 - .../vim-gitgutter/autoload/gitgutter/diff.vim | 421 - .../autoload/gitgutter/diff_highlight.vim | 201 - .../vim-gitgutter/autoload/gitgutter/fold.vim | 115 - .../autoload/gitgutter/highlight.vim | 245 - .../vim-gitgutter/autoload/gitgutter/hunk.vim | 613 -- .../vim-gitgutter/autoload/gitgutter/sign.vim | 250 - .../autoload/gitgutter/utility.vim | 255 - .../plugged/vim-gitgutter/doc/gitgutter.txt | 784 -- .../vim-gitgutter/plugin/gitgutter.vim | 322 - .../.vim/plugged/vim-gitgutter/screenshot.png | Bin 601382 -> 0 bytes .../.vim/plugged/vim-gitgutter/test/cp932.txt | 8 - .../plugged/vim-gitgutter/test/fixture.txt | 11 - .../vim-gitgutter/test/fixture_dos.txt | 11 - .../plugged/vim-gitgutter/test/runner.vim | 162 - dotfiles/.vim/plugged/vim-gitgutter/test/test | 21 - .../vim-gitgutter/test/test_gitgutter.vim | 1166 --- dotfiles/.vim/plugged/vim-go/.codecov.yml | 13 - dotfiles/.vim/plugged/vim-go/.coveragerc | 3 - dotfiles/.vim/plugged/vim-go/.dockerignore | 8 - dotfiles/.vim/plugged/vim-go/.editorconfig | 17 - .../plugged/vim-go/.github/CONTRIBUTING.md | 12 - .../.vim/plugged/vim-go/.github/FUNDING.yml | 1 - .../plugged/vim-go/.github/ISSUE_TEMPLATE.md | 50 - .../plugged/vim-go/.github/workflows/git.yml | 11 - .../plugged/vim-go/.github/workflows/test.yml | 60 - dotfiles/.vim/plugged/vim-go/.gitignore | 11 - dotfiles/.vim/plugged/vim-go/.gitrepo | 12 - dotfiles/.vim/plugged/vim-go/.vintrc.yaml | 7 - dotfiles/.vim/plugged/vim-go/CHANGELOG.md | 2253 ----- dotfiles/.vim/plugged/vim-go/Dockerfile | 27 - dotfiles/.vim/plugged/vim-go/LICENSE | 60 - dotfiles/.vim/plugged/vim-go/Makefile | 31 - dotfiles/.vim/plugged/vim-go/README.md | 104 - dotfiles/.vim/plugged/vim-go/addon-info.json | 6 - .../.vim/plugged/vim-go/assets/vim-go.png | Bin 29252 -> 0 bytes .../.vim/plugged/vim-go/assets/vim-go.svg | 821 -- .../plugged/vim-go/autoload/ctrlp/decls.vim | 152 - .../plugged/vim-go/autoload/fzf/decls.vim | 155 - .../plugged/vim-go/autoload/go/alternate.vim | 35 - .../plugged/vim-go/autoload/go/asmfmt.vim | 76 - .../.vim/plugged/vim-go/autoload/go/auto.vim | 203 - .../.vim/plugged/vim-go/autoload/go/calls.vim | 32 - .../plugged/vim-go/autoload/go/calls_test.vim | 48 - .../.vim/plugged/vim-go/autoload/go/cmd.vim | 375 - .../plugged/vim-go/autoload/go/cmd_test.vim | 37 - .../plugged/vim-go/autoload/go/complete.vim | 67 - .../vim-go/autoload/go/complete_test.vim | 29 - .../plugged/vim-go/autoload/go/config.vim | 632 -- .../vim-go/autoload/go/config_test.vim | 107 - .../plugged/vim-go/autoload/go/coverage.vim | 295 - .../.vim/plugged/vim-go/autoload/go/debug.vim | 1771 ---- .../plugged/vim-go/autoload/go/debug_test.vim | 186 - .../.vim/plugged/vim-go/autoload/go/decls.vim | 26 - .../.vim/plugged/vim-go/autoload/go/def.vim | 366 - .../plugged/vim-go/autoload/go/def_test.vim | 223 - .../.vim/plugged/vim-go/autoload/go/doc.vim | 217 - .../plugged/vim-go/autoload/go/fillstruct.vim | 83 - .../vim-go/autoload/go/fillstruct_test.vim | 223 - .../.vim/plugged/vim-go/autoload/go/fmt.vim | 231 - .../plugged/vim-go/autoload/go/fmt_test.vim | 57 - .../.vim/plugged/vim-go/autoload/go/guru.vim | 584 -- .../plugged/vim-go/autoload/go/guru_test.vim | 23 - .../vim-go/autoload/go/highlight_test.vim | 639 -- .../.vim/plugged/vim-go/autoload/go/iferr.vim | 26 - .../.vim/plugged/vim-go/autoload/go/impl.vim | 175 - .../plugged/vim-go/autoload/go/impl_test.vim | 47 - .../plugged/vim-go/autoload/go/implements.vim | 44 - .../plugged/vim-go/autoload/go/import.vim | 232 - .../vim-go/autoload/go/import_test.vim | 35 - .../vim-go/autoload/go/indent_test.vim | 72 - .../.vim/plugged/vim-go/autoload/go/issue.vim | 56 - .../.vim/plugged/vim-go/autoload/go/job.vim | 573 -- .../plugged/vim-go/autoload/go/job_test.vim | 54 - .../plugged/vim-go/autoload/go/keyify.vim | 64 - .../.vim/plugged/vim-go/autoload/go/lint.vim | 493 - .../plugged/vim-go/autoload/go/lint_test.vim | 603 -- .../.vim/plugged/vim-go/autoload/go/list.vim | 190 - .../.vim/plugged/vim-go/autoload/go/lsp.vim | 2035 ---- .../autoload/go/lsp/completionitemkind.vim | 63 - .../vim-go/autoload/go/lsp/filechangetype.vim | 19 - .../plugged/vim-go/autoload/go/lsp/lsp.vim | 72 - .../vim-go/autoload/go/lsp/lsp_test.vim | 32 - .../vim-go/autoload/go/lsp/message.vim | 438 - .../plugged/vim-go/autoload/go/lsp_test.vim | 97 - .../.vim/plugged/vim-go/autoload/go/mod.vim | 147 - .../plugged/vim-go/autoload/go/package.vim | 346 - .../vim-go/autoload/go/package_test.vim | 62 - .../.vim/plugged/vim-go/autoload/go/path.vim | 195 - .../.vim/plugged/vim-go/autoload/go/play.vim | 78 - .../plugged/vim-go/autoload/go/promise.vim | 58 - .../vim-go/autoload/go/promise_test.vim | 41 - .../plugged/vim-go/autoload/go/referrers.vim | 44 - .../plugged/vim-go/autoload/go/rename.vim | 152 - .../plugged/vim-go/autoload/go/statusline.vim | 124 - .../.vim/plugged/vim-go/autoload/go/tags.vim | 224 - .../plugged/vim-go/autoload/go/tags_test.vim | 52 - .../plugged/vim-go/autoload/go/template.vim | 61 - .../vim-go/autoload/go/template_test.vim | 62 - .../.vim/plugged/vim-go/autoload/go/term.vim | 274 - .../plugged/vim-go/autoload/go/term_test.vim | 94 - .../autoload/go/test-fixtures/cmd/bad.go | 5 - .../go/test-fixtures/complete/complete.go | 9 - .../config/buildtags/buildtags.go | 5 - .../config/buildtags/constrainedfoo.go | 8 - .../go/test-fixtures/config/buildtags/foo.go | 7 - .../go/test-fixtures/config/buildtags/go.mod | 3 - .../test-fixtures/debug/compilerror/main.go | 7 - .../debug/debugmain/debugmain.go | 7 - .../autoload/go/test-fixtures/def/jump.go | 7 - .../autoload/go/test-fixtures/fmt/hello.go | 7 - .../go/test-fixtures/fmt/hello_golden.go | 7 - .../fmt/src/imports/goimports.go | 8 - .../fmt/src/imports/goimports_golden.go | 15 - .../vendor/gh.com/gi/foo-logging/logger.go | 12 - .../test-fixtures/job/dir has spaces/main.go | 6 - .../errcheck/compilererror/compilererror.go | 7 - .../lint/src/errcheck/errcheck.go | 10 - .../lint/src/errcheck/errcheck_test.go | 11 - .../go/test-fixtures/lint/src/errcheck/go.mod | 3 - .../go/test-fixtures/lint/src/foo/foo.go | 7 - .../go/test-fixtures/lint/src/foo/go.mod | 3 - .../go/test-fixtures/lint/src/lint/baz.go | 3 - .../go/test-fixtures/lint/src/lint/go.mod | 3 - .../golangci-lint/problems/importabs/ok.go | 3 - .../problems/importabs/problems.go | 5 - .../problems/multiple/problems.go | 9 - .../golangci-lint/problems/shadow/problems.go | 5 - .../go/test-fixtures/lint/src/lint/lint.go | 7 - .../go/test-fixtures/lint/src/lint/quux.go | 7 - .../src/vet/compilererror/compilererror.go | 7 - .../go/test-fixtures/lint/src/vet/go.mod | 3 - .../go/test-fixtures/lint/src/vet/vet.go | 8 - .../go/test-fixtures/lsp/fmt/format.go | 7 - .../go/test-fixtures/lsp/fmt/format_golden.go | 7 - .../go/test-fixtures/lsp/fmt/newline.go | 6 - .../go/test-fixtures/lsp/imports/imports.go | 10 - .../lsp/imports/imports_golden.go | 13 - .../package/src/package/bar/.gitkeep | 0 .../package/src/package/baz/.gitkeep | 0 .../test-fixtures/package/src/package/go.mod | 3 - .../package/src/package/package.go | 7 - .../package/src/package/vendor/foo/.gitkeep | 0 .../go/test-fixtures/tags/add_all_golden.go | 16 - .../tags/add_all_golden_options.go | 16 - .../go/test-fixtures/tags/add_all_input.go | 16 - .../test-fixtures/tags/remove_all_golden.go | 16 - .../go/test-fixtures/tags/remove_all_input.go | 16 - .../autoload/go/test-fixtures/term/term.go | 5 - .../autoload/go/test-fixtures/test/.gitignore | 1 - .../test/src/compilerror/compilerror.go | 7 - .../test-fixtures/test/src/compilerror/go.mod | 3 - .../test/src/example/example_test.go | 10 - .../go/test-fixtures/test/src/example/go.mod | 3 - .../go/test-fixtures/test/src/play/go.mod | 3 - .../test/src/play/mock/controller.go | 7 - .../test-fixtures/test/src/play/play_test.go | 59 - .../go/test-fixtures/test/src/showname/go.mod | 3 - .../test/src/showname/showname_test.go | 11 - .../test/src/testcompilerror/go.mod | 3 - .../testcompilerror/testcompilerror_test.go | 11 - .../go/test-fixtures/test/src/timeout/go.mod | 3 - .../test/src/timeout/timeout_test.go | 47 - .../go/test-fixtures/test/src/veterror/go.mod | 3 - .../test/src/veterror/veterror.go | 7 - .../.vim/plugged/vim-go/autoload/go/test.vim | 326 - .../plugged/vim-go/autoload/go/test_test.vim | 170 - .../plugged/vim-go/autoload/go/textobj.vim | 284 - .../.vim/plugged/vim-go/autoload/go/tool.vim | 156 - .../plugged/vim-go/autoload/go/tool_test.vim | 33 - .../.vim/plugged/vim-go/autoload/go/ui.vim | 122 - .../.vim/plugged/vim-go/autoload/go/uri.vim | 55 - .../plugged/vim-go/autoload/go/uri_test.vim | 56 - .../.vim/plugged/vim-go/autoload/go/util.vim | 784 -- .../.vim/plugged/vim-go/autoload/gotest.vim | 195 - .../vim-go/autoload/unite/sources/decls.vim | 70 - dotfiles/.vim/plugged/vim-go/compiler/go.vim | 48 - dotfiles/.vim/plugged/vim-go/doc/vim-go.txt | 2899 ------ .../plugged/vim-go/ftdetect/gofiletype.vim | 43 - dotfiles/.vim/plugged/vim-go/ftplugin/asm.vim | 37 - dotfiles/.vim/plugged/vim-go/ftplugin/go.vim | 135 - .../plugged/vim-go/ftplugin/go/commands.vim | 138 - .../plugged/vim-go/ftplugin/go/mappings.vim | 89 - .../plugged/vim-go/ftplugin/go/snippets.vim | 67 - .../plugged/vim-go/ftplugin/go/tagbar.vim | 65 - .../plugged/vim-go/ftplugin/gohtmltmpl.vim | 7 - .../.vim/plugged/vim-go/ftplugin/gomod.vim | 36 - .../vim-go/ftplugin/gomod/commands.vim | 3 - .../vim-go/ftplugin/gomod/mappings.vim | 1 - .../vim-go/gosnippets/UltiSnips/go.snippets | 565 -- .../plugged/vim-go/gosnippets/minisnip/_go_eq | 3 - .../vim-go/gosnippets/minisnip/_go_err | 3 - .../vim-go/gosnippets/minisnip/_go_errt | 4 - .../vim-go/gosnippets/minisnip/_go_errw | 3 - .../plugged/vim-go/gosnippets/minisnip/_go_f | 3 - .../plugged/vim-go/gosnippets/minisnip/_go_ff | 1 - .../vim-go/gosnippets/minisnip/_go_fori | 3 - .../vim-go/gosnippets/minisnip/_go_pkg | 2 - .../plugged/vim-go/gosnippets/minisnip/_go_sp | 2 - .../plugged/vim-go/gosnippets/minisnip/_go_tt | 17 - .../vim-go/gosnippets/snippets/go.snip | 407 - dotfiles/.vim/plugged/vim-go/indent/go.vim | 86 - .../.vim/plugged/vim-go/indent/gohtmltmpl.vim | 54 - dotfiles/.vim/plugged/vim-go/plugin/go.vim | 286 - .../rplugin/python3/denite/source/decls.py | 94 - .../.vim/plugged/vim-go/scripts/bench-syntax | 44 - .../.vim/plugged/vim-go/scripts/docker-test | 15 - .../.vim/plugged/vim-go/scripts/install-tools | 35 - .../.vim/plugged/vim-go/scripts/install-vim | 100 - dotfiles/.vim/plugged/vim-go/scripts/lint | 88 - dotfiles/.vim/plugged/vim-go/scripts/run-vim | 51 - .../.vim/plugged/vim-go/scripts/runbench.vim | 37 - .../.vim/plugged/vim-go/scripts/runtest.vim | 157 - dotfiles/.vim/plugged/vim-go/scripts/test | 108 - dotfiles/.vim/plugged/vim-go/syntax/go.vim | 506 - .../plugged/vim-go/syntax/godebugoutput.vim | 13 - .../vim-go/syntax/godebugstacktrace.vim | 11 - .../vim-go/syntax/godebugvariables.vim | 23 - .../.vim/plugged/vim-go/syntax/godefstack.vim | 20 - .../.vim/plugged/vim-go/syntax/gohtmltmpl.vim | 17 - dotfiles/.vim/plugged/vim-go/syntax/gomod.vim | 108 - dotfiles/.vim/plugged/vim-go/syntax/gosum.vim | 55 - .../.vim/plugged/vim-go/syntax/gotexttmpl.vim | 83 - .../.vim/plugged/vim-go/syntax/gowork.vim | 96 - dotfiles/.vim/plugged/vim-go/syntax/vimgo.vim | 13 - .../plugged/vim-go/templates/hello_world.go | 7 - .../vim-go/templates/hello_world_test.go | 7 - dotfiles/.vim/plugged/vim-go/test/parse.go | 2096 ----- dotfiles/.vim/plugged/vim-javascript/.gitrepo | 12 - .../plugged/vim-javascript/ISSUE_TEMPLATE.md | 13 - .../.vim/plugged/vim-javascript/README.md | 125 - .../after/ftplugin/javascript.vim | 12 - .../vim-javascript/compiler/eslint.vim | 16 - .../.vim/plugged/vim-javascript/extras/ctags | 8 - .../plugged/vim-javascript/extras/flow.vim | 109 - .../plugged/vim-javascript/extras/jsdoc.vim | 40 - .../plugged/vim-javascript/extras/ngdoc.vim | 3 - .../plugged/vim-javascript/ftdetect/flow.vim | 1 - .../vim-javascript/ftdetect/javascript.vim | 8 - .../vim-javascript/indent/javascript.vim | 477 - .../plugged/vim-javascript/syntax/flow.vim | 2 - .../vim-javascript/syntax/javascript.vim | 401 - dotfiles/.vim/plugged/vim-jsx/.gitrepo | 12 - dotfiles/.vim/plugged/vim-jsx/README.md | 158 - .../plugged/vim-jsx/after/ftplugin/jsx.vim | 19 - .../.vim/plugged/vim-jsx/after/indent/jsx.vim | 114 - .../.vim/plugged/vim-jsx/after/syntax/jsx.vim | 65 - .../plugged/vim-jsx/ftdetect/javascript.vim | 37 - .../.github/workflows/reviewdog.yml | 13 - .../vim-markdown/.github/workflows/vader.yml | 31 - .../vim-markdown/.github/workflows/vint.yml | 15 - dotfiles/.vim/plugged/vim-markdown/.gitignore | 2 - dotfiles/.vim/plugged/vim-markdown/.gitrepo | 12 - .../.vim/plugged/vim-markdown/.vintrc.yaml | 5 - .../.vim/plugged/vim-markdown/CONTRIBUTING.md | 58 - dotfiles/.vim/plugged/vim-markdown/Makefile | 88 - dotfiles/.vim/plugged/vim-markdown/README.md | 457 - .../vim-markdown/after/ftplugin/markdown.vim | 202 - .../plugged/vim-markdown/doc/vim-markdown.txt | 663 -- .../vim-markdown/ftdetect/markdown.vim | 8 - .../vim-markdown/ftplugin/markdown.vim | 883 -- .../plugged/vim-markdown/indent/markdown.vim | 75 - .../vim-markdown/registry/markdown.yaml | 9 - .../plugged/vim-markdown/syntax/markdown.vim | 184 - .../.vim/plugged/vim-markdown/test/README.md | 5 - .../vim-markdown/test/folding-toc.vader | 179 - .../plugged/vim-markdown/test/folding.vader | 53 - .../.vim/plugged/vim-markdown/test/ge_test.md | 1 - .../test/indent-new-list-item.vader | 15 - .../.vim/plugged/vim-markdown/test/indent.md | 26 - .../plugged/vim-markdown/test/indent.vader | 73 - .../vim-markdown/test/insert-toc.vader | 147 - .../.vim/plugged/vim-markdown/test/map.vader | 153 - .../vim-markdown/test/python-folding.vader | 84 - .../plugged/vim-markdown/test/run-tests.sh | 16 - .../vim-markdown/test/syntax-singleline.vader | 158 - .../.vim/plugged/vim-markdown/test/syntax.md | 89 - .../plugged/vim-markdown/test/syntax.vader | 1292 --- .../vim-markdown/test/table-format.vader | 70 - .../vim-markdown/test/toc-autofit.vader | 53 - .../.vim/plugged/vim-markdown/test/toc.vader | 181 - dotfiles/.vim/plugged/vim-markdown/test/vimrc | 31 - .../plugged/vim-multiple-cursors/.gitignore | 1 - .../plugged/vim-multiple-cursors/.gitrepo | 12 - .../.vim/plugged/vim-multiple-cursors/.rspec | 2 - .../plugged/vim-multiple-cursors/.travis.yml | 12 - .../plugged/vim-multiple-cursors/CHANGELOG.md | 109 - .../vim-multiple-cursors/CONTRIBUTING.md | 23 - .../.vim/plugged/vim-multiple-cursors/Gemfile | 4 - .../plugged/vim-multiple-cursors/Gemfile.lock | 30 - .../vim-multiple-cursors/MIT-LICENSE.txt | 20 - .../plugged/vim-multiple-cursors/README.md | 265 - .../plugged/vim-multiple-cursors/Rakefile | 11 - .../vim-multiple-cursors/assets/example1.gif | Bin 103002 -> 0 bytes .../vim-multiple-cursors/assets/example2.gif | Bin 271369 -> 0 bytes .../vim-multiple-cursors/assets/example3.gif | Bin 180802 -> 0 bytes .../vim-multiple-cursors/assets/example4.gif | Bin 545119 -> 0 bytes .../autoload/multiple_cursors.vim | 1331 --- .../doc/multiple_cursors.txt | 250 - .../plugin/multiple_cursors.vim | 104 - .../spec/benchmark_spec.rb | 142 - .../spec/multiple_cursors_spec.rb | 977 -- .../vim-multiple-cursors/spec/spec_helper.rb | 25 - .../vim-prettier/.github/ISSUE_TEMPLATE.md | 12 - .../.github/PULL_REQUEST_TEMPLATE.md | 19 - dotfiles/.vim/plugged/vim-prettier/.gitignore | 5 - dotfiles/.vim/plugged/vim-prettier/.gitrepo | 12 - .../.vim/plugged/vim-prettier/CHANGELOG.md | 537 -- dotfiles/.vim/plugged/vim-prettier/Dockerfile | 66 - dotfiles/.vim/plugged/vim-prettier/LICENSE | 7 - dotfiles/.vim/plugged/vim-prettier/Makefile | 63 - dotfiles/.vim/plugged/vim-prettier/README.md | 287 - .../vim-prettier/autoload/prettier.vim | 98 - .../autoload/prettier/bridge/parser.vim | 24 - .../autoload/prettier/job/async/neovim.vim | 92 - .../autoload/prettier/job/async/vim.vim | 69 - .../autoload/prettier/job/runner.vim | 63 - .../autoload/prettier/logging/error.vim | 12 - .../autoload/prettier/presets/fb.vim | 13 - .../autoload/prettier/resolver/config.vim | 101 - .../autoload/prettier/resolver/executable.vim | 79 - .../autoload/prettier/resolver/preset.vim | 8 - .../autoload/prettier/utils/buffer.vim | 70 - .../autoload/prettier/utils/quickfix.vim | 22 - .../autoload/prettier/utils/shim.vim | 8 - .../plugged/vim-prettier/doc/prettier.txt | 223 - .../plugged/vim-prettier/ftdetect/css.vim | 3 - .../plugged/vim-prettier/ftdetect/graphql.vim | 3 - .../plugged/vim-prettier/ftdetect/html.vim | 3 - .../vim-prettier/ftdetect/javascript.vim | 3 - .../plugged/vim-prettier/ftdetect/json.vim | 3 - .../plugged/vim-prettier/ftdetect/less.vim | 3 - .../plugged/vim-prettier/ftdetect/lua.vim | 3 - .../vim-prettier/ftdetect/markdown.vim | 3 - .../plugged/vim-prettier/ftdetect/php.vim | 3 - .../plugged/vim-prettier/ftdetect/ruby.vim | 3 - .../plugged/vim-prettier/ftdetect/scss.vim | 3 - .../plugged/vim-prettier/ftdetect/svelte.vim | 3 - .../vim-prettier/ftdetect/typescript.vim | 4 - .../plugged/vim-prettier/ftdetect/vue.vim | 3 - .../plugged/vim-prettier/ftdetect/xml.vim | 3 - .../plugged/vim-prettier/ftdetect/yaml.vim | 3 - .../plugged/vim-prettier/ftplugin/css.vim | 3 - .../plugged/vim-prettier/ftplugin/graphql.vim | 3 - .../plugged/vim-prettier/ftplugin/html.vim | 7 - .../vim-prettier/ftplugin/javascript.vim | 0 .../plugged/vim-prettier/ftplugin/json.vim | 3 - .../plugged/vim-prettier/ftplugin/less.vim | 3 - .../plugged/vim-prettier/ftplugin/lua.vim | 3 - .../vim-prettier/ftplugin/markdown.vim | 3 - .../plugged/vim-prettier/ftplugin/php.vim | 3 - .../plugged/vim-prettier/ftplugin/ruby.vim | 3 - .../plugged/vim-prettier/ftplugin/scss.vim | 3 - .../plugged/vim-prettier/ftplugin/svelte.vim | 3 - .../vim-prettier/ftplugin/typescript.vim | 3 - .../plugged/vim-prettier/ftplugin/vue.vim | 3 - .../plugged/vim-prettier/ftplugin/xml.vim | 7 - .../plugged/vim-prettier/ftplugin/yaml.vim | 3 - .../vim-prettier/media/vim-prettier.gif | Bin 572612 -> 0 bytes .../.vim/plugged/vim-prettier/package.json | 28 - .../plugged/vim-prettier/plugin/prettier.vim | 178 - .../__snapshots__/formatting.test.js.snap | 329 - .../vim-prettier/tests/fixtures/foo.css | 3 - .../vim-prettier/tests/fixtures/foo.graphql | 8 - .../vim-prettier/tests/fixtures/foo.html | 3 - .../vim-prettier/tests/fixtures/foo.js | 1 - .../vim-prettier/tests/fixtures/foo.json | 3 - .../vim-prettier/tests/fixtures/foo.less | 3 - .../vim-prettier/tests/fixtures/foo.lua | 6 - .../vim-prettier/tests/fixtures/foo.md | 11 - .../vim-prettier/tests/fixtures/foo.php | 4 - .../vim-prettier/tests/fixtures/foo.rb | 3 - .../vim-prettier/tests/fixtures/foo.scss | 3 - .../vim-prettier/tests/fixtures/foo.ts | 1 - .../vim-prettier/tests/fixtures/foo.vue | 14 - .../vim-prettier/tests/fixtures/foo.xml | 19 - .../vim-prettier/tests/fixtures/foo.yaml | 11 - .../vim-prettier/tests/formatting.test.js | 126 - .../.vim/plugged/vim-prettier/tests/vimrc | 35 - dotfiles/.vim/plugged/vim-prettier/yarn.lock | 3589 ------- .../plugged/vim-sensible/.github/FUNDING.yml | 2 - dotfiles/.vim/plugged/vim-sensible/.gitrepo | 12 - .../.vim/plugged/vim-sensible/README.markdown | 95 - .../plugged/vim-sensible/plugin/sensible.vim | 102 - .../plugged/vim-surround/.github/FUNDING.yml | 2 - dotfiles/.vim/plugged/vim-surround/.gitignore | 1 - dotfiles/.vim/plugged/vim-surround/.gitrepo | 12 - .../.vim/plugged/vim-surround/README.markdown | 91 - .../plugged/vim-surround/doc/surround.txt | 205 - .../plugged/vim-surround/plugin/surround.vim | 630 -- dotfiles/.vim/plugged/zoxide.vim/.gitrepo | 12 - dotfiles/.vim/plugged/zoxide.vim/LICENSE | 21 - dotfiles/.vim/plugged/zoxide.vim/README.md | 45 - .../plugged/zoxide.vim/autoload/zoxide.vim | 74 - .../plugged/zoxide.vim/doc/zoxide-vim.txt | 91 - .../plugged/zoxide.vim/lua/zoxide-vim.lua | 9 - .../.vim/plugged/zoxide.vim/plugin/zoxide.vim | 41 - dotfiles/.vimrc | 54 - dotfiles/.zshrc | 357 - .../Betelgeuse Dark.dvtcolortheme | 83 - .../Betelgeuse Light.dvtcolortheme | 83 - .../Preferences/com.apple.Terminal.plist | 328 - 3204 files changed, 294669 deletions(-) delete mode 100644 .local/fzf-tmux.sh delete mode 100644 .local/p10k.zsh rename {dotfiles/.vim => .vim}/autoload/lightline/colorscheme/Betelgeuse.vim (100%) rename {dotfiles/.vim => .vim}/autoload/plug.vim (100%) rename {dotfiles/.vim => .vim}/colors/betelgeuse.vim (100%) rename {dotfiles/.vscode => .vscode}/extensions.json (100%) rename {dotfiles/.vscode => .vscode}/settings.json (100%) delete mode 100644 dotfiles/.Xresources delete mode 100644 dotfiles/.bash_logout delete mode 100644 dotfiles/.bash_profile delete mode 100644 dotfiles/.bashrc delete mode 100644 dotfiles/.editorconfig delete mode 100644 dotfiles/.gitconfig delete mode 100644 dotfiles/.inputrc delete mode 100644 dotfiles/.npmrc delete mode 100644 dotfiles/.profile delete mode 100644 dotfiles/.tmux.conf delete mode 100644 dotfiles/.tmux.conf.local delete mode 100644 dotfiles/.vim/plugged/ale/.appveyor.yml delete mode 100644 dotfiles/.vim/plugged/ale/.editorconfig delete mode 100644 dotfiles/.vim/plugged/ale/.gitattributes delete mode 100644 dotfiles/.vim/plugged/ale/.github/CODE_OF_CONDUCT.md delete mode 100644 dotfiles/.vim/plugged/ale/.github/CONTRIBUTING.md delete mode 100644 dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/config.yml delete mode 100644 dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/report-a-bug.md delete mode 100644 dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-a-new-linter-or-fixer.md delete mode 100644 dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-an-improvement.md delete mode 100644 dotfiles/.vim/plugged/ale/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/ale/.github/stale.yml delete mode 100644 dotfiles/.vim/plugged/ale/.github/workflows/main.yml delete mode 100644 dotfiles/.vim/plugged/ale/.gitignore delete mode 100644 dotfiles/.vim/plugged/ale/.gitrepo delete mode 100644 dotfiles/.vim/plugged/ale/.vintrc.yaml delete mode 100644 dotfiles/.vim/plugged/ale/Dockerfile delete mode 100644 dotfiles/.vim/plugged/ale/LICENSE delete mode 100644 dotfiles/.vim/plugged/ale/README.md delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ada/adals.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ada/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ada/gcc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ansible/ansible_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/apiblueprint/drafter.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/apkbuild/apkbuild_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/apkbuild/secfixes_check.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asciidoc/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asciidoc/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asciidoc/languagetool.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asciidoc/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asciidoc/redpen.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asciidoc/textlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asciidoc/vale.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asciidoc/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/asm/gcc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/avra/avra.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/awk/gawk.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/bats/shellcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/bib/bibclean.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/bicep/bicep.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/bitbake/oelint_adv.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/cc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/ccls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/clangd.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/clangtidy.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/cppcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/cpplint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/cquery.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/c/flawfinder.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cairo/starknet.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/chef/cookstyle.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/chef/foodcritic.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/clojure/clj_kondo.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/clojure/joker.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cloudformation/cfn_python_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cmake/cmake_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cmake/cmakelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/coffee/coffee.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/coffee/coffeelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/cc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/ccls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/clangcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/clangd.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/clangtidy.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/clazy.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/cppcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/cpplint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/cquery.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cpp/flawfinder.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/crystal/ameba.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/crystal/crystal.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cs/csc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cs/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cs/mcs.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cs/mcsc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/css/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/css/csslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/css/fecs.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/css/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/css/vscodecss.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cucumber/cucumber.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cuda/clangd.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cuda/nvcc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/cypher/cypher_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/d/dls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/d/dmd.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/dafny/dafny.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/dart/analysis_server.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/dart/dart_analyze.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/dart/language_server.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/desktop/desktop_file_validate.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/dockerfile/dockerfile_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/dockerfile/hadolint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/elixir/credo.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/elixir/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/elixir/dialyxir.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/elixir/dogma.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/elixir/elixir_ls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/elixir/mix.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/elm/elm_ls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/elm/make.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/erlang/dialyzer.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/erlang/elvis.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/erlang/erlc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/erlang/syntaxerl.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/eruby/erb.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/eruby/erblint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/eruby/erubi.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/eruby/erubis.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/eruby/ruumba.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/fish/fish.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/fortran/gcc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/fortran/language_server.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/fountain/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/fuse/fusionlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/gitcommit/gitlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/glsl/glslang.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/glsl/glslls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/bingo.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/gobuild.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/gofmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/golangci_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/golint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/gometalinter.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/gopls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/gosimple.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/gotype.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/govet.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/langserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/revive.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/go/staticcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/graphql/eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/graphql/gqlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/hack/hack.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/hack/hhast.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haml/hamllint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/handlebars/embertemplatelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/cabal_ghc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc_mod.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/hdevtools.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/hie.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/hlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/hls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_build.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_ghc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/help/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/help/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/help/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/help/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/angular.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/fecs.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/htmlhint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/tidy.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/vscodehtml.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/html/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/idris/idris.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ink/ls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/inko/inko.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ispc/ispc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/java/checkstyle.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/java/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/java/eclipselsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/java/javac.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/java/javalsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/java/pmd.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/deno.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/fecs.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/flow.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/flow_ls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/jscs.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/jshint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/standard.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/tsserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/javascript/xo.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/json/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/json/eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/json/jq.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/json/jsonlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/json/spectral.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/json/vscodejson.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/json5/eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/jsonc/eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnet_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnetfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/julia/languageserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/kotlin/kotlinc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/kotlin/ktlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/kotlin/languageserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/less/lessc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/less/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/llvm/llc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/lua/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/lua/luac.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/lua/luacheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/lua/selene.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/mail/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/mail/languagetool.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/mail/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/mail/vale.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/make/checkmake.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/languagetool.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/markdownlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/mdl.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/redpen.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/remark_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/textlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/vale.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/markdown/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/matlab/mlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/mercury/mmc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nasm/nasm.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nim/nimcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nim/nimlsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nix/nix.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nix/rnix_lsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nix/statix.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nroff/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nroff/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/nroff/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/objc/ccls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/objc/clang.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/objc/clangd.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/objcpp/clang.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/objcpp/clangd.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ocaml/merlin.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ocaml/ocamllsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ocaml/ols.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/merlin.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/ocamllsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/openapi/ibm_validator.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/openapi/yamllint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/openscad/sca2d.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/perl/perl.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/perl/perlcritic.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/perl6/perl6.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/cspell.vim delete mode 100755 dotfiles/.vim/plugged/ale/ale_linters/php/intelephense.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/langserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/phan.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/php.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/phpactor.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/phpcs.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/phpmd.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/phpstan.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/psalm.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/php/tlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/po/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/po/msgfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/po/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/po/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/pod/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/pod/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/pod/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/pony/ponyc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/powershell/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/powershell/powershell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/powershell/psscriptanalyzer.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/prolog/swipl.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/proto/buf_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/proto/protoc_gen_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/proto/protolint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/pug/puglint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/puppet/languageserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/puppet/puppet.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/puppet/puppetlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/purescript/ls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/pyrex/cython.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/bandit.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/flake8.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/flakehell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/jedils.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/mypy.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/prospector.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/pycodestyle.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/pydocstyle.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/pyflakes.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/pylama.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/pylint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/pylsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/pyre.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/pyright.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/unimport.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/python/vulture.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/qml/qmlfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/qml/qmllint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/r/languageserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/r/lintr.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/racket/langserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/racket/raco.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/reason/ls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/reason/merlin.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/reason/ols.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rego/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rego/opacheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/review/redpen.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/robot/rflint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rst/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rst/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rst/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rst/redpen.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rst/rstcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rst/textlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rst/vale.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rst/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/brakeman.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/debride.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/rails_best_practices.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/reek.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/rubocop.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/ruby.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/solargraph.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/sorbet.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/ruby/standardrb.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rust/analyzer.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rust/cargo.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rust/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rust/rls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/rust/rustc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/salt/salt_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sass/sasslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sass/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scala/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scala/fsc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scala/metals.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scala/sbtserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scala/scalac.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scala/scalastyle.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scss/sasslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scss/scsslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/scss/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sh/bashate.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sh/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sh/language_server.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sh/shell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sh/shellcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/slim/slimlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj_cm.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/solidity/solc.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/solidity/solhint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/solidity/solium.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/spec/rpmlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sql/sqlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sql/sqllint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/stylus/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/sugarss/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/svelte/svelteserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/swift/appleswiftformat.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/swift/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/swift/sourcekitlsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/swift/swiftlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/systemd/systemd_analyze.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tcl/nagelfar.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/terraform/checkov.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_ls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_lsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/terraform/tflint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/terraform/tfsec.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/testft/testlinter.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/chktex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/lacheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/redpen.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/texlab.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/textlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/vale.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/tex/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/texinfo/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/texinfo/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/texinfo/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/texinfo/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/text/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/text/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/text/languagetool.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/text/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/text/redpen.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/text/textlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/text/vale.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/text/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/thrift/thrift.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/thrift/thriftcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/typescript/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/typescript/deno.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/typescript/eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/typescript/standard.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/typescript/tslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/typescript/tsserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/typescript/typecheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/typescript/xo.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/v/v.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vala/vala_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/verilog/hdl_checker.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/verilog/iverilog.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/verilog/verilator.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/verilog/vlog.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/verilog/xvlog.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/verilog/yosys.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vhdl/ghdl.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vhdl/hdl_checker.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vhdl/vcom.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vhdl/xvhdl.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vim/ale_custom_linting_rules.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vim/vimls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vim/vint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vue/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vue/vls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/vue/volar.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/wgsl/naga.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/xhtml/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/xhtml/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/xhtml/proselint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/xhtml/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/xml/xmllint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/yaml/actionlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/yaml/circleci.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/yaml/gitlablint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/yaml/ls.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/yaml/spectral.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/yaml/swaglint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/yaml/yamllint.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/yang/yang_lsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/zeek/zeek.vim delete mode 100644 dotfiles/.vim/plugged/ale/ale_linters/zig/zls.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/ant.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/args.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/assert.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/balloon.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/c.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/code_action.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/codefix.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/command.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/completion.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/completion/python.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/cursor.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/d.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/debugging.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/definition.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/dhall.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/engine.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/engine/ignore.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/events.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/filename_mapping.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/filerename.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/filetypes.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fix.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fix/registry.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/appleswiftformat.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/astyle.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoflake.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoimport.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/autopep8.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/bibclean.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/black.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/brittany.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/buf_format.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/buildifier.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangformat.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangtidy.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/cmakeformat.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/crystal.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/css_beautify.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dart_format.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dartfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/deno.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_format.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_freeze.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dotnet_format.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dprint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/dune.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/elm_format.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/erblint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/erlfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/fecs.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/fish_indent.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/fixjson.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/floskell.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic_python.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/gnatpp.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofumpt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/goimports.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/golines.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/gomod.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/google_java_format.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/hackfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/help.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/hfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/hindent.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/hlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/html_beautify.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/importjs.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/isort.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/jq.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/jsonnetfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/ktlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/latexindent.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/lua_format.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/luafmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/mix_format.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/nimpretty.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixpkgsfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocamlformat.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocp_indent.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/opafmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/ormolu.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/packer.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/pandoc.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/perltidy.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/pgformatter.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/php_cs_fixer.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/phpcbf.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/pint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_standard.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/protolint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/ptop.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/puppetlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/purs_tidy.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/purty.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/pyflyby.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/qmlfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/refmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/remark_lint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/reorder_python_imports.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/rubocop.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/rufo.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/rustfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/scalafmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/shfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/sorbet.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlformat.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/standard.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/standardrb.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/statix.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/styler.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylish_haskell.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylua.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/swiftformat.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/syntax_tree.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/terraform.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/textlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/tidy.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/tslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/uncrustify.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/vfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/xmllint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/xo.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/yamlfix.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/yapf.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/fixers/zigfmt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/floating_preview.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/go.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/gradle.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/gradle/init.gradle delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/actionlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/alex.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/atools.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/ccls.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/cppcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/cpplint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/cspell.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/css.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/deno.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/elixir.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/eslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/fecs.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/flawfinder.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/gawk.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/gcc.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/go.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell_stack.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/hdl_checker.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/hlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/inko.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/ktlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/languagetool.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/markdownlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/naga.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/ocamllsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/ols.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/openscad.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/pony.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/redpen.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/ruby.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/rust.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/scala.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/sh.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/shellcheck.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/sml.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/solhint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/spectral.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/statix.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/textlint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/tslint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/tsserver.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/unix.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/vale.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/writegood.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/xo.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/handlers/yamllint.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/highlight.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/history.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/hover.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/java.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/job.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/julia.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/linter.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/list.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/loclist_jumping.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/lsp.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/lsp/message.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/lsp/reset.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/lsp/response.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/lsp/tsserver_message.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/lsp_linter.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/lsp_window.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/maven.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/node.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/organize_imports.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/other_source.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/path.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/pattern_options.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/powershell.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/preview.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/python.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/racket.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/references.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/rename.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/ruby.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/semver.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/sign.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/socket.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/statusline.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/swift.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/symbol.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/test.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/toggle.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/uri.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/uri/jdt.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/util.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/ale/virtualtext.vim delete mode 100644 dotfiles/.vim/plugged/ale/autoload/asyncomplete/sources/ale.vim delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-ada.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-ansible.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-apkbuild.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-asciidoc.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-asm.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-avra.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-awk.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-bats.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-bazel.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-bib.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-bicep.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-bitbake.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-c.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-cairo.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-chef.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-clojure.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-cloudformation.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-cmake.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-cpp.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-cs.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-css.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-cuda.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-d.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-dafny.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-dart.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-desktop.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-development.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-dhall.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-dockerfile.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-elixir.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-elm.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-erlang.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-eruby.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-fish.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-fortran.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-fountain.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-fuse.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-gitcommit.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-glsl.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-go.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-graphql.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-hack.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-handlebars.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-haskell.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-hcl.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-help.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-html.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-idris.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-ink.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-inko.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-ispc.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-java.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-javascript.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-json.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-json5.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-jsonc.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-jsonnet.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-julia.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-kotlin.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-latex.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-less.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-llvm.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-lua.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-markdown.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-mercury.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-nasm.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-nim.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-nix.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-nroff.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-objc.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-objcpp.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-ocaml.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-openapi.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-openscad.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-packer.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-pascal.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-pawn.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-perl.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-perl6.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-php.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-po.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-pod.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-pony.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-powershell.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-prolog.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-proto.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-pug.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-puppet.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-purescript.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-pyrex.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-python.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-qml.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-r.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-reasonml.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-rego.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-restructuredtext.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-robot.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-ruby.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-rust.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-salt.tmt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-sass.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-scala.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-scss.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-sh.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-sml.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-solidity.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-spec.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-sql.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-stylus.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-sugarss.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-supported-languages-and-tools.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-svelte.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-swift.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-systemd.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-tcl.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-terraform.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-tex.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-texinfo.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-text.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-thrift.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-toml.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-typescript.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-v.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-vala.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-verilog.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-vhdl.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-vim-help.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-vim.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-vue.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-wgsl.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-xhtml.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-xml.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-yaml.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-yang.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-zeek.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale-zig.txt delete mode 100644 dotfiles/.vim/plugged/ale/doc/ale.txt delete mode 100644 dotfiles/.vim/plugged/ale/ftplugin/ale-fix-suggest.vim delete mode 100644 dotfiles/.vim/plugged/ale/ftplugin/ale-preview-selection.vim delete mode 100644 dotfiles/.vim/plugged/ale/ftplugin/ale-preview.vim delete mode 100644 dotfiles/.vim/plugged/ale/plugin/ale.vim delete mode 100644 dotfiles/.vim/plugged/ale/rplugin/python3/deoplete/sources/ale.py delete mode 100755 dotfiles/.vim/plugged/ale/run-tests delete mode 100644 dotfiles/.vim/plugged/ale/run-tests.bat delete mode 100644 dotfiles/.vim/plugged/ale/supported-tools.md delete mode 100644 dotfiles/.vim/plugged/ale/syntax/ale-fix-suggest.vim delete mode 100644 dotfiles/.vim/plugged/ale/syntax/ale-preview-selection.vim delete mode 120000 dotfiles/.vim/plugged/ale/test/.config/nvim/init.vim delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_ale_import_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_complete_events.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_completion_events.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_completion_filtering.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_completion_prefixes.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_messages.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_parsing.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_omnifunc_completion.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_public_completion_api.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/completion/test_tsserver_completion_parsing.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fix/test_ale_fix.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_aliases.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion_filter.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_ignore.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_suggest.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_appleswiftformat_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_astyle_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_autoflake_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_autoimport_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_autopep8_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_bibclean_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_black_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_break_up_long_lines_python_fixer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_brittany_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_buf_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_buildifier_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_clangformat_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_clangtidy_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_cmakeformat_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_crystal_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_css_beautify_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dart_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dartfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dhall_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dhall_freeze_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dhall_lint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dotnet_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dprint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_dune_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_elm_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_erblint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_erlfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_eslint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_fecs_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_fish_indent_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_fixjson_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_floskell_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_gnatpp_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_gofmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_gofumpt_fixer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_goimports_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_golines_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_gomod_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_goofle_java_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_hackfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_hfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_hindent_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_hlint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_html_beautify_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_importjs_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_isort_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_jq_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_jsonnetfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_ktlint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_latexindent_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_lua_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_luafmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_mix_format_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_nimpretty_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_nixfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_nixpkgsfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_ocamlformat_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_ocp_indent_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_opa_fmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_ormolu_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_packer_fmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_pandoc_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_perltidy_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_pgformatter_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_php_cs_fixer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_phpcbf_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_pint_fixer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_prettier_eslint_fixer.callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_prettier_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_prettier_standard_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_protolint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_ptop_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_puppetlint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_purs_tidy_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_purty_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_pyflyby_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_python_add_blank_lines_fixer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_qmlfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_refmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_remark_lint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_reorder_python_imports_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_rubocop_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_rufo_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_rustfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_scalafmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_shfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_sorbet_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_sqlfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_sqlformat_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_standard_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_standardrb_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_statix_fixer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_stylelint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_styler_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_stylish_haskell_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_stylua_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_swiftformat_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_syntax_tree_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_terraform_fmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_textlint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_tidy_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_trim_whitespace.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_tslint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_uncrustify_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_vfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_vim_help_tags_alignment_fixer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_xmllint_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_xo_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_xots_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_yamlfix_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_yapf_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/fixers/test_zigfmt_fixer_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_actionlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ada_gcc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_alex_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ameba_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ansible_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_appleswiftformat_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_asm_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_atools_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_avra_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_bandit_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_bashate_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_bibclean_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_bicep_bicep_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_bitbake_oelint_adv_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_brakeman_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cfn_python_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_checkmake_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_checkov_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_checkstyle_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_circleci_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_clang_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_clojure_clj_kondo_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_clojure_joker_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cmake_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_coffeelint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_common_handlers.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cookstyle_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cppcheck_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cpplint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_credo_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_crystal_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_csc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cspell_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cucumber_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cuda_nvcc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_cypher_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_dafny_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_dart_analyze_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_debride_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_desktop_file_validate_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_dmd_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_dockerfile_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_dogma_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_drafter_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_elmmake_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_embertemplatelint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_erblint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_erlang_dialyzer_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_erlang_elvis_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_eslint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_eslint_json_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_fecs_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_fish_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_flake8_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_flakehell_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_flawfinder_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_flow_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_foodcritic_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_fortran_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_gawk_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_gcc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ghc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ghc_mod_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ghdl_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_gitlablint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_gitlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_glslang_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_go_generic_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_gobuild_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_golangci_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_gometalinter_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_hadolint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_haskell_stack_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_hlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ibm_openapi_validator_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_idris_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_inko_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ispc_ispc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_javac_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_jscs_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ktlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_lacheck_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_languagetool_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_lessc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_llc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_lua_selene_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_luac_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_luacheck_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_markdownlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_mcs_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_mcsc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_mdl_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_mercury_mmc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_mix_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_msgfmt_hander.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_mypy_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_naga_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_nagelfar_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_nasm_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_nim_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_nix_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_openscad_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_perl6_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_perl_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_perlcritic_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_php_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_php_phan_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_php_phpmd_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_phpcs_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_phpstan_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_pmd_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_pony_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_powershell_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_prospector_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_psscriptanalyzer_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_puglint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_puppet_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_pycodestyle_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_pydocstyle_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_pyflakes_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_pylama_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_pylint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_pyrex_cython_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_qmlfmt_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_qmllint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_raco_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_rails_best_practices_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_redpen_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_reek_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_remark_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_rflint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_rpmlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_rstcheck_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_rubocop_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_ruby_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_rust_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_salt_salt_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_scala_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_scalastyle_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_shell_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_shellcheck_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_slim_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_sml_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_solc_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_solhint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_spectral_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_sqlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_sqllint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_standard_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_starknet_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_statix_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_stylelint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_swaglint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_swiftlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_swipl_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_syntaxerl_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_systemd_analyze_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_terraform_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_textlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_tflint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_tfsec_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_thrift_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_thriftcheck_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_tlint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_tslint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_typecheck_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_unimport_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_v_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_vala_lint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_vale_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_vcom_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_verilator_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_vint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_vlog_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_vulture_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_write_good_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_xmllint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_xvhdl_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_xvlog_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_yamllint_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_yosys_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/handler/test_zeek_handler.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/jsonnet_files/testfile.jsonnet delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ada_gcc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_adals.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_alex.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ameba.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_angular.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ansible_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_asciidoc_textlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_asm_gcc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_avra_avra.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_bandit.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_bashate.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_bib_bibclean.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_bicep_bicep.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_bingo.vader delete mode 100755 dotfiles/.vim/plugged/ale/test/linter/test_bitbake.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_brakeman.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_buf_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_c_cc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_c_ccls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_c_clang_tidy.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_c_clangd.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_c_cppcheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_c_cquery.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_c_flawfinder.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_c_import_paths.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cargo.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_checkov.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_checkstyle.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_circleci.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_clang_tidy.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_clj_kondo.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cmake_cmake_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cookstyle.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cpp_cc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cpp_ccls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cpp_clangcheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cpp_clazy.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cpp_cppcheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cpp_cquery.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cpp_flawfinder.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cpplint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cs_csc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cs_mcs.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cs_mcsc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cspell.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cucumber.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cuda_nvcc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_cypher_cypher_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_d_dls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_dart_analysis_server.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_dart_language_server.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_desktop_file_validate.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_dialyxir.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_dmd_commandline.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_dockerfile_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_dogma.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_eclipselsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_elixir_credo.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_elixir_ls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_elixir_mix.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_elm_ls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_elm_make.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_embertemplatelint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_erb.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_erblint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_erlang_dialyzer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_erlang_elvis.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_erlang_erlc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_erlang_syntaxerl.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_erubi.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_erubis.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_eslint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_fecs.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_flake8.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_flakehell.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_flow.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_foodcritic.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_fortran_fortls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_fsc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_fusionlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gawk.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gfortran.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ghdl.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gitlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_glslang.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_glslls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gobuild.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gofmt.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_golangci_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_golangserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_golint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gometalinter.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gopls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gosimple.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_gotype.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_govet.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_graphql_gqlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haml_hamllint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_cabal_ghc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc_mod.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_hdevtools.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_hie.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_hlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_hls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_build.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_ghc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_hdl_checker_options.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_html_stylelint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_htmlhint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ibm_openapi_validator.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_idris.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ink_ls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_inko_inko.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ispc_ispc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_iverilog.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_javac.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_javalsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_javascript_deno_lsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_javascript_tsserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_jq.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_jscs.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_jshint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_jsonnet_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_jsonnetfmt.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_julia_languageserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_kotlin_languageserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_kotlinc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_languagetool.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_less_stylelint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_lessc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_lintr.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_llc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_lua_selene.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_luac.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_luacheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_markdown_markdownlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_markdown_mdl.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_markdown_vale.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_mercury_mmc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_mypy.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_naga.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_nagelfar.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_nasm_nasm.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_nimlsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_nix_statix.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_objc_ccls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ocamllsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ols.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ocamlinterface_ocamllsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_openscad_sca2d.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_perl.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_perl6.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_perlcritic.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_php.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_php_intelephense.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_php_langserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_phpactor.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_phpcs.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_phpmd.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_phpstan.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pony_ponyc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_prospector.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_proto.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_protolint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_psalm.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_puglint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_purescript_ls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pycodestyle.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pydocstyle.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pyflakes.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pylama.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pylint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pylsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pyre.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pyrex_cython.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_pyright.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_qmlfmt.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_r_languageserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_racket_langserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_racket_raco.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rails_best_practices.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_reason_ls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_reason_ols.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_reek.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rego_opacheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_remark_lint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_revive.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rflint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rnix.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rst_textlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rubocop.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ruby.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ruby_debride.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ruby_solargraph.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rust_analyzer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rust_rls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_rustc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_ruumba.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_sass_sasslint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_scala_metals.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_scala_sbtserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_scalac.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_scalastyle.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_scss_sasslint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_scss_stylelint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_shellcheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_slimlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_solc.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_solc_commit.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_solhint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_sorbet.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_spectral.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_sqllint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_standard.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_standardrb.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_standardts.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_starknet.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_staticcheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_sugarss_stylelint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_svelteserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_swaglint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_swift_appleswiftformat.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_swift_sourcekitlsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_swiftlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_systemd_analyze.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_terraform_ls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_terraform_lsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_terraform_terraform.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_terraform_tflint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_terraform_tfsec.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_tex_lacheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_tex_textlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_texlab.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_textlint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_thrift.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_thriftcheck.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_tslint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_typescript_deno_lsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_typescript_tsserver.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_unimport.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_v_command_callback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_vcom.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_verilator.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_vim_vimls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_vint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_vlog.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_volar.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_vulture.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_write_good.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_xmllint.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_xo.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_xots.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_xvhdl.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_xvlog.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_yaml_ls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_yang_lsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_zeek.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/linter/test_zig_zls.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_closing_documents.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_did_save_event.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_engine_lsp_response_handling.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_handling_window_requests.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_lsp_client_messages.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_lsp_command_formatting.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_lsp_connections.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_lsp_custom_request.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_lsp_error_parsing.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_lsp_root_detection.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_lsp_startup.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_other_initialize_message_handling.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_read_lsp_diagnostics.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_reset_lsp.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/lsp/test_update_config.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/python/test_deoplete_source.py delete mode 100755 dotfiles/.vim/plugged/ale/test/script/block-padding-checker delete mode 100755 dotfiles/.vim/plugged/ale/test/script/check-duplicate-tags delete mode 100755 dotfiles/.vim/plugged/ale/test/script/check-supported-tools-tables delete mode 100755 dotfiles/.vim/plugged/ale/test/script/check-tag-alignment delete mode 100755 dotfiles/.vim/plugged/ale/test/script/check-tag-references delete mode 100755 dotfiles/.vim/plugged/ale/test/script/check-toc delete mode 100755 dotfiles/.vim/plugged/ale/test/script/custom-checks delete mode 100755 dotfiles/.vim/plugged/ale/test/script/custom-linting-rules delete mode 100644 dotfiles/.vim/plugged/ale/test/script/dumb_named_pipe_server.py delete mode 100644 dotfiles/.vim/plugged/ale/test/script/dumb_tcp_client.py delete mode 100644 dotfiles/.vim/plugged/ale/test/script/dumb_tcp_server.py delete mode 100755 dotfiles/.vim/plugged/ale/test/script/run-vader-tests delete mode 100755 dotfiles/.vim/plugged/ale/test/script/run-vint delete mode 100644 dotfiles/.vim/plugged/ale/test/sign/test_linting_sets_signs.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/sign/test_sign_column_highlighting.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/sign/test_sign_limits.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/sign/test_sign_parsing.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/sign/test_sign_placement.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/smoke_test.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/.circleci/config.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/.gitignore delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ada/testfile.adb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/alex/node-modules-2/node_modules/alex/cli.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/alex/node-modules/node_modules/.bin/alex delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/angular/node_modules/@angular/language-server/bin/ngserver delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/angular/node_modules/@angular/language-service/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ant/ant-project/build.xml delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/ant/bin/ant delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/ant/bin/ant.exe delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/bazel/BUILD delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/bazel/WORKSPACE delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/bazel/defs.bzl delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/bib/dummy.bib delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/build_compile_commands_project/build/bad_folder_to_test_priority delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/build_compile_commands_project/build/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/Makefile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/configure delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/include/test.h delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/subdir/Makefile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/dummy.c delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/git_and_nested_makefiles/include/test.h delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/git_and_nested_makefiles/src/Makefile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/gnumakefile_project/GNUmakefile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/gnumakefile_project/file.c delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/Makefile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/subdir/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/test.h delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/Makefile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/subdir/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/test.hpp delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/json_project/build/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/json_project/include/test.h delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/json_project/subdir/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/Makefile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/_astylerc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/args delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/include/test.h delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/args delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/file.c delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cargo/Cargo.toml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cargo/workspace_paths/Cargo.toml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cargo/workspace_paths/subpath/Cargo.toml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ccls/with_build_dir/unusual_build_dir_name/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ccls/with_ccls-root/.ccls-root delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ccls/with_ccls/.ccls delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ccls/with_compile_commands_json/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/checkstyle/other_config.xml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/clangd/with_build_dir/unusual_build_dir_name/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/clangd/with_compile_commands/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/clangformat/with_clangformat/.clang-format delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cpp/.astylerc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cpp/dummy.cpp delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/two/three/file.c delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/two/three/file.cpp delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cppcheck/with_build_dir/build/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cquery/build/compile_commands.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cquery/with_cquery/.cquery delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/cspell/node-modules-2/node_modules/cspell/bin.js delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/cspell/node-modules/node_modules/.bin/cspell delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/csslint/other-app/testfile.css delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/csslint/some-app/.csslintrc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/csslint/some-app/subdir/testfile.css delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cucumber/features/cuke.feature delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/cucumber/features/step_definitions/base_steps.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/d/test.d delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/dart/.packages delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/dart/testfile.dart delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/dprint/blank.ts delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/dprint/dprint.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/lib/app.ex delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/mix.exs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elixir/testfile.ex delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app1/lib/app.ex delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app1/mix.exs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app2/lib/app.ex delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app2/mix.exs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/mix.exs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/elm.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/node_modules/.bin/elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/tests/TestMain.elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/elm.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/node_modules/.bin/elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/node_modules/.bin/elm-test delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/src/Main.elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/tests/TestSuite.elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/node_modules/.bin/elm-format delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/elm-package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/node_modules/.bin/elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/node_modules/.bin/elm-test delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/src/Main.elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/tests/TestSuite.elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/elm/src/subdir/testfile.elm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eruby/dummy.html.erb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/app-with-eslint-d/node_modules/.bin/eslint_d delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/node_modules/.bin/eslint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/other-app/subdir/testfile.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/.eslintrc.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/eslint/bin/eslint.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/standard/bin/cmd.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/stylelint/bin/stylelint.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/xo/cli.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-config/.eslintrc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-package-json/node_modules/.gitkeep delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-package-json/package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.css delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.ts delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/yarn2-app/.yarn/sdks/eslint/bin/eslint.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/eslint/yarn2-app/subdir/testfile.js delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/fecs/fecs delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/fecs/fecs.exe delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/fish/testfile.fish delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/flow/a/.flowconfig delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/flow/a/sub/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/flow/b/sub/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/fortls-project/.fortls delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/go/go.mod delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/go/go1/prj1/file.go delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/go/go2/prj2/file.go delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/go/gopath/bin/gopls delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/go/gopath/bin/staticcheck delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/go/testfile.go delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/go/testfile2.go delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/build-gradle-project/build.gradle delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/build-gradle-project/src/main/kotlin/dummy.kt delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/gradle/gradle delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/non-gradle-project/src/main/kotlin/dummy.kt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/settings-gradle-project/settings.gradle delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/settings-gradle-project/src/main/kotlin/dummy.kt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/build.gradle delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/settings.gradle delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/src/main/kotlin/dummy.kt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/build.gradle delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/gradlew delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/settings.gradle delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/src/main/kotlin/dummy.kt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/.haml-lint.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/.rubocop.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/subdir/file.haml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-yml/.haml-lint.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-yml/subdir/file.haml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hamllint/rubocop-yml/.rubocop.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hamllint/rubocop-yml/subdir/file.haml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hdl_server/foo.vhd delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/.hdl_checker.config delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/_hdl_checker.config delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/foo.vhd delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_git/files/foo.vhd delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/hie_paths/file.hs delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/html_beautify/html-beautify delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/html_beautify/test.html delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/htmlhint/node_modules/.bin/htmlhint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/htmlhint/with_config/.htmlhintrc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ink/story/main.ink delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/inko/test.inko delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/inko/tests/test/test_foo.inko delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/java/no_main/src/test/java/com/something/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/java/with_jaxb/src/main/java/com/something/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/java/with_jaxb/src/main/jaxb/com/something/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/java/with_main/build/gen/main/java/com/something/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/java/with_main/build/gen2/main/java/com/something/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/java/with_main/src/main/java/com/something/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/java/with_main/src/test/java/com/something/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/javascript/test.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/custom_import_map.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/import_map.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/main.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/tsconfig.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/json/testfile.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app-without-jsonlint/src/app.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app/node_modules/.bin/jsonlint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app/src/app.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/jsonlint/node_modules/jsonlint/lib/cli.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/julia/REQUIRE delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/julia/test.jl delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/kotlin/testfile.kt delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/lessc/node_modules/.bin/lessc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/long-line/setup.cfg delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/lua/testfile.lua delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/markdown/testfile.md delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/mvnw delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/mvnw.cmd delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/pom.xml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/src/main/java/dummy1.java delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/pom.xml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/src/main/java/dummy2.java delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/pom.xml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/src/main/kotlin/dummy.kt delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/maven/mvn delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/maven/non-maven-project/src/main/java/dummy.java delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/nim/with-git/src/source.nim delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ocaml/testfile.ml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ocamllsp/dune-project delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ols/.merlin delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ols/node_modules/.bin/ocaml-language-server delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/pascal/test.pas delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-with-php-cs-fixer/test.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-with-php-cs-fixer/vendor/bin/php-cs-fixer delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-with-phpcbf/foo/test.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-with-phpcbf/vendor/bin/phpcbf delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-with-pint/test.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-with-pint/vendor/bin/pint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-without-php-cs-fixer/test.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-without-phpcbf/foo/test.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/project-without-pint/test.php delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/php/vendor/bin/php-language-server.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/php/with-composer/composer.json delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/php/with-composer/vendor/bin/php-language-server.php delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/php/with-git/vendor/bin/php-language-server.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-with-phpcs/foo/test.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-with-phpcs/vendor/bin/phpcs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-without-phpcs/foo/test.php delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.css delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.scss delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.ts delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/with_config/.prettierrc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/with_config/testfile.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/with_prettierignore/.prettierignore delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/prettier/with_prettierignore/src/testfile.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/proto/testfile.proto delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/psalm/vendor/bin/psalm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puglint/node_modules/.bin/pug-lint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puglint/package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_dir/.pug-lintrc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_js_dir/.pug-lintrc.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_json_dir/.pug-lintrc.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puppet/dummy.pp delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/lib/puppet/types/exampletype.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/metadata.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/template/template.epp delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puppet/old-style-module/manifests/init.pp delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/puppet/old-style-module/templates/template.epp delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/purescript/bower/Foo.purs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/purescript/bower/bower.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/purescript/psc-package/Foo.purs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/purescript/psc-package/psc-package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/purescript/spago/Foo.purs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/purescript/spago/spago.dhall delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/MANIFEST.in delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/namespace/foo/__init__.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/namespace/foo/bar.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/namespace/foo/__init__.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/namespace/foo/bar.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/pytest.ini delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/namespace/foo/__init__.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/namespace/foo/bar.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/setup.cfg delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/namespace/foo/__init__.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/namespace/foo/bar.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/tox.ini delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/COMMIT_EDITMSG delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/__init__.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/bar.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/pipenv/Pipfile.lock delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/poetry/poetry.lock delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/.pyre_configuration.local delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/foo/__init__.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/foo/bar.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/python-package-project/.flake8 delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/python-package-project/package-name/module.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/.bandit delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/namespace/foo/__init__.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/namespace/foo/bar.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/mypy.ini delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/tests/pytest.ini delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/tests/testsubfolder/my_tests.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/dir_with_yapf_config/.style.yapf delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/activate delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autoflake.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autoimport.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autopep8.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/black.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/flake8.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/flakehell.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/gitlint.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/isort.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/mypy.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pyflakes.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylama.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylint.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylsp.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pyre.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/reorder-python-imports.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/tidy-imports.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/unimport.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/vulture.exe delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/yamlfix.exe delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/yapf.exe delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/activate delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autoflake delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autoimport delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autopep8 delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/black delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/flake8 delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/flakehell delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/gitlint delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/isort delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/mypy delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pyflakes delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylama delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylint delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylsp delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pyre delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/reorder-python-imports delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/tidy-imports delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/unimport delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/vulture delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/yamlfix delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/yapf delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/COMMIT_EDITMSG delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/__init__.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/bar.py delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/bar.pyi delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/r/.Rprofile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/foo.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/init.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/foo.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/init.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/foo.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/init.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/foo.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/init.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/racket/simple-script/foo.rkt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/reasonml/bsconfig.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/reasonml/testfile.re delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/remark_lint/with_bin_path/node_modules/.bin/remark delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/dummy.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/not_a_rails_app/file.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/dummy.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/models/thing.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/views/my_great_view.html.erb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/config/dummy.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/db/dummy.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app1/Rakefile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app1/lib/file.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app2/Gemfile delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app2/lib/file.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app3/.solargraph.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app3/lib/file.rb delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/with_config/.rubocop.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/ruby/with_config/.standard.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/rust/cargo/Cargo.toml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/rust/cargo/testfile.rs delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/rust/rust-project/rust-project.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/rust/rust-project/testfile.rs delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/sasslint/with-bin/node_modules/.bin/sass-lint delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/sasslint/with-source/node_modules/sass-lint/bin/sass-lint.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/scala/dummy.scala delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/scala/invalid_sbt_project/Main.scala delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/scala/valid_sbt_project/Main.scala delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/scala/valid_sbt_project/build.sbt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/slimlint/.rubocop.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/slimlint/subdir/file.slim delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/foo.sml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/path/to/bar.sml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/sources.cm delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/smlnj/file/qux.sml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/solhint/Contract.sol delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/solhint/node_modules/.bin/solhint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/solhint/node_modules/solhint/index.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/solhint/package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/spectral/node_modules/.bin/spectral delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/spectral/openapi.yaml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/stack/stack.yaml delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/standard/with-bin/node_modules/.bin/standard delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/standard/with-cmd/node_modules/standard/bin/cmd.js delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/stylelint/node_modules/.bin/stylelint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swaglint/docs/swagger.yaml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swaglint/node_modules/.bin/swaglint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swift/dummy.swift delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swift/non-swift-package-project/src/folder/dummy.swift delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/.swift-format delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/Package.swift delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/src/folder/dummy.swift delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project/Package.swift delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project/src/folder/dummy.swift delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods-and-react-native/Pods/SwiftLint/swiftlint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods-and-react-native/ios/Pods/SwiftLint/swiftlint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods/Pods/SwiftLint/swiftlint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/swiftlint/react-native/ios/Pods/SwiftLint/swiftlint delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/terraform/.terraform/dummy delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/terraform/main.tf delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tex/sample1.tex delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tex/sample2.tex delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tex/testfile.tex delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/textlint/with_bin_path/node_modules/.bin/textlint delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tflint/foo/.tflint.hcl delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tflint/foo/bar.tf delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tfsec/json/.tfsec/config.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tfsec/json/main.tf delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tfsec/yml/.tfsec/config.yml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tfsec/yml/main.tf delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tidy/.tidyrc delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tidy/test.html delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/tidy/tidy delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/tidy/tidy.exe delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/top/ale-special-directory-name-dont-use-this-please/empty-file delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/top/example.ini delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/top/middle/bottom/dummy.txt delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/file1.ts delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/file2.ts delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/level-2/file3.ts delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/tsconfig.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/tsserver/tsconfig.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/typescript/custom_import_map.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/typescript/import_map.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/typescript/test.ts delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/typescript/tsconfig.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/vim/invalid_vim_project/test.vim delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/vim/node_modules/.bin/vim-language-server delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_autoload/autoload/test.vim delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_autoload/test.vim delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_initvim/init.vim delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_plugin/plugin/test.vim delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_plugin/test.vim delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_vimrc/.vimrc delete mode 100755 dotfiles/.vim/plugged/ale/test/test-files/volar/node_modules/.bin/vue-language-server delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/volar/node_modules/typescript/lib/tsserverlibrary.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/volar/package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/volar/src/App.vue delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/write-good/node-modules-2/node_modules/write-good/bin/write-good.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/write-good/node-modules/node_modules/.bin/write-good delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/node_modules/xo/cli.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/index.js delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/index.ts delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/package.json delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/yaml/test.yaml delete mode 100644 dotfiles/.vim/plugged/ale/test/test-files/zig/build.zig delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ale_has.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ale_info.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ale_info_to_clipboard.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ale_lint_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ale_lint_stop_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ale_populate_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ale_toggle.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ale_var.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_alejobstarted_autocmd.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_alelint_autocmd.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ant_build_classpath_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ant_find_project_root.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_autocmd_commands.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_backwards_compatibility.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_balloon_messages.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_c_flag_parsing.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_checkingbuffer_autocmd.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_cleanup.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_code_action.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_code_action_corner_cases.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_code_action_python.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_codefix.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_computed_lint_file_values.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_csslint_config_detection.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_cursor_warnings.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_deferred_command_string.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_deferred_executable_string.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_deno_executable_detection.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_disabling_ale.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_dockerfile_hadolint_linter.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_env_function.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_errors_removed_after_filetype_changed.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_filename_mapping.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_filerename.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_filetype_linter_defaults.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_filetype_mapping.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_find_nearest_directory.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_find_references.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_floating_preview.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_format_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_format_temporary_file_creation.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_function_arg_count.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_fuzzy_json_decode.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_get_abspath.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_get_loclist.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_getmatches.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_go_to_definition.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_gradle_build_classpath_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_gradle_find_executable.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_gradle_find_project_root.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_helptags.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_highlight_placement.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_highlight_position_chunking.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_history_saving.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_hover.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_hover_parsing.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_ignoring_linters.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_jq_linter.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_jsonlint_executable_detection.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_line_join.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_lint_file_linters.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_lint_on_enter_when_file_changed.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_lint_on_filetype_changed.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_linter_defintion_processing.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_linter_retrieval.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_linter_type_mapping.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_linting_blacklist.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_linting_updates_loclist.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_list_formatting.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_list_opening.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_list_titles.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_load_all_linters.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_loclist_binary_search.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_loclist_corrections.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_loclist_jumping.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_loclist_sorting.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_maven_build_classpath_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_maven_find_executable.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_maven_find_project_root.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_nearest_file_search.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_nimlsp_project_root.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_no_linting_on_write_quit.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_organize_imports.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_other_sources.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_parse_command_args.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_path_dirname.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_path_equality.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_path_upwards.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_path_uri.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_pattern_options.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_prepare_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_puppet_path_detection.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_python_find_project_root.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_python_pipenv.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_python_poetry.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_python_traceback.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_python_virtualenv.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_quickfix_deduplication.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_quitting_variable.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_redundant_tsserver_rendering_avoided.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_regex_escaping.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_rename.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_resolve_local_path.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_results_not_cleared_when_opening_loclist.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_sandbox_execution.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_semver_utils.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_set_list_timers.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_setting_loclist_from_another_buffer.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_setting_problems_found_in_previous_buffers.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_shell_detection.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_should_do_nothing_conditions.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_sml_command.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_socket_connections.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_statusline.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_swift_find_project_root.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_symbol_search.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_temporary_file_management.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_tmpdir_wrapper.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_vim8_processid_parsing.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_windows_escaping.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_wrap_comand.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/test_writefile_function.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/util/test_cd_string_commands.vader delete mode 100644 dotfiles/.vim/plugged/ale/test/v_files/testfile.v delete mode 100644 dotfiles/.vim/plugged/ale/test/vimrc delete mode 100644 dotfiles/.vim/plugged/ansible-vim/.gitrepo delete mode 100644 dotfiles/.vim/plugged/ansible-vim/LICENSE delete mode 100644 dotfiles/.vim/plugged/ansible-vim/README.md delete mode 100644 dotfiles/.vim/plugged/ansible-vim/UltiSnips/.gitignore delete mode 100644 dotfiles/.vim/plugged/ansible-vim/UltiSnips/README.md delete mode 100755 dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.py delete mode 100755 dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.sh delete mode 100644 dotfiles/.vim/plugged/ansible-vim/ftdetect/ansible.vim delete mode 100644 dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible.vim delete mode 100644 dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible_hosts.vim delete mode 100644 dotfiles/.vim/plugged/ansible-vim/indent/ansible.vim delete mode 100644 dotfiles/.vim/plugged/ansible-vim/syntax/ansible.vim delete mode 100644 dotfiles/.vim/plugged/ansible-vim/syntax/ansible_hosts.vim delete mode 100644 dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim delete mode 100644 dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim_LICENSE delete mode 100644 dotfiles/.vim/plugged/coc.nvim/.gitignore delete mode 100644 dotfiles/.vim/plugged/coc.nvim/.gitrepo delete mode 100644 dotfiles/.vim/plugged/coc.nvim/LICENSE.md delete mode 100644 dotfiles/.vim/plugged/coc.nvim/Readme.md delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/api.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/client.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/color.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/compat.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/cursor.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/dialog.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/dict.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/float.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/helper.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/highlight.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/list.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/math.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/notify.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/prompt.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/pum.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/rpc.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/snippet.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/string.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/task.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/terminal.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/ui.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/util.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/vtext.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/coc/window.vim delete mode 100644 dotfiles/.vim/plugged/coc.nvim/autoload/health/coc.vim delete mode 100755 dotfiles/.vim/plugged/coc.nvim/bin/fuzzy.wasm delete mode 100644 dotfiles/.vim/plugged/coc.nvim/bin/prompt.js delete mode 100755 dotfiles/.vim/plugged/coc.nvim/bin/strwidth.wasm delete mode 100755 dotfiles/.vim/plugged/coc.nvim/bin/terminateProcess.sh delete mode 100644 dotfiles/.vim/plugged/coc.nvim/build/index.js delete mode 100644 dotfiles/.vim/plugged/coc.nvim/data/schema.json delete mode 100644 dotfiles/.vim/plugged/coc.nvim/doc/coc-config.txt delete mode 100644 dotfiles/.vim/plugged/coc.nvim/doc/coc.txt delete mode 100644 dotfiles/.vim/plugged/coc.nvim/history.md delete mode 100644 dotfiles/.vim/plugged/coc.nvim/lua/coc/highlight.lua delete mode 100644 dotfiles/.vim/plugged/coc.nvim/package.json delete mode 100644 dotfiles/.vim/plugged/coc.nvim/plugin/coc.vim delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/.gitignore delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/.gitrepo delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/LICENSE delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/Makefile delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/README.md delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/ftdetect/Dockerfile.vim delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/ftdetect/docker-compose.vim delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/ftplugin/Dockerfile.vim delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/ftplugin/docker-compose.vim delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/indent/Dockerfile.vim delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/snippets/Dockerfile.snippets delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/snippets/docker-compose.snippets delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/syntax/Dockerfile.vim delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/syntax/docker-compose.vim delete mode 100644 dotfiles/.vim/plugged/dockerfile.vim/vim-dockerfile-example.png delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/.appveyor.yml delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/.editorconfig delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/.gitignore delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/.gitmodules delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/.gitrepo delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/.travis.yml delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/CONTRIBUTORS delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/LICENSE delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/LICENSE.PSF delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/README.md delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig.vim delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core.vim delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/fnmatch.vim delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/handler.vim delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/ini.vim delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/util.vim delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/doc/editorconfig.txt delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/mkzip.sh delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/plugin/editorconfig.vim delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/tests/core/CMakeLists.txt delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/tests/core/CTestCustom.cmake delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvbslib.vbs delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvimlib.ps1 delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig.bat delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig1.vbs delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig2.ps1 delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.bat delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.sh delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/.gitignore delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile.lock delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Rakefile delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/.editorconfig delete mode 100644 dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/editorconfig_spec.rb delete mode 100755 dotfiles/.vim/plugged/editorconfig-vim/tests/travis-test.sh delete mode 100644 dotfiles/.vim/plugged/fzf.vim/.gitattributes delete mode 100644 dotfiles/.vim/plugged/fzf.vim/.github/FUNDING.yml delete mode 100644 dotfiles/.vim/plugged/fzf.vim/.github/ISSUE_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/fzf.vim/.gitignore delete mode 100644 dotfiles/.vim/plugged/fzf.vim/.gitrepo delete mode 100644 dotfiles/.vim/plugged/fzf.vim/LICENSE delete mode 100644 dotfiles/.vim/plugged/fzf.vim/README.md delete mode 100644 dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim.vim delete mode 100644 dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim/complete.vim delete mode 100755 dotfiles/.vim/plugged/fzf.vim/bin/preview.rb delete mode 100755 dotfiles/.vim/plugged/fzf.vim/bin/preview.sh delete mode 100755 dotfiles/.vim/plugged/fzf.vim/bin/tagpreview.sh delete mode 100755 dotfiles/.vim/plugged/fzf.vim/bin/tags.pl delete mode 100644 dotfiles/.vim/plugged/fzf.vim/doc/fzf-vim.txt delete mode 100644 dotfiles/.vim/plugged/fzf.vim/plugin/fzf.vim delete mode 100644 dotfiles/.vim/plugged/fzf/.github/FUNDING.yml delete mode 100644 dotfiles/.vim/plugged/fzf/.github/ISSUE_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/fzf/.github/dependabot.yml delete mode 100644 dotfiles/.vim/plugged/fzf/.github/workflows/codeql-analysis.yml delete mode 100644 dotfiles/.vim/plugged/fzf/.github/workflows/linux.yml delete mode 100644 dotfiles/.vim/plugged/fzf/.github/workflows/macos.yml delete mode 100644 dotfiles/.vim/plugged/fzf/.gitignore delete mode 100644 dotfiles/.vim/plugged/fzf/.gitrepo delete mode 100644 dotfiles/.vim/plugged/fzf/.goreleaser.yml delete mode 100644 dotfiles/.vim/plugged/fzf/.rubocop.yml delete mode 100644 dotfiles/.vim/plugged/fzf/.tool-versions delete mode 100644 dotfiles/.vim/plugged/fzf/ADVANCED.md delete mode 100644 dotfiles/.vim/plugged/fzf/BUILD.md delete mode 100644 dotfiles/.vim/plugged/fzf/CHANGELOG.md delete mode 100644 dotfiles/.vim/plugged/fzf/Dockerfile delete mode 100644 dotfiles/.vim/plugged/fzf/LICENSE delete mode 100644 dotfiles/.vim/plugged/fzf/Makefile delete mode 100644 dotfiles/.vim/plugged/fzf/README-VIM.md delete mode 100644 dotfiles/.vim/plugged/fzf/README.md delete mode 100755 dotfiles/.vim/plugged/fzf/bin/fzf-tmux delete mode 100644 dotfiles/.vim/plugged/fzf/doc/fzf.txt delete mode 100644 dotfiles/.vim/plugged/fzf/go.mod delete mode 100644 dotfiles/.vim/plugged/fzf/go.sum delete mode 100755 dotfiles/.vim/plugged/fzf/install delete mode 100644 dotfiles/.vim/plugged/fzf/install.ps1 delete mode 100644 dotfiles/.vim/plugged/fzf/main.go delete mode 100644 dotfiles/.vim/plugged/fzf/man/man1/fzf-tmux.1 delete mode 100644 dotfiles/.vim/plugged/fzf/man/man1/fzf.1 delete mode 100644 dotfiles/.vim/plugged/fzf/plugin/fzf.vim delete mode 100644 dotfiles/.vim/plugged/fzf/shell/completion.bash delete mode 100644 dotfiles/.vim/plugged/fzf/shell/completion.zsh delete mode 100644 dotfiles/.vim/plugged/fzf/shell/key-bindings.bash delete mode 100644 dotfiles/.vim/plugged/fzf/shell/key-bindings.fish delete mode 100644 dotfiles/.vim/plugged/fzf/shell/key-bindings.zsh delete mode 100644 dotfiles/.vim/plugged/fzf/src/LICENSE delete mode 100644 dotfiles/.vim/plugged/fzf/src/algo/algo.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/algo/algo_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/algo/normalize.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/ansi.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/ansi_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/cache.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/cache_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/chunklist.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/chunklist_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/constants.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/core.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/history.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/history_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/item.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/item_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/matcher.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/merger.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/merger_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/options.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/options_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/pattern.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/pattern_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/protector/protector.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/protector/protector_openbsd.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/reader.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/reader_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/result.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/result_others.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/result_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/result_x86.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/terminal.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/terminal_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/terminal_unix.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/terminal_windows.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tokenizer.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tokenizer_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/dummy.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/light.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/light_unix.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/light_windows.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/tcell.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/tcell_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/ttyname_unix.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/ttyname_windows.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/tui.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/tui/tui_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/atomicbool.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/atomicbool_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/chars.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/chars_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/eventbox.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/eventbox_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/slab.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/util.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/util_test.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/util_unix.go delete mode 100644 dotfiles/.vim/plugged/fzf/src/util/util_windows.go delete mode 100644 dotfiles/.vim/plugged/fzf/test/fzf.vader delete mode 100755 dotfiles/.vim/plugged/fzf/test/test_go.rb delete mode 100755 dotfiles/.vim/plugged/fzf/uninstall delete mode 100644 dotfiles/.vim/plugged/lightline.vim/.github/workflows/ci.yaml delete mode 100644 dotfiles/.vim/plugged/lightline.vim/.gitignore delete mode 100644 dotfiles/.vim/plugged/lightline.vim/.gitrepo delete mode 100644 dotfiles/.vim/plugged/lightline.vim/LICENSE delete mode 100644 dotfiles/.vim/plugged/lightline.vim/README.md delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/16color.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/OldHope.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/PaperColor.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/PaperColor_dark.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/PaperColor_light.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow_Night.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow_Night_Blue.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow_Night_Bright.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/Tomorrow_Night_Eighties.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/apprentice.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/ayu_dark.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/ayu_light.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/ayu_mirage.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/darcula.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/default.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/deus.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/jellybeans.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/landscape.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/materia.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/material.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/molokai.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/nord.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/one.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/powerline.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/powerlineish.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/rosepine.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/selenized_black.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/selenized_dark.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/selenized_light.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/selenized_white.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/seoul256.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/simpleblack.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/solarized.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/srcery_drk.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colorscheme/wombat.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/colortable.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/autoload/lightline/tab.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/colorscheme.md delete mode 100644 dotfiles/.vim/plugged/lightline.vim/doc/lightline.txt delete mode 100644 dotfiles/.vim/plugged/lightline.vim/plugin/lightline.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/.themisrc delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/autocmd.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/concatenate.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/error.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/expand.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/highlight.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/link.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/mode.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/onetab.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/popup.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/quickfix.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/subseparator.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/tabline.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/tabs.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/toggle.vim delete mode 100644 dotfiles/.vim/plugged/lightline.vim/test/uniq.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/.github/ISSUE_TEMPLATE/bug.md delete mode 100644 dotfiles/.vim/plugged/nerdtree/.github/ISSUE_TEMPLATE/feature_request.md delete mode 100644 dotfiles/.vim/plugged/nerdtree/.github/ISSUE_TEMPLATE/question.md delete mode 100644 dotfiles/.vim/plugged/nerdtree/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/nerdtree/.github/workflows/vint.yml delete mode 100644 dotfiles/.vim/plugged/nerdtree/.gitignore delete mode 100644 dotfiles/.vim/plugged/nerdtree/.gitrepo delete mode 100644 dotfiles/.vim/plugged/nerdtree/.vintrc.yaml delete mode 100644 dotfiles/.vim/plugged/nerdtree/CHANGELOG.md delete mode 100644 dotfiles/.vim/plugged/nerdtree/LICENCE delete mode 100644 dotfiles/.vim/plugged/nerdtree/README.markdown delete mode 100644 dotfiles/.vim/plugged/nerdtree/_config.yml delete mode 100644 dotfiles/.vim/plugged/nerdtree/autoload/nerdtree.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/autoload/nerdtree/ui_glue.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/doc/NERDTree.txt delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/bookmark.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/creator.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/event.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/flag_set.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/key_map.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/menu_controller.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/menu_item.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/nerdtree.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/notifier.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/opener.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/path.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/tree_dir_node.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/tree_file_node.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/lib/nerdtree/ui.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/nerdtree_plugin/exec_menuitem.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/nerdtree_plugin/fs_menu.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/nerdtree_plugin/vcs.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/plugin/NERD_tree.vim delete mode 100644 dotfiles/.vim/plugged/nerdtree/screenshot.png delete mode 100644 dotfiles/.vim/plugged/nerdtree/syntax/nerdtree.vim delete mode 100644 dotfiles/.vim/plugged/php.vim/.gitrepo delete mode 100644 dotfiles/.vim/plugged/php.vim/README.md delete mode 100644 dotfiles/.vim/plugged/php.vim/attic/0-bootstrap.inc.php delete mode 100644 dotfiles/.vim/plugged/php.vim/attic/10-collect.php delete mode 100644 dotfiles/.vim/plugged/php.vim/attic/20-generate.php delete mode 100644 dotfiles/.vim/plugged/php.vim/attic/30-update.php delete mode 100644 dotfiles/.vim/plugged/php.vim/attic/Dockerfile delete mode 100644 dotfiles/.vim/plugged/php.vim/attic/syntax.ini delete mode 100644 dotfiles/.vim/plugged/php.vim/attic/update.sh delete mode 100644 dotfiles/.vim/plugged/php.vim/syntax/php.vim delete mode 100644 dotfiles/.vim/plugged/python-syntax/.gitrepo delete mode 100644 dotfiles/.vim/plugged/python-syntax/CHANGES.txt delete mode 100644 dotfiles/.vim/plugged/python-syntax/LICENSE delete mode 100644 dotfiles/.vim/plugged/python-syntax/README.rst delete mode 100644 dotfiles/.vim/plugged/python-syntax/TODO.txt delete mode 100644 dotfiles/.vim/plugged/python-syntax/folding-ideas/python.vim.1.13 delete mode 100644 dotfiles/.vim/plugged/python-syntax/folding-ideas/python.vim.1.14 delete mode 100644 dotfiles/.vim/plugged/python-syntax/syntax.txt delete mode 100644 dotfiles/.vim/plugged/python-syntax/syntax/python.vim delete mode 100644 dotfiles/.vim/plugged/python-syntax/test.py delete mode 100644 dotfiles/.vim/plugged/syntastic/.gitignore delete mode 100644 dotfiles/.vim/plugged/syntastic/.gitrepo delete mode 100644 dotfiles/.vim/plugged/syntastic/CONTRIBUTING.md delete mode 100644 dotfiles/.vim/plugged/syntastic/LICENCE delete mode 100644 dotfiles/.vim/plugged/syntastic/README.markdown delete mode 100644 dotfiles/.vim/plugged/syntastic/_assets/screenshot_1.png delete mode 100644 dotfiles/.vim/plugged/syntastic/autoload/syntastic/c.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/autoload/syntastic/log.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/autoload/syntastic/postprocess.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/autoload/syntastic/preprocess.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/autoload/syntastic/util.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/doc/syntastic-checkers.txt delete mode 100644 dotfiles/.vim/plugged/syntastic/doc/syntastic.txt delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/autoloclist.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/balloons.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/checker.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/cursor.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/highlighting.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/loclist.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/modemap.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/notifiers.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/registry.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/plugin/syntastic/signs.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/actionscript/mxmlc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ada/gcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ansible/ansible_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/apiblueprint/drafter.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/applescript/osacompile.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/asciidoc/asciidoc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/asciidoc/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/asl/iasl.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/asm/gcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/bemhtml/bemhtmllint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/bro/bro.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/avrgcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/checkpatch.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/clang_check.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/clang_tidy.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/cppcheck.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/cppclean.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/flawfinder.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/gcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/make.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/oclint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/pc_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/sparse.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/c/splint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cabal/cabal.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/chef/foodcritic.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cmake/cmakelint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/co/coco.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cobol/cobc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/coffee/coffee.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/coffee/coffee_jshint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/coffee/coffeelint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/coq/coqtop.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/avrgcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/clang_check.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/clang_tidy.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/cppcheck.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/cppclean.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/cpplint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/flawfinder.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/gcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/oclint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/pc_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cpp/verapp.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cs/mcs.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/css/csslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/css/mixedindentlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/css/phpcs.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/css/prettycss.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/css/recess.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/css/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cucumber/cucumber.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/cuda/nvcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/d/dmd.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/d/dscanner.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/dart/dartanalyzer.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/docbk/igor.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/docbk/xmllint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/dockerfile/dockerfile_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/dockerfile/hadolint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/dustjs/swiffer.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/elixir/elixir.vim delete mode 100755 dotfiles/.vim/plugged/syntastic/syntax_checkers/erlang/erlang_check_file.erl delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/erlang/escript.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/erlang/syntaxerl.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/eruby/ruby.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/fortran/gfortran.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/glsl/cgc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/go/go.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/go/gofmt.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/go/golangci_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/go/golint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/go/gometalinter.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/go/gotype.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/go/govet.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/haml/haml.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/haml/haml_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/handlebars/handlebars.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/haskell/hdevtools.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/haskell/hlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/haskell/scan.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/haxe/haxe.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/help/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/hss/hss.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/eslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/gjslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/htmlhint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/jshint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/textlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/tidy.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/validator.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/html/w3.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/jade/jade_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/java/checkstyle.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/java/javac.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/closurecompiler.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/eslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/flow.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/gjslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jscs.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jshint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jsl.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/jsxhint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/lynt.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/mixedindentlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/standard.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/javascript/tern_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/json/jsonlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/json/jsonval.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/less/less-lint.coffee delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/less/less-lint.js delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/less/lessc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/less/recess.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/lex/flex.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/limbo/limbo.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/lisp/clisp.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/llvm/llvm.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/lua/luac.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/lua/luacheck.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/markdown/mdl.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/markdown/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/markdown/remark_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/markdown/textlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/matlab/mlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/mercury/mmc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/nasm/nasm.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/nix/nix.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/nroff/igor.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/nroff/mandoc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/nroff/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/objc/gcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/objc/oclint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/objcpp/gcc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/objcpp/oclint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ocaml/camlp4o.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/perl/perl.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/perl/perlcritic.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/perl/podchecker.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/perl6/perl6.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/php/php.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/php/phpcs.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/php/phplint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/php/phpmd.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/php/phpstan.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/po/dennis.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/po/msgfmt.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/pod/podchecker.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/pod/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/pug/pug_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/puppet/puppet.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/puppet/puppetlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/bandit.vim delete mode 100755 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/codec.py delete mode 100755 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/compile.py delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/flake8.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/frosted.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/mypy.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pep257.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pep8.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/prospector.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/py3kwarn.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pycodestyle.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pydocstyle.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pyflakes.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pylama.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/pylint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/python/python.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/qml/qmllint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/r/lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/r/lintr.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/r/svtools.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/racket/code-ayatollah.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/racket/racket.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/raku/raku.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/rmd/lintr.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/rnc/rnv.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/rst/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/rst/rst2pseudoxml.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/rst/rstcheck.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/rst/sphinx.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/flog.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/jruby.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/macruby.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/mri.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/reek.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/rubocop.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/rubylint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/ruby/sorbet.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sass/sass.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sass/sass_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sass/sassc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/scala/fsc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/scala/scalac.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/scala/scalastyle.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/mixedindentlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/sass.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/sass_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/sassc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/scss/scss_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/bashate.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/checkbashisms.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/sh.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/shellcheck.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sh/shfmt.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/slim/slim_lint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/slim/slimrb.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sml/smlnj.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/solidity/solc.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/solidity/solhint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/solidity/solium.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/spec/rpmlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sql/sqlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/sql/tsqllint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/stylus/stylint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/svg/validator.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/svg/w3.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/tcl/nagelfar.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/tex/chktex.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/tex/lacheck.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/tex/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/texinfo/makeinfo.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/texinfo/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/text/atdtool.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/text/igor.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/text/language_check.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/text/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/text/textlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/trig/rapper.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/turtle/rapper.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/turtle/ttl.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/twig/twigcs.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/twig/twiglint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/typescript/eslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/typescript/lynt.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/typescript/tslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/verilog/iverilog.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/verilog/verilator.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/vhdl/ghdl.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/vhdl/vcom.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/vim/vimlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/vim/vint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/vue/eslint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/vue/pug_lint_vue.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/vue/stylelint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/jshint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/proselint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/tidy.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/validator.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xhtml/w3.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xml/plutil.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xml/xmllint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xquery/basex.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/xslt/xmllint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/yacc/bison.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/yaml/jsyaml.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/yaml/yamllint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/yaml/yamlxs.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/yang/pyang.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/yara/yara.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/z80/z80syntaxchecker.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/zpt/zptlint.vim delete mode 100644 dotfiles/.vim/plugged/syntastic/syntax_checkers/zsh/zsh.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/.github/ISSUE_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/vim-airline/.github/workflows/ci.yml delete mode 100644 dotfiles/.vim/plugged/vim-airline/.github/workflows/reviewdog.yml delete mode 100644 dotfiles/.vim/plugged/vim-airline/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-airline/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-airline/CHANGELOG.md delete mode 100644 dotfiles/.vim/plugged/vim-airline/CONTRIBUTING.md delete mode 100644 dotfiles/.vim/plugged/vim-airline/LICENSE delete mode 100644 dotfiles/.vim/plugged/vim-airline/README.md delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/async.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/builder.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/debug.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/ale.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/battery.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/bookmark.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/branch.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/bufferline.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/capslock.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/coc.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/commandt.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/csv.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/ctrlp.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/ctrlspace.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/cursormode.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/default.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/denite.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/dirvish.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/eclim.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/example.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/fern.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/fugitiveline.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/fzf.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/gen_tags.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/gina.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/grepper.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/gutentags.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/hunks.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/keymap.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/languageclient.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/localsearch.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/lsp.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/neomake.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/netrw.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/nrrwrgn.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/nvimlsp.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/obsession.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/omnisharp.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/po.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/poetv.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/promptline.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/quickfix.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/rufo.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/scrollbar.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/searchcount.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/syntastic.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/autoshow.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/buffers.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/buflist.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/builder.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/ctrlspace.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/default.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/jsformatter.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/short_path.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/tabnr.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/unique_tail.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/formatters/unique_tail_improved.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/tabs.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/tabws.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tabline/xtabline.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tagbar.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/taglist.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/term.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/tmuxline.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/undotree.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/unicode.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/unite.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vim9lsp.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vimagit.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vimcmake.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vimtex.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/virtualenv.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/vista.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/whitespace.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/windowswap.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/wordcount.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/wordcount/formatters/default.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/wordcount/formatters/readingtime.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/xkblayout.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/ycm.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/extensions/zoomwintab.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/formatter/short_path.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/highlighter.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/init.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/msdos.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/parts.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/section.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/themes.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/themes/dark.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/autoload/airline/util.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/doc/airline.txt delete mode 100644 dotfiles/.vim/plugged/vim-airline/plugin/airline.vim delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/.themisrc delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/airline.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/builder.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/commands.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/extensions_default.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/extensions_tabline.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/highlighter.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/init.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/parts.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/section.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/themes.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-airline/test/util.vimspec delete mode 100644 dotfiles/.vim/plugged/vim-carbon-now-sh/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-carbon-now-sh/LICENSE delete mode 100644 dotfiles/.vim/plugged/vim-carbon-now-sh/README.md delete mode 100644 dotfiles/.vim/plugged/vim-carbon-now-sh/doc/vim-carbon-now-sh.txt delete mode 100644 dotfiles/.vim/plugged/vim-carbon-now-sh/plugin/vim-carbon-now-sh.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/.github/ISSUE_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/vim-devicons/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/vim-devicons/.github/workflows/ci.yml delete mode 100644 dotfiles/.vim/plugged/vim-devicons/.github/workflows/vint.yml delete mode 100644 dotfiles/.vim/plugged/vim-devicons/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-devicons/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-devicons/CHANGELOG.md delete mode 100644 dotfiles/.vim/plugged/vim-devicons/CODE_OF_CONDUCT.md delete mode 100644 dotfiles/.vim/plugged/vim-devicons/CONTRIBUTING.md delete mode 100644 dotfiles/.vim/plugged/vim-devicons/DEVELOPER.md delete mode 100644 dotfiles/.vim/plugged/vim-devicons/LICENSE delete mode 100644 dotfiles/.vim/plugged/vim-devicons/README.md delete mode 100644 dotfiles/.vim/plugged/vim-devicons/autoload/airline/extensions/tabline/formatters/webdevicons.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/ctrlp.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/denite.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/flagship.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/startify.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/unite.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/autoload/devicons/plugins/vimfiler.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/autoload/vimfiler/columns/devicons.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/doc/webdevicons.txt delete mode 100644 dotfiles/.vim/plugged/vim-devicons/nerdtree_plugin/webdevicons.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/plugin/webdevicons.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/pythonx/vim_devicons/__init__.py delete mode 100644 dotfiles/.vim/plugged/vim-devicons/pythonx/vim_devicons/powerline/__init__.py delete mode 100644 dotfiles/.vim/plugged/vim-devicons/pythonx/vim_devicons/powerline/segments.py delete mode 100644 dotfiles/.vim/plugged/vim-devicons/rplugin/python3/denite/filter/devicons_denite_converter.py delete mode 100644 dotfiles/.vim/plugged/vim-devicons/test/.themisrc delete mode 100644 dotfiles/.vim/plugged/vim-devicons/test/default_setting.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/test/fileformat.vim delete mode 100644 dotfiles/.vim/plugged/vim-devicons/test/filetype.vim delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/.gitattributes delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/.github/FUNDING.yml delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/CONTRIBUTING.markdown delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/README.markdown delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/autoload/fugitive.vim delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/doc/fugitive.txt delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/ftdetect/fugitive.vim delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/ftplugin/fugitiveblame.vim delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/plugin/fugitive.vim delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/syntax/fugitive.vim delete mode 100644 dotfiles/.vim/plugged/vim-fugitive/syntax/fugitiveblame.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/.github/issue_template.md delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/LICENCE delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/README.mkd delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/async.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/debug.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/diff.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/diff_highlight.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/fold.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/highlight.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/hunk.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/sign.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/autoload/gitgutter/utility.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/doc/gitgutter.txt delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/plugin/gitgutter.vim delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/screenshot.png delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/test/cp932.txt delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/test/fixture.txt delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/test/fixture_dos.txt delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/test/runner.vim delete mode 100755 dotfiles/.vim/plugged/vim-gitgutter/test/test delete mode 100644 dotfiles/.vim/plugged/vim-gitgutter/test/test_gitgutter.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/.codecov.yml delete mode 100644 dotfiles/.vim/plugged/vim-go/.coveragerc delete mode 100644 dotfiles/.vim/plugged/vim-go/.dockerignore delete mode 100644 dotfiles/.vim/plugged/vim-go/.editorconfig delete mode 100644 dotfiles/.vim/plugged/vim-go/.github/CONTRIBUTING.md delete mode 100644 dotfiles/.vim/plugged/vim-go/.github/FUNDING.yml delete mode 100644 dotfiles/.vim/plugged/vim-go/.github/ISSUE_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/vim-go/.github/workflows/git.yml delete mode 100644 dotfiles/.vim/plugged/vim-go/.github/workflows/test.yml delete mode 100644 dotfiles/.vim/plugged/vim-go/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-go/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-go/.vintrc.yaml delete mode 100644 dotfiles/.vim/plugged/vim-go/CHANGELOG.md delete mode 100644 dotfiles/.vim/plugged/vim-go/Dockerfile delete mode 100644 dotfiles/.vim/plugged/vim-go/LICENSE delete mode 100644 dotfiles/.vim/plugged/vim-go/Makefile delete mode 100644 dotfiles/.vim/plugged/vim-go/README.md delete mode 100644 dotfiles/.vim/plugged/vim-go/addon-info.json delete mode 100644 dotfiles/.vim/plugged/vim-go/assets/vim-go.png delete mode 100644 dotfiles/.vim/plugged/vim-go/assets/vim-go.svg delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/ctrlp/decls.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/fzf/decls.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/alternate.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/asmfmt.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/auto.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/calls.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/calls_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/cmd.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/cmd_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/complete.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/complete_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/config.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/config_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/coverage.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/debug.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/debug_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/decls.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/def.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/def_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/doc.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/fillstruct.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/fillstruct_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/fmt.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/fmt_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/guru.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/guru_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/highlight_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/iferr.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/impl.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/impl_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/implements.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/import.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/import_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/indent_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/issue.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/job.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/job_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/keyify.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lint.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lint_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/list.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lsp.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lsp/completionitemkind.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lsp/filechangetype.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lsp/lsp.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lsp/lsp_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lsp/message.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/lsp_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/mod.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/package.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/package_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/path.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/play.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/promise.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/promise_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/referrers.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/rename.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/statusline.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/tags.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/tags_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/template.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/template_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/term.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/term_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/cmd/bad.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/complete/complete.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/config/buildtags/buildtags.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/config/buildtags/constrainedfoo.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/config/buildtags/foo.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/config/buildtags/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/debug/compilerror/main.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/debug/debugmain/debugmain.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/def/jump.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/hello.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/hello_golden.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/src/imports/goimports.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/src/imports/goimports_golden.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/fmt/src/imports/vendor/gh.com/gi/foo-logging/logger.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/job/dir has spaces/main.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/errcheck/compilererror/compilererror.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/errcheck/errcheck.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/errcheck/errcheck_test.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/errcheck/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/foo/foo.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/foo/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/baz.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/golangci-lint/problems/importabs/ok.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/golangci-lint/problems/importabs/problems.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/golangci-lint/problems/multiple/problems.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/golangci-lint/problems/shadow/problems.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/lint.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/lint/quux.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/vet/compilererror/compilererror.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/vet/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lint/src/vet/vet.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/fmt/format.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/fmt/format_golden.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/fmt/newline.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/imports/imports.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/lsp/imports/imports_golden.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/bar/.gitkeep delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/baz/.gitkeep delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/package.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/package/src/package/vendor/foo/.gitkeep delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/add_all_golden.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/add_all_golden_options.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/add_all_input.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/remove_all_golden.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/tags/remove_all_input.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/term/term.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/compilerror/compilerror.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/compilerror/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/example/example_test.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/example/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/play/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/play/mock/controller.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/play/play_test.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/showname/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/showname/showname_test.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/testcompilerror/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/testcompilerror/testcompilerror_test.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/timeout/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/timeout/timeout_test.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/veterror/go.mod delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test-fixtures/test/src/veterror/veterror.go delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/test_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/textobj.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/tool.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/tool_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/ui.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/uri.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/uri_test.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/go/util.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/gotest.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/autoload/unite/sources/decls.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/compiler/go.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/doc/vim-go.txt delete mode 100644 dotfiles/.vim/plugged/vim-go/ftdetect/gofiletype.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/asm.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/go.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/go/commands.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/go/mappings.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/go/snippets.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/go/tagbar.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/gohtmltmpl.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/gomod.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/gomod/commands.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/ftplugin/gomod/mappings.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/UltiSnips/go.snippets delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_eq delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_err delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_errt delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_errw delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_f delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_ff delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_fori delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_pkg delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_sp delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/minisnip/_go_tt delete mode 100644 dotfiles/.vim/plugged/vim-go/gosnippets/snippets/go.snip delete mode 100644 dotfiles/.vim/plugged/vim-go/indent/go.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/indent/gohtmltmpl.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/plugin/go.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/rplugin/python3/denite/source/decls.py delete mode 100755 dotfiles/.vim/plugged/vim-go/scripts/bench-syntax delete mode 100755 dotfiles/.vim/plugged/vim-go/scripts/docker-test delete mode 100755 dotfiles/.vim/plugged/vim-go/scripts/install-tools delete mode 100755 dotfiles/.vim/plugged/vim-go/scripts/install-vim delete mode 100755 dotfiles/.vim/plugged/vim-go/scripts/lint delete mode 100755 dotfiles/.vim/plugged/vim-go/scripts/run-vim delete mode 100644 dotfiles/.vim/plugged/vim-go/scripts/runbench.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/scripts/runtest.vim delete mode 100755 dotfiles/.vim/plugged/vim-go/scripts/test delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/go.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/godebugoutput.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/godebugstacktrace.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/godebugvariables.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/godefstack.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/gohtmltmpl.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/gomod.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/gosum.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/gotexttmpl.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/gowork.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/syntax/vimgo.vim delete mode 100644 dotfiles/.vim/plugged/vim-go/templates/hello_world.go delete mode 100644 dotfiles/.vim/plugged/vim-go/templates/hello_world_test.go delete mode 100644 dotfiles/.vim/plugged/vim-go/test/parse.go delete mode 100644 dotfiles/.vim/plugged/vim-javascript/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-javascript/ISSUE_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/vim-javascript/README.md delete mode 100644 dotfiles/.vim/plugged/vim-javascript/after/ftplugin/javascript.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/compiler/eslint.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/extras/ctags delete mode 100644 dotfiles/.vim/plugged/vim-javascript/extras/flow.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/extras/jsdoc.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/extras/ngdoc.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/ftdetect/flow.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/ftdetect/javascript.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/indent/javascript.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/syntax/flow.vim delete mode 100644 dotfiles/.vim/plugged/vim-javascript/syntax/javascript.vim delete mode 100644 dotfiles/.vim/plugged/vim-jsx/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-jsx/README.md delete mode 100644 dotfiles/.vim/plugged/vim-jsx/after/ftplugin/jsx.vim delete mode 100644 dotfiles/.vim/plugged/vim-jsx/after/indent/jsx.vim delete mode 100644 dotfiles/.vim/plugged/vim-jsx/after/syntax/jsx.vim delete mode 100644 dotfiles/.vim/plugged/vim-jsx/ftdetect/javascript.vim delete mode 100644 dotfiles/.vim/plugged/vim-markdown/.github/workflows/reviewdog.yml delete mode 100644 dotfiles/.vim/plugged/vim-markdown/.github/workflows/vader.yml delete mode 100644 dotfiles/.vim/plugged/vim-markdown/.github/workflows/vint.yml delete mode 100644 dotfiles/.vim/plugged/vim-markdown/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-markdown/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-markdown/.vintrc.yaml delete mode 100644 dotfiles/.vim/plugged/vim-markdown/CONTRIBUTING.md delete mode 100644 dotfiles/.vim/plugged/vim-markdown/Makefile delete mode 100644 dotfiles/.vim/plugged/vim-markdown/README.md delete mode 100644 dotfiles/.vim/plugged/vim-markdown/after/ftplugin/markdown.vim delete mode 100644 dotfiles/.vim/plugged/vim-markdown/doc/vim-markdown.txt delete mode 100644 dotfiles/.vim/plugged/vim-markdown/ftdetect/markdown.vim delete mode 100644 dotfiles/.vim/plugged/vim-markdown/ftplugin/markdown.vim delete mode 100755 dotfiles/.vim/plugged/vim-markdown/indent/markdown.vim delete mode 100644 dotfiles/.vim/plugged/vim-markdown/registry/markdown.yaml delete mode 100644 dotfiles/.vim/plugged/vim-markdown/syntax/markdown.vim delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/README.md delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/folding-toc.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/folding.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/ge_test.md delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/indent-new-list-item.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/indent.md delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/indent.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/insert-toc.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/map.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/python-folding.vader delete mode 100755 dotfiles/.vim/plugged/vim-markdown/test/run-tests.sh delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/syntax-singleline.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/syntax.md delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/syntax.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/table-format.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/toc-autofit.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/toc.vader delete mode 100644 dotfiles/.vim/plugged/vim-markdown/test/vimrc delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/.rspec delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/.travis.yml delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/CHANGELOG.md delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/CONTRIBUTING.md delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/Gemfile delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/Gemfile.lock delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/MIT-LICENSE.txt delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/README.md delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/Rakefile delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/assets/example1.gif delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/assets/example2.gif delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/assets/example3.gif delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/assets/example4.gif delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/autoload/multiple_cursors.vim delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/doc/multiple_cursors.txt delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/plugin/multiple_cursors.vim delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/spec/benchmark_spec.rb delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/spec/multiple_cursors_spec.rb delete mode 100644 dotfiles/.vim/plugged/vim-multiple-cursors/spec/spec_helper.rb delete mode 100644 dotfiles/.vim/plugged/vim-prettier/.github/ISSUE_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/vim-prettier/.github/PULL_REQUEST_TEMPLATE.md delete mode 100644 dotfiles/.vim/plugged/vim-prettier/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-prettier/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-prettier/CHANGELOG.md delete mode 100644 dotfiles/.vim/plugged/vim-prettier/Dockerfile delete mode 100644 dotfiles/.vim/plugged/vim-prettier/LICENSE delete mode 100644 dotfiles/.vim/plugged/vim-prettier/Makefile delete mode 100644 dotfiles/.vim/plugged/vim-prettier/README.md delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/bridge/parser.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/job/async/neovim.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/job/async/vim.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/job/runner.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/logging/error.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/presets/fb.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/resolver/config.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/resolver/executable.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/resolver/preset.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/utils/buffer.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/utils/quickfix.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/autoload/prettier/utils/shim.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/doc/prettier.txt delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/css.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/graphql.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/html.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/javascript.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/json.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/less.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/lua.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/markdown.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/php.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/ruby.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/scss.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/svelte.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/typescript.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/vue.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/xml.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftdetect/yaml.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/css.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/graphql.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/html.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/javascript.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/json.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/less.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/lua.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/markdown.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/php.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/ruby.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/scss.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/svelte.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/typescript.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/vue.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/xml.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/ftplugin/yaml.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/media/vim-prettier.gif delete mode 100644 dotfiles/.vim/plugged/vim-prettier/package.json delete mode 100644 dotfiles/.vim/plugged/vim-prettier/plugin/prettier.vim delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/__snapshots__/formatting.test.js.snap delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.css delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.graphql delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.html delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.js delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.json delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.less delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.lua delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.md delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.php delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.rb delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.scss delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.ts delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.vue delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.xml delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/fixtures/foo.yaml delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/formatting.test.js delete mode 100644 dotfiles/.vim/plugged/vim-prettier/tests/vimrc delete mode 100644 dotfiles/.vim/plugged/vim-prettier/yarn.lock delete mode 100644 dotfiles/.vim/plugged/vim-sensible/.github/FUNDING.yml delete mode 100644 dotfiles/.vim/plugged/vim-sensible/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-sensible/README.markdown delete mode 100644 dotfiles/.vim/plugged/vim-sensible/plugin/sensible.vim delete mode 100644 dotfiles/.vim/plugged/vim-surround/.github/FUNDING.yml delete mode 100644 dotfiles/.vim/plugged/vim-surround/.gitignore delete mode 100644 dotfiles/.vim/plugged/vim-surround/.gitrepo delete mode 100644 dotfiles/.vim/plugged/vim-surround/README.markdown delete mode 100644 dotfiles/.vim/plugged/vim-surround/doc/surround.txt delete mode 100644 dotfiles/.vim/plugged/vim-surround/plugin/surround.vim delete mode 100644 dotfiles/.vim/plugged/zoxide.vim/.gitrepo delete mode 100644 dotfiles/.vim/plugged/zoxide.vim/LICENSE delete mode 100644 dotfiles/.vim/plugged/zoxide.vim/README.md delete mode 100644 dotfiles/.vim/plugged/zoxide.vim/autoload/zoxide.vim delete mode 100644 dotfiles/.vim/plugged/zoxide.vim/doc/zoxide-vim.txt delete mode 100644 dotfiles/.vim/plugged/zoxide.vim/lua/zoxide-vim.lua delete mode 100644 dotfiles/.vim/plugged/zoxide.vim/plugin/zoxide.vim delete mode 100644 dotfiles/.vimrc delete mode 100644 dotfiles/.zshrc delete mode 100644 dotfiles/Library/Developer/Xcode/UserData/FontAndColorThemes/Betelgeuse Dark.dvtcolortheme delete mode 100644 dotfiles/Library/Developer/Xcode/UserData/FontAndColorThemes/Betelgeuse Light.dvtcolortheme delete mode 100644 dotfiles/Library/Preferences/com.apple.Terminal.plist diff --git a/.local/fzf-tmux.sh b/.local/fzf-tmux.sh deleted file mode 100644 index 7083b3a5..00000000 --- a/.local/fzf-tmux.sh +++ /dev/null @@ -1,224 +0,0 @@ -#!/usr/bin/env bash -# fzf-tmux: starts fzf in a tmux pane -# usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS] - -fail() { - >&2 echo "$1" - exit 2 -} - -fzf="$(command -v fzf 2> /dev/null)" || fzf="$(dirname "$0")/fzf" -[[ -x "$fzf" ]] || fail 'fzf executable not found' - -args=() -opt="" -skip="" -swap="" -close="" -term="" -[[ -n "$LINES" ]] && lines=$LINES || lines=$(tput lines) || lines=$(tmux display-message -p "#{pane_height}") -[[ -n "$COLUMNS" ]] && columns=$COLUMNS || columns=$(tput cols) || columns=$(tmux display-message -p "#{pane_width}") - -help() { - >&2 echo 'usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS] - LAYOUT OPTIONS: - (default layout: -d 50%) - Popup window (requires tmux 3.2 or above): - -p [WIDTH[%][,HEIGHT[%]]] (default: 50%) - -w WIDTH[%] - -h HEIGHT[%] - -x COL - -y ROW - Split pane: - -u [HEIGHT[%]] Split above (up) - -d [HEIGHT[%]] Split below (down) - -l [WIDTH[%]] Split left - -r [WIDTH[%]] Split right -' - exit -} - -while [[ $# -gt 0 ]]; do - arg="$1" - shift - [[ -z "$skip" ]] && case "$arg" in - -) - term=1 - ;; - --help) - help - ;; - --version) - echo "fzf-tmux (with fzf $("$fzf" --version))" - exit - ;; - -p*|-w*|-h*|-x*|-y*|-d*|-u*|-r*|-l*) - if [[ "$arg" =~ ^-[pwhxy] ]]; then - [[ "$opt" =~ "-E" ]] || opt="-E" - elif [[ "$arg" =~ ^.[lr] ]]; then - opt="-h" - if [[ "$arg" =~ ^.l ]]; then - opt="$opt -d" - swap="; swap-pane -D ; select-pane -L" - close="; tmux swap-pane -D" - fi - else - opt="" - if [[ "$arg" =~ ^.u ]]; then - opt="$opt -d" - swap="; swap-pane -D ; select-pane -U" - close="; tmux swap-pane -D" - fi - fi - if [[ ${#arg} -gt 2 ]]; then - size="${arg:2}" - else - if [[ "$1" =~ ^[0-9%,]+$ ]] || [[ "$1" =~ ^[A-Z]$ ]]; then - size="$1" - shift - else - continue - fi - fi - - if [[ "$arg" =~ ^-p ]]; then - if [[ -n "$size" ]]; then - w=${size%%,*} - h=${size##*,} - opt="$opt -w$w -h$h" - fi - elif [[ "$arg" =~ ^-[whxy] ]]; then - opt="$opt ${arg:0:2}$size" - elif [[ "$size" =~ %$ ]]; then - size=${size:0:((${#size}-1))} - if [[ -n "$swap" ]]; then - opt="$opt -p $(( 100 - size ))" - else - opt="$opt -p $size" - fi - else - if [[ -n "$swap" ]]; then - if [[ "$arg" =~ ^.l ]]; then - max=$columns - else - max=$lines - fi - size=$(( max - size )) - [[ $size -lt 0 ]] && size=0 - opt="$opt -l $size" - else - opt="$opt -l $size" - fi - fi - ;; - --) - # "--" can be used to separate fzf-tmux options from fzf options to - # avoid conflicts - skip=1 - continue - ;; - *) - args+=("$arg") - ;; - esac - [[ -n "$skip" ]] && args+=("$arg") -done - -if [[ -z "$TMUX" ]]; then - "$fzf" "${args[@]}" - exit $? -fi - -# --height option is not allowed. CTRL-Z is also disabled. -args=("${args[@]}" "--no-height" "--bind=ctrl-z:ignore") - -# Handle zoomed tmux pane without popup options by moving it to a temp window -if [[ ! "$opt" =~ "-E" ]] && tmux list-panes -F '#F' | grep -q Z; then - zoomed_without_popup=1 - original_window=$(tmux display-message -p "#{window_id}") - tmp_window=$(tmux new-window -d -P -F "#{window_id}" "bash -c 'while :; do for c in \\| / - '\\;' do sleep 0.2; printf \"\\r\$c fzf-tmux is running\\r\"; done; done'") - tmux swap-pane -t $tmp_window \; select-window -t $tmp_window -fi - -set -e - -# Clean up named pipes on exit -id=$RANDOM -argsf="${TMPDIR:-/tmp}/fzf-args-$id" -fifo1="${TMPDIR:-/tmp}/fzf-fifo1-$id" -fifo2="${TMPDIR:-/tmp}/fzf-fifo2-$id" -fifo3="${TMPDIR:-/tmp}/fzf-fifo3-$id" -tmux_win_opts=( $(tmux show-window-options remain-on-exit \; show-window-options synchronize-panes | sed '/ off/d; s/^/set-window-option /; s/$/ \\;/') ) -cleanup() { - \rm -f $argsf $fifo1 $fifo2 $fifo3 - - # Restore tmux window options - if [[ "${#tmux_win_opts[@]}" -gt 0 ]]; then - eval "tmux ${tmux_win_opts[*]}" - fi - - # Remove temp window if we were zoomed without popup options - if [[ -n "$zoomed_without_popup" ]]; then - tmux display-message -p "#{window_id}" > /dev/null - tmux swap-pane -t $original_window \; \ - select-window -t $original_window \; \ - kill-window -t $tmp_window \; \ - resize-pane -Z - fi - - if [[ $# -gt 0 ]]; then - trap - EXIT - exit 130 - fi -} -trap 'cleanup 1' SIGUSR1 -trap 'cleanup' EXIT - -envs="export TERM=$TERM " -if [[ "$opt" =~ "-E" ]]; then - FZF_DEFAULT_OPTS="--margin 0,1 $FZF_DEFAULT_OPTS" - tmux_verson=$(tmux -V) - if [[ ! $tmux_verson =~ 3\.2 ]]; then - FZF_DEFAULT_OPTS="--border $FZF_DEFAULT_OPTS" - opt="-B $opt" - fi -fi -[[ -n "$FZF_DEFAULT_OPTS" ]] && envs="$envs FZF_DEFAULT_OPTS=$(printf %q "$FZF_DEFAULT_OPTS")" -[[ -n "$FZF_DEFAULT_COMMAND" ]] && envs="$envs FZF_DEFAULT_COMMAND=$(printf %q "$FZF_DEFAULT_COMMAND")" -echo "$envs;" > "$argsf" - -# Build arguments to fzf -opts=$(printf "%q " "${args[@]}") - -pppid=$$ -echo -n "trap 'kill -SIGUSR1 -$pppid' EXIT SIGINT SIGTERM;" >> $argsf -close="; trap - EXIT SIGINT SIGTERM $close" - -export TMUX=$(cut -d , -f 1,2 <<< "$TMUX") -mkfifo -m o+w $fifo2 -if [[ "$opt" =~ "-E" ]]; then - cat $fifo2 & - if [[ -n "$term" ]] || [[ -t 0 ]]; then - cat <<< "\"$fzf\" $opts > $fifo2; out=\$? $close; exit \$out" >> $argsf - else - mkfifo $fifo1 - cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; out=\$? $close; exit \$out" >> $argsf - cat <&0 > $fifo1 & - fi - tmux popup -d "$PWD" $opt "bash $argsf" > /dev/null 2>&1 - exit $? -fi -mkfifo -m o+w $fifo3 -if [[ -n "$term" ]] || [[ -t 0 ]]; then - cat <<< "\"$fzf\" $opts > $fifo2; echo \$? > $fifo3 $close" >> $argsf -else - mkfifo $fifo1 - cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; echo \$? > $fifo3 $close" >> $argsf - cat <&0 > $fifo1 & -fi -tmux set-window-option synchronize-panes off \;\ - set-window-option remain-on-exit off \;\ - split-window -c "$PWD" $opt "bash -c 'exec -a fzf bash $argsf'" $swap \ - > /dev/null 2>&1 || { "$fzf" "${args[@]}"; exit $?; } -cat $fifo2 -exit "$(cat $fifo3)" \ No newline at end of file diff --git a/.local/p10k.zsh b/.local/p10k.zsh deleted file mode 100644 index 884e7241..00000000 --- a/.local/p10k.zsh +++ /dev/null @@ -1,1641 +0,0 @@ -# Generated by Powerlevel10k configuration wizard on 2022-10-29 at 08:32 EDT. -# Based on romkatv/powerlevel10k/config/p10k-classic.zsh, checksum 52170. -# Wizard options: nerdfont-complete + powerline, large icons, classic, unicode, dark, -# 12h time, angled separators, sharp heads, flat tails, 2 lines, disconnected, -# left frame, sparse, many icons, concise, transient_prompt, instant_prompt=verbose. -# Type `p10k configure` to generate another config. -# -# Config for Powerlevel10k with classic powerline prompt style. Type `p10k configure` to generate -# your own config based on it. -# -# Tip: Looking for a nice color? Here's a one-liner to print colormap. -# -# for i in {0..255}; do print -Pn "%K{$i} %k%F{$i}${(l:3::0:)i}%f " ${${(M)$((i%6)):#3}:+$'\n'}; done - -# Temporarily change options. -'builtin' 'local' '-a' 'p10k_config_opts' -[[ ! -o 'aliases' ]] || p10k_config_opts+=('aliases') -[[ ! -o 'sh_glob' ]] || p10k_config_opts+=('sh_glob') -[[ ! -o 'no_brace_expand' ]] || p10k_config_opts+=('no_brace_expand') -'builtin' 'setopt' 'no_aliases' 'no_sh_glob' 'brace_expand' - -() { - emulate -L zsh -o extended_glob - - # Unset all configuration options. This allows you to apply configuration changes without - # restarting zsh. Edit ~/.p10k.zsh and type `source ~/.p10k.zsh`. - unset -m '(POWERLEVEL9K_*|DEFAULT_USER)~POWERLEVEL9K_GITSTATUS_DIR' - - # Zsh >= 5.1 is required. - autoload -Uz is-at-least && is-at-least 5.1 || return - - # The list of segments shown on the left. Fill it with the most important segments. - typeset -g POWERLEVEL9K_LEFT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - os_icon # os identifier - dir # current directory - vcs # git status - # =========================[ Line #2 ]========================= - newline # \n - # prompt_char # prompt symbol - ) - - # The list of segments shown on the right. Fill it with less important segments. - # Right prompt on the last prompt line (where you are typing your commands) gets - # automatically hidden when the input line reaches it. Right prompt above the - # last prompt line gets hidden if it would overlap with left prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS=( - # =========================[ Line #1 ]========================= - status # exit code of the last command - command_execution_time # duration of the last command - background_jobs # presence of background jobs - direnv # direnv status (https://direnv.net/) - asdf # asdf version manager (https://github.com/asdf-vm/asdf) - virtualenv # python virtual environment (https://docs.python.org/3/library/venv.html) - anaconda # conda environment (https://conda.io/) - # pyenv # python environment (https://github.com/pyenv/pyenv) - # goenv # go environment (https://github.com/syndbg/goenv) - # nodenv # node.js version from nodenv (https://github.com/nodenv/nodenv) - # nvm # node.js version from nvm (https://github.com/nvm-sh/nvm) - # nodeenv # node.js environment (https://github.com/ekalinin/nodeenv) - node_version # node.js version - go_version # go version (https://golang.org) - rust_version # rustc version (https://www.rust-lang.org) - dotnet_version # .NET version (https://dotnet.microsoft.com) - php_version # php version (https://www.php.net/) - laravel_version # laravel php framework version (https://laravel.com/) - java_version # java version (https://www.java.com/) - package # name@version from package.json (https://docs.npmjs.com/files/package.json) - # rbenv # ruby version from rbenv (https://github.com/rbenv/rbenv) - # rvm # ruby version from rvm (https://rvm.io) - # fvm # flutter version management (https://github.com/leoafarias/fvm) - # luaenv # lua version from luaenv (https://github.com/cehoffman/luaenv) - # jenv # java version from jenv (https://github.com/jenv/jenv) - # plenv # perl version from plenv (https://github.com/tokuhirom/plenv) - # phpenv # php version from phpenv (https://github.com/phpenv/phpenv) - # scalaenv # scala version from scalaenv (https://github.com/scalaenv/scalaenv) - # haskell_stack # haskell version from stack (https://haskellstack.org/) - kubecontext # current kubernetes context (https://kubernetes.io/) - terraform # terraform workspace (https://www.terraform.io) - terraform_version # terraform version (https://www.terraform.io) - aws # aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) - # aws_eb_env # aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) - azure # azure account name (https://docs.microsoft.com/en-us/cli/azure) - gcloud # google cloud cli account and project (https://cloud.google.com/) - google_app_cred # google application credentials (https://cloud.google.com/docs/authentication/production) - toolbox # toolbox name (https://github.com/containers/toolbox) - context # user@hostname - # nordvpn # nordvpn connection status, linux only (https://nordvpn.com/) - # ranger # ranger shell (https://github.com/ranger/ranger) - nnn # nnn shell (https://github.com/jarun/nnn) - # xplr # xplr shell (https://github.com/sayanarijit/xplr) - vim_shell # vim shell indicator (:sh) - # midnight_commander # midnight commander shell (https://midnight-commander.org/) - # nix_shell # nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) - vi_mode # vi mode (you don't need this if you've enabled prompt_char) - # vpn_ip # virtual private network indicator - # load # CPU load - # disk_usage # disk usage - ram # free RAM - # swap # used swap - # todo # todo items (https://github.com/todotxt/todo.txt-cli) - # timewarrior # timewarrior tracking status (https://timewarrior.net/) - # taskwarrior # taskwarrior task count (https://taskwarrior.org/) - time # current time - # =========================[ Line #2 ]========================= - # newline # \n - # ip # ip address and bandwidth usage for a specified network interface - # public_ip # public IP address - # proxy # system-wide http/https/ftp proxy - # battery # internal battery - # wifi # wifi speed - # example # example user-defined segment (see prompt_example function below) - ) - - # Defines character set used by powerlevel10k. It's best to let `p10k configure` set it for you. - typeset -g POWERLEVEL9K_MODE=nerdfont-complete - # When set to `moderate`, some icons will have an extra space after them. This is meant to avoid - # icon overlap when using non-monospace fonts. When set to `none`, spaces are not added. - typeset -g POWERLEVEL9K_ICON_PADDING=moderate - - # When set to true, icons appear before content on both sides of the prompt. When set - # to false, icons go after content. If empty or not set, icons go before content in the left - # prompt and after content in the right prompt. - # - # You can also override it for a specific segment: - # - # POWERLEVEL9K_STATUS_ICON_BEFORE_CONTENT=false - # - # Or for a specific segment in specific state: - # - # POWERLEVEL9K_DIR_NOT_WRITABLE_ICON_BEFORE_CONTENT=false - typeset -g POWERLEVEL9K_ICON_BEFORE_CONTENT= - - # Add an empty line before each prompt. - typeset -g POWERLEVEL9K_PROMPT_ADD_NEWLINE=true - - # Connect left prompt lines with these symbols. You'll probably want to use the same color - # as POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND below. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_PREFIX='%240F╭─' - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_PREFIX='%240F├─' - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_PREFIX='%240F╰─' - # Connect right prompt lines with these symbols. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_SUFFIX= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_SUFFIX= - typeset -g POWERLEVEL9K_MULTILINE_LAST_PROMPT_SUFFIX= - - # Filler between left and right prompt on the first prompt line. You can set it to ' ', '·' or - # '─'. The last two make it easier to see the alignment between left and right prompt and to - # separate prompt from command output. You might want to set POWERLEVEL9K_PROMPT_ADD_NEWLINE=false - # for more compact prompt if using this option. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR=' ' - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_BACKGROUND= - typeset -g POWERLEVEL9K_MULTILINE_NEWLINE_PROMPT_GAP_BACKGROUND= - if [[ $POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_CHAR != ' ' ]]; then - # The color of the filler. You'll probably want to match the color of POWERLEVEL9K_MULTILINE - # ornaments defined above. - typeset -g POWERLEVEL9K_MULTILINE_FIRST_PROMPT_GAP_FOREGROUND=240 - # Start filler from the edge of the screen if there are no left segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_FIRST_SEGMENT_END_SYMBOL='%{%}' - # End filler on the edge of the screen if there are no right segments on the first line. - typeset -g POWERLEVEL9K_EMPTY_LINE_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='%{%}' - fi - - # Default background color. - typeset -g POWERLEVEL9K_BACKGROUND=236 - - # Separator between same-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SUBSEGMENT_SEPARATOR='%244F\uE0B1' - # Separator between same-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SUBSEGMENT_SEPARATOR='%244F\uE0B3' - # Separator between different-color segments on the left. - typeset -g POWERLEVEL9K_LEFT_SEGMENT_SEPARATOR='\uE0B0' - # Separator between different-color segments on the right. - typeset -g POWERLEVEL9K_RIGHT_SEGMENT_SEPARATOR='\uE0B2' - # The right end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL='\uE0B0' - # The left end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_FIRST_SEGMENT_START_SYMBOL='\uE0B2' - # The left end of left prompt. - typeset -g POWERLEVEL9K_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL='' - # The right end of right prompt. - typeset -g POWERLEVEL9K_RIGHT_PROMPT_LAST_SEGMENT_END_SYMBOL='' - # Left prompt terminator for lines without any segments. - typeset -g POWERLEVEL9K_EMPTY_LINE_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - - #################################[ os_icon: os identifier ]################################## - # OS identifier color. - typeset -g POWERLEVEL9K_OS_ICON_FOREGROUND=255 - # Custom icon. - # typeset -g POWERLEVEL9K_OS_ICON_CONTENT_EXPANSION='⭐' - - ################################[ prompt_char: prompt symbol ]################################ - # Transparent background. - typeset -g POWERLEVEL9K_PROMPT_CHAR_BACKGROUND= - # Green prompt symbol if the last command succeeded. - typeset -g POWERLEVEL9K_PROMPT_CHAR_OK_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=76 - # Red prompt symbol if the last command failed. - typeset -g POWERLEVEL9K_PROMPT_CHAR_ERROR_{VIINS,VICMD,VIVIS,VIOWR}_FOREGROUND=196 - # Default prompt symbol. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIINS_CONTENT_EXPANSION='❯' - # Prompt symbol in command vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VICMD_CONTENT_EXPANSION='❮' - # Prompt symbol in visual vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIVIS_CONTENT_EXPANSION='V' - # Prompt symbol in overwrite vi mode. - typeset -g POWERLEVEL9K_PROMPT_CHAR_{OK,ERROR}_VIOWR_CONTENT_EXPANSION='▶' - typeset -g POWERLEVEL9K_PROMPT_CHAR_OVERWRITE_STATE=true - # No line terminator if prompt_char is the last segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_LAST_SEGMENT_END_SYMBOL= - # No line introducer if prompt_char is the first segment. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_PROMPT_FIRST_SEGMENT_START_SYMBOL= - # No surrounding whitespace. - typeset -g POWERLEVEL9K_PROMPT_CHAR_LEFT_{LEFT,RIGHT}_WHITESPACE= - - ##################################[ dir: current directory ]################################## - # Default current directory color. - typeset -g POWERLEVEL9K_DIR_FOREGROUND=31 - # If directory is too long, shorten some of its segments to the shortest possible unique - # prefix. The shortened directory can be tab-completed to the original. - typeset -g POWERLEVEL9K_SHORTEN_STRATEGY=truncate_to_unique - # Replace removed segment suffixes with this symbol. - typeset -g POWERLEVEL9K_SHORTEN_DELIMITER= - # Color of the shortened directory segments. - typeset -g POWERLEVEL9K_DIR_SHORTENED_FOREGROUND=103 - # Color of the anchor directory segments. Anchor segments are never shortened. The first - # segment is always an anchor. - typeset -g POWERLEVEL9K_DIR_ANCHOR_FOREGROUND=39 - # Display anchor directory segments in bold. - typeset -g POWERLEVEL9K_DIR_ANCHOR_BOLD=true - # Don't shorten directories that contain any of these files. They are anchors. - local anchor_files=( - .bzr - .citc - .git - .hg - .node-version - .python-version - .go-version - .ruby-version - .lua-version - .java-version - .perl-version - .php-version - .tool-version - .shorten_folder_marker - .svn - .terraform - CVS - Cargo.toml - composer.json - go.mod - package.json - stack.yaml - ) - typeset -g POWERLEVEL9K_SHORTEN_FOLDER_MARKER="(${(j:|:)anchor_files})" - # If set to "first" ("last"), remove everything before the first (last) subdirectory that contains - # files matching $POWERLEVEL9K_SHORTEN_FOLDER_MARKER. For example, when the current directory is - # /foo/bar/git_repo/nested_git_repo/baz, prompt will display git_repo/nested_git_repo/baz (first) - # or nested_git_repo/baz (last). This assumes that git_repo and nested_git_repo contain markers - # and other directories don't. - # - # Optionally, "first" and "last" can be followed by ":" where is an integer. - # This moves the truncation point to the right (positive offset) or to the left (negative offset) - # relative to the marker. Plain "first" and "last" are equivalent to "first:0" and "last:0" - # respectively. - typeset -g POWERLEVEL9K_DIR_TRUNCATE_BEFORE_MARKER=false - # Don't shorten this many last directory segments. They are anchors. - typeset -g POWERLEVEL9K_SHORTEN_DIR_LENGTH=1 - # Shorten directory if it's longer than this even if there is space for it. The value can - # be either absolute (e.g., '80') or a percentage of terminal width (e.g, '50%'). If empty, - # directory will be shortened only when prompt doesn't fit or when other parameters demand it - # (see POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS and POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT below). - # If set to `0`, directory will always be shortened to its minimum length. - typeset -g POWERLEVEL9K_DIR_MAX_LENGTH=80 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least this - # many columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS=40 - # When `dir` segment is on the last prompt line, try to shorten it enough to leave at least - # COLUMNS * POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT * 0.01 columns for typing commands. - typeset -g POWERLEVEL9K_DIR_MIN_COMMAND_COLUMNS_PCT=50 - # If set to true, embed a hyperlink into the directory. Useful for quickly - # opening a directory in the file manager simply by clicking the link. - # Can also be handy when the directory is shortened, as it allows you to see - # the full directory that was used in previous commands. - typeset -g POWERLEVEL9K_DIR_HYPERLINK=false - - # Enable special styling for non-writable and non-existent directories. See POWERLEVEL9K_LOCK_ICON - # and POWERLEVEL9K_DIR_CLASSES below. - typeset -g POWERLEVEL9K_DIR_SHOW_WRITABLE=v3 - - # The default icon shown next to non-writable and non-existent directories when - # POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3. - # typeset -g POWERLEVEL9K_LOCK_ICON='⭐' - - # POWERLEVEL9K_DIR_CLASSES allows you to specify custom icons and colors for different - # directories. It must be an array with 3 * N elements. Each triplet consists of: - # - # 1. A pattern against which the current directory ($PWD) is matched. Matching is done with - # extended_glob option enabled. - # 2. Directory class for the purpose of styling. - # 3. An empty string. - # - # Triplets are tried in order. The first triplet whose pattern matches $PWD wins. - # - # If POWERLEVEL9K_DIR_SHOW_WRITABLE is set to v3, non-writable and non-existent directories - # acquire class suffix _NOT_WRITABLE and NON_EXISTENT respectively. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=( - # '~/work(|/*)' WORK '' - # '~(|/*)' HOME '' - # '*' DEFAULT '') - # - # Whenever the current directory is ~/work or a subdirectory of ~/work, it gets styled with one - # of the following classes depending on its writability and existence: WORK, WORK_NOT_WRITABLE or - # WORK_NON_EXISTENT. - # - # Simply assigning classes to directories doesn't have any visible effects. It merely gives you an - # option to define custom colors and icons for different directory classes. - # - # # Styling for WORK. - # typeset -g POWERLEVEL9K_DIR_WORK_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_ANCHOR_FOREGROUND=39 - # - # # Styling for WORK_NOT_WRITABLE. - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_ANCHOR_FOREGROUND=39 - # - # # Styling for WORK_NON_EXISTENT. - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_FOREGROUND=31 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_SHORTENED_FOREGROUND=103 - # typeset -g POWERLEVEL9K_DIR_WORK_NON_EXISTENT_ANCHOR_FOREGROUND=39 - # - # If a styling parameter isn't explicitly defined for some class, it falls back to the classless - # parameter. For example, if POWERLEVEL9K_DIR_WORK_NOT_WRITABLE_FOREGROUND is not set, it falls - # back to POWERLEVEL9K_DIR_FOREGROUND. - # - # typeset -g POWERLEVEL9K_DIR_CLASSES=() - - # Custom prefix. - # typeset -g POWERLEVEL9K_DIR_PREFIX='%246Fin ' - - #####################################[ vcs: git status ]###################################### - # Branch icon. Set this parameter to '\uF126 ' for the popular Powerline branch icon. - typeset -g POWERLEVEL9K_VCS_BRANCH_ICON='\uF126 ' - - # Untracked files icon. It's really a question mark, your font isn't broken. - # Change the value of this parameter to show a different icon. - typeset -g POWERLEVEL9K_VCS_UNTRACKED_ICON='?' - - # Formatter for Git status. - # - # Example output: master wip ⇣42⇡42 *42 merge ~42 +42 !42 ?42. - # - # You can edit the function to customize how Git status looks. - # - # VCS_STATUS_* parameters are set by gitstatus plugin. See reference: - # https://github.com/romkatv/gitstatus/blob/master/gitstatus.plugin.zsh. - function my_git_formatter() { - emulate -L zsh - - if [[ -n $P9K_CONTENT ]]; then - # If P9K_CONTENT is not empty, use it. It's either "loading" or from vcs_info (not from - # gitstatus plugin). VCS_STATUS_* parameters are not available in this case. - typeset -g my_git_format=$P9K_CONTENT - return - fi - - if (( $1 )); then - # Styling for up-to-date Git status. - local meta='%246F' # grey foreground - local clean='%76F' # green foreground - local modified='%178F' # yellow foreground - local untracked='%39F' # blue foreground - local conflicted='%196F' # red foreground - else - # Styling for incomplete and stale Git status. - local meta='%244F' # grey foreground - local clean='%244F' # grey foreground - local modified='%244F' # grey foreground - local untracked='%244F' # grey foreground - local conflicted='%244F' # grey foreground - fi - - local res - - if [[ -n $VCS_STATUS_LOCAL_BRANCH ]]; then - local branch=${(V)VCS_STATUS_LOCAL_BRANCH} - # If local branch name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show local branch name in full without truncation, delete the next line. - (( $#branch > 32 )) && branch[13,-13]="…" # <-- this line - res+="${clean}${(g::)POWERLEVEL9K_VCS_BRANCH_ICON}${branch//\%/%%}" - fi - - if [[ -n $VCS_STATUS_TAG - # Show tag only if not on a branch. - # Tip: To always show tag, delete the next line. - && -z $VCS_STATUS_LOCAL_BRANCH # <-- this line - ]]; then - local tag=${(V)VCS_STATUS_TAG} - # If tag name is at most 32 characters long, show it in full. - # Otherwise show the first 12 … the last 12. - # Tip: To always show tag name in full without truncation, delete the next line. - (( $#tag > 32 )) && tag[13,-13]="…" # <-- this line - res+="${meta}#${clean}${tag//\%/%%}" - fi - - # Display the current Git commit if there is no branch and no tag. - # Tip: To always display the current Git commit, delete the next line. - [[ -z $VCS_STATUS_LOCAL_BRANCH && -z $VCS_STATUS_TAG ]] && # <-- this line - res+="${meta}@${clean}${VCS_STATUS_COMMIT[1,8]}" - - # Show tracking branch name if it differs from local branch. - if [[ -n ${VCS_STATUS_REMOTE_BRANCH:#$VCS_STATUS_LOCAL_BRANCH} ]]; then - res+="${meta}:${clean}${(V)VCS_STATUS_REMOTE_BRANCH//\%/%%}" - fi - - # Display "wip" if the latest commit's summary contains "wip" or "WIP". - if [[ $VCS_STATUS_COMMIT_SUMMARY == (|*[^[:alnum:]])(wip|WIP)(|[^[:alnum:]]*) ]]; then - res+=" ${modified}wip" - fi - - # ⇣42 if behind the remote. - (( VCS_STATUS_COMMITS_BEHIND )) && res+=" ${clean}⇣${VCS_STATUS_COMMITS_BEHIND}" - # ⇡42 if ahead of the remote; no leading space if also behind the remote: ⇣42⇡42. - (( VCS_STATUS_COMMITS_AHEAD && !VCS_STATUS_COMMITS_BEHIND )) && res+=" " - (( VCS_STATUS_COMMITS_AHEAD )) && res+="${clean}⇡${VCS_STATUS_COMMITS_AHEAD}" - # ⇠42 if behind the push remote. - (( VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" ${clean}⇠${VCS_STATUS_PUSH_COMMITS_BEHIND}" - (( VCS_STATUS_PUSH_COMMITS_AHEAD && !VCS_STATUS_PUSH_COMMITS_BEHIND )) && res+=" " - # ⇢42 if ahead of the push remote; no leading space if also behind: ⇠42⇢42. - (( VCS_STATUS_PUSH_COMMITS_AHEAD )) && res+="${clean}⇢${VCS_STATUS_PUSH_COMMITS_AHEAD}" - # *42 if have stashes. - (( VCS_STATUS_STASHES )) && res+=" ${clean}*${VCS_STATUS_STASHES}" - # 'merge' if the repo is in an unusual state. - [[ -n $VCS_STATUS_ACTION ]] && res+=" ${conflicted}${VCS_STATUS_ACTION}" - # ~42 if have merge conflicts. - (( VCS_STATUS_NUM_CONFLICTED )) && res+=" ${conflicted}~${VCS_STATUS_NUM_CONFLICTED}" - # +42 if have staged changes. - (( VCS_STATUS_NUM_STAGED )) && res+=" ${modified}+${VCS_STATUS_NUM_STAGED}" - # !42 if have unstaged changes. - (( VCS_STATUS_NUM_UNSTAGED )) && res+=" ${modified}!${VCS_STATUS_NUM_UNSTAGED}" - # ?42 if have untracked files. It's really a question mark, your font isn't broken. - # See POWERLEVEL9K_VCS_UNTRACKED_ICON above if you want to use a different icon. - # Remove the next line if you don't want to see untracked files at all. - (( VCS_STATUS_NUM_UNTRACKED )) && res+=" ${untracked}${(g::)POWERLEVEL9K_VCS_UNTRACKED_ICON}${VCS_STATUS_NUM_UNTRACKED}" - # "─" if the number of unstaged files is unknown. This can happen due to - # POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY (see below) being set to a non-negative number lower - # than the number of files in the Git index, or due to bash.showDirtyState being set to false - # in the repository config. The number of staged and untracked files may also be unknown - # in this case. - (( VCS_STATUS_HAS_UNSTAGED == -1 )) && res+=" ${modified}─" - - typeset -g my_git_format=$res - } - functions -M my_git_formatter 2>/dev/null - - # Don't count the number of unstaged, untracked and conflicted files in Git repositories with - # more than this many files in the index. Negative value means infinity. - # - # If you are working in Git repositories with tens of millions of files and seeing performance - # sagging, try setting POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY to a number lower than the output - # of `git ls-files | wc -l`. Alternatively, add `bash.showDirtyState = false` to the repository's - # config: `git config bash.showDirtyState false`. - typeset -g POWERLEVEL9K_VCS_MAX_INDEX_SIZE_DIRTY=-1 - - # Don't show Git status in prompt for repositories whose workdir matches this pattern. - # For example, if set to '~', the Git repository at $HOME/.git will be ignored. - # Multiple patterns can be combined with '|': '~(|/foo)|/bar/baz/*'. - typeset -g POWERLEVEL9K_VCS_DISABLED_WORKDIR_PATTERN='~' - - # Disable the default Git status formatting. - typeset -g POWERLEVEL9K_VCS_DISABLE_GITSTATUS_FORMATTING=true - # Install our own Git status formatter. - typeset -g POWERLEVEL9K_VCS_CONTENT_EXPANSION='${$((my_git_formatter(1)))+${my_git_format}}' - typeset -g POWERLEVEL9K_VCS_LOADING_CONTENT_EXPANSION='${$((my_git_formatter(0)))+${my_git_format}}' - # Enable counters for staged, unstaged, etc. - typeset -g POWERLEVEL9K_VCS_{STAGED,UNSTAGED,UNTRACKED,CONFLICTED,COMMITS_AHEAD,COMMITS_BEHIND}_MAX_NUM=-1 - - # Icon color. - typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_COLOR=76 - typeset -g POWERLEVEL9K_VCS_LOADING_VISUAL_IDENTIFIER_COLOR=244 - # Custom icon. - # typeset -g POWERLEVEL9K_VCS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_VCS_PREFIX='%246Fon ' - - # Show status of repositories of these types. You can add svn and/or hg if you are - # using them. If you do, your prompt may become slow even when your current directory - # isn't in an svn or hg reposotiry. - typeset -g POWERLEVEL9K_VCS_BACKENDS=(git) - - # These settings are used for repositories other than Git or when gitstatusd fails and - # Powerlevel10k has to fall back to using vcs_info. - typeset -g POWERLEVEL9K_VCS_CLEAN_FOREGROUND=76 - typeset -g POWERLEVEL9K_VCS_UNTRACKED_FOREGROUND=76 - typeset -g POWERLEVEL9K_VCS_MODIFIED_FOREGROUND=178 - - ##########################[ status: exit code of the last command ]########################### - # Enable OK_PIPE, ERROR_PIPE and ERROR_SIGNAL status states to allow us to enable, disable and - # style them independently from the regular OK and ERROR state. - typeset -g POWERLEVEL9K_STATUS_EXTENDED_STATES=true - - # Status on success. No content, just an icon. No need to show it if prompt_char is enabled as - # it will signify success by turning green. - typeset -g POWERLEVEL9K_STATUS_OK=true - typeset -g POWERLEVEL9K_STATUS_OK_FOREGROUND=70 - typeset -g POWERLEVEL9K_STATUS_OK_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when some part of a pipe command fails but the overall exit status is zero. It may look - # like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_OK_PIPE=true - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_FOREGROUND=70 - typeset -g POWERLEVEL9K_STATUS_OK_PIPE_VISUAL_IDENTIFIER_EXPANSION='✔' - - # Status when it's just an error code (e.g., '1'). No need to show it if prompt_char is enabled as - # it will signify error by turning red. - typeset -g POWERLEVEL9K_STATUS_ERROR=true - typeset -g POWERLEVEL9K_STATUS_ERROR_FOREGROUND=160 - typeset -g POWERLEVEL9K_STATUS_ERROR_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when the last command was terminated by a signal. - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL=true - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_FOREGROUND=160 - # Use terse signal names: "INT" instead of "SIGINT(2)". - typeset -g POWERLEVEL9K_STATUS_VERBOSE_SIGNAME=false - typeset -g POWERLEVEL9K_STATUS_ERROR_SIGNAL_VISUAL_IDENTIFIER_EXPANSION='✘' - - # Status when some part of a pipe command fails and the overall exit status is also non-zero. - # It may look like this: 1|0. - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE=true - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_FOREGROUND=160 - typeset -g POWERLEVEL9K_STATUS_ERROR_PIPE_VISUAL_IDENTIFIER_EXPANSION='✘' - - ###################[ command_execution_time: duration of the last command ]################### - # Show duration of the last command if takes at least this many seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_THRESHOLD=3 - # Show this many fractional digits. Zero means round to seconds. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PRECISION=0 - # Execution time color. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FOREGROUND=248 - # Duration format: 1d 2h 3m 4s. - typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_FORMAT='d h m s' - # Custom icon. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_COMMAND_EXECUTION_TIME_PREFIX='%246Ftook ' - - #######################[ background_jobs: presence of background jobs ]####################### - # Don't show the number of background jobs. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VERBOSE=false - # Background jobs color. - typeset -g POWERLEVEL9K_BACKGROUND_JOBS_FOREGROUND=37 - # Custom icon. - # typeset -g POWERLEVEL9K_BACKGROUND_JOBS_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ direnv: direnv status (https://direnv.net/) ]######################## - # Direnv color. - typeset -g POWERLEVEL9K_DIRENV_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_DIRENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ asdf: asdf version manager (https://github.com/asdf-vm/asdf) ]############### - # Default asdf color. Only used to display tools for which there is no color override (see below). - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_FOREGROUND. - typeset -g POWERLEVEL9K_ASDF_FOREGROUND=66 - - # There are four parameters that can be used to hide asdf tools. Each parameter describes - # conditions under which a tool gets hidden. Parameters can hide tools but not unhide them. If at - # least one parameter decides to hide a tool, that tool gets hidden. If no parameter decides to - # hide a tool, it gets shown. - # - # Special note on the difference between POWERLEVEL9K_ASDF_SOURCES and - # POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW. Consider the effect of the following commands: - # - # asdf local python 3.8.1 - # asdf global python 3.8.1 - # - # After running both commands the current python version is 3.8.1 and its source is "local" as - # it takes precedence over "global". If POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW is set to false, - # it'll hide python version in this case because 3.8.1 is the same as the global version. - # POWERLEVEL9K_ASDF_SOURCES will hide python version only if the value of this parameter doesn't - # contain "local". - - # Hide tool versions that don't come from one of these sources. - # - # Available sources: - # - # - shell `asdf current` says "set by ASDF_${TOOL}_VERSION environment variable" - # - local `asdf current` says "set by /some/not/home/directory/file" - # - global `asdf current` says "set by /home/username/file" - # - # Note: If this parameter is set to (shell local global), it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SOURCES. - typeset -g POWERLEVEL9K_ASDF_SOURCES=(shell local global) - - # If set to false, hide tool versions that are the same as global. - # - # Note: The name of this parameter doesn't reflect its meaning at all. - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_PROMPT_ALWAYS_SHOW. - typeset -g POWERLEVEL9K_ASDF_PROMPT_ALWAYS_SHOW=false - - # If set to false, hide tool versions that are equal to "system". - # - # Note: If this parameter is set to true, it won't hide tools. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_SYSTEM. - typeset -g POWERLEVEL9K_ASDF_SHOW_SYSTEM=true - - # If set to non-empty value, hide tools unless there is a file matching the specified file pattern - # in the current directory, or its parent directory, or its grandparent directory, and so on. - # - # Note: If this parameter is set to empty value, it won't hide tools. - # Note: SHOW_ON_UPGLOB isn't specific to asdf. It works with all prompt segments. - # Tip: Override this parameter for ${TOOL} with POWERLEVEL9K_ASDF_${TOOL}_SHOW_ON_UPGLOB. - # - # Example: Hide nodejs version when there is no package.json and no *.js files in the current - # directory, in `..`, in `../..` and so on. - # - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.js|package.json' - typeset -g POWERLEVEL9K_ASDF_SHOW_ON_UPGLOB= - - # Ruby version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUBY_FOREGROUND=168 - # typeset -g POWERLEVEL9K_ASDF_RUBY_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUBY_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Python version from asdf. - typeset -g POWERLEVEL9K_ASDF_PYTHON_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_PYTHON_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PYTHON_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Go version from asdf. - typeset -g POWERLEVEL9K_ASDF_GOLANG_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_GOLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_GOLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Node.js version from asdf. - typeset -g POWERLEVEL9K_ASDF_NODEJS_FOREGROUND=70 - # typeset -g POWERLEVEL9K_ASDF_NODEJS_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_NODEJS_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Rust version from asdf. - typeset -g POWERLEVEL9K_ASDF_RUST_FOREGROUND=37 - # typeset -g POWERLEVEL9K_ASDF_RUST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_RUST_SHOW_ON_UPGLOB='*.foo|*.bar' - - # .NET Core version from asdf. - typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_FOREGROUND=134 - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_DOTNET_CORE_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Flutter version from asdf. - typeset -g POWERLEVEL9K_ASDF_FLUTTER_FOREGROUND=38 - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_FLUTTER_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Lua version from asdf. - typeset -g POWERLEVEL9K_ASDF_LUA_FOREGROUND=32 - # typeset -g POWERLEVEL9K_ASDF_LUA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_LUA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Java version from asdf. - typeset -g POWERLEVEL9K_ASDF_JAVA_FOREGROUND=32 - # typeset -g POWERLEVEL9K_ASDF_JAVA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JAVA_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Perl version from asdf. - typeset -g POWERLEVEL9K_ASDF_PERL_FOREGROUND=67 - # typeset -g POWERLEVEL9K_ASDF_PERL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PERL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Erlang version from asdf. - typeset -g POWERLEVEL9K_ASDF_ERLANG_FOREGROUND=125 - # typeset -g POWERLEVEL9K_ASDF_ERLANG_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ERLANG_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Elixir version from asdf. - typeset -g POWERLEVEL9K_ASDF_ELIXIR_FOREGROUND=129 - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_ELIXIR_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Postgres version from asdf. - typeset -g POWERLEVEL9K_ASDF_POSTGRES_FOREGROUND=31 - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_POSTGRES_SHOW_ON_UPGLOB='*.foo|*.bar' - - # PHP version from asdf. - typeset -g POWERLEVEL9K_ASDF_PHP_FOREGROUND=99 - # typeset -g POWERLEVEL9K_ASDF_PHP_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_PHP_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Haskell version from asdf. - typeset -g POWERLEVEL9K_ASDF_HASKELL_FOREGROUND=172 - # typeset -g POWERLEVEL9K_ASDF_HASKELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_HASKELL_SHOW_ON_UPGLOB='*.foo|*.bar' - - # Julia version from asdf. - typeset -g POWERLEVEL9K_ASDF_JULIA_FOREGROUND=70 - # typeset -g POWERLEVEL9K_ASDF_JULIA_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_ASDF_JULIA_SHOW_ON_UPGLOB='*.foo|*.bar' - - ##########[ nordvpn: nordvpn connection status, linux only (https://nordvpn.com/) ]########### - # NordVPN connection indicator color. - typeset -g POWERLEVEL9K_NORDVPN_FOREGROUND=39 - # Hide NordVPN connection indicator when not connected. - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_CONTENT_EXPANSION= - typeset -g POWERLEVEL9K_NORDVPN_{DISCONNECTED,CONNECTING,DISCONNECTING}_VISUAL_IDENTIFIER_EXPANSION= - # Custom icon. - # typeset -g POWERLEVEL9K_NORDVPN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ ranger: ranger shell (https://github.com/ranger/ranger) ]################## - # Ranger shell color. - typeset -g POWERLEVEL9K_RANGER_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################[ nnn: nnn shell (https://github.com/jarun/nnn) ]####################### - # Nnn shell color. - typeset -g POWERLEVEL9K_NNN_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_NNN_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################[ xplr: xplr shell (https://github.com/sayanarijit/xplr) ]################## - # xplr shell color. - typeset -g POWERLEVEL9K_XPLR_FOREGROUND=72 - # Custom icon. - # typeset -g POWERLEVEL9K_XPLR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########################[ vim_shell: vim shell indicator (:sh) ]########################### - # Vim shell indicator color. - typeset -g POWERLEVEL9K_VIM_SHELL_FOREGROUND=34 - # Custom icon. - # typeset -g POWERLEVEL9K_VIM_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######[ midnight_commander: midnight commander shell (https://midnight-commander.org/) ]###### - # Midnight Commander shell color. - typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_FOREGROUND=178 - # Custom icon. - # typeset -g POWERLEVEL9K_MIDNIGHT_COMMANDER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ nix_shell: nix shell (https://nixos.org/nixos/nix-pills/developing-with-nix-shell.html) ]## - # Nix shell color. - typeset -g POWERLEVEL9K_NIX_SHELL_FOREGROUND=74 - - # Tip: If you want to see just the icon without "pure" and "impure", uncomment the next line. - # typeset -g POWERLEVEL9K_NIX_SHELL_CONTENT_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_NIX_SHELL_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ disk_usage: disk usage ]################################## - # Colors for different levels of disk usage. - typeset -g POWERLEVEL9K_DISK_USAGE_NORMAL_FOREGROUND=35 - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_FOREGROUND=220 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_FOREGROUND=160 - # Thresholds for different levels of disk usage (percentage points). - typeset -g POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL=90 - typeset -g POWERLEVEL9K_DISK_USAGE_CRITICAL_LEVEL=95 - # If set to true, hide disk usage when below $POWERLEVEL9K_DISK_USAGE_WARNING_LEVEL percent. - typeset -g POWERLEVEL9K_DISK_USAGE_ONLY_WARNING=false - # Custom icon. - # typeset -g POWERLEVEL9K_DISK_USAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ vi_mode: vi mode (you don't need this if you've enabled prompt_char) ]########### - # Text and color for normal (a.k.a. command) vi mode. - typeset -g POWERLEVEL9K_VI_COMMAND_MODE_STRING=NORMAL - typeset -g POWERLEVEL9K_VI_MODE_NORMAL_FOREGROUND=106 - # Text and color for visual vi mode. - typeset -g POWERLEVEL9K_VI_VISUAL_MODE_STRING=VISUAL - typeset -g POWERLEVEL9K_VI_MODE_VISUAL_FOREGROUND=68 - # Text and color for overtype (a.k.a. overwrite and replace) vi mode. - typeset -g POWERLEVEL9K_VI_OVERWRITE_MODE_STRING=OVERTYPE - typeset -g POWERLEVEL9K_VI_MODE_OVERWRITE_FOREGROUND=172 - # Text and color for insert vi mode. - typeset -g POWERLEVEL9K_VI_INSERT_MODE_STRING= - typeset -g POWERLEVEL9K_VI_MODE_INSERT_FOREGROUND=66 - - # Custom icon. - # typeset -g POWERLEVEL9K_RANGER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ ram: free RAM ]####################################### - # RAM color. - typeset -g POWERLEVEL9K_RAM_FOREGROUND=66 - # Custom icon. - # typeset -g POWERLEVEL9K_RAM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################################[ swap: used swap ]###################################### - # Swap color. - typeset -g POWERLEVEL9K_SWAP_FOREGROUND=96 - # Custom icon. - # typeset -g POWERLEVEL9K_SWAP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ######################################[ load: CPU load ]###################################### - # Show average CPU load over this many last minutes. Valid values are 1, 5 and 15. - typeset -g POWERLEVEL9K_LOAD_WHICH=5 - # Load color when load is under 50%. - typeset -g POWERLEVEL9K_LOAD_NORMAL_FOREGROUND=66 - # Load color when load is between 50% and 70%. - typeset -g POWERLEVEL9K_LOAD_WARNING_FOREGROUND=178 - # Load color when load is over 70%. - typeset -g POWERLEVEL9K_LOAD_CRITICAL_FOREGROUND=166 - # Custom icon. - # typeset -g POWERLEVEL9K_LOAD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ todo: todo items (https://github.com/todotxt/todo.txt-cli) ]################ - # Todo color. - typeset -g POWERLEVEL9K_TODO_FOREGROUND=110 - # Hide todo when the total number of tasks is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_TOTAL=true - # Hide todo when the number of tasks after filtering is zero. - typeset -g POWERLEVEL9K_TODO_HIDE_ZERO_FILTERED=false - - # Todo format. The following parameters are available within the expansion. - # - # - P9K_TODO_TOTAL_TASK_COUNT The total number of tasks. - # - P9K_TODO_FILTERED_TASK_COUNT The number of tasks after filtering. - # - # These variables correspond to the last line of the output of `todo.sh -p ls`: - # - # TODO: 24 of 42 tasks shown - # - # Here 24 is P9K_TODO_FILTERED_TASK_COUNT and 42 is P9K_TODO_TOTAL_TASK_COUNT. - # - # typeset -g POWERLEVEL9K_TODO_CONTENT_EXPANSION='$P9K_TODO_FILTERED_TASK_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TODO_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ timewarrior: timewarrior tracking status (https://timewarrior.net/) ]############ - # Timewarrior color. - typeset -g POWERLEVEL9K_TIMEWARRIOR_FOREGROUND=110 - # If the tracked task is longer than 24 characters, truncate and append "…". - # Tip: To always display tasks without truncation, delete the following parameter. - # Tip: To hide task names and display just the icon when time tracking is enabled, set the - # value of the following parameter to "". - typeset -g POWERLEVEL9K_TIMEWARRIOR_CONTENT_EXPANSION='${P9K_CONTENT:0:24}${${P9K_CONTENT:24}:+…}' - - # Custom icon. - # typeset -g POWERLEVEL9K_TIMEWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ taskwarrior: taskwarrior task count (https://taskwarrior.org/) ]############## - # Taskwarrior color. - typeset -g POWERLEVEL9K_TASKWARRIOR_FOREGROUND=74 - - # Taskwarrior segment format. The following parameters are available within the expansion. - # - # - P9K_TASKWARRIOR_PENDING_COUNT The number of pending tasks: `task +PENDING count`. - # - P9K_TASKWARRIOR_OVERDUE_COUNT The number of overdue tasks: `task +OVERDUE count`. - # - # Zero values are represented as empty parameters. - # - # The default format: - # - # '${P9K_TASKWARRIOR_OVERDUE_COUNT:+"!$P9K_TASKWARRIOR_OVERDUE_COUNT/"}$P9K_TASKWARRIOR_PENDING_COUNT' - # - # typeset -g POWERLEVEL9K_TASKWARRIOR_CONTENT_EXPANSION='$P9K_TASKWARRIOR_PENDING_COUNT' - - # Custom icon. - # typeset -g POWERLEVEL9K_TASKWARRIOR_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##################################[ context: user@hostname ]################################## - # Context color when running with privileges. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_FOREGROUND=178 - # Context color in SSH without privileges. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_FOREGROUND=180 - # Default context color (no privileges, no SSH). - typeset -g POWERLEVEL9K_CONTEXT_FOREGROUND=180 - - # Context format when running with privileges: bold user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_ROOT_TEMPLATE='%B%n@%m' - # Context format when in SSH without privileges: user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_{REMOTE,REMOTE_SUDO}_TEMPLATE='%n@%m' - # Default context format (no privileges, no SSH): user@hostname. - typeset -g POWERLEVEL9K_CONTEXT_TEMPLATE='%n@%m' - - # Don't show context unless running with privileges or in SSH. - # Tip: Remove the next line to always show context. - typeset -g POWERLEVEL9K_CONTEXT_{DEFAULT,SUDO}_{CONTENT,VISUAL_IDENTIFIER}_EXPANSION= - - # Custom icon. - # typeset -g POWERLEVEL9K_CONTEXT_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_CONTEXT_PREFIX='%246Fwith ' - - ###[ virtualenv: python virtual environment (https://docs.python.org/3/library/venv.html) ]### - # Python virtual environment color. - typeset -g POWERLEVEL9K_VIRTUALENV_FOREGROUND=37 - # Don't show Python version next to the virtual environment name. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_PYTHON_VERSION=false - # If set to "false", won't show virtualenv if pyenv is already shown. - # If set to "if-different", won't show virtualenv if it's the same as pyenv. - typeset -g POWERLEVEL9K_VIRTUALENV_SHOW_WITH_PYENV=false - # Separate environment name from Python version only with a space. - typeset -g POWERLEVEL9K_VIRTUALENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_VIRTUALENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ anaconda: conda environment (https://conda.io/) ]###################### - # Anaconda environment color. - typeset -g POWERLEVEL9K_ANACONDA_FOREGROUND=37 - - # Anaconda segment format. The following parameters are available within the expansion. - # - # - CONDA_PREFIX Absolute path to the active Anaconda/Miniconda environment. - # - CONDA_DEFAULT_ENV Name of the active Anaconda/Miniconda environment. - # - CONDA_PROMPT_MODIFIER Configurable prompt modifier (see below). - # - P9K_ANACONDA_PYTHON_VERSION Current python version (python --version). - # - # CONDA_PROMPT_MODIFIER can be configured with the following command: - # - # conda config --set env_prompt '({default_env}) ' - # - # The last argument is a Python format string that can use the following variables: - # - # - prefix The same as CONDA_PREFIX. - # - default_env The same as CONDA_DEFAULT_ENV. - # - name The last segment of CONDA_PREFIX. - # - stacked_env Comma-separated list of names in the environment stack. The first element is - # always the same as default_env. - # - # Note: '({default_env}) ' is the default value of env_prompt. - # - # The default value of POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION expands to $CONDA_PROMPT_MODIFIER - # without the surrounding parentheses, or to the last path component of CONDA_PREFIX if the former - # is empty. - typeset -g POWERLEVEL9K_ANACONDA_CONTENT_EXPANSION='${${${${CONDA_PROMPT_MODIFIER#\(}% }%\)}:-${CONDA_PREFIX:t}}' - - # Custom icon. - # typeset -g POWERLEVEL9K_ANACONDA_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ pyenv: python environment (https://github.com/pyenv/pyenv) ]################ - # Pyenv color. - typeset -g POWERLEVEL9K_PYENV_FOREGROUND=37 - # Hide python version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PYENV_SOURCES=(shell local global) - # If set to false, hide python version if it's the same as global: - # $(pyenv version-name) == $(pyenv global). - typeset -g POWERLEVEL9K_PYENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide python version if it's equal to "system". - typeset -g POWERLEVEL9K_PYENV_SHOW_SYSTEM=true - - # Pyenv segment format. The following parameters are available within the expansion. - # - # - P9K_CONTENT Current pyenv environment (pyenv version-name). - # - P9K_PYENV_PYTHON_VERSION Current python version (python --version). - # - # The default format has the following logic: - # - # 1. Display just "$P9K_CONTENT" if it's equal to "$P9K_PYENV_PYTHON_VERSION" or - # starts with "$P9K_PYENV_PYTHON_VERSION/". - # 2. Otherwise display "$P9K_CONTENT $P9K_PYENV_PYTHON_VERSION". - typeset -g POWERLEVEL9K_PYENV_CONTENT_EXPANSION='${P9K_CONTENT}${${P9K_CONTENT:#$P9K_PYENV_PYTHON_VERSION(|/*)}:+ $P9K_PYENV_PYTHON_VERSION}' - - # Custom icon. - # typeset -g POWERLEVEL9K_PYENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ goenv: go environment (https://github.com/syndbg/goenv) ]################ - # Goenv color. - typeset -g POWERLEVEL9K_GOENV_FOREGROUND=37 - # Hide go version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_GOENV_SOURCES=(shell local global) - # If set to false, hide go version if it's the same as global: - # $(goenv version-name) == $(goenv global). - typeset -g POWERLEVEL9K_GOENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide go version if it's equal to "system". - typeset -g POWERLEVEL9K_GOENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_GOENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ nodenv: node.js version from nodenv (https://github.com/nodenv/nodenv) ]########## - # Nodenv color. - typeset -g POWERLEVEL9K_NODENV_FOREGROUND=70 - # Hide node version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_NODENV_SOURCES=(shell local global) - # If set to false, hide node version if it's the same as global: - # $(nodenv version-name) == $(nodenv global). - typeset -g POWERLEVEL9K_NODENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide node version if it's equal to "system". - typeset -g POWERLEVEL9K_NODENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############[ nvm: node.js version from nvm (https://github.com/nvm-sh/nvm) ]############### - # Nvm color. - typeset -g POWERLEVEL9K_NVM_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_NVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ nodeenv: node.js environment (https://github.com/ekalinin/nodeenv) ]############ - # Nodeenv color. - typeset -g POWERLEVEL9K_NODEENV_FOREGROUND=70 - # Don't show Node version next to the environment name. - typeset -g POWERLEVEL9K_NODEENV_SHOW_NODE_VERSION=false - # Separate environment name from Node version only with a space. - typeset -g POWERLEVEL9K_NODEENV_{LEFT,RIGHT}_DELIMITER= - # Custom icon. - # typeset -g POWERLEVEL9K_NODEENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##############################[ node_version: node.js version ]############################### - # Node version color. - typeset -g POWERLEVEL9K_NODE_VERSION_FOREGROUND=70 - # Show node version only when in a directory tree containing package.json. - typeset -g POWERLEVEL9K_NODE_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_NODE_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ go_version: go version (https://golang.org) ]######################## - # Go version color. - typeset -g POWERLEVEL9K_GO_VERSION_FOREGROUND=37 - # Show go version only when in a go project subdirectory. - typeset -g POWERLEVEL9K_GO_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_GO_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #################[ rust_version: rustc version (https://www.rust-lang.org) ]################## - # Rust version color. - typeset -g POWERLEVEL9K_RUST_VERSION_FOREGROUND=37 - # Show rust version only when in a rust project subdirectory. - typeset -g POWERLEVEL9K_RUST_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_RUST_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ dotnet_version: .NET version (https://dotnet.microsoft.com) ]################ - # .NET version color. - typeset -g POWERLEVEL9K_DOTNET_VERSION_FOREGROUND=134 - # Show .NET version only when in a .NET project subdirectory. - typeset -g POWERLEVEL9K_DOTNET_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_DOTNET_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #####################[ php_version: php version (https://www.php.net/) ]###################### - # PHP version color. - typeset -g POWERLEVEL9K_PHP_VERSION_FOREGROUND=99 - # Show PHP version only when in a PHP project subdirectory. - typeset -g POWERLEVEL9K_PHP_VERSION_PROJECT_ONLY=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHP_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ laravel_version: laravel php framework version (https://laravel.com/) ]########### - # Laravel version color. - typeset -g POWERLEVEL9K_LARAVEL_VERSION_FOREGROUND=161 - # Custom icon. - # typeset -g POWERLEVEL9K_LARAVEL_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ####################[ java_version: java version (https://www.java.com/) ]#################### - # Java version color. - typeset -g POWERLEVEL9K_JAVA_VERSION_FOREGROUND=32 - # Show java version only when in a java project subdirectory. - typeset -g POWERLEVEL9K_JAVA_VERSION_PROJECT_ONLY=true - # Show brief version. - typeset -g POWERLEVEL9K_JAVA_VERSION_FULL=false - # Custom icon. - # typeset -g POWERLEVEL9K_JAVA_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###[ package: name@version from package.json (https://docs.npmjs.com/files/package.json) ]#### - # Package color. - typeset -g POWERLEVEL9K_PACKAGE_FOREGROUND=117 - # Package format. The following parameters are available within the expansion. - # - # - P9K_PACKAGE_NAME The value of `name` field in package.json. - # - P9K_PACKAGE_VERSION The value of `version` field in package.json. - # - # typeset -g POWERLEVEL9K_PACKAGE_CONTENT_EXPANSION='${P9K_PACKAGE_NAME//\%/%%}@${P9K_PACKAGE_VERSION//\%/%%}' - # Custom icon. - # typeset -g POWERLEVEL9K_PACKAGE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ rbenv: ruby version from rbenv (https://github.com/rbenv/rbenv) ]############## - # Rbenv color. - typeset -g POWERLEVEL9K_RBENV_FOREGROUND=168 - # Hide ruby version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_RBENV_SOURCES=(shell local global) - # If set to false, hide ruby version if it's the same as global: - # $(rbenv version-name) == $(rbenv global). - typeset -g POWERLEVEL9K_RBENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide ruby version if it's equal to "system". - typeset -g POWERLEVEL9K_RBENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_RBENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######################[ rvm: ruby version from rvm (https://rvm.io) ]######################## - # Rvm color. - typeset -g POWERLEVEL9K_RVM_FOREGROUND=168 - # Don't show @gemset at the end. - typeset -g POWERLEVEL9K_RVM_SHOW_GEMSET=false - # Don't show ruby- at the front. - typeset -g POWERLEVEL9K_RVM_SHOW_PREFIX=false - # Custom icon. - # typeset -g POWERLEVEL9K_RVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ fvm: flutter version management (https://github.com/leoafarias/fvm) ]############ - # Fvm color. - typeset -g POWERLEVEL9K_FVM_FOREGROUND=38 - # Custom icon. - # typeset -g POWERLEVEL9K_FVM_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ luaenv: lua version from luaenv (https://github.com/cehoffman/luaenv) ]########### - # Lua color. - typeset -g POWERLEVEL9K_LUAENV_FOREGROUND=32 - # Hide lua version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_LUAENV_SOURCES=(shell local global) - # If set to false, hide lua version if it's the same as global: - # $(luaenv version-name) == $(luaenv global). - typeset -g POWERLEVEL9K_LUAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide lua version if it's equal to "system". - typeset -g POWERLEVEL9K_LUAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_LUAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###############[ jenv: java version from jenv (https://github.com/jenv/jenv) ]################ - # Java color. - typeset -g POWERLEVEL9K_JENV_FOREGROUND=32 - # Hide java version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_JENV_SOURCES=(shell local global) - # If set to false, hide java version if it's the same as global: - # $(jenv version-name) == $(jenv global). - typeset -g POWERLEVEL9K_JENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide java version if it's equal to "system". - typeset -g POWERLEVEL9K_JENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_JENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ plenv: perl version from plenv (https://github.com/tokuhirom/plenv) ]############ - # Perl color. - typeset -g POWERLEVEL9K_PLENV_FOREGROUND=67 - # Hide perl version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PLENV_SOURCES=(shell local global) - # If set to false, hide perl version if it's the same as global: - # $(plenv version-name) == $(plenv global). - typeset -g POWERLEVEL9K_PLENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide perl version if it's equal to "system". - typeset -g POWERLEVEL9K_PLENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PLENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ############[ phpenv: php version from phpenv (https://github.com/phpenv/phpenv) ]############ - # PHP color. - typeset -g POWERLEVEL9K_PHPENV_FOREGROUND=99 - # Hide php version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_PHPENV_SOURCES=(shell local global) - # If set to false, hide php version if it's the same as global: - # $(phpenv version-name) == $(phpenv global). - typeset -g POWERLEVEL9K_PHPENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide php version if it's equal to "system". - typeset -g POWERLEVEL9K_PHPENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_PHPENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #######[ scalaenv: scala version from scalaenv (https://github.com/scalaenv/scalaenv) ]####### - # Scala color. - typeset -g POWERLEVEL9K_SCALAENV_FOREGROUND=160 - # Hide scala version if it doesn't come from one of these sources. - typeset -g POWERLEVEL9K_SCALAENV_SOURCES=(shell local global) - # If set to false, hide scala version if it's the same as global: - # $(scalaenv version-name) == $(scalaenv global). - typeset -g POWERLEVEL9K_SCALAENV_PROMPT_ALWAYS_SHOW=false - # If set to false, hide scala version if it's equal to "system". - typeset -g POWERLEVEL9K_SCALAENV_SHOW_SYSTEM=true - # Custom icon. - # typeset -g POWERLEVEL9K_SCALAENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ haskell_stack: haskell version from stack (https://haskellstack.org/) ]########### - # Haskell color. - typeset -g POWERLEVEL9K_HASKELL_STACK_FOREGROUND=172 - # Hide haskell version if it doesn't come from one of these sources. - # - # shell: version is set by STACK_YAML - # local: version is set by stack.yaml up the directory tree - # global: version is set by the implicit global project (~/.stack/global-project/stack.yaml) - typeset -g POWERLEVEL9K_HASKELL_STACK_SOURCES=(shell local) - # If set to false, hide haskell version if it's the same as in the implicit global project. - typeset -g POWERLEVEL9K_HASKELL_STACK_ALWAYS_SHOW=true - # Custom icon. - # typeset -g POWERLEVEL9K_HASKELL_STACK_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################[ terraform: terraform workspace (https://www.terraform.io) ]################# - # Don't show terraform workspace if it's literally "default". - typeset -g POWERLEVEL9K_TERRAFORM_SHOW_DEFAULT=false - # POWERLEVEL9K_TERRAFORM_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current terraform workspace gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_TERRAFORM_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_TERRAFORM_CLASSES defines the workspace class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' OTHER) - # - # If your current terraform workspace is "project_test", its class is TEST because "project_test" - # doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_TERRAFORM_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_TERRAFORM_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' OTHER) - typeset -g POWERLEVEL9K_TERRAFORM_OTHER_FOREGROUND=38 - # typeset -g POWERLEVEL9K_TERRAFORM_OTHER_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ terraform_version: terraform version (https://www.terraform.io) ]############## - # Terraform version color. - typeset -g POWERLEVEL9K_TERRAFORM_VERSION_FOREGROUND=38 - # Custom icon. - # typeset -g POWERLEVEL9K_TERRAFORM_VERSION_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #############[ kubecontext: current kubernetes context (https://kubernetes.io/) ]############# - # Show kubecontext only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show kubecontext. - typeset -g POWERLEVEL9K_KUBECONTEXT_SHOW_ON_COMMAND='kubectl|helm|kubens|kubectx|oc|istioctl|kogito|k9s|helmfile|flux|fluxctl|stern' - - # Kubernetes context classes for the purpose of using different colors, icons and expansions with - # different contexts. - # - # POWERLEVEL9K_KUBECONTEXT_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current kubernetes context gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_KUBECONTEXT_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_KUBECONTEXT_CLASSES defines the context class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current kubernetes context is "deathray-testing/default", its class is TEST - # because "deathray-testing/default" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_KUBECONTEXT_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_KUBECONTEXT_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_FOREGROUND=134 - # typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_KUBECONTEXT_CONTENT_EXPANSION to specify the content displayed by kubecontext - # segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # Within the expansion the following parameters are always available: - # - # - P9K_CONTENT The content that would've been displayed if there was no content - # expansion defined. - # - P9K_KUBECONTEXT_NAME The current context's name. Corresponds to column NAME in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_CLUSTER The current context's cluster. Corresponds to column CLUSTER in the - # output of `kubectl config get-contexts`. - # - P9K_KUBECONTEXT_NAMESPACE The current context's namespace. Corresponds to column NAMESPACE - # in the output of `kubectl config get-contexts`. If there is no - # namespace, the parameter is set to "default". - # - P9K_KUBECONTEXT_USER The current context's user. Corresponds to column AUTHINFO in the - # output of `kubectl config get-contexts`. - # - # If the context points to Google Kubernetes Engine (GKE) or Elastic Kubernetes Service (EKS), - # the following extra parameters are available: - # - # - P9K_KUBECONTEXT_CLOUD_NAME Either "gke" or "eks". - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT Account/project ID. - # - P9K_KUBECONTEXT_CLOUD_ZONE Availability zone. - # - P9K_KUBECONTEXT_CLOUD_CLUSTER Cluster. - # - # P9K_KUBECONTEXT_CLOUD_* parameters are derived from P9K_KUBECONTEXT_CLUSTER. For example, - # if P9K_KUBECONTEXT_CLUSTER is "gke_my-account_us-east1-a_my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=gke - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=my-account - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east1-a - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - # - # If P9K_KUBECONTEXT_CLUSTER is "arn:aws:eks:us-east-1:123456789012:cluster/my-cluster-01": - # - # - P9K_KUBECONTEXT_CLOUD_NAME=eks - # - P9K_KUBECONTEXT_CLOUD_ACCOUNT=123456789012 - # - P9K_KUBECONTEXT_CLOUD_ZONE=us-east-1 - # - P9K_KUBECONTEXT_CLOUD_CLUSTER=my-cluster-01 - typeset -g POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION= - # Show P9K_KUBECONTEXT_CLOUD_CLUSTER if it's not empty and fall back to P9K_KUBECONTEXT_NAME. - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${P9K_KUBECONTEXT_CLOUD_CLUSTER:-${P9K_KUBECONTEXT_NAME}}' - # Append the current context's namespace if it's not "default". - POWERLEVEL9K_KUBECONTEXT_DEFAULT_CONTENT_EXPANSION+='${${:-/$P9K_KUBECONTEXT_NAMESPACE}:#/default}' - - # Custom prefix. - # typeset -g POWERLEVEL9K_KUBECONTEXT_PREFIX='%246Fat ' - - #[ aws: aws profile (https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html) ]# - # Show aws only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show aws. - typeset -g POWERLEVEL9K_AWS_SHOW_ON_COMMAND='aws|awless|terraform|pulumi|terragrunt' - - # POWERLEVEL9K_AWS_CLASSES is an array with even number of elements. The first element - # in each pair defines a pattern against which the current AWS profile gets matched. - # More specifically, it's P9K_CONTENT prior to the application of context expansion (see below) - # that gets matched. If you unset all POWERLEVEL9K_AWS_*CONTENT_EXPANSION parameters, - # you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_AWS_CLASSES defines the profile class. Patterns are tried in order. The - # first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD - # '*test*' TEST - # '*' DEFAULT) - # - # If your current AWS profile is "company_test", its class is TEST - # because "company_test" doesn't match the pattern '*prod*' but does match '*test*'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_AWS_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_AWS_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_AWS_TEST_CONTENT_EXPANSION='> ${P9K_CONTENT} <' - typeset -g POWERLEVEL9K_AWS_CLASSES=( - # '*prod*' PROD # These values are examples that are unlikely - # '*test*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_AWS_DEFAULT_FOREGROUND=208 - # typeset -g POWERLEVEL9K_AWS_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # AWS segment format. The following parameters are available within the expansion. - # - # - P9K_AWS_PROFILE The name of the current AWS profile. - # - P9K_AWS_REGION The region associated with the current AWS profile. - typeset -g POWERLEVEL9K_AWS_CONTENT_EXPANSION='${P9K_AWS_PROFILE//\%/%%}${P9K_AWS_REGION:+ ${P9K_AWS_REGION//\%/%%}}' - - #[ aws_eb_env: aws elastic beanstalk environment (https://aws.amazon.com/elasticbeanstalk/) ]# - # AWS Elastic Beanstalk environment color. - typeset -g POWERLEVEL9K_AWS_EB_ENV_FOREGROUND=70 - # Custom icon. - # typeset -g POWERLEVEL9K_AWS_EB_ENV_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ azure: azure account name (https://docs.microsoft.com/en-us/cli/azure) ]########## - # Show azure only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show azure. - typeset -g POWERLEVEL9K_AZURE_SHOW_ON_COMMAND='az|terraform|pulumi|terragrunt' - # Azure account name color. - typeset -g POWERLEVEL9K_AZURE_FOREGROUND=32 - # Custom icon. - # typeset -g POWERLEVEL9K_AZURE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ##########[ gcloud: google cloud account and project (https://cloud.google.com/) ]########### - # Show gcloud only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show gcloud. - typeset -g POWERLEVEL9K_GCLOUD_SHOW_ON_COMMAND='gcloud|gcs|gsutil' - # Google cloud color. - typeset -g POWERLEVEL9K_GCLOUD_FOREGROUND=32 - - # Google cloud format. Change the value of POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION and/or - # POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION if the default is too verbose or not informative - # enough. You can use the following parameters in the expansions. Each of them corresponds to the - # output of `gcloud` tool. - # - # Parameter | Source - # -------------------------|-------------------------------------------------------------------- - # P9K_GCLOUD_CONFIGURATION | gcloud config configurations list --format='value(name)' - # P9K_GCLOUD_ACCOUNT | gcloud config get-value account - # P9K_GCLOUD_PROJECT_ID | gcloud config get-value project - # P9K_GCLOUD_PROJECT_NAME | gcloud projects describe $P9K_GCLOUD_PROJECT_ID --format='value(name)' - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced with '%%'. - # - # Obtaining project name requires sending a request to Google servers. This can take a long time - # and even fail. When project name is unknown, P9K_GCLOUD_PROJECT_NAME is not set and gcloud - # prompt segment is in state PARTIAL. When project name gets known, P9K_GCLOUD_PROJECT_NAME gets - # set and gcloud prompt segment transitions to state COMPLETE. - # - # You can customize the format, icon and colors of gcloud segment separately for states PARTIAL - # and COMPLETE. You can also hide gcloud in state PARTIAL by setting - # POWERLEVEL9K_GCLOUD_PARTIAL_VISUAL_IDENTIFIER_EXPANSION and - # POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION to empty. - typeset -g POWERLEVEL9K_GCLOUD_PARTIAL_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_ID//\%/%%}' - typeset -g POWERLEVEL9K_GCLOUD_COMPLETE_CONTENT_EXPANSION='${P9K_GCLOUD_PROJECT_NAME//\%/%%}' - - # Send a request to Google (by means of `gcloud projects describe ...`) to obtain project name - # this often. Negative value disables periodic polling. In this mode project name is retrieved - # only when the current configuration, account or project id changes. - typeset -g POWERLEVEL9K_GCLOUD_REFRESH_PROJECT_NAME_SECONDS=60 - - # Custom icon. - # typeset -g POWERLEVEL9K_GCLOUD_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #[ google_app_cred: google application credentials (https://cloud.google.com/docs/authentication/production) ]# - # Show google_app_cred only when the command you are typing invokes one of these tools. - # Tip: Remove the next line to always show google_app_cred. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_SHOW_ON_COMMAND='terraform|pulumi|terragrunt' - - # Google application credentials classes for the purpose of using different colors, icons and - # expansions with different credentials. - # - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES is an array with even number of elements. The first - # element in each pair defines a pattern against which the current kubernetes context gets - # matched. More specifically, it's P9K_CONTENT prior to the application of context expansion - # (see below) that gets matched. If you unset all POWERLEVEL9K_GOOGLE_APP_CRED_*CONTENT_EXPANSION - # parameters, you'll see this value in your prompt. The second element of each pair in - # POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES defines the context class. Patterns are tried in order. - # The first match wins. - # - # For example, given these settings: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD - # '*:*test*:*' TEST - # '*' DEFAULT) - # - # If your current Google application credentials is "service_account deathray-testing x@y.com", - # its class is TEST because it doesn't match the pattern '* *prod* *' but does match '* *test* *'. - # - # You can define different colors, icons and content expansions for different classes: - # - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_FOREGROUND=28 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_VISUAL_IDENTIFIER_EXPANSION='⭐' - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_TEST_CONTENT_EXPANSION='$P9K_GOOGLE_APP_CRED_PROJECT_ID' - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_CLASSES=( - # '*:*prod*:*' PROD # These values are examples that are unlikely - # '*:*test*:*' TEST # to match your needs. Customize them as needed. - '*' DEFAULT) - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_FOREGROUND=32 - # typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use POWERLEVEL9K_GOOGLE_APP_CRED_CONTENT_EXPANSION to specify the content displayed by - # google_app_cred segment. Parameter expansions are very flexible and fast, too. See reference: - # http://zsh.sourceforge.net/Doc/Release/Expansion.html#Parameter-Expansion. - # - # You can use the following parameters in the expansion. Each of them corresponds to one of the - # fields in the JSON file pointed to by GOOGLE_APPLICATION_CREDENTIALS. - # - # Parameter | JSON key file field - # ---------------------------------+--------------- - # P9K_GOOGLE_APP_CRED_TYPE | type - # P9K_GOOGLE_APP_CRED_PROJECT_ID | project_id - # P9K_GOOGLE_APP_CRED_CLIENT_EMAIL | client_email - # - # Note: ${VARIABLE//\%/%%} expands to ${VARIABLE} with all occurrences of '%' replaced by '%%'. - typeset -g POWERLEVEL9K_GOOGLE_APP_CRED_DEFAULT_CONTENT_EXPANSION='${P9K_GOOGLE_APP_CRED_PROJECT_ID//\%/%%}' - - ##############[ toolbox: toolbox name (https://github.com/containers/toolbox) ]############### - # Toolbox color. - typeset -g POWERLEVEL9K_TOOLBOX_FOREGROUND=178 - # Don't display the name of the toolbox if it matches fedora-toolbox-*. - typeset -g POWERLEVEL9K_TOOLBOX_CONTENT_EXPANSION='${P9K_TOOLBOX_NAME:#fedora-toolbox-*}' - # Custom icon. - # typeset -g POWERLEVEL9K_TOOLBOX_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TOOLBOX_PREFIX='%246Fin ' - - ###############################[ public_ip: public IP address ]############################### - # Public IP color. - typeset -g POWERLEVEL9K_PUBLIC_IP_FOREGROUND=94 - # Custom icon. - # typeset -g POWERLEVEL9K_PUBLIC_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ########################[ vpn_ip: virtual private network indicator ]######################### - # VPN IP color. - typeset -g POWERLEVEL9K_VPN_IP_FOREGROUND=81 - # When on VPN, show just an icon without the IP address. - # Tip: To display the private IP address when on VPN, remove the next line. - typeset -g POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION= - # Regular expression for the VPN network interface. Run `ifconfig` or `ip -4 a show` while on VPN - # to see the name of the interface. - typeset -g POWERLEVEL9K_VPN_IP_INTERFACE='(gpd|wg|(.*tun)|tailscale)[0-9]*' - # If set to true, show one segment per matching network interface. If set to false, show only - # one segment corresponding to the first matching network interface. - # Tip: If you set it to true, you'll probably want to unset POWERLEVEL9K_VPN_IP_CONTENT_EXPANSION. - typeset -g POWERLEVEL9K_VPN_IP_SHOW_ALL=false - # Custom icon. - # typeset -g POWERLEVEL9K_VPN_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ###########[ ip: ip address and bandwidth usage for a specified network interface ]########### - # IP color. - typeset -g POWERLEVEL9K_IP_FOREGROUND=38 - # The following parameters are accessible within the expansion: - # - # Parameter | Meaning - # ----------------------+------------------------------------------- - # P9K_IP_IP | IP address - # P9K_IP_INTERFACE | network interface - # P9K_IP_RX_BYTES | total number of bytes received - # P9K_IP_TX_BYTES | total number of bytes sent - # P9K_IP_RX_BYTES_DELTA | number of bytes received since last prompt - # P9K_IP_TX_BYTES_DELTA | number of bytes sent since last prompt - # P9K_IP_RX_RATE | receive rate (since last prompt) - # P9K_IP_TX_RATE | send rate (since last prompt) - typeset -g POWERLEVEL9K_IP_CONTENT_EXPANSION='${P9K_IP_RX_RATE:+%70F⇣$P9K_IP_RX_RATE }${P9K_IP_TX_RATE:+%215F⇡$P9K_IP_TX_RATE }%38F$P9K_IP_IP' - # Show information for the first network interface whose name matches this regular expression. - # Run `ifconfig` or `ip -4 a show` to see the names of all network interfaces. - typeset -g POWERLEVEL9K_IP_INTERFACE='[ew].*' - # Custom icon. - # typeset -g POWERLEVEL9K_IP_VISUAL_IDENTIFIER_EXPANSION='⭐' - - #########################[ proxy: system-wide http/https/ftp proxy ]########################## - # Proxy color. - typeset -g POWERLEVEL9K_PROXY_FOREGROUND=68 - # Custom icon. - # typeset -g POWERLEVEL9K_PROXY_VISUAL_IDENTIFIER_EXPANSION='⭐' - - ################################[ battery: internal battery ]################################# - # Show battery in red when it's below this level and not connected to power supply. - typeset -g POWERLEVEL9K_BATTERY_LOW_THRESHOLD=20 - typeset -g POWERLEVEL9K_BATTERY_LOW_FOREGROUND=160 - # Show battery in green when it's charging or fully charged. - typeset -g POWERLEVEL9K_BATTERY_{CHARGING,CHARGED}_FOREGROUND=70 - # Show battery in yellow when it's discharging. - typeset -g POWERLEVEL9K_BATTERY_DISCONNECTED_FOREGROUND=178 - # Battery pictograms going from low to high level of charge. - typeset -g POWERLEVEL9K_BATTERY_STAGES='\uf58d\uf579\uf57a\uf57b\uf57c\uf57d\uf57e\uf57f\uf580\uf581\uf578' - # Don't show the remaining time to charge/discharge. - typeset -g POWERLEVEL9K_BATTERY_VERBOSE=false - - #####################################[ wifi: wifi speed ]##################################### - # WiFi color. - typeset -g POWERLEVEL9K_WIFI_FOREGROUND=68 - # Custom icon. - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Use different colors and icons depending on signal strength ($P9K_WIFI_BARS). - # - # # Wifi colors and icons for different signal strength levels (low to high). - # typeset -g my_wifi_fg=(68 68 68 68 68) # <-- change these values - # typeset -g my_wifi_icon=('WiFi' 'WiFi' 'WiFi' 'WiFi' 'WiFi') # <-- change these values - # - # typeset -g POWERLEVEL9K_WIFI_CONTENT_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}$P9K_WIFI_LAST_TX_RATE Mbps' - # typeset -g POWERLEVEL9K_WIFI_VISUAL_IDENTIFIER_EXPANSION='%F{${my_wifi_fg[P9K_WIFI_BARS+1]}}${my_wifi_icon[P9K_WIFI_BARS+1]}' - # - # The following parameters are accessible within the expansions: - # - # Parameter | Meaning - # ----------------------+--------------- - # P9K_WIFI_SSID | service set identifier, a.k.a. network name - # P9K_WIFI_LINK_AUTH | authentication protocol such as "wpa2-psk" or "none"; empty if unknown - # P9K_WIFI_LAST_TX_RATE | wireless transmit rate in megabits per second - # P9K_WIFI_RSSI | signal strength in dBm, from -120 to 0 - # P9K_WIFI_NOISE | noise in dBm, from -120 to 0 - # P9K_WIFI_BARS | signal strength in bars, from 0 to 4 (derived from P9K_WIFI_RSSI and P9K_WIFI_NOISE) - - ####################################[ time: current time ]#################################### - # Current time color. - typeset -g POWERLEVEL9K_TIME_FOREGROUND=66 - # Format for the current time: 09:51:02. See `man 3 strftime`. - typeset -g POWERLEVEL9K_TIME_FORMAT='%D{%I:%M:%S %p}' - # If set to true, time will update when you hit enter. This way prompts for the past - # commands will contain the start times of their commands as opposed to the default - # behavior where they contain the end times of their preceding commands. - typeset -g POWERLEVEL9K_TIME_UPDATE_ON_COMMAND=false - # Custom icon. - # typeset -g POWERLEVEL9K_TIME_VISUAL_IDENTIFIER_EXPANSION='⭐' - # Custom prefix. - # typeset -g POWERLEVEL9K_TIME_PREFIX='%246Fat ' - - # Example of a user-defined prompt segment. Function prompt_example will be called on every - # prompt if `example` prompt segment is added to POWERLEVEL9K_LEFT_PROMPT_ELEMENTS or - # POWERLEVEL9K_RIGHT_PROMPT_ELEMENTS. It displays an icon and orange text greeting the user. - # - # Type `p10k help segment` for documentation and a more sophisticated example. - function prompt_example() { - p10k segment -f 208 -i '⭐' -t 'hello, %n' - } - - # User-defined prompt segments may optionally provide an instant_prompt_* function. Its job - # is to generate the prompt segment for display in instant prompt. See - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - # Powerlevel10k will call instant_prompt_* at the same time as the regular prompt_* function - # and will record all `p10k segment` calls it makes. When displaying instant prompt, Powerlevel10k - # will replay these calls without actually calling instant_prompt_*. It is imperative that - # instant_prompt_* always makes the same `p10k segment` calls regardless of environment. If this - # rule is not observed, the content of instant prompt will be incorrect. - # - # Usually, you should either not define instant_prompt_* or simply call prompt_* from it. If - # instant_prompt_* is not defined for a segment, the segment won't be shown in instant prompt. - function instant_prompt_example() { - # Since prompt_example always makes the same `p10k segment` calls, we can call it from - # instant_prompt_example. This will give us the same `example` prompt segment in the instant - # and regular prompts. - prompt_example - } - - # User-defined prompt segments can be customized the same way as built-in segments. - # typeset -g POWERLEVEL9K_EXAMPLE_FOREGROUND=208 - # typeset -g POWERLEVEL9K_EXAMPLE_VISUAL_IDENTIFIER_EXPANSION='⭐' - - # Transient prompt works similarly to the builtin transient_rprompt option. It trims down prompt - # when accepting a command line. Supported values: - # - # - off: Don't change prompt when accepting a command line. - # - always: Trim down prompt when accepting a command line. - # - same-dir: Trim down prompt when accepting a command line unless this is the first command - # typed after changing current working directory. - typeset -g POWERLEVEL9K_TRANSIENT_PROMPT=always - - # Instant prompt mode. - # - # - off: Disable instant prompt. Choose this if you've tried instant prompt and found - # it incompatible with your zsh configuration files. - # - quiet: Enable instant prompt and don't print warnings when detecting console output - # during zsh initialization. Choose this if you've read and understood - # https://github.com/romkatv/powerlevel10k/blob/master/README.md#instant-prompt. - # - verbose: Enable instant prompt and print a warning when detecting console output during - # zsh initialization. Choose this if you've never tried instant prompt, haven't - # seen the warning, or if you are unsure what this all means. - typeset -g POWERLEVEL9K_INSTANT_PROMPT=quiet - - # Hot reload allows you to change POWERLEVEL9K options after Powerlevel10k has been initialized. - # For example, you can type POWERLEVEL9K_BACKGROUND=red and see your prompt turn red. Hot reload - # can slow down prompt by 1-2 milliseconds, so it's better to keep it turned off unless you - # really need it. - typeset -g POWERLEVEL9K_DISABLE_HOT_RELOAD=true - - # If p10k is already loaded, reload configuration. - # This works even with POWERLEVEL9K_DISABLE_HOT_RELOAD=true. - (( ! $+functions[p10k] )) || p10k reload -} - -# Tell `p10k configure` which file it should overwrite. -typeset -g POWERLEVEL9K_CONFIG_FILE=${${(%):-%x}:a} - -(( ${#p10k_config_opts} )) && setopt ${p10k_config_opts[@]} -'builtin' 'unset' 'p10k_config_opts' diff --git a/dotfiles/.vim/autoload/lightline/colorscheme/Betelgeuse.vim b/.vim/autoload/lightline/colorscheme/Betelgeuse.vim similarity index 100% rename from dotfiles/.vim/autoload/lightline/colorscheme/Betelgeuse.vim rename to .vim/autoload/lightline/colorscheme/Betelgeuse.vim diff --git a/dotfiles/.vim/autoload/plug.vim b/.vim/autoload/plug.vim similarity index 100% rename from dotfiles/.vim/autoload/plug.vim rename to .vim/autoload/plug.vim diff --git a/dotfiles/.vim/colors/betelgeuse.vim b/.vim/colors/betelgeuse.vim similarity index 100% rename from dotfiles/.vim/colors/betelgeuse.vim rename to .vim/colors/betelgeuse.vim diff --git a/dotfiles/.vscode/extensions.json b/.vscode/extensions.json similarity index 100% rename from dotfiles/.vscode/extensions.json rename to .vscode/extensions.json diff --git a/dotfiles/.vscode/settings.json b/.vscode/settings.json similarity index 100% rename from dotfiles/.vscode/settings.json rename to .vscode/settings.json diff --git a/dotfiles/.Xresources b/dotfiles/.Xresources deleted file mode 100644 index 8b106b5e..00000000 --- a/dotfiles/.Xresources +++ /dev/null @@ -1,38 +0,0 @@ - -! general -*background: rgb:16/19/25 -*foreground: rgb:aa/ae/b8 - -! blacks -*color0: rgb:47/4b/56 -*color8: rgb:60/64/6f - -! reds -*color1: rgb:ed/25/4e -*color9: rgb:e5/45/68 - -! greens -*color2: rgb:71/f7/9f -*color10: rgb:81/ed/a9 - -! yellows -*color3: rgb:f9/dc/5c -*color11: rgb:ee/d8/73 - -! blues -*color4: rgb:7c/b7/ff -*color12: rgb:8a/ba/f6 - -! magentas -*color5: rgb:c7/4d/89 -*color13: rgb:c6/65/97 - -! cyans -*color6: rgb:0/c1/e4 -*color14: rgb:27/c2/e0 - -! whites -*color7: rgb:aa/ae/b8 -*color15: rgb:c3/c7/d1 - -xterm*faceName: Hack Nerd Font diff --git a/dotfiles/.bash_logout b/dotfiles/.bash_logout deleted file mode 100644 index 972aeffc..00000000 --- a/dotfiles/.bash_logout +++ /dev/null @@ -1,5 +0,0 @@ -# ~/.bash_logout: executed by bash(1) when login shell exits - -if [ "$SHLVL" = 1 ]; then - [ -x /usr/bin/clear_console ] && /usr/bin/clear_console -q -fi diff --git a/dotfiles/.bash_profile b/dotfiles/.bash_profile deleted file mode 100644 index b8a2363a..00000000 --- a/dotfiles/.bash_profile +++ /dev/null @@ -1,28 +0,0 @@ -# Prefer US English -export LANG="en_US" - -# Detect support for advanced terminal features -if [ "$0" = 'bash' ] || [ "$0" = '/bin/bash' ]; then - export BASH_SUPPORT=true -fi - -chmod +x ~/.local/bin/* - -### Clean Up -# Too many dotfiles are stressful :| -if [ -d /usr/local/src/professor-dotfiles ]; then - if [ -f ~/.gtkrc-2.0-kde4 ]; then - mkdir -p ~/.config > /dev/null - mv -f ~/.gtkrc-2.0-kde4 ~/.config/gtkrc-2.0-kde4.bak > /dev/null - fi -fi - -if [ -e install-terminal-theme ]; then - install-terminal-theme > /dev/null -fi - -if [ -e dotfile-system-prune ]; then - dotfile-system-prune > /dev/null -fi - -. "$HOME/.bashrc" diff --git a/dotfiles/.bashrc b/dotfiles/.bashrc deleted file mode 100644 index 7c70b805..00000000 --- a/dotfiles/.bashrc +++ /dev/null @@ -1,80 +0,0 @@ -# shellcheck disable=SC1090,SC1091 - -# Prefer US English -export LANG="en_US" - -# Detect support for advanced terminal features -if [ "$0" = 'bash' ] || [ "$0" = '/bin/bash' ]; then - export BASH_SUPPORT=true -fi - -### Fig / LC_ALL -if [ "$BASH_SUPPORT" = 'true' ]; then - if [[ "$(hostname)" != *'-minimal' ]]; then - export LC_ALL="en_US.UTF-8" - fi - if [ -f "$HOME/.fig/shell/bashrc.pre.bash" ]; then - . "$HOME/.fig/shell/bashrc.pre.bash" - fi -fi - -### Import Common Settings -if [ -f "$HOME/.config/shell/profile" ]; then - . "$HOME/.config/shell/profile" -fi - -### Settings -if command -v shopt > /dev/null; then - shopt -s globstar - shopt -s histappend - shopt -s checkwinsize -fi - -### History -export HISTFILE="$XDG_STATE_HOME/bash/history" - -# Prompt (on bash only) -if [ "$BASH_SUPPORT" = 'true' ]; then - if [[ "$(hostname)" != *'-minimal' ]]; then - ### Styled Terminal - case "$TERM" in - xterm* | rxvt* | Eterm | aterm | kterm | gnome* | alacritty) - PS1="\n \[\033[0;34m\]╭─\[\033[0;31m\]\[\033[0;37m\]\[\033[41m\] $OS_ICON \u \[\033[0m\]\[\033[0;31m\]\[\033[44m\]\[\033[0;34m\]\[\033[44m\]\[\033[0;30m\]\[\033[44m\] \w \[\033[0m\]\[\033[0;34m\] \n \[\033[0;34m\]╰ \[\033[1;36m\]\$ \[\033[0m\]" - ;; - esac - - ### Directory Colors (https://github.com/trapd00r/LS_COLORS) - command -v gdircolors > /dev/null 2>&1 || gdircolors() { dircolors "$@"; } - if command -v gdircolors > /dev/null && [ -f "$XDG_CONFIG_HOME/dircolors" ]; then - eval "$(gdircolors -b "$XDG_CONFIG_HOME/dircolors")" - fi - fi -fi - -### Bash Initialization Hooks -if [ "$BASH_SUPPORT" = 'true' ]; then - ### direnv - if command -v direnv > /dev/null; then - eval "$(direnv hook bash)" - fi - - ### Java (asdf) - if [ -f "$HOME/.local/asdf/plugins/java/set-java-home.bash" ]; then - . "$HOME/.local/asdf/plugins/java/set-java-home.bash" - fi - - ### zoxide - if command -v zoxide > /dev/null; then - eval "$(zoxide init --cmd cd bash)" - fi - - ### Fig - if [ -f "$HOME/.fig/shell/bashrc.post.bash" ]; then - . "$HOME/.fig/shell/bashrc.post.bash" - fi - - ### Vault - if command -v vault > /dev/null; then - complete -C vault vault - fi -fi diff --git a/dotfiles/.editorconfig b/dotfiles/.editorconfig deleted file mode 100644 index 01a20f16..00000000 --- a/dotfiles/.editorconfig +++ /dev/null @@ -1,15 +0,0 @@ -# https://editorconfig.org - -root = true - -[*] -charset = utf-8 -indent_style = space -indent_size = 2 -end_of_line = lf -insert_final_newline = true -trim_trailing_whitespace = true - -[*.md] -insert_final_newline = false -trim_trailing_whitespace = false diff --git a/dotfiles/.gitconfig b/dotfiles/.gitconfig deleted file mode 100644 index 984bae05..00000000 --- a/dotfiles/.gitconfig +++ /dev/null @@ -1,87 +0,0 @@ -[include] - path = ~/.local/delta/themes.gitconfig -[advice] - detachedHead = false -[alias] - c = commit - ca = commit -a - cm = commit -m - cam = commit -am - d = diff - dc = diff --cached - l = log --graph --pretty=format:"%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset" --abbrev-commit - master = !git add --all && git commit -am 'Quick commit.' -n && git push origin master -[color] - diff = auto - status = auto - branch = auto - interactive = auto - ui = true - pager = true -[core] - editor = vi - excludesfile = ~/.gitignore - autocrlf = input - attributesfile = ~/.gitattributes - pager = delta -[delta] - decorations = true - features = side-by-side decorations hyperlinks interactive navigate unobtrusive-line-numbers woolly-mammoth zebra-dark - hyperlinks = true - interactive = true - map-styles = bold purple => syntax magenta, bold cyan => syntax blue - navigate = true - side-by-side = true - unobtrusive-line-numbers = true -[delta "interactive"] - keep-plus-minus-markers = false -[delta "decorations"] - commit-decoration-style = blue ol - commit-style = raw - file-style = omit - hunk-header-decoration-style = blue box - hunk-header-file-style = red - hunk-header-line-number-style = "#067a00" - hunk-header-style = file line-number syntax -[diff] - colorMoved = default - ignoresubmodules = dirty -[diff "image"] - command = compare $2 $1 png:- | montage -geometry +4+4 $2 - $1 png:- | display -title \"$1\" - -[difftool] - prompt = false -[credential] - helper = cache --timeout=3600 -[init] - templatedir = /Users/bzalewski/.local/git-templates -[interactive] - diffFilter = delta --color-only --features=interactive -[merge] - conflictstyle = diff3 - tool = kdiff3 -[pull] - rebase = true -[sendemail] - smtpserver = smtp.gmail.com - smtpuser = - smtpencryption = tls - smtpserverport = 587 - smtpPass = -# smtpserver = {{ user.git_email_smtp_server | default('smtp.gmail.com') }} -# smtpuser = {{ user.git_email_smtp_user | default('') }} -# smtpencryption = {{ user.git_email_smtp_encryption | default('tls') }} -# smtpserverport = {{ user.git_email_smtp_port | default('587') }} -# smtpPass = {{ user.git_email_app_password | default('') }} -[status] - submoduleSummary = true -[url "https://"] - insteadOf = git:// -[user] - email = - name = -# https://git-scm.com/book/en/v2/Git-Internals-Environment-Variables -# name = {{ user.git_user_name | default('') }} -# email = {{ user.git_user_email | default('') }} -[web] - browser = google-chrome -# browser = {{ user.git_browser | default('google-chrome') }} diff --git a/dotfiles/.inputrc b/dotfiles/.inputrc deleted file mode 100644 index 2a5cf631..00000000 --- a/dotfiles/.inputrc +++ /dev/null @@ -1,46 +0,0 @@ - -## SMARTER TAB-COMPLETION (Readline bindings) ## - -# Perform file completion in a case insensitive fashion -set completion-ignore-case on - -# Treat hyphens and underscores as equivalent -set completion-map-case on - -# Display matches for ambiguous patterns at first tab press -set show-all-if-ambiguous on - -# Immediately add a trailing slash when autocompleting symlinks to directories -set mark-symlinked-directories on - -# Use the text that has already been typed as the prefix for searching through -# commands (basically more intelligent Up/Down behavior) -"\e[A": history-search-backward -"\e[B": history-search-forward - -# Do not autocomplete hidden files unless the pattern explicitly begins with a dot -set match-hidden-files off - -# Show all autocomplete results at once -set page-completions off - -# If there are more than 200 possible completions for a word, ask to show them all -set completion-query-items 200 - -# Show extra file information when completing, like `ls -F` does -set visible-stats on - -# Be more intelligent when autocompleting by also looking at the text after -# the cursor. For example, when the current line is "cd ~/src/mozil", and -# the cursor is on the "z", pressing Tab will not autocomplete it to "cd -# ~/src/mozillail", but to "cd ~/src/mozilla". (This is supported by the -# Readline used by Bash 4.) -set skip-completed-text on - -# Allow UTF-8 input and output, instead of showing stuff like $'\0123\0456' -set input-meta on -set output-meta on -set convert-meta off - -# Use Alt/Meta + Delete to delete the preceding word -"\e[3;3~": kill-word diff --git a/dotfiles/.npmrc b/dotfiles/.npmrc deleted file mode 100644 index 123942be..00000000 --- a/dotfiles/.npmrc +++ /dev/null @@ -1,3 +0,0 @@ -init.license=MIT -init.version=0.0.1 -store-dir=${XDG_DATA_HOME}/pnpm-store diff --git a/dotfiles/.profile b/dotfiles/.profile deleted file mode 100644 index f7e6afba..00000000 --- a/dotfiles/.profile +++ /dev/null @@ -1,121 +0,0 @@ -# shellcheck disable=SC1090,SC1091 - -# Aliases / Functions / Exports -if [ -f "$HOME/.config/shell/exports" ]; then - -if [ -f "$XDG_CONFIG_HOME/shell/exports" ]; then - . "$XDG_CONFIG_HOME/shell/exports" -fi -if [ -f "$XDG_CONFIG_HOME/shell/aliases" ]; then - . "$XDG_CONFIG_HOME/shell/aliases" -fi -if [ -f "$XDG_CONFIG_HOME/shell/functions" ]; then - . "$XDG_CONFIG_HOME/shell/functions" -fi - -### Bash / ZSH -if [ "$BASH_SUPPORT" = 'true' ]; then - ### OS Detection - if [ -f /etc/os-release ]; then - . /etc/os-release - if [ "$ID" = 'alpine' ]; then - OS_ICON="" - elif [ "$ID" = 'arch' ]; then - OS_ICON="" - elif [ "$ID" = 'centos' ]; then - OS_ICON="" - elif [ "$ID" = 'coreos' ]; then - OS_ICON="" - elif [ "$ID" = 'debian' ]; then - OS_ICON="" - elif [ "$ID" = 'deepin' ]; then - OS_ICON="" - elif [ "$ID" = 'elementary' ]; then - OS_ICON="" - elif [ "$ID" = 'endeavour' ]; then - OS_ICON="" - elif [ "$ID" = 'freebsd' ]; then - OS_ICON="" - elif [ "$ID" = 'gentoo' ]; then - OS_ICON="" - elif [ "$ID" = 'kali' ]; then - OS_ICON="" - elif [ "$ID" = 'linuxmint' ]; then - OS_ICON="" - elif [ "$ID" = 'manjaro' ]; then - OS_ICON="" - elif [ "$ID" = 'nixos' ]; then - OS_ICON="" - elif [ "$ID" = 'openbsd' ]; then - OS_ICON="" - elif [ "$ID" = 'opensuse' ]; then - OS_ICON="" - elif [ "$ID" = 'parrot' ]; then - OS_ICON="" - elif [ "$ID" = 'pop_os' ]; then - OS_ICON="" - elif [ "$ID" = 'raspberry_pi' ]; then - OS_ICON="" - elif [ "$ID" = 'redhat' ]; then - OS_ICON="" - elif [ "$ID" = 'fedora' ]; then - OS_ICON="" - elif [ "$ID" = 'ubuntu' ]; then - OS_ICON="" - else - OS_ICON="" - fi - else - if [ -d /Applications ] && [ -d /Library ] && [ -d /System ]; then - # macOS - OS_ICON="" - else - OS_ICON="" - fi - fi - - ### ASDF - if [ -f "$ASDF_DIR/asdf.sh" ]; then - . "$ASDF_DIR/asdf.sh" - fi -fi - -### Colorize -alias grep='grep --color=auto' -alias fgrep='fgrep --color=auto' -alias egrep='egrep --color=auto' -alias diff='diff --color=auto' -alias ip='ip --color=auto' -alias pacman='pacman --color=auto' - -### Aliases (better defaults for simple commands) -alias cp='cp -v' -alias rm='rm -I' -alias mv='mv -iv' -alias ln='ln -sriv' -alias xclip='xclip -selection c' -command -v vim > /dev/null && alias vi='vim' - -### TOP - order based on preference of "top" application (last item will always be chosen if installed, e.g. glances) -command -v htop > /dev/null && alias top='htop' -command -v gotop > /dev/null && alias top='gotop -p $([ "$COLOR_SCHEME" = "light" ] && echo "-c default-dark")' -command -v ytop > /dev/null && alias top='ytop -p $([ "$COLOR_SCHEME" = "light" ] && echo "-c default-dark")' -command -v btm > /dev/null && alias top='btm $([ "$COLOR_SCHEME" = "light" ] && echo "--color default-light")' -# themes for light/dark color-schemes inside ~/.config/bashtop; Press ESC to open the menu and change the theme -command -v bashtop > /dev/null && alias top='bashtop' -command -v bpytop > /dev/null && alias top='bpytop' -command -v glances > /dev/null && alias top='glances' - -### Cargo -if [ -f "$CARGO_HOME/env" ]; then - . "$CARGO_HOME/env" -fi - -### SDKMan -if command -v brew > /dev/null && command -v sdkman-cli > /dev/null; then - export SDKMAN_DIR="$(brew --prefix sdkman-cli)/libexec" - . "$SDKMAN_DIR/bin/sdkman-init.sh" -elif [ -f "$SDKMAN_DIR/bin/sdkman-init.sh" ]; then - export SDKMAN_DIR="$XDG_DATA_HOME/sdkman" - . "$SDKMAN_DIR/bin/sdkman-init.sh" -fi diff --git a/dotfiles/.tmux.conf b/dotfiles/.tmux.conf deleted file mode 100644 index b8c30c9a..00000000 --- a/dotfiles/.tmux.conf +++ /dev/null @@ -1,1534 +0,0 @@ -# : << EOF -# https://github.com/gpakosz/.tmux -# (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license, -# without any warranty. -# Copyright 2012— Gregory Pakosz (@gpakosz). -# /!\ do not edit this file -# instead, override settings in ~/.tmux.conf.local, see README.md - - -# -- general ------------------------------------------------------------------- - -set -g default-terminal "screen-256color" -if 'infocmp -x tmux-256color > /dev/null 2>&1' 'set -g default-terminal "tmux-256color"' - -setw -g xterm-keys on -set -s escape-time 10 # faster command sequences -set -sg repeat-time 600 # increase repeat timeout -set -s focus-events on - -set -g prefix2 C-a # GNU-Screen compatible prefix -bind C-a send-prefix -2 - -set -q -g status-utf8 on # expect UTF-8 (tmux < 2.2) -setw -q -g utf8 on - -set -g history-limit 5000 # boost history - -# edit configuration -bind e new-window -n "~/.tmux.conf.local" sh -c '${EDITOR:-vim} ~/.tmux.conf.local && tmux source ~/.tmux.conf && tmux display "~/.tmux.conf sourced"' - -# reload configuration -bind r source-file ~/.tmux.conf \; display '~/.tmux.conf sourced' - - -# -- display ------------------------------------------------------------------- - -set -g base-index 1 # start windows numbering at 1 -setw -g pane-base-index 1 # make pane numbering consistent with windows - -setw -g automatic-rename on # rename window to reflect current program -set -g renumber-windows on # renumber windows when a window is closed - -set -g set-titles on # set terminal title - -set -g display-panes-time 800 # slightly longer pane indicators display time -set -g display-time 1000 # slightly longer status messages display time - -set -g status-interval 10 # redraw status line every 10 seconds - -# clear both screen and history -bind -n C-l send-keys C-l \; run 'sleep 0.2' \; clear-history - -# activity -set -g monitor-activity on -set -g visual-activity off - - -# -- navigation ---------------------------------------------------------------- - -# create session -bind C-c new-session - -# find session -bind C-f command-prompt -p find-session 'switch-client -t %%' - -# session navigation -bind BTab switch-client -l # move to last session - -# split current window horizontally -bind - split-window -v -# split current window vertically -bind _ split-window -h - -# pane navigation -bind -r h select-pane -L # move left -bind -r j select-pane -D # move down -bind -r k select-pane -U # move up -bind -r l select-pane -R # move right -bind > swap-pane -D # swap current pane with the next one -bind < swap-pane -U # swap current pane with the previous one - -# maximize current pane -bind + run 'cut -c3- ~/.tmux.conf | sh -s _maximize_pane "#{session_name}" #D' - -# pane resizing -bind -r H resize-pane -L 2 -bind -r J resize-pane -D 2 -bind -r K resize-pane -U 2 -bind -r L resize-pane -R 2 - -# window navigation -unbind n -unbind p -bind -r C-h previous-window # select previous window -bind -r C-l next-window # select next window -bind Tab last-window # move to last active window - -# toggle mouse -bind m run "cut -c3- ~/.tmux.conf | sh -s _toggle_mouse" - - -# -- urlview ------------------------------------------------------------------- - -bind U run "cut -c3- ~/.tmux.conf | sh -s _urlview #{pane_id}" - - -# -- facebook pathpicker ------------------------------------------------------- - -bind F run "cut -c3- ~/.tmux.conf | sh -s _fpp #{pane_id} #{pane_current_path}" - - -# -- list choice (tmux < 2.4) -------------------------------------------------- - -# vi-choice is gone in tmux >= 2.4 -run -b 'tmux bind -t vi-choice h tree-collapse 2> /dev/null || true' -run -b 'tmux bind -t vi-choice l tree-expand 2> /dev/null || true' -run -b 'tmux bind -t vi-choice K start-of-list 2> /dev/null || true' -run -b 'tmux bind -t vi-choice J end-of-list 2> /dev/null || true' -run -b 'tmux bind -t vi-choice H tree-collapse-all 2> /dev/null || true' -run -b 'tmux bind -t vi-choice L tree-expand-all 2> /dev/null || true' -run -b 'tmux bind -t vi-choice Escape cancel 2> /dev/null || true' - - -# -- edit mode (tmux < 2.4) ---------------------------------------------------- - -# vi-edit is gone in tmux >= 2.4 -run -b 'tmux bind -ct vi-edit H start-of-line 2> /dev/null || true' -run -b 'tmux bind -ct vi-edit L end-of-line 2> /dev/null || true' -run -b 'tmux bind -ct vi-edit q cancel 2> /dev/null || true' -run -b 'tmux bind -ct vi-edit Escape cancel 2> /dev/null || true' - - -# -- copy mode ----------------------------------------------------------------- - -bind Enter copy-mode # enter copy mode - -run -b 'tmux bind -t vi-copy v begin-selection 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi v send -X begin-selection 2> /dev/null || true' -run -b 'tmux bind -t vi-copy C-v rectangle-toggle 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi C-v send -X rectangle-toggle 2> /dev/null || true' -run -b 'tmux bind -t vi-copy y copy-selection 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi y send -X copy-selection-and-cancel 2> /dev/null || true' -run -b 'tmux bind -t vi-copy Escape cancel 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi Escape send -X cancel 2> /dev/null || true' -run -b 'tmux bind -t vi-copy H start-of-line 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi H send -X start-of-line 2> /dev/null || true' -run -b 'tmux bind -t vi-copy L end-of-line 2> /dev/null || true' -run -b 'tmux bind -T copy-mode-vi L send -X end-of-line 2> /dev/null || true' - -# copy to X11 clipboard -if -b 'command -v xsel > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xsel -i -b"' -if -b '! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | xclip -i -selection clipboard >/dev/null 2>&1"' -# copy to Wayland clipboard -if -b 'command -v wl-copy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | wl-copy"' -# copy to macOS clipboard -if -b 'command -v pbcopy > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | pbcopy"' -if -b 'command -v reattach-to-user-namespace > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | reattach-to-user-namespace pbcopy"' -# copy to Windows clipboard -if -b 'command -v clip.exe > /dev/null 2>&1' 'bind y run -b "tmux save-buffer - | clip.exe"' -if -b '[ -c /dev/clipboard ]' 'bind y run -b "tmux save-buffer - > /dev/clipboard"' - - -# -- buffers ------------------------------------------------------------------- - -bind b list-buffers # list paste buffers -bind p paste-buffer # paste from the top paste buffer -bind P choose-buffer # choose which buffer to paste from - - -# -- 8< ------------------------------------------------------------------------ - -source -q ~/.tmux.conf.local -run 'cut -c3- ~/.tmux.conf | sh -s _apply_configuration' - - -# EOF -# -# # exit the script if any statement returns a non-true return value -# set -e -# -# unset GREP_OPTIONS -# export LC_NUMERIC=C -# (set +H 2>/dev/null) && set +H || true -# -# if ! printf '' | sed -E 's///' 2>/dev/null; then -# if printf '' | sed -r 's///' 2>/dev/null; then -# sed () { -# n=$#; while [ "$n" -gt 0 ]; do arg=$1; shift; case $arg in -E*) arg=-r${arg#-E};; esac; set -- "$@" "$arg"; n=$(( n - 1 )); done -# command sed "$@" -# } -# fi -# fi -# -# _uname_s=$(uname -s) -# -# _tmux_version=$(tmux -V | awk '{gsub(/[^0-9.]/, "", $2); print ($2+0) * 100}') -# -# _is_true() { -# [ x"$1" = x"true" ] || [ x"$1" = x"yes" ] || [ x"$1" = x"1" ] -# } -# -# _is_enabled() { -# [ x"$1" = x"enabled" ] -# } -# -# _is_disabled() { -# [ x"$1" = x"disabled" ] -# } -# -# _circled() { -# circled_digits='⓪ ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳' -# if [ "$1" -le 20 ] 2>/dev/null; then -# i=$(( $1 + 1 )) -# eval set -- "$circled_digits" -# eval echo "\${$i}" -# else -# echo "$1" -# fi -# } -# -# _decode_unicode_escapes() { -# printf '%s' "$*" | perl -CS -pe 's/(\\u([0-9A-Fa-f]{1,4})|\\U([0-9A-Fa-f]{1,8}))/chr(hex($2.$3))/eg' 2>/dev/null -# } -# -# if command -v pkill > /dev/null 2>&1; then -# _pkillf() { -# pkill -f "$@" || true -# } -# else -# case "$_uname_s" in -# *CYGWIN*) -# _pkillf() { -# while IFS= read -r pid; do -# kill "$pid" || true -# done << EOF -# $(grep -Eao "$@" /proc/*/cmdline | xargs -0 | sed -E -n 's,/proc/([0-9]+)/.+$,\1,pg') -# EOF -# } -# ;; -# *) -# _pkillf() { -# while IFS= read -r pid; do -# kill "$pid" || true -# done << EOF -# $(ps -x -o pid= -o command= | grep -E "$@" | cut -d' ' -f1) -# EOF -# } -# ;; -# esac -# fi -# -# _maximize_pane() { -# current_session=${1:-$(tmux display -p '#{session_name}')} -# current_pane=${2:-$(tmux display -p '#{pane_id}')} -# -# dead_panes=$(tmux list-panes -s -t "$current_session" -F '#{pane_dead} #{pane_id} #{pane_start_command}' | grep -E -o '^1 %.+maximized.+$' || true) -# restore=$(printf "%s" "$dead_panes" | sed -n -E -e "s/^1 $current_pane .+maximized.+'(%[0-9]+)'\"?$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t $current_pane/p"\ -# -e "s/^1 (%[0-9]+) .+maximized.+'$current_pane'\"?$/tmux swap-pane -s \1 -t $current_pane \; kill-pane -t \1/p") -# -# if [ -z "$restore" ]; then -# [ "$(tmux list-panes -t "$current_session:" | wc -l | sed 's/^ *//g')" -eq 1 ] && tmux display "Can't maximize with only one pane" && return -# current_pane_height=$(tmux display -t "$current_pane" -p "#{pane_height}") -# info=$(tmux new-window -t "$current_session:" -F "#{session_name}:#{window_index}.#{pane_id}" -P "maximized... 2>/dev/null & tmux setw -t \"$current_session:\" remain-on-exit on; printf \"\\033[\$(tput lines);0fPane has been maximized, press + to restore\n\" '$current_pane'") -# session_window=${info%.*} -# new_pane=${info#*.} -# -# retry=1000 -# while [ x"$(tmux list-panes -t "$session_window" -F '#{session_name}:#{window_index}.#{pane_id} #{pane_dead}' 2>/dev/null)" != x"$info 1" ] && [ "$retry" -ne 0 ]; do -# sleep 0.1 -# retry=$((retry - 1)) -# done -# if [ "$retry" -eq 0 ]; then -# tmux display 'Unable to maximize pane' -# fi -# -# tmux setw -t "$session_window" remain-on-exit off \; swap-pane -s "$current_pane" -t "$new_pane" -# else -# $restore || tmux kill-pane -# fi -# } -# -# _toggle_mouse() { -# old=$(tmux show -gv mouse) -# new="" -# -# if [ "$old" = "on" ]; then -# new="off" -# else -# new="on" -# fi -# -# tmux set -g mouse $new -# } -# -# _battery_info() { -# count=0 -# charge=0 -# case "$_uname_s" in -# *Darwin*) -# while IFS= read -r line; do -# [ -z "$line" ] && continue -# discharging=$(printf '%s' "$line" | grep -qi "discharging" && echo "true" || echo "false") -# percentage=$(printf '%s' "$line" | grep -E -o '[0-9]+%' || echo "0%") -# charge=$(awk -v charge="$charge" -v percentage="${percentage%%%}" 'BEGIN { print charge + percentage / 100 }') -# count=$((count + 1)) -# done << EOF -# $(pmset -g batt | grep 'InternalBattery') -# EOF -# ;; -# *Linux*) -# while IFS= read -r batpath; do -# [ -z "$batpath" ] && continue -# grep -i -q device "$batpath/scope" 2> /dev/null && continue -# -# discharging=$(grep -qi "discharging" "$batpath/status" && echo "true" || echo "false") -# bat_capacity="$batpath/capacity" -# if [ -r "$bat_capacity" ]; then -# charge=$(awk -v charge="$charge" -v capacity="$(cat "$bat_capacity")" 'BEGIN { print charge + (capacity > 100 ? 100 : capacity) / 100 }') -# else -# bat_energy_full="$batpath/energy_full" -# bat_energy_now="$batpath/energy_now" -# if [ -r "$bat_energy_full" ] && [ -r "$bat_energy_now" ]; then -# charge=$(awk -v charge="$charge" -v energy_now="$(cat "$bat_energy_now")" -v energy_full="$(cat "$bat_energy_full")" 'BEGIN { print charge + energy_now / energy_full }') -# fi -# fi -# count=$((count + 1)) -# done << EOF -# $(find /sys/class/power_supply -maxdepth 1 -iname '*bat*') -# EOF -# ;; -# *CYGWIN*|*MSYS*|*MINGW*) -# while IFS= read -r line; do -# [ -z "$line" ] && continue -# discharging=$(printf '%s' "$line" | awk '{ s = ($1 == 1) ? "true" : "false"; print s }') -# charge=$(printf '%s' "$line" | awk -v charge="$charge" '{ print charge + $2 / 100 }') -# count=$((count + 1)) -# done << EOF -# $(wmic path Win32_Battery get BatteryStatus, EstimatedChargeRemaining 2> /dev/null | tr -d '\r' | tail -n +2 || true) -# EOF -# ;; -# *OpenBSD*) -# for batid in 0 1 2; do -# sysctl -n "hw.sensors.acpibat$batid.raw0" 2>&1 | grep -q 'not found' && continue -# discharging=$(sysctl -n "hw.sensors.acpibat$batid.raw0" | grep -q 1 && echo "true" || echo "false") -# if sysctl -n "hw.sensors.acpibat$batid" | grep -q amphour; then -# charge=$(awk -v charge="$charge" -v remaining="$(sysctl -n hw.sensors.acpibat$batid.amphour3 | cut -d' ' -f1)" -v full="$(sysctl -n hw.sensors.acpibat$batid.amphour0 | cut -d' ' -f1)" 'BEGIN { print charge + remaining / full }') -# else -# charge=$(awk -v charge="$charge" -v remaining="$(sysctl -n hw.sensors.acpibat$batid.watthour3 | cut -d' ' -f1)" -v full="$(sysctl -n hw.sensors.acpibat$batid.watthour0 | cut -d' ' -f1)" 'BEGIN { print charge + remaining / full }') -# fi -# count=$((count + 1)) -# done -# ;; -# esac -# [ "$count" -ne 0 ] && charge=$(awk -v charge="$charge" -v count="$count" 'BEGIN { print charge / count }') || true -# } -# -# _battery_status() { -# _battery_info -# if [ "$charge" = 0 ]; then -# tmux set -ug '@battery_status' -# return -# fi -# -# battery_status_charging=$1 -# battery_status_discharging=$2 -# if [ x"$discharging" = x"true" ]; then -# battery_status="$battery_status_discharging" -# else -# battery_status="$battery_status_charging" -# fi -# -# tmux set -g '@battery_status' "$battery_status" -# } -# -# _battery_bar() { -# _battery_info -# if [ "$charge" = 0 ]; then -# tmux set -ug '@battery_bar' \;\ -# set -ug '@battery_hbar' \;\ -# set -ug '@battery_vbar' \;\ -# set -ug '@battery_percentage' -# return -# fi -# -# battery_bar_symbol_full=$1 -# battery_bar_symbol_empty=$2 -# battery_bar_length=$3 -# battery_bar_palette=$4 -# battery_hbar_palette=$5 -# battery_vbar_palette=$6 -# -# if [ x"$battery_bar_length" = x"auto" ]; then -# columns=$(tmux -q display -p '#{client_width}' 2> /dev/null || echo 80) -# if [ "$columns" -ge 80 ]; then -# battery_bar_length=10 -# else -# battery_bar_length=5 -# fi -# fi -# -# if echo "$battery_bar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_bar_palette; unset IFS; set +f; } -# palette_style=$1 -# battery_bg=${2:-none} -# [ x"$palette_style" = x"gradient" ] && \ -# palette="196 202 208 214 220 226 190 154 118 82 46" -# [ x"$palette_style" = x"heat" ] && \ -# palette="243 245 247 144 143 142 184 214 208 202 196" -# -# palette=$(echo "$palette" | awk -v n="$battery_bar_length" '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') -# eval set -- "$palette" -# -# full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# battery_bar="#[bg=$battery_bg]" -# # shellcheck disable=SC2046 -# [ "$full" -gt 0 ] && \ -# battery_bar="$battery_bar$(printf "#[fg=colour%s]$battery_bar_symbol_full" $(echo "$palette" | cut -d' ' -f1-"$full"))" -# # shellcheck disable=SC2046 -# empty=$((battery_bar_length - full)) -# # shellcheck disable=SC2046 -# [ "$empty" -gt 0 ] && \ -# battery_bar="$battery_bar$(printf "#[fg=colour%s]$battery_bar_symbol_empty" $(echo "$palette" | cut -d' ' -f$((full + 1))-$((full + empty))))" -# eval battery_bar="$battery_bar#[fg=colour\${$((full == 0 ? 1 : full))}]" -# elif echo "$battery_bar_palette" | grep -q -E '^(([#a-z0-9]{7,9}|none),?){3}$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_bar_palette; unset IFS; set +f; } -# battery_full_fg=$1 -# battery_empty_fg=$2 -# battery_bg=$3 -# -# full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# [ x"$battery_bg" != x"none" ] && \ -# battery_bar="#[bg=$battery_bg]" -# #shellcheck disable=SC2046 -# [ "$full" -gt 0 ] && \ -# battery_bar="$battery_bar#[fg=$battery_full_fg]$(printf "%0.s$battery_bar_symbol_full" $(seq 1 "$full"))" -# empty=$((battery_bar_length - full)) -# #shellcheck disable=SC2046 -# [ "$empty" -gt 0 ] && \ -# battery_bar="$battery_bar#[fg=$battery_empty_fg]$(printf "%0.s$battery_bar_symbol_empty" $(seq 1 "$empty"))" && \ -# battery_bar="$battery_bar#[fg=$battery_empty_fg]" -# fi -# -# if echo "$battery_hbar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_hbar_palette; unset IFS; set +f; } -# palette_style=$1 -# [ x"$palette_style" = x"gradient" ] && \ -# palette="196 202 208 214 220 226 190 154 118 82 46" -# [ x"$palette_style" = x"heat" ] && \ -# palette="233 234 235 237 239 241 243 245 247 144 143 142 184 214 208 202 196" -# -# palette=$(echo "$palette" | awk -v n="$battery_bar_length" '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') -# eval set -- "$palette" -# -# full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# eval battery_hbar_fg="colour\${$((full == 0 ? 1 : full))}" -# elif echo "$battery_hbar_palette" | grep -q -E '^([#a-z0-9]{7,9},?){3}$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_hbar_palette; unset IFS; set +f; } -# -# # shellcheck disable=SC2046 -# eval $(awk "BEGIN { printf \"battery_hbar_fg=$%d\", (($charge) - 0.001) * $# + 1 }") -# fi -# -# eval set -- "▏ ▎ ▍ ▌ ▋ ▊ ▉ █" -# # shellcheck disable=SC2046 -# eval $(awk "BEGIN { printf \"battery_hbar_symbol=$%d\", ($charge) * ($# - 1) + 1 }") -# battery_hbar="#[fg=${battery_hbar_fg?}]${battery_hbar_symbol?}" -# -# if echo "$battery_vbar_palette" | grep -q -E '^heat|gradient(,[#a-z0-9]{7,9})?$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_vbar_palette; unset IFS; set +f; } -# palette_style=$1 -# [ x"$palette_style" = x"gradient" ] && \ -# palette="196 202 208 214 220 226 190 154 118 82 46" -# [ x"$palette_style" = x"heat" ] && \ -# palette="233 234 235 237 239 241 243 245 247 144 143 142 184 214 208 202 196" -# -# palette=$(echo "$palette" | awk -v n="$battery_bar_length" '{ for (i = 0; i < n; ++i) printf $(1 + (i * NF / n))" " }') -# eval set -- "$palette" -# -# full=$(awk "BEGIN { printf \"%.0f\", ($charge) * $battery_bar_length }") -# eval battery_vbar_fg="colour\${$((full == 0 ? 1 : full))}" -# elif echo "$battery_vbar_palette" | grep -q -E '^([#a-z0-9]{7,9},?){3}$'; then -# # shellcheck disable=SC2086 -# { set -f; IFS=,; set -- $battery_vbar_palette; unset IFS; set +f; } -# -# # shellcheck disable=SC2046 -# eval $(awk "BEGIN { printf \"battery_vbar_fg=$%d\", (($charge) - 0.001) * $# + 1 }") -# fi -# -# eval set -- "▁ ▂ ▃ ▄ ▅ ▆ ▇ █" -# # shellcheck disable=SC2046 -# eval $(awk "BEGIN { printf \"battery_vbar_symbol=$%d\", ($charge) * ($# - 1) + 1 }") -# battery_vbar="#[fg=${battery_vbar_fg?}]${battery_vbar_symbol?}" -# -# battery_percentage="$(awk "BEGIN { printf \"%.0f%%\", ($charge) * 100 }")" -# -# tmux set -g '@battery_status' "$battery_status" \;\ -# set -g '@battery_bar' "$battery_bar" \;\ -# set -g '@battery_hbar' "$battery_hbar" \;\ -# set -g '@battery_vbar' "$battery_vbar" \;\ -# set -g '@battery_percentage' "$battery_percentage" -# } -# -# _pane_info() { -# pane_pid="$1" -# pane_tty="${2##/dev/}" -# case "$_uname_s" in -# *CYGWIN*) -# ps -al | tail -n +2 | awk -v pane_pid="$pane_pid" -v tty="$pane_tty" ' -# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ && $5 == tty { -# user[$1] = $6; if (!child[$2]) child[$2] = $1 -# } -# END { -# pid = pane_pid -# while (child[pid]) -# pid = child[pid] -# -# file = "/proc/" pid "/cmdline"; getline command < file; close(file) -# gsub(/\0/, " ", command) -# "id -un " user[pid] | getline username -# print pid":"username":"command -# } -# ' -# ;; -# *Linux*) -# ps -t "$pane_tty" --sort=lstart -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' -# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ { -# user[$2] = $1; if (!child[$3]) child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) -# } -# END { -# pid = pane_pid -# while (child[pid]) -# pid = child[pid] -# -# print pid":"user[pid]":"command[pid] -# } -# ' -# ;; -# *) -# ps -t "$pane_tty" -o user=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -o pid= -o ppid= -o command= | awk -v pane_pid="$pane_pid" ' -# ((/ssh/ && !/-W/) || !/ssh/) && !/tee/ { -# user[$2] = $1; if (!child[$3]) child[$3] = $2; pid=$2; $1 = $2 = $3 = ""; command[pid] = substr($0,4) -# } -# END { -# pid = pane_pid -# while (child[pid]) -# pid = child[pid] -# -# print pid":"user[pid]":"command[pid] -# } -# ' -# ;; -# esac -# } -# -# _ssh_or_mosh_args() { -# case "$1" in -# *ssh*) -# args=$(printf '%s' "$1" | perl -n -e 'print if s/.*?\bssh[\w]*\s*((?:\s+-\w+)*)(\s+\w+)(\s\w+)?/\1\2/') -# ;; -# *mosh-client*) -# args=$(printf '%s' "$1" | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/' -e 's/-[^ ]*//g' -e 's/\d:\d//g') -# ;; -# esac -# -# printf '%s' "$args" -# } -# -# _username() { -# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} -# ssh_only=$3 -# -# pane_info=$(_pane_info "$pane_pid" "$pane_tty") -# command=${pane_info#*:} -# command=${command#*:} -# -# ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") -# if [ -n "$ssh_or_mosh_args" ]; then -# # shellcheck disable=SC2086 -# username=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk '/^user / { print $2; exit }') -# # shellcheck disable=SC2086 -# [ -z "$username" ] && username=$(ssh $ssh_or_mosh_args -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%username%% %r >&2'" 2>&1 | awk '/^%username% / { print $2; exit }') -# [ -z "$username" ] && username=$(ssh $ssh_or_mosh_args -v -T -o ControlPath=none -o ProxyCommand=false -o IdentityFile='%%username%%/%r' 2>&1 | awk '/%username%/ { print substr($4,12); exit }') -# else -# if ! _is_true "$ssh_only"; then -# username=${pane_info#*:} -# username=${username%%:*} -# fi -# fi -# -# printf '%s\n' "$username" -# } -# -# _hostname() { -# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} -# ssh_only=$3 -# full=$4 -# h_or_H=$5 -# -# pane_info=$(_pane_info "$pane_pid" "$pane_tty") -# command=${pane_info#*:} -# command=${command#*:} -# -# ssh_or_mosh_args=$(_ssh_or_mosh_args "$command") -# if [ -n "$ssh_or_mosh_args" ]; then -# # shellcheck disable=SC2086 -# hostname=$(ssh -G $ssh_or_mosh_args 2>/dev/null | awk '/^hostname / { print $2; exit }') -# # shellcheck disable=SC2086 -# [ -z "$hostname" ] && hostname=$(ssh -T -o ControlPath=none -o ProxyCommand="sh -c 'echo %%hostname%% %h >&2'" $ssh_or_mosh_args 2>&1 | awk '/^%hostname% / { print $2; exit }') -# -# if ! _is_true "$full"; then -# case "$hostname" in -# *[a-z-].*) -# hostname=${hostname%%.*} -# ;; -# 127.0.0.1) -# hostname="localhost" -# ;; -# esac -# fi -# else -# if ! _is_true "$ssh_only"; then -# hostname="$h_or_H" -# fi -# fi -# -# printf '%s\n' "$hostname" -# } -# -# _root() { -# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} -# root=$3 -# -# username=$(_username "$pane_id" "$pane_tty" false) -# -# [ x"$username" = x"root" ] && echo "$root" -# } -# -# _uptime() { -# case "$_uname_s" in -# *Darwin*|*FreeBSD*) -# boot=$(sysctl -q -n kern.boottime | awk -F'[ ,:]+' '{ print $4 }') -# now=$(date +%s) -# ;; -# *Linux*|*CYGWIN*|*MSYS*|*MINGW*) -# boot=0 -# now=$(cut -d' ' -f1 < /proc/uptime) -# ;; -# *OpenBSD*) -# boot=$(sysctl -n kern.boottime) -# now=$(date +%s) -# esac -# # shellcheck disable=SC1004 -# awk -v boot="$boot" -v now="$now" ' -# BEGIN { -# uptime = now - boot -# y = int(uptime / 31536000) -# dy = int(uptime / 86400) % 365 -# d = int(uptime / 86400) -# h = int(uptime / 3600) % 24 -# m = int(uptime / 60) % 60 -# s = int(uptime) % 60 -# -# system("tmux set -g @uptime_y " y + 0 " \\; " \ -# "set -g @uptime_dy " dy + 0 " \\; " \ -# "set -g @uptime_d " d + 0 " \\; " \ -# "set -g @uptime_h " h + 0 " \\; " \ -# "set -g @uptime_m " m + 0 " \\; " \ -# "set -g @uptime_s " s + 0) -# }' -# } -# -# _loadavg() { -# case "$_uname_s" in -# *Darwin*|*FreeBSD*) -# tmux set -g @loadavg "$(sysctl -q -n vm.loadavg | cut -d' ' -f2)" -# ;; -# *Linux*|*CYGWIN*) -# tmux set -g @loadavg "$(cut -d' ' -f1 < /proc/loadavg)" -# ;; -# *OpenBSD*) -# tmux set -g @loadavg "$(sysctl -q -n vm.loadavg | cut -d' ' -f1)" -# ;; -# esac -# } -# -# _split_window_ssh() { -# pane_pid=${1:-$(tmux display -p '#{pane_pid}')} -# pane_tty=${2:-$(tmux display -p '#{b:pane_tty}')} -# shift 2 -# -# pane_info=$(_pane_info "$pane_pid" "$pane_tty") -# command=${pane_info#*:} -# command=${command#*:} -# -# case "$command" in -# *mosh-client*) -# # shellcheck disable=SC2046 -# tmux split-window "$@" mosh $(echo "$command" | sed -E -e 's/.*mosh-client -# (.*)\|.*$/\1/') -# ;; -# *ssh*) -# # shellcheck disable=SC2046 -# tmux split-window "$@" $(echo "$command" | sed -e 's/;/\\;/g') -# ;; -# *) -# tmux split-window "$@" -# esac -# } -# -# _split_window() { -# _split_window_ssh "$@" -# } -# -# _apply_24b() { -# tmux_conf_theme_24b_colour=${tmux_conf_theme_24b_colour:-auto} -# tmux_conf_24b_colour=${tmux_conf_24b_colour:-$tmux_conf_theme_24b_colour} -# if [ x"$tmux_conf_24b_colour" = x"auto" ]; then -# case "$COLORTERM" in -# truecolor|24bit) -# apply_24b=true -# ;; -# esac -# if [ x"$apply_24b" = x"" ] && [ x"$(tput colors)" = x"16777216" ]; then -# apply_24b=true -# fi -# elif _is_true "$tmux_conf_24b_colour"; then -# apply_24b=true -# fi -# if [ x"$apply_24b" = x"true" ]; then -# case "$TERM" in -# screen-*|tmux-*) -# ;; -# *) -# tmux set-option -ga terminal-overrides ",*256col*:Tc" -# ;; -# esac -# fi -# } -# -# _apply_bindings() { -# cfg=$(mktemp) && trap 'rm -f $cfg*' EXIT -# -# tmux list-keys | grep -vF 'tmux.conf.local' | grep -E 'new-window|split(-|_)window|new-session|copy-selection|copy-pipe' > "$cfg" -# -# # tmux 3.0 doesn't include 02254d1e5c881be95fd2fc37b4c4209640b6b266 and the -# # output of list-keys can be truncated -# perl -p -i -e "s/'#\{\?window_zoomed_flag,Unzoom,Zoom\}' 'z' \{resize-pane -$/'#{?window_zoomed_flag,Unzoom,Zoom}' 'z' {resize-pane -Z}\"/g" "$cfg" -# -# tmux_conf_new_window_retain_current_path=${tmux_conf_new_window_retain_current_path:-false} -# if ! _is_disabled "$tmux_conf_new_window_retain_current_path"; then -# perl -p -i -e " -# s/\bnew-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/new-window\1/g" \ -# "$cfg" -# fi -# -# tmux_conf_new_pane_retain_current_path=${tmux_conf_new_pane_retain_current_path:-true} -# if ! _is_disabled "$tmux_conf_new_pane_retain_current_path"; then -# perl -p -i -e " -# s/\brun-shell\b\s+(\"|')cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+#\{b:pane_tty\}([^\n\1]*)(\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\4)([^\n\1]*)\1/run-shell \1cut -c3- ~\/.tmux.conf | sh -s _split_window #{pane_pid} #{b:pane_tty}\2\5\1/g -# ; -# s/\brun-shell\b(\s+((?:\\\\\")?|\"?|'?)cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window\s+((?:\\\\\")?|\"?|'?)#\{b:pane_tty\}\3)(.*?)\2/split-window\4/g -# ; -# s/\bsplit-window\b([^;}\n]*?)(?:\s+-c\s+((?:\\\\\")?|\"?|'?)#\{pane_current_path\}\2)/split-window\1/g" \ -# "$cfg" -# fi -# -# if ! _is_disabled "$tmux_conf_new_window_retain_current_path"; then -# if _is_true "$tmux_conf_new_window_retain_current_path"; then -# perl -p -i -e " -# s/\bnew-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ -# ; -# s/\bnew-window\b/new-window -c '#\{pane_current_path\}'/g" \ -# "$cfg" -# fi -# fi -# -# perl -p -i -e " -# s/\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?(?:\s+(\bssh\b))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!\bssh\b)[^\s]+))*)?/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window_ssh #\{pane_pid\} #\{b:pane_tty\}\1'/g if /\bsplit-window\b((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?(?:\s+(ssh))((?:(?:[ \t]+-[bdfhIvP])|(?:[ \t]+-[celtF][ \t]+(?!ssh)[^\s]+))*)?/"\ -# "$cfg" -# -# tmux_conf_new_pane_reconnect_ssh=${tmux_conf_new_pane_reconnect_ssh:-false} -# if ! _is_disabled "$tmux_conf_new_pane_reconnect_ssh" && _is_true "$tmux_conf_new_pane_reconnect_ssh"; then -# perl -p -i -e "s/\bsplit-window\b([^;}\n\"]*)/run-shell 'cut -c3- ~\/\.tmux\.conf | sh -s _split_window #\{pane_pid\} #\{b:pane_tty\}\1'/g" "$cfg" -# fi -# -# if ! _is_disabled "$tmux_conf_new_pane_retain_current_path" && _is_true "$tmux_conf_new_pane_retain_current_path"; then -# perl -p -i -e " -# s/\bsplit-window\b(?!\s+(?:-|}))/{$&}/g if /\bdisplay-menu\b/ -# ; -# s/\bsplit-window\b/split-window -c '#{pane_current_path}'\1/g -# ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_pid\} #\{b:pane_tty\} -c \\\\\"#\{pane_current_path\}\\\\\"\2'/g if /\bdisplay-menu\b/ -# ; -# s/\brun-shell\b\s+'cut\s+-c3-\s+~\/\.tmux\.conf\s+\|\s+sh\s+-s\s+_split_window(_ssh)?\s+#\{pane_pid\}\s+#\{b:pane_tty\}([^}\n']*)'/run-shell 'cut -c3- ~\/.tmux.conf | sh -s _split_window\1 #\{pane_pid\} #\{b:pane_tty\} -c \"#\{pane_current_path\}\"\2'/g" \ -# "$cfg" -# fi -# -# tmux_conf_new_session_prompt=${tmux_conf_new_session_prompt:-false} -# if ! _is_disabled "$tmux_conf_new_session_prompt" && _is_true "$tmux_conf_new_session_prompt"; then -# perl -p -i \ -# -e "s/(? /dev/null 2>&1 && command='xsel -i -b' -# ! command -v xsel > /dev/null 2>&1 && command -v xclip > /dev/null 2>&1 && command='xclip -i -selection clipboard > \/dev\/null 2>\&1' -# command -v wl-copy > /dev/null 2>&1 && command='wl-copy' -# command -v pbcopy > /dev/null 2>&1 && command='pbcopy' -# command -v reattach-to-user-namespace > /dev/null 2>&1 && command='reattach-to-user-namespace pbcopy' -# command -v clip.exe > /dev/null 2>&1 && command='clip\.exe' -# [ -c /dev/clipboard ] && command='cat > \/dev\/clipboard' -# -# if [ -n "$command" ]; then -# if ! _is_disabled "$tmux_conf_copy_to_os_clipboard" && _is_true "$tmux_conf_copy_to_os_clipboard"; then -# perl -p -i -e "s/(?!.*?$command)\bcopy-(?:selection|pipe)(-and-cancel)?\b/copy-pipe\1 '$command'/g" "$cfg" -# else -# if [ $_tmux_version -ge 320 ]; then -# perl -p -i -e "s/\bcopy-pipe(-and-cancel)?\b\s+(\"|')?$command\2?/copy-pipe\1/g" "$cfg" -# else -# perl -p -i -e "s/\bcopy-pipe(-and-cancel)?\b\s+(\"|')?$command\2?/copy-selection\1/g" "$cfg" -# fi -# fi -# fi -# -# # until tmux >= 3.0, output of tmux list-keys can't be consumed back by tmux source-file without applying some escapings -# awk < "$cfg" \ -# '{i = $2 == "-T" ? 4 : 5; gsub(/^[;]$/, "\\\\&", $i); gsub(/^[$"#~]$/, "'"'"'&'"'"'", $i); gsub(/^['"'"']$/, "\"&\"", $i); print}' > "$cfg.in" -# -# # ignore bindings with errors -# if ! tmux source-file "$cfg.in"; then -# verbose_flag=$(tmux source-file -v /dev/null 2> /dev/null && printf -- '-v' || true) -# while ! out=$(tmux source-file "$verbose_flag" "$cfg.in"); do -# line=$(printf "%s" "$out" | tail -1 | cut -d':' -f2) -# perl -n -i -e "if ($. != $line) { print }" "$cfg.in" -# done -# fi -# } -# -# _apply_theme() { -# -# # -- default theme ----------------------------------------------------- -# -# tmux_conf_theme_colour_1=${tmux_conf_theme_colour_1:-#080808} # dark gray -# tmux_conf_theme_colour_2=${tmux_conf_theme_colour_2:-#303030} # gray -# tmux_conf_theme_colour_3=${tmux_conf_theme_colour_3:-#8a8a8a} # light gray -# tmux_conf_theme_colour_4=${tmux_conf_theme_colour_4:-#00afff} # light blue -# tmux_conf_theme_colour_5=${tmux_conf_theme_colour_5:-#ffff00} # yellow -# tmux_conf_theme_colour_6=${tmux_conf_theme_colour_6:-#080808} # dark gray -# tmux_conf_theme_colour_7=${tmux_conf_theme_colour_7:-#e4e4e4} # white -# tmux_conf_theme_colour_8=${tmux_conf_theme_colour_8:-#080808} # dark gray -# tmux_conf_theme_colour_9=${tmux_conf_theme_colour_9:-#ffff00} # yellow -# tmux_conf_theme_colour_10=${tmux_conf_theme_colour_10:-#ff00af} # pink -# tmux_conf_theme_colour_11=${tmux_conf_theme_colour_11:-#5fff00} # green -# tmux_conf_theme_colour_12=${tmux_conf_theme_colour_12:-#8a8a8a} # light gray -# tmux_conf_theme_colour_13=${tmux_conf_theme_colour_13:-#e4e4e4} # white -# tmux_conf_theme_colour_14=${tmux_conf_theme_colour_14:-#080808} # dark gray -# tmux_conf_theme_colour_15=${tmux_conf_theme_colour_15:-#080808} # dark gray -# tmux_conf_theme_colour_16=${tmux_conf_theme_colour_16:-#d70000} # red -# tmux_conf_theme_colour_17=${tmux_conf_theme_colour_17:-#e4e4e4} # white -# -# # -- panes ------------------------------------------------------------- -# -# tmux_conf_theme_window_fg=${tmux_conf_theme_window_fg:-default} -# tmux_conf_theme_window_bg=${tmux_conf_theme_window_bg:-default} -# tmux_conf_theme_highlight_focused_pane=${tmux_conf_theme_highlight_focused_pane:-false} -# tmux_conf_theme_focused_pane_fg=${tmux_conf_theme_focused_pane_fg:-default} -# tmux_conf_theme_focused_pane_bg=${tmux_conf_theme_focused_pane_bg:-$tmux_conf_theme_colour_2} -# -# window_style="fg=$tmux_conf_theme_window_fg,bg=$tmux_conf_theme_window_bg" -# if _is_true "$tmux_conf_theme_highlight_focused_pane"; then -# window_active_style="fg=$tmux_conf_theme_focused_pane_fg,bg=$tmux_conf_theme_focused_pane_bg" -# else -# window_active_style="default" -# fi -# -# tmux_conf_theme_pane_border_style=${tmux_conf_theme_pane_border_style:-thin} -# tmux_conf_theme_pane_border=${tmux_conf_theme_pane_border:-$tmux_conf_theme_colour_2} -# tmux_conf_theme_pane_active_border=${tmux_conf_theme_pane_active_border:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_pane_border_fg=${tmux_conf_theme_pane_border_fg:-$tmux_conf_theme_pane_border} -# tmux_conf_theme_pane_active_border_fg=${tmux_conf_theme_pane_active_border_fg:-$tmux_conf_theme_pane_active_border} -# case "$tmux_conf_theme_pane_border_style" in -# fat) -# tmux_conf_theme_pane_border_bg=${tmux_conf_theme_pane_border_bg:-$tmux_conf_theme_pane_border_fg} -# tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-$tmux_conf_theme_pane_active_border_fg} -# ;; -# thin|*) -# tmux_conf_theme_pane_border_bg=${tmux_conf_theme_pane_border_bg:-default} -# tmux_conf_theme_pane_active_border_bg=${tmux_conf_theme_pane_active_border_bg:-default} -# ;; -# esac -# -# tmux_conf_theme_pane_indicator=${tmux_conf_theme_pane_indicator:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_pane_active_indicator=${tmux_conf_theme_pane_active_indicator:-$tmux_conf_theme_colour_4} -# -# # -- status line ------------------------------------------------------- -# -# tmux_conf_theme_left_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_left_separator_main-}") -# tmux_conf_theme_left_separator_sub=$(_decode_unicode_escapes "${tmux_conf_theme_left_separator_sub-|}") -# tmux_conf_theme_right_separator_main=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_main-}") -# tmux_conf_theme_right_separator_sub=$(_decode_unicode_escapes "${tmux_conf_theme_right_separator_sub-|}") -# -# tmux_conf_theme_message_fg=${tmux_conf_theme_message_fg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_message_bg=${tmux_conf_theme_message_bg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_message_attr=${tmux_conf_theme_message_attr:-bold} -# -# tmux_conf_theme_message_command_fg=${tmux_conf_theme_message_command_fg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_message_command_bg=${tmux_conf_theme_message_command_bg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_message_command_attr=${tmux_conf_theme_message_command_attr:-bold} -# -# tmux_conf_theme_mode_fg=${tmux_conf_theme_mode_fg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_mode_bg=${tmux_conf_theme_mode_bg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_mode_attr=${tmux_conf_theme_mode_attr:-bold} -# -# tmux_conf_theme_status_fg=${tmux_conf_theme_status_fg:-$tmux_conf_theme_colour_3} -# tmux_conf_theme_status_bg=${tmux_conf_theme_status_bg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_status_attr=${tmux_conf_theme_status_attr:-none} -# -# tmux_conf_theme_terminal_title=${tmux_conf_theme_terminal_title:-#h ❐ #S ● #I #W} -# -# tmux_conf_theme_terminal_title=$(echo "$tmux_conf_theme_terminal_title" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') -# -# tmux_conf_theme_window_status_fg=${tmux_conf_theme_window_status_fg:-$tmux_conf_theme_colour_3} -# tmux_conf_theme_window_status_bg=${tmux_conf_theme_window_status_bg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_window_status_attr=${tmux_conf_theme_window_status_attr:-none} -# tmux_conf_theme_window_status_format=${tmux_conf_theme_window_status_format:-#I #W} -# -# tmux_conf_theme_window_status_current_fg=${tmux_conf_theme_window_status_current_fg:-$tmux_conf_theme_colour_1} -# tmux_conf_theme_window_status_current_bg=${tmux_conf_theme_window_status_current_bg:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_window_status_current_attr=${tmux_conf_theme_window_status_current_attr:-bold} -# tmux_conf_theme_window_status_current_format=${tmux_conf_theme_window_status_current_format:-#I #W} -# -# tmux_conf_theme_window_status_activity_fg=${tmux_conf_theme_window_status_activity_fg:-default} -# tmux_conf_theme_window_status_activity_bg=${tmux_conf_theme_window_status_activity_bg:-default} -# tmux_conf_theme_window_status_activity_attr=${tmux_conf_theme_window_status_activity_attr:-underscore} -# -# tmux_conf_theme_window_status_bell_fg=${tmux_conf_theme_window_status_bell_fg:-$tmux_conf_theme_colour_5} -# tmux_conf_theme_window_status_bell_bg=${tmux_conf_theme_window_status_bell_bg:-default} -# tmux_conf_theme_window_status_bell_attr=${tmux_conf_theme_window_status_bell_attr:-blink,bold} -# -# tmux_conf_theme_window_status_last_fg=${tmux_conf_theme_window_status_last_fg:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_window_status_last_bg=${tmux_conf_theme_window_status_last_bg:-default} -# tmux_conf_theme_window_status_last_attr=${tmux_conf_theme_window_status_last_attr:-none} -# -# if [ x"$tmux_conf_theme_window_status_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bg" = x"default" ]; then -# spacer='' -# spacer_current=' ' -# else -# spacer=' ' -# spacer_current=' ' -# fi -# if [ x"$tmux_conf_theme_window_status_last_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_last_bg" = x"default" ] ; then -# spacer_last='' -# else -# spacer_last=' ' -# fi -# if [ x"$tmux_conf_theme_window_status_activity_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_activity_bg" = x"default" ] ; then -# spacer_activity='' -# spacer_last_activity="$spacer_last" -# else -# spacer_activity=' ' -# spacer_last_activity=' ' -# fi -# if [ x"$tmux_conf_theme_window_status_bell_bg" = x"$tmux_conf_theme_status_bg" ] || [ x"$tmux_conf_theme_window_status_bell_bg" = x"default" ] ; then -# spacer_bell='' -# spacer_last_bell="$spacer_last" -# spacer_activity_bell="$spacer_activity" -# spacer_last_activity_bell="$spacer_last_activity" -# else -# spacer_bell=' ' -# spacer_last_bell=' ' -# spacer_activity_bell=' ' -# spacer_last_activity_bell=' ' -# fi -# spacer="#{?window_last_flag,#{?window_activity_flag,#{?window_bell_flag,$spacer_last_activity_bell,$spacer_last_activity},#{?window_bell_flag,$spacer_last_bell,$spacer_last}},#{?window_activity_flag,#{?window_bell_flag,$spacer_activity_bell,$spacer_activity},#{?window_bell_flag,$spacer_bell,$spacer}}}" -# if [ x"$(tmux show -g -v status-justify)" = x"right" ]; then -# if [ -z "$tmux_conf_theme_right_separator_main" ]; then -# window_status_separator=' ' -# else -# window_status_separator='' -# fi -# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag?,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#[none]$tmux_conf_theme_right_separator_main" -# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg,none]$tmux_conf_theme_right_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_right_separator_main" -# else -# if [ -z "$tmux_conf_theme_left_separator_main" ]; then -# window_status_separator=' ' -# else -# window_status_separator='' -# fi -# tmux_conf_theme_window_status_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_bg,none]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_fg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[bg=$&]/; print if !/default/"),}$spacer$(printf "$tmux_conf_theme_window_status_last_attr" | perl -n -e 'print "#{?window_last_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_last_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_activity_attr" | perl -n -e 'print "#{?window_activity_flag,#[none],}" if !/default/ ; s/([a-z]+),?/#{?window_activity_flag,#[\1],}/g; print if !/default/')$(printf "$tmux_conf_theme_window_status_bell_attr" | perl -n -e 'print "#{?window_bell_flag,#[none],}" if /!default/ ; s/([a-z]+),?/#{?window_bell_flag,#[\1],}/g; print if !/default/')$tmux_conf_theme_window_status_format#[none]$spacer#[fg=$tmux_conf_theme_window_status_bg,bg=$tmux_conf_theme_status_bg]#{?window_last_flag,$(printf "$tmux_conf_theme_window_status_last_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_activity_flag,$(printf "$tmux_conf_theme_window_status_activity_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}#{?window_bell_flag,$(printf "$tmux_conf_theme_window_status_bell_bg" | perl -n -e "s/.+/#[fg=$&]/; print if !/default/"),}$tmux_conf_theme_left_separator_main" -# tmux_conf_theme_window_status_current_format="#[fg=$tmux_conf_theme_status_bg,bg=$tmux_conf_theme_window_status_current_bg,none]$tmux_conf_theme_left_separator_main#[fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr]$spacer_current$tmux_conf_theme_window_status_current_format$spacer_current#[fg=$tmux_conf_theme_window_status_current_bg,bg=$tmux_conf_theme_status_bg]$tmux_conf_theme_left_separator_main" -# fi -# -# tmux_conf_theme_window_status_format=$(echo "$tmux_conf_theme_window_status_format" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') -# tmux_conf_theme_window_status_current_format=$(echo "$tmux_conf_theme_window_status_current_format" | sed \ -# -e 's%#{circled_window_index}%#(cut -c3- ~/.tmux.conf | sh -s _circled #I)%g' \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g' \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') -# -# # -- indicators -# -# tmux_conf_theme_pairing=${tmux_conf_theme_pairing:-⚇} # U+2687 -# tmux_conf_theme_pairing_fg=${tmux_conf_theme_pairing_fg:-none} -# tmux_conf_theme_pairing_bg=${tmux_conf_theme_pairing_bg:-none} -# tmux_conf_theme_pairing_attr=${tmux_conf_theme_pairing_attr:-none} -# -# tmux_conf_theme_prefix=${tmux_conf_theme_prefix:-⌨} # U+2328 -# tmux_conf_theme_prefix_fg=${tmux_conf_theme_prefix_fg:-none} -# tmux_conf_theme_prefix_bg=${tmux_conf_theme_prefix_bg:-none} -# tmux_conf_theme_prefix_attr=${tmux_conf_theme_prefix_attr:-none} -# -# tmux_conf_theme_mouse=${tmux_conf_theme_mouse:-↗} # U+2197 -# tmux_conf_theme_mouse_fg=${tmux_conf_theme_mouse_fg:-none} -# tmux_conf_theme_mouse_bg=${tmux_conf_theme_mouse_bg:-none} -# tmux_conf_theme_mouse_attr=${tmux_conf_theme_mouse_attr:-none} -# -# tmux_conf_theme_root=${tmux_conf_theme_root:-!} -# tmux_conf_theme_root_fg=${tmux_conf_theme_root_fg:-none} -# tmux_conf_theme_root_bg=${tmux_conf_theme_root_bg:-none} -# tmux_conf_theme_root_attr=${tmux_conf_theme_root_attr:-bold,blink} -# -# tmux_conf_theme_synchronized=${tmux_conf_theme_synchronized:-⚏} # U+268F -# tmux_conf_theme_synchronized_fg=${tmux_conf_theme_synchronized_fg:-none} -# tmux_conf_theme_synchronized_bg=${tmux_conf_theme_synchronized_bg:-none} -# tmux_conf_theme_synchronized_attr=${tmux_conf_theme_synchronized_attr:-none} -# -# # -- status-left style -# -# tmux_conf_theme_status_left=${tmux_conf_theme_status_left-' ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} '} -# tmux_conf_theme_status_left_fg=${tmux_conf_theme_status_left_fg:-$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8} -# tmux_conf_theme_status_left_bg=${tmux_conf_theme_status_left_bg:-$tmux_conf_theme_colour_9,$tmux_conf_theme_colour_10,$tmux_conf_theme_colour_11} -# tmux_conf_theme_status_left_attr=${tmux_conf_theme_status_left_attr:-bold,none,none} -# -# if [ -n "$tmux_conf_theme_status_left" ]; then -# status_left=$(echo "$tmux_conf_theme_status_left" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ -# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') -# -# if [ -n "$(tmux display -p '#{version}')" ]; then -# status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# else -# status_left=$(echo "$status_left" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{b:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") -# fi -# -# status_left=$(printf '%s' "$status_left" | awk \ -# -v status_bg="$tmux_conf_theme_status_bg" \ -# -v fg_="$tmux_conf_theme_status_left_fg" \ -# -v bg_="$tmux_conf_theme_status_left_bg" \ -# -v attr_="$tmux_conf_theme_status_left_attr" \ -# -v mainsep="$tmux_conf_theme_left_separator_main" \ -# -v subsep="$tmux_conf_theme_left_separator_sub" ' -# function subsplit(s, l, i, a, r) -# { -# l = split(s, a, ",") -# for (i = 1; i <= l; ++i) -# { -# o = split(a[i], _, "(") - 1 -# c = split(a[i], _, ")") - 1 -# open += o - c -# o_ = split(a[i], _, "{") - 1 -# c_ = split(a[i], _, "}") - 1 -# open_ += o_ - c_ -# o__ = split(a[i], _, "[") - 1 -# c__ = split(a[i], _, "]") - 1 -# open__ += o__ - c__ -# -# if (i == l) -# r = sprintf("%s%s", r, a[i]) -# else if (open || open_ || open__) -# r = sprintf("%s%s,", r, a[i]) -# else -# r = sprintf("%s%s#[fg=%s,bg=%s,%s]%s", r, a[i], fg[j], bg[j], attr[j], subsep) -# } -# -# gsub(/#\[inherit\]/, sprintf("#[default]#[fg=%s,bg=%s,%s]", fg[j], bg[j], attr[j]), r) -# return r -# } -# BEGIN { -# FS = "|" -# l1 = split(fg_, fg, ",") -# l2 = split(bg_, bg, ",") -# l3 = split(attr_, attr, ",") -# l = l1 < l2 ? (l1 < l3 ? l1 : l3) : (l2 < l3 ? l2 : l3) -# } -# { -# for (i = j = 1; i <= NF; ++i) -# { -# if (open || open_ || open__) -# printf "|%s", subsplit($i) -# else -# { -# if (i > 1) -# printf "#[fg=%s,bg=%s,none]%s#[fg=%s,bg=%s,%s]%s", bg[j_], bg[j], mainsep, fg[j], bg[j], attr[j], subsplit($i) -# else -# printf "#[fg=%s,bg=%s,%s]%s", fg[j], bg[j], attr[j], subsplit($i) -# } -# -# if (!open && !open_ && !open__) -# { -# j_ = j -# j = j % l + 1 -# } -# } -# printf "#[fg=%s,bg=%s,none]%s", bg[j_], status_bg, mainsep -# }') -# fi -# -# status_left="$status_left " -# -# # -- status-right style -# -# tmux_conf_theme_status_right=${tmux_conf_theme_status_right-' #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status, #{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} '} -# tmux_conf_theme_status_right_fg=${tmux_conf_theme_status_right_fg:-$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14} -# tmux_conf_theme_status_right_bg=${tmux_conf_theme_status_right_bg:-$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17} -# tmux_conf_theme_status_right_attr=${tmux_conf_theme_status_right_attr:-none,none,bold} -# -# if [ -n "$tmux_conf_theme_status_right" ]; then -# status_right=$(echo "$tmux_conf_theme_status_right" | sed \ -# -e "s/#{pairing}/#[fg=$tmux_conf_theme_pairing_fg]#[bg=$tmux_conf_theme_pairing_bg]#[$tmux_conf_theme_pairing_attr]#{?session_many_attached,$tmux_conf_theme_pairing ,}/g" \ -# -e "s/#{prefix}/#[fg=$tmux_conf_theme_prefix_fg]#[bg=$tmux_conf_theme_prefix_bg]#[$tmux_conf_theme_prefix_attr]#{?client_prefix,$tmux_conf_theme_prefix ,$(printf "$tmux_conf_theme_prefix" | sed -e 's/./ /g') }/g" \ -# -e "s/#{mouse}/#[fg=$tmux_conf_theme_mouse_fg]#[bg=$tmux_conf_theme_mouse_bg]#[$tmux_conf_theme_mouse_attr]#{?mouse,$tmux_conf_theme_mouse ,$(printf "$tmux_conf_theme_mouse" | sed -e 's/./ /g') }/g" \ -# -e "s%#{synchronized}%#[fg=$tmux_conf_theme_synchronized_fg]#[bg=$tmux_conf_theme_synchronized_bg]#[$tmux_conf_theme_synchronized_attr]#{?pane_synchronized,$tmux_conf_theme_synchronized ,}%g" \ -# -e 's%#{circled_session_name}%#(cut -c3- ~/.tmux.conf | sh -s _circled #S)%g') -# -# if [ -z "$(tmux display -p '#{version}')" ]; then -# status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#{?#{==:#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} #D),root},$tmux_conf_theme_root,}#[inherit]%g") -# else -# status_right=$(echo "$status_right" | sed \ -# -e "s%#{root}%#[fg=$tmux_conf_theme_root_fg]#[bg=$tmux_conf_theme_root_bg]#[$tmux_conf_theme_root_attr]#(cut -c3- ~/.tmux.conf | sh -s _root #{pane_pid} #{b:pane_tty} $tmux_conf_theme_root #D)#[inherit]%g") -# fi -# -# status_right=$(printf '%s' "$status_right" | awk \ -# -v status_bg="$tmux_conf_theme_status_bg" \ -# -v fg_="$tmux_conf_theme_status_right_fg" \ -# -v bg_="$tmux_conf_theme_status_right_bg" \ -# -v attr_="$tmux_conf_theme_status_right_attr" \ -# -v mainsep="$tmux_conf_theme_right_separator_main" \ -# -v subsep="$tmux_conf_theme_right_separator_sub" ' -# function subsplit(s, l, i, a, r) -# { -# l = split(s, a, ",") -# for (i = 1; i <= l; ++i) -# { -# o = split(a[i], _, "(") - 1 -# c = split(a[i], _, ")") - 1 -# open += o - c -# o_ = split(a[i], _, "{") - 1 -# c_ = split(a[i], _, "}") - 1 -# open_ += o_ - c_ -# o__ = split(a[i], _, "[") - 1 -# c__ = split(a[i], _, "]") - 1 -# open__ += o__ - c__ -# -# if (i == l) -# r = sprintf("%s%s", r, a[i]) -# else if (open || open_ || open__) -# r = sprintf("%s%s,", r, a[i]) -# else -# r = sprintf("%s%s#[fg=%s,bg=%s,%s]%s", r, a[i], fg[j], bg[j], attr[j], subsep) -# } -# -# gsub(/#\[inherit\]/, sprintf("#[default]#[fg=%s,bg=%s,%s]", fg[j], bg[j], attr[j]), r) -# return r -# } -# BEGIN { -# FS = "|" -# l1 = split(fg_, fg, ",") -# l2 = split(bg_, bg, ",") -# l3 = split(attr_, attr, ",") -# l = l1 < l2 ? (l1 < l3 ? l1 : l3) : (l2 < l3 ? l2 : l3) -# } -# { -# for (i = j = 1; i <= NF; ++i) -# { -# if (open_ || open || open__) -# printf "|%s", subsplit($i) -# else -# printf "#[fg=%s,bg=%s,none]%s#[fg=%s,bg=%s,%s]%s", bg[j], (i == 1) ? status_bg : bg[j_], mainsep, fg[j], bg[j], attr[j], subsplit($i) -# -# if (!open && !open_ && !open__) -# { -# j_ = j -# j = j % l + 1 -# } -# } -# }') -# fi -# -# # -- variables -# -# tmux_conf_battery_bar_symbol_full=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_full:-◼}") -# tmux_conf_battery_bar_symbol_empty=$(_decode_unicode_escapes "${tmux_conf_battery_bar_symbol_empty:-◻}") -# tmux_conf_battery_bar_length=${tmux_conf_battery_bar_length:-auto} -# tmux_conf_battery_bar_palette=${tmux_conf_battery_bar_palette:-gradient} -# tmux_conf_battery_hbar_palette=${tmux_conf_battery_hbar_palette:-gradient} -# tmux_conf_battery_vbar_palette=${tmux_conf_battery_vbar_palette:-gradient} -# tmux_conf_battery_status_charging=$(_decode_unicode_escapes "${tmux_conf_battery_status_charging:-↑}") # U+2191 -# tmux_conf_battery_status_discharging=$(_decode_unicode_escapes "${tmux_conf_battery_status_discharging:-↓}") # U+2193 -# -# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _battery_bar' -# _battery_info -# if [ "$charge" != 0 ]; then -# case "$status_left $status_right" in -# *'#{battery_'*|*'#{?battery_'*) -# status_left=$(echo "$status_left" | sed -E \ -# -e 's/#\{(\?)?battery_bar/#\{\1@battery_bar/g' \ -# -e 's/#\{(\?)?battery_hbar/#\{\1@battery_hbar/g' \ -# -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ -# -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ -# -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') -# status_right=$(echo "$status_right" | sed -E \ -# -e 's/#\{(\?)?battery_bar/#\{\1@battery_bar/g' \ -# -e 's/#\{(\?)?battery_hbar/#\{\1@battery_hbar/g' \ -# -e 's/#\{(\?)?battery_vbar/#\{\1@battery_vbar/g' \ -# -e 's/#\{(\?)?battery_status/#\{\1@battery_status/g' \ -# -e 's/#\{(\?)?battery_percentage/#\{\1@battery_percentage/g') -# status_right="#(echo; nice cut -c3- ~/.tmux.conf | sh -s _battery_status \"$tmux_conf_battery_status_charging\" \"$tmux_conf_battery_status_discharging\")$status_right" -# interval=60 -# if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -ge 280 ]; then -# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" -# elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\"; sleep $interval; done)$status_right" -# else -# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _battery_bar \"$tmux_conf_battery_bar_symbol_full\" \"$tmux_conf_battery_bar_symbol_empty\" \"$tmux_conf_battery_bar_length\" \"$tmux_conf_battery_bar_palette\" \"$tmux_conf_battery_hbar_palette\" \"$tmux_conf_battery_vbar_palette\")$status_right" -# fi -# ;; -# esac -# fi -# -# case "$status_left $status_right" in -# *'#{username}'*|*'#{hostname}'*|*'#{hostname_full}'*|*'#{username_ssh}'*|*'#{hostname_ssh}'*|*'#{hostname_full_ssh}'*) -# status_left=$(echo "$status_left" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') -# status_right=$(echo "$status_right" | sed \ -# -e 's%#{username}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} false #D)%g' \ -# -e 's%#{hostname}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false false #h #D)%g' \ -# -e 's%#{hostname_full}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} false true #H #D)%g' \ -# -e 's%#{username_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _username #{pane_pid} #{b:pane_tty} true #D)%g' \ -# -e 's%#{hostname_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true false #h #D)%g' \ -# -e 's%#{hostname_full_ssh}%#(cut -c3- ~/.tmux.conf | sh -s _hostname #{pane_pid} #{b:pane_tty} true true #H #D)%g') -# ;; -# esac -# -# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _uptime' -# case "$status_left $status_right" in -# *'#{uptime_'*|*'#{?uptime_'*) -# status_left=$(echo "$status_left" | perl -p -e ' -# ; s/#\{(\?)?uptime_y\b/#\{\1\@uptime_y/g -# ; s/#\{(\?)?uptime_d\b/#\{\1\@uptime_d/g -# ; s/\@uptime_d\b/\@uptime_dy/g if /\@uptime_y\b/ -# ; s/#\{(\?)?uptime_h\b/#\{\1\@uptime_h/g -# ; s/#\{(\?)?uptime_m\b/#\{\1\@uptime_m/g -# ; s/#\{(\?)?uptime_s\b/#\{\1\@uptime_s/g') -# status_right=$(echo "$status_right" | perl -p -e ' -# ; s/#\{(\?)?uptime_y\b/#\{\1\@uptime_y/g -# ; s/#\{(\?)?uptime_d\b/#\{\1\@uptime_d/g -# ; s/\@uptime_d\b/\@uptime_dy/g if /\@uptime_y\b/ -# ; s/#\{(\?)?uptime_h\b/#\{\1\@uptime_h/g -# ; s/#\{(\?)?uptime_m\b/#\{\1\@uptime_m/g -# ; s/#\{(\?)?uptime_s\b/#\{\1\@uptime_s/g') -# interval=60 -# case "$status_left $status_right" in -# *'#{@uptime_s}'*) -# interval=$(tmux show -gv status-interval) -# ;; -# esac -# if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -gt 280 ]; then -# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" -# elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _uptime; sleep $interval; done)$status_right" -# else -# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _uptime)$status_right" -# fi -# ;; -# esac -# -# _pkillf 'cut -c3- ~/\.tmux\.conf \| sh -s _loadavg' -# case "$status_left $status_right" in -# *'#{loadavg'*|*'#{?loadavg'*) -# status_left=$(echo "$status_left" | sed -E \ -# -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') -# status_right=$(echo "$status_right" | sed -E \ -# -e 's/#\{(\?)?loadavg/#\{\1@loadavg/g') -# interval=$(tmux show -gv status-interval) -# if [ $_tmux_version -ge 320 ]; then -# tmux run -b "trap '[ -n \"\$sleep_pid\" ] && kill -9 \$sleep_pid; exit 0' TERM; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval & sleep_pid=\$!; wait \$sleep_pid; sleep_pid=; done" -# elif [ $_tmux_version -gt 280 ]; then -# status_right="#(echo; while [ x\"\$(tmux -S '#{socket_path}' display -p '#{l:#{pid}}')\" = x\"#{pid}\" ]; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" -# elif [ $_tmux_version -gt 240 ]; then -# status_right="#(echo; while :; do nice cut -c3- ~/.tmux.conf | sh -s _loadavg; sleep $interval; done)$status_right" -# else -# status_right="#(nice cut -c3- ~/.tmux.conf | sh -s _loadavg)$status_right" -# fi -# ;; -# esac -# -# # -- clock ------------------------------------------------------------- -# -# tmux_conf_theme_clock_colour=${tmux_conf_theme_clock_colour:-$tmux_conf_theme_colour_4} -# tmux_conf_theme_clock_style=${tmux_conf_theme_clock_style:-24} -# -# # -- custom variables --------------------------------------------------- -# -# if [ -f ~/.tmux.conf.local ] && [ x"$(cut -c3- ~/.tmux.conf.local | sh 2>/dev/null -s printf probe)" = x"probe" ]; then -# replacements=$(perl -n -e 'print if s!^#\s+([^_][^()\s]+)\s*\(\)\s*{\s*\n!s%#\\\{\1((?:\\s+(?:[^\{\}]+?|#\\{(?:[^\{\}]+?)\}))*)\\\}%#(cut -c3- ~/.tmux.conf.local | sh -s \1\\1)%g; !p' < ~/.tmux.conf.local) -# status_left=$(echo "$status_left" | perl -p -e "$replacements" || echo "$status_left") -# status_right=$(echo "$status_right" | perl -p -e "$replacements" || echo "$status_right") -# fi -# -# # ----------------------------------------------------------------------- -# -# tmux setw -g window-style "$window_style" \; setw -g window-active-style "$window_active_style" \;\ -# setw -g pane-border-style "fg=$tmux_conf_theme_pane_border_fg,bg=$tmux_conf_theme_pane_border_bg" \; set -g pane-active-border-style "fg=$tmux_conf_theme_pane_active_border_fg,bg=$tmux_conf_theme_pane_active_border_bg" \;\ -# set -g display-panes-colour "$tmux_conf_theme_pane_indicator" \; set -g display-panes-active-colour "$tmux_conf_theme_pane_active_indicator" \;\ -# set -g message-style "fg=$tmux_conf_theme_message_fg,bg=$tmux_conf_theme_message_bg,$tmux_conf_theme_message_attr" \;\ -# set -g message-command-style "fg=$tmux_conf_theme_message_command_fg,bg=$tmux_conf_theme_message_command_bg,$tmux_conf_theme_message_command_attr" \;\ -# setw -g mode-style "fg=$tmux_conf_theme_mode_fg,bg=$tmux_conf_theme_mode_bg,$tmux_conf_theme_mode_attr" \;\ -# set -g status-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ -# set -g status-left-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ -# set -g status-right-style "fg=$tmux_conf_theme_status_fg,bg=$tmux_conf_theme_status_bg,$tmux_conf_theme_status_attr" \;\ -# set -g set-titles-string "$(_decode_unicode_escapes "$tmux_conf_theme_terminal_title")" \;\ -# setw -g window-status-style "fg=$tmux_conf_theme_window_status_fg,bg=$tmux_conf_theme_window_status_bg,$tmux_conf_theme_window_status_attr" \;\ -# setw -g window-status-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_format")" \;\ -# setw -g window-status-current-style "fg=$tmux_conf_theme_window_status_current_fg,bg=$tmux_conf_theme_window_status_current_bg,$tmux_conf_theme_window_status_current_attr" \;\ -# setw -g window-status-current-format "$(_decode_unicode_escapes "$tmux_conf_theme_window_status_current_format")" \;\ -# setw -g window-status-activity-style "fg=$tmux_conf_theme_window_status_activity_fg,bg=$tmux_conf_theme_window_status_activity_bg,$tmux_conf_theme_window_status_activity_attr" \;\ -# setw -g window-status-bell-style "fg=$tmux_conf_theme_window_status_bell_fg,bg=$tmux_conf_theme_window_status_bell_bg,$tmux_conf_theme_window_status_bell_attr" \;\ -# setw -g window-status-last-style "fg=$tmux_conf_theme_window_status_last_fg,bg=$tmux_conf_theme_window_status_last_bg,$tmux_conf_theme_window_status_last_attr" \;\ -# setw -g window-status-separator "$window_status_separator" \;\ -# set -g status-left-length 1000 \; set -g status-left "$(_decode_unicode_escapes "$status_left")" \;\ -# set -g status-right-length 1000 \; set -g status-right "$(_decode_unicode_escapes "$status_right")" \;\ -# setw -g clock-mode-colour "$tmux_conf_theme_clock_colour" \;\ -# setw -g clock-mode-style "$tmux_conf_theme_clock_style" -# } -# -# __apply_plugins() { -# window_active="$1" -# tmux_conf_update_plugins_on_launch="$2" -# tmux_conf_update_plugins_on_reload="$3" -# tmux_conf_uninstall_plugins_on_reload="$4" -# -# TMUX_PLUGIN_MANAGER_PATH=${TMUX_PLUGIN_MANAGER_PATH:-~/.tmux/plugins} -# if [ -z "$(tmux show -gv '@plugin')" ] && [ -z "$(tmux show -gv '@tpm_plugins')" ]; then -# if _is_true "$tmux_conf_uninstall_plugins_on_reload" && [ -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then -# tmux display 'Uninstalling tpm and plugins...' -# rm -rf "$TMUX_PLUGIN_MANAGER_PATH" -# tmux display 'Done uninstalling tpm and plugins...' -# fi -# else -# if git ls-remote -hq https://github.com/gpakosz/.tmux.git master > /dev/null; then -# if [ ! -d "$TMUX_PLUGIN_MANAGER_PATH/tpm" ]; then -# install_tpm=true -# tmux display 'Installing tpm and plugins...' -# git clone --depth 1 https://github.com/tmux-plugins/tpm "$TMUX_PLUGIN_MANAGER_PATH/tpm" -# elif { [ -z "$window_active" ] && _is_true "$tmux_conf_update_plugins_on_launch"; } || { [ -n "$window_active" ] && _is_true "$tmux_conf_update_plugins_on_reload"; }; then -# update_tpm=true -# tmux display 'Updating tpm and plugins...' -# (cd "$TMUX_PLUGIN_MANAGER_PATH/tpm" && git fetch -q -p && git checkout -q master && git reset -q --hard origin/master) -# fi -# if [ x"$install_tpm" = x"true" ] || [ x"$update_tpm" = x"true" ]; then -# perl -0777 -p -i -e 's/git clone(?!\s+--depth\s+1)/git clone --depth 1/g -# ;s/(install_plugin(.(?!&))*)\n(\s+)done/\1&\n\3done\n\3wait/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/install_plugins.sh" -# perl -p -i -e 's/git submodule update --init --recursive(?!\s+--depth\s+1)/git submodule update --init --recursive --depth 1/g' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/update_plugin.sh" -# perl -p -i -e 's,\$tmux_file\s+>/dev/null\s+2>\&1,$& || { tmux display "Plugin \$(basename \${plugin_path}) failed" && false; },' "$TMUX_PLUGIN_MANAGER_PATH/tpm/scripts/source_plugins.sh" -# tmux set-environment -g TMUX_PLUGIN_MANAGER_PATH "$TMUX_PLUGIN_MANAGER_PATH" -# fi -# if [ x"$update_tpm" = x"true" ]; then -# { -# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ -# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins all ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/update_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ -# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins all ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/clean_plugins" all >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 &&\ -# tmux display 'Done updating tpm and plugins...' -# } || tmux display 'Failed updating tpm and plugins...' -# elif [ x"$install_tpm" = x"true" ]; then -# { -# echo "Invoking $TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins ..." > "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 && \ -# "$TMUX_PLUGIN_MANAGER_PATH/tpm/bin/install_plugins" >> "$TMUX_PLUGIN_MANAGER_PATH/tpm_log.txt" 2>&1 -# tmux display 'Done installing tpm and plugins...' -# } || tmux display 'Failed installing tpm and plugins...' -# fi -# else -# tmux display "GitHub doesn't seem to be reachable, skipping installing and/or updating tpm and plugins..." -# fi -# -# [ -z "$(tmux show -gqv '@tpm-install')" ] && tmux set -g '@tpm-install' 'I' -# [ -z "$(tmux show -gqv '@tpm-update')" ] && tmux set -g '@tpm-update' 'u' -# [ -z "$(tmux show -gqv '@tpm-clean')" ] && tmux set -g '@tpm-clean' 'M-u' -# [ -f "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" ] && "$TMUX_PLUGIN_MANAGER_PATH/tpm/tpm" || tmux display "One or more tpm plugin(s) failed" -# if [ $_tmux_version -gt 260 ]; then -# tmux set -gu '@tpm-install' \; set -gu '@tpm-update' \; set -gu '@tpm-clean' \; set -gu '@plugin' -# fi -# fi -# -# if [ -z "$window_active" ] && [ $_tmux_version -lt 240 ]; then -# tmux run -b "sleep $(expr $(tmux display -p '#{display-time}') / 500) && tmux set display-time 3000 \; display 'This configuration will soon require tmux 2.4+' \; set -u display-time" -# fi -# } -# -# _apply_plugins() { -# tmux_conf_update_plugins_on_launch=${tmux_conf_update_plugins_on_launch:-true} -# tmux_conf_update_plugins_on_reload=${tmux_conf_update_plugins_on_reload:-true} -# tmux_conf_uninstall_plugins_on_reload=${tmux_conf_uninstall_plugins_on_reload:-true} -# tmux run -b "cut -c3- ~/.tmux.conf | sh -s __apply_plugins \"$window_active\" \"$tmux_conf_update_plugins_on_launch\" \"$tmux_conf_update_plugins_on_reload\" \"$tmux_conf_uninstall_plugins_on_reload\"" -# } -# -# _apply_important() { -# cfg=$(mktemp) && trap 'rm -f $cfg*' EXIT -# -# if perl -n -e 'print if /^\s*(?:set|bind|unbind).+?#!important\s*$/' ~/.tmux.conf.local 2>/dev/null > "$cfg.local"; then -# if ! tmux source-file "$cfg.local"; then -# verbose_flag=$(tmux source-file -v /dev/null 2> /dev/null && printf -- '-v' || true) -# while ! out=$(tmux source-file "$verbose_flag" "$cfg.local"); do -# line=$(printf "%s" "$out" | tail -1 | cut -d':' -f2) -# perl -n -i -e "if ($. != $line) { print }" "$cfg.local" -# done -# fi -# fi -# } -# -# _apply_configuration() { -# -# window_active="$(tmux display -p '#{window_active}' 2>/dev/null || true)" -# if [ -z "$window_active" ]; then -# if ! command -v perl > /dev/null 2>&1; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires perl" \; set -u display-time \; run "sleep 3" \; kill-server' -# return -# fi -# if ! command -v sed > /dev/null 2>&1; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires sed" \; set -u display-time \; run "sleep 3" \; kill-server' -# return -# fi -# if ! command -v awk > /dev/null 2>&1; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires awk" \; set -u display-time \; run "sleep 3" \; kill-server' -# return -# fi -# if [ $_tmux_version -lt 230 ]; then -# tmux run -b 'tmux set display-time 3000 \; display "This configuration requires tmux 2.3+" \; set -u display-time \; run "sleep 3" \; kill-server' -# return -# fi -# fi -# -# # see https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard -# if command -v reattach-to-user-namespace > /dev/null 2>&1; then -# default_shell="$(tmux show -gv default-shell)" -# case "$default_shell" in -# *fish) -# tmux set -g default-command "reattach-to-user-namespace -l $default_shell" -# ;; -# *sh) -# tmux set -g default-command "exec $default_shell... 2> /dev/null & reattach-to-user-namespace -l $default_shell" -# ;; -# esac -# fi -# -# case "$_uname_s" in -# *CYGWIN*|*MSYS*) -# # prevent Cygwin and MSYS2 from cd-ing into home directory when evaluating /etc/profile -# tmux setenv -g CHERE_INVOKING 1 -# ;; -# esac -# -# _apply_24b -# _apply_theme& -# _apply_bindings& -# wait -# -# _apply_plugins -# _apply_important -# -# # shellcheck disable=SC2046 -# tmux setenv -gu tmux_conf_dummy $(printenv | grep -E -o '^tmux_conf_[^=]+' | awk '{printf "; setenv -gu %s", $0}') -# } -# -# _urlview() { -# tmux capture-pane -J -S - -E - -b "urlview-$1" -t "$1" -# tmux split-window "tmux show-buffer -b urlview-$1 | urlview || true; tmux delete-buffer -b urlview-$1" -# } -# -# _fpp() { -# tmux capture-pane -J -S - -E - -b "fpp-$1" -t "$1" -# tmux split-window -c $2 "tmux show-buffer -b fpp-$1 | fpp || true; tmux delete-buffer -b fpp-$1" -# } -# -# "$@" diff --git a/dotfiles/.tmux.conf.local b/dotfiles/.tmux.conf.local deleted file mode 100644 index 7fc8a09b..00000000 --- a/dotfiles/.tmux.conf.local +++ /dev/null @@ -1,431 +0,0 @@ -# : << EOF -# https://github.com/gpakosz/.tmux -# (‑●‑●)> dual licensed under the WTFPL v2 license and the MIT license, -# without any warranty. -# Copyright 2012— Gregory Pakosz (@gpakosz). - - -# -- navigation ---------------------------------------------------------------- - -# if you're running tmux within iTerm2 -# - and tmux is 1.9 or 1.9a -# - and iTerm2 is configured to let option key act as +Esc -# - and iTerm2 is configured to send [1;9A -> [1;9D for option + arrow keys -# then uncomment the following line to make Meta + arrow keys mapping work -#set -ga terminal-overrides "*:kUP3=\e[1;9A,*:kDN3=\e[1;9B,*:kRIT3=\e[1;9C,*:kLFT3=\e[1;9D" - - -# -- windows & pane creation --------------------------------------------------- - -# new window retains current path, possible values are: -# - true -# - false (default) -# - disabled (do not modify new-window bindings) -tmux_conf_new_window_retain_current_path=false - -# new pane retains current path, possible values are: -# - true (default) -# - false -# - disabled (do not modify split-window bindings) -tmux_conf_new_pane_retain_current_path=true - -# new pane tries to reconnect ssh sessions, possible values are: -# - true -# - false (default) -# - disabled (do not modify split-window bindings) -tmux_conf_new_pane_reconnect_ssh=false - -# prompt for session name when creating a new session, possible values are: -# - true -# - false (default) -# - disabled (do not modify new-session bindings) -tmux_conf_new_session_prompt=false - - -# -- display ------------------------------------------------------------------- - -# RGB 24-bit colour support (tmux >= 2.2), possible values are: -# - true -# - false -# - auto (default) -# -# automatic detection relies on the COLORTERM environment variable being defined -# to 'truecolor' or '24bit' or '$ tput colors' answering '16777216' -# see https://github.com/termstandard/colors -tmux_conf_24b_colour=auto - -# default theme -tmux_conf_theme_colour_1="#080808" # dark gray -tmux_conf_theme_colour_2="#303030" # gray -tmux_conf_theme_colour_3="#8a8a8a" # light gray -tmux_conf_theme_colour_4="#00afff" # light blue -tmux_conf_theme_colour_5="#ffff00" # yellow -tmux_conf_theme_colour_6="#080808" # dark gray -tmux_conf_theme_colour_7="#e4e4e4" # white -tmux_conf_theme_colour_8="#080808" # dark gray -tmux_conf_theme_colour_9="#ffff00" # yellow -tmux_conf_theme_colour_10="#ff00af" # pink -tmux_conf_theme_colour_11="#5fff00" # green -tmux_conf_theme_colour_12="#8a8a8a" # light gray -tmux_conf_theme_colour_13="#e4e4e4" # white -tmux_conf_theme_colour_14="#080808" # dark gray -tmux_conf_theme_colour_15="#080808" # dark gray -tmux_conf_theme_colour_16="#d70000" # red -tmux_conf_theme_colour_17="#e4e4e4" # white - -# default theme (ansi) -#tmux_conf_theme_colour_1="colour0" -#tmux_conf_theme_colour_2="colour8" -#tmux_conf_theme_colour_3="colour8" -#tmux_conf_theme_colour_4="colour14" -#tmux_conf_theme_colour_5="colour11" -#tmux_conf_theme_colour_6="colour0" -#tmux_conf_theme_colour_7="colour15" -#tmux_conf_theme_colour_8="colour0" -#tmux_conf_theme_colour_9="colour11" -#tmux_conf_theme_colour_10="colour13" -#tmux_conf_theme_colour_11="colour10" -#tmux_conf_theme_colour_12="colour8" -#tmux_conf_theme_colour_13="colour15" -#tmux_conf_theme_colour_14="colour0" -#tmux_conf_theme_colour_15="colour0" -#tmux_conf_theme_colour_16="colour1" -#tmux_conf_theme_colour_17="colour15" - -# window style -tmux_conf_theme_window_fg="default" -tmux_conf_theme_window_bg="default" - -# highlight focused pane (tmux >= 2.1), possible values are: -# - true -# - false (default) -tmux_conf_theme_highlight_focused_pane=false - -# focused pane colours: -tmux_conf_theme_focused_pane_bg="$tmux_conf_theme_colour_2" - -# pane border style, possible values are: -# - thin (default) -# - fat -tmux_conf_theme_pane_border_style=thin - -# pane borders colours: -tmux_conf_theme_pane_border="$tmux_conf_theme_colour_2" -tmux_conf_theme_pane_active_border="$tmux_conf_theme_colour_4" - -# pane indicator colours (when you hit + q) -tmux_conf_theme_pane_indicator="$tmux_conf_theme_colour_4" -tmux_conf_theme_pane_active_indicator="$tmux_conf_theme_colour_4" - -# status line style -tmux_conf_theme_message_fg="$tmux_conf_theme_colour_1" -tmux_conf_theme_message_bg="$tmux_conf_theme_colour_5" -tmux_conf_theme_message_attr="bold" - -# status line command style ( : Escape) -tmux_conf_theme_message_command_fg="$tmux_conf_theme_colour_5" -tmux_conf_theme_message_command_bg="$tmux_conf_theme_colour_1" -tmux_conf_theme_message_command_attr="bold" - -# window modes style -tmux_conf_theme_mode_fg="$tmux_conf_theme_colour_1" -tmux_conf_theme_mode_bg="$tmux_conf_theme_colour_5" -tmux_conf_theme_mode_attr="bold" - -# status line style -tmux_conf_theme_status_fg="$tmux_conf_theme_colour_3" -tmux_conf_theme_status_bg="$tmux_conf_theme_colour_1" -tmux_conf_theme_status_attr="none" - -# terminal title -# - built-in variables are: -# - #{circled_window_index} -# - #{circled_session_name} -# - #{hostname} -# - #{hostname_ssh} -# - #{hostname_full} -# - #{hostname_full_ssh} -# - #{username} -# - #{username_ssh} -tmux_conf_theme_terminal_title="#h ❐ #S ● #I #W" - -# window status style -# - built-in variables are: -# - #{circled_window_index} -# - #{circled_session_name} -# - #{hostname} -# - #{hostname_ssh} -# - #{hostname_full} -# - #{hostname_full_ssh} -# - #{username} -# - #{username_ssh} -tmux_conf_theme_window_status_fg="$tmux_conf_theme_colour_3" -tmux_conf_theme_window_status_bg="$tmux_conf_theme_colour_1" -tmux_conf_theme_window_status_attr="none" -tmux_conf_theme_window_status_format="#I #W" -#tmux_conf_theme_window_status_format="#{circled_window_index} #W" -#tmux_conf_theme_window_status_format="#I #W#{?window_bell_flag,🔔,}#{?window_zoomed_flag,🔍,}" - -# window current status style -# - built-in variables are: -# - #{circled_window_index} -# - #{circled_session_name} -# - #{hostname} -# - #{hostname_ssh} -# - #{hostname_full} -# - #{hostname_full_ssh} -# - #{username} -# - #{username_ssh} -tmux_conf_theme_window_status_current_fg="$tmux_conf_theme_colour_1" -tmux_conf_theme_window_status_current_bg="$tmux_conf_theme_colour_4" -tmux_conf_theme_window_status_current_attr="bold" -tmux_conf_theme_window_status_current_format="#I #W" -#tmux_conf_theme_window_status_current_format="#{circled_window_index} #W" -#tmux_conf_theme_window_status_current_format="#I #W#{?window_zoomed_flag,🔍,}" - -# window activity status style -tmux_conf_theme_window_status_activity_fg="default" -tmux_conf_theme_window_status_activity_bg="default" -tmux_conf_theme_window_status_activity_attr="underscore" - -# window bell status style -tmux_conf_theme_window_status_bell_fg="$tmux_conf_theme_colour_5" -tmux_conf_theme_window_status_bell_bg="default" -tmux_conf_theme_window_status_bell_attr="blink,bold" - -# window last status style -tmux_conf_theme_window_status_last_fg="$tmux_conf_theme_colour_4" -tmux_conf_theme_window_status_last_bg="$tmux_conf_theme_colour_2" -tmux_conf_theme_window_status_last_attr="none" - -# status left/right sections separators -tmux_conf_theme_left_separator_main="" -tmux_conf_theme_left_separator_sub="|" -tmux_conf_theme_right_separator_main="" -tmux_conf_theme_right_separator_sub="|" -#tmux_conf_theme_left_separator_main='\uE0B0' # /!\ you don't need to install Powerline -#tmux_conf_theme_left_separator_sub='\uE0B1' # you only need fonts patched with -#tmux_conf_theme_right_separator_main='\uE0B2' # Powerline symbols or the standalone -#tmux_conf_theme_right_separator_sub='\uE0B3' # PowerlineSymbols.otf font, see README.md - -# status left/right content: -# - separate main sections with "|" -# - separate subsections with "," -# - built-in variables are: -# - #{battery_bar} -# - #{battery_hbar} -# - #{battery_percentage} -# - #{battery_status} -# - #{battery_vbar} -# - #{circled_session_name} -# - #{hostname_ssh} -# - #{hostname} -# - #{hostname_full} -# - #{hostname_full_ssh} -# - #{loadavg} -# - #{mouse} -# - #{pairing} -# - #{prefix} -# - #{root} -# - #{synchronized} -# - #{uptime_y} -# - #{uptime_d} (modulo 365 when #{uptime_y} is used) -# - #{uptime_h} -# - #{uptime_m} -# - #{uptime_s} -# - #{username} -# - #{username_ssh} -tmux_conf_theme_status_left=" ❐ #S | ↑#{?uptime_y, #{uptime_y}y,}#{?uptime_d, #{uptime_d}d,}#{?uptime_h, #{uptime_h}h,}#{?uptime_m, #{uptime_m}m,} " -tmux_conf_theme_status_right=" #{prefix}#{mouse}#{pairing}#{synchronized}#{?battery_status,#{battery_status},}#{?battery_bar, #{battery_bar},}#{?battery_percentage, #{battery_percentage},} , %R , %d %b | #{username}#{root} | #{hostname} " - -# status left style -tmux_conf_theme_status_left_fg="$tmux_conf_theme_colour_6,$tmux_conf_theme_colour_7,$tmux_conf_theme_colour_8" -tmux_conf_theme_status_left_bg="$tmux_conf_theme_colour_9,$tmux_conf_theme_colour_10,$tmux_conf_theme_colour_11" -tmux_conf_theme_status_left_attr="bold,none,none" - -# status right style -tmux_conf_theme_status_right_fg="$tmux_conf_theme_colour_12,$tmux_conf_theme_colour_13,$tmux_conf_theme_colour_14" -tmux_conf_theme_status_right_bg="$tmux_conf_theme_colour_15,$tmux_conf_theme_colour_16,$tmux_conf_theme_colour_17" -tmux_conf_theme_status_right_attr="none,none,bold" - -# pairing indicator -tmux_conf_theme_pairing="⚇" # U+2687 -tmux_conf_theme_pairing_fg="none" -tmux_conf_theme_pairing_bg="none" -tmux_conf_theme_pairing_attr="none" - -# prefix indicator -tmux_conf_theme_prefix="⌨" # U+2328 -tmux_conf_theme_prefix_fg="none" -tmux_conf_theme_prefix_bg="none" -tmux_conf_theme_prefix_attr="none" - -# mouse indicator -tmux_conf_theme_mouse="↗" # U+2197 -tmux_conf_theme_mouse_fg="none" -tmux_conf_theme_mouse_bg="none" -tmux_conf_theme_mouse_attr="none" - -# root indicator -tmux_conf_theme_root="!" -tmux_conf_theme_root_fg="none" -tmux_conf_theme_root_bg="none" -tmux_conf_theme_root_attr="bold,blink" - -# synchronized indicator -tmux_conf_theme_synchronized="⚏" # U+268F -tmux_conf_theme_synchronized_fg="none" -tmux_conf_theme_synchronized_bg="none" -tmux_conf_theme_synchronized_attr="none" - -# battery bar symbols -tmux_conf_battery_bar_symbol_full="◼" -tmux_conf_battery_bar_symbol_empty="◻" -#tmux_conf_battery_bar_symbol_full="♥" -#tmux_conf_battery_bar_symbol_empty="·" - -# battery bar length (in number of symbols), possible values are: -# - auto -# - a number, e.g. 5 -tmux_conf_battery_bar_length="auto" - -# battery bar palette, possible values are: -# - gradient (default) -# - heat -# - "colour_full_fg,colour_empty_fg,colour_bg" -tmux_conf_battery_bar_palette="gradient" -#tmux_conf_battery_bar_palette="#d70000,#e4e4e4,#000000" # red, white, black - -# battery hbar palette, possible values are: -# - gradient (default) -# - heat -# - "colour_low,colour_half,colour_full" -tmux_conf_battery_hbar_palette="gradient" -#tmux_conf_battery_hbar_palette="#d70000,#ff5f00,#5fff00" # red, orange, green - -# battery vbar palette, possible values are: -# - gradient (default) -# - heat -# - "colour_low,colour_half,colour_full" -tmux_conf_battery_vbar_palette="gradient" -#tmux_conf_battery_vbar_palette="#d70000,#ff5f00,#5fff00" # red, orange, green - -# symbols used to indicate whether battery is charging or discharging -tmux_conf_battery_status_charging="↑" # U+2191 -tmux_conf_battery_status_discharging="↓" # U+2193 -#tmux_conf_battery_status_charging="🔌" # U+1F50C -#tmux_conf_battery_status_discharging="🔋" # U+1F50B - -# clock style (when you hit + t) -# you may want to use %I:%M %p in place of %R in tmux_conf_theme_status_right -tmux_conf_theme_clock_colour="$tmux_conf_theme_colour_4" -tmux_conf_theme_clock_style="24" - - -# -- clipboard ----------------------------------------------------------------- - -# in copy mode, copying selection also copies to the OS clipboard -# - true -# - false (default) -# - disabled -# on macOS, this requires installing reattach-to-user-namespace, see README.md -# on Linux, this requires xsel, xclip or wl-copy -tmux_conf_copy_to_os_clipboard=false - - -# -- user customizations ------------------------------------------------------- -# this is the place to override or undo settings - -# increase history size -#set -g history-limit 10000 - -# start with mouse mode enabled -#set -g mouse on - -# force Vi mode -# really you should export VISUAL or EDITOR environment variable, see manual -#set -g status-keys vi -#set -g mode-keys vi - -# replace C-b by C-a instead of using both prefixes -# set -gu prefix2 -# unbind C-a -# unbind C-b -# set -g prefix C-a -# bind C-a send-prefix - -# if you don't want Oh my tmux! to alter a binding, use #!important -# bind v new-window -c #{pane_current_path} #!important - -# move status line to top -#set -g status-position top - - -# -- tpm ----------------------------------------------------------------------- - -# while I don't use tpm myself, many people requested official support so here -# is a seamless integration that automatically installs plugins in parallel - -# whenever a plugin introduces a variable to be used in 'status-left' or -# 'status-right', you can use it in 'tmux_conf_theme_status_left' and -# 'tmux_conf_theme_status_right' variables. - -# by default, launching tmux will update tpm and all plugins -# - true (default) -# - false -tmux_conf_update_plugins_on_launch=true - -# by default, reloading the configuration will update tpm and all plugins -# - true (default) -# - false -tmux_conf_update_plugins_on_reload=true - -# by default, reloading the configuration will uninstall tpm and plugins when no -# plugins are enabled -# - true (default) -# - false -tmux_conf_uninstall_plugins_on_reload=true - -# /!\ the tpm bindings differ slightly from upstream: -# - installing plugins: + I -# - uninstalling plugins: + Alt + u -# - updating plugins: + u - -# /!\ do not add set -g @plugin 'tmux-plugins/tpm' -# /!\ do not add run '~/.tmux/plugins/tpm/tpm' - -# to enable a plugin, use the 'set -g @plugin' syntax: -# visit https://github.com/tmux-plugins for available plugins -#set -g @plugin 'tmux-plugins/tmux-copycat' -#set -g @plugin 'tmux-plugins/tmux-cpu' -#set -g @plugin 'tmux-plugins/tmux-resurrect' -#set -g @plugin 'tmux-plugins/tmux-continuum' -#set -g @continuum-restore 'on' - - -# -- custom variables ---------------------------------------------------------- - -# to define a custom #{foo} variable, define a POSIX shell function between the -# '# EOF' and the '# "$@"' lines. Please note that the opening brace { character -# must be on the same line as the function name otherwise the parse won't detect -# it. -# -# then, use #{foo} in e.g. the 'tmux_conf_theme_status_left' or the -# 'tmux_conf_theme_status_right' variables. - -# # /!\ do not remove the following line -# EOF -# -# # /!\ do not "uncomment" the functions: the leading "# " characters are needed -# -# weather() { # see https://github.com/chubin/wttr.in#one-line-output -# curl -f -s -m 2 'wttr.in?format=3' || printf '\n' # /!\ make sure curl is installed -# sleep 900 # sleep for 15 minutes, throttle network requests whatever the value of status-interval -# } -# -# online() { -# ping -c 1 1.1.1.1 >/dev/null 2>&1 && printf '✔' || printf '✘' -# } -# -# "$@" -# # /!\ do not remove the previous line diff --git a/dotfiles/.vim/plugged/ale/.appveyor.yml b/dotfiles/.vim/plugged/ale/.appveyor.yml deleted file mode 100644 index e6f2a1ee..00000000 --- a/dotfiles/.vim/plugged/ale/.appveyor.yml +++ /dev/null @@ -1,48 +0,0 @@ ---- -# Disabling building for AppVeyor. We are just testing things. -build: false -clone_depth: 10 -# Use the directory C:\testplugin so test directories will mostly work. -clone_folder: C:\testplugin - -branches: - only: - - master - - /v\d+\.\d+\.(x|\d+)/ - -# Cache the vim and vader directories between builds. -cache: - - C:\vim -> .appveyor.yml - - C:\vader -> .appveyor.yml - -init: - # Stop git from changing newlines - - git config --global core.autocrlf input - -# NOTE: If you change the Vim or Vader versions here, please also update the -# instructions for running tests on Windows in ale-development.txt - -install: - # Download and unpack Vim - - ps: >- - if (!(Test-Path -Path C:\vim)){ - Add-Type -A System.IO.Compression.FileSystem - Invoke-WebRequest ftp://ftp.vim.org/pub/vim/pc/vim80-586w32.zip ` - -OutFile C:\vim.zip - [IO.Compression.ZipFile]::ExtractToDirectory('C:\vim.zip', 'C:\vim') - Invoke-WebRequest ftp://ftp.vim.org/pub/vim/pc/vim80-586rt.zip ` - -OutFile C:\rt.zip - [IO.Compression.ZipFile]::ExtractToDirectory('C:\rt.zip', 'C:\vim') - } - # Clone Vader and check out the commit we want - - ps: >- - if (!(Test-Path -Path C:\vader)){ - git clone https://github.com/junegunn/vader.vim C:\vader 2> $null - cd C:\vader - git checkout -qf c6243dd81c98350df4dec608fa972df98fa2a3af 2> $null - } - -test_script: - - cd C:\testplugin - - 'C:\vim\vim\vim80\vim.exe -u test\vimrc "+Vader! - test/*.vader test/*/*.vader test/*/*/*.vader test/*/*/*.vader"' diff --git a/dotfiles/.vim/plugged/ale/.editorconfig b/dotfiles/.vim/plugged/ale/.editorconfig deleted file mode 100644 index d9b95d6f..00000000 --- a/dotfiles/.vim/plugged/ale/.editorconfig +++ /dev/null @@ -1,14 +0,0 @@ -# EditorConfig is awesome: http://EditorConfig.org - -# Top-most EditorConfig file -root = true - -# Match and apply these rules for all file -# types you open in your code editor -[*] -# Unix-style newlines -end_of_line = lf -insert_final_newline = true -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true diff --git a/dotfiles/.vim/plugged/ale/.gitattributes b/dotfiles/.vim/plugged/ale/.gitattributes deleted file mode 100644 index b1235f82..00000000 --- a/dotfiles/.vim/plugged/ale/.gitattributes +++ /dev/null @@ -1,13 +0,0 @@ -.* export-ignore -/CODE_OF_CONDUCT.md export-ignore -/CONTRIBUTING.md export-ignore -/Dockerfile export-ignore -/ISSUE_TEMPLATE export-ignore -/ISSUE_TEMPLATE.md export-ignore -/Makefile export-ignore -/PULL_REQUEST_TEMPLATE.md export-ignore -/README.md export-ignore -/img export-ignore -/run-tests export-ignore -/run-tests.bat export-ignore -/test export-ignore diff --git a/dotfiles/.vim/plugged/ale/.github/CODE_OF_CONDUCT.md b/dotfiles/.vim/plugged/ale/.github/CODE_OF_CONDUCT.md deleted file mode 100644 index 587bb372..00000000 --- a/dotfiles/.vim/plugged/ale/.github/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,3 +0,0 @@ -Codes of conduct are totally unnecessary and dumb. - -Just don't be a jerk and have fun. diff --git a/dotfiles/.vim/plugged/ale/.github/CONTRIBUTING.md b/dotfiles/.vim/plugged/ale/.github/CONTRIBUTING.md deleted file mode 100644 index f2e7474c..00000000 --- a/dotfiles/.vim/plugged/ale/.github/CONTRIBUTING.md +++ /dev/null @@ -1,25 +0,0 @@ -## Guidelines - -Have fun, and work on whatever floats your boat. Take It Easy :tm:. - -For help with contributing to ALE, see `:help ale-development` in Vim, or view -the help file online [here](/doc/ale-development.txt). - -## Creating Issues - -Before creating any issues, please look through the current list of issues and -pull requests, and ensure that the issue hasn't already been reported. If an -issue has already been reported, but you have some new insight, please add -a comment to the existing issue. - -Please read the FAQ in the README before creating any issues. A feature -you desire may already exist and be documented, or the FAQ might explain -how to solve a problem you have already. - -Please try and describe any issues reported with as much detail as you can -provide about your Vim version, the linter you were trying to run, your -operating system, or any other information you think might be helpful. - -Please describe your issue in clear, grammatically correct, and easy to -understand English. You are more likely to see an issue resolved if others -can understand you. diff --git a/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/config.yml b/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/config.yml deleted file mode 100644 index fdffb5fb..00000000 --- a/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/config.yml +++ /dev/null @@ -1,6 +0,0 @@ ---- -blank_issues_enabled: false -contact_links: - - name: Ask for Help - url: https://github.com/dense-analysis/ale/discussions/new?category=q-a-ask-for-help-with-problems - about: Ask for Help in ALE Discussions diff --git a/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/report-a-bug.md b/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/report-a-bug.md deleted file mode 100644 index cf92f330..00000000 --- a/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/report-a-bug.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -name: Report a bug -labels: bug -about: Report a bug with ALE. - ---- - - - -## Information - -**VIM version** - - - -Operating System: - -## What went wrong - - - -Something went wrong in specifically this place, and I also searched through both open and closed issues for the same problem before reporting a bug here. - -Are you having trouble configuring ALE? Try asking for help on [Stack Exchange](https://vi.stackexchange.com/) or perhaps on [Reddit](https://www.reddit.com/r/vim/) instead. The GitHub issue tracker should be used for reporting bugs or asking for new features. - -## Reproducing the bug - - - -1. I did this. -2. Then this happened. - -### :ALEInfo -
- Expand - - - -
diff --git a/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-a-new-linter-or-fixer.md b/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-a-new-linter-or-fixer.md deleted file mode 100644 index ad235e57..00000000 --- a/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-a-new-linter-or-fixer.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -name: Suggest a new linter or fixer -labels: new tool -about: Suggest a new tool ALE can officially integrate with. - ---- - - - -**Name:** foobar -**URL:** https://foo.bar.com - - diff --git a/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-an-improvement.md b/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-an-improvement.md deleted file mode 100644 index d39d0ac8..00000000 --- a/dotfiles/.vim/plugged/ale/.github/ISSUE_TEMPLATE/suggest-an-improvement.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -name: Suggest an improvement -labels: enhancement -about: Suggest some way to improve ALE, or add a new feature. - ---- - - diff --git a/dotfiles/.vim/plugged/ale/.github/PULL_REQUEST_TEMPLATE.md b/dotfiles/.vim/plugged/ale/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index 785da9b8..00000000 --- a/dotfiles/.vim/plugged/ale/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,13 +0,0 @@ - - -Where are the tests? Have you added tests? Have you updated the tests? Read the -comment above and the documentation referenced in it first. Write tests! - -Seriously, read `:help ale-dev` and write tests. diff --git a/dotfiles/.vim/plugged/ale/.github/stale.yml b/dotfiles/.vim/plugged/ale/.github/stale.yml deleted file mode 100644 index e20c0923..00000000 --- a/dotfiles/.vim/plugged/ale/.github/stale.yml +++ /dev/null @@ -1,17 +0,0 @@ ---- -# This configuration closes stale PRs after 56 + 7 days. -# That's 8 weeks until stale bot complains, and a week until it closes a PR. -# Issues in ALE are never, ever stale. They are either resolved or not. -only: pulls -daysUntilStale: 56 -daysUntilClose: 7 -exemptLabels: [] -staleLabel: stale -markComment: > - This pull request has been automatically marked as stale because it has not - been updated recently. Make sure to write tests and document your changes. - See `:help ale-dev` for information on writing tests. - - If your pull request is good to merge, bother w0rp or another maintainer - again, and get them to merge it. -closeComment: false diff --git a/dotfiles/.vim/plugged/ale/.github/workflows/main.yml b/dotfiles/.vim/plugged/ale/.github/workflows/main.yml deleted file mode 100644 index 6cb7acdd..00000000 --- a/dotfiles/.vim/plugged/ale/.github/workflows/main.yml +++ /dev/null @@ -1,37 +0,0 @@ ---- -name: CI -on: # yamllint disable-line rule:truthy - push: - branches: [ master ] # yamllint disable-line rule:brackets - tags: - - v[0-9]+.[0-9]+.x - - v[0-9]+.[0-9]+.[0-9]+ - pull_request: - branches: [ master ] # yamllint disable-line rule:brackets - -jobs: - build_image: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Build docker run image - shell: bash - env: - DOCKER_HUB_USER: ${{ secrets.DOCKER_HUB_USER }} - DOCKER_HUB_PASS: ${{ secrets.DOCKER_HUB_PASS }} - run: ./run-tests --build-image - test_ale: - needs: build_image - runs-on: ubuntu-latest - strategy: - matrix: - vim-version: - - '--vim-80-only' - - '--vim-90-only' - - '--neovim-02-only' - - '--neovim-07-only' - - '--linters-only' - steps: - - uses: actions/checkout@v2 - - name: Run tests - run: ./run-tests -v ${{ matrix.vim-version }} diff --git a/dotfiles/.vim/plugged/ale/.gitignore b/dotfiles/.vim/plugged/ale/.gitignore deleted file mode 100644 index 7711fb99..00000000 --- a/dotfiles/.vim/plugged/ale/.gitignore +++ /dev/null @@ -1,12 +0,0 @@ -!.editorconfig -*.obj -*.pyc -# Ignore all hidden files everywhere. -# Use `git add -f` to add hidden files. -.* -/doc/tags -/init.vim -/test/ale-info-test-file -/vader_output -__pycache__ -tags diff --git a/dotfiles/.vim/plugged/ale/.gitrepo b/dotfiles/.vim/plugged/ale/.gitrepo deleted file mode 100644 index 563f62f8..00000000 --- a/dotfiles/.vim/plugged/ale/.gitrepo +++ /dev/null @@ -1,12 +0,0 @@ -; DO NOT EDIT (unless you know what you are doing) -; -; This subdirectory is a git "subrepo", and this file is maintained by the -; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme -; -[subrepo] - remote = https://github.com/dense-analysis/ale.git - branch = master - commit = e4b20544082ba019d8095cbc24ffab43b15e8fc0 - parent = 62e125f76e03db435b6d684f4248667f0719bb9d - method = merge - cmdver = 0.4.3 diff --git a/dotfiles/.vim/plugged/ale/.vintrc.yaml b/dotfiles/.vim/plugged/ale/.vintrc.yaml deleted file mode 100644 index ce04d476..00000000 --- a/dotfiles/.vim/plugged/ale/.vintrc.yaml +++ /dev/null @@ -1,5 +0,0 @@ -policies: - # Disable a violation that is thrown randomly for reasons I still - # do not understand. - ProhibitMissingScriptEncoding: - enabled: false diff --git a/dotfiles/.vim/plugged/ale/Dockerfile b/dotfiles/.vim/plugged/ale/Dockerfile deleted file mode 100644 index d5670387..00000000 --- a/dotfiles/.vim/plugged/ale/Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -FROM testbed/vim:20 - -RUN install_vim -tag v8.0.0027 -build \ - -tag v9.0.0133 -build \ - -tag neovim:v0.2.0 -build \ - -tag neovim:v0.7.0 -build - -ENV PACKAGES="\ - bash \ - git \ - python2 \ - python3 \ - py3-pip \ - grep \ - sed \ -" -RUN apk --update add $PACKAGES && \ - rm -rf /var/cache/apk/* /tmp/* /var/tmp/* - -RUN pip install vim-vint==0.3.21 - -RUN git clone https://github.com/junegunn/vader.vim vader && \ - cd vader && git checkout c6243dd81c98350df4dec608fa972df98fa2a3af - -ARG GIT_VERSION -LABEL Version=${GIT_VERSION} -LABEL Name=denseanalysis/ale diff --git a/dotfiles/.vim/plugged/ale/LICENSE b/dotfiles/.vim/plugged/ale/LICENSE deleted file mode 100644 index 471776e4..00000000 --- a/dotfiles/.vim/plugged/ale/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2016-2020, w0rp -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/dotfiles/.vim/plugged/ale/README.md b/dotfiles/.vim/plugged/ale/README.md deleted file mode 100644 index bd58f7c8..00000000 --- a/dotfiles/.vim/plugged/ale/README.md +++ /dev/null @@ -1,963 +0,0 @@ -# Asynchronous Lint Engine [![GitHub Build Status](https://github.com/dense-analysis/ale/workflows/CI/badge.svg)](https://github.com/dense-analysis/ale/actions?query=event%3Apush+workflow%3ACI+branch%3Amaster++) [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/r0ef1xu8xjmik58d/branch/master?svg=true)](https://ci.appveyor.com/project/dense-analysis/ale) [![Join the Dense Analysis Discord server](https://img.shields.io/badge/chat-Discord-5865F2)](https://discord.gg/5zFD6pQxDk) - - -![ALE Logo by Mark Grealish - https://www.bhalash.com/](https://user-images.githubusercontent.com/3518142/59195920-2c339500-8b85-11e9-9c22-f6b7f69637b8.jpg) - -ALE (Asynchronous Lint Engine) is a plugin providing linting (syntax checking -and semantic errors) in NeoVim 0.2.0+ and Vim 8 while you edit your text files, -and acts as a Vim [Language Server Protocol](https://langserver.org/) client. - -A linting example with the darkspectrum color scheme in GVim. - -ALE makes use of NeoVim and Vim 8 job control functions and timers to -run linters on the contents of text buffers and return errors as -text is changed in Vim. This allows for displaying warnings and -errors in files being edited in Vim before files have been saved -back to a filesystem. - -In other words, this plugin allows you to lint while you type. - -ALE offers support for fixing code with command line tools in a non-blocking -manner with the `:ALEFix` feature, supporting tools in many languages, like -`prettier`, `eslint`, `autopep8`, and more. - -ALE acts as a "language client" to support a variety of Language Server Protocol -features, including: - -* Diagnostics (via Language Server Protocol linters) -* Go To Definition (`:ALEGoToDefinition`) -* Completion (Built in completion support, or with Deoplete) -* Finding references (`:ALEFindReferences`) -* Hover information (`:ALEHover`) -* Symbol search (`:ALESymbolSearch`) - -If you don't care about Language Server Protocol, ALE won't load any of the code -for working with it unless needed. One of ALE's general missions is that you -won't pay for the features that you don't use. - -**Help Wanted:** If you would like to help maintain this plugin by managing the -many issues and pull requests that are submitted, please send the author an -email at [dev@w0rp.com](mailto:dev@w0rp.com?subject=Helping%20with%20ALE). - -If you enjoy this plugin, feel free to contribute or check out the author's -other content at [w0rp.com](https://w0rp.com). - -## Table of Contents - -1. [Supported Languages and Tools](#supported-languages) -2. [Usage](#usage) - 1. [Linting](#usage-linting) - 2. [Fixing](#usage-fixing) - 3. [Completion](#usage-completion) - 4. [Go To Definition](#usage-go-to-definition) - 5. [Find References](#usage-find-references) - 6. [Hovering](#usage-hover) - 7. [Symbol Search](#usage-symbol-search) - 8. [Refactoring: Rename, Actions](#usage-refactoring) -3. [Installation](#installation) - 1. [Installation with Vim package management](#standard-installation) - 2. [Installation with Pathogen](#installation-with-pathogen) - 3. [Installation with Vundle](#installation-with-vundle) - 4. [Installation with Vim-Plug](#installation-with-vim-plug) -4. [Contributing](#contributing) -5. [FAQ](#faq) - 1. [How do I disable particular linters?](#faq-disable-linters) - 2. [How can I see what ALE has configured for the current file?](#faq-get-info) - 3. [How can I use ALE and coc.nvim together?](#faq-coc-nvim) - 4. [How can I keep the sign gutter open?](#faq-keep-signs) - 5. [How can I change the signs ALE uses?](#faq-change-signs) - 6. [How can I change or disable the highlights ALE uses?](#faq-change-highlights) - 7. [How can I show errors or warnings in my statusline?](#faq-statusline) - 8. [How can I show errors or warnings in my lightline?](#faq-lightline) - 9. [How can I change the format for echo messages?](#faq-echo-format) - 10. [How can I execute some code when ALE starts or stops linting?](#faq-autocmd) - 11. [How can I navigate between errors quickly?](#faq-navigation) - 12. [How can I run linters only when I save files?](#faq-lint-on-save) - 13. [How can I use the quickfix list instead of the loclist?](#faq-quickfix) - 14. [How can I check JSX files with both stylelint and eslint?](#faq-jsx-stylelint-eslint) - 15. [How can I check Vue files with ESLint?](#faq-vue-eslint) - 16. [Will this plugin eat all of my laptop battery power?](#faq-my-battery-is-sad) - 17. [How can I configure my C or C++ project?](#faq-c-configuration) - 18. [How can I configure ALE differently for different buffers?](#faq-buffer-configuration) - 19. [How can I configure the height of the list in which ALE displays errors?](#faq-list-window-height) - 20. [How can I run linters or fixers via Docker or a VM?](#faq-vm) - 21. [How can I change the borders for floating preview windows?](#faq-window-borders) - 22. [How can I use ALE and vim-lsp together?](#faq-vim-lsp) - - - -## 1. Supported Languages and Tools - -ALE supports a wide variety of languages and tools. See the -[full list](supported-tools.md) in the -[Supported Languages and Tools](supported-tools.md) page. - - - -## 2. Usage - - - -### 2.i Linting - -Once this plugin is installed, while editing your files in supported -languages and tools which have been correctly installed, -this plugin will send the contents of your text buffers to a variety of -programs for checking the syntax and semantics of your programs. By default, -linters will be re-run in the background to check your syntax when you open -new buffers or as you make edits to your files. - -The behavior 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-integration-options` for options specified to particular linters. - - - -### 2.ii Fixing - -ALE can fix files with the `ALEFix` command. Functions need to be configured -either in each buffer with a `b:ale_fixers`, or globally with `g:ale_fixers`. - -The recommended way to configure fixers is to define a List in an ftplugin file. - -```vim -" In ~/.vim/ftplugin/javascript.vim, or somewhere similar. - -" Fix files with prettier, and then ESLint. -let b:ale_fixers = ['prettier', 'eslint'] -" Equivalent to the above. -let b:ale_fixers = {'javascript': ['prettier', 'eslint']} -``` - -You can also configure your fixers from vimrc using `g:ale_fixers`, before or -after ALE has been loaded. - -A `*` in place of the filetype will apply a List of fixers to all files which -do not match some filetype in the Dictionary. - -Note that using a plain List for `g:ale_fixers` is not supported. - -```vim -" In ~/.vim/vimrc, or somewhere similar. -let g:ale_fixers = { -\ '*': ['remove_trailing_lines', 'trim_whitespace'], -\ 'javascript': ['eslint'], -\} -``` - -If you want to automatically fix files when you save them, you need to turn -a setting on in vimrc. - -```vim -" Set this variable to 1 to fix files when you save them. -let g:ale_fix_on_save = 1 -``` - -The `:ALEFixSuggest` command will suggest some supported tools for fixing code. -Both `g:ale_fixers` and `b:ale_fixers` can also accept functions, including -lambda functions, as fixers, for fixing files with custom tools. - -See `:help ale-fix` for complete information on how to fix files with ALE. - - - -### 2.iii Completion - -ALE offers some support for completion via hijacking of omnicompletion while you -type. All of ALE's completion information must come from Language Server -Protocol linters, or from `tsserver` for TypeScript. - -ALE integrates with [Deoplete](https://github.com/Shougo/deoplete.nvim) as a -completion source, named `'ale'`. You can configure Deoplete to only use ALE as -the source of completion information, or mix it with other sources. - -```vim -" Use ALE and also some plugin 'foobar' as completion sources for all code. -call deoplete#custom#option('sources', { -\ '_': ['ale', 'foobar'], -\}) -``` - -ALE also offers its own automatic completion support, which does not require any -other plugins, and can be enabled by changing a setting before ALE is loaded. - -```vim -" Enable completion where available. -" This setting must be set before ALE is loaded. -" -" You should not turn this setting on if you wish to use ALE as a completion -" source for other completion plugins, like Deoplete. -let g:ale_completion_enabled = 1 -``` - -ALE provides an omni-completion function you can use for triggering -completion manually with ``. - -```vim -set omnifunc=ale#completion#OmniFunc -``` - -ALE supports automatic imports from external modules. This behavior is enabled -by default and can be disabled by setting: - -```vim -let g:ale_completion_autoimport = 0 -``` - -Note that disabling auto import can result in missing completion items from some -LSP servers (e.g. eclipselsp). See `:help ale-completion` for more information. - - - -### 2.iv Go To Definition - -ALE supports jumping to the definition of words under your cursor with the -`:ALEGoToDefinition` command using any enabled Language Server Protocol linters -and `tsserver`. - -See `:help ale-go-to-definition` for more information. - - - -### 2.v Find References - -ALE supports finding references for words under your cursor with the -`:ALEFindReferences` command using any enabled Language Server Protocol linters -and `tsserver`. - -See `:help ale-find-references` for more information. - - - -### 2.vi Hovering - -ALE supports "hover" information for printing brief information about symbols at -the cursor taken from Language Server Protocol linters and `tsserver` with the -`ALEHover` command. - -Truncated information will be displayed when the cursor rests on a symbol by -default, as long as there are no problems on the same line. - -The information can be displayed in a `balloon` tooltip in Vim or GVim by -hovering your mouse over symbols. Mouse hovering is enabled by default in GVim, -and needs to be configured for Vim 8.1+ in terminals. - -See `:help ale-hover` for more information. - - - -### 2.vii Symbol Search - -ALE supports searching for workspace symbols via Language Server Protocol -linters with the `ALESymbolSearch` command. - -Search queries can be performed to find functions, types, and more which are -similar to a given query string. - -See `:help ale-symbol-search` for more information. - - - -### 2.viii Refactoring: Rename, Actions - -ALE supports renaming symbols in symbols in code such as variables or class -names with the `ALERename` command. - -`ALEFileRename` will rename file and fix import paths (tsserver -only). - -`ALECodeAction` will execute actions on the cursor or applied to a visual -range selection, such as automatically fixing errors. - -See `:help ale-refactor` for more information. - - - -## 3. Installation - -To install this plugin, you should use one of the following methods. -For Windows users, replace usage of the Unix `~/.vim` directory with -`%USERPROFILE%\vimfiles`, or another directory if you have configured -Vim differently. On Windows, your `~/.vimrc` file will be similarly -stored in `%USERPROFILE%\_vimrc`. - - - -### 3.i. Installation with Vim package management - -In Vim 8 and NeoVim, you can install plugins easily without needing to use -any other tools. Simply clone the plugin into your `pack` directory. - -#### Vim 8 on Unix - -```bash -mkdir -p ~/.vim/pack/git-plugins/start -git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.vim/pack/git-plugins/start/ale -``` - -#### NeoVim on Unix - -```bash -mkdir -p ~/.local/share/nvim/site/pack/git-plugins/start -git clone --depth 1 https://github.com/dense-analysis/ale.git ~/.local/share/nvim/site/pack/git-plugins/start/ale -``` - -#### Vim 8 on Windows - -```bash -# Run these commands in the "Git for Windows" Bash terminal -mkdir -p ~/vimfiles/pack/git-plugins/start -git clone --depth 1 https://github.com/dense-analysis/ale.git ~/vimfiles/pack/git-plugins/start/ale -``` - -#### Generating Vim help files - -You can add the following line to your vimrc files to generate documentation -tags automatically, if you don't have something similar already, so you can use -the `:help` command to consult ALE's online documentation: - -```vim -" Put these lines at the very end of your vimrc file. - -" Load all plugins now. -" Plugins need to be added to runtimepath before helptags can be generated. -packloadall -" Load all of the helptags now, after plugins have been loaded. -" All messages and errors will be ignored. -silent! helptags ALL -``` - - - -### 3.ii. Installation with Pathogen - -To install this module with [Pathogen](https://github.com/tpope/vim-pathogen), -you should clone this repository to your bundle directory, and ensure -you have the line `execute pathogen#infect()` in your `~/.vimrc` file. -You can run the following commands in your terminal to do so: - -```bash -cd ~/.vim/bundle -git clone https://github.com/dense-analysis/ale.git -``` - - - -### 3.iii. Installation with Vundle - -You can install this plugin using [Vundle](https://github.com/VundleVim/Vundle.vim) -by adding the GitHub path for this repository to your `~/.vimrc`: - -```vim -Plugin 'dense-analysis/ale' -``` - -Then run the command `:PluginInstall` in Vim. - -See the Vundle documentation for more information. - - - -### 3.iv. Installation with Vim-Plug - -You can install this plugin using [Vim-Plug](https://github.com/junegunn/vim-plug) -by adding the GitHub path for this repository to your `~/.vimrc`: - -```vim -Plug 'dense-analysis/ale' -``` - -Then run the command `:PlugInstall` in Vim. - -See the Vim-Plug documentation for more information. - - - -## 4. Contributing - -If you would like to see support for more languages and tools, please -[create an issue](https://github.com/dense-analysis/ale/issues) -or [create a pull request](https://github.com/dense-analysis/ale/pulls). -If your tool can read from stdin or you have code to suggest which is good, -support can be happily added for it. - -If you are interested in the general direction of the project, check out the -[wiki home page](https://github.com/dense-analysis/ale/wiki). The wiki includes -a Roadmap for the future, and more. - -If you'd liked to discuss ALE and more check out the Dense Analysis Discord -server here: https://discord.gg/5zFD6pQxDk - - - -## 5. FAQ - - - -### 5.i. How do I disable particular linters? - -By default, all available tools for all supported languages will be run. If you -want to only select a subset of the tools, you can define `b:ale_linters` for a -single buffer, or `g:ale_linters` globally. - -The recommended way to configure linters is to define a List in an ftplugin -file. - -```vim -" In ~/.vim/ftplugin/javascript.vim, or somewhere similar. - -" Enable ESLint only for JavaScript. -let b:ale_linters = ['eslint'] - -" Equivalent to the above. -let b:ale_linters = {'javascript': ['eslint']} -``` - -You can also declare which linters you want to run in your vimrc file, before or -after ALE has been loaded. - -```vim -" In ~/.vim/vimrc, or somewhere similar. -let g:ale_linters = { -\ 'javascript': ['eslint'], -\} -``` - -For all languages unspecified in the dictionary, all possible linters will -be run for those languages, just as when the dictionary is not defined. -Running many linters should not typically obstruct editing in Vim, -as they will all be executed in separate processes simultaneously. - -If you don't want ALE to run anything other than what you've explicitly asked -for, you can set `g:ale_linters_explicit` to `1`. - -```vim -" Only run linters named in ale_linters settings. -let g:ale_linters_explicit = 1 -``` - -This plugin will look for linters in the [`ale_linters`](ale_linters) directory. -Each directory within corresponds to a particular filetype in Vim, and each file -in each directory corresponds to the name of a particular linter. - - - -### 5.ii. How can I see what ALE has configured for the current file? - -Run the following to see what is currently configured: - -```vim -:ALEInfo -``` - - - -### 5.iii. How can I use ALE and coc.nvim together? - -[coc.nvim](https://github.com/neoclide/coc.nvim) is a popular Vim plugin written -in TypeScript and dependent on the [npm](https://www.npmjs.com/) ecosystem for -providing full IDE features to Vim. Both ALE and coc.nvim implement -[Language Server Protocol](https://microsoft.github.io/language-server-protocol/) -(LSP) clients for supporting diagnostics (linting with a live server), and other -features like auto-completion, and others listed above. - -ALE is primarily focused on integrating with external programs through virtually -any means, provided the plugin remains almost entirely written in Vim script. -coc.nvim is primarily focused on bringing IDE features to Vim. If you want to -run external programs on your files to check for errors, and also use the most -advanced IDE features, you might want to use both plugins at the same time. - -The easiest way to get both plugins to work together is to configure coc.nvim to -send diagnostics to ALE, so ALE controls how all problems are presented to you, -and to disable all LSP features in ALE, so ALE doesn't try to provide LSP -features already provided by coc.nvim, such as auto-completion. - -1. Open your coc.nvim configuration file with `:CocConfig` and add - `"diagnostic.displayByAle": true` to your settings. -2. Add `let g:ale_disable_lsp = 1` to your vimrc file, before plugins are - loaded. - -You can also use `b:ale_disable_lsp` in your ftplugin files to enable or disable -LSP features in ALE for different filetypes. After you configure coc.nvim and -ALE this way, you can further configure how problems appear to you by using all -of the settings mentioned in ALE's help file, including how often diagnostics -are requested. See `:help ale-lint`. - -The integration between ALE and coc.nvim works using an API ALE offers for -letting any other plugin integrate with ALE. If you are interested in writing a -similar integration, see `:help ale-lint-other-sources`. - - - -### 5.iv. How can I keep the sign gutter open? - -You can keep the sign gutter open at all times by setting the -`g:ale_sign_column_always` to 1 - -```vim -let g:ale_sign_column_always = 1 -``` - - - -### 5.v. How can I change the signs ALE uses? - -Use these options to specify what text should be used for signs: - -```vim -let g:ale_sign_error = '>>' -let g:ale_sign_warning = '--' -``` - -ALE sets some background colors automatically for warnings and errors -in the sign gutter, with the names `ALEErrorSign` and `ALEWarningSign`. -These colors can be customised, or even removed completely: - -```vim -highlight clear ALEErrorSign -highlight clear ALEWarningSign -``` - - - -### 5.vi. How can I change or disable the highlights ALE uses? - -ALE's highlights problems with highlight groups which link to `SpellBad`, -`SpellCap`, `error`, and `todo` groups by default. The characters that are -highlighted depend on the linters being used, and the information provided to -ALE. - -Highlighting can be disabled completely by setting `g:ale_set_highlights` to -`0`. - -```vim -" Set this in your vimrc file to disabling highlighting -let g:ale_set_highlights = 0 -``` - -You can control all of the highlights ALE uses, say if you are using a different -color scheme which produces ugly highlights. For example: - -```vim -highlight ALEWarning ctermbg=DarkMagenta -``` - -See `:help ale-highlights` for more information. - - - -### 5.vii. How can I show errors or warnings in my statusline? - -[vim-airline](https://github.com/vim-airline/vim-airline) integrates with ALE -for displaying error information in the status bar. If you want to see the -status for ALE in a nice format, it is recommended to use vim-airline with ALE. -The airline extension can be enabled by adding the following to your vimrc: - -```vim -" Set this. Airline will handle the rest. -let g:airline#extensions#ale#enabled = 1 -``` - -If you don't want to use vim-airline, you can implement your own statusline -function without adding any other plugins. ALE provides some functions to -assist in this endeavour, including: - -* `ale#statusline#Count`: Which returns the number of problems found by ALE - for a specified buffer. -* `ale#statusline#FirstProblem`: Which returns a dictionary containing the - full loclist details of the first problem of a specified type found by ALE - in a buffer. (e.g. The first style warning in the current buffer.) - This can be useful for displaying more detailed information such as the - line number of the first problem in a file. - -Say you want to display all errors as one figure, and all non-errors as another -figure. You can do the following: - -```vim -function! LinterStatus() abort - let l:counts = ale#statusline#Count(bufnr('')) - - let l:all_errors = l:counts.error + l:counts.style_error - let l:all_non_errors = l:counts.total - l:all_errors - - return l:counts.total == 0 ? 'OK' : printf( - \ '%dW %dE', - \ all_non_errors, - \ all_errors - \) -endfunction - -set statusline=%{LinterStatus()} -``` - -See `:help ale#statusline#Count()` or `:help ale#statusline#FirstProblem()` -for more information. - - - -### 5.viii. How can I show errors or warnings in my lightline? - -[lightline](https://github.com/itchyny/lightline.vim) does not have built-in -support for ALE, nevertheless there is a plugin that adds this functionality: [maximbaz/lightline-ale](https://github.com/maximbaz/lightline-ale). - -For more information, check out the sources of that plugin, `:help ale#statusline#Count()` and [lightline documentation](https://github.com/itchyny/lightline.vim#advanced-configuration). - - - -### 5.ix. How can I change the format for echo messages? - -There are 3 global options that allow customizing the echoed message. - -- `g:ale_echo_msg_format` where: - * `%s` is the error message itself - * `%...code...%` is an optional error code, and most characters can be - written between the `%` characters. - * `%linter%` is the linter name - * `%severity%` is the severity type -- `g:ale_echo_msg_error_str` is the string used for error severity. -- `g:ale_echo_msg_warning_str` is the string used for warning severity. - -So for example this: - -```vim -let g:ale_echo_msg_error_str = 'E' -let g:ale_echo_msg_warning_str = 'W' -let g:ale_echo_msg_format = '[%linter%] %s [%severity%]' -``` - -Will give you: - -![Echoed message](https://user-images.githubusercontent.com/3518142/59195927-348bd000-8b85-11e9-88b6-508a094f1548.png) - -See `:help g:ale_echo_msg_format` for more information. - - - -### 5.x. How can I execute some code when ALE starts or stops linting? - -ALE runs its own [autocmd](http://vimdoc.sourceforge.net/htmldoc/autocmd.html) -events when a lint or fix cycle are started and stopped. There is also an event -that runs when a linter job has been successfully started. These events can be -used to call arbitrary functions during these respective parts of the ALE's -operation. - -```vim -augroup YourGroup - autocmd! - autocmd User ALELintPre call YourFunction() - autocmd User ALELintPost call YourFunction() - - autocmd User ALEJobStarted call YourFunction() - - autocmd User ALEFixPre call YourFunction() - autocmd User ALEFixPost call YourFunction() -augroup END -``` - - - -### 5.xi. How can I navigate between errors quickly? - -ALE offers some commands with `` keybinds for moving between warnings and -errors quickly. You can map the keys Ctrl+j and Ctrl+k to moving between errors -for example: - -```vim -nmap (ale_previous_wrap) -nmap (ale_next_wrap) -``` - -For more information, consult the online documentation with -`:help ale-navigation-commands`. - - - -### 5.xii. How can I run linters only when I save files? - -ALE offers an option `g:ale_lint_on_save` for enabling running the linters -when files are saved. This option is enabled by default. If you only -wish to run linters when files are saved, you can turn the other -options off. - -```vim -" Write this in your vimrc file -let g:ale_lint_on_text_changed = 'never' -let g:ale_lint_on_insert_leave = 0 -" You can disable this option too -" if you don't want linters to run on opening a file -let g:ale_lint_on_enter = 0 -``` - -If for whatever reason you don't wish to run linters again when you save -files, you can set `g:ale_lint_on_save` to `0`. - - - -### 5.xiii. How can I use the quickfix list instead of the loclist? - -The quickfix list can be enabled by turning the `g:ale_set_quickfix` -option on. If you wish to also disable the loclist, you can disable -the `g:ale_set_loclist` option. - -```vim -" Write this in your vimrc file -let g:ale_set_loclist = 0 -let g:ale_set_quickfix = 1 -``` - -If you wish to show Vim windows for the loclist or quickfix items -when a file contains warnings or errors, `g:ale_open_list` can be -set to `1`. `g:ale_keep_list_window_open` can be set to `1` -if you wish to keep the window open even after errors disappear. - -```vim -let g:ale_open_list = 1 -" Set this if you want to. -" This can be useful if you are combining ALE with -" some other plugin which sets quickfix errors, etc. -let g:ale_keep_list_window_open = 1 -``` - -You can also set `let g:ale_list_vertical = 1` to open the windows vertically -instead of the default horizontally. - - - -### 5.xiv. How can I check JSX files with both stylelint and eslint? - -If you configure ALE options correctly in your vimrc file, and install -the right tools, you can check JSX files with stylelint and eslint. - -First, install eslint and install stylelint with -[stylelint-processor-styled-components](https://github.com/styled-components/stylelint-processor-styled-components). - -Supposing you have installed both tools correctly, configure your .jsx files so -`jsx` is included in the filetype. You can use an `autocmd` for this. - -```vim -augroup FiletypeGroup - autocmd! - au BufNewFile,BufRead *.jsx set filetype=javascript.jsx -augroup END -``` - -Supposing the filetype has been set correctly, you can set the following -options in a jsx.vim ftplugin file. - -```vim -" In ~/.vim/ftplugin/jsx.vim, or somewhere similar. -let b:ale_linter_aliases = ['css', 'javascript'] -let b:ale_linters = ['stylelint', 'eslint'] -``` - -Or if you want, you can configure the linters from your vimrc file. - -```vim -" In ~/.vim/vimrc, or somewhere similar. -let g:ale_linter_aliases = {'jsx': ['css', 'javascript']} -let g:ale_linters = {'jsx': ['stylelint', 'eslint']} -``` - -ALE will alias the `jsx` filetype so it uses the `css` filetype linters, and -use the original Array of selected linters for `jsx` from the `g:ale_linters` -object. All available linters will be used for the filetype `javascript`, and -no linter will be run twice for the same file. - - - -### 5.xv. How can I check Vue files with ESLint? - -To check Vue files with ESLint, your ESLint project configuration file must be -configured to use the [Vue plugin](https://github.com/vuejs/eslint-plugin-vue). -After that, you need to configure ALE so it will run the JavaScript ESLint -linter on your files. The settings you need are similar to the settings needed -for checking JSX code with both stylelint and ESLint, in the previous section. - -```vim -" In ~/.vim/ftplugin/vue.vim, or somewhere similar. - -" Run both javascript and vue linters for vue files. -let b:ale_linter_aliases = ['javascript', 'vue'] -" Select the eslint and vls linters. -let b:ale_linters = ['eslint', 'vls'] -``` - -Run `:ALEInfo` to see which linters are available after telling ALE to run -JavaScript linters on Vue files. Not all linters support checking Vue files. - -If you don't want to configure your linters in ftplugin files for some reason, -you can configure them from your vimrc file instead. - -```vim -" In ~/.vim/vimrc, or somewhere similar. -let g:ale_linter_aliases = {'vue': ['vue', 'javascript']} -let g:ale_linters = {'vue': ['eslint', 'vls']} -``` - - - -### 5.xvi. Will this plugin eat all of my laptop battery power? - -ALE takes advantage of the power of various tools to check your code. This of -course means that CPU time will be used to continuously check your code. If you -are concerned about the CPU time ALE will spend, which will of course imply -some cost to battery life, you can adjust your settings to make your CPU do -less work. - -First, consider increasing the delay before which ALE will run any linters -while you type. ALE uses a timeout which is cancelled and reset every time you -type, and this delay can be increased so linters are run less often. See -`:help g:ale_lint_delay` for more information. - -If you don't wish to run linters while you type, you can disable that behavior. -Set `g:ale_lint_on_text_changed` to `never`. You won't get as frequent error -checking, but ALE shouldn't block your ability to edit a document after you save -a file, so the asynchronous nature of the plugin will still be an advantage. - -If you are still concerned, you can turn the automatic linting off altogether, -including the option `g:ale_lint_on_enter`, and you can run ALE manually with -`:ALELint`. - - - -### 5.xvii. How can I configure my C or C++ project? - -The structure of C and C++ projects varies wildly from project to project, with -many different build tools being used for building them, and many different -formats for project configuration files. ALE can run compilers easily, but -ALE cannot easily detect which compiler flags to use. - -Some tools and build configurations can generate -[compile_commands.json](https://clang.llvm.org/docs/JSONCompilationDatabase.html) -files. The `cppcheck`, `clangcheck`, `clangtidy` and `cquery` linters can read -these files for automatically determining the appropriate compiler flags to -use. - -For linting with compilers like `gcc` and `clang`, and with other tools, you -will need to tell ALE which compiler flags to use yourself. You can use -different options for different projects with the `g:ale_pattern_options` -setting. Consult the documentation for that setting for more information. -`b:ale_linters` can be used to select which tools you want to run, say if you -want to use only `gcc` for one project, and only `clang` for another. - -ALE will attempt to parse `compile_commands.json` files to discover compiler -flags to use when linting code. See `:help g:ale_c_parse_compile_commands` for -more information. See Clang's documentation for -[compile_commands.json files](https://clang.llvm.org/docs/JSONCompilationDatabase.html). -You should strongly consider generating them in your builds, which is easy to do -with CMake. - -You can also configure ALE to automatically run `make -n` to run dry runs on -`Makefile`s to discover compiler flags. This can execute arbitrary code, so the -option is disabled by default. See `:help g:ale_c_parse_makefile`. - -You may also configure buffer-local settings for linters with project-specific -vimrc files. [local_vimrc](https://github.com/LucHermitte/local_vimrc) can be -used for executing local vimrc files which can be shared in your project. - - - -### 5.xviii. How can I configure ALE differently for different buffers? - -ALE offers various ways to configure which linters or fixers are run, and -other settings. For the majority of ALE's settings, they can either be -configured globally with a `g:` variable prefix, or for a specific buffer -with a `b:` variable prefix. For example, you can configure a Python ftplugin -file like so. - -```vim -" In ~/.vim/ftplugin/python.vim - -" Check Python files with flake8 and pylint. -let b:ale_linters = ['flake8', 'pylint'] -" Fix Python files with autopep8 and yapf. -let b:ale_fixers = ['autopep8', 'yapf'] -" Disable warnings about trailing whitespace for Python files. -let b:ale_warn_about_trailing_whitespace = 0 -``` - -For configuring files based on regular expression patterns matched against the -absolute path to a file, you can use `g:ale_pattern_options`. - -```vim -" Do not lint or fix minified files. -let g:ale_pattern_options = { -\ '\.min\.js$': {'ale_linters': [], 'ale_fixers': []}, -\ '\.min\.css$': {'ale_linters': [], 'ale_fixers': []}, -\} -" If you configure g:ale_pattern_options outside of vimrc, you need this. -let g:ale_pattern_options_enabled = 1 -``` - -Buffer-local variables for settings always override the global settings. - - - -### 5.xix. How can I configure the height of the list in which ALE displays errors? - -To set a default height for the error list, use the `g:ale_list_window_size` variable. - -```vim -" Show 5 lines of errors (default: 10) -let g:ale_list_window_size = 5 -``` - - - -### 5.xx. How can I run linters or fixers via Docker or a VM? - -ALE supports running linters or fixers via Docker, virtual machines, or in -combination with any remote machine with a different file system, so long as the -tools are well-integrated with ALE, and ALE is properly configured to run the -correct commands and map filename paths between different file systems. See -`:help ale-lint-other-machines` for the full documentation on how to configure -ALE to support this. - - - -### 5.xxi. How can I change the borders for floating preview windows? - -Borders for floating preview windows are enabled by default. You can use the -`g:ale_floating_window_border` setting to configure them. - -You could disable the border with an empty list. - -```vim -let g:ale_floating_window_border = [] -``` - -If the terminal supports Unicode, you might try setting the value like below, to -make it look nicer. - -```vim -let g:ale_floating_window_border = ['│', '─', '╭', '╮', '╯', '╰', '│', '─'] -``` - -Since vim's default uses nice unicode characters when possible, you can trick -ale into using that default with - -```vim -let g:ale_floating_window_border = repeat([''], 8) -``` - - - -### 5.xxii. How can I use ALE and vim-lsp together? - -[vim-lsp](https://github.com/prabirshrestha/vim-lsp) is a popular plugin as -implementation of Language Server Protocol (LSP) client for Vim. It provides -all the LSP features including auto completion, diagnostics, go to definitions, -etc. - -ALE also provides LSP support for diagnostics. When you use both ALE and -vim-lsp, one option is disabling ALE's LSP support by -`let g:ale_disable_lsp = 1`. However ALE provides integration of external -programs. Showing errors from language servers by vim-lsp and showing errors -from other external programs by ALE are confusing and problematic. - -[vim-lsp-ale](https://github.com/rhysd/vim-lsp-ale) is a bridge plugin to solve -the problem when using both ALE and vim-lsp. With the plugin, diagnostics are -provided by vim-lsp and ALE can handle all the errors. Please read -[vim-lsp-ale's documentation](https://github.com/rhysd/vim-lsp-ale/blob/master/doc/vim-lsp-ale.txt) -for more details. diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ada/adals.vim b/dotfiles/.vim/plugged/ale/ale_linters/ada/adals.vim deleted file mode 100644 index 9a41e1df..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ada/adals.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Bartek Jasicki http://github.com/thindil -" Description: Support for Ada Language Server - -call ale#Set('ada_adals_executable', 'ada_language_server') -call ale#Set('ada_adals_project', 'default.gpr') -call ale#Set('ada_adals_encoding', 'utf-8') - -function! ale_linters#ada#adals#GetAdaLSConfig(buffer) abort - return { - \ 'ada.projectFile': ale#Var(a:buffer, 'ada_adals_project'), - \ 'ada.defaultCharset': ale#Var(a:buffer, 'ada_adals_encoding') - \} -endfunction - -function! ale_linters#ada#adals#GetRootDirectory(buffer) abort - return fnamemodify(bufname(a:buffer), ':p:h') -endfunction - -call ale#linter#Define('ada', { -\ 'name': 'adals', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'ada_adals_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale_linters#ada#adals#GetRootDirectory'), -\ 'lsp_config': function('ale_linters#ada#adals#GetAdaLSConfig') -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ada/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/ada/cspell.vim deleted file mode 100644 index 7342d2b6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ada/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Ada files. - -call ale#handlers#cspell#DefineLinter('ada') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ada/gcc.vim b/dotfiles/.vim/plugged/ale/ale_linters/ada/gcc.vim deleted file mode 100644 index 5afc9ae3..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ada/gcc.vim +++ /dev/null @@ -1,54 +0,0 @@ -" Author: Martino Pilia -" Description: Lint Ada files with GCC - -call ale#Set('ada_gcc_executable', 'gcc') - -" -gnatwa: activate most optional warnings -" -gnatq: try semantic analysis even if syntax errors have been found -call ale#Set('ada_gcc_options', '-gnatwa -gnatq') - -function! ale_linters#ada#gcc#GetCommand(buffer) abort - " Build a suitable output file name. The output file is specified because - " the .ali file may be created even if no code generation is attempted. - " The output file name must match the source file name (except for the - " extension), so here we cannot use the null file as output. - let l:tmp_dir = fnamemodify(ale#command#CreateDirectory(a:buffer), ':p') - let l:out_file = l:tmp_dir . fnamemodify(bufname(a:buffer), ':t:r') . '.o' - - " -gnatc: Check syntax and semantics only (no code generation attempted) - return '%e -x ada -c -gnatc' - \ . ' -o ' . ale#Escape(l:out_file) - \ . ' -I %s:h' - \ . ale#Pad(ale#Var(a:buffer, 'ada_gcc_options')) - \ . ' %t' -endfunction - -" For the message format please refer to: -" https://gcc.gnu.org/onlinedocs/gnat_ugn/Output-and-Error-Message-Control.html -" https://gcc.gnu.org/onlinedocs/gnat_ugn/Warning-Message-Control.html -function! ale_linters#ada#gcc#Handle(buffer, lines) abort - " Error format: ::: - " Warning format: ::: warning: - let l:re = '\v(.+):([0-9]+):([0-9]+):\s+(warning:)?\s*(.+)\s*' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:re) - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': str2nr(l:match[2]), - \ 'col': str2nr(l:match[3]), - \ 'type': l:match[4] is# 'warning:' ? 'W' : 'E', - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('ada', { -\ 'name': 'gcc', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'ada_gcc_executable')}, -\ 'command': function('ale_linters#ada#gcc#GetCommand'), -\ 'callback': 'ale_linters#ada#gcc#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ansible/ansible_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/ansible/ansible_lint.vim deleted file mode 100644 index d5d98bc4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ansible/ansible_lint.vim +++ /dev/null @@ -1,128 +0,0 @@ -" Authors: Bjorn Neergaard , Vytautas Macionis -" Description: ansible-lint for ansible-yaml files - -call ale#Set('ansible_ansible_lint_executable', 'ansible-lint') - -function! ale_linters#ansible#ansible_lint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'ansible_ansible_lint_executable') -endfunction - -function! ale_linters#ansible#ansible_lint#Handle(buffer, version, lines) abort - for l:line in a:lines[:10] - if match(l:line, '^Traceback') >= 0 - return [{ - \ 'lnum': 1, - \ 'text': 'An exception was thrown. See :ALEDetail', - \ 'detail': join(a:lines, "\n"), - \}] - endif - endfor - - let l:version_group = ale#semver#GTE(a:version, [6, 0, 0]) ? '>=6.0.0' : - \ ale#semver#GTE(a:version, [5, 0, 0]) ? '>=5.0.0' : - \ '<5.0.0' - let l:output = [] - - if '>=6.0.0' is# l:version_group - let l:error_codes = { 'blocker': 'E', 'critical': 'E', 'major': 'W', 'minor': 'W', 'info': 'I' } - let l:linter_issues = json_decode(join(a:lines, '')) - - for l:issue in l:linter_issues - if ale#path#IsBufferPath(a:buffer, l:issue.location.path) - call add(l:output, { - \ 'lnum': exists('l:issue.location.lines.begin.column') ? l:issue.location.lines.begin.line : - \ l:issue.location.lines.begin, - \ 'col': exists('l:issue.location.lines.begin.column') ? l:issue.location.lines.begin.column : 0, - \ 'text': l:issue.check_name, - \ 'detail': l:issue.description, - \ 'code': l:issue.severity, - \ 'type': l:error_codes[l:issue.severity], - \}) - endif - endfor - endif - - if '>=5.0.0' is# l:version_group - " Matches patterns line the following: - " test.yml:3:148: syntax-check 'var' is not a valid attribute for a Play - " roles/test/tasks/test.yml:8: [package-latest] [VERY_LOW] Package installs should not use latest - " D:\test\tasks\test.yml:8: [package-latest] [VERY_LOW] package installs should not use latest - let l:pattern = '\v^(%([a-zA-Z]:)?[^:]+):(\d+):%((\d+):)? %(\[([-[:alnum:]]+)\]) %(\[([_[:alnum:]]+)\]) (.*)$' - let l:error_codes = { 'VERY_HIGH': 'E', 'HIGH': 'E', 'MEDIUM': 'W', 'LOW': 'W', 'VERY_LOW': 'W', 'INFO': 'I' } - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if ale#path#IsBufferPath(a:buffer, l:match[1]) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[6], - \ 'code': l:match[4], - \ 'type': l:error_codes[l:match[5]], - \}) - endif - endfor - endif - - if '<5.0.0' is# l:version_group - " Matches patterns line the following: - " test.yml:35: [EANSIBLE0002] Trailing whitespace - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?: \[?([[:alnum:]]+)\]? (.*)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:code = l:match[4] - - if l:code is# 'EANSIBLE0002' - \&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - " Skip warnings for trailing whitespace if the option is off. - continue - endif - - if ale#path#IsBufferPath(a:buffer, l:match[1]) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[5], - \ 'code': l:code, - \ 'type': l:code[:0] is# 'E' ? 'E' : 'W', - \}) - endif - endfor - endif - - return l:output -endfunction - -function! ale_linters#ansible#ansible_lint#GetCommand(buffer, version) abort - let l:commands = { - \ '>=6.0.0': '%e --nocolor -f json -x yaml %s', - \ '>=5.0.0': '%e --nocolor --parseable-severity -x yaml %s', - \ '<5.0.0': '%e --nocolor -p %t' - \} - let l:command = ale#semver#GTE(a:version, [6, 0]) ? l:commands['>=6.0.0'] : - \ ale#semver#GTE(a:version, [5, 0]) ? l:commands['>=5.0.0'] : - \ l:commands['<5.0.0'] - - return l:command -endfunction - -call ale#linter#Define('ansible', { -\ 'name': 'ansible_lint', -\ 'aliases': ['ansible', 'ansible-lint'], -\ 'executable': function('ale_linters#ansible#ansible_lint#GetExecutable'), -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale_linters#ansible#ansible_lint#GetExecutable(buffer), -\ '%e --version', -\ function('ale_linters#ansible#ansible_lint#GetCommand'), -\ )}, -\ 'lint_file': 1, -\ 'callback': {buffer, lines -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale_linters#ansible#ansible_lint#GetExecutable(buffer), -\ '%e --version', -\ {buffer, version -> ale_linters#ansible#ansible_lint#Handle( -\ buffer, -\ l:version, -\ lines)}, -\ )}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/apiblueprint/drafter.vim b/dotfiles/.vim/plugged/ale/ale_linters/apiblueprint/drafter.vim deleted file mode 100644 index 5d40c53a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/apiblueprint/drafter.vim +++ /dev/null @@ -1,38 +0,0 @@ -" Author: nametake https://nametake.github.io -" Description: apiblueprint parser - -function! ale_linters#apiblueprint#drafter#HandleErrors(buffer, lines) abort - " Matches patterns line the following: - " - " warning: (3) unable to parse response signature, expected 'response [] [()]'; line 4, column 3k - line 4, column 22 - " warning: (10) message-body asset is expected to be a pre-formatted code block, separate it by a newline and indent every of its line by 12 spaces or 3 tabs; line 30, column 5 - line 30, column 9; line 31, column 9 - line 31, column 14; line 32, column 9 - line 32, column 14 - let l:pattern = '\(^.*\): (\d\+) \(.\{-\}\); line \(\d\+\), column \(\d\+\) - line \d\+, column \d\+\(.*; line \d\+, column \d\+ - line \(\d\+\), column \(\d\+\)\)\{-\}$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines[2:], l:pattern) - let l:item = { - \ 'type': l:match[1] is# 'warning' ? 'W' : 'E', - \ 'text': l:match[2], - \ 'lnum': l:match[3] + 0, - \ 'col': l:match[4] + 0, - \} - - if l:match[5] isnot# '' - let l:item.end_lnum = l:match[6] + 0 - let l:item.end_col = l:match[7] + 0 - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - - -call ale#linter#Define('apiblueprint', { -\ 'name': 'drafter', -\ 'output_stream': 'stderr', -\ 'executable': 'drafter', -\ 'command': 'drafter --use-line-num --validate', -\ 'callback': 'ale_linters#apiblueprint#drafter#HandleErrors', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/apkbuild/apkbuild_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/apkbuild/apkbuild_lint.vim deleted file mode 100644 index 285f5534..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/apkbuild/apkbuild_lint.vim +++ /dev/null @@ -1,12 +0,0 @@ -" Author: Leo -" Description: apkbuild-lint from atools linter for APKBUILDs - -call ale#Set('apkbuild_apkbuild_lint_executable', 'apkbuild-lint') - -call ale#linter#Define('apkbuild', { -\ 'name': 'apkbuild_lint', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'apkbuild_apkbuild_lint_executable')}, -\ 'command': '%e %t', -\ 'callback': 'ale#handlers#atools#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/apkbuild/secfixes_check.vim b/dotfiles/.vim/plugged/ale/ale_linters/apkbuild/secfixes_check.vim deleted file mode 100644 index c65267fd..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/apkbuild/secfixes_check.vim +++ /dev/null @@ -1,12 +0,0 @@ -" Author: Leo -" Description: secfixes-check from atools linter for APKBUILDs - -call ale#Set('apkbuild_secfixes_check_executable', 'secfixes-check') - -call ale#linter#Define('apkbuild', { -\ 'name': 'secfixes_check', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'apkbuild_secfixes_check_executable')}, -\ 'command': '%e %t', -\ 'callback': 'ale#handlers#atools#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/alex.vim deleted file mode 100644 index 97976b2c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for asciidoc files - -call ale#handlers#alex#DefineLinter('asciidoc', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/cspell.vim deleted file mode 100644 index b228b2e8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for ASCIIDoc files. - -call ale#handlers#cspell#DefineLinter('asciidoc') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/languagetool.vim b/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/languagetool.vim deleted file mode 100644 index 8e8de7f3..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/languagetool.vim +++ /dev/null @@ -1,5 +0,0 @@ -" Author: Horacio Sanson (hsanson [ät] gmail.com) -" Description: languagetool for asciidoc files, copied from markdown. - - -call ale#handlers#languagetool#DefineLinter('asciidoc') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/proselint.vim deleted file mode 100644 index b636c067..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for AsciiDoc files - -call ale#linter#Define('asciidoc', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/redpen.vim b/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/redpen.vim deleted file mode 100644 index 819e385f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/redpen.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: rhysd https://rhysd.github.io -" Description: Redpen, a proofreading tool (http://redpen.cc) - -call ale#linter#Define('asciidoc', { -\ 'name': 'redpen', -\ 'executable': 'redpen', -\ 'command': 'redpen -f asciidoc -r json %t', -\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/textlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/textlint.vim deleted file mode 100644 index 308a3a29..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/textlint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: TANIGUCHI Masaya -" Description: textlint for AsciiDoc files - -call ale#linter#Define('asciidoc', { -\ 'name': 'textlint', -\ 'executable': function('ale#handlers#textlint#GetExecutable'), -\ 'command': function('ale#handlers#textlint#GetCommand'), -\ 'callback': 'ale#handlers#textlint#HandleTextlintOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/vale.vim b/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/vale.vim deleted file mode 100644 index b3cf4547..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/vale.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Jeff Kreeftmeijer https://github.com/jeffkreeftmeijer -" Description: vale for AsciiDoc files - -call ale#linter#Define('asciidoc', { -\ 'name': 'vale', -\ 'executable': 'vale', -\ 'command': 'vale --output=line %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/writegood.vim deleted file mode 100644 index a29b7e9c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asciidoc/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for AsciiDoc files - -call ale#handlers#writegood#DefineLinter('asciidoc') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/asm/gcc.vim b/dotfiles/.vim/plugged/ale/ale_linters/asm/gcc.vim deleted file mode 100644 index cda38923..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/asm/gcc.vim +++ /dev/null @@ -1,37 +0,0 @@ -" Author: Lucas Kolstad -" Description: gcc linter for asm files - -call ale#Set('asm_gcc_executable', 'gcc') -call ale#Set('asm_gcc_options', '-Wall') - -function! ale_linters#asm#gcc#GetCommand(buffer) abort - " `-o /dev/null` or `-o null` is needed to catch all errors, - " -fsyntax-only doesn't catch everything. - return '%e -x assembler' - \ . ' -o ' . g:ale#util#nul_file - \ . '-iquote %s:h' - \ . ' ' . ale#Var(a:buffer, 'asm_gcc_options') . ' -' -endfunction - -function! ale_linters#asm#gcc#Handle(buffer, lines) abort - let l:pattern = '^.\+:\(\d\+\): \([^:]\+\): \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'type': l:match[2] =~? 'error' ? 'E' : 'W', - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('asm', { -\ 'name': 'gcc', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'asm_gcc_executable')}, -\ 'command': function('ale_linters#asm#gcc#GetCommand'), -\ 'callback': 'ale_linters#asm#gcc#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/avra/avra.vim b/dotfiles/.vim/plugged/ale/ale_linters/avra/avra.vim deleted file mode 100644 index edf15c09..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/avra/avra.vim +++ /dev/null @@ -1,36 +0,0 @@ -" Author: Utkarsh Verma -" Description: AVRA linter for avra syntax. - -call ale#Set('avra_avra_executable', 'avra') -call ale#Set('avra_avra_options', '') - -function! ale_linters#avra#avra#GetCommand(buffer) abort - return '%e' - \ . ' %t' - \ . ale#Pad(ale#Var(a:buffer, 'avra_avra_options')) - \ . ' -o ' . g:ale#util#nul_file -endfunction - -function! ale_linters#avra#avra#Handle(buffer, lines) abort - " Note that we treat 'fatal' as errors. - let l:pattern = '^\S\+(\(\d\+\))\s\+:\s\+\(\S\+\)\s\+:\s\+\(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'type': l:match[2] =~? 'Error' ? 'E' : 'W', - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('avra', { -\ 'name': 'avra', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'avra_avra_executable')}, -\ 'command': function('ale_linters#avra#avra#GetCommand'), -\ 'callback': 'ale_linters#avra#avra#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/awk/gawk.vim b/dotfiles/.vim/plugged/ale/ale_linters/awk/gawk.vim deleted file mode 100644 index fe961ae3..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/awk/gawk.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: kmarc -" Description: This file adds support for using GNU awk with sripts. - -call ale#Set('awk_gawk_executable', 'gawk') -call ale#Set('awk_gawk_options', '') - -function! ale_linters#awk#gawk#GetCommand(buffer) abort - " note the --source 'BEGIN ...' is to prevent - " gawk from attempting to execute the body of the script - " it is linting. - return '%e --source ' . ale#Escape('BEGIN { exit } END { exit 1 }') - \ . ' --lint' - \ . ale#Pad(ale#Var(a:buffer, 'awk_gawk_options')) - \ . ' -f %t /dev/null' -endfunction - -call ale#linter#Define('awk', { -\ 'name': 'gawk', -\ 'executable': {b -> ale#Var(b, 'awk_gawk_executable')}, -\ 'command': function('ale_linters#awk#gawk#GetCommand'), -\ 'callback': 'ale#handlers#gawk#HandleGawkFormat', -\ 'output_stream': 'both' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/bats/shellcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/bats/shellcheck.vim deleted file mode 100644 index 5c2a0ea9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/bats/shellcheck.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Ian2020 -" Description: shellcheck linter for bats scripts. - -call ale#handlers#shellcheck#DefineLinter('bats') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/bib/bibclean.vim b/dotfiles/.vim/plugged/ale/ale_linters/bib/bibclean.vim deleted file mode 100644 index f1610e00..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/bib/bibclean.vim +++ /dev/null @@ -1,80 +0,0 @@ -" Author: Horacio Sanson - https://github.com/hsanson -" Description: Support for bibclean linter for BibTeX files. - -call ale#Set('bib_bibclean_executable', 'bibclean') - -function! ale_linters#bib#bibclean#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'bib_bibclean_executable') - - return ale#Escape(l:executable) . ' -file-position ' -endfunction - -function! ale_linters#bib#bibclean#get_type(str) abort - if a:str is# '??' - return 'E' - else - return 'W' - endif -endfunction - -function! ale_linters#bib#bibclean#match_msg(line) abort - " Legacy message pattern works for bibclean <= v2.11.4. If empty, try - " the new message pattern for bibtex > v2.11.4 - let l:matches_legacy = matchlist(a:line, '^\(.*\) "stdin", line \(\d\+\): \(.*\)$') - - return ! empty(l:matches_legacy) ? l:matches_legacy - \ : matchlist(a:line, '^\(.*\) stdin:\(\d\+\):\(.*\)$') -endfunction - -function! ale_linters#bib#bibclean#match_entry(line) abort - return matchlist(a:line, 'Entry input byte=.* line=\(.*\) column=\(.*\) output .*$') -endfunction - -function! ale_linters#bib#bibclean#match_value(line) abort - return matchlist(a:line, 'Value input byte=.* line=\(.*\) column=\(.*\) output .*$') -endfunction - -function! ale_linters#bib#bibclean#Handle(buffer, lines) abort - let l:output = [] - - let l:type = 'E' - let l:msg = '' - - for l:line in a:lines - if empty(l:msg) - let l:mlist = ale_linters#bib#bibclean#match_msg(l:line) - - if !empty(l:mlist) - let l:msg = l:mlist[3] - let l:type = ale_linters#bib#bibclean#get_type(l:mlist[1]) - endif - else - if l:type is# 'E' - let l:mlist = ale_linters#bib#bibclean#match_entry(l:line) - else - let l:mlist = ale_linters#bib#bibclean#match_value(l:line) - endif - - if !empty(l:mlist) - call add(l:output, { - \ 'lnum': l:mlist[1], - \ 'col': l:mlist[2], - \ 'text': l:msg, - \ 'type': l:type - \}) - - let l:msg = '' - endif - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('bib', { -\ 'name': 'bibclean', -\ 'executable': {b -> ale#Var(b, 'bib_bibclean_executable')}, -\ 'command': function('ale_linters#bib#bibclean#GetCommand'), -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#bib#bibclean#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/bicep/bicep.vim b/dotfiles/.vim/plugged/ale/ale_linters/bicep/bicep.vim deleted file mode 100644 index 91cc1986..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/bicep/bicep.vim +++ /dev/null @@ -1,64 +0,0 @@ -" Author: Carl Smedstad -" Description: bicep for bicep files - -let g:ale_bicep_bicep_executable = -\ get(g:, 'ale_bicep_bicep_executable', 'bicep') - -let g:ale_bicep_bicep_options = -\ get(g:, 'ale_bicep_bicep_options', '') - -function! ale_linters#bicep#bicep#Executable(buffer) abort - return ale#Var(a:buffer, 'bicep_bicep_executable') -endfunction - -function! ale_linters#bicep#bicep#Command(buffer) abort - let l:executable = ale_linters#bicep#bicep#Executable(a:buffer) - let l:options = ale#Var(a:buffer, 'bicep_bicep_options') - - if has('win32') - let l:nullfile = 'NUL' - else - let l:nullfile = '/dev/null' - endif - - return ale#Escape(l:executable) - \ . ' build --outfile ' - \ . l:nullfile - \ . ' ' - \ . l:options - \ . ' %s' -endfunction - -function! ale_linters#bicep#bicep#Handle(buffer, lines) abort - let l:pattern = '\v^.*\((\d+),(\d+)\)\s:\s([a-zA-Z]*)\s([-a-zA-Z0-9]*):\s(.*)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if l:match[3] is# 'Error' - let l:type = 'E' - elseif l:match[3] is# 'Warning' - let l:type = 'W' - else - let l:type = 'I' - endif - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:type, - \ 'code': l:match[4], - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('bicep', { -\ 'name': 'bicep', -\ 'executable': function('ale_linters#bicep#bicep#Executable'), -\ 'command': function('ale_linters#bicep#bicep#Command'), -\ 'callback': 'ale_linters#bicep#bicep#Handle', -\ 'output_stream': 'both', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/bitbake/oelint_adv.vim b/dotfiles/.vim/plugged/ale/ale_linters/bitbake/oelint_adv.vim deleted file mode 100644 index fb85a9b9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/bitbake/oelint_adv.vim +++ /dev/null @@ -1,47 +0,0 @@ -" Author: offa -" Description: oelint-adv for BitBake files - -call ale#Set('bitbake_oelint_adv_executable', 'oelint-adv') -call ale#Set('bitbake_oelint_adv_options', '') -call ale#Set('bitbake_oelint_adv_config', '.oelint.cfg') - -function! ale_linters#bitbake#oelint_adv#Command(buffer) abort - let l:config_file = ale#path#FindNearestFile(a:buffer, - \ ale#Var(a:buffer, 'bitbake_oelint_adv_config')) - - return ((!empty(l:config_file)) - \ ? 'OELINT_CONFIG=' . ale#Escape(l:config_file) . ' ' - \ : '') - \ . '%e --quiet ' - \ . ale#Pad(ale#Var(a:buffer, 'bitbake_oelint_adv_options')) . '%s' -endfunction - -function! ale_linters#bitbake#oelint_adv#Handle(buffer, lines) abort - let l:pattern = '\v^(.+):(.+):(.+):(.+):(.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': str2nr(l:match[2]), - \ 'type': l:match[3] is# 'error' - \ ? 'E' : (l:match[3] is# 'warning' ? 'W' : 'I'), - \ 'text': StripAnsiCodes(l:match[5]), - \ 'code': l:match[4] - \ }) - endfor - - return l:output -endfunction - -function! StripAnsiCodes(line) abort - return substitute(a:line, '\e\[[0-9;]\+[mK]', '', 'g') -endfunction - -call ale#linter#Define('bitbake', { -\ 'name': 'oelint_adv', -\ 'output_stream': 'both', -\ 'executable': {b -> ale#Var(b, 'bitbake_oelint_adv_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#bitbake#oelint_adv#Command'), -\ 'callback': 'ale_linters#bitbake#oelint_adv#Handle', -\ }) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/cc.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/cc.vim deleted file mode 100644 index 35125f2f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/cc.vim +++ /dev/null @@ -1,67 +0,0 @@ -" Author: w0rp -" Description: A C compiler linter for C files with gcc/clang, etc. - -call ale#Set('c_cc_executable', '') -call ale#Set('c_cc_options', '-std=c11 -Wall') -call ale#Set('c_cc_use_header_lang_flag', -1) -call ale#Set('c_cc_header_exts', ['h']) - -function! ale_linters#c#cc#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'c_cc_executable') - - " Default to either clang or gcc. - if l:executable is# '' - if ale#engine#IsExecutable(a:buffer, 'clang') - let l:executable = 'clang' - else - let l:executable = 'gcc' - endif - endif - - return l:executable -endfunction - -function! ale_linters#c#cc#GetCommand(buffer, output) abort - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - let l:ale_flags = ale#Var(a:buffer, 'c_cc_options') - - if l:cflags =~# '-std=' - let l:ale_flags = substitute( - \ l:ale_flags, - \ '-std=\(c\|gnu\)[0-9]\{2\}', - \ '', - \ 'g') - endif - - " Select the correct language flag depending on the executable, options - " and file extension - let l:executable = ale_linters#c#cc#GetExecutable(a:buffer) - let l:use_header_lang_flag = ale#Var(a:buffer, 'c_cc_use_header_lang_flag') - let l:header_exts = ale#Var(a:buffer, 'c_cc_header_exts') - let l:lang_flag = ale#c#GetLanguageFlag( - \ a:buffer, - \ l:executable, - \ l:use_header_lang_flag, - \ l:header_exts, - \ 'c') - - " -iquote with the directory the file is in makes #include work for - " headers in the same directory. - " - " `-o /dev/null` or `-o null` is needed to catch all errors, - " -fsyntax-only doesn't catch everything. - return '%e -S -x ' . l:lang_flag - \ . ' -o ' . g:ale#util#nul_file - \ . ' -iquote %s:h' - \ . ale#Pad(l:cflags) - \ . ale#Pad(l:ale_flags) . ' -' -endfunction - -call ale#linter#Define('c', { -\ 'name': 'cc', -\ 'aliases': ['gcc', 'clang'], -\ 'output_stream': 'stderr', -\ 'executable': function('ale_linters#c#cc#GetExecutable'), -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#cc#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/ccls.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/ccls.vim deleted file mode 100644 index 9f105712..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/ccls.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Ye Jingchen , Ben Falconer , jtalowell -" Description: A language server for C - -call ale#Set('c_ccls_executable', 'ccls') -call ale#Set('c_ccls_init_options', {}) -call ale#Set('c_build_dir', '') - -call ale#linter#Define('c', { -\ 'name': 'ccls', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'c_ccls_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale#handlers#ccls#GetProjectRoot'), -\ 'initialization_options': {b -> ale#handlers#ccls#GetInitOpts(b, 'c_ccls_init_options')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/clangd.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/clangd.vim deleted file mode 100644 index c42d4497..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/clangd.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: Andrey Melentyev -" Description: Clangd language server - -call ale#Set('c_clangd_executable', 'clangd') -call ale#Set('c_clangd_options', '') -call ale#Set('c_build_dir', '') - -function! ale_linters#c#clangd#GetCommand(buffer) abort - let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'c_clangd_options')) - \ . (!empty(l:build_dir) ? ' -compile-commands-dir=' . ale#Escape(l:build_dir) : '') -endfunction - -call ale#linter#Define('c', { -\ 'name': 'clangd', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'c_clangd_executable')}, -\ 'command': function('ale_linters#c#clangd#GetCommand'), -\ 'project_root': function('ale#c#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/clangtidy.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/clangtidy.vim deleted file mode 100644 index 553cc23b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/clangtidy.vim +++ /dev/null @@ -1,52 +0,0 @@ -" Author: vdeurzen , w0rp , -" gagbo , Andrej Radovic -" Description: clang-tidy linter for c files - -call ale#Set('c_clangtidy_executable', 'clang-tidy') -" Set this option to check the checks clang-tidy will apply. -" The number of checks that can be applied to C files is limited in contrast to -" C++ -" -" Consult the check list in clang-tidy's documentation: -" http://clang.llvm.org/extra/clang-tidy/checks/list.html - -call ale#Set('c_clangtidy_checks', []) -" Set this option to manually set some options for clang-tidy to use as compile -" flags. -" This will disable compile_commands.json detection. -call ale#Set('c_clangtidy_options', '') -" Set this option to manually set options for clang-tidy directly. -call ale#Set('c_clangtidy_extra_options', '') -call ale#Set('c_build_dir', '') - -function! ale_linters#c#clangtidy#GetCommand(buffer, output) abort - let l:checks = join(ale#Var(a:buffer, 'c_clangtidy_checks'), ',') - let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - let l:options = '' - - " Get the extra options if we couldn't find a build directory. - if empty(l:build_dir) - let l:options = ale#Var(a:buffer, 'c_clangtidy_options') - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - let l:options .= !empty(l:options) ? ale#Pad(l:cflags) : l:cflags - endif - - " Get the options to pass directly to clang-tidy - let l:extra_options = ale#Var(a:buffer, 'c_clangtidy_extra_options') - - return '%e' - \ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '') - \ . (!empty(l:extra_options) ? ' ' . ale#Escape(l:extra_options) : '') - \ . ' %s' - \ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '') - \ . (!empty(l:options) ? ' -- ' . l:options : '') -endfunction - -call ale#linter#Define('c', { -\ 'name': 'clangtidy', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'c_clangtidy_executable')}, -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#c#clangtidy#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/cppcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/cppcheck.vim deleted file mode 100644 index 28c2861f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/cppcheck.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: Bart Libert -" Description: cppcheck linter for c files - -call ale#Set('c_cppcheck_executable', 'cppcheck') -call ale#Set('c_cppcheck_options', '--enable=style') - -function! ale_linters#c#cppcheck#GetCommand(buffer) abort - let l:compile_commands_option = ale#handlers#cppcheck#GetCompileCommandsOptions(a:buffer) - let l:buffer_path_include = empty(l:compile_commands_option) - \ ? ale#handlers#cppcheck#GetBufferPathIncludeOptions(a:buffer) - \ : '' - let l:template = ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - - return '%e -q --language=c' - \ . l:template - \ . ale#Pad(l:compile_commands_option) - \ . ale#Pad(ale#Var(a:buffer, 'c_cppcheck_options')) - \ . l:buffer_path_include - \ . ' %t' -endfunction - -call ale#linter#Define('c', { -\ 'name': 'cppcheck', -\ 'output_stream': 'both', -\ 'executable': {b -> ale#Var(b, 'c_cppcheck_executable')}, -\ 'cwd': function('ale#handlers#cppcheck#GetCwd'), -\ 'command': function('ale_linters#c#cppcheck#GetCommand'), -\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/cpplint.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/cpplint.vim deleted file mode 100644 index 4b997941..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/cpplint.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: Justin Huang -" Description: cpplint for c files - -call ale#Set('c_cpplint_executable', 'cpplint') -call ale#Set('c_cpplint_options', '') - -function! ale_linters#c#cpplint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'c_cpplint_options') - - return '%e' . ale#Pad(l:options) . ' %s' -endfunction - -call ale#linter#Define('c', { -\ 'name': 'cpplint', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'c_cpplint_executable')}, -\ 'command': function('ale_linters#c#cpplint#GetCommand'), -\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/cquery.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/cquery.vim deleted file mode 100644 index ff0f34af..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/cquery.vim +++ /dev/null @@ -1,30 +0,0 @@ -" Author: Ben Falconer , jtalowell -" Description: A language server for C - -call ale#Set('c_cquery_executable', 'cquery') -call ale#Set('c_cquery_cache_directory', expand('~/.cache/cquery')) - -function! ale_linters#c#cquery#GetProjectRoot(buffer) abort - " Try to find cquery configuration files first. - let l:config = ale#path#FindNearestFile(a:buffer, '.cquery') - - if !empty(l:config) - return fnamemodify(l:config, ':h') - endif - - " Fall back on default project root detection. - return ale#c#FindProjectRoot(a:buffer) -endfunction - -function! ale_linters#c#cquery#GetInitializationOptions(buffer) abort - return {'cacheDirectory': ale#Var(a:buffer, 'c_cquery_cache_directory')} -endfunction - -call ale#linter#Define('c', { -\ 'name': 'cquery', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'c_cquery_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale_linters#c#cquery#GetProjectRoot'), -\ 'initialization_options': function('ale_linters#c#cquery#GetInitializationOptions'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/cspell.vim deleted file mode 100644 index 5f016548..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for C files. - -call ale#handlers#cspell#DefineLinter('c') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/c/flawfinder.vim b/dotfiles/.vim/plugged/ale/ale_linters/c/flawfinder.vim deleted file mode 100644 index 53c36716..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/c/flawfinder.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: Christian Gibbons -" Description: flawfinder linter for c files - -call ale#Set('c_flawfinder_executable', 'flawfinder') -call ale#Set('c_flawfinder_options', '') -call ale#Set('c_flawfinder_minlevel', 1) -call ale#Set('c_flawfinder_error_severity', 6) - -function! ale_linters#c#flawfinder#GetCommand(buffer) abort - " Set the minimum vulnerability level for flawfinder to bother with - let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'c_flawfinder_minlevel') - - return '%e -CDQS' - \ . ale#Pad(ale#Var(a:buffer, 'c_flawfinder_options')) - \ . l:minlevel - \ . ' %t' -endfunction - -call ale#linter#Define('c', { -\ 'name': 'flawfinder', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'c_flawfinder_executable')}, -\ 'command': function('ale_linters#c#flawfinder#GetCommand'), -\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cairo/starknet.vim b/dotfiles/.vim/plugged/ale/ale_linters/cairo/starknet.vim deleted file mode 100644 index 990bda6d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cairo/starknet.vim +++ /dev/null @@ -1,37 +0,0 @@ -" Author: 0xHyoga <0xHyoga@gmx.com> -" Description: Report starknet-compile errors in cairo code - -call ale#Set('cairo_starknet_executable', 'starknet-compile') -call ale#Set('cairo_starknet_options', '') - -function! ale_linters#cairo#starknet#Handle(buffer, lines) abort - " Error always on the first line - " e.g ex01.cairo:20:6: Could not find module 'contracts.utils.ex00_base'. Searched in the following paths: - let l:pattern = '\v\.cairo:(\d+):(\d+):+ (.*)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': str2nr(l:match[1]), - \ 'col': str2nr(l:match[2]), - \ 'type': 'E', - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -function! ale_linters#cairo#starknet#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'cairo_starknet_executable') - - return l:executable . ale#Pad(ale#Var(a:buffer, 'cairo_starknet_options')) . ' %s' -endfunction - -call ale#linter#Define('cairo', { -\ 'name': 'starknet', -\ 'executable': {b -> ale#Var(b, 'cairo_starknet_executable')}, -\ 'command': function('ale_linters#cairo#starknet#GetCommand'), -\ 'callback': 'ale_linters#cairo#starknet#Handle', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/chef/cookstyle.vim b/dotfiles/.vim/plugged/ale/ale_linters/chef/cookstyle.vim deleted file mode 100644 index 50bae2aa..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/chef/cookstyle.vim +++ /dev/null @@ -1,54 +0,0 @@ -" Author: Raphael Hoegger - https://github.com/pfuender -" Description: Cookstyle (RuboCop based), a code style analyzer for Ruby files - -call ale#Set('chef_cookstyle_executable', 'cookstyle') -call ale#Set('chef_cookstyle_options', '') - -function! ale_linters#chef#cookstyle#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'chef_cookstyle_options') - - return '%e' . ale#Pad(escape(l:options, '~')) . ' --force-exclusion --format json --stdin ' . ' %s' -endfunction - -function! ale_linters#chef#cookstyle#Handle(buffer, lines) abort - if len(a:lines) == 0 - return [] - endif - - let l:errors = ale#util#FuzzyJSONDecode(a:lines[0], {}) - - if !has_key(l:errors, 'summary') - \|| l:errors['summary']['offense_count'] == 0 - \|| empty(l:errors['files']) - return [] - endif - - let l:output = [] - - for l:error in l:errors['files'][0]['offenses'] - let l:start_col = str2nr(l:error['location']['start_column']) - let l:end_col = str2nr(l:error['location']['last_column']) - - if !l:end_col - let l:end_col = l:start_col + 1 - endif - - call add(l:output, { - \ 'lnum': str2nr(l:error['location']['line']), - \ 'col': l:start_col, - \ 'end_col': l:end_col, - \ 'code': l:error['cop_name'], - \ 'text': l:error['message'], - \ 'type': l:error['severity'] is? 'convention' ? 'W' : 'E', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('chef', { -\ 'name': 'cookstyle', -\ 'executable': {b -> ale#Var(b, 'chef_cookstyle_executable')}, -\ 'command': function('ale_linters#chef#cookstyle#GetCommand'), -\ 'callback': 'ale_linters#chef#cookstyle#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/chef/foodcritic.vim b/dotfiles/.vim/plugged/ale/ale_linters/chef/foodcritic.vim deleted file mode 100644 index 48beba75..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/chef/foodcritic.vim +++ /dev/null @@ -1,41 +0,0 @@ -" Author: Edward Larkey -" Author: Jose Junior -" Author: w0rp -" Description: This file adds the foodcritic linter for Chef files. - -call ale#Set('chef_foodcritic_executable', 'foodcritic') -call ale#Set('chef_foodcritic_options', '') - -function! ale_linters#chef#foodcritic#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'chef_foodcritic_options') - - return '%e' . ale#Pad(escape(l:options, '~')) . ' %s' -endfunction - -function! ale_linters#chef#foodcritic#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " FC002: Avoid string interpolation where not required: httpd.rb:13 - let l:pattern = '\v([^:]+): (.+): ([a-zA-Z]?:?[^:]+):(\d+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'code': l:match[1], - \ 'text': l:match[2], - \ 'filename': l:match[3], - \ 'lnum': l:match[4] + 0, - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('chef', { -\ 'name': 'foodcritic', -\ 'executable': {b -> ale#Var(b, 'chef_foodcritic_executable')}, -\ 'command': function('ale_linters#chef#foodcritic#GetCommand'), -\ 'callback': 'ale_linters#chef#foodcritic#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/clojure/clj_kondo.vim b/dotfiles/.vim/plugged/ale/ale_linters/clojure/clj_kondo.vim deleted file mode 100644 index b470cf0c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/clojure/clj_kondo.vim +++ /dev/null @@ -1,47 +0,0 @@ -" Author: Masashi Iizuka -" Description: linter for clojure using clj-kondo https://github.com/borkdude/clj-kondo - -call ale#Set('clojure_clj_kondo_options', '--cache') - -function! ale_linters#clojure#clj_kondo#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'clojure_clj_kondo_options') - - let l:command = 'clj-kondo' - \ . ale#Pad(l:options) - \ . ' --lint -' - \ . ' --filename %s' - - return l:command -endfunction - -function! ale_linters#clojure#clj_kondo#HandleCljKondoFormat(buffer, lines) abort - " output format - " ::: : - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+)?:(\d+)?:? ((Exception|error|warning): ?(.+))$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:type = 'E' - - if l:match[4] is? 'warning' - let l:type = 'W' - endif - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[3], - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('clojure', { -\ 'name': 'clj-kondo', -\ 'output_stream': 'stdout', -\ 'executable': 'clj-kondo', -\ 'command': function('ale_linters#clojure#clj_kondo#GetCommand'), -\ 'callback': 'ale_linters#clojure#clj_kondo#HandleCljKondoFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/clojure/joker.vim b/dotfiles/.vim/plugged/ale/ale_linters/clojure/joker.vim deleted file mode 100644 index 1f17cd31..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/clojure/joker.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Author: Nic West -" Description: linter for clojure using joker https://github.com/candid82/joker - -function! ale_linters#clojure#joker#HandleJokerFormat(buffer, lines) abort - " output format - " ::: : - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+):? ((Read error|Parse error|Parse warning|Exception): ?(.+))$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:type = 'E' - - if l:match[4] is? 'Parse warning' - let l:type = 'W' - endif - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[3], - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('clojure', { -\ 'name': 'joker', -\ 'output_stream': 'stderr', -\ 'executable': 'joker', -\ 'command': 'joker --working-dir %s --lint %t', -\ 'callback': 'ale_linters#clojure#joker#HandleJokerFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cloudformation/cfn_python_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/cloudformation/cfn_python_lint.vim deleted file mode 100644 index 16841431..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cloudformation/cfn_python_lint.vim +++ /dev/null @@ -1,36 +0,0 @@ -" Author: Yasuhiro Kiyota -" Description: Support cfn-python-lint for AWS Cloudformation template file - -function! ale_linters#cloudformation#cfn_python_lint#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " sample.template.yaml:96:7:96:15:E3012:Property Resources/Sample/Properties/FromPort should be of type Integer - let l:pattern = '\v^(.*):(\d+):(\d+):(\d+):(\d+):([[:alnum:]]+):(.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:code = l:match[6] - - if ale#path#IsBufferPath(a:buffer, l:match[1]) - call add(l:output, { - \ 'lnum': l:match[2], - \ 'col': l:match[3], - \ 'end_lnum': l:match[4], - \ 'end_col': l:match[5], - \ 'code': l:code, - \ 'type': l:code[:0] is# 'E' ? 'E' : 'W', - \ 'text': l:match[7] - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('cloudformation', { -\ 'name': 'cloudformation', -\ 'aliases': ['cfn-lint'], -\ 'executable': 'cfn-lint', -\ 'command': 'cfn-lint --template %t --format parseable', -\ 'callback': 'ale_linters#cloudformation#cfn_python_lint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cmake/cmake_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/cmake/cmake_lint.vim deleted file mode 100644 index 3c44c92f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cmake/cmake_lint.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: Carl Smedstad -" Description: cmake-lint for cmake files - -let g:ale_cmake_cmake_lint_executable = -\ get(g:, 'ale_cmake_cmake_lint_executable', 'cmake-lint') - -let g:ale_cmake_cmake_lint_options = -\ get(g:, 'ale_cmake_cmake_lint_options', '') - -function! ale_linters#cmake#cmake_lint#Executable(buffer) abort - return ale#Var(a:buffer, 'cmake_cmake_lint_executable') -endfunction - -function! ale_linters#cmake#cmake_lint#Command(buffer) abort - let l:executable = ale_linters#cmake#cmake_lint#Executable(a:buffer) - let l:options = ale#Var(a:buffer, 'cmake_cmake_lint_options') - - return ale#Escape(l:executable) . ' ' . l:options . ' %t' -endfunction - -function! ale_linters#cmake#cmake_lint#Handle(buffer, lines) abort - let l:pattern = '\v^[^:]+:(\d+),?(\d+)?:\s\[([A-Z]\d+)\]\s(.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': 'W', - \ 'code': l:match[3], - \ 'text': l:match[4], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('cmake', { -\ 'name': 'cmake_lint', -\ 'executable': function('ale_linters#cmake#cmake_lint#Executable'), -\ 'command': function('ale_linters#cmake#cmake_lint#Command'), -\ 'callback': 'ale_linters#cmake#cmake_lint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cmake/cmakelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/cmake/cmakelint.vim deleted file mode 100644 index d955a265..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cmake/cmakelint.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: Kenneth Benzie -" Description: cmakelint for cmake files - -let g:ale_cmake_cmakelint_executable = -\ get(g:, 'ale_cmake_cmakelint_executable', 'cmakelint') - -let g:ale_cmake_cmakelint_options = -\ get(g:, 'ale_cmake_cmakelint_options', '') - -function! ale_linters#cmake#cmakelint#Executable(buffer) abort - return ale#Var(a:buffer, 'cmake_cmakelint_executable') -endfunction - -function! ale_linters#cmake#cmakelint#Command(buffer) abort - return ale_linters#cmake#cmakelint#Executable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'cmake_cmakelint_options') . ' %t' -endfunction - -call ale#linter#Define('cmake', { -\ 'name': 'cmakelint', -\ 'executable': function('ale_linters#cmake#cmakelint#Executable'), -\ 'command': function('ale_linters#cmake#cmakelint#Command'), -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/coffee/coffee.vim b/dotfiles/.vim/plugged/ale/ale_linters/coffee/coffee.vim deleted file mode 100644 index 8e891639..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/coffee/coffee.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: KabbAmine - https://github.com/KabbAmine -" Description: Coffee for checking coffee files - -function! ale_linters#coffee#coffee#GetExecutable(buffer) abort - return ale#path#ResolveLocalPath( - \ a:buffer, - \ 'node_modules/.bin/coffee', - \ 'coffee' - \) -endfunction - -function! ale_linters#coffee#coffee#GetCommand(buffer) abort - return ale_linters#coffee#coffee#GetExecutable(a:buffer) - \ . ' -cp -s' -endfunction - -call ale#linter#Define('coffee', { -\ 'name': 'coffee', -\ 'executable': function('ale_linters#coffee#coffee#GetExecutable'), -\ 'command': function('ale_linters#coffee#coffee#GetCommand'), -\ 'output_stream': 'stderr', -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/coffee/coffeelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/coffee/coffeelint.vim deleted file mode 100644 index b7c85fa7..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/coffee/coffeelint.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: Prashanth Chandra https://github.com/prashcr -" Description: coffeelint linter for coffeescript files - -function! ale_linters#coffee#coffeelint#GetExecutable(buffer) abort - return ale#path#ResolveLocalPath( - \ a:buffer, - \ 'node_modules/.bin/coffeelint', - \ 'coffeelint' - \) -endfunction - -function! ale_linters#coffee#coffeelint#GetCommand(buffer) abort - return ale_linters#coffee#coffeelint#GetExecutable(a:buffer) - \ . ' --stdin --reporter csv' -endfunction - -function! ale_linters#coffee#coffeelint#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " path,lineNumber,lineNumberEnd,level,message - " stdin,14,,error,Throwing strings is forbidden - " - " Note that we currently ignore lineNumberEnd for multiline errors - let l:pattern = 'stdin,\(\d\+\),\(\d*\),\(.\{-1,}\),\(.\+\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': str2nr(l:match[1]), - \ 'type': l:match[3] is# 'error' ? 'E' : 'W', - \ 'text': l:match[4], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('coffee', { -\ 'name': 'coffeelint', -\ 'executable': function('ale_linters#coffee#coffeelint#GetExecutable'), -\ 'command': function('ale_linters#coffee#coffeelint#GetCommand'), -\ 'callback': 'ale_linters#coffee#coffeelint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cc.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/cc.vim deleted file mode 100644 index 1d35bb67..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cc.vim +++ /dev/null @@ -1,67 +0,0 @@ -" Author: w0rp -" Description: A C++ compiler linter for C++ files with gcc/clang, etc. - -call ale#Set('cpp_cc_executable', '') -call ale#Set('cpp_cc_options', '-std=c++14 -Wall') -call ale#Set('cpp_cc_use_header_lang_flag', -1) -call ale#Set('cpp_cc_header_exts', ['h', 'hpp']) - -function! ale_linters#cpp#cc#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'cpp_cc_executable') - - " Default to either clang++ or gcc. - if l:executable is# '' - if ale#engine#IsExecutable(a:buffer, 'clang++') - let l:executable = 'clang++' - else - let l:executable = 'gcc' - endif - endif - - return l:executable -endfunction - -function! ale_linters#cpp#cc#GetCommand(buffer, output) abort - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - let l:ale_flags = ale#Var(a:buffer, 'cpp_cc_options') - - if l:cflags =~# '-std=' - let l:ale_flags = substitute( - \ l:ale_flags, - \ '-std=\(c\|gnu\)++[0-9]\{2\}', - \ '', - \ 'g') - endif - - " Select the correct language flag depending on the executable, options - " and file extension - let l:executable = ale_linters#cpp#cc#GetExecutable(a:buffer) - let l:use_header_lang_flag = ale#Var(a:buffer, 'cpp_cc_use_header_lang_flag') - let l:header_exts = ale#Var(a:buffer, 'cpp_cc_header_exts') - let l:lang_flag = ale#c#GetLanguageFlag( - \ a:buffer, - \ l:executable, - \ l:use_header_lang_flag, - \ l:header_exts, - \ 'c++') - - " -iquote with the directory the file is in makes #include work for - " headers in the same directory. - " - " `-o /dev/null` or `-o null` is needed to catch all errors, - " -fsyntax-only doesn't catch everything. - return '%e -S -x ' . l:lang_flag - \ . ' -o ' . g:ale#util#nul_file - \ . ' -iquote %s:h' - \ . ale#Pad(l:cflags) - \ . ale#Pad(l:ale_flags) . ' -' -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'cc', -\ 'aliases': ['gcc', 'clang', 'g++', 'clang++'], -\ 'output_stream': 'stderr', -\ 'executable': function('ale_linters#cpp#cc#GetExecutable'), -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#cpp#cc#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/ccls.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/ccls.vim deleted file mode 100644 index 38f8df9c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/ccls.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Ye Jingchen , Ben Falconer , jtalowell -" Description: A language server for C++ - -call ale#Set('cpp_ccls_executable', 'ccls') -call ale#Set('cpp_ccls_init_options', {}) -call ale#Set('c_build_dir', '') - -call ale#linter#Define('cpp', { -\ 'name': 'ccls', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'cpp_ccls_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale#handlers#ccls#GetProjectRoot'), -\ 'initialization_options': {b -> ale#handlers#ccls#GetInitOpts(b, 'cpp_ccls_init_options')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangcheck.vim deleted file mode 100644 index 4cb04864..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangcheck.vim +++ /dev/null @@ -1,35 +0,0 @@ -" Author: gagbo -" Description: clang-check linter for cpp files - -call ale#Set('cpp_clangcheck_executable', 'clang-check') -call ale#Set('cpp_clangcheck_options', '') -call ale#Set('c_build_dir', '') - -function! ale_linters#cpp#clangcheck#GetCommand(buffer) abort - let l:user_options = ale#Var(a:buffer, 'cpp_clangcheck_options') - - " Try to find compilation database to link automatically - let l:build_dir = ale#Var(a:buffer, 'c_build_dir') - - if empty(l:build_dir) - let [l:root, l:json_file] = ale#c#FindCompileCommands(a:buffer) - let l:build_dir = ale#path#Dirname(l:json_file) - endif - - " The extra arguments in the command are used to prevent .plist files from - " being generated. These are only added if no build directory can be - " detected. - return '%e -analyze %s' - \ . (empty(l:build_dir) ? ' --extra-arg=-Xclang --extra-arg=-analyzer-output=text --extra-arg=-fno-color-diagnostics': '') - \ . ale#Pad(l:user_options) - \ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '') -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'clangcheck', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'cpp_clangcheck_executable')}, -\ 'command': function('ale_linters#cpp#clangcheck#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangd.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangd.vim deleted file mode 100644 index 14f3fe55..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangd.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: Andrey Melentyev -" Description: Clangd language server - -call ale#Set('cpp_clangd_executable', 'clangd') -call ale#Set('cpp_clangd_options', '') -call ale#Set('c_build_dir', '') - -function! ale_linters#cpp#clangd#GetCommand(buffer) abort - let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'cpp_clangd_options')) - \ . (!empty(l:build_dir) ? ' -compile-commands-dir=' . ale#Escape(l:build_dir) : '') -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'clangd', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'cpp_clangd_executable')}, -\ 'command': function('ale_linters#cpp#clangd#GetCommand'), -\ 'project_root': function('ale#c#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangtidy.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangtidy.vim deleted file mode 100644 index d6944aae..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/clangtidy.vim +++ /dev/null @@ -1,53 +0,0 @@ -" Author: vdeurzen , w0rp , -" gagbo -" Description: clang-tidy linter for cpp files - -call ale#Set('cpp_clangtidy_executable', 'clang-tidy') -" Set this option to check the checks clang-tidy will apply. -call ale#Set('cpp_clangtidy_checks', []) -" Set this option to manually set some options for clang-tidy to use as compile -" flags. -" This will disable compile_commands.json detection. -call ale#Set('cpp_clangtidy_options', '') -" Set this option to manually set options for clang-tidy directly. -call ale#Set('cpp_clangtidy_extra_options', '') -call ale#Set('c_build_dir', '') - -function! ale_linters#cpp#clangtidy#GetCommand(buffer, output) abort - let l:checks = join(ale#Var(a:buffer, 'cpp_clangtidy_checks'), ',') - let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - let l:options = '' - - " Get the extra options if we couldn't find a build directory. - if empty(l:build_dir) - let l:options = ale#Var(a:buffer, 'cpp_clangtidy_options') - let l:cflags = ale#c#GetCFlags(a:buffer, a:output) - let l:options .= !empty(l:options) ? ale#Pad(l:cflags) : l:cflags - - " Tell clang-tidy a .h header with a C++ filetype in Vim is a C++ file - " only when compile-commands.json file is not there. Adding these - " flags makes clang-tidy completely ignore compile commmands. - if expand('#' . a:buffer) =~# '\.h$' - let l:options .= !empty(l:options) ? ' -x c++' : '-x c++' - endif - endif - - " Get the options to pass directly to clang-tidy - let l:extra_options = ale#Var(a:buffer, 'cpp_clangtidy_extra_options') - - return '%e' - \ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '') - \ . (!empty(l:extra_options) ? ' ' . ale#Escape(l:extra_options) : '') - \ . ' %s' - \ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '') - \ . (!empty(l:options) ? ' -- ' . l:options : '') -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'clangtidy', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'cpp_clangtidy_executable')}, -\ 'command': {b -> ale#c#RunMakeCommand(b, function('ale_linters#cpp#clangtidy#GetCommand'))}, -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/clazy.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/clazy.vim deleted file mode 100644 index 9b29ac9a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/clazy.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Description: clazy linter for cpp files (clang-based and Qt-oriented) - -call ale#Set('cpp_clazy_executable', 'clazy-standalone') -" Set this option to check the checks clazy will apply. -call ale#Set('cpp_clazy_checks', ['level1']) -" Set this option to manually set some options for clazy. -" This will disable compile_commands.json detection. -call ale#Set('cpp_clazy_options', '') -call ale#Set('c_build_dir', '') - -function! ale_linters#cpp#clazy#GetCommand(buffer) abort - let l:checks = join(ale#Var(a:buffer, 'cpp_clazy_checks'), ',') - let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - - " Get the extra options if we couldn't find a build directory. - let l:options = ale#Var(a:buffer, 'cpp_clazy_options') - - return '%e' - \ . (!empty(l:checks) ? ' -checks=' . ale#Escape(l:checks) : '') - \ . (!empty(l:build_dir) ? ' -p ' . ale#Escape(l:build_dir) : '') - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %s' -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'clazy', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'cpp_clazy_executable')}, -\ 'command': function('ale_linters#cpp#clazy#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cppcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/cppcheck.vim deleted file mode 100644 index eb86adf4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cppcheck.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: Bart Libert -" Description: cppcheck linter for cpp files - -call ale#Set('cpp_cppcheck_executable', 'cppcheck') -call ale#Set('cpp_cppcheck_options', '--enable=style') - -function! ale_linters#cpp#cppcheck#GetCommand(buffer) abort - let l:compile_commands_option = ale#handlers#cppcheck#GetCompileCommandsOptions(a:buffer) - let l:buffer_path_include = empty(l:compile_commands_option) - \ ? ale#handlers#cppcheck#GetBufferPathIncludeOptions(a:buffer) - \ : '' - let l:template = ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - - return '%e -q --language=c++' - \ . l:template - \ . ale#Pad(l:compile_commands_option) - \ . ale#Pad(ale#Var(a:buffer, 'cpp_cppcheck_options')) - \ . l:buffer_path_include - \ . ' %t' -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'cppcheck', -\ 'output_stream': 'both', -\ 'executable': {b -> ale#Var(b, 'cpp_cppcheck_executable')}, -\ 'cwd': function('ale#handlers#cppcheck#GetCwd'), -\ 'command': function('ale_linters#cpp#cppcheck#GetCommand'), -\ 'callback': 'ale#handlers#cppcheck#HandleCppCheckFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cpplint.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/cpplint.vim deleted file mode 100644 index f1f6ce7f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cpplint.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: Dawid Kurek https://github.com/dawikur -" Description: cpplint for cpp files - -call ale#Set('cpp_cpplint_executable', 'cpplint') -call ale#Set('cpp_cpplint_options', '') - -function! ale_linters#cpp#cpplint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'cpp_cpplint_options') - - return '%e' . ale#Pad(l:options) . ' %s' -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'cpplint', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'cpp_cpplint_executable')}, -\ 'command': function('ale_linters#cpp#cpplint#GetCommand'), -\ 'callback': 'ale#handlers#cpplint#HandleCppLintFormat', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cquery.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/cquery.vim deleted file mode 100644 index 2971cdcb..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cquery.vim +++ /dev/null @@ -1,30 +0,0 @@ -" Author: Ben Falconer -" Description: A language server for C++ - -call ale#Set('cpp_cquery_executable', 'cquery') -call ale#Set('cpp_cquery_cache_directory', expand('~/.cache/cquery')) - -function! ale_linters#cpp#cquery#GetProjectRoot(buffer) abort - " Try to find cquery configuration files first. - let l:config = ale#path#FindNearestFile(a:buffer, '.cquery') - - if !empty(l:config) - return fnamemodify(l:config, ':h') - endif - - " Fall back on default project root detection. - return ale#c#FindProjectRoot(a:buffer) -endfunction - -function! ale_linters#cpp#cquery#GetInitializationOptions(buffer) abort - return {'cacheDirectory': ale#Var(a:buffer, 'cpp_cquery_cache_directory')} -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'cquery', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'cpp_cquery_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale_linters#cpp#cquery#GetProjectRoot'), -\ 'initialization_options': function('ale_linters#cpp#cquery#GetInitializationOptions'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/cspell.vim deleted file mode 100644 index ace4c3b2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for C++ files. - -call ale#handlers#cspell#DefineLinter('cpp') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cpp/flawfinder.vim b/dotfiles/.vim/plugged/ale/ale_linters/cpp/flawfinder.vim deleted file mode 100644 index 5bfdea22..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cpp/flawfinder.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: Christian Gibbons -" Description: flawfinder linter for c++ files - -call ale#Set('cpp_flawfinder_executable', 'flawfinder') -call ale#Set('cpp_flawfinder_options', '') -call ale#Set('cpp_flawfinder_minlevel', 1) -call ale#Set('c_flawfinder_error_severity', 6) - -function! ale_linters#cpp#flawfinder#GetCommand(buffer) abort - " Set the minimum vulnerability level for flawfinder to bother with - let l:minlevel = ' --minlevel=' . ale#Var(a:buffer, 'cpp_flawfinder_minlevel') - - return '%e -CDQS' - \ . ale#Var(a:buffer, 'cpp_flawfinder_options') - \ . l:minlevel - \ . ' %t' -endfunction - -call ale#linter#Define('cpp', { -\ 'name': 'flawfinder', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'cpp_flawfinder_executable')}, -\ 'command': function('ale_linters#cpp#flawfinder#GetCommand'), -\ 'callback': 'ale#handlers#flawfinder#HandleFlawfinderFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/crystal/ameba.vim b/dotfiles/.vim/plugged/ale/ale_linters/crystal/ameba.vim deleted file mode 100644 index 5dfc7f45..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/crystal/ameba.vim +++ /dev/null @@ -1,57 +0,0 @@ -" Author: Harrison Bachrach - https://github.com/HarrisonB -" Description: Ameba, a linter for crystal files - -call ale#Set('crystal_ameba_executable', 'bin/ameba') - -function! ale_linters#crystal#ameba#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'crystal_ameba_executable') - - return ale#Escape(l:executable) - \ . ' --format json ' - \ . ale#Escape(expand('#' . a:buffer . ':p')) -endfunction - -" Handle output from ameba -function! ale_linters#crystal#ameba#HandleAmebaOutput(buffer, lines) abort - if len(a:lines) == 0 - return [] - endif - - let l:errors = ale#util#FuzzyJSONDecode(a:lines[0], {}) - - if !has_key(l:errors, 'summary') - \|| l:errors['summary']['issues_count'] == 0 - \|| empty(l:errors['sources']) - return [] - endif - - let l:output = [] - - for l:error in l:errors['sources'][0]['issues'] - let l:start_col = str2nr(l:error['location']['column']) - let l:end_col = str2nr(l:error['end_location']['column']) - - if !l:end_col - let l:end_col = l:start_col + 1 - endif - - call add(l:output, { - \ 'lnum': str2nr(l:error['location']['line']), - \ 'col': l:start_col, - \ 'end_col': l:end_col, - \ 'code': l:error['rule_name'], - \ 'text': l:error['message'], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('crystal', { -\ 'name': 'ameba', -\ 'executable': {b -> ale#Var(b, 'crystal_ameba_executable')}, -\ 'command': function('ale_linters#crystal#ameba#GetCommand'), -\ 'callback': 'ale_linters#crystal#ameba#HandleAmebaOutput', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/crystal/crystal.vim b/dotfiles/.vim/plugged/ale/ale_linters/crystal/crystal.vim deleted file mode 100644 index 8a905b12..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/crystal/crystal.vim +++ /dev/null @@ -1,35 +0,0 @@ -" Author: Jordan Andree , David Alexander -" Description: This file adds support for checking Crystal with crystal build - -function! ale_linters#crystal#crystal#Handle(buffer, lines) abort - let l:output = [] - - for l:error in ale#util#FuzzyJSONDecode(a:lines, []) - if !has_key(l:error, 'file') - continue - endif - - call add(l:output, { - \ 'lnum': l:error.line + 0, - \ 'col': l:error.column + 0, - \ 'text': l:error.message, - \}) - endfor - - return l:output -endfunction - -function! ale_linters#crystal#crystal#GetCommand(buffer) abort - return 'crystal build -f json --no-codegen --no-color -o ' - \ . ale#Escape(g:ale#util#nul_file) - \ . ' %s' -endfunction - -call ale#linter#Define('crystal', { -\ 'name': 'crystal', -\ 'executable': 'crystal', -\ 'output_stream': 'both', -\ 'lint_file': 1, -\ 'command': function('ale_linters#crystal#crystal#GetCommand'), -\ 'callback': 'ale_linters#crystal#crystal#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cs/csc.vim b/dotfiles/.vim/plugged/ale/ale_linters/cs/csc.vim deleted file mode 100644 index 5ee3de29..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cs/csc.vim +++ /dev/null @@ -1,90 +0,0 @@ -call ale#Set('cs_csc_options', '') -call ale#Set('cs_csc_source', '') -call ale#Set('cs_csc_assembly_path', []) -call ale#Set('cs_csc_assemblies', []) - -function! ale_linters#cs#csc#GetCwd(buffer) abort - let l:cwd = ale#Var(a:buffer, 'cs_csc_source') - - return !empty(l:cwd) ? l:cwd : expand('#' . a:buffer . ':p:h') -endfunction - -function! ale_linters#cs#csc#GetCommand(buffer) abort - " Pass assembly paths via the -lib: parameter. - let l:path_list = ale#Var(a:buffer, 'cs_csc_assembly_path') - - let l:lib_option = !empty(l:path_list) - \ ? '/lib:' . join(map(copy(l:path_list), 'ale#Escape(v:val)'), ',') - \ : '' - - " Pass paths to DLL files via the -r: parameter. - let l:assembly_list = ale#Var(a:buffer, 'cs_csc_assemblies') - - let l:r_option = !empty(l:assembly_list) - \ ? '/r:' . join(map(copy(l:assembly_list), 'ale#Escape(v:val)'), ',') - \ : '' - - " register temporary module target file with ale - " register temporary module target file with ALE. - let l:out = ale#command#CreateFile(a:buffer) - - " The code is compiled as a module and the output is redirected to a - " temporary file. - return 'csc /unsafe' - \ . ale#Pad(ale#Var(a:buffer, 'cs_csc_options')) - \ . ale#Pad(l:lib_option) - \ . ale#Pad(l:r_option) - \ . ' /out:' . l:out - \ . ' /t:module' - \ . ' /recurse:' . ale#Escape('*.cs') -endfunction - -function! ale_linters#cs#csc#Handle(buffer, lines) abort - " Look for lines like the following. - " - " Tests.cs(12,29): error CSXXXX: ; expected - " - " NOTE: pattern also captures file name as linter compiles all - " files within the source tree rooted at the specified source - " path and not just the file loaded in the buffer - let l:patterns = [ - \ '^\v(.+\.cs)\((\d+),(\d+)\)\:\s+([^ ]+)\s+([cC][sS][^ ]+):\s(.+)$', - \ '^\v([^ ]+)\s+([Cc][sS][^ ]+):\s+(.+)$', - \] - let l:output = [] - let l:dir = ale_linters#cs#csc#GetCwd(a:buffer) - - for l:match in ale#util#GetMatches(a:lines, l:patterns) - if len(l:match) > 6 && strlen(l:match[5]) > 2 && l:match[5][:1] is? 'CS' - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'type': l:match[4] is# 'error' ? 'E' : 'W', - \ 'code': l:match[5], - \ 'text': l:match[6] , - \}) - elseif strlen(l:match[2]) > 2 && l:match[2][:1] is? 'CS' - call add(l:output, { - \ 'filename':'', - \ 'lnum': -1, - \ 'col': -1, - \ 'type': l:match[1] is# 'error' ? 'E' : 'W', - \ 'code': l:match[2], - \ 'text': l:match[3], - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('cs',{ -\ 'name': 'csc', -\ 'output_stream': 'stdout', -\ 'executable': 'csc', -\ 'cwd': function('ale_linters#cs#csc#GetCwd'), -\ 'command': function('ale_linters#cs#csc#GetCommand'), -\ 'callback': 'ale_linters#cs#csc#Handle', -\ 'lint_file': 1 -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cs/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/cs/cspell.vim deleted file mode 100644 index c62dd11b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cs/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for C# files. - -call ale#handlers#cspell#DefineLinter('cs') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cs/mcs.vim b/dotfiles/.vim/plugged/ale/ale_linters/cs/mcs.vim deleted file mode 100644 index 1b373e73..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cs/mcs.vim +++ /dev/null @@ -1,37 +0,0 @@ -let g:ale_cs_mcs_options = get(g:, 'ale_cs_mcs_options', '') - -function! ale_linters#cs#mcs#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'cs_mcs_options') - - return 'mcs -unsafe --parse' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %t' -endfunction - -function! ale_linters#cs#mcs#Handle(buffer, lines) abort - " Look for lines like the following. - " - " Tests.cs(12,29): error CSXXXX: ; expected - let l:pattern = '^\v(.+\.cs)\((\d+),(\d+)\)\: ([^ ]+) ([^ ]+): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'type': l:match[4] is# 'error' ? 'E' : 'W', - \ 'code': l:match[5], - \ 'text': l:match[6], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('cs',{ -\ 'name': 'mcs', -\ 'output_stream': 'stderr', -\ 'executable': 'mcs', -\ 'command': function('ale_linters#cs#mcs#GetCommand'), -\ 'callback': 'ale_linters#cs#mcs#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cs/mcsc.vim b/dotfiles/.vim/plugged/ale/ale_linters/cs/mcsc.vim deleted file mode 100644 index 2dd46661..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cs/mcsc.vim +++ /dev/null @@ -1,91 +0,0 @@ -call ale#Set('cs_mcsc_options', '') -call ale#Set('cs_mcsc_source', '') -call ale#Set('cs_mcsc_assembly_path', []) -call ale#Set('cs_mcsc_assemblies', []) - -function! ale_linters#cs#mcsc#GetCwd(buffer) abort - let l:cwd = ale#Var(a:buffer, 'cs_mcsc_source') - - return !empty(l:cwd) ? l:cwd : expand('#' . a:buffer . ':p:h') -endfunction - -function! ale_linters#cs#mcsc#GetCommand(buffer) abort - " Pass assembly paths via the -lib: parameter. - let l:path_list = ale#Var(a:buffer, 'cs_mcsc_assembly_path') - - let l:lib_option = !empty(l:path_list) - \ ? '-lib:' . join(map(copy(l:path_list), 'ale#Escape(v:val)'), ',') - \ : '' - - " Pass paths to DLL files via the -r: parameter. - let l:assembly_list = ale#Var(a:buffer, 'cs_mcsc_assemblies') - - let l:r_option = !empty(l:assembly_list) - \ ? '-r:' . join(map(copy(l:assembly_list), 'ale#Escape(v:val)'), ',') - \ : '' - - " register temporary module target file with ale - " register temporary module target file with ALE. - let l:out = ale#command#CreateFile(a:buffer) - - " The code is compiled as a module and the output is redirected to a - " temporary file. - return 'mcs -unsafe' - \ . ale#Pad(ale#Var(a:buffer, 'cs_mcsc_options')) - \ . ale#Pad(l:lib_option) - \ . ale#Pad(l:r_option) - \ . ' -out:' . l:out - \ . ' -t:module' - \ . ' -recurse:' . ale#Escape('*.cs') -endfunction - -function! ale_linters#cs#mcsc#Handle(buffer, lines) abort - " Look for lines like the following. - " - " Tests.cs(12,29): error CSXXXX: ; expected - " - " NOTE: pattern also captures file name as linter compiles all - " files within the source tree rooted at the specified source - " path and not just the file loaded in the buffer - let l:patterns = [ - \ '^\v(.+\.cs)\((\d+),(\d+)\)\:\s+([^ ]+)\s+([cC][sS][^ ]+):\s(.+)$', - \ '^\v([^ ]+)\s+([Cc][sS][^ ]+):\s+(.+)$', - \] - let l:output = [] - - let l:dir = ale_linters#cs#mcsc#GetCwd(a:buffer) - - for l:match in ale#util#GetMatches(a:lines, l:patterns) - if len(l:match) > 6 && strlen(l:match[5]) > 2 && l:match[5][:1] is? 'CS' - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'type': l:match[4] is# 'error' ? 'E' : 'W', - \ 'code': l:match[5], - \ 'text': l:match[6] , - \}) - elseif strlen(l:match[2]) > 2 && l:match[2][:1] is? 'CS' - call add(l:output, { - \ 'filename':'', - \ 'lnum': -1, - \ 'col': -1, - \ 'type': l:match[1] is# 'error' ? 'E' : 'W', - \ 'code': l:match[2], - \ 'text': l:match[3], - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('cs',{ -\ 'name': 'mcsc', -\ 'output_stream': 'stderr', -\ 'executable': 'mcs', -\ 'cwd': function('ale_linters#cs#mcsc#GetCwd'), -\ 'command': function('ale_linters#cs#mcsc#GetCommand'), -\ 'callback': 'ale_linters#cs#mcsc#Handle', -\ 'lint_file': 1 -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/css/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/css/cspell.vim deleted file mode 100644 index d42375b4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/css/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for CSS files. - -call ale#handlers#cspell#DefineLinter('css') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/css/csslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/css/csslint.vim deleted file mode 100644 index 50c21ce2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/css/csslint.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: w0rp -" Description: This file adds support for checking CSS code with csslint. - -function! ale_linters#css#csslint#GetCommand(buffer) abort - let l:csslintrc = ale#path#FindNearestFile(a:buffer, '.csslintrc') - let l:config_option = !empty(l:csslintrc) - \ ? '--config=' . ale#Escape(l:csslintrc) - \ : '' - - return 'csslint --format=compact ' . l:config_option . ' %t' -endfunction - -call ale#linter#Define('css', { -\ 'name': 'csslint', -\ 'executable': 'csslint', -\ 'command': function('ale_linters#css#csslint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleCSSLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/css/fecs.vim b/dotfiles/.vim/plugged/ale/ale_linters/css/fecs.vim deleted file mode 100644 index 511847c6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/css/fecs.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: harttle -" Description: fecs for CSS files - -call ale#linter#Define('css', { -\ 'name': 'fecs', -\ 'executable': function('ale#handlers#fecs#GetExecutable'), -\ 'command': function('ale#handlers#fecs#GetCommand'), -\ 'callback': 'ale#handlers#fecs#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/css/stylelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/css/stylelint.vim deleted file mode 100644 index e508f392..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/css/stylelint.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Author: diartyz - -call ale#Set('css_stylelint_executable', 'stylelint') -call ale#Set('css_stylelint_options', '') -call ale#Set('css_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#css#stylelint#GetCommand(buffer) abort - return '%e ' . ale#Pad(ale#Var(a:buffer, 'css_stylelint_options')) - \ . ' --stdin-filename %s' -endfunction - -call ale#linter#Define('css', { -\ 'name': 'stylelint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'css_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#css#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/css/vscodecss.vim b/dotfiles/.vim/plugged/ale/ale_linters/css/vscodecss.vim deleted file mode 100644 index 2d59adf0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/css/vscodecss.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: Dalius Dobravolskas -" Description: VSCode css language server - -function! ale_linters#css#vscodecss#GetProjectRoot(buffer) abort - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -call ale#linter#Define('css', { -\ 'name': 'vscodecss', -\ 'lsp': 'stdio', -\ 'executable': 'vscode-css-language-server', -\ 'command': '%e --stdio', -\ 'project_root': function('ale_linters#css#vscodecss#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cucumber/cucumber.vim b/dotfiles/.vim/plugged/ale/ale_linters/cucumber/cucumber.vim deleted file mode 100644 index 0cfd815e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cucumber/cucumber.vim +++ /dev/null @@ -1,46 +0,0 @@ -" Author: Eddie Lebow https://github.com/elebow -" Description: Cucumber, a BDD test tool - -function! ale_linters#cucumber#cucumber#GetCommand(buffer) abort - let l:features_dir = ale#path#FindNearestDirectory(a:buffer, 'features') - - if !empty(l:features_dir) - let l:features_arg = '-r ' . ale#Escape(l:features_dir) - else - let l:features_arg = '' - endif - - return 'cucumber --dry-run --quiet --strict --format=json ' - \ . l:features_arg . ' %t' -endfunction - -function! ale_linters#cucumber#cucumber#Handle(buffer, lines) abort - try - let l:json = ale#util#FuzzyJSONDecode(a:lines, {})[0] - catch - return [] - endtry - - let l:output = [] - - for l:element in get(l:json, 'elements', []) - for l:step in l:element['steps'] - if l:step['result']['status'] is# 'undefined' - call add(l:output, { - \ 'lnum': l:step['line'], - \ 'code': 'E', - \ 'text': 'Undefined step' - \}) - endif - endfor - endfor - - return l:output -endfunction - -call ale#linter#Define('cucumber', { -\ 'name': 'cucumber', -\ 'executable': 'cucumber', -\ 'command': function('ale_linters#cucumber#cucumber#GetCommand'), -\ 'callback': 'ale_linters#cucumber#cucumber#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cuda/clangd.vim b/dotfiles/.vim/plugged/ale/ale_linters/cuda/clangd.vim deleted file mode 100644 index bfda821b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cuda/clangd.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Tommy Chiang -" Description: Clangd language server for CUDA (modified from Andrey -" Melentyev's implementation for C++) - -call ale#Set('cuda_clangd_executable', 'clangd') -call ale#Set('cuda_clangd_options', '') -call ale#Set('c_build_dir', '') - -function! ale_linters#cuda#clangd#GetCommand(buffer) abort - let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'cuda_clangd_options')) - \ . (!empty(l:build_dir) ? ' -compile-commands-dir=' . ale#Escape(l:build_dir) : '') -endfunction - -call ale#linter#Define('cuda', { -\ 'name': 'clangd', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'cuda_clangd_executable')}, -\ 'command': function('ale_linters#cuda#clangd#GetCommand'), -\ 'project_root': function('ale#c#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cuda/nvcc.vim b/dotfiles/.vim/plugged/ale/ale_linters/cuda/nvcc.vim deleted file mode 100644 index 2734f6ec..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cuda/nvcc.vim +++ /dev/null @@ -1,46 +0,0 @@ -" Author: blahgeek -" Description: NVCC linter for cuda files - -call ale#Set('cuda_nvcc_executable', 'nvcc') -call ale#Set('cuda_nvcc_options', '-std=c++11') - -function! ale_linters#cuda#nvcc#GetCommand(buffer) abort - return '%e -cuda' - \ . ale#Pad(ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer))) - \ . ale#Pad(ale#Var(a:buffer, 'cuda_nvcc_options')) - \ . ' %s -o ' . g:ale#util#nul_file -endfunction - -function! ale_linters#cuda#nvcc#HandleNVCCFormat(buffer, lines) abort - " Look for lines like the following. - " - " test.cu(8): error: argument of type "void *" is incompatible with parameter of type "int *" - let l:pattern = '\v^([^:\(\)]+):?\(?(\d+)\)?:(\d+)?:?\s*\w*\s*(error|warning): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': str2nr(l:match[2]), - \ 'type': l:match[4] =~# 'error' ? 'E' : 'W', - \ 'text': l:match[5], - \ 'filename': fnamemodify(l:match[1], ':p'), - \} - - if !empty(l:match[3]) - let l:item.col = str2nr(l:match[3]) - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('cuda', { -\ 'name': 'nvcc', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'cuda_nvcc_executable')}, -\ 'command': function('ale_linters#cuda#nvcc#GetCommand'), -\ 'callback': 'ale_linters#cuda#nvcc#HandleNVCCFormat', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/cypher/cypher_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/cypher/cypher_lint.vim deleted file mode 100644 index 408ddd6e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/cypher/cypher_lint.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Francisco Lopes -" Description: Linting for Neo4j's Cypher - -function! ale_linters#cypher#cypher_lint#Handle(buffer, lines) abort - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+): (.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \ 'type': 'E', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('cypher', { -\ 'name': 'cypher_lint', -\ 'executable': 'cypher-lint', -\ 'command': 'cypher-lint', -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#cypher#cypher_lint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/d/dls.vim b/dotfiles/.vim/plugged/ale/ale_linters/d/dls.vim deleted file mode 100644 index 78d1c152..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/d/dls.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: aurieh -" Description: A Language Server implementation for D - -call ale#Set('d_dls_executable', 'dls') - -function! ale_linters#d#dls#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'd_dls_executable') -endfunction - -function! ale_linters#d#dls#FindProjectRoot(buffer) abort - " Note: this will return . if dub config is empty - " dls can run outside DUB projects just fine - return fnamemodify(ale#d#FindDUBConfig(a:buffer), ':h') -endfunction - -call ale#linter#Define('d', { -\ 'name': 'dls', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#d#dls#GetExecutable'), -\ 'command': function('ale_linters#d#dls#GetExecutable'), -\ 'project_root': function('ale_linters#d#dls#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/d/dmd.vim b/dotfiles/.vim/plugged/ale/ale_linters/d/dmd.vim deleted file mode 100644 index f38e812c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/d/dmd.vim +++ /dev/null @@ -1,116 +0,0 @@ -" Author: w0rp -" Description: "dmd for D files" - -function! s:GetDUBCommand(buffer) abort - " If we can't run dub, then skip this command. - if executable('dub') - " Returning an empty string skips to the DMD command. - let l:config = ale#d#FindDUBConfig(a:buffer) - - " To support older dub versions, we just change the directory to the - " directory where we found the dub config, and then run `dub describe` - " from that directory. - if !empty(l:config) - return [fnamemodify(l:config, ':h'), 'dub describe --data-list - \ --data=import-paths - \ --data=string-import-paths - \ --data=versions - \ --data=debug-versions - \'] - endif - endif - - return ['', ''] -endfunction - -function! ale_linters#d#dmd#RunDUBCommand(buffer) abort - let [l:cwd, l:command] = s:GetDUBCommand(a:buffer) - - if empty(l:command) - " If we can't run DUB, just run DMD. - return ale_linters#d#dmd#DMDCommand(a:buffer, [], {}) - endif - - return ale#command#Run( - \ a:buffer, - \ l:command, - \ function('ale_linters#d#dmd#DMDCommand'), - \ {'cwd': l:cwd}, - \) -endfunction - -function! ale_linters#d#dmd#DMDCommand(buffer, dub_output, meta) abort - let l:import_list = [] - let l:str_import_list = [] - let l:versions_list = [] - let l:deb_versions_list = [] - let l:list_ind = 1 - let l:seen_line = 0 - - " Build a list of options generated from DUB, if available. - " DUB output each path or version on a single line. - " Each list is separated by a blank line. - " Empty list are represented by a blank line (followed and/or - " preceded by a separation blank line) - for l:line in a:dub_output - " line still has end of line char on windows - let l:line = substitute(l:line, '[\r\n]*$', '', '') - - if !empty(l:line) - if l:list_ind == 1 - call add(l:import_list, '-I' . ale#Escape(l:line)) - elseif l:list_ind == 2 - call add(l:str_import_list, '-J' . ale#Escape(l:line)) - elseif l:list_ind == 3 - call add(l:versions_list, '-version=' . ale#Escape(l:line)) - elseif l:list_ind == 4 - call add(l:deb_versions_list, '-debug=' . ale#Escape(l:line)) - endif - - let l:seen_line = 1 - elseif !l:seen_line - " if list is empty must skip one empty line - let l:seen_line = 1 - else - let l:seen_line = 0 - let l:list_ind += 1 - endif - endfor - - return 'dmd ' . join(l:import_list) . ' ' . - \ join(l:str_import_list) . ' ' . - \ join(l:versions_list) . ' ' . - \ join(l:deb_versions_list) . ' -o- -wi -vcolumns -c %t' -endfunction - -function! ale_linters#d#dmd#Handle(buffer, lines) abort - " Matches patterns lines like the following: - " /tmp/tmp.qclsa7qLP7/file.d(1): Error: function declaration without return type. (Note that constructors are always named 'this') - " /tmp/tmp.G1L5xIizvB.d(8,8): Error: module weak_reference is in file 'dstruct/weak_reference.d' which cannot be read - let l:pattern = '\v^(\f+)\((\d+)(,(\d+))?\): (\w+): (.+)$' - let l:output = [] - let l:dir = expand('#' . a:buffer . ':p:h') - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - " If dmd was invoked with relative path, match[1] is relative, otherwise it is absolute. - " As we invoke dmd with the buffer path (in /tmp), this will generally be absolute already - let l:fname = ale#path#GetAbsPath(l:dir, l:match[1]) - call add(l:output, { - \ 'filename': l:fname, - \ 'lnum': l:match[2], - \ 'col': l:match[4], - \ 'type': l:match[5] is# 'Warning' || l:match[5] is# 'Deprecation' ? 'W' : 'E', - \ 'text': l:match[6], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('d', { -\ 'name': 'dmd', -\ 'executable': 'dmd', -\ 'command': function('ale_linters#d#dmd#RunDUBCommand'), -\ 'callback': 'ale_linters#d#dmd#Handle', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/dafny/dafny.vim b/dotfiles/.vim/plugged/ale/ale_linters/dafny/dafny.vim deleted file mode 100644 index 2a9f761a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/dafny/dafny.vim +++ /dev/null @@ -1,41 +0,0 @@ -" Author: Taylor Blau - -function! ale_linters#dafny#dafny#Handle(buffer, lines) abort - let l:pattern = '\v(.*)\((\d+),(\d+)\): (.*): (.*)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'filename': l:match[1], - \ 'col': l:match[3] + 0, - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[5], - \ 'type': l:match[4] =~# '^Error' ? 'E' : 'W' - \ }) - endfor - - for l:match in ale#util#GetMatches(a:lines, '\v(.*)\((\d+),(\d+)\): (Verification of .{-} timed out after \d+ seconds)') - call add(l:output, { - \ 'filename': l:match[1], - \ 'col': l:match[3] + 0, - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[4], - \ 'type': 'E', - \ }) - endfor - - return l:output -endfunction - -function! ale_linters#dafny#dafny#GetCommand(buffer) abort - return printf('dafny %%s /compile:0 /timeLimit:%d', ale#Var(a:buffer, 'dafny_dafny_timelimit')) -endfunction - -call ale#Set('dafny_dafny_timelimit', 10) -call ale#linter#Define('dafny', { -\ 'name': 'dafny', -\ 'executable': 'dafny', -\ 'command': function('ale_linters#dafny#dafny#GetCommand'), -\ 'callback': 'ale_linters#dafny#dafny#Handle', -\ 'lint_file': 1, -\ }) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/dart/analysis_server.vim b/dotfiles/.vim/plugged/ale/ale_linters/dart/analysis_server.vim deleted file mode 100644 index a6870da9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/dart/analysis_server.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: Nelson Yeung -" Description: Check Dart files with dart analysis server LSP - -call ale#Set('dart_analysis_server_executable', 'dart') - -function! ale_linters#dart#analysis_server#GetProjectRoot(buffer) abort - " Note: pub only looks for pubspec.yaml, there's no point in adding - " support for pubspec.yml - let l:pubspec = ale#path#FindNearestFile(a:buffer, 'pubspec.yaml') - - return !empty(l:pubspec) ? fnamemodify(l:pubspec, ':h:h') : '.' -endfunction - -function! ale_linters#dart#analysis_server#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'dart_analysis_server_executable') - let l:dart = resolve(exepath(l:executable)) - - return '%e ' - \ . fnamemodify(l:dart, ':h') . '/snapshots/analysis_server.dart.snapshot' - \ . ' --lsp' -endfunction - -call ale#linter#Define('dart', { -\ 'name': 'analysis_server', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'dart_analysis_server_executable')}, -\ 'command': function('ale_linters#dart#analysis_server#GetCommand'), -\ 'project_root': function('ale_linters#dart#analysis_server#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/dart/dart_analyze.vim b/dotfiles/.vim/plugged/ale/ale_linters/dart/dart_analyze.vim deleted file mode 100644 index 7d67c31c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/dart/dart_analyze.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: ghsang -" Description: Check Dart files with dart analyze - -call ale#Set('dart_analyze_executable', 'dart') - -function! ale_linters#dart#dart_analyze#Handle(buffer, lines) abort - let l:pattern = '\v([a-z]+) - (.+):(\d+):(\d+) - (.+) - (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let [l:type, l:filename, l:lnum, l:col, l:message, l:code] = l:match[1:6] - call add(l:output, { - \ 'type': l:type is# 'error' ? 'E' : l:type is# 'info' ? 'I' : 'W', - \ 'text': l:code . ': ' . l:message, - \ 'lnum': str2nr(l:lnum), - \ 'col': str2nr(l:col), - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('dart', { -\ 'name': 'dart_analyze', -\ 'executable': {b -> ale#Var(b, 'dart_analyze_executable')}, -\ 'command': '%e analyze --fatal-infos %s', -\ 'callback': 'ale_linters#dart#dart_analyze#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/dart/language_server.vim b/dotfiles/.vim/plugged/ale/ale_linters/dart/language_server.vim deleted file mode 100644 index d0e639c8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/dart/language_server.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: aurieh -" Description: A language server for dart - -call ale#Set('dart_language_server_executable', 'dart_language_server') - -function! ale_linters#dart#language_server#GetProjectRoot(buffer) abort - " Note: pub only looks for pubspec.yaml, there's no point in adding - " support for pubspec.yml - let l:pubspec = ale#path#FindNearestFile(a:buffer, 'pubspec.yaml') - - return !empty(l:pubspec) ? fnamemodify(l:pubspec, ':h:h') : '' -endfunction - -call ale#linter#Define('dart', { -\ 'name': 'language_server', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'dart_language_server_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale_linters#dart#language_server#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/desktop/desktop_file_validate.vim b/dotfiles/.vim/plugged/ale/ale_linters/desktop/desktop_file_validate.vim deleted file mode 100644 index 5a97d315..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/desktop/desktop_file_validate.vim +++ /dev/null @@ -1,31 +0,0 @@ -call ale#Set('desktop_desktop_file_validate_options', '') - -" Example matches for pattern: -" -" foo.desktop: warning: key "TerminalOptions" in group ... -" foo.desktop: error: action "new-private-window" is defined, ... -let s:pattern = '\v^(.+): ([a-z]+): (.+)$' - -function! ale_linters#desktop#desktop_file_validate#Handle(buffer, lines) abort - " The error format doesn't specify lines, so we can just put all of the - " errors on line 1. - return ale#util#MapMatches(a:lines, s:pattern, {match -> { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': match[2] is? 'error' ? 'E' : 'W', - \ 'text': match[3], - \}}) -endfunction - -call ale#linter#Define('desktop', { -\ 'name': 'desktop_file_validate', -\ 'aliases': ['desktop-file-validate'], -\ 'executable': 'desktop-file-validate', -\ 'command': {b -> -\ '%e' -\ . ale#Pad(ale#Var(b, 'desktop_desktop_file_validate_options')) -\ . ' %t' -\ }, -\ 'callback': 'ale_linters#desktop#desktop_file_validate#Handle', -\ 'output_stream': 'both', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/dockerfile/dockerfile_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/dockerfile/dockerfile_lint.vim deleted file mode 100644 index 0c0ad533..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/dockerfile/dockerfile_lint.vim +++ /dev/null @@ -1,76 +0,0 @@ -" Author: Alexander Olofsson - -call ale#Set('dockerfile_dockerfile_lint_executable', 'dockerfile_lint') -call ale#Set('dockerfile_dockerfile_lint_options', '') - -function! ale_linters#dockerfile#dockerfile_lint#GetType(type) abort - if a:type is? 'error' - return 'E' - elseif a:type is? 'warn' - return 'W' - endif - - return 'I' -endfunction - -function! ale_linters#dockerfile#dockerfile_lint#Handle(buffer, lines) abort - try - let l:data = json_decode(join(a:lines, '')) - catch - return [] - endtry - - if empty(l:data) - " Should never happen, but it's better to be on the safe side - return [] - endif - - let l:messages = [] - - for l:type in ['error', 'warn', 'info'] - for l:object in l:data[l:type]['data'] - let l:line = get(l:object, 'line', -1) - let l:message = l:object['message'] - - let l:link = get(l:object, 'reference_url', '') - - if type(l:link) == v:t_list - " Somehow, reference_url is returned as two-part list. - " Anchor markers in that list are sometimes duplicated. - " See https://github.com/projectatomic/dockerfile_lint/issues/134 - let l:link = join(l:link, '') - let l:link = substitute(l:link, '##', '#', '') - endif - - let l:detail = l:message - - if get(l:object, 'description', 'None') isnot# 'None' - let l:detail .= "\n\n" . l:object['description'] - endif - - let l:detail .= "\n\n" . l:link - - call add(l:messages, { - \ 'lnum': l:line, - \ 'text': l:message, - \ 'type': ale_linters#dockerfile#dockerfile_lint#GetType(l:type), - \ 'detail': l:detail, - \}) - endfor - endfor - - return l:messages -endfunction - -function! ale_linters#dockerfile#dockerfile_lint#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'dockerfile_dockerfile_lint_options')) - \ . ' -p -j -f' - \ . ' %t' -endfunction - -call ale#linter#Define('dockerfile', { -\ 'name': 'dockerfile_lint', -\ 'executable': {b -> ale#Var(b, 'dockerfile_dockerfile_lint_executable')}, -\ 'command': function('ale_linters#dockerfile#dockerfile_lint#GetCommand'), -\ 'callback': 'ale_linters#dockerfile#dockerfile_lint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/dockerfile/hadolint.vim b/dotfiles/.vim/plugged/ale/ale_linters/dockerfile/hadolint.vim deleted file mode 100644 index 278e9466..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/dockerfile/hadolint.vim +++ /dev/null @@ -1,122 +0,0 @@ -" Author: hauleth - https://github.com/hauleth - -" always, yes, never -call ale#Set('dockerfile_hadolint_use_docker', 'never') -call ale#Set('dockerfile_hadolint_docker_image', 'hadolint/hadolint') - -function! ale_linters#dockerfile#hadolint#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " -:19 DL3001 warning: Pipe chain should start with a raw value. - " /dev/stdin:19:3 unexpected thing - let l:pattern = '\v^%(/dev/stdin|-):(\d+):?(\d+)? ((DL|SC)(\d+) )?((.+)?: )?(.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:lnum = 0 - let l:colnum = 0 - - if l:match[1] isnot# '' - let l:lnum = l:match[1] + 0 - endif - - if l:match[2] isnot# '' - let l:colnum = l:match[2] + 0 - endif - - " Shellcheck knows a 'style' severity - pin it to info level as well. - if l:match[7] is# 'style' - let l:type = 'I' - elseif l:match[7] is# 'info' - let l:type = 'I' - elseif l:match[7] is# 'warning' - let l:type = 'W' - else - let l:type = 'E' - endif - - let l:text = l:match[8] - let l:detail = l:match[8] - let l:domain = 'https://github.com/hadolint/hadolint/wiki/' - let l:code = '' - let l:link = '' - - if l:match[4] is# 'SC' - let l:domain = 'https://github.com/koalaman/shellcheck/wiki/' - endif - - if l:match[5] isnot# '' - let l:code = l:match[4] . l:match[5] - let l:link = ' ( ' . l:domain . l:code . ' )' - let l:text = l:code . ': ' . l:detail - let l:detail = l:code . l:link . "\n\n" . l:detail - else - let l:type = 'E' - let l:detail = 'hadolint could not parse the file because of a syntax error.' - endif - - let l:line_output = { - \ 'lnum': l:lnum, - \ 'col': l:colnum, - \ 'type': l:type, - \ 'text': l:text, - \ 'detail': l:detail - \} - - if l:code isnot# '' - let l:line_output['code'] = l:code - endif - - call add(l:output, l:line_output) - endfor - - return l:output -endfunction - -" This is a little different than the typical 'executable' callback. We want -" to afford the user the chance to say always use docker, never use docker, -" and use docker if the hadolint executable is not present on the system. -" -" In the case of neither docker nor hadolint executables being present, it -" really doesn't matter which we return -- either will have the effect of -" 'nope, can't use this linter!'. - -function! ale_linters#dockerfile#hadolint#GetExecutable(buffer) abort - let l:use_docker = ale#Var(a:buffer, 'dockerfile_hadolint_use_docker') - - " check for mandatory directives - if l:use_docker is# 'never' - return 'hadolint' - elseif l:use_docker is# 'always' - return 'docker' - endif - - " if we reach here, we want to use 'hadolint' if present... - if executable('hadolint') - return 'hadolint' - endif - - "... and 'docker' as a fallback. - return 'docker' -endfunction - -function! ale_linters#dockerfile#hadolint#GetCommand(buffer) abort - let l:command = ale_linters#dockerfile#hadolint#GetExecutable(a:buffer) - let l:opts = '--no-color -' - - if l:command is# 'docker' - return printf('docker run --rm -i %s hadolint %s', - \ ale#Var(a:buffer, 'dockerfile_hadolint_docker_image'), - \ l:opts) - endif - - return 'hadolint ' . l:opts -endfunction - - -call ale#linter#Define('dockerfile', { -\ 'name': 'hadolint', -\ 'executable': function('ale_linters#dockerfile#hadolint#GetExecutable'), -\ 'command': function('ale_linters#dockerfile#hadolint#GetCommand'), -\ 'callback': 'ale_linters#dockerfile#hadolint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/elixir/credo.vim b/dotfiles/.vim/plugged/ale/ale_linters/elixir/credo.vim deleted file mode 100644 index d6a861f4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/elixir/credo.vim +++ /dev/null @@ -1,71 +0,0 @@ -" Author: hauleth - https://github.com/hauleth - -function! ale_linters#elixir#credo#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " lib/filename.ex:19:7: F: Pipe chain should start with a raw value. - let l:pattern = '\v:(\d+):?(\d+)?: (.): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:type = l:match[3] - let l:text = l:match[4] - - " Refactoring opportunities - if l:type is# 'F' - let l:type = 'W' - " Consistency - elseif l:type is# 'C' - let l:type = 'W' - " Software Design - elseif l:type is# 'D' - let l:type = 'I' - " Code Readability - elseif l:type is# 'R' - let l:type = 'I' - endif - - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:type, - \ 'text': l:text, - \}) - endfor - - return l:output -endfunction - -function! ale_linters#elixir#credo#GetMode() abort - if get(g:, 'ale_elixir_credo_strict', 0) - return '--strict' - else - return 'suggest' - endif -endfunction - -function! ale_linters#elixir#credo#GetConfigFile() abort - let l:config_file = get(g:, 'ale_elixir_credo_config_file', '') - - if empty(l:config_file) - return '' - endif - - return ' --config-file ' . l:config_file -endfunction - -function! ale_linters#elixir#credo#GetCommand(buffer) abort - return 'mix help credo && ' - \ . 'mix credo ' . ale_linters#elixir#credo#GetMode() - \ . ale_linters#elixir#credo#GetConfigFile() - \ . ' --format=flycheck --read-from-stdin %s' -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'credo', -\ 'executable': 'mix', -\ 'cwd': function('ale#handlers#elixir#FindMixUmbrellaRoot'), -\ 'command': function('ale_linters#elixir#credo#GetCommand'), -\ 'callback': 'ale_linters#elixir#credo#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/elixir/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/elixir/cspell.vim deleted file mode 100644 index 12dc271f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/elixir/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Elixir files. - -call ale#handlers#cspell#DefineLinter('elixir') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/elixir/dialyxir.vim b/dotfiles/.vim/plugged/ale/ale_linters/elixir/dialyxir.vim deleted file mode 100644 index 9b8a5cda..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/elixir/dialyxir.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Author: Fran C. - https://github.com/franciscoj -" Description: Add dialyzer support for elixir through dialyxir -" https://github.com/jeremyjh/dialyxir - -function! ale_linters#elixir#dialyxir#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " lib/filename.ex:19: Function fname/1 has no local return - let l:pattern = '\v(.+):(\d+): (.+)$' - let l:output = [] - let l:type = 'W' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if bufname(a:buffer) == l:match[1] - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:match[2] + 0, - \ 'col': 0, - \ 'type': l:type, - \ 'text': l:match[3], - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'dialyxir', -\ 'executable': 'mix', -\ 'cwd': function('ale#handlers#elixir#FindMixProjectRoot'), -\ 'command': 'mix help dialyzer && mix dialyzer', -\ 'callback': 'ale_linters#elixir#dialyxir#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/elixir/dogma.vim b/dotfiles/.vim/plugged/ale/ale_linters/elixir/dogma.vim deleted file mode 100644 index 28e7f420..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/elixir/dogma.vim +++ /dev/null @@ -1,39 +0,0 @@ -" Author: archseer - https://github.com/archSeer - -function! ale_linters#elixir#dogma#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " lib/filename.ex:19:7: F: Pipe chain should start with a raw value. - let l:pattern = '\v:(\d+):?(\d+)?: (.): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:type = l:match[3] - let l:text = l:match[4] - - if l:type is# 'C' - let l:type = 'E' - elseif l:type is# 'R' - let l:type = 'W' - endif - - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:type, - \ 'text': l:text, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'dogma', -\ 'executable': 'mix', -\ 'cwd': function('ale#handlers#elixir#FindMixProjectRoot'), -\ 'command': 'mix help dogma && mix dogma %s --format=flycheck', -\ 'lint_file': 1, -\ 'callback': 'ale_linters#elixir#dogma#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/elixir/elixir_ls.vim b/dotfiles/.vim/plugged/ale/ale_linters/elixir/elixir_ls.vim deleted file mode 100644 index d5517de5..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/elixir/elixir_ls.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Jon Parise -" Description: ElixirLS integration (https://github.com/JakeBecker/elixir-ls) - -call ale#Set('elixir_elixir_ls_release', 'elixir-ls') -call ale#Set('elixir_elixir_ls_config', {}) - -function! ale_linters#elixir#elixir_ls#GetExecutable(buffer) abort - let l:dir = ale#path#Simplify(ale#Var(a:buffer, 'elixir_elixir_ls_release')) - let l:cmd = has('win32') ? '\language_server.bat' : '/language_server.sh' - - return l:dir . l:cmd -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'elixir-ls', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#elixir#elixir_ls#GetExecutable'), -\ 'command': function('ale_linters#elixir#elixir_ls#GetExecutable'), -\ 'project_root': function('ale#handlers#elixir#FindMixUmbrellaRoot'), -\ 'lsp_config': {b -> ale#Var(b, 'elixir_elixir_ls_config')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/elixir/mix.vim b/dotfiles/.vim/plugged/ale/ale_linters/elixir/mix.vim deleted file mode 100644 index 948c6d36..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/elixir/mix.vim +++ /dev/null @@ -1,45 +0,0 @@ -" Author: evnu - https://github.com/evnu -" Author: colbydehart - https://github.com/colbydehart -" Description: Mix compile checking for Elixir files - -function! ale_linters#elixir#mix#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " Error format - " ** (CompileError) apps/sim/lib/sim/server.ex:87: undefined function update_in/4 - " - " TODO: Warning format - " warning: variable "foobar" does not exist and is being expanded to "foobar()", please use parentheses to remove the ambiguity or change the variable name - let l:pattern = '\v\(([^\)]+Error)\) ([^:]+):([^:]+): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:type = 'E' - let l:text = l:match[4] - - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:match[3] + 0, - \ 'col': 0, - \ 'type': l:type, - \ 'text': l:text, - \}) - endfor - - return l:output -endfunction - -function! ale_linters#elixir#mix#GetCommand(buffer) abort - let l:temp_dir = ale#command#CreateDirectory(a:buffer) - - return ale#Env('MIX_BUILD_PATH', l:temp_dir) . 'mix compile %s' -endfunction - -call ale#linter#Define('elixir', { -\ 'name': 'mix', -\ 'executable': 'mix', -\ 'cwd': function('ale#handlers#elixir#FindMixProjectRoot'), -\ 'command': function('ale_linters#elixir#mix#GetCommand'), -\ 'callback': 'ale_linters#elixir#mix#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/elm/elm_ls.vim b/dotfiles/.vim/plugged/ale/ale_linters/elm/elm_ls.vim deleted file mode 100644 index a02dbf42..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/elm/elm_ls.vim +++ /dev/null @@ -1,40 +0,0 @@ -" Author: antew - https://github.com/antew -" Description: elm-language-server integration for elm (diagnostics, formatting, and more) - -call ale#Set('elm_ls_executable', 'elm-language-server') -call ale#Set('elm_ls_use_global', get(g:, 'ale_use_global_executables', 1)) - -" elm-language-server will search for local and global binaries, if empty -call ale#Set('elm_ls_elm_path', '') -call ale#Set('elm_ls_elm_format_path', '') -call ale#Set('elm_ls_elm_test_path', '') -call ale#Set('elm_ls_elm_analyse_trigger', 'change') - -function! elm_ls#GetRootDir(buffer) abort - let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json') - - return !empty(l:elm_json) ? fnamemodify(l:elm_json, ':p:h') : '' -endfunction - -function! elm_ls#GetOptions(buffer) abort - return { - \ 'elmPath': ale#Var(a:buffer, 'elm_ls_elm_path'), - \ 'elmFormatPath': ale#Var(a:buffer, 'elm_ls_elm_format_path'), - \ 'elmTestPath': ale#Var(a:buffer, 'elm_ls_elm_test_path'), - \ 'elmAnalyseTrigger': ale#Var(a:buffer, 'elm_ls_elm_analyse_trigger'), - \} -endfunction - -call ale#linter#Define('elm', { -\ 'name': 'elm_ls', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#path#FindExecutable(b, 'elm_ls', [ -\ 'node_modules/.bin/elm-language-server', -\ 'node_modules/.bin/elm-lsp', -\ 'elm-lsp' -\ ])}, -\ 'command': '%e --stdio', -\ 'project_root': function('elm_ls#GetRootDir'), -\ 'language': 'elm', -\ 'initialization_options': function('elm_ls#GetOptions') -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/elm/make.vim b/dotfiles/.vim/plugged/ale/ale_linters/elm/make.vim deleted file mode 100644 index a7f9ea7b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/elm/make.vim +++ /dev/null @@ -1,242 +0,0 @@ -" Author: buffalocoder - https://github.com/buffalocoder, soywod - https://github.com/soywod, hecrj - https://github.com/hecrj -" Description: Elm linting in Ale. Closely follows the Syntastic checker in https://github.com/ElmCast/elm-vim. - -call ale#Set('elm_make_executable', 'elm') -call ale#Set('elm_make_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#elm#make#Handle(buffer, lines) abort - let l:output = [] - let l:unparsed_lines = [] - - for l:line in a:lines - if l:line[0] is# '{' - " Elm 0.19 - call ale_linters#elm#make#HandleElm019Line(l:line, l:output) - elseif l:line[0] is# '[' - " Elm 0.18 - call ale_linters#elm#make#HandleElm018Line(l:line, l:output) - elseif l:line isnot# 'Successfully generated /dev/null' - call add(l:unparsed_lines, l:line) - endif - endfor - - if len(l:unparsed_lines) > 0 - call add(l:output, { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': l:unparsed_lines[0], - \ 'detail': join(l:unparsed_lines, "\n") - \}) - endif - - return l:output -endfunction - -function! ale_linters#elm#make#HandleElm019Line(line, output) abort - let l:report = json_decode(a:line) - - if l:report.type is? 'error' - " General problem - let l:details = ale_linters#elm#make#ParseMessage(l:report.message) - - if empty(l:report.path) - let l:report.path = 'Elm' - endif - - if ale_linters#elm#make#FileIsBuffer(l:report.path) - call add(a:output, { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': l:details, - \}) - else - call add(a:output, { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': l:report.path .' - '. l:details, - \ 'detail': l:report.path ." ----------\n\n". l:details, - \}) - endif - else - " Compilation errors - for l:error in l:report.errors - let l:file_is_buffer = ale_linters#elm#make#FileIsBuffer(l:error.path) - - for l:problem in l:error.problems - let l:details = ale_linters#elm#make#ParseMessage(l:problem.message) - - if l:file_is_buffer - " Buffer module has problems - call add(a:output, { - \ 'lnum': l:problem.region.start.line, - \ 'col': l:problem.region.start.column, - \ 'end_lnum': l:problem.region.end.line, - \ 'end_col': l:problem.region.end.column, - \ 'type': 'E', - \ 'text': l:details, - \}) - else - " Imported module has problems - let l:location = l:error.path .':'. l:problem.region.start.line - call add(a:output, { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': l:location .' - '. l:details, - \ 'detail': l:location ." ----------\n\n". l:details, - \}) - endif - endfor - endfor - endif -endfunction - -function! ale_linters#elm#make#HandleElm018Line(line, output) abort - let l:errors = json_decode(a:line) - - for l:error in l:errors - let l:file_is_buffer = ale_linters#elm#make#FileIsBuffer(l:error.file) - - if l:file_is_buffer - " Current buffer has problems - call add(a:output, { - \ 'lnum': l:error.region.start.line, - \ 'col': l:error.region.start.column, - \ 'end_lnum': l:error.region.end.line, - \ 'end_col': l:error.region.end.column, - \ 'type': (l:error.type is? 'error') ? 'E' : 'W', - \ 'text': l:error.overview, - \ 'detail': l:error.overview . "\n\n" . l:error.details - \}) - elseif l:error.type is? 'error' - " Imported module has errors - let l:location = l:error.file .':'. l:error.region.start.line - - call add(a:output, { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': l:location .' - '. l:error.overview, - \ 'detail': l:location ." ----------\n\n". l:error.overview . "\n\n" . l:error.details - \}) - endif - endfor -endfunction - -function! ale_linters#elm#make#FileIsBuffer(path) abort - return ale#path#IsTempName(a:path) -endfunction - -function! ale_linters#elm#make#ParseMessage(message) abort - return join(map(copy(a:message), 'ale_linters#elm#make#ParseMessageItem(v:val)'), '') -endfunction - -function! ale_linters#elm#make#ParseMessageItem(item) abort - if type(a:item) is v:t_string - return a:item - else - return a:item.string - endif -endfunction - -function! ale_linters#elm#make#GetPackageFile(buffer) abort - let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm.json') - - if empty(l:elm_json) - " Fallback to Elm 0.18 - let l:elm_json = ale#path#FindNearestFile(a:buffer, 'elm-package.json') - endif - - return l:elm_json -endfunction - -function! ale_linters#elm#make#IsVersionGte19(buffer) abort - let l:elm_json = ale_linters#elm#make#GetPackageFile(a:buffer) - - if l:elm_json =~# '-package' - return 0 - else - return 1 - endif -endfunction - -function! ale_linters#elm#make#GetRootDir(buffer) abort - let l:elm_json = ale_linters#elm#make#GetPackageFile(a:buffer) - - if empty(l:elm_json) - return '' - else - return fnamemodify(l:elm_json, ':p:h') - endif -endfunction - -function! ale_linters#elm#make#IsTest(buffer) abort - let l:root_dir = ale_linters#elm#make#GetRootDir(a:buffer) - - if empty(l:root_dir) - return 0 - endif - - let l:tests_dir = join([l:root_dir, 'tests', ''], has('win32') ? '\' : '/') - - let l:buffer_path = fnamemodify(bufname(a:buffer), ':p') - - if stridx(l:buffer_path, l:tests_dir) == 0 - return 1 - else - return 0 - endif -endfunction - -function! ale_linters#elm#make#GetCwd(buffer) abort - let l:root_dir = ale_linters#elm#make#GetRootDir(a:buffer) - - return !empty(l:root_dir) ? l:root_dir : '' -endfunction - -" Return the command to execute the linter in the projects directory. -" If it doesn't, then this will fail when imports are needed. -function! ale_linters#elm#make#GetCommand(buffer) abort - let l:executable = ale_linters#elm#make#GetExecutable(a:buffer) - let l:is_v19 = ale_linters#elm#make#IsVersionGte19(a:buffer) - let l:is_using_elm_test = l:executable =~# 'elm-test$' - - " elm-test needs to know the path of elm-make if elm isn't installed globally. - " https://github.com/rtfeldman/node-test-runner/blob/57728f10668f2d2ab3179e7e3208bcfa9a1f19aa/README.md#--compiler - if l:is_v19 && l:is_using_elm_test - let l:elm_make_executable = ale#path#FindExecutable(a:buffer, 'elm_make', ['node_modules/.bin/elm']) - let l:elm_test_compiler_flag = ' --compiler ' . l:elm_make_executable . ' ' - else - let l:elm_test_compiler_flag = ' ' - endif - - " The elm compiler, at the time of this writing, uses '/dev/null' as - " a sort of flag to tell the compiler not to generate an output file, - " which is why this is hard coded here. - " Source: https://github.com/elm-lang/elm-compiler/blob/19d5a769b30ec0b2fc4475985abb4cd94cd1d6c3/builder/src/Generate/Output.hs#L253 - return '%e make --report=json --output=/dev/null' - \ . l:elm_test_compiler_flag - \ . '%t' -endfunction - -function! ale_linters#elm#make#GetExecutable(buffer) abort - let l:is_test = ale_linters#elm#make#IsTest(a:buffer) - let l:is_v19 = ale_linters#elm#make#IsVersionGte19(a:buffer) - - if l:is_test && l:is_v19 - return ale#path#FindExecutable( - \ a:buffer, - \ 'elm_make', - \ ['node_modules/.bin/elm-test', 'node_modules/.bin/elm'] - \) - else - return ale#path#FindExecutable(a:buffer, 'elm_make', ['node_modules/.bin/elm']) - endif -endfunction - -call ale#linter#Define('elm', { -\ 'name': 'make', -\ 'executable': function('ale_linters#elm#make#GetExecutable'), -\ 'output_stream': 'both', -\ 'cwd': function('ale_linters#elm#make#GetCwd'), -\ 'command': function('ale_linters#elm#make#GetCommand'), -\ 'callback': 'ale_linters#elm#make#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/erlang/dialyzer.vim b/dotfiles/.vim/plugged/ale/ale_linters/erlang/dialyzer.vim deleted file mode 100644 index a97c9520..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/erlang/dialyzer.vim +++ /dev/null @@ -1,97 +0,0 @@ -" Author: Autoine Gagne - https://github.com/AntoineGagne -" Description: Define a checker that runs dialyzer on Erlang files. - -let g:ale_erlang_dialyzer_executable = -\ get(g:, 'ale_erlang_dialyzer_executable', 'dialyzer') -let g:ale_erlang_dialyzer_options = -\ get(g:, 'ale_erlang_dialyzer_options', '-Wunmatched_returns' -\ . ' -Werror_handling' -\ . ' -Wrace_conditions' -\ . ' -Wunderspecs') -let g:ale_erlang_dialyzer_plt_file = -\ get(g:, 'ale_erlang_dialyzer_plt_file', '') -let g:ale_erlang_dialyzer_rebar3_profile = -\ get(g:, 'ale_erlang_dialyzer_rebar3_profile', 'default') - -function! ale_linters#erlang#dialyzer#GetRebar3Profile(buffer) abort - return ale#Var(a:buffer, 'erlang_dialyzer_rebar3_profile') -endfunction - -function! ale_linters#erlang#dialyzer#FindPlt(buffer) abort - let l:plt_file = '' - let l:rebar3_profile = ale_linters#erlang#dialyzer#GetRebar3Profile(a:buffer) - let l:plt_file_directory = ale#path#FindNearestDirectory(a:buffer, '_build/' . l:rebar3_profile) - - if !empty(l:plt_file_directory) - let l:plt_file = globpath(l:plt_file_directory, '*_plt', 0, 1) - endif - - if !empty(l:plt_file) - return l:plt_file[0] - endif - - if !empty($REBAR_PLT_DIR) - return expand('$REBAR_PLT_DIR/dialyzer/plt') - endif - - return expand('$HOME/.dialyzer_plt') -endfunction - -function! ale_linters#erlang#dialyzer#GetPlt(buffer) abort - let l:plt_file = ale#Var(a:buffer, 'erlang_dialyzer_plt_file') - - if !empty(l:plt_file) - return l:plt_file - endif - - return ale_linters#erlang#dialyzer#FindPlt(a:buffer) -endfunction - -function! ale_linters#erlang#dialyzer#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'erlang_dialyzer_executable') -endfunction - -function! ale_linters#erlang#dialyzer#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'erlang_dialyzer_options') - - let l:command = ale#Escape(ale_linters#erlang#dialyzer#GetExecutable(a:buffer)) - \ . ' -n' - \ . ' --plt ' . ale#Escape(ale_linters#erlang#dialyzer#GetPlt(a:buffer)) - \ . ' ' . l:options - \ . ' %s' - - return l:command -endfunction - -function! ale_linters#erlang#dialyzer#Handle(buffer, lines) abort - " Match patterns like the following: - " - " erl_tidy_prv_fmt.erl:3: Callback info about the provider behaviour is not available - let l:pattern = '^\S\+:\(\d\+\): \(.\+\)$' - let l:output = [] - - for l:line in a:lines - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) != 0 - let l:code = l:match[2] - - call add(l:output, { - \ 'lnum': str2nr(l:match[1]), - \ 'lcol': 0, - \ 'text': l:code, - \ 'type': 'W' - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('erlang', { -\ 'name': 'dialyzer', -\ 'executable': function('ale_linters#erlang#dialyzer#GetExecutable'), -\ 'command': function('ale_linters#erlang#dialyzer#GetCommand'), -\ 'callback': function('ale_linters#erlang#dialyzer#Handle'), -\ 'lint_file': 1 -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/erlang/elvis.vim b/dotfiles/.vim/plugged/ale/ale_linters/erlang/elvis.vim deleted file mode 100644 index 0fb85c07..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/erlang/elvis.vim +++ /dev/null @@ -1,40 +0,0 @@ -" Author: Dmitri Vereshchagin -" Description: Elvis linter for Erlang files - -call ale#Set('erlang_elvis_executable', 'elvis') - -function! ale_linters#erlang#elvis#Handle(buffer, lines) abort - let l:pattern = '\v:(\d+):[^:]+:(.+)' - let l:loclist = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:loclist, { - \ 'lnum': str2nr(l:match[1]), - \ 'text': s:AbbreviateMessage(l:match[2]), - \ 'type': 'W', - \ 'sub_type': 'style', - \}) - endfor - - return l:loclist -endfunction - -function! s:AbbreviateMessage(text) abort - let l:pattern = '\v\c^(line \d+ is too long):.*$' - - return substitute(a:text, l:pattern, '\1.', '') -endfunction - -function! s:GetCommand(buffer) abort - let l:file = ale#Escape(expand('#' . a:buffer . ':.')) - - return '%e rock --output-format=parsable ' . l:file -endfunction - -call ale#linter#Define('erlang', { -\ 'name': 'elvis', -\ 'callback': 'ale_linters#erlang#elvis#Handle', -\ 'executable': {b -> ale#Var(b, 'erlang_elvis_executable')}, -\ 'command': function('s:GetCommand'), -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/erlang/erlc.vim b/dotfiles/.vim/plugged/ale/ale_linters/erlang/erlc.vim deleted file mode 100644 index 0c67a73f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/erlang/erlc.vim +++ /dev/null @@ -1,104 +0,0 @@ -" Author: Magnus Ottenklinger - https://github.com/evnu - -let g:ale_erlang_erlc_executable = get(g:, 'ale_erlang_erlc_executable', 'erlc') -let g:ale_erlang_erlc_options = get(g:, 'ale_erlang_erlc_options', '') - -function! ale_linters#erlang#erlc#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'erlang_erlc_executable') -endfunction - -function! ale_linters#erlang#erlc#GetCommand(buffer) abort - let l:output_file = ale#util#Tempname() - call ale#command#ManageFile(a:buffer, l:output_file) - - let l:command = ale#Escape(ale_linters#erlang#erlc#GetExecutable(a:buffer)) - \ . ' -o ' . ale#Escape(l:output_file) - \ . ' ' . ale#Var(a:buffer, 'erlang_erlc_options') - \ . ' %t' - - return l:command -endfunction - -function! ale_linters#erlang#erlc#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " error.erl:4: variable 'B' is unbound - " error.erl:3: Warning: function main/0 is unused - " error.erl:4: Warning: variable 'A' is unused - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+:)? (Warning: )?(.+)$' - - " parse_transforms are a special case. The error message does not indicate a location: - " error.erl: undefined parse transform 'some_parse_transform' - let l:pattern_parse_transform = '\v(undefined parse transform .*)$' - let l:output = [] - - let l:pattern_no_module_definition = '\v(no module definition)$' - let l:pattern_unused = '\v(.* is unused)$' - - let l:is_hrl = fnamemodify(bufname(a:buffer), ':e') is# 'hrl' - - for l:line in a:lines - let l:match = matchlist(l:line, l:pattern) - - " Determine if the output indicates an error. We distinguish between two cases: - " - " 1) normal errors match l:pattern - " 2) parse_transform errors match l:pattern_parse_transform - " - " If none of the patterns above match, the line can be ignored - if len(l:match) == 0 " not a 'normal' warning or error - let l:match_parse_transform = matchlist(l:line, l:pattern_parse_transform) - - if len(l:match_parse_transform) == 0 " also not a parse_transform error - continue - endif - - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': 0, - \ 'col': 0, - \ 'type': 'E', - \ 'text': l:match_parse_transform[0], - \}) - - continue - endif - - let l:line = l:match[2] - let l:warning_or_text = l:match[4] - let l:text = l:match[5] - - " If this file is a header .hrl, ignore the following expected messages: - " - 'no module definition' - " - 'X is unused' - if l:is_hrl && ( - \ match(l:text, l:pattern_no_module_definition) != -1 - \ || match(l:text, l:pattern_unused) != -1 - \) - continue - endif - - if !empty(l:warning_or_text) - let l:type = 'W' - else - let l:type = 'E' - endif - - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:line, - \ 'col': 0, - \ 'type': l:type, - \ 'text': l:text, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('erlang', { -\ 'name': 'erlc', -\ 'executable': function('ale_linters#erlang#erlc#GetExecutable'), -\ 'command': function('ale_linters#erlang#erlc#GetCommand'), -\ 'callback': 'ale_linters#erlang#erlc#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/erlang/syntaxerl.vim b/dotfiles/.vim/plugged/ale/ale_linters/erlang/syntaxerl.vim deleted file mode 100644 index 5d555a8d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/erlang/syntaxerl.vim +++ /dev/null @@ -1,42 +0,0 @@ -" Author: Dmitri Vereshchagin -" Description: SyntaxErl linter for Erlang files - -call ale#Set('erlang_syntaxerl_executable', 'syntaxerl') - -function! ale_linters#erlang#syntaxerl#RunHelpCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'erlang_syntaxerl_executable') - - return ale#command#Run( - \ a:buffer, - \ ale#Escape(l:executable) . ' -h', - \ function('ale_linters#erlang#syntaxerl#GetCommand'), - \) -endfunction - -function! ale_linters#erlang#syntaxerl#GetCommand(buffer, output, meta) abort - let l:use_b_option = match(a:output, '\C\V-b, --base\>') > -1 - - return '%e' . (l:use_b_option ? ' -b %s %t' : ' %t') -endfunction - -function! ale_linters#erlang#syntaxerl#Handle(buffer, lines) abort - let l:pattern = '\v\C:(\d+):( warning:)? (.+)' - let l:loclist = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:loclist, { - \ 'lnum': l:match[1] + 0, - \ 'text': l:match[3], - \ 'type': empty(l:match[2]) ? 'E' : 'W', - \}) - endfor - - return l:loclist -endfunction - -call ale#linter#Define('erlang', { -\ 'name': 'syntaxerl', -\ 'executable': {b -> ale#Var(b, 'erlang_syntaxerl_executable')}, -\ 'command': {b -> ale_linters#erlang#syntaxerl#RunHelpCommand(b)}, -\ 'callback': 'ale_linters#erlang#syntaxerl#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/eruby/erb.vim b/dotfiles/.vim/plugged/ale/ale_linters/eruby/erb.vim deleted file mode 100644 index f3438320..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/eruby/erb.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: Matthias Guenther - https://wikimatze.de, Eddie Lebow https://github.com/elebow -" Description: ERB from the Ruby standard library, for eruby/erb files - -function! ale_linters#eruby#erb#GetCommand(buffer) abort - let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) - - if empty(l:rails_root) - return 'erb -P -T - -x %t | ruby -c' - endif - - " Rails-flavored eRuby does not comply with the standard as understood by - " ERB, so we'll have to do some substitution. This does not reduce the - " effectiveness of the linter—the translated code is still evaluated. - return 'ruby -r erb -e ' . ale#Escape('puts ERB.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c' -endfunction - -call ale#linter#Define('eruby', { -\ 'name': 'erb', -\ 'aliases': ['erubylint'], -\ 'executable': 'erb', -\ 'output_stream': 'stderr', -\ 'command': function('ale_linters#eruby#erb#GetCommand'), -\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors', -\}) - diff --git a/dotfiles/.vim/plugged/ale/ale_linters/eruby/erblint.vim b/dotfiles/.vim/plugged/ale/ale_linters/eruby/erblint.vim deleted file mode 100644 index 19960185..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/eruby/erblint.vim +++ /dev/null @@ -1,51 +0,0 @@ -" Author: Roeland Moors - https://github.com/roelandmoors -" based on the ale ruumba and robocop linters -" Description: ERB Lint, support for https://github.com/Shopify/erb-lint - -call ale#Set('eruby_erblint_executable', 'erblint') -call ale#Set('eruby_erblint_options', '') - -function! ale_linters#eruby#erblint#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'eruby_erblint_executable') - - return ale#ruby#EscapeExecutable(l:executable, 'erblint') - \ . ' --format json ' - \ . ale#Var(a:buffer, 'eruby_erblint_options') - \ . ' --stdin %s' -endfunction - -function! ale_linters#eruby#erblint#Handle(buffer, lines) abort - if empty(a:lines) - return [] - endif - - let l:errors = ale#util#FuzzyJSONDecode(a:lines[0], []) - - if !has_key(l:errors, 'summary') - \|| l:errors['summary']['offenses'] == 0 - \|| empty(l:errors['files']) - return [] - endif - - let l:output = [] - - for l:error in l:errors['files'][0]['offenses'] - call add(l:output, { - \ 'lnum': l:error['location']['start_line'] + 0, - \ 'col': l:error['location']['start_column'] + 0, - \ 'end_col': l:error['location']['last_column'] + 0, - \ 'code': l:error['linter'], - \ 'text': l:error['message'], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('eruby', { -\ 'name': 'erblint', -\ 'executable': {b -> ale#Var(b, 'eruby_erblint_executable')}, -\ 'command': function('ale_linters#eruby#erblint#GetCommand'), -\ 'callback': 'ale_linters#eruby#erblint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/eruby/erubi.vim b/dotfiles/.vim/plugged/ale/ale_linters/eruby/erubi.vim deleted file mode 100644 index ddca3f61..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/eruby/erubi.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Author: Eddie Lebow https://github.com/elebow -" Description: eruby checker using `erubi` - -function! ale_linters#eruby#erubi#GetCommand(buffer, output, meta) abort - let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) - - if !empty(a:output) - " The empty command in CheckErubi returns nothing if erubi runs and - " emits an error if erubi is not present - return '' - endif - - if empty(l:rails_root) - return 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read).src') . '< %t | ruby -c' - endif - - " Rails-flavored eRuby does not comply with the standard as understood by - " Erubi, so we'll have to do some substitution. This does not reduce the - " effectiveness of the linter---the translated code is still evaluated. - return 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c' -endfunction - -call ale#linter#Define('eruby', { -\ 'name': 'erubi', -\ 'executable': 'ruby', -\ 'command': {buffer -> ale#command#Run( -\ buffer, -\ 'ruby -r erubi/capture_end -e ' . ale#Escape('""'), -\ function('ale_linters#eruby#erubi#GetCommand'), -\ )}, -\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/eruby/erubis.vim b/dotfiles/.vim/plugged/ale/ale_linters/eruby/erubis.vim deleted file mode 100644 index 755c5803..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/eruby/erubis.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Jake Zimmerman , Eddie Lebow https://github.com/elebow -" Description: eruby checker using `erubis`, instead of `erb` - -function! ale_linters#eruby#erubis#GetCommand(buffer) abort - let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) - - if empty(l:rails_root) - return 'erubis -x %t | ruby -c' - endif - - " Rails-flavored eRuby does not comply with the standard as understood by - " Erubis, so we'll have to do some substitution. This does not reduce the - " effectiveness of the linter - the translated code is still evaluated. - return 'ruby -r erubis -e ' . ale#Escape('puts Erubis::Eruby.new($stdin.read.gsub(%{<%=},%{<%})).src') . '< %t | ruby -c' -endfunction - -call ale#linter#Define('eruby', { -\ 'name': 'erubis', -\ 'executable': 'erubis', -\ 'output_stream': 'stderr', -\ 'command': function('ale_linters#eruby#erubis#GetCommand'), -\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/eruby/ruumba.vim b/dotfiles/.vim/plugged/ale/ale_linters/eruby/ruumba.vim deleted file mode 100644 index f415f1ab..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/eruby/ruumba.vim +++ /dev/null @@ -1,62 +0,0 @@ -" Author: aclemons - https://github.com/aclemons -" based on the ale rubocop linter -" Description: Ruumba, RuboCop linting for ERB templates. - -call ale#Set('eruby_ruumba_executable', 'ruumba') -call ale#Set('eruby_ruumba_options', '') - -function! ale_linters#eruby#ruumba#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'eruby_ruumba_executable') - - return ale#ruby#EscapeExecutable(l:executable, 'ruumba') - \ . ' --format json --force-exclusion ' - \ . ale#Var(a:buffer, 'eruby_ruumba_options') - \ . ' --stdin %s' -endfunction - -function! ale_linters#eruby#ruumba#Handle(buffer, lines) abort - try - let l:errors = json_decode(a:lines[0]) - catch - return [] - endtry - - if !has_key(l:errors, 'summary') - \|| l:errors['summary']['offense_count'] == 0 - \|| empty(l:errors['files']) - return [] - endif - - let l:output = [] - - for l:error in l:errors['files'][0]['offenses'] - let l:start_col = l:error['location']['column'] + 0 - call add(l:output, { - \ 'lnum': l:error['location']['line'] + 0, - \ 'col': l:start_col, - \ 'end_col': l:start_col + l:error['location']['length'] - 1, - \ 'code': l:error['cop_name'], - \ 'text': l:error['message'], - \ 'type': ale_linters#eruby#ruumba#GetType(l:error['severity']), - \}) - endfor - - return l:output -endfunction - -function! ale_linters#eruby#ruumba#GetType(severity) abort - if a:severity is? 'convention' - \|| a:severity is? 'warning' - \|| a:severity is? 'refactor' - return 'W' - endif - - return 'E' -endfunction - -call ale#linter#Define('eruby', { -\ 'name': 'ruumba', -\ 'executable': {b -> ale#Var(b, 'eruby_ruumba_executable')}, -\ 'command': function('ale_linters#eruby#ruumba#GetCommand'), -\ 'callback': 'ale_linters#eruby#ruumba#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/fish/fish.vim b/dotfiles/.vim/plugged/ale/ale_linters/fish/fish.vim deleted file mode 100644 index 87ede29a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/fish/fish.vim +++ /dev/null @@ -1,67 +0,0 @@ -" Author: Niraj Thapaliya - https://github.com/nthapaliya -" Description: Lints fish files using fish -n - -function! ale_linters#fish#fish#Handle(buffer, lines) abort - " Matches patterns such as: - " - " home/.config/fish/functions/foo.fish (line 1): Missing end to balance this function definition - " function foo - " ^ - " - " OR, patterns such as: - " - " Unsupported use of '||'. In fish, please use 'COMMAND; or COMMAND'. - " /tmp/vLz620o/258/test.fish (line 2): if set -q SSH_CLIENT || set -q SSH_TTY - " ^ - " - " fish -n can return errors in either format. - let l:pattern = '^\(.* (line \(\d\+\)): \)\(.*\)$' - let l:column_pattern = '^ *\^' - let l:output = [] - let l:column_offset = 0 - let l:last_line_with_message = '' - - for l:line in a:lines - " Look for error lines first. - let l:match = matchlist(l:line, l:pattern) - - if !empty(l:match) - if !empty(l:last_line_with_message) - let l:text = l:last_line_with_message - else - let l:text = l:match[3] - endif - - let l:column_offset = len(l:match[1]) - - let l:last_line_with_message = '' - call add(l:output, { - \ 'col': 0, - \ 'lnum': str2nr(l:match[2]), - \ 'text': l:text, - \}) - else - " Look for column markers like ' ^' second. - " The column index will be set according to how long the line is. - let l:column_match = matchstr(l:line, l:column_pattern) - - if !empty(l:column_match) && !empty(l:output) - let l:output[-1].col = len(l:column_match) - l:column_offset - let l:last_line_with_message = '' - else - let l:last_line_with_message = l:line - let l:column_offset = 0 - endif - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('fish', { -\ 'name': 'fish', -\ 'output_stream': 'stderr', -\ 'executable': 'fish', -\ 'command': 'fish -n %t', -\ 'callback': 'ale_linters#fish#fish#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/fortran/gcc.vim b/dotfiles/.vim/plugged/ale/ale_linters/fortran/gcc.vim deleted file mode 100644 index 6e97d6fd..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/fortran/gcc.vim +++ /dev/null @@ -1,72 +0,0 @@ -" Author: w0rp -" Description: gcc for Fortran files - -" This option can be set to 0 to use -ffixed-form -call ale#Set('fortran_gcc_use_free_form', 1) -call ale#Set('fortran_gcc_executable', 'gcc') -" Set this option to change the GCC options for warnings for Fortran. -call ale#Set('fortran_gcc_options', '-Wall') - -function! ale_linters#fortran#gcc#Handle(buffer, lines) abort - " We have to match a starting line and a later ending line together, - " like so. - " - " :21.34: - " Error: Expected comma in I/O list at (1) - let l:line_marker_pattern = ':\(\d\+\)[.:]\=\(\d\+\)\=:\=$' - let l:message_pattern = '^\(Error\|Warning\): \(.\+\)$' - let l:looking_for_message = 0 - let l:last_loclist_obj = {} - - let l:output = [] - - for l:line in a:lines - if l:looking_for_message - let l:match = matchlist(l:line, l:message_pattern) - else - let l:match = matchlist(l:line, l:line_marker_pattern) - endif - - if len(l:match) == 0 - continue - endif - - if l:looking_for_message - let l:looking_for_message = 0 - - " Now we have the text, we can set it and add the error. - let l:last_loclist_obj.text = l:match[2] - let l:last_loclist_obj.type = l:match[1] is# 'Warning' ? 'W' : 'E' - call add(l:output, l:last_loclist_obj) - else - let l:last_loclist_obj = { - \ 'bufnr': a:buffer, - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \} - - " Start looking for the message and error type. - let l:looking_for_message = 1 - endif - endfor - - return l:output -endfunction - -function! ale_linters#fortran#gcc#GetCommand(buffer) abort - let l:layout_option = ale#Var(a:buffer, 'fortran_gcc_use_free_form') - \ ? '-ffree-form' - \ : '-ffixed-form' - - return '%e -S -x f95 -fsyntax-only ' . l:layout_option - \ . ale#Pad(ale#Var(a:buffer, 'fortran_gcc_options')) - \ . ' -' -endfunction - -call ale#linter#Define('fortran', { -\ 'name': 'gcc', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'fortran_gcc_executable')}, -\ 'command': function('ale_linters#fortran#gcc#GetCommand'), -\ 'callback': 'ale_linters#fortran#gcc#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/fortran/language_server.vim b/dotfiles/.vim/plugged/ale/ale_linters/fortran/language_server.vim deleted file mode 100644 index 00aa0577..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/fortran/language_server.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Author: unpairedbracket ben.spiers22@gmail.com -" Description: A language server for fortran - -call ale#Set('fortran_language_server_executable', 'fortls') -call ale#Set('fortran_language_server_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#fortran#language_server#GetProjectRoot(buffer) abort - let l:fortls_file = ale#path#FindNearestFile(a:buffer, '.fortls') - - return !empty(l:fortls_file) ? fnamemodify(l:fortls_file, ':h') : '' -endfunction - -call ale#linter#Define('fortran', { -\ 'name': 'language_server', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'fortran_language_server_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale_linters#fortran#language_server#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/fountain/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/fountain/proselint.vim deleted file mode 100644 index 353a2e5f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/fountain/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Jansen Mitchell https://github.com/JansenMitchell -" Description: proselint for Fountain files - -call ale#linter#Define('fountain', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/fuse/fusionlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/fuse/fusionlint.vim deleted file mode 100644 index ffb25d33..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/fuse/fusionlint.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: RyanSquared -" Description: `fusion-lint` linter for FusionScript files - -call ale#Set('fuse_fusionlint_executable', 'fusion-lint') -call ale#Set('fuse_fusionlint_options', '') - -function! ale_linters#fuse#fusionlint#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'fuse_fusionlint_options')) - \ . ' --filename %s -i' -endfunction - -function! ale_linters#fuse#fusionlint#Handle(buffer, lines) abort - let l:pattern = '^.*:\(\d\+\):\(\d\+\): (\([WE]\)\d\+) \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[4], - \ 'type': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('fuse', { -\ 'name': 'fusionlint', -\ 'executable': {b -> ale#Var(b, 'fuse_fusionlint_executable')}, -\ 'command': function('ale_linters#fuse#fusionlint#GetCommand'), -\ 'callback': 'ale_linters#fuse#fusionlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/gitcommit/gitlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/gitcommit/gitlint.vim deleted file mode 100644 index 4b9cec63..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/gitcommit/gitlint.vim +++ /dev/null @@ -1,51 +0,0 @@ -" Author: Nick Yamane -" Description: gitlint for git commit message files - -call ale#Set('gitcommit_gitlint_executable', 'gitlint') -call ale#Set('gitcommit_gitlint_options', '') -call ale#Set('gitcommit_gitlint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#gitcommit#gitlint#GetExecutable(buffer) abort - return ale#python#FindExecutable(a:buffer, 'gitcommit_gitlint', ['gitlint']) -endfunction - -function! ale_linters#gitcommit#gitlint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'gitcommit_gitlint_options') - - return '%e' . ale#Pad(l:options) . ' lint' -endfunction - -function! ale_linters#gitcommit#gitlint#Handle(buffer, lines) abort - " Matches patterns line the following: - let l:pattern = '\v^(\d+): (\w+) (.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:code = l:match[2] - - if !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - if l:code is# 'T2' || l:code is# 'B2' - continue - endif - endif - - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'text': l:match[3], - \ 'code': l:code, - \ 'type': 'E', - \} - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('gitcommit', { -\ 'name': 'gitlint', -\ 'output_stream': 'stderr', -\ 'executable': function('ale_linters#gitcommit#gitlint#GetExecutable'), -\ 'command': function('ale_linters#gitcommit#gitlint#GetCommand'), -\ 'callback': 'ale_linters#gitcommit#gitlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/glsl/glslang.vim b/dotfiles/.vim/plugged/ale/ale_linters/glsl/glslang.vim deleted file mode 100644 index bbddce90..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/glsl/glslang.vim +++ /dev/null @@ -1,40 +0,0 @@ -" Author: Sven-Hendrik Haase -" Description: glslang-based linter for glsl files -" -" TODO: Once https://github.com/KhronosGroup/glslang/pull/1047 is accepted, -" we can use stdin. - -call ale#Set('glsl_glslang_executable', 'glslangValidator') -call ale#Set('glsl_glslang_options', '') - -function! ale_linters#glsl#glslang#GetCommand(buffer) abort - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'glsl_glslang_options')) - \ . ' -C %t' -endfunction - -function! ale_linters#glsl#glslang#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " ERROR: 0:5: 'foo' : undeclared identifier - let l:pattern = '^\(.\+\): \(\d\+\):\(\d\+\): \(.\+\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': str2nr(l:match[3]), - \ 'col': str2nr(l:match[2]), - \ 'text': l:match[4], - \ 'type': l:match[1] is# 'ERROR' ? 'E' : 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('glsl', { -\ 'name': 'glslang', -\ 'executable': {b -> ale#Var(b, 'glsl_glslang_executable')}, -\ 'command': function('ale_linters#glsl#glslang#GetCommand'), -\ 'callback': 'ale_linters#glsl#glslang#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/glsl/glslls.vim b/dotfiles/.vim/plugged/ale/ale_linters/glsl/glslls.vim deleted file mode 100644 index b62844c7..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/glsl/glslls.vim +++ /dev/null @@ -1,30 +0,0 @@ -" Author: Sven-Hendrik Haase -" Description: A language server for glsl - -call ale#Set('glsl_glslls_executable', 'glslls') -call ale#Set('glsl_glslls_logfile', '') - -function! ale_linters#glsl#glslls#GetCommand(buffer) abort - let l:logfile = ale#Var(a:buffer, 'glsl_glslls_logfile') - let l:logfile_args = '' - - if l:logfile isnot# '' - let l:logfile_args = ' --verbose -l ' . l:logfile - endif - - return '%e' . l:logfile_args . ' --stdin' -endfunction - -function! ale_linters#glsl#glslls#GetProjectRoot(buffer) abort - let l:project_root = ale#c#FindProjectRoot(a:buffer) - - return !empty(l:project_root) ? fnamemodify(l:project_root, ':h:h') : '' -endfunction - -call ale#linter#Define('glsl', { -\ 'name': 'glslls', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'glsl_glslls_executable')}, -\ 'command': function('ale_linters#glsl#glslls#GetCommand'), -\ 'project_root': function('ale_linters#glsl#glslls#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/bingo.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/bingo.vim deleted file mode 100644 index 1e43f8e4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/bingo.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Author: Jerko Steiner -" Description: https://github.com/saibing/bingo - -call ale#Set('go_bingo_executable', 'bingo') -call ale#Set('go_bingo_options', '--mode stdio') - -function! ale_linters#go#bingo#GetCommand(buffer) abort - return ale#go#EnvString(a:buffer) . '%e' . ale#Pad(ale#Var(a:buffer, 'go_bingo_options')) -endfunction - -function! ale_linters#go#bingo#FindProjectRoot(buffer) abort - let l:go_modules_off = ale#Var(a:buffer, 'go_go111module') is# 'off' - let l:project_root = l:go_modules_off ? - \ '' : ale#path#FindNearestFile(a:buffer, 'go.mod') - let l:mods = ':h' - - if empty(l:project_root) - let l:project_root = ale#path#FindNearestDirectory(a:buffer, '.git') - let l:mods = ':h:h' - endif - - return !empty(l:project_root) ? fnamemodify(l:project_root, l:mods) : '' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'bingo', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'go_bingo_executable')}, -\ 'command': function('ale_linters#go#bingo#GetCommand'), -\ 'project_root': function('ale_linters#go#bingo#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/cspell.vim deleted file mode 100644 index f986a31a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Go files. - -call ale#handlers#cspell#DefineLinter('go') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/gobuild.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/gobuild.vim deleted file mode 100644 index 5210c5a8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/gobuild.vim +++ /dev/null @@ -1,57 +0,0 @@ -" Author: Joshua Rubin , Ben Reedy , -" Jeff Willette -" Description: go build for Go files -" inspired by work from dzhou121 - -call ale#Set('go_go_executable', 'go') -call ale#Set('go_gobuild_options', '') - -function! ale_linters#go#gobuild#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'go_gobuild_options') - - " Run go test in local directory with relative path - return ale#go#EnvString(a:buffer) - \ . ale#Var(a:buffer, 'go_go_executable') . ' test' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -c -o /dev/null ./' -endfunction - -function! ale_linters#go#gobuild#GetMatches(lines) abort - " Matches patterns like the following: - " - " file.go:27: missing argument for Printf("%s"): format reads arg 2, have only 1 args - " file.go:53:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary) - " file.go:5:2: expected declaration, found 'STRING' "log" - " go test returns relative paths so use tail of filename as part of pattern matcher - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:? (.+)$' - - return ale#util#GetMatches(a:lines, l:pattern) -endfunction - -function! ale_linters#go#gobuild#Handler(buffer, lines) abort - let l:dir = expand('#' . a:buffer . ':p:h') - let l:output = [] - - for l:match in ale_linters#go#gobuild#GetMatches(a:lines) - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \ 'type': 'E', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('go', { -\ 'name': 'gobuild', -\ 'aliases': ['go build'], -\ 'executable': {b -> ale#Var(b, 'go_go_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#go#gobuild#GetCommand'), -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#go#gobuild#Handler', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/gofmt.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/gofmt.vim deleted file mode 100644 index b313f9ca..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/gofmt.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: neersighted -" Description: gofmt for Go files - -function! ale_linters#go#gofmt#GetCommand(buffer) abort - return ale#go#EnvString(a:buffer) - \ . '%e -e %t' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'gofmt', -\ 'output_stream': 'stderr', -\ 'executable': 'gofmt', -\ 'command': function('ale_linters#go#gofmt#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsError', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/golangci_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/golangci_lint.vim deleted file mode 100644 index 80431b99..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/golangci_lint.vim +++ /dev/null @@ -1,64 +0,0 @@ -" Author: Sascha Grunert -" Description: Adds support of golangci-lint - -call ale#Set('go_golangci_lint_options', '--enable-all') -call ale#Set('go_golangci_lint_executable', 'golangci-lint') -call ale#Set('go_golangci_lint_package', 0) - -function! ale_linters#go#golangci_lint#GetCommand(buffer) abort - let l:filename = expand('#' . a:buffer . ':t') - let l:options = ale#Var(a:buffer, 'go_golangci_lint_options') - let l:lint_package = ale#Var(a:buffer, 'go_golangci_lint_package') - - - if l:lint_package - return ale#go#EnvString(a:buffer) - \ . '%e run ' - \ . l:options - endif - - return ale#go#EnvString(a:buffer) - \ . '%e run ' - \ . ale#Escape(l:filename) - \ . ' ' . l:options -endfunction - -function! ale_linters#go#golangci_lint#GetMatches(lines) abort - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:?:?:?\s\*?(.+)\s+\((.+)\)$' - - return ale#util#GetMatches(a:lines, l:pattern) -endfunction - -function! ale_linters#go#golangci_lint#Handler(buffer, lines) abort - let l:dir = expand('#' . a:buffer . ':p:h') - let l:output = [] - - for l:match in ale_linters#go#golangci_lint#GetMatches(a:lines) - if l:match[5] is# 'typecheck' - let l:msg_type = 'E' - else - let l:msg_type = 'W' - endif - - " l:match[1] will already be an absolute path, output from - " golangci_lint - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'type': l:msg_type, - \ 'text': l:match[4] . ' (' . l:match[5] . ')', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('go', { -\ 'name': 'golangci-lint', -\ 'executable': {b -> ale#Var(b, 'go_golangci_lint_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#go#golangci_lint#GetCommand'), -\ 'callback': 'ale_linters#go#golangci_lint#Handler', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/golint.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/golint.vim deleted file mode 100644 index 79bfaeb5..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/golint.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: neersighted -" Description: golint for Go files - -call ale#Set('go_golint_executable', 'golint') -call ale#Set('go_golint_options', '') - -function! ale_linters#go#golint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'go_golint_options') - - return ale#go#EnvString(a:buffer) . '%e' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %t' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'golint', -\ 'output_stream': 'both', -\ 'executable': {b -> ale#Var(b, 'go_golint_executable')}, -\ 'command': function('ale_linters#go#golint#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/gometalinter.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/gometalinter.vim deleted file mode 100644 index ac33a9f3..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/gometalinter.vim +++ /dev/null @@ -1,58 +0,0 @@ -" Author: Ben Reedy , Jeff Willette -" Description: Adds support for the gometalinter suite for Go files - -call ale#Set('go_gometalinter_options', '') -call ale#Set('go_gometalinter_executable', 'gometalinter') -call ale#Set('go_gometalinter_lint_package', 0) - -function! ale_linters#go#gometalinter#GetCommand(buffer) abort - let l:filename = expand('#' . a:buffer . ':t') - let l:options = ale#Var(a:buffer, 'go_gometalinter_options') - let l:lint_package = ale#Var(a:buffer, 'go_gometalinter_lint_package') - - " BufferCdString is used so that we can be sure the paths output from gometalinter can - " be calculated to absolute paths in the Handler - if l:lint_package - return ale#go#EnvString(a:buffer) - \ . '%e' - \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' - endif - - return ale#go#EnvString(a:buffer) - \ . '%e' - \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(l:filename)) - \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' -endfunction - -function! ale_linters#go#gometalinter#GetMatches(lines) abort - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:?:?(warning|error):?\s\*?(.+)$' - - return ale#util#GetMatches(a:lines, l:pattern) -endfunction - -function! ale_linters#go#gometalinter#Handler(buffer, lines) abort - let l:dir = expand('#' . a:buffer . ':p:h') - let l:output = [] - - for l:match in ale_linters#go#gometalinter#GetMatches(a:lines) - " l:match[1] will already be an absolute path, output from gometalinter - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'type': tolower(l:match[4]) is# 'warning' ? 'W' : 'E', - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('go', { -\ 'name': 'gometalinter', -\ 'executable': {b -> ale#Var(b, 'go_gometalinter_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#go#gometalinter#GetCommand'), -\ 'callback': 'ale_linters#go#gometalinter#Handler', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/gopls.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/gopls.vim deleted file mode 100644 index 80909830..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/gopls.vim +++ /dev/null @@ -1,39 +0,0 @@ -" Author: w0rp -" Author: Jerko Steiner -" Description: https://github.com/saibing/gopls - -call ale#Set('go_gopls_executable', 'gopls') -call ale#Set('go_gopls_options', '--mode stdio') -call ale#Set('go_gopls_init_options', {}) -call ale#Set('go_gopls_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#go#gopls#GetCommand(buffer) abort - return ale#go#EnvString(a:buffer) - \ . '%e' - \ . ale#Pad(ale#Var(a:buffer, 'go_gopls_options')) -endfunction - -function! ale_linters#go#gopls#FindProjectRoot(buffer) abort - let l:go_modules_off = ale#Var(a:buffer, 'go_go111module') is# 'off' - let l:project_root = l:go_modules_off ? - \ '' : ale#path#FindNearestFile(a:buffer, 'go.mod') - let l:mods = ':h' - - if empty(l:project_root) - let l:project_root = ale#path#FindNearestDirectory(a:buffer, '.git') - let l:mods = ':h:h' - endif - - return !empty(l:project_root) ? fnamemodify(l:project_root, l:mods) : '' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'gopls', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#path#FindExecutable(b, 'go_gopls', [ -\ ale#go#GetGoPathExecutable('bin/gopls'), -\ ])}, -\ 'command': function('ale_linters#go#gopls#GetCommand'), -\ 'project_root': function('ale_linters#go#gopls#FindProjectRoot'), -\ 'initialization_options': {b -> ale#Var(b, 'go_gopls_init_options')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/gosimple.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/gosimple.vim deleted file mode 100644 index 490d15a9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/gosimple.vim +++ /dev/null @@ -1,12 +0,0 @@ -" Author: Ben Reedy -" Description: gosimple for Go files - -call ale#linter#Define('go', { -\ 'name': 'gosimple', -\ 'executable': 'gosimple', -\ 'cwd': '%s:h', -\ 'command': {b -> ale#go#EnvString(b) . 'gosimple .'}, -\ 'callback': 'ale#handlers#go#Handler', -\ 'output_stream': 'both', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/gotype.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/gotype.vim deleted file mode 100644 index 8fd6df27..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/gotype.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: Jelte Fennema -" Description: gotype for Go files - -function! ale_linters#go#gotype#GetExecutable(buffer) abort - if expand('#' . a:buffer . ':p') =~# '_test\.go$' - return '' - endif - - return 'gotype' -endfunction - -function! ale_linters#go#gotype#GetCommand(buffer) abort - return ale#go#EnvString(a:buffer) . 'gotype -e .' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'gotype', -\ 'output_stream': 'stderr', -\ 'executable': function('ale_linters#go#gotype#GetExecutable'), -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#go#gotype#GetCommand'), -\ 'callback': 'ale#handlers#go#Handler', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/govet.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/govet.vim deleted file mode 100644 index 5da8261c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/govet.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: neersighted -" Description: go vet for Go files -" -" Author: John Eikenberry -" Description: updated to work with go1.10 - -call ale#Set('go_go_executable', 'go') -call ale#Set('go_govet_options', '') - -function! ale_linters#go#govet#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'go_govet_options') - - return ale#go#EnvString(a:buffer) - \ . ale#Var(a:buffer, 'go_go_executable') . ' vet ' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' .' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'govet', -\ 'aliases': ['go vet'], -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'go_go_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#go#govet#GetCommand'), -\ 'callback': 'ale#handlers#go#Handler', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/langserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/langserver.vim deleted file mode 100644 index 7130db40..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/langserver.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: Horacio Sanson -" Description: Support for go-langserver https://github.com/sourcegraph/go-langserver - -call ale#Set('go_langserver_executable', 'go-langserver') -call ale#Set('go_langserver_options', '') - -function! ale_linters#go#langserver#GetCommand(buffer) abort - let l:executable = [ale#Escape(ale#Var(a:buffer, 'go_langserver_executable'))] - let l:options = ale#Var(a:buffer, 'go_langserver_options') - let l:options = substitute(l:options, '-gocodecompletion', '', 'g') - let l:options = filter(split(l:options, ' '), 'empty(v:val) != 1') - - if ale#Var(a:buffer, 'completion_enabled') - call add(l:options, '-gocodecompletion') - endif - - let l:options = uniq(sort(l:options)) - let l:env = ale#go#EnvString(a:buffer) - - return l:env . join(extend(l:executable, l:options), ' ') -endfunction - -call ale#linter#Define('go', { -\ 'name': 'golangserver', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'go_langserver_executable')}, -\ 'command': function('ale_linters#go#langserver#GetCommand'), -\ 'project_root': function('ale#go#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/revive.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/revive.vim deleted file mode 100644 index b14b5ab9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/revive.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Penghui Liao -" Description: Adds support for revive - -call ale#Set('go_revive_executable', 'revive') -call ale#Set('go_revive_options', '') - -function! ale_linters#go#revive#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'go_revive_options') - - return ale#go#EnvString(a:buffer) . '%e' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %t' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'revive', -\ 'output_stream': 'both', -\ 'executable': {b -> ale#Var(b, 'go_revive_executable')}, -\ 'command': function('ale_linters#go#revive#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/go/staticcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/go/staticcheck.vim deleted file mode 100644 index 36622440..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/go/staticcheck.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Author: Ben Reedy -" Description: staticcheck for Go files - -call ale#Set('go_staticcheck_executable', 'staticcheck') -call ale#Set('go_staticcheck_options', '') -call ale#Set('go_staticcheck_lint_package', 1) -call ale#Set('go_staticcheck_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#go#staticcheck#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'go_staticcheck_options') - let l:lint_package = ale#Var(a:buffer, 'go_staticcheck_lint_package') - let l:env = ale#go#EnvString(a:buffer) - - if l:lint_package - return l:env . '%e' - \ . (!empty(l:options) ? ' ' . l:options : '') . ' .' - endif - - return l:env . '%e' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %s:t' -endfunction - -call ale#linter#Define('go', { -\ 'name': 'staticcheck', -\ 'executable': {b -> ale#path#FindExecutable(b, 'go_staticcheck', [ -\ ale#go#GetGoPathExecutable('bin/staticcheck'), -\ ])}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#go#staticcheck#GetCommand'), -\ 'callback': 'ale#handlers#go#Handler', -\ 'output_stream': 'both', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/graphql/eslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/graphql/eslint.vim deleted file mode 100644 index a98233e9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/graphql/eslint.vim +++ /dev/null @@ -1,10 +0,0 @@ -" Author: Benjie Gillam -" Description: eslint for GraphQL files - -call ale#linter#Define('graphql', { -\ 'name': 'eslint', -\ 'executable': function('ale#handlers#eslint#GetExecutable'), -\ 'cwd': function('ale#handlers#eslint#GetCwd'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/graphql/gqlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/graphql/gqlint.vim deleted file mode 100644 index 6f1ca54a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/graphql/gqlint.vim +++ /dev/null @@ -1,10 +0,0 @@ -" Author: Michiel Westerbeek -" Description: Linter for GraphQL Schemas - -call ale#linter#Define('graphql', { -\ 'name': 'gqlint', -\ 'executable': 'gqlint', -\ 'cwd': '%s:h', -\ 'command': 'gqlint --reporter=simple %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/hack/hack.vim b/dotfiles/.vim/plugged/ale/ale_linters/hack/hack.vim deleted file mode 100644 index 822b5c87..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/hack/hack.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: Fred Emmott -" Description: Hack support via `hack lsp` - -call ale#Set('hack_hack_executable', 'hh_client') - -function! ale_linters#hack#hack#GetProjectRoot(buffer) abort - let l:hhconfig = ale#path#FindNearestFile(a:buffer, '.hhconfig') - - return !empty(l:hhconfig) ? fnamemodify(l:hhconfig, ':h') : '' -endfunction - -function! ale_linters#hack#hack#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'hack_hack_executable') -endfunction - -call ale#linter#Define('hack', { -\ 'name': 'hack', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#hack#hack#GetExecutable'), -\ 'command': '%e lsp --from vim-ale', -\ 'project_root': function('ale_linters#hack#hack#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/hack/hhast.vim b/dotfiles/.vim/plugged/ale/ale_linters/hack/hhast.vim deleted file mode 100644 index 5e6d4dec..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/hack/hhast.vim +++ /dev/null @@ -1,40 +0,0 @@ -" Author: Fred Emmott -" Description: Hack support via `hhast lsp` - -call ale#Set('hack_hhast_executable', 'vendor/bin/hhast-lint') - -function! ale_linters#hack#hhast#GetProjectRoot(buffer) abort - " Find the hack root, then figure out if it's also an HHAST root. - " Don't try to use lint configurations from vendor/foo/bar/hhast-lint.json - let l:hhconfig = ale#path#FindNearestFile(a:buffer, '.hhconfig') - - if empty(l:hhconfig) - return '' - endif - - let l:root = fnamemodify(l:hhconfig, ':h') - let l:hhast_config = findfile('hhast-lint.json', l:root) - - return !empty(l:hhast_config) ? l:root : '' -endfunction - -function! ale_linters#hack#hhast#GetExecutable(buffer) abort - let l:root = ale_linters#hack#hhast#GetProjectRoot(a:buffer) - let l:relative = ale#Var(a:buffer, 'hack_hhast_executable') - let l:absolute = findfile(l:relative, l:root) - - return !empty(l:absolute) ? l:absolute : '' -endfunction - -function! ale_linters#hack#hhast#GetInitializationOptions(buffer) abort - return {'lintMode': 'open-files'} -endfunction - -call ale#linter#Define('hack', { -\ 'name': 'hhast', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#hack#hhast#GetExecutable'), -\ 'command': '%e --mode lsp --from vim-ale', -\ 'project_root': function('ale_linters#hack#hhast#GetProjectRoot'), -\ 'initialization_options': function('ale_linters#hack#hhast#GetInitializationOptions'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haml/hamllint.vim b/dotfiles/.vim/plugged/ale/ale_linters/haml/hamllint.vim deleted file mode 100644 index 9fcd999f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haml/hamllint.vim +++ /dev/null @@ -1,57 +0,0 @@ -" Author: Patrick Lewis - https://github.com/patricklewis, thenoseman - https://github.com/thenoseman -" Description: haml-lint for Haml files - -call ale#Set('haml_hamllint_executable', 'haml-lint') - -function! ale_linters#haml#hamllint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'haml_hamllint_executable') -endfunction - -function! ale_linters#haml#hamllint#GetCommand(buffer) abort - let l:prefix = '' - - let l:rubocop_config_file_path = ale#path#FindNearestFile(a:buffer, '.rubocop.yml') - let l:hamllint_config_file_path = ale#path#FindNearestFile(a:buffer, '.haml-lint.yml') - - " Set HAML_LINT_RUBOCOP_CONF variable as it is needed for haml-lint to - " pick up the rubocop config. - " - " See https://github.com/brigade/haml-lint/blob/master/lib/haml_lint/linter/rubocop.rb#L89 - " HamlLint::Linter::RuboCop#rubocop_flags - if !empty(l:rubocop_config_file_path) - if has('win32') - let l:prefix = 'set HAML_LINT_RUBOCOP_CONF=' . ale#Escape(l:rubocop_config_file_path) . ' &&' - else - let l:prefix = 'HAML_LINT_RUBOCOP_CONF=' . ale#Escape(l:rubocop_config_file_path) - endif - endif - - return (!empty(l:prefix) ? l:prefix . ' ' : '') - \ . ale_linters#haml#hamllint#GetExecutable(a:buffer) - \ . (!empty(l:hamllint_config_file_path) ? ' --config ' . ale#Escape(l:hamllint_config_file_path) : '') - \ . ' %t' -endfunction - -function! ale_linters#haml#hamllint#Handle(buffer, lines) abort - " Matches patterns like the following: - " :51 [W] RuboCop: Use the new Ruby 1.9 hash syntax. - let l:pattern = '\v^.*:(\d+) \[([EW])\] (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'type': l:match[2], - \ 'text': l:match[3] - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('haml', { -\ 'name': 'hamllint', -\ 'executable': function('ale_linters#haml#hamllint#GetExecutable'), -\ 'command': function('ale_linters#haml#hamllint#GetCommand'), -\ 'callback': 'ale_linters#haml#hamllint#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/handlebars/embertemplatelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/handlebars/embertemplatelint.vim deleted file mode 100644 index 17c4d08e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/handlebars/embertemplatelint.vim +++ /dev/null @@ -1,67 +0,0 @@ -" Author: Adrian Zalewski -" Description: Ember-template-lint for checking Handlebars files - -call ale#Set('handlebars_embertemplatelint_executable', 'ember-template-lint') -call ale#Set('handlebars_embertemplatelint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#handlebars#embertemplatelint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'handlebars_embertemplatelint', [ - \ 'node_modules/.bin/ember-template-lint', - \]) -endfunction - -function! ale_linters#handlebars#embertemplatelint#GetCommand(buffer, version) abort - if ale#semver#GTE(a:version, [4, 0, 0]) - " --json was removed in favor of --format=json in ember-template-lint@4.0.0 - return '%e --format=json --filename %s' - endif - - if ale#semver#GTE(a:version, [1, 6, 0]) - " Reading from stdin was introduced in ember-template-lint@1.6.0 - return '%e --json --filename %s' - endif - - return '%e --json %t' -endfunction - -function! ale_linters#handlebars#embertemplatelint#GetCommandWithVersionCheck(buffer) abort - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ ale_linters#handlebars#embertemplatelint#GetExecutable(a:buffer), - \ '%e --version', - \ function('ale_linters#handlebars#embertemplatelint#GetCommand'), - \) -endfunction - -function! ale_linters#handlebars#embertemplatelint#Handle(buffer, lines) abort - let l:output = [] - let l:json = ale#util#FuzzyJSONDecode(a:lines, {}) - - for l:error in get(values(l:json), 0, []) - if has_key(l:error, 'fatal') - call add(l:output, { - \ 'lnum': get(l:error, 'line', 1), - \ 'col': get(l:error, 'column', 1), - \ 'text': l:error.message, - \ 'type': l:error.severity == 1 ? 'W' : 'E', - \}) - else - call add(l:output, { - \ 'lnum': l:error.line, - \ 'col': l:error.column, - \ 'text': l:error.rule . ': ' . l:error.message, - \ 'type': l:error.severity == 1 ? 'W' : 'E', - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('handlebars', { -\ 'name': 'embertemplatelint', -\ 'aliases': ['ember-template-lint'], -\ 'executable': function('ale_linters#handlebars#embertemplatelint#GetExecutable'), -\ 'command': function('ale_linters#handlebars#embertemplatelint#GetCommandWithVersionCheck'), -\ 'callback': 'ale_linters#handlebars#embertemplatelint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/cabal_ghc.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/cabal_ghc.vim deleted file mode 100644 index 1bb31ebb..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/cabal_ghc.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: Eric Wolf -" Description: ghc for Haskell files called with cabal exec - -call ale#Set('haskell_cabal_ghc_options', '-fno-code -v0') - -function! ale_linters#haskell#cabal_ghc#GetCommand(buffer) abort - return 'cabal exec -- ghc ' - \ . ale#Var(a:buffer, 'haskell_cabal_ghc_options') - \ . ' %t' -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'cabal_ghc', -\ 'aliases': ['cabal-ghc'], -\ 'output_stream': 'stderr', -\ 'executable': 'cabal', -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#haskell#cabal_ghc#GetCommand'), -\ 'callback': 'ale#handlers#haskell#HandleGHCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/cspell.vim deleted file mode 100644 index b0971a9e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Haskell files. - -call ale#handlers#cspell#DefineLinter('haskell') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc.vim deleted file mode 100644 index 9c3906b2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: w0rp -" Description: ghc for Haskell files - -call ale#Set('haskell_ghc_options', '-fno-code -v0') - -function! ale_linters#haskell#ghc#GetCommand(buffer) abort - return 'ghc ' - \ . ale#Var(a:buffer, 'haskell_ghc_options') - \ . ' %t' -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'ghc', -\ 'output_stream': 'stderr', -\ 'executable': 'ghc', -\ 'command': function('ale_linters#haskell#ghc#GetCommand'), -\ 'callback': 'ale#handlers#haskell#HandleGHCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc_mod.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc_mod.vim deleted file mode 100644 index 30e96b40..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/ghc_mod.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Author: wizzup -" Description: ghc-mod for Haskell files - -call ale#Set('haskell_ghc_mod_executable', 'ghc-mod') - -function! ale_linters#haskell#ghc_mod#GetCommand (buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_ghc_mod_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'ghc-mod') - \ . ' --map-file %s=%t check %s' -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'ghc_mod', -\ 'aliases': ['ghc-mod'], -\ 'executable': {b -> ale#Var(b, 'haskell_ghc_mod_executable')}, -\ 'command': function('ale_linters#haskell#ghc_mod#GetCommand'), -\ 'callback': 'ale#handlers#haskell#HandleGHCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/hdevtools.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/hdevtools.vim deleted file mode 100644 index 3e55e4f0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/hdevtools.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: rob-b, Takano Akio -" Description: hdevtools for Haskell files - -call ale#Set('haskell_hdevtools_executable', 'hdevtools') -call ale#Set('haskell_hdevtools_options', get(g:, 'hdevtools_options', '-g -Wall')) - -function! ale_linters#haskell#hdevtools#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_hdevtools_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'hdevtools') - \ . ' check' . ale#Pad(ale#Var(a:buffer, 'haskell_hdevtools_options')) - \ . ' -p %s %t' -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'hdevtools', -\ 'executable': {b -> ale#Var(b, 'haskell_hdevtools_executable')}, -\ 'command': function('ale_linters#haskell#hdevtools#GetCommand'), -\ 'callback': 'ale#handlers#haskell#HandleGHCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/hie.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/hie.vim deleted file mode 100644 index c4b5f1df..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/hie.vim +++ /dev/null @@ -1,41 +0,0 @@ -" Author: Luxed -" Description: A language server for Haskell - -call ale#Set('haskell_hie_executable', 'hie') - -function! ale_linters#haskell#hie#GetProjectRoot(buffer) abort - " Search for the stack file first - let l:project_file = ale#path#FindNearestFile(a:buffer, 'stack.yaml') - - " If it's empty, search for the cabal file - if empty(l:project_file) - " Search all of the paths except for the root filesystem path. - let l:paths = join( - \ ale#path#Upwards(expand('#' . a:buffer . ':p:h'))[:-2], - \ ',' - \) - let l:project_file = globpath(l:paths, '*.cabal') - endif - - " If we still can't find one, use the current file. - if empty(l:project_file) - let l:project_file = expand('#' . a:buffer . ':p') - endif - - return fnamemodify(l:project_file, ':h') -endfunction - -function! ale_linters#haskell#hie#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_hie_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'hie') - \ . ' --lsp' -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'hie', -\ 'lsp': 'stdio', -\ 'command': function('ale_linters#haskell#hie#GetCommand'), -\ 'executable': {b -> ale#Var(b, 'haskell_hie_executable')}, -\ 'project_root': function('ale_linters#haskell#hie#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/hlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/hlint.vim deleted file mode 100644 index 1425251a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/hlint.vim +++ /dev/null @@ -1,46 +0,0 @@ -" Author: jparoz -" Description: hlint for Haskell files - -call ale#Set('haskell_hlint_executable', 'hlint') -call ale#Set('haskell_hlint_options', get(g:, 'hlint_options', '')) - -function! ale_linters#haskell#hlint#Handle(buffer, lines) abort - let l:output = [] - - for l:error in ale#util#FuzzyJSONDecode(a:lines, []) - if l:error.severity is# 'Error' - let l:type = 'E' - elseif l:error.severity is# 'Suggestion' - let l:type = 'I' - else - let l:type = 'W' - endif - - call add(l:output, { - \ 'lnum': str2nr(l:error.startLine), - \ 'col': str2nr(l:error.startColumn), - \ 'end_lnum': str2nr(l:error.endLine), - \ 'end_col': str2nr(l:error.endColumn), - \ 'text': l:error.severity . ': ' . l:error.hint . '. Found: ' . l:error.from . ' Why not: ' . l:error.to, - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction - -function! ale_linters#haskell#hlint#GetCommand(buffer) abort - let l:hlintopts = '--color=never --json' - - return ale#handlers#hlint#GetExecutable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'haskell_hlint_options') - \ . ' ' . l:hlintopts - \ . ' -' -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'hlint', -\ 'executable': {b -> ale#Var(b, 'haskell_hlint_executable')}, -\ 'command': function('ale_linters#haskell#hlint#GetCommand') , -\ 'callback': 'ale_linters#haskell#hlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/hls.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/hls.vim deleted file mode 100644 index 7f9efc38..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/hls.vim +++ /dev/null @@ -1,65 +0,0 @@ -" Author: Yen3 -" Description: A language server for haskell -" The file is based on hie.vim (author: Luxed -" ). It search more project root files. -" -call ale#Set('haskell_hls_executable', 'haskell-language-server-wrapper') -call ale#Set('haskell_hls_config', {}) - -function! ale_linters#haskell#hls#FindRootFile(buffer) abort - let l:serach_root_files = [ - \ 'stack.yaml', - \ 'cabal.project', - \ 'package.yaml', - \ 'hie.yaml' - \ ] - - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - for l:root_file in l:serach_root_files - if filereadable(l:path . l:root_file) - return l:path - endif - endfor - endfor - - return '' -endfunction - -function! ale_linters#haskell#hls#GetProjectRoot(buffer) abort - " Search for the project file first - let l:project_file = ale_linters#haskell#hls#FindRootFile(a:buffer) - - " If it's empty, search for the cabal file - if empty(l:project_file) - " Search all of the paths except for the root filesystem path. - let l:paths = join( - \ ale#path#Upwards(expand('#' . a:buffer . ':p:h'))[:-2], - \ ',' - \) - let l:project_file = globpath(l:paths, '*.cabal') - endif - - " If we still can't find one, use the current file. - if empty(l:project_file) - let l:project_file = expand('#' . a:buffer . ':p') - endif - - return fnamemodify(l:project_file, ':h') -endfunction - -function! ale_linters#haskell#hls#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_hls_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, - \ 'haskell-language-server-wrapper') - \ . ' --lsp' -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'hls', -\ 'lsp': 'stdio', -\ 'command': function('ale_linters#haskell#hls#GetCommand'), -\ 'executable': {b -> ale#Var(b, 'haskell_hls_executable')}, -\ 'project_root': function('ale_linters#haskell#hls#GetProjectRoot'), -\ 'lsp_config': {b -> ale#Var(b, 'haskell_hls_config')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_build.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_build.vim deleted file mode 100644 index 8f2d9fd9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_build.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Jake Zimmerman -" Description: Like stack-ghc, but for entire projects -" -" Note: Ideally, this would *only* typecheck. Right now, it also does codegen. -" See . - -call ale#Set('haskell_stack_build_options', '--fast') - -function! ale_linters#haskell#stack_build#GetCommand(buffer) abort - let l:flags = ale#Var(a:buffer, 'haskell_stack_build_options') - - return 'stack build ' . l:flags -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'stack_build', -\ 'aliases': ['stack-build'], -\ 'output_stream': 'stderr', -\ 'executable': function('ale#handlers#haskell#GetStackExecutable'), -\ 'command': function('ale_linters#haskell#stack_build#GetCommand'), -\ 'lint_file': 1, -\ 'callback': 'ale#handlers#haskell#HandleGHCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_ghc.vim b/dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_ghc.vim deleted file mode 100644 index 51ecc744..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/haskell/stack_ghc.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: w0rp -" Description: ghc for Haskell files, using Stack - -call ale#Set('haskell_stack_ghc_options', '-fno-code -v0') - -function! ale_linters#haskell#stack_ghc#GetCommand(buffer) abort - return ale#handlers#haskell#GetStackExecutable(a:buffer) - \ . ' ghc -- ' - \ . ale#Var(a:buffer, 'haskell_stack_ghc_options') - \ . ' %t' -endfunction - -call ale#linter#Define('haskell', { -\ 'name': 'stack_ghc', -\ 'aliases': ['stack-ghc'], -\ 'output_stream': 'stderr', -\ 'executable': function('ale#handlers#haskell#GetStackExecutable'), -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#haskell#stack_ghc#GetCommand'), -\ 'callback': 'ale#handlers#haskell#HandleGHCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/help/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/help/alex.vim deleted file mode 100644 index 9be00a82..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/help/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for help files - -call ale#handlers#alex#DefineLinter('help', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/help/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/help/cspell.vim deleted file mode 100644 index 92eb9501..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/help/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for help files. - -call ale#handlers#cspell#DefineLinter('help') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/help/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/help/proselint.vim deleted file mode 100644 index 62124502..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/help/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for Vim help files - -call ale#linter#Define('help', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/help/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/help/writegood.vim deleted file mode 100644 index eeb21a73..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/help/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for vim Help files - -call ale#handlers#writegood#DefineLinter('help') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/alex.vim deleted file mode 100644 index 97756753..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for HTML files - -call ale#handlers#alex#DefineLinter('html', '--html') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/angular.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/angular.vim deleted file mode 100644 index 4f368fb4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/angular.vim +++ /dev/null @@ -1,56 +0,0 @@ -" Author: w0rp -" Description: tsserver integration for ALE - -call ale#Set('html_angular_executable', 'ngserver') -call ale#Set('html_angular_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#html#angular#GetProjectRoot(buffer) abort - return ale#path#Dirname( - \ ale#path#FindNearestDirectory(a:buffer, 'node_modules') - \) -endfunction - -function! ale_linters#html#angular#GetExecutable(buffer) abort - return 'node' -endfunction - -function! ale_linters#html#angular#GetCommand(buffer) abort - let l:language_service_dir = ale#path#Simplify( - \ ale#path#FindNearestDirectory( - \ a:buffer, - \ 'node_modules/@angular/language-service' - \ ) - \) - - if empty(l:language_service_dir) - return '' - endif - - let l:language_service_dir = fnamemodify(l:language_service_dir, ':h') - let l:typescript_dir = ale#path#Simplify( - \ fnamemodify(l:language_service_dir, ':h:h') - \ . '/typescript' - \) - let l:script = ale#path#FindExecutable(a:buffer, 'html_angular', [ - \ 'node_modules/@angular/language-server/bin/ngserver', - \ 'node_modules/@angular/language-server/index.js', - \]) - - if !filereadable(l:script) - return '' - endif - - return ale#Escape('node') . ' ' . ale#Escape(l:script) - \ . ' --ngProbeLocations ' . ale#Escape(l:language_service_dir) - \ . ' --tsProbeLocations ' . ale#Escape(l:typescript_dir) - \ . ' --stdio' -endfunction - -call ale#linter#Define('html', { -\ 'name': 'angular', -\ 'aliases': ['angular-language-server'], -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#html#angular#GetExecutable'), -\ 'command': function('ale_linters#html#angular#GetCommand'), -\ 'project_root': function('ale_linters#html#angular#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/cspell.vim deleted file mode 100644 index 743350ea..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for HTML files. - -call ale#handlers#cspell#DefineLinter('html') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/fecs.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/fecs.vim deleted file mode 100644 index 15e00e12..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/fecs.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: harttle -" Description: fecs for HTMl files - -call ale#linter#Define('html', { -\ 'name': 'fecs', -\ 'executable': function('ale#handlers#fecs#GetExecutable'), -\ 'command': function('ale#handlers#fecs#GetCommand'), -\ 'callback': 'ale#handlers#fecs#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/htmlhint.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/htmlhint.vim deleted file mode 100644 index 25bf5137..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/htmlhint.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Author: KabbAmine , deathmaz <00maz1987@gmail.com>, diartyz -" Description: HTMLHint for checking html files - -call ale#Set('html_htmlhint_options', '') -call ale#Set('html_htmlhint_executable', 'htmlhint') -call ale#Set('html_htmlhint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#html#htmlhint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'html_htmlhint_options') - let l:config = l:options !~# '--config' - \ ? ale#path#FindNearestFile(a:buffer, '.htmlhintrc') - \ : '' - - if !empty(l:config) - let l:options .= ' --config ' . ale#Escape(l:config) - endif - - if !empty(l:options) - let l:options = substitute(l:options, '--format=unix', '', '') - endif - - return '%e' . ale#Pad(l:options) . ' --format=unix %t' -endfunction - -call ale#linter#Define('html', { -\ 'name': 'htmlhint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'html_htmlhint', [ -\ 'node_modules/.bin/htmlhint', -\ ])}, -\ 'command': function('ale_linters#html#htmlhint#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsError', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/proselint.vim deleted file mode 100644 index 9fd7d671..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for HTML files - -call ale#linter#Define('html', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/stylelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/stylelint.vim deleted file mode 100644 index 6b7aba40..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/stylelint.vim +++ /dev/null @@ -1,27 +0,0 @@ -" Author: Filipe Kiss http://github.com/filipekiss - -call ale#Set('html_stylelint_executable', 'stylelint') -call ale#Set('html_stylelint_options', '') -call ale#Set('html_stylelint_use_global', 0) - -function! ale_linters#html#stylelint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'html_stylelint', [ - \ 'node_modules/.bin/stylelint', - \]) -endfunction - -function! ale_linters#html#stylelint#GetCommand(buffer) abort - let l:executable = ale_linters#html#stylelint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'html_stylelint_options') - - return ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --stdin-filename %s' -endfunction - -call ale#linter#Define('html', { -\ 'name': 'stylelint', -\ 'executable': function('ale_linters#html#stylelint#GetExecutable'), -\ 'command': function('ale_linters#html#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/tidy.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/tidy.vim deleted file mode 100644 index 1e476d40..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/tidy.vim +++ /dev/null @@ -1,70 +0,0 @@ -" Author: KabbAmine -" Description: This file adds support for checking HTML code with tidy. - -let g:ale_html_tidy_executable = get(g:, 'ale_html_tidy_executable', 'tidy') -let g:ale_html_tidy_options = get(g:, 'ale_html_tidy_options', '-q -e -language en') - -function! ale_linters#html#tidy#GetCommand(buffer) abort - " Specify file encoding in options - " (Idea taken from https://github.com/scrooloose/syntastic/blob/master/syntax_checkers/html/tidy.vim) - let l:file_encoding = get({ - \ 'ascii': '-ascii', - \ 'big5': '-big5', - \ 'cp1252': '-win1252', - \ 'cp850': '-ibm858', - \ 'cp932': '-shiftjis', - \ 'iso-2022-jp': '-iso-2022', - \ 'latin1': '-latin1', - \ 'macroman': '-mac', - \ 'sjis': '-shiftjis', - \ 'utf-16le': '-utf16le', - \ 'utf-16': '-utf16', - \ 'utf-8': '-utf8', - \ }, &fileencoding, '-utf8') - - " On macOS, old tidy (released on 31 Oct 2006) is installed. It does not - " consider HTML5 so we should avoid it. - let l:executable = ale#Var(a:buffer, 'html_tidy_executable') - - if has('mac') && l:executable is# 'tidy' && exists('*exepath') - \ && exepath(l:executable) is# '/usr/bin/tidy' - return '' - endif - - return printf('%s %s %s -', - \ l:executable, - \ ale#Var(a:buffer, 'html_tidy_options'), - \ l:file_encoding - \) -endfunction - -function! ale_linters#html#tidy#Handle(buffer, lines) abort - " Matches patterns lines like the following: - " line 7 column 5 - Warning: missing before - let l:pattern = '^line \(\d\+\) column \(\d\+\) - \(Warning\|Error\): \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:line = l:match[1] + 0 - let l:col = l:match[2] + 0 - let l:type = l:match[3] is# 'Error' ? 'E' : 'W' - let l:text = l:match[4] - - call add(l:output, { - \ 'lnum': l:line, - \ 'col': l:col, - \ 'text': l:text, - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('html', { -\ 'name': 'tidy', -\ 'executable': {b -> ale#Var(b, 'html_tidy_executable')}, -\ 'output_stream': 'stderr', -\ 'command': function('ale_linters#html#tidy#GetCommand'), -\ 'callback': 'ale_linters#html#tidy#Handle', -\ }) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/vscodehtml.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/vscodehtml.vim deleted file mode 100644 index 46814a0b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/vscodehtml.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: Dalius Dobravolskas -" Description: VSCode html language server - -function! ale_linters#html#vscodehtml#GetProjectRoot(buffer) abort - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -call ale#linter#Define('html', { -\ 'name': 'vscodehtml', -\ 'lsp': 'stdio', -\ 'executable': 'vscode-html-language-server', -\ 'command': '%e --stdio', -\ 'project_root': function('ale_linters#html#vscodehtml#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/html/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/html/writegood.vim deleted file mode 100644 index 6a2bd8e5..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/html/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for html files - -call ale#handlers#writegood#DefineLinter('html') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/idris/idris.vim b/dotfiles/.vim/plugged/ale/ale_linters/idris/idris.vim deleted file mode 100644 index 879e92f2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/idris/idris.vim +++ /dev/null @@ -1,81 +0,0 @@ -" Author: Scott Bonds -" Description: default Idris compiler - -call ale#Set('idris_idris_executable', 'idris') -call ale#Set('idris_idris_options', '--total --warnpartial --warnreach --warnipkg') - -function! ale_linters#idris#idris#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'idris_idris_options') - - return '%e' . ale#Pad(l:options) . ' --check %s' -endfunction - -function! ale_linters#idris#idris#Handle(buffer, lines) abort - " This was copied almost verbatim from ale#handlers#haskell#HandleGHCFormat - " - " Look for lines like the following: - " foo.idr:2:6:When checking right hand side of main with expected type - " bar.idr:11:11-13: - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+)(-\d+)?:(.*)?$' - let l:output = [] - - let l:corrected_lines = [] - - for l:line in a:lines - if len(matchlist(l:line, l:pattern)) > 0 - call add(l:corrected_lines, l:line) - elseif len(l:corrected_lines) > 0 - if l:line is# '' - let l:corrected_lines[-1] .= ' ' " turn a blank line into a space - else - let l:corrected_lines[-1] .= l:line - endif - - let l:corrected_lines[-1] = substitute(l:corrected_lines[-1], '\s\+', ' ', 'g') - endif - endfor - - for l:line in l:corrected_lines - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) == 0 - continue - endif - - if !ale#path#IsBufferPath(a:buffer, l:match[1]) - continue - endif - - let l:errors = matchlist(l:match[5], '\v([wW]arning|[eE]rror) - ?(.*)') - - if len(l:errors) > 0 - let l:ghc_type = l:errors[1] - let l:text = l:errors[2] - else - let l:ghc_type = '' - let l:text = l:match[5][:0] is# ' ' ? l:match[5][1:] : l:match[5] - endif - - if l:ghc_type is? 'Warning' - let l:type = 'W' - else - let l:type = 'E' - endif - - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:text, - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('idris', { -\ 'name': 'idris', -\ 'executable': {b -> ale#Var(b, 'idris_idris_executable')}, -\ 'command': function('ale_linters#idris#idris#GetCommand'), -\ 'callback': 'ale_linters#idris#idris#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ink/ls.vim b/dotfiles/.vim/plugged/ale/ale_linters/ink/ls.vim deleted file mode 100644 index 00b2f323..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ink/ls.vim +++ /dev/null @@ -1,35 +0,0 @@ -" Author: Andreww Hayworth -" Description: Integrate ALE with ink-language-server - -call ale#Set('ink_ls_executable', 'ink-language-server') -call ale#Set('ink_ls_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('ink_ls_initialization_options', {}) - -function! ale_linters#ink#ls#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'ink_ls', [ - \ 'ink-language-server', - \ 'node_modules/.bin/ink-language-server', - \]) -endfunction - -function! ale_linters#ink#ls#GetCommand(buffer) abort - let l:executable = ale_linters#ink#ls#GetExecutable(a:buffer) - - return ale#Escape(l:executable) . ' --stdio' -endfunction - -function! ale_linters#ink#ls#FindProjectRoot(buffer) abort - let l:main_file = get(ale#Var(a:buffer, 'ink_ls_initialization_options'), 'mainStoryPath', 'main.ink') - let l:config = ale#path#ResolveLocalPath(a:buffer, l:main_file, expand('#' . a:buffer . ':p')) - - return ale#path#Dirname(l:config) -endfunction - -call ale#linter#Define('ink', { -\ 'name': 'ink-language-server', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#ink#ls#GetExecutable'), -\ 'command': function('ale_linters#ink#ls#GetCommand'), -\ 'project_root': function('ale_linters#ink#ls#FindProjectRoot'), -\ 'initialization_options': {b -> ale#Var(b, 'ink_ls_initialization_options')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/inko/inko.vim b/dotfiles/.vim/plugged/ale/ale_linters/inko/inko.vim deleted file mode 100644 index 11558897..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/inko/inko.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Yorick Peterse -" Description: linting of Inko source code using the Inko compiler - -call ale#Set('inko_inko_executable', 'inko') - -function! ale_linters#inko#inko#GetCommand(buffer) abort - let l:include = '' - - " Include the tests source directory, but only for test files. - if expand('#' . a:buffer . ':p') =~? '\vtests[/\\]test[/\\]' - let l:test_dir = ale#path#FindNearestDirectory(a:buffer, 'tests') - - if isdirectory(l:test_dir) - let l:include = '--include ' . ale#Escape(l:test_dir) - endif - endif - - " We use %s instead of %t so the compiler determines the correct module - " names for the file being edited. Not doing so may lead to errors in - " certain cases. - return '%e build --check --format=json' - \ . ale#Pad(l:include) - \ . ' %s' -endfunction - -call ale#linter#Define('inko', { -\ 'name': 'inko', -\ 'executable': {b -> ale#Var(b, 'inko_inko_executable')}, -\ 'command': function('ale_linters#inko#inko#GetCommand'), -\ 'callback': 'ale#handlers#inko#Handle', -\ 'output_stream': 'stderr', -\ 'lint_file': 1 -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ispc/ispc.vim b/dotfiles/.vim/plugged/ale/ale_linters/ispc/ispc.vim deleted file mode 100644 index eb365117..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ispc/ispc.vim +++ /dev/null @@ -1,45 +0,0 @@ -" Author: Martino Pilia -" Description: Lint ispc files with the Intel(R) SPMD Program Compiler - -call ale#Set('ispc_ispc_executable', 'ispc') -call ale#Set('ispc_ispc_options', '') - -function! ale_linters#ispc#ispc#GetCommand(buffer) abort - " --nowrap: do not wrap message lines - return '%e --nowrap' - \ . ale#Pad(ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer))) - \ . ale#Pad(ale#Var(a:buffer, 'ispc_ispc_options')) - \ . ' %s' -endfunction - -" Note that we ignore the two warnings in the beginning of the compiler output -" ('no output file specified' and 'no --target specified'), since they have -" nothing to do with linting. -function! ale_linters#ispc#ispc#Handle(buffer, lines) abort - " Message format: :: : - " As far as I know, can be any of: - " 'error', 'Error', 'fatal error', 'Warning', 'Performance Warning' - let l:re = '\v.+:([0-9]+):([0-9]+):\s+([^:]+):\s+(.+)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:re) - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': str2nr(l:match[1]), - \ 'col': str2nr(l:match[2]), - \ 'type': l:match[3] =~? 'error' ? 'E' : 'W', - \ 'text': l:match[4], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('ispc', { -\ 'name': 'ispc', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'ispc_ispc_executable')}, -\ 'command': function('ale_linters#ispc#ispc#GetCommand'), -\ 'callback': 'ale_linters#ispc#ispc#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/java/checkstyle.vim b/dotfiles/.vim/plugged/ale/ale_linters/java/checkstyle.vim deleted file mode 100644 index 1ccbc505..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/java/checkstyle.vim +++ /dev/null @@ -1,73 +0,0 @@ -" Author: Devon Meunier -" Description: checkstyle for Java files - -call ale#Set('java_checkstyle_executable', 'checkstyle') -call ale#Set('java_checkstyle_config', '/google_checks.xml') -call ale#Set('java_checkstyle_options', '') - -function! ale_linters#java#checkstyle#Handle(buffer, lines) abort - let l:output = [] - - " modern checkstyle versions - let l:pattern = '\v\[(WARN|ERROR)\] [a-zA-Z]?:?[^:]+:(\d+):(\d+)?:? (.*) \[(.+)\]' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'type': l:match[1] is? 'WARN' ? 'W' : 'E', - \ 'sub_type': 'style', - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \ 'code': l:match[5], - \}) - endfor - - if !empty(l:output) - return l:output - endif - - " old checkstyle versions - let l:pattern = '\v(.+):(\d+): ([^:]+): (.+)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'type': l:match[3] is? 'warning' ? 'W' : 'E', - \ 'sub_type': 'style', - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[4], - \}) - endfor - - return l:output -endfunction - -function! s:GetConfig(buffer, config) abort - if ale#path#IsAbsolute(a:config) - return a:config - endif - - let s:file = ale#path#FindNearestFile(a:buffer, a:config) - - return !empty(s:file) ? s:file : a:config -endfunction - -function! ale_linters#java#checkstyle#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'java_checkstyle_options') - let l:config_option = ale#Var(a:buffer, 'java_checkstyle_config') - let l:config = l:options !~# '\v(^| )-c ' && !empty(l:config_option) - \ ? s:GetConfig(a:buffer, l:config_option) - \ : '' - - return '%e' - \ . ale#Pad(l:options) - \ . (!empty(l:config) ? ' -c ' . ale#Escape(l:config) : '') - \ . ' %s' -endfunction - -call ale#linter#Define('java', { -\ 'name': 'checkstyle', -\ 'executable': {b -> ale#Var(b, 'java_checkstyle_executable')}, -\ 'command': function('ale_linters#java#checkstyle#GetCommand'), -\ 'callback': 'ale_linters#java#checkstyle#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/java/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/java/cspell.vim deleted file mode 100644 index a6eecc0b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/java/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Java files. - -call ale#handlers#cspell#DefineLinter('java') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/java/eclipselsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/java/eclipselsp.vim deleted file mode 100644 index ad7cbeb4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/java/eclipselsp.vim +++ /dev/null @@ -1,200 +0,0 @@ -" Author: Horacio Sanson -" Description: Support for the Eclipse language server https://github.com/eclipse/eclipse.jdt.ls - -let s:version_cache = {} - -call ale#Set('java_eclipselsp_path', ale#path#Simplify($HOME . '/eclipse.jdt.ls')) -call ale#Set('java_eclipselsp_config_path', '') -call ale#Set('java_eclipselsp_workspace_path', '') -call ale#Set('java_eclipselsp_executable', 'java') -call ale#Set('java_eclipselsp_javaagent', '') - -function! ale_linters#java#eclipselsp#Executable(buffer) abort - return ale#Var(a:buffer, 'java_eclipselsp_executable') -endfunction - -function! ale_linters#java#eclipselsp#TargetPath(buffer) abort - return ale#Var(a:buffer, 'java_eclipselsp_path') -endfunction - -function! ale_linters#java#eclipselsp#JarPath(buffer) abort - let l:path = ale_linters#java#eclipselsp#TargetPath(a:buffer) - - if has('win32') - let l:platform = 'win32' - elseif has('macunix') - let l:platform = 'macosx' - else - let l:platform = 'linux' - endif - - " Search jar file within repository path when manually built using mvn - let l:files = globpath(l:path, '**/'.l:platform.'/**/plugins/org.eclipse.equinox.launcher_*\.jar', 1, 1) - - if len(l:files) >= 1 - return l:files[0] - endif - - " Search jar file within VSCode extensions folder. - let l:files = globpath(l:path, '**/'.l:platform.'/plugins/org.eclipse.equinox.launcher_*\.jar', 1, 1) - - if len(l:files) >= 1 - return l:files[0] - endif - - " Search jar file within unzipped tar.gz file - let l:files = globpath(l:path, 'plugins/org.eclipse.equinox.launcher_*\.jar', 1, 1) - - if len(l:files) >= 1 - return l:files[0] - endif - - " Search jar file within system package path - let l:files = globpath('/usr/share/java/jdtls/plugins', 'org.eclipse.equinox.launcher_*\.jar', 1, 1) - - if len(l:files) >= 1 - return l:files[0] - endif - - return '' -endfunction - -function! ale_linters#java#eclipselsp#ConfigurationPath(buffer) abort - let l:path = fnamemodify(ale_linters#java#eclipselsp#JarPath(a:buffer), ':p:h:h') - let l:config_path = ale#Var(a:buffer, 'java_eclipselsp_config_path') - - if !empty(l:config_path) - return ale#path#Simplify(l:config_path) - endif - - if has('win32') - let l:path = l:path . '/config_win' - elseif has('macunix') - let l:path = l:path . '/config_mac' - else - let l:path = l:path . '/config_linux' - endif - - return ale#path#Simplify(l:path) -endfunction - -function! ale_linters#java#eclipselsp#VersionCheck(version_lines) abort - return s:GetVersion('', a:version_lines) -endfunction - -function! s:GetVersion(executable, version_lines) abort - let l:version = [] - - for l:line in a:version_lines - let l:match = matchlist(l:line, '\(\d\+\)\.\(\d\+\)\.\(\d\+\)') - - if !empty(l:match) - let l:version = [l:match[1] + 0, l:match[2] + 0, l:match[3] + 0] - let s:version_cache[a:executable] = l:version - break - endif - endfor - - return l:version -endfunction - -function! ale_linters#java#eclipselsp#CommandWithVersion(buffer, version_lines, meta) abort - let l:executable = ale_linters#java#eclipselsp#Executable(a:buffer) - let l:version = s:GetVersion(l:executable, a:version_lines) - - return ale_linters#java#eclipselsp#Command(a:buffer, l:version) -endfunction - -function! ale_linters#java#eclipselsp#WorkspacePath(buffer) abort - let l:wspath = ale#Var(a:buffer, 'java_eclipselsp_workspace_path') - - if !empty(l:wspath) - return l:wspath - endif - - return ale#path#Dirname(ale#java#FindProjectRoot(a:buffer)) -endfunction - -function! ale_linters#java#eclipselsp#Javaagent(buffer) abort - let l:rets = [] - let l:raw = ale#Var(a:buffer, 'java_eclipselsp_javaagent') - - if empty(l:raw) - return '' - endif - - let l:jars = split(l:raw) - - for l:jar in l:jars - call add(l:rets, ale#Escape('-javaagent:' . l:jar)) - endfor - - return join(l:rets, ' ') -endfunction - -function! ale_linters#java#eclipselsp#Command(buffer, version) abort - let l:path = ale#Var(a:buffer, 'java_eclipselsp_path') - - let l:executable = ale_linters#java#eclipselsp#Executable(a:buffer) - - let l:cmd = [ ale#Escape(l:executable), - \ ale_linters#java#eclipselsp#Javaagent(a:buffer), - \ '-Declipse.application=org.eclipse.jdt.ls.core.id1', - \ '-Dosgi.bundles.defaultStartLevel=4', - \ '-Declipse.product=org.eclipse.jdt.ls.core.product', - \ '-Dlog.level=ALL', - \ '-noverify', - \ '-Xmx1G', - \ '-jar', - \ ale#Escape(ale_linters#java#eclipselsp#JarPath(a:buffer)), - \ '-configuration', - \ ale#Escape(ale_linters#java#eclipselsp#ConfigurationPath(a:buffer)), - \ '-data', - \ ale#Escape(ale_linters#java#eclipselsp#WorkspacePath(a:buffer)) - \ ] - - if ale#semver#GTE(a:version, [1, 9]) - call add(l:cmd, '--add-modules=ALL-SYSTEM') - call add(l:cmd, '--add-opens java.base/java.util=ALL-UNNAMED') - call add(l:cmd, '--add-opens java.base/java.lang=ALL-UNNAMED') - endif - - return join(l:cmd, ' ') -endfunction - -function! ale_linters#java#eclipselsp#RunWithVersionCheck(buffer) abort - let l:executable = ale_linters#java#eclipselsp#Executable(a:buffer) - - if empty(l:executable) - return '' - endif - - let l:cache = s:version_cache - - if has_key(s:version_cache, l:executable) - return ale_linters#java#eclipselsp#Command(a:buffer, s:version_cache[l:executable]) - endif - - let l:command = ale#Escape(l:executable) . ' -version' - - return ale#command#Run( - \ a:buffer, - \ l:command, - \ function('ale_linters#java#eclipselsp#CommandWithVersion'), - \ { 'output_stream': 'both' } - \) -endfunction - -call ale#linter#Define('java', { -\ 'name': 'eclipselsp', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#java#eclipselsp#Executable'), -\ 'command': function('ale_linters#java#eclipselsp#RunWithVersionCheck'), -\ 'language': 'java', -\ 'project_root': function('ale#java#FindProjectRoot'), -\ 'initialization_options': { -\ 'extendedClientCapabilities': { -\ 'classFileContentsSupport': v:true -\ } -\ } -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/java/javac.vim b/dotfiles/.vim/plugged/ale/ale_linters/java/javac.vim deleted file mode 100644 index 971e8de0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/java/javac.vim +++ /dev/null @@ -1,163 +0,0 @@ -" Author: farenjihn , w0rp -" Description: Lints java files using javac - -let s:classpath_sep = has('unix') ? ':' : ';' - -call ale#Set('java_javac_executable', 'javac') -call ale#Set('java_javac_options', '') -call ale#Set('java_javac_classpath', '') -call ale#Set('java_javac_sourcepath', '') - -function! ale_linters#java#javac#RunWithImportPaths(buffer) abort - let [l:cwd, l:command] = ale#maven#BuildClasspathCommand(a:buffer) - - " Try to use Gradle if Maven isn't available. - if empty(l:command) - let [l:cwd, l:command] = ale#gradle#BuildClasspathCommand(a:buffer) - endif - - " Try to use Ant if Gradle and Maven aren't available - if empty(l:command) - let [l:cwd, l:command] = ale#ant#BuildClasspathCommand(a:buffer) - endif - - if empty(l:command) - return ale_linters#java#javac#GetCommand(a:buffer, [], {}) - endif - - return ale#command#Run( - \ a:buffer, - \ l:command, - \ function('ale_linters#java#javac#GetCommand'), - \ {'cwd': l:cwd}, - \) -endfunction - -function! s:BuildClassPathOption(buffer, import_paths) abort - " Filter out lines like [INFO], etc. - let l:class_paths = filter(a:import_paths[:], 'v:val !~# ''[''') - let l:cls_path = ale#Var(a:buffer, 'java_javac_classpath') - - if !empty(l:cls_path) && type(l:cls_path) is v:t_string - call extend(l:class_paths, split(l:cls_path, s:classpath_sep)) - endif - - if !empty(l:cls_path) && type(l:cls_path) is v:t_list - call extend(l:class_paths, l:cls_path) - endif - - return !empty(l:class_paths) - \ ? '-cp ' . ale#Escape(join(l:class_paths, s:classpath_sep)) - \ : '' -endfunction - -function! ale_linters#java#javac#GetCommand(buffer, import_paths, meta) abort - let l:cp_option = s:BuildClassPathOption(a:buffer, a:import_paths) - let l:sp_option = '' - - " Find the src directory, for files in this project. - let l:src_dir = ale#path#FindNearestDirectory(a:buffer, 'src/main/java') - let l:sp_dirs = [] - - if !empty(l:src_dir) - call add(l:sp_dirs, l:src_dir) - - " Automatically include the jaxb directory too, if it's there. - let l:jaxb_dir = fnamemodify(l:src_dir, ':h:h') - \ . (has('win32') ? '\jaxb\' : '/jaxb/') - - if isdirectory(l:jaxb_dir) - call add(l:sp_dirs, l:jaxb_dir) - endif - endif - - " Automatically include the test directory, but only for test code. - if expand('#' . a:buffer . ':p') =~? '\vsrc[/\\]test[/\\]java' - let l:test_dir = ale#path#FindNearestDirectory(a:buffer, 'src/test/java') - - if isdirectory(l:test_dir) - call add(l:sp_dirs, l:test_dir) - endif - endif - - let l:source_paths = [] - let l:source_path = ale#Var(a:buffer, 'java_javac_sourcepath') - - if !empty(l:source_path) && type(l:source_path) is v:t_string - let l:source_paths = split(l:source_path, s:classpath_sep) - endif - - if !empty(l:source_path) && type(l:source_path) is v:t_list - let l:source_paths = l:source_path - endif - - if !empty(l:source_paths) - for l:path in l:source_paths - let l:sp_path = ale#path#FindNearestDirectory(a:buffer, l:path) - - if !empty(l:sp_path) - call add(l:sp_dirs, l:sp_path) - endif - endfor - endif - - if !empty(l:sp_dirs) - let l:sp_option = '-sourcepath ' - \ . ale#Escape(join(l:sp_dirs, s:classpath_sep)) - endif - - " Create .class files in a temporary directory, which we will delete later. - let l:class_file_directory = ale#command#CreateDirectory(a:buffer) - - " Always run javac from the directory the file is in, so we can resolve - " relative paths correctly. - return '%e -Xlint' - \ . ale#Pad(l:cp_option) - \ . ale#Pad(l:sp_option) - \ . ' -d ' . ale#Escape(l:class_file_directory) - \ . ale#Pad(ale#Var(a:buffer, 'java_javac_options')) - \ . ' %t' -endfunction - -function! ale_linters#java#javac#Handle(buffer, lines) abort - " Look for lines like the following. - " - " Main.java:13: warning: [deprecation] donaught() in Testclass has been deprecated - " Main.java:16: error: ';' expected - let l:directory = expand('#' . a:buffer . ':p:h') - let l:pattern = '\v^(.*):(\d+): (.{-1,}):(.+)$' - let l:col_pattern = '\v^(\s*\^)$' - let l:symbol_pattern = '\v^ +symbol: *(class|method) +([^ ]+)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, [l:pattern, l:col_pattern, l:symbol_pattern]) - if empty(l:match[2]) && empty(l:match[3]) - if !empty(l:match[1]) && !empty(l:output) - let l:output[-1].col = len(l:match[1]) - endif - elseif empty(l:match[3]) - " Add symbols to 'cannot find symbol' errors. - if l:output[-1].text is# 'error: cannot find symbol' - let l:output[-1].text .= ': ' . l:match[2] - endif - else - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:directory, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[3] . ':' . l:match[4], - \ 'type': l:match[3] is# 'error' ? 'E' : 'W', - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('java', { -\ 'name': 'javac', -\ 'executable': {b -> ale#Var(b, 'java_javac_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#java#javac#RunWithImportPaths'), -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#java#javac#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/java/javalsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/java/javalsp.vim deleted file mode 100644 index baf584c8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/java/javalsp.vim +++ /dev/null @@ -1,55 +0,0 @@ -" Author: Horacio Sanson -" Description: Support for the Java language server https://github.com/georgewfraser/vscode-javac - -call ale#Set('java_javalsp_executable', '') -call ale#Set('java_javalsp_config', {}) - -function! ale_linters#java#javalsp#Executable(buffer) abort - return ale#Var(a:buffer, 'java_javalsp_executable') -endfunction - -function! ale_linters#java#javalsp#Config(buffer) abort - let l:defaults = { 'java': { 'classPath': [], 'externalDependencies': [] } } - let l:config = ale#Var(a:buffer, 'java_javalsp_config') - - " Ensure the config dictionary contains both classPath and - " externalDependencies keys to avoid a NPE crash on Java Language Server. - call extend(l:config, l:defaults, 'keep') - call extend(l:config['java'], l:defaults['java'], 'keep') - - return l:config -endfunction - -function! ale_linters#java#javalsp#Command(buffer) abort - let l:executable = ale_linters#java#javalsp#Executable(a:buffer) - - if fnamemodify(l:executable, ':t') is# 'java' - " For backward compatibility. - let l:cmd = [ - \ ale#Escape(l:executable), - \ '--add-exports jdk.compiler/com.sun.tools.javac.api=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.code=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.comp=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.main=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.tree=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.model=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.util=javacs', - \ '--add-opens jdk.compiler/com.sun.tools.javac.api=javacs', - \ '-m javacs/org.javacs.Main', - \] - - return join(l:cmd, ' ') - else - return ale#Escape(l:executable) - endif -endfunction - -call ale#linter#Define('java', { -\ 'name': 'javalsp', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#java#javalsp#Executable'), -\ 'command': function('ale_linters#java#javalsp#Command'), -\ 'language': 'java', -\ 'project_root': function('ale#java#FindProjectRoot'), -\ 'lsp_config': function('ale_linters#java#javalsp#Config') -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/java/pmd.vim b/dotfiles/.vim/plugged/ale/ale_linters/java/pmd.vim deleted file mode 100644 index a1f4c93c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/java/pmd.vim +++ /dev/null @@ -1,36 +0,0 @@ -" Author: Johannes Wienke -" Description: PMD for Java files - -function! ale_linters#java#pmd#Handle(buffer, lines) abort - let l:pattern = '"\(\d\+\)",".*","\(.\+\)","\(\d\+\)","\(\d\+\)","\(.\+\)","\(.\+\)","\(.\+\)"$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'type': 'W', - \ 'lnum': l:match[4] + 0, - \ 'text': l:match[5], - \ 'code': l:match[6] . ' - ' . l:match[7], - \}) - endfor - - return l:output -endfunction - -function! ale_linters#java#pmd#GetCommand(buffer) abort - return 'pmd ' - \ . ale#Var(a:buffer, 'java_pmd_options') - \ . ' -f csv' - \ . ' -d %t' -endfunction - -if !exists('g:ale_java_pmd_options') - let g:ale_java_pmd_options = '-R category/java/bestpractices.xml' -endif - -call ale#linter#Define('java', { -\ 'name': 'pmd', -\ 'executable': 'pmd', -\ 'command': function('ale_linters#java#pmd#GetCommand'), -\ 'callback': 'ale_linters#java#pmd#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/cspell.vim deleted file mode 100644 index 5a496779..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for JavaScript files. - -call ale#handlers#cspell#DefineLinter('javascript') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/deno.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/deno.vim deleted file mode 100644 index 659eb855..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/deno.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Author: Arnold Chand -" Description: Deno lsp linter for JavaScript files. - -call ale#linter#Define('javascript', { -\ 'name': 'deno', -\ 'lsp': 'stdio', -\ 'executable': function('ale#handlers#deno#GetExecutable'), -\ 'command': '%e lsp', -\ 'project_root': function('ale#handlers#deno#GetProjectRoot'), -\ 'initialization_options': function('ale#handlers#deno#GetInitializationOptions'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/eslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/eslint.vim deleted file mode 100644 index cf4de6ec..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/eslint.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Author: w0rp -" Description: eslint for JavaScript files - -call ale#linter#Define('javascript', { -\ 'name': 'eslint', -\ 'output_stream': 'both', -\ 'executable': function('ale#handlers#eslint#GetExecutable'), -\ 'cwd': function('ale#handlers#eslint#GetCwd'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/fecs.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/fecs.vim deleted file mode 100644 index e47c0a0b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/fecs.vim +++ /dev/null @@ -1,10 +0,0 @@ -" Author: harttle -" Description: fecs for JavaScript files - -call ale#linter#Define('javascript', { -\ 'name': 'fecs', -\ 'executable': function('ale#handlers#fecs#GetExecutable'), -\ 'command': function('ale#handlers#fecs#GetCommand'), -\ 'read_buffer': 0, -\ 'callback': 'ale#handlers#fecs#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/flow.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/flow.vim deleted file mode 100644 index 601bac33..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/flow.vim +++ /dev/null @@ -1,160 +0,0 @@ -" Author: Zach Perrault -- @zperrault -" Author: Florian Beeres -" Description: FlowType checking for JavaScript files - -call ale#Set('javascript_flow_executable', 'flow') -call ale#Set('javascript_flow_use_home_config', 0) -call ale#Set('javascript_flow_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('javascript_flow_use_respect_pragma', 1) - -function! ale_linters#javascript#flow#GetExecutable(buffer) abort - let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig') - - if empty(l:flow_config) - " Don't run Flow if we can't find a .flowconfig file. - return '' - endif - - " Don't run Flow with a configuration file from the home directory by - " default, which can eat all of your RAM. - if fnamemodify(l:flow_config, ':h') is? $HOME - \&& !ale#Var(a:buffer, 'javascript_flow_use_home_config') - return '' - endif - - return ale#path#FindExecutable(a:buffer, 'javascript_flow', [ - \ 'node_modules/.bin/flow', - \]) -endfunction - -function! ale_linters#javascript#flow#GetCommand(buffer, version) abort - " If we can parse the version number, then only use --respect-pragma - " if the version is >= 0.36.0, which added the argument. - let l:use_respect_pragma = ale#Var(a:buffer, 'javascript_flow_use_respect_pragma') - \ && (empty(a:version) || ale#semver#GTE(a:version, [0, 36])) - - return '%e check-contents' - \ . (l:use_respect_pragma ? ' --respect-pragma': '') - \ . ' --json --from ale %s < %t' - \ . (!has('win32') ? '; echo' : '') -endfunction - -" Filter lines of flow output until we find the first line where the JSON -" output starts. -function! s:GetJSONLines(lines) abort - let l:start_index = 0 - - for l:line in a:lines - if l:line[:0] is# '{' - break - endif - - let l:start_index += 1 - endfor - - return a:lines[l:start_index :] -endfunction - -function! s:ExtraErrorMsg(current, new) abort - let l:newMsg = '' - - if a:current is# '' - " extra messages appear to already have a : - let l:newMsg = a:new - else - let l:newMsg = a:current . ' ' . a:new - endif - - return l:newMsg -endfunction - -function! s:GetDetails(error) abort - let l:detail = '' - - for l:extra_error in a:error.extra - if has_key(l:extra_error, 'message') - for l:extra_message in l:extra_error.message - let l:detail = s:ExtraErrorMsg(l:detail, l:extra_message.descr) - endfor - endif - - if has_key(l:extra_error, 'children') - for l:child in l:extra_error.children - for l:child_message in l:child.message - let l:detail = l:detail . ' ' . l:child_message.descr - endfor - endfor - endif - endfor - - return l:detail -endfunction - -function! ale_linters#javascript#flow#Handle(buffer, lines) abort - let l:str = join(s:GetJSONLines(a:lines), '') - - if empty(l:str) - return [] - endif - - let l:flow_output = json_decode(l:str) - let l:output = [] - - for l:error in get(l:flow_output, 'errors', []) - " Each error is broken up into parts - let l:text = '' - let l:line = 0 - let l:col = 0 - - for l:message in l:error.message - " Comments have no line of column information, so we skip them. - " In certain cases, `l:message.loc.source` points to a different path - " than the buffer one, thus we skip this loc information too. - if has_key(l:message, 'loc') - \&& l:line is# 0 - \&& ale#path#IsBufferPath(a:buffer, l:message.loc.source) - let l:line = l:message.loc.start.line + 0 - let l:col = l:message.loc.start.column + 0 - endif - - if l:text is# '' - let l:text = l:message.descr . ':' - else - let l:text = l:text . ' ' . l:message.descr - endif - endfor - - if has_key(l:error, 'operation') - let l:text = l:text . ' See also: ' . l:error.operation.descr - endif - - let l:errorToAdd = { - \ 'lnum': l:line, - \ 'col': l:col, - \ 'text': l:text, - \ 'type': has_key(l:error, 'level') && l:error.level is# 'error' ? 'E' : 'W', - \} - - if has_key(l:error, 'extra') - let l:errorToAdd.detail = l:errorToAdd.text - \ . "\n" . s:GetDetails(l:error) - endif - - call add(l:output, l:errorToAdd) - endfor - - return l:output -endfunction - -call ale#linter#Define('javascript', { -\ 'name': 'flow', -\ 'executable': function('ale_linters#javascript#flow#GetExecutable'), -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale_linters#javascript#flow#GetExecutable(buffer), -\ '%e --version', -\ function('ale_linters#javascript#flow#GetCommand'), -\ )}, -\ 'callback': 'ale_linters#javascript#flow#Handle', -\ 'read_buffer': 0, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/flow_ls.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/flow_ls.vim deleted file mode 100644 index fec34011..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/flow_ls.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: t_t -" Description: Integrate ALE with flow-language-server. - -call ale#Set('javascript_flow_ls_executable', 'flow') -call ale#Set('javascript_flow_ls_use_global', -\ get(g:, 'ale_use_global_executables', 0) -\) - -function! ale_linters#javascript#flow_ls#FindProjectRoot(buffer) abort - let l:flow_config = ale#path#FindNearestFile(a:buffer, '.flowconfig') - - if !empty(l:flow_config) - return fnamemodify(l:flow_config, ':h') - endif - - return '' -endfunction - -call ale#linter#Define('javascript', { -\ 'name': 'flow-language-server', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#path#FindExecutable(b, 'javascript_flow_ls', [ -\ 'node_modules/.bin/flow', -\ ])}, -\ 'command': '%e lsp --from ale-lsp', -\ 'project_root': function('ale_linters#javascript#flow_ls#FindProjectRoot'), -\ 'language': 'javascript', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/jscs.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/jscs.vim deleted file mode 100644 index ae3be68c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/jscs.vim +++ /dev/null @@ -1,61 +0,0 @@ -" Author: Chris Kyrouac - https://github.com/fijshion -" Description: jscs for JavaScript files - -call ale#Set('javascript_jscs_executable', 'jscs') -call ale#Set('javascript_jscs_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#javascript#jscs#GetCommand(buffer) abort - " Search for a local JShint config locaation, and default to a global one. - let l:jscs_config = ale#path#ResolveLocalPath( - \ a:buffer, - \ '.jscsrc', - \ get(g:, 'ale_jscs_config_loc', '') - \) - - let l:command = '%e --reporter inline --no-colors' - - if !empty(l:jscs_config) - let l:command .= ' --config ' . ale#Escape(l:jscs_config) - endif - - let l:command .= ' -' - - return l:command -endfunction - -function! ale_linters#javascript#jscs#Handle(buffer, lines) abort - " Matches patterns looking like the following - " - " foobar.js: line 2, col 1, Expected indentation of 1 characters - " - let l:pattern = '\v^.*:\s+line (\d+),\s+col\s+(\d+),\s+(.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:obj = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[3] - \} - - let l:code_match = matchlist(l:match[3], '\v([^ :]+): (.+)$') - - if !empty(l:code_match) - let l:obj.code = l:code_match[1] - let l:obj.text = l:code_match[2] - endif - - call add(l:output, l:obj) - endfor - - return l:output -endfunction - -call ale#linter#Define('javascript', { -\ 'name': 'jscs', -\ 'executable': {b -> ale#path#FindExecutable(b, 'javascript_jscs', [ -\ 'node_modules/.bin/jscs', -\ ])}, -\ 'command': function('ale_linters#javascript#jscs#GetCommand'), -\ 'callback': 'ale_linters#javascript#jscs#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/jshint.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/jshint.vim deleted file mode 100644 index 26d4fda2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/jshint.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Chris Kyrouac - https://github.com/fijshion -" Description: JSHint for Javascript files - -call ale#Set('javascript_jshint_executable', 'jshint') -call ale#Set('javascript_jshint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#javascript#jshint#GetCommand(buffer) abort - " Search for a local JShint config locaation, and default to a global one. - let l:jshint_config = ale#path#ResolveLocalPath( - \ a:buffer, - \ '.jshintrc', - \ get(g:, 'ale_jshint_config_loc', '') - \) - - let l:command = '%e --reporter unix --extract auto' - - if !empty(l:jshint_config) - let l:command .= ' --config ' . ale#Escape(l:jshint_config) - endif - - let l:command .= ' --filename %s -' - - return l:command -endfunction - -call ale#linter#Define('javascript', { -\ 'name': 'jshint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'javascript_jshint', [ -\ 'node_modules/.bin/jshint', -\ ])}, -\ 'command': function('ale_linters#javascript#jshint#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsError', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/standard.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/standard.vim deleted file mode 100644 index addf41dd..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/standard.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Author: Ahmed El Gabri <@ahmedelgabri> -" Description: standardjs for JavaScript files - -call ale#Set('javascript_standard_executable', 'standard') -call ale#Set('javascript_standard_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('javascript_standard_options', '') - -function! ale_linters#javascript#standard#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'javascript_standard', [ - \ 'node_modules/standardx/bin/cmd.js', - \ 'node_modules/standard/bin/cmd.js', - \ 'node_modules/semistandard/bin/cmd.js', - \ 'node_modules/.bin/standard', - \]) -endfunction - -function! ale_linters#javascript#standard#GetCommand(buffer) abort - let l:executable = ale_linters#javascript#standard#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'javascript_standard_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --stdin %s' -endfunction - -" standard uses eslint and the output format is the same -call ale#linter#Define('javascript', { -\ 'name': 'standard', -\ 'executable': function('ale_linters#javascript#standard#GetExecutable'), -\ 'command': function('ale_linters#javascript#standard#GetCommand'), -\ 'callback': 'ale#handlers#eslint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/tsserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/tsserver.vim deleted file mode 100644 index caf6972b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/tsserver.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Chaucerbao, w0rp -" Description: tsserver integration for ALE - -call ale#Set('javascript_tsserver_executable', 'tsserver') -call ale#Set('javascript_tsserver_config_path', '') -call ale#Set('javascript_tsserver_use_global', get(g:, 'ale_use_global_executables', 0)) - -call ale#linter#Define('javascript', { -\ 'name': 'tsserver', -\ 'lsp': 'tsserver', -\ 'executable': {b -> ale#path#FindExecutable(b, 'javascript_tsserver', [ -\ 'node_modules/.bin/tsserver', -\ ])}, -\ 'command': '%e', -\ 'project_root': function('ale#handlers#tsserver#GetProjectRoot'), -\ 'language': '', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/javascript/xo.vim b/dotfiles/.vim/plugged/ale/ale_linters/javascript/xo.vim deleted file mode 100644 index 5e04ad5c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/javascript/xo.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel Lupu -" Description: xo for JavaScript files - -call ale#linter#Define('javascript', { -\ 'name': 'xo', -\ 'executable': function('ale#handlers#xo#GetExecutable'), -\ 'command': function('ale#handlers#xo#GetLintCommand'), -\ 'callback': 'ale#handlers#xo#HandleJSON', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/json/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/json/cspell.vim deleted file mode 100644 index 0d7314a4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/json/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for JSON files. - -call ale#handlers#cspell#DefineLinter('json') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/json/eslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/json/eslint.vim deleted file mode 100644 index bdabb9fa..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/json/eslint.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: João Pesce -" Description: eslint for JSON files. -" -" Requires eslint-plugin-jsonc or a similar plugin to work -" -" Uses the same funtcions as ale_linters/javascript/eslint.vim by w0rp -" - -call ale#linter#Define('json', { -\ 'name': 'eslint', -\ 'output_stream': 'both', -\ 'executable': function('ale#handlers#eslint#GetExecutable'), -\ 'cwd': function('ale#handlers#eslint#GetCwd'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/json/jq.vim b/dotfiles/.vim/plugged/ale/ale_linters/json/jq.vim deleted file mode 100644 index 2f36a29e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/json/jq.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: jD91mZM2 -call ale#Set('json_jq_executable', 'jq') -call ale#Set('json_jq_options', '') -call ale#Set('json_jq_filters', '.') - -" Matches patterns like the following: -" parse error: Expected another key-value pair at line 4, column 3 -let s:pattern = '^parse error: \(.\+\) at line \(\d\+\), column \(\d\+\)$' - -function! ale_linters#json#jq#Handle(buffer, lines) abort - return ale#util#MapMatches(a:lines, s:pattern, {match -> { - \ 'text': match[1], - \ 'lnum': match[2] + 0, - \ 'col': match[3] + 0, - \}}) -endfunction - -call ale#linter#Define('json', { -\ 'name': 'jq', -\ 'executable': {b -> ale#Var(b, 'json_jq_executable')}, -\ 'output_stream': 'stderr', -\ 'command': '%e', -\ 'callback': 'ale_linters#json#jq#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/json/jsonlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/json/jsonlint.vim deleted file mode 100644 index 812540af..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/json/jsonlint.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: KabbAmine , David Sierra - -call ale#Set('json_jsonlint_executable', 'jsonlint') -call ale#Set('json_jsonlint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#json#jsonlint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'json_jsonlint', [ - \ 'node_modules/.bin/jsonlint', - \ 'node_modules/jsonlint/lib/cli.js', - \]) -endfunction - -function! ale_linters#json#jsonlint#GetCommand(buffer) abort - let l:executable = ale_linters#json#jsonlint#GetExecutable(a:buffer) - - return ale#node#Executable(a:buffer, l:executable) - \ . ' --compact -' -endfunction - -function! ale_linters#json#jsonlint#Handle(buffer, lines) abort - " Matches patterns like the following: - " line 2, col 15, found: 'STRING' - expected: 'EOF', '}', ',', ']'. - let l:pattern = '^line \(\d\+\), col \(\d*\), \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('json', { -\ 'name': 'jsonlint', -\ 'executable': function('ale_linters#json#jsonlint#GetExecutable'), -\ 'output_stream': 'stderr', -\ 'command': function('ale_linters#json#jsonlint#GetCommand'), -\ 'callback': 'ale_linters#json#jsonlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/json/spectral.vim b/dotfiles/.vim/plugged/ale/ale_linters/json/spectral.vim deleted file mode 100644 index 14129c56..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/json/spectral.vim +++ /dev/null @@ -1,14 +0,0 @@ -" Author: t2h5 -" Description: Integration of Stoplight Spectral CLI with ALE. - -call ale#Set('json_spectral_executable', 'spectral') -call ale#Set('json_spectral_use_global', get(g:, 'ale_use_global_executables', 0)) - -call ale#linter#Define('json', { -\ 'name': 'spectral', -\ 'executable': {b -> ale#path#FindExecutable(b, 'json_spectral', [ -\ 'node_modules/.bin/spectral', -\ ])}, -\ 'command': '%e lint --ignore-unknown-format -q -f text %t', -\ 'callback': 'ale#handlers#spectral#HandleSpectralOutput' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/json/vscodejson.vim b/dotfiles/.vim/plugged/ale/ale_linters/json/vscodejson.vim deleted file mode 100644 index dcaee010..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/json/vscodejson.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: Dalius Dobravolskas -" Description: VSCode json language server - -function! ale_linters#json#vscodejson#GetProjectRoot(buffer) abort - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -call ale#linter#Define('json', { -\ 'name': 'vscodejson', -\ 'lsp': 'stdio', -\ 'executable': 'vscode-json-language-server', -\ 'command': '%e --stdio', -\ 'project_root': function('ale_linters#json#vscodejson#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/json5/eslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/json5/eslint.vim deleted file mode 100644 index 6207f2d7..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/json5/eslint.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: João Pesce -" Description: eslint for JSON5 files. -" -" Requires eslint-plugin-jsonc or a similar plugin to work -" -" Uses the same funtcions as ale_linters/javascript/eslint.vim by w0rp -" - -call ale#linter#Define('json5', { -\ 'name': 'eslint', -\ 'output_stream': 'both', -\ 'executable': function('ale#handlers#eslint#GetExecutable'), -\ 'cwd': function('ale#handlers#eslint#GetCwd'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/jsonc/eslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/jsonc/eslint.vim deleted file mode 100644 index 1a5cc528..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/jsonc/eslint.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: João Pesce -" Description: eslint for JSONC files. -" -" Requires eslint-plugin-jsonc or a similar plugin to work -" -" Uses the same funtcions as ale_linters/javascript/eslint.vim by w0rp -" - -call ale#linter#Define('jsonc', { -\ 'name': 'eslint', -\ 'output_stream': 'both', -\ 'executable': function('ale#handlers#eslint#GetExecutable'), -\ 'cwd': function('ale#handlers#eslint#GetCwd'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnet_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnet_lint.vim deleted file mode 100644 index a5ebdc39..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnet_lint.vim +++ /dev/null @@ -1,59 +0,0 @@ -" Author: Trevor Whitney -" Description: jsonnet-lint for jsonnet files - -call ale#Set('jsonnet_jsonnet_lint_executable', 'jsonnet-lint') -call ale#Set('jsonnet_jsonnet_lint_options', '') - -function! ale_linters#jsonnet#jsonnet_lint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'jsonnet_jsonnet_lint_options') - - return '%e' - \ . ale#Pad(l:options) - \ . ' %t' -endfunction - - -function! ale_linters#jsonnet#jsonnet_lint#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " ERROR: foo.jsonnet:22:3-12 expected token OPERATOR but got (IDENTIFIER, "bar") - " ERROR: hoge.jsonnet:20:3 unexpected: "}" while parsing terminal - " ERROR: main.jsonnet:212:1-14 Expected , or ; but got (IDENTIFIER, "older_cluster") - let l:pattern = '^ERROR: [^:]*:\(\d\+\):\(\d\+\)\(-\d\+\)* \(.*\)' - let l:output = [] - - for l:line in a:lines - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) == 0 - continue - endif - - let line_number = l:match[1] + 0 - let column = l:match[2] + 0 - " l:match[3] has optional -14, when linter is showing a range - let text = l:match[4] - - - " vcol is Needed to indicate that the column is a character. - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': line_number, - \ 'vcol': 0, - \ 'col': column, - \ 'text': text, - \ 'type': 'E', - \ 'nr': -1, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('jsonnet', { -\ 'name': 'jsonnet_lint', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'jsonnet_jsonnet_lint_executable')}, -\ 'command': function('ale_linters#jsonnet#jsonnet_lint#GetCommand'), -\ 'callback': 'ale_linters#jsonnet#jsonnet_lint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnetfmt.vim b/dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnetfmt.vim deleted file mode 100644 index 8904019e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/jsonnet/jsonnetfmt.vim +++ /dev/null @@ -1,52 +0,0 @@ -" Authors: Trevor Whitney and Takuya Kosugiyama -" Description: jsonnetfmt for jsonnet files - -call ale#Set('jsonnet_jsonnetfmt_executable', 'jsonnetfmt') -call ale#Set('jsonnet_jsonnetfmt_options', '') - -function! ale_linters#jsonnet#jsonnetfmt#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'jsonnet_jsonnetfmt_options') - - return '%e' - \ . ale#Pad(l:options) - \ . ' %t' -endfunction - - -function! ale_linters#jsonnet#jsonnetfmt#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " STATIC ERROR: foo.jsonnet:22:3-12: expected token OPERATOR but got (IDENTIFIER, "bar") - " STATIC ERROR: hoge.jsonnet:20:3: unexpected: "}" while parsing terminal - let l:pattern = '^STATIC ERROR:[^:]*:\(\d\+\):\(\d\+\):*\(-\d\+\)* \(.*\)' - let l:output = [] - - for l:line in a:lines - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) == 0 - continue - endif - - " vcol is Needed to indicate that the column is a character. - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:match[1] + 0, - \ 'vcol': 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[4], - \ 'type': 'E', - \ 'nr': -1, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('jsonnet', { -\ 'name': 'jsonnetfmt', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'jsonnet_jsonnetfmt_executable')}, -\ 'command': function('ale_linters#jsonnet#jsonnetfmt#GetCommand'), -\ 'callback': 'ale_linters#jsonnet#jsonnetfmt#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/julia/languageserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/julia/languageserver.vim deleted file mode 100644 index 999ad815..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/julia/languageserver.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Bartolomeo Stellato -" Description: A language server for Julia - -" Set julia executable variable -call ale#Set('julia_executable', 'julia') - -function! ale_linters#julia#languageserver#GetCommand(buffer) abort - let l:julia_executable = ale#Var(a:buffer, 'julia_executable') - let l:cmd_string = 'using LanguageServer; using Pkg; import StaticLint; import SymbolServer; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, dirname(Pkg.Types.Context().env.project_file)); server.runlinter = true; run(server);' - - return ale#Escape(l:julia_executable) . ' --project=@. --startup-file=no --history-file=no -e ' . ale#Escape(l:cmd_string) -endfunction - -call ale#linter#Define('julia', { -\ 'name': 'languageserver', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'julia_executable')}, -\ 'command': function('ale_linters#julia#languageserver#GetCommand'), -\ 'language': 'julia', -\ 'project_root': function('ale#julia#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/kotlin/kotlinc.vim b/dotfiles/.vim/plugged/ale/ale_linters/kotlin/kotlinc.vim deleted file mode 100644 index e8bc924d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/kotlin/kotlinc.vim +++ /dev/null @@ -1,177 +0,0 @@ -" Author: Francis Agyapong -" Description: A linter for the Kotlin programming language that uses kotlinc - -let g:ale_kotlin_kotlinc_options = get(g:, 'ale_kotlin_kotlinc_options', '') -let g:ale_kotlin_kotlinc_enable_config = get(g:, 'ale_kotlin_kotlinc_enable_config', 0) -let g:ale_kotlin_kotlinc_config_file = get(g:, 'ale_kotlin_kotlinc_config_file', '.ale_kotlinc_config') -let g:ale_kotlin_kotlinc_classpath = get(g:, 'ale_kotlin_kotlinc_classpath', '') -let g:ale_kotlin_kotlinc_sourcepath = get(g:, 'ale_kotlin_kotlinc_sourcepath', '') -let g:ale_kotlin_kotlinc_use_module_file = get(g:, 'ale_kotlin_kotlinc_use_module_file', 0) -let g:ale_kotlin_kotlinc_module_filename = get(g:, 'ale_kotlin_kotlinc_module_filename', 'module.xml') - -let s:classpath_sep = has('unix') ? ':' : ';' - -function! ale_linters#kotlin#kotlinc#RunWithImportPaths(buffer) abort - let l:command = '' - - " exec maven/gradle only if classpath is not set - if !empty(ale#Var(a:buffer, 'kotlin_kotlinc_classpath')) - return ale_linters#kotlin#kotlinc#GetCommand(a:buffer, [], {}) - endif - - let [l:cwd, l:command] = ale#maven#BuildClasspathCommand(a:buffer) - - " Try to use Gradle if Maven isn't available. - if empty(l:command) - let [l:cwd, l:command] = ale#gradle#BuildClasspathCommand(a:buffer) - endif - - if empty(l:command) - return ale_linters#kotlin#kotlinc#GetCommand(a:buffer, [], {}) - endif - - return ale#command#Run( - \ a:buffer, - \ l:command, - \ function('ale_linters#kotlin#kotlinc#GetCommand'), - \ {'cwd': l:cwd}, - \) -endfunction - -function! s:BuildClassPathOption(buffer, import_paths) abort - " Filter out lines like [INFO], etc. - let l:class_paths = filter(a:import_paths[:], 'v:val !~# ''[''') - call extend( - \ l:class_paths, - \ split(ale#Var(a:buffer, 'kotlin_kotlinc_classpath'), s:classpath_sep), - \) - - return !empty(l:class_paths) - \ ? ' -cp ' . ale#Escape(join(l:class_paths, s:classpath_sep)) - \ : '' -endfunction - -function! ale_linters#kotlin#kotlinc#GetCommand(buffer, import_paths, meta) abort - let l:kotlinc_opts = ale#Var(a:buffer, 'kotlin_kotlinc_options') - let l:command = 'kotlinc ' - - " If the config file is enabled and readable, source it - if ale#Var(a:buffer, 'kotlin_kotlinc_enable_config') - let l:conf = expand(ale#Var(a:buffer, 'kotlin_kotlinc_config_file'), 1) - - if filereadable(l:conf) - execute 'source ' . fnameescape(l:conf) - endif - endif - - " If use module and module file is readable use that and return - if ale#Var(a:buffer, 'kotlin_kotlinc_use_module_file') - let l:module_filename = ale#Escape(expand(ale#Var(a:buffer, 'kotlin_kotlinc_module_filename'), 1)) - - if filereadable(l:module_filename) - let l:kotlinc_opts .= ' -module ' . l:module_filename - let l:command .= 'kotlinc ' . l:kotlinc_opts - - return l:command - endif - endif - - " We only get here if not using module or the module file not readable - if ale#Var(a:buffer, 'kotlin_kotlinc_classpath') isnot# '' - let l:kotlinc_opts .= ' -cp ' . ale#Var(a:buffer, 'kotlin_kotlinc_classpath') - else - " get classpath from maven/gradle - let l:kotlinc_opts .= s:BuildClassPathOption(a:buffer, a:import_paths) - endif - - let l:fname = '' - - if ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath') isnot# '' - let l:fname .= expand(ale#Var(a:buffer, 'kotlin_kotlinc_sourcepath'), 1) . ' ' - else - " Find the src directory for files in this project. - let l:project_root = ale#gradle#FindProjectRoot(a:buffer) - - if !empty(l:project_root) - let l:src_dir = l:project_root - else - let l:src_dir = ale#path#FindNearestDirectory(a:buffer, 'src/main/java') - \ . ' ' . ale#path#FindNearestDirectory(a:buffer, 'src/main/kotlin') - endif - - let l:fname .= expand(l:src_dir, 1) . ' ' - endif - - let l:fname .= ale#Escape(expand('#' . a:buffer . ':p')) - let l:command .= l:kotlinc_opts . ' ' . l:fname - - return l:command -endfunction - -function! ale_linters#kotlin#kotlinc#Handle(buffer, lines) abort - let l:code_pattern = '^\(.*\):\([0-9]\+\):\([0-9]\+\):\s\+\(error\|warning\):\s\+\(.*\)' - let l:general_pattern = '^\(warning\|error\|info\):\s*\(.*\)' - let l:output = [] - - for l:line in a:lines - let l:match = matchlist(l:line, l:code_pattern) - - if len(l:match) == 0 - continue - endif - - let l:file = l:match[1] - let l:line = l:match[2] + 0 - let l:column = l:match[3] + 0 - let l:type = l:match[4] - let l:text = l:match[5] - - let l:buf_abspath = fnamemodify(l:file, ':p') - let l:curbuf_abspath = expand('#' . a:buffer . ':p') - - " Skip if file is not loaded - if l:buf_abspath isnot# l:curbuf_abspath - continue - endif - - let l:type_marker_str = l:type is# 'warning' ? 'W' : 'E' - - call add(l:output, { - \ 'lnum': l:line, - \ 'col': l:column, - \ 'text': l:text, - \ 'type': l:type_marker_str, - \}) - endfor - - " Non-code related messages - for l:line in a:lines - let l:match = matchlist(l:line, l:general_pattern) - - if len(l:match) == 0 - continue - endif - - let l:type = l:match[1] - let l:text = l:match[2] - - let l:type_marker_str = l:type is# 'warning' || l:type is# 'info' ? 'W' : 'E' - - call add(l:output, { - \ 'lnum': 1, - \ 'text': l:text, - \ 'type': l:type_marker_str, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('kotlin', { -\ 'name': 'kotlinc', -\ 'executable': 'kotlinc', -\ 'output_stream': 'stderr', -\ 'command': function('ale_linters#kotlin#kotlinc#RunWithImportPaths'), -\ 'callback': 'ale_linters#kotlin#kotlinc#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/kotlin/ktlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/kotlin/ktlint.vim deleted file mode 100644 index 0bb64b19..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/kotlin/ktlint.vim +++ /dev/null @@ -1,10 +0,0 @@ -" Author: Francis Agyapong -" Description: Lint kotlin files using ktlint - -call ale#linter#Define('kotlin', { -\ 'name': 'ktlint', -\ 'executable': 'ktlint', -\ 'command': function('ale#handlers#ktlint#GetCommand'), -\ 'callback': 'ale#handlers#ktlint#Handle', -\ 'output_stream': 'stderr' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/kotlin/languageserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/kotlin/languageserver.vim deleted file mode 100644 index af78c0e0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/kotlin/languageserver.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: MTDL9 -" Description: Support for the Kotlin language server https://github.com/fwcd/KotlinLanguageServer - -call ale#Set('kotlin_languageserver_executable', 'kotlin-language-server') - -function! ale_linters#kotlin#languageserver#GetProjectRoot(buffer) abort - let l:gradle_root = ale#gradle#FindProjectRoot(a:buffer) - - if !empty(l:gradle_root) - return l:gradle_root - endif - - let l:maven_pom_file = ale#path#FindNearestFile(a:buffer, 'pom.xml') - - if !empty(l:maven_pom_file) - return fnamemodify(l:maven_pom_file, ':h') - endif - - return '' -endfunction - -call ale#linter#Define('kotlin', { -\ 'name': 'languageserver', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'kotlin_languageserver_executable')}, -\ 'command': '%e', -\ 'language': 'kotlin', -\ 'project_root': function('ale_linters#kotlin#languageserver#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/less/lessc.vim b/dotfiles/.vim/plugged/ale/ale_linters/less/lessc.vim deleted file mode 100644 index 8e21f5b4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/less/lessc.vim +++ /dev/null @@ -1,47 +0,0 @@ -" Author: zanona , w0rp -" Description: This file adds support for checking Less code with lessc. - -call ale#Set('less_lessc_executable', 'lessc') -call ale#Set('less_lessc_options', '') -call ale#Set('less_lessc_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#less#lessc#GetCommand(buffer) abort - return '%e --no-color --lint' - \ . ' --include-path=' . ale#Escape(expand('#' . a:buffer . ':p:h')) - \ . ale#Pad(ale#Var(a:buffer, 'less_lessc_options')) - \ . ' -' -endfunction - -function! ale_linters#less#lessc#Handle(buffer, lines) abort - let l:dir = expand('#' . a:buffer . ':p:h') - " Matches patterns like the following: - let l:pattern = '^\(\w\+\): \(.\{-}\) in \(.\{-}\) on line \(\d\+\), column \(\d\+\):$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': l:match[4] + 0, - \ 'col': l:match[5] + 0, - \ 'text': l:match[2], - \ 'type': 'E', - \} - - if l:match[3] isnot# '-' - let l:item.filename = ale#path#GetAbsPath(l:dir, l:match[3]) - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('less', { -\ 'name': 'lessc', -\ 'executable': {b -> ale#path#FindExecutable(b, 'less_lessc', [ -\ 'node_modules/.bin/lessc', -\ ])}, -\ 'command': function('ale_linters#less#lessc#GetCommand'), -\ 'callback': 'ale_linters#less#lessc#Handle', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/less/stylelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/less/stylelint.vim deleted file mode 100644 index 83f784c4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/less/stylelint.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: diartyz , w0rp - -call ale#Set('less_stylelint_executable', 'stylelint') -call ale#Set('less_stylelint_options', '') -call ale#Set('less_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#less#stylelint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'less_stylelint_options') - - return '%e' . ale#Pad(l:options) . ' --stdin-filename %s' -endfunction - -call ale#linter#Define('less', { -\ 'name': 'stylelint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'less_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#less#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/llvm/llc.vim b/dotfiles/.vim/plugged/ale/ale_linters/llvm/llc.vim deleted file mode 100644 index 594be063..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/llvm/llc.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: rhysd -" Description: Support for checking LLVM IR with llc - -call ale#Set('llvm_llc_executable', 'llc') - -function! ale_linters#llvm#llc#HandleErrors(buffer, lines) abort - " Handle '{path}: {file}:{line}:{col}: error: {message}' format - let l:pattern = '\v^[a-zA-Z]?:?[^:]+: [^:]+:(\d+):(\d+): (.+)$' - - return map(ale#util#GetMatches(a:lines, l:pattern), "{ - \ 'lnum': str2nr(v:val[1]), - \ 'col': str2nr(v:val[2]), - \ 'text': v:val[3], - \ 'type': 'E', - \}") -endfunction - -call ale#linter#Define('llvm', { -\ 'name': 'llc', -\ 'executable': {b -> ale#Var(b, 'llvm_llc_executable')}, -\ 'output_stream': 'stderr', -\ 'command': {-> '%e -filetype=null -o=' . g:ale#util#nul_file}, -\ 'callback': 'ale_linters#llvm#llc#HandleErrors', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/lua/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/lua/cspell.vim deleted file mode 100644 index 215b82f8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/lua/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Lua files. - -call ale#handlers#cspell#DefineLinter('lua') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/lua/luac.vim b/dotfiles/.vim/plugged/ale/ale_linters/lua/luac.vim deleted file mode 100644 index 41674a43..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/lua/luac.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Author: Jon Xie https://github.com/xiejiangzhi -" Description: luac linter for lua files - -call ale#Set('lua_luac_executable', 'luac') - -function! ale_linters#lua#luac#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " luac: stdin:5: '=' expected near ')' - " luac: stdin:8: ')' expected (to close '(' at line 6) near '123' - let l:pattern = '\v^.*:(\d+): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'type': 'E', - \ 'text': l:match[2], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('lua', { -\ 'name': 'luac', -\ 'executable': {b -> ale#Var(b, 'lua_luac_executable')}, -\ 'command': '%e -p -', -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#lua#luac#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/lua/luacheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/lua/luacheck.vim deleted file mode 100644 index 34be2b5a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/lua/luacheck.vim +++ /dev/null @@ -1,44 +0,0 @@ -" Author: Sol Bekic https://github.com/s-ol -" Description: luacheck linter for lua files - -call ale#Set('lua_luacheck_executable', 'luacheck') -call ale#Set('lua_luacheck_options', '') - -function! ale_linters#lua#luacheck#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'lua_luacheck_options')) - \ . ' --formatter plain --codes --filename %s -' -endfunction - -function! ale_linters#lua#luacheck#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " artal.lua:159:17: (W111) shadowing definition of loop variable 'i' on line 106 - " artal.lua:182:7: (W213) unused loop variable 'i' - let l:pattern = '^.*:\(\d\+\):\(\d\+\): (\([WE]\)\(\d\+\)) \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - \ && l:match[3] is# 'W' - \ && index(range(611, 614), str2nr(l:match[4])) >= 0 - continue - endif - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[3], - \ 'code': l:match[3] . l:match[4], - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('lua', { -\ 'name': 'luacheck', -\ 'executable': {b -> ale#Var(b, 'lua_luacheck_executable')}, -\ 'command': function('ale_linters#lua#luacheck#GetCommand'), -\ 'callback': 'ale_linters#lua#luacheck#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/lua/selene.vim b/dotfiles/.vim/plugged/ale/ale_linters/lua/selene.vim deleted file mode 100644 index 6b33cbfd..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/lua/selene.vim +++ /dev/null @@ -1,46 +0,0 @@ -call ale#Set('lua_selene_executable', 'selene') -call ale#Set('lua_selene_options', '') - -function! ale_linters#lua#selene#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'lua_selene_options')) - \ . ' --display-style=json -' -endfunction - -function! ale_linters#lua#selene#Handle(buffer, lines) abort - let l:output = [] - - for l:line in a:lines - " as of version 0.17.0, selene has no way to suppress summary - " information when outputting json, so stop processing when we hit it - " (PR for this here: https://github.com/Kampfkarren/selene/pull/356) - if l:line is# 'Results:' - break - endif - - let l:json = json_decode(l:line) - let l:lint = { - \ 'lnum': l:json.primary_label.span.start_line + 1, - \ 'end_lnum': l:json.primary_label.span.end_line + 1, - \ 'col': l:json.primary_label.span.start_column + 1, - \ 'end_col': l:json.primary_label.span.end_column, - \ 'text': l:json.message, - \ 'code': l:json.code, - \ 'type': l:json.severity is# 'Warning' ? 'W' : 'E', - \} - - if has_key(l:json, 'notes') && len(l:json.notes) > 0 - let l:lint.detail = l:lint.text . "\n\n" . join(l:json.notes, "\n") - endif - - call add(l:output, l:lint) - endfor - - return l:output -endfunction - -call ale#linter#Define('lua', { -\ 'name': 'selene', -\ 'executable': {b -> ale#Var(b, 'lua_selene_executable')}, -\ 'command': function('ale_linters#lua#selene#GetCommand'), -\ 'callback': 'ale_linters#lua#selene#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/mail/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/mail/alex.vim deleted file mode 100644 index 0fceea7b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/mail/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for mail files - -call ale#handlers#alex#DefineLinter('mail', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/mail/languagetool.vim b/dotfiles/.vim/plugged/ale/ale_linters/mail/languagetool.vim deleted file mode 100644 index f68dab7a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/mail/languagetool.vim +++ /dev/null @@ -1,5 +0,0 @@ -" Author: Vincent (wahrwolf [at] wolfpit.net) -" Description: languagetool for mails - - -call ale#handlers#languagetool#DefineLinter('mail') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/mail/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/mail/proselint.vim deleted file mode 100644 index 82c8d1f8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/mail/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for mail files - -call ale#linter#Define('mail', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/mail/vale.vim b/dotfiles/.vim/plugged/ale/ale_linters/mail/vale.vim deleted file mode 100644 index e6dfd2ec..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/mail/vale.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: chew-z https://github.com/chew-z -" Description: vale for Markdown files - -call ale#linter#Define('mail', { -\ 'name': 'vale', -\ 'executable': 'vale', -\ 'command': 'vale --output=JSON %t', -\ 'callback': 'ale#handlers#vale#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/make/checkmake.vim b/dotfiles/.vim/plugged/ale/ale_linters/make/checkmake.vim deleted file mode 100644 index d5f95d6f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/make/checkmake.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: aurieh - https://github.com/aurieh - -function! ale_linters#make#checkmake#Handle(buffer, lines) abort - let l:pattern = '\v^(\d+):(.+):(.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:match[1] + 0, - \ 'type': 'E', - \ 'code': l:match[2], - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('make', { -\ 'name': 'checkmake', -\ 'executable': 'checkmake', -\ 'command': 'checkmake %s --format="{{.LineNumber}}:{{.Rule}}:{{.Violation}}{{\"\r\n\"}}"', -\ 'callback': 'ale_linters#make#checkmake#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/alex.vim deleted file mode 100644 index 63769b5e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for markdown files - -call ale#handlers#alex#DefineLinter('markdown', '') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/cspell.vim deleted file mode 100644 index 45c586cc..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Markdown files. - -call ale#handlers#cspell#DefineLinter('markdown') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/languagetool.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/languagetool.vim deleted file mode 100644 index 422a38c3..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/languagetool.vim +++ /dev/null @@ -1,5 +0,0 @@ -" Author: Vincent (wahrwolf [at] wolfpit.net) -" Description: languagetool for markdown files - - -call ale#handlers#languagetool#DefineLinter('markdown') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/markdownlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/markdownlint.vim deleted file mode 100644 index 7a293938..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/markdownlint.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: Ty-Lucas Kelley -" Description: Adds support for markdownlint - -call ale#Set('markdown_markdownlint_options', '') - -function! ale_linters#markdown#markdownlint#GetCommand(buffer) abort - let l:executable = 'markdownlint' - - let l:options = ale#Var(a:buffer, 'markdown_markdownlint_options') - - return ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') . ' %s' -endfunction - -call ale#linter#Define('markdown', { -\ 'name': 'markdownlint', -\ 'executable': 'markdownlint', -\ 'lint_file': 1, -\ 'output_stream': 'both', -\ 'command': function('ale_linters#markdown#markdownlint#GetCommand'), -\ 'callback': 'ale#handlers#markdownlint#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/mdl.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/mdl.vim deleted file mode 100644 index fd44de6e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/mdl.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: Steve Dignam , Josh Leeb-du Toit -" Description: Support for mdl, a markdown linter. - -call ale#Set('markdown_mdl_executable', 'mdl') -call ale#Set('markdown_mdl_options', '') - -function! ale_linters#markdown#mdl#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'markdown_mdl_executable') -endfunction - -function! ale_linters#markdown#mdl#GetCommand(buffer) abort - let l:executable = ale_linters#markdown#mdl#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'bundle$' - \ ? ' exec mdl' - \ : '' - - let l:options = ale#Var(a:buffer, 'markdown_mdl_options') - - return ale#Escape(l:executable) . l:exec_args - \ . ' -j' . (!empty(l:options) ? ' ' . l:options : '') -endfunction - -function! ale_linters#markdown#mdl#Handle(buffer, lines) abort - let l:output = [] - - for l:error in ale#util#FuzzyJSONDecode(a:lines, []) - call add(l:output, { - \ 'lnum': l:error['line'], - \ 'code': l:error['rule'] . '/' . join(l:error['aliases'], '/'), - \ 'text': l:error['description'], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('markdown', { -\ 'name': 'mdl', -\ 'executable': function('ale_linters#markdown#mdl#GetExecutable'), -\ 'command': function('ale_linters#markdown#mdl#GetCommand'), -\ 'callback': 'ale_linters#markdown#mdl#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/proselint.vim deleted file mode 100644 index 289d8819..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: poohzrn https://github.com/poohzrn -" Description: proselint for Markdown files - -call ale#linter#Define('markdown', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/redpen.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/redpen.vim deleted file mode 100644 index ff2cbaf8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/redpen.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: rhysd https://rhysd.github.io -" Description: Redpen, a proofreading tool (http://redpen.cc) - -call ale#linter#Define('markdown', { -\ 'name': 'redpen', -\ 'executable': 'redpen', -\ 'command': 'redpen -f markdown -r json %t', -\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/remark_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/remark_lint.vim deleted file mode 100644 index 6085e7ef..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/remark_lint.vim +++ /dev/null @@ -1,48 +0,0 @@ -scriptencoding utf-8 -" Author rhysd https://rhysd.github.io/, Dirk Roorda (dirkroorda), Adrián González Rus (@adrigzr) -" Description: remark-lint for Markdown files -call ale#Set('markdown_remark_lint_executable', 'remark') -call ale#Set('markdown_remark_lint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('markdown_remark_lint_options', '') - -function! ale_linters#markdown#remark_lint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'markdown_remark_lint_options') - - return '%e' . ale#Pad(l:options) . ' --no-stdout --no-color' -endfunction - -function! ale_linters#markdown#remark_lint#Handle(buffer, lines) abort - " matches: ' 1:4 warning Incorrect list-item indent: add 1 space list-item-indent remark-lint' - " matches: ' 18:71-19:1 error Missing new line after list item list-item-spacing remark-lint', - let l:pattern = '^ \+\(\d\+\):\(\d\+\)\(-\(\d\+\):\(\d\+\)\)\? \(warning\|error\) \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[6] is# 'error' ? 'E' : 'W', - \ 'text': l:match[7], - \} - - if l:match[3] isnot# '' - let l:item.end_lnum = l:match[4] + 0 - let l:item.end_col = l:match[5] + 0 - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('markdown', { -\ 'name': 'remark_lint', -\ 'aliases': ['remark-lint'], -\ 'executable': {b -> ale#path#FindExecutable(b, 'markdown_remark_lint', [ -\ 'node_modules/.bin/remark', -\ ])}, -\ 'command': function('ale_linters#markdown#remark_lint#GetCommand'), -\ 'callback': 'ale_linters#markdown#remark_lint#Handle', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/textlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/textlint.vim deleted file mode 100644 index 613c8411..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/textlint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: tokida https://rouger.info, Yasuhiro Kiyota -" Description: textlint, a proofreading tool (https://textlint.github.io/) - -call ale#linter#Define('markdown', { -\ 'name': 'textlint', -\ 'executable': function('ale#handlers#textlint#GetExecutable'), -\ 'command': function('ale#handlers#textlint#GetCommand'), -\ 'callback': 'ale#handlers#textlint#HandleTextlintOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/vale.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/vale.vim deleted file mode 100644 index 06a64416..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/vale.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: chew-z https://github.com/chew-z -" Description: vale for Markdown files - -call ale#Set('markdown_vale_executable', 'vale') -call ale#Set('markdown_vale_input_file', '%t') -call ale#Set('markdown_vale_options', '') - -function! ale_linters#markdown#vale#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'markdown_vale_executable') - let l:input_file = ale#Var(a:buffer, 'markdown_vale_input_file') - - " Defaults to `vale --output=JSON %t` - return ale#Escape(l:executable) - \ . ' --output=JSON ' - \ . ale#Var(a:buffer, 'markdown_vale_options') - \ . ' ' . l:input_file -endfunction - -call ale#linter#Define('markdown', { -\ 'name': 'vale', -\ 'executable': {b -> ale#Var(b, 'markdown_vale_executable')}, -\ 'command': function('ale_linters#markdown#vale#GetCommand'), -\ 'callback': 'ale#handlers#vale#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/markdown/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/markdown/writegood.vim deleted file mode 100644 index 7108e7ac..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/markdown/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for Markdown files - -call ale#handlers#writegood#DefineLinter('markdown') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/matlab/mlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/matlab/mlint.vim deleted file mode 100644 index f58f8b6d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/matlab/mlint.vim +++ /dev/null @@ -1,44 +0,0 @@ -" Author: awlayton -" Description: mlint for MATLAB files - -call ale#Set('matlab_mlint_executable', 'mlint') - -function! ale_linters#matlab#mlint#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " L 27 (C 1): FNDEF: Terminate statement with semicolon to suppress output. - " L 30 (C 13-15): FNDEF: A quoted string is unterminated. - let l:pattern = '^L \(\d\+\) (C \([0-9-]\+\)): \([A-Z]\+\): \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:lnum = l:match[1] + 0 - let l:col = l:match[2] + 0 - let l:code = l:match[3] - let l:text = l:match[4] - - " Suppress erroneous waring about filename - " TODO: Enable this error when copying filename is supported - if l:code is# 'FNDEF' - continue - endif - - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:lnum, - \ 'col': l:col, - \ 'text': l:text, - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('matlab', { -\ 'name': 'mlint', -\ 'executable': {b -> ale#Var(b, 'matlab_mlint_executable')}, -\ 'command': '%e -id %t', -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#matlab#mlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/mercury/mmc.vim b/dotfiles/.vim/plugged/ale/ale_linters/mercury/mmc.vim deleted file mode 100644 index 85969e10..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/mercury/mmc.vim +++ /dev/null @@ -1,38 +0,0 @@ -" Author: stewy33 -" Description: Lints mercury files using mmc - -call ale#Set('mercury_mmc_executable', 'mmc') -call ale#Set('mercury_mmc_options', '--make --output-compile-error-lines 100') - -function! ale_linters#mercury#mmc#GetCommand(buffer) abort - return '%e --errorcheck-only ' - \ . ale#Var(a:buffer, 'mercury_mmc_options') - \ . ' %s:t:r' -endfunction - -function! ale_linters#mercury#mmc#Handle(buffer, lines) abort - " output format - " :: : - let l:pattern = '\v^\w+\.m:(\d+):\s+([W|w]arning|.*[E|e]rror.*): (.*)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': substitute(l:match[1], '\v^0*', '', '') + 0, - \ 'type': l:match[2][0] =~? 'W' ? 'W' : 'E', - \ 'text': l:match[2] . ': ' . l:match[3] - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('mercury', { -\ 'name': 'mmc', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'mercury_mmc_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#mercury#mmc#GetCommand'), -\ 'callback': 'ale_linters#mercury#mmc#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nasm/nasm.vim b/dotfiles/.vim/plugged/ale/ale_linters/nasm/nasm.vim deleted file mode 100644 index c4f53629..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nasm/nasm.vim +++ /dev/null @@ -1,41 +0,0 @@ -" Author: Oyvind Ingvaldsen -" Description: NASM linter for asmsyntax nasm. - -call ale#Set('nasm_nasm_executable', 'nasm') -call ale#Set('nasm_nasm_options', '') - -function! ale_linters#nasm#nasm#GetCommand(buffer) abort - " Note that NASM requires a trailing slash for the -I option. - let l:separator = has('win32') ? '\' : '/' - let l:output_null = has('win32') ? 'NUL' : '/dev/null' - - return '%e -X gnu -I %s:h' . l:separator - \ . ale#Pad(ale#Var(a:buffer, 'nasm_nasm_options')) - \ . ' %s' - \ . ' -o ' . l:output_null -endfunction - -function! ale_linters#nasm#nasm#Handle(buffer, lines) abort - " Note that we treat 'fatal' as errors. - let l:pattern = '^.\+:\(\d\+\): \([^:]\+\): \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'type': l:match[2] =~? 'error\|fatal' ? 'E' : 'W', - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('nasm', { -\ 'name': 'nasm', -\ 'output_stream': 'stderr', -\ 'lint_file': 1, -\ 'executable': {b -> ale#Var(b, 'nasm_nasm_executable')}, -\ 'command': function('ale_linters#nasm#nasm#GetCommand'), -\ 'callback': 'ale_linters#nasm#nasm#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nim/nimcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/nim/nimcheck.vim deleted file mode 100644 index b739ca04..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nim/nimcheck.vim +++ /dev/null @@ -1,79 +0,0 @@ -" Author: Baabelfish -" Description: Typechecking for nim files - -let s:end_col_patterns = [ -\ '\v''([^'']+)'' is declared but not used.*', -\ '\videntifier expected, but found ''([^'']+)''', -\ '\vimported and not used: ''([^'']+)''.*', -\ '\vundeclared identifier: ''([^'']+)''', -\ '\v''([^'']+)'' cannot be assigned to', -\ '\vredefinition of ''([^'']+)'';', -\] - -function! ale_linters#nim#nimcheck#Handle(buffer, lines) abort - let l:buffer_filename = fnamemodify(bufname(a:buffer), ':p:t') - let l:pattern = '^\(.\+\.nim\)(\(\d\+\), \(\d\+\)) \(.\+\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - " Only show errors of the current buffer - " NOTE: Checking filename only is OK because nim enforces unique - " module names. - let l:temp_buffer_filename = fnamemodify(l:match[1], ':p:t') - - if l:buffer_filename isnot# '' && l:temp_buffer_filename isnot# l:buffer_filename - continue - endif - - let l:item = { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \ 'type': 'W', - \} - - " Extract error type from message of type 'Error: Some error message' - let l:error_match = matchlist(l:item.text, '^\(.\{-}\): \(.\+\)$') - - if !empty(l:error_match) - if l:error_match[1] is# 'Error' - let l:item.type = 'E' - let l:item.text = l:error_match[2] - elseif l:error_match[1] is# 'Warning' - \|| l:error_match[1] is# 'Hint' - let l:item.text = l:error_match[2] - endif - endif - - let l:code_match = matchlist(l:item.text, '\v^(.+) \[([^ \[]+)\]$') - - if !empty(l:code_match) - let l:item.text = l:code_match[1] - let l:item.code = l:code_match[2] - endif - - " Find position end_col. - for l:col_match in ale#util#GetMatches(l:item.text, s:end_col_patterns) - let l:item.end_col = l:item.col + len(l:col_match[1]) - 1 - endfor - - call add(l:output, l:item) - endfor - - return l:output -endfunction - - -function! ale_linters#nim#nimcheck#GetCommand(buffer) abort - return 'nim check --verbosity:0 --colors:off --listFullPaths %s' -endfunction - - -call ale#linter#Define('nim', { -\ 'name': 'nimcheck', -\ 'executable': 'nim', -\ 'output_stream': 'both', -\ 'command': function('ale_linters#nim#nimcheck#GetCommand'), -\ 'callback': 'ale_linters#nim#nimcheck#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nim/nimlsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/nim/nimlsp.vim deleted file mode 100644 index 5d041043..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nim/nimlsp.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: jeremija -" Description: Support for nimlsp (language server for nim) - -call ale#Set('nim_nimlsp_nim_sources', '') - -function! ale_linters#nim#nimlsp#GetProjectRoot(buffer) abort - let l:project_root = ale#path#FindNearestDirectory(a:buffer, '.git') - - if !empty(l:project_root) - return fnamemodify(l:project_root, ':h:h') - endif - - return '' -endfunction - -function! ale_linters#nim#nimlsp#GetCommand(buffer) abort - let l:nim_sources = ale#Var(a:buffer, 'nim_nimlsp_nim_sources') - - if !empty(l:nim_sources) - let l:nim_sources = ale#Escape(l:nim_sources) - endif - - return '%e' . ale#Pad(l:nim_sources) -endfunction - -call ale#linter#Define('nim', { -\ 'name': 'nimlsp', -\ 'lsp': 'stdio', -\ 'executable': 'nimlsp', -\ 'command': function('ale_linters#nim#nimlsp#GetCommand'), -\ 'language': 'nim', -\ 'project_root': function('ale_linters#nim#nimlsp#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nix/nix.vim b/dotfiles/.vim/plugged/ale/ale_linters/nix/nix.vim deleted file mode 100644 index 7c2ce963..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nix/nix.vim +++ /dev/null @@ -1,63 +0,0 @@ -" Author: Alistair Bill <@alibabzo> -" Author: Maximilian Bosch -" Description: nix-instantiate linter for nix files - -function! ale_linters#nix#nix#Command(buffer, output, meta) abort - let l:version = a:output[0][22:] - - if l:version =~# '^\(2.[4-9]\|3\).*' - return 'nix-instantiate --log-format internal-json --parse -' - else - return 'nix-instantiate --parse -' - endif -endfunction - -function! ale_linters#nix#nix#Handle(buffer, lines) abort - let l:output = [] - - if empty(a:lines) - return l:output - endif - - if a:lines[0] =~# '^@nix .*' - for l:line in a:lines - if l:line =~# '^@nix .*' - let l:result = json_decode(strpart(l:line, 4)) - - if has_key(l:result, 'column') - call add(l:output, { - \ 'type': 'E', - \ 'lnum': l:result.line, - \ 'col': l:result.column, - \ 'text': l:result.raw_msg - \}) - endif - endif - endfor - else - let l:pattern = '^\(.\+\): \(.\+\) at .*:\(\d\+\):\(\d\+\)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[3] + 0, - \ 'col': l:match[4] + 0, - \ 'text': l:match[1] . ': ' . substitute(l:match[2], ',$', '', ''), - \ 'type': l:match[1] =~# '^error' ? 'E' : 'W', - \}) - endfor - endif - - return l:output -endfunction - -call ale#linter#Define('nix', { -\ 'name': 'nix', -\ 'output_stream': 'stderr', -\ 'executable': 'nix-instantiate', -\ 'command': {buffer -> ale#command#Run( -\ buffer, -\ 'nix-instantiate --version', -\ function('ale_linters#nix#nix#Command') -\ )}, -\ 'callback': 'ale_linters#nix#nix#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nix/rnix_lsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/nix/rnix_lsp.vim deleted file mode 100644 index 949bed1c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nix/rnix_lsp.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: jD91mZM2 -" Description: rnix-lsp language client - -function! ale_linters#nix#rnix_lsp#GetProjectRoot(buffer) abort - " rnix-lsp does not yet use the project root, so getting it right is not - " important - return fnamemodify(a:buffer, ':h') -endfunction - -call ale#linter#Define('nix', { -\ 'name': 'rnix_lsp', -\ 'lsp': 'stdio', -\ 'executable': 'rnix-lsp', -\ 'command': '%e', -\ 'project_root': function('ale_linters#nix#rnix_lsp#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nix/statix.vim b/dotfiles/.vim/plugged/ale/ale_linters/nix/statix.vim deleted file mode 100644 index a90a68a6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nix/statix.vim +++ /dev/null @@ -1,18 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: statix analysis and suggestions for Nix files - -call ale#Set('nix_statix_check_executable', 'statix') -call ale#Set('nix_statix_check_options', '') - -function! ale_linters#nix#statix#GetCommand(buffer) abort - return '%e check -o errfmt --stdin' - \ . ale#Pad(ale#Var(a:buffer, 'nix_statix_check_options')) -endfunction - -call ale#linter#Define('nix', { -\ 'name': 'statix', -\ 'executable': {b -> ale#Var(b, 'nix_statix_check_executable')}, -\ 'command': function('ale_linters#nix#statix#GetCommand'), -\ 'callback': 'ale#handlers#statix#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nroff/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/nroff/alex.vim deleted file mode 100644 index 3f06af26..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nroff/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for nroff files - -call ale#handlers#alex#DefineLinter('nroff', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nroff/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/nroff/proselint.vim deleted file mode 100644 index a23e56b1..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nroff/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for nroff files - -call ale#linter#Define('nroff', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/nroff/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/nroff/writegood.vim deleted file mode 100644 index bcf344f6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/nroff/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for nroff files - -call ale#handlers#writegood#DefineLinter('nroff') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/objc/ccls.vim b/dotfiles/.vim/plugged/ale/ale_linters/objc/ccls.vim deleted file mode 100644 index 7aef5325..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/objc/ccls.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Ye Jingchen , Ben Falconer , jtalowell -" Description: A language server for Objective-C - -call ale#Set('objc_ccls_executable', 'ccls') -call ale#Set('objc_ccls_init_options', {}) -call ale#Set('c_build_dir', '') - -call ale#linter#Define('objc', { -\ 'name': 'ccls', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'objc_ccls_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale#handlers#ccls#GetProjectRoot'), -\ 'initialization_options': {b -> ale#handlers#ccls#GetInitOpts(b, 'objc_ccls_init_options')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/objc/clang.vim b/dotfiles/.vim/plugged/ale/ale_linters/objc/clang.vim deleted file mode 100644 index cafb97db..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/objc/clang.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Bang Lee -" Description: clang linter for objc files - -" Set this option to change the Clang options for warnings for ObjC. -if !exists('g:ale_objc_clang_options') - let g:ale_objc_clang_options = '-std=c11 -Wall' -endif - -function! ale_linters#objc#clang#GetCommand(buffer) abort - " -iquote with the directory the file is in makes #include work for - " headers in the same directory. - return 'clang -S -x objective-c -fsyntax-only ' - \ . '-iquote %s:h' - \ . ' ' . ale#Var(a:buffer, 'objc_clang_options') . ' -' -endfunction - -call ale#linter#Define('objc', { -\ 'name': 'clang', -\ 'output_stream': 'stderr', -\ 'executable': 'clang', -\ 'command': function('ale_linters#objc#clang#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/objc/clangd.vim b/dotfiles/.vim/plugged/ale/ale_linters/objc/clangd.vim deleted file mode 100644 index 318d85b5..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/objc/clangd.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Andrey Melentyev -" Description: Clangd language server - -call ale#Set('objc_clangd_executable', 'clangd') -call ale#Set('objc_clangd_options', '') - -function! ale_linters#objc#clangd#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'objc_clangd_options')) -endfunction - -call ale#linter#Define('objc', { -\ 'name': 'clangd', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'objc_clangd_executable')}, -\ 'command': function('ale_linters#objc#clangd#GetCommand'), -\ 'project_root': function('ale#c#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/objcpp/clang.vim b/dotfiles/.vim/plugged/ale/ale_linters/objcpp/clang.vim deleted file mode 100644 index 35a40c6f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/objcpp/clang.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Bang Lee -" Description: clang linter for objcpp files - -" Set this option to change the Clang options for warnings for ObjCPP. -if !exists('g:ale_objcpp_clang_options') - let g:ale_objcpp_clang_options = '-std=c++14 -Wall' -endif - -function! ale_linters#objcpp#clang#GetCommand(buffer) abort - " -iquote with the directory the file is in makes #include work for - " headers in the same directory. - return 'clang++ -S -x objective-c++ -fsyntax-only ' - \ . '-iquote %s:h' - \ . ' ' . ale#Var(a:buffer, 'objcpp_clang_options') . ' -' -endfunction - -call ale#linter#Define('objcpp', { -\ 'name': 'clang', -\ 'output_stream': 'stderr', -\ 'executable': 'clang++', -\ 'command': function('ale_linters#objcpp#clang#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormatWithIncludes', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/objcpp/clangd.vim b/dotfiles/.vim/plugged/ale/ale_linters/objcpp/clangd.vim deleted file mode 100644 index 29455325..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/objcpp/clangd.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Andrey Melentyev -" Description: Clangd language server - -call ale#Set('objcpp_clangd_executable', 'clangd') -call ale#Set('objcpp_clangd_options', '') - -function! ale_linters#objcpp#clangd#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'objcpp_clangd_options')) -endfunction - -call ale#linter#Define('objcpp', { -\ 'name': 'clangd', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'objcpp_clangd_executable')}, -\ 'command': function('ale_linters#objcpp#clangd#GetCommand'), -\ 'project_root': function('ale#c#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ocaml/merlin.vim b/dotfiles/.vim/plugged/ale/ale_linters/ocaml/merlin.vim deleted file mode 100644 index cfec9966..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ocaml/merlin.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Andrey Popp -- @andreypopp -" Description: Report errors in OCaml code with Merlin - -if !exists('g:merlin') - finish -endif - -function! ale_linters#ocaml#merlin#Handle(buffer, lines) abort - return merlin#ErrorLocList() -endfunction - -call ale#linter#Define('ocaml', { -\ 'name': 'merlin', -\ 'executable': 'ocamlmerlin', -\ 'command': 'true', -\ 'callback': 'ale_linters#ocaml#merlin#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ocaml/ocamllsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/ocaml/ocamllsp.vim deleted file mode 100644 index 4ff7419c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ocaml/ocamllsp.vim +++ /dev/null @@ -1,13 +0,0 @@ -" Author: Risto Stevcev -" Description: The official language server for OCaml - -call ale#Set('ocaml_ocamllsp_use_opam', 1) - -call ale#linter#Define('ocaml', { -\ 'name': 'ocamllsp', -\ 'lsp': 'stdio', -\ 'executable': function('ale#handlers#ocamllsp#GetExecutable'), -\ 'command': function('ale#handlers#ocamllsp#GetCommand'), -\ 'language': function('ale#handlers#ocamllsp#GetLanguage'), -\ 'project_root': function('ale#handlers#ocamllsp#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ocaml/ols.vim b/dotfiles/.vim/plugged/ale/ale_linters/ocaml/ols.vim deleted file mode 100644 index ec71bdb4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ocaml/ols.vim +++ /dev/null @@ -1,14 +0,0 @@ -" Author: Michael Jungo -" Description: A language server for OCaml - -call ale#Set('ocaml_ols_executable', 'ocaml-language-server') -call ale#Set('ocaml_ols_use_global', get(g:, 'ale_use_global_executables', 0)) - -call ale#linter#Define('ocaml', { -\ 'name': 'ols', -\ 'lsp': 'stdio', -\ 'executable': function('ale#handlers#ols#GetExecutable'), -\ 'command': function('ale#handlers#ols#GetCommand'), -\ 'language': function('ale#handlers#ols#GetLanguage'), -\ 'project_root': function('ale#handlers#ols#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/merlin.vim b/dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/merlin.vim deleted file mode 100644 index 799490f7..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/merlin.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Andrey Popp -- @andreypopp -" Description: Report errors in OCaml code with Merlin - -if !exists('g:merlin') - finish -endif - -function! ale_linters#ocamlinterface#merlin#Handle(buffer, lines) abort - return merlin#ErrorLocList() -endfunction - -call ale#linter#Define('ocamlinterface', { -\ 'name': 'merlin', -\ 'executable': 'ocamlmerlin', -\ 'command': 'true', -\ 'callback': 'ale_linters#ocamlinterface#merlin#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/ocamllsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/ocamllsp.vim deleted file mode 100644 index cd4bea80..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ocamlinterface/ocamllsp.vim +++ /dev/null @@ -1,13 +0,0 @@ -" Author: Risto Stevcev -" Description: The official language server for OCaml - -call ale#Set('ocaml_ocamllsp_use_opam', 1) - -call ale#linter#Define('ocamlinterface', { -\ 'name': 'ocamllsp', -\ 'lsp': 'stdio', -\ 'executable': function('ale#handlers#ocamllsp#GetExecutable'), -\ 'command': function('ale#handlers#ocamllsp#GetCommand'), -\ 'language': function('ale#handlers#ocamllsp#GetLanguage'), -\ 'project_root': function('ale#handlers#ocamllsp#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/openapi/ibm_validator.vim b/dotfiles/.vim/plugged/ale/ale_linters/openapi/ibm_validator.vim deleted file mode 100644 index 446931a2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/openapi/ibm_validator.vim +++ /dev/null @@ -1,58 +0,0 @@ -" Author: Horacio Sanson - -call ale#Set('openapi_ibm_validator_executable', 'lint-openapi') -call ale#Set('openapi_ibm_validator_options', '') - -function! ale_linters#openapi#ibm_validator#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'openapi_ibm_validator_options')) - \ . ' %t' -endfunction - -function! ale_linters#openapi#ibm_validator#Handle(buffer, lines) abort - let l:output = [] - let l:type = 'E' - let l:message = '' - let l:nr = -1 - - for l:line in a:lines - let l:match = matchlist(l:line, '^errors$') - - if !empty(l:match) - let l:type = 'E' - endif - - let l:match = matchlist(l:line, '^warnings$') - - if !empty(l:match) - let l:type = 'W' - endif - - let l:match = matchlist(l:line, '^ *Message : *\(.\+\)$') - - if !empty(l:match) - let l:message = l:match[1] - endif - - let l:match = matchlist(l:line, '^ *Line *: *\(\d\+\)$') - - if !empty(l:match) - let l:nr = l:match[1] - - call add(l:output, { - \ 'lnum': l:nr + 0, - \ 'col': 0, - \ 'text': l:message, - \ 'type': l:type, - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('openapi', { -\ 'name': 'ibm_validator', -\ 'executable': {b -> ale#Var(b, 'openapi_ibm_validator_executable')}, -\ 'command': function('ale_linters#openapi#ibm_validator#GetCommand'), -\ 'callback': 'ale_linters#openapi#ibm_validator#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/openapi/yamllint.vim b/dotfiles/.vim/plugged/ale/ale_linters/openapi/yamllint.vim deleted file mode 100644 index 2b8952cc..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/openapi/yamllint.vim +++ /dev/null @@ -1,9 +0,0 @@ -call ale#Set('yaml_yamllint_executable', 'yamllint') -call ale#Set('yaml_yamllint_options', '') - -call ale#linter#Define('openapi', { -\ 'name': 'yamllint', -\ 'executable': {b -> ale#Var(b, 'yaml_yamllint_executable')}, -\ 'command': function('ale#handlers#yamllint#GetCommand'), -\ 'callback': 'ale#handlers#yamllint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/openscad/sca2d.vim b/dotfiles/.vim/plugged/ale/ale_linters/openscad/sca2d.vim deleted file mode 100644 index 60804a13..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/openscad/sca2d.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Description: SCA2D linter for OpenSCAD files - -call ale#Set('openscad_sca2d_executable', 'sca2d') -call ale#Set('openscad_sca2d_options', '') - -function! ale_linters#openscad#sca2d#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'openscad_sca2d_executable') -endfunction - -function! ale_linters#openscad#sca2d#GetCommand(buffer) abort - let l:executable = ale_linters#openscad#sca2d#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'openscad_sca2d_options') - - return ale#Escape(l:executable) . ale#Pad(l:options) . ' %s' -endfunction - -call ale#linter#Define('openscad', { -\ 'name': 'SCA2D', -\ 'aliases': ['sca2d'], -\ 'executable': function('ale_linters#openscad#sca2d#GetExecutable'), -\ 'command': function('ale_linters#openscad#sca2d#GetCommand'), -\ 'callback': 'ale#handlers#openscad#SCA2D_callback', -\ 'lint_file': 1, -\ }) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/perl/perl.vim b/dotfiles/.vim/plugged/ale/ale_linters/perl/perl.vim deleted file mode 100644 index 0f06528a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/perl/perl.vim +++ /dev/null @@ -1,64 +0,0 @@ -" Author: Vincent Lequertier -" Description: This file adds support for checking perl syntax - -call ale#Set('perl_perl_executable', 'perl') -call ale#Set('perl_perl_options', '-c -Mwarnings -Ilib') - -function! ale_linters#perl#perl#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'perl_perl_options')) . ' %t' -endfunction - -let s:begin_failed_skip_pattern = '\v' . join([ -\ '^Compilation failed in require', -\ '^Can''t locate', -\], '|') - -function! ale_linters#perl#perl#Handle(buffer, lines) abort - if empty(a:lines) - return [] - endif - - let l:pattern = '\(..\{-}\) at \(..\{-}\) line \(\d\+\)' - let l:output = [] - let l:basename = expand('#' . a:buffer . ':t') - - let l:type = 'E' - - if a:lines[-1] =~# 'syntax OK' - let l:type = 'W' - endif - - let l:seen = {} - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:line = l:match[3] - let l:file = l:match[2] - let l:text = l:match[1] - - if ale#path#IsBufferPath(a:buffer, l:file) - \ && !has_key(l:seen,l:line) - \ && ( - \ l:text isnot# 'BEGIN failed--compilation aborted' - \ || empty(l:output) - \ || match(l:output[-1].text, s:begin_failed_skip_pattern) < 0 - \ ) - call add(l:output, { - \ 'lnum': l:line, - \ 'text': l:text, - \ 'type': l:type, - \}) - - let l:seen[l:line] = 1 - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('perl', { -\ 'name': 'perl', -\ 'executable': {b -> ale#Var(b, 'perl_perl_executable')}, -\ 'output_stream': 'both', -\ 'command': function('ale_linters#perl#perl#GetCommand'), -\ 'callback': 'ale_linters#perl#perl#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/perl/perlcritic.vim b/dotfiles/.vim/plugged/ale/ale_linters/perl/perlcritic.vim deleted file mode 100644 index f3154c09..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/perl/perlcritic.vim +++ /dev/null @@ -1,61 +0,0 @@ -" Author: Vincent Lequertier , Chris Weyl -" Description: This file adds support for checking perl with perl critic - -call ale#Set('perl_perlcritic_executable', 'perlcritic') -call ale#Set('perl_perlcritic_profile', '.perlcriticrc') -call ale#Set('perl_perlcritic_options', '') -call ale#Set('perl_perlcritic_showrules', 0) - -function! ale_linters#perl#perlcritic#GetProfile(buffer) abort - " first see if we've been overridden - let l:profile = ale#Var(a:buffer, 'perl_perlcritic_profile') - - if l:profile is? '' - return '' - endif - - " otherwise, iterate upwards to find it - return ale#path#FindNearestFile(a:buffer, l:profile) -endfunction - -function! ale_linters#perl#perlcritic#GetCommand(buffer) abort - let l:critic_verbosity = '%l:%c %m\n' - - if ale#Var(a:buffer, 'perl_perlcritic_showrules') - let l:critic_verbosity = '%l:%c %m [%p]\n' - endif - - let l:profile = ale_linters#perl#perlcritic#GetProfile(a:buffer) - let l:options = ale#Var(a:buffer, 'perl_perlcritic_options') - - return '%e' - \ . ' --verbose ' . ale#Escape(l:critic_verbosity) - \ . ' --nocolor' - \ . (!empty(l:profile) ? ' --profile ' . ale#Escape(l:profile) : '') - \ . ale#Pad(l:options) -endfunction - - -function! ale_linters#perl#perlcritic#Handle(buffer, lines) abort - let l:pattern = '\(\d\+\):\(\d\+\) \(.\+\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1], - \ 'col': l:match[2], - \ 'text': l:match[3], - \ 'type': 'W' - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('perl', { -\ 'name': 'perlcritic', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'perl_perlcritic_executable')}, -\ 'command': function('ale_linters#perl#perlcritic#GetCommand'), -\ 'callback': 'ale_linters#perl#perlcritic#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/perl6/perl6.vim b/dotfiles/.vim/plugged/ale/ale_linters/perl6/perl6.vim deleted file mode 100644 index 444ae4d7..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/perl6/perl6.vim +++ /dev/null @@ -1,166 +0,0 @@ -" Author:Travis Gibson -" Description: This file adds support for checking perl6 syntax - -let g:ale_perl6_perl6_executable = -\ get(g:, 'ale_perl6_perl6_executable', 'perl6') - -let g:ale_perl6_perl6_options = -\ get(g:, 'ale_perl6_perl6_options', '-c -Ilib') - -let $PERL6_EXCEPTIONS_HANDLER = 'JSON' - -let $RAKUDO_ERROR_COLOR = 0 - -function! ale_linters#perl6#perl6#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'perl6_perl6_executable') -endfunction - -function! ale_linters#perl6#perl6#GetCommand(buffer) abort - return ale_linters#perl6#perl6#GetExecutable(a:buffer) - \ . ' ' . ale#Var(a:buffer, 'perl6_perl6_options') - \ . ' %t' -endfunction - -function! ale_linters#perl6#perl6#ExtractError(dict, item, type, buffer) abort - let l:file = '' - let l:line = 1 - let l:column = '' - let l:text = '' - let l:pre = '' - let l:counter = 2 - let l:end_line = '' - let l:linepatternmessage = 'at\s\+line\s\+\(\d\+\)' - - if has_key(a:dict[a:item], 'filename') && !empty(a:dict[a:item]['filename']) - let l:file = a:dict[a:item]['filename'] - endif - - if has_key(a:dict[a:item], 'line') && !empty(a:dict[a:item]['line']) - let l:line = a:dict[a:item]['line'] - let l:counter -= 1 - endif - - if has_key(a:dict[a:item], 'column') && !empty(a:dict[a:item]['column']) - let l:column = a:dict[a:item]['column'] - endif - - if has_key(a:dict[a:item], 'message') && !empty(a:dict[a:item]['message']) - let l:text = substitute(a:dict[a:item]['message'], '\s*\n\s*', ' ', 'g') - let l:counter -= 1 - endif - - if has_key(a:dict[a:item], 'line-real') && !empty(a:dict[a:item]['line-real']) - let l:end_line = l:line - let l:line = a:dict[a:item]['line-real'] - endif - - for l:match in ale#util#GetMatches(l:text, l:linepatternmessage) - let l:line = l:match[1] - let l:counter -= 1 - endfor - -" Currently, filenames and line numbers are not always given in the error output - if l:counter < 2 - \&& ( ale#path#IsBufferPath(a:buffer, l:file) || l:file is# '' ) - return { - \ 'lnum': '' . l:line, - \ 'text': l:text, - \ 'type': a:type, - \ 'col': l:column, - \ 'end_lnum': l:end_line, - \ 'code': a:item, - \} - endif - - return '' -endfunction - -function! ale_linters#perl6#perl6#Handle(buffer, lines) abort - let l:output = [] - - if empty(a:lines) - return l:output - endif - - if a:lines[0] is# 'Syntax OK' - return l:output - endif - - try - let l:json = json_decode(join(a:lines, '')) - catch /E474\|E491/ - call add(l:output, { - \ 'lnum': '1', - \ 'text': 'Received output in the default Perl6 error format. See :ALEDetail for details', - \ 'detail': join(a:lines, "\n"), - \ 'type': 'W', - \ }) - - return l:output - endtry - - if type(l:json) is v:t_dict - for l:key in keys(l:json) - if has_key(l:json[l:key], 'sorrows') - \&& has_key(l:json[l:key], 'worries') - if !empty(l:json[l:key]['sorrows']) - for l:dictionary in get(l:json[l:key], 'sorrows') - for l:item in keys(l:dictionary) - let l:result = - \ ale_linters#perl6#perl6#ExtractError( - \ l:dictionary, - \ l:item, - \ 'E', - \ a:buffer, - \ ) - - if l:result isnot# '' - call add(l:output, l:result) - endif - endfor - endfor - endif - - if !empty(l:json[l:key]['worries']) - for l:dictionary in get(l:json[l:key], 'worries') - for l:item in keys(l:dictionary) - let l:result = - \ ale_linters#perl6#perl6#ExtractError( - \ l:dictionary, - \ l:item, - \ 'W', - \ a:buffer, - \ ) - - if l:result isnot# '' - call add(l:output, l:result) - endif - endfor - endfor - endif - else - let l:result = ale_linters#perl6#perl6#ExtractError( - \ l:json, - \ l:key, - \ 'E', - \ a:buffer, - \ ) - - if l:result isnot# '' - call add(l:output, l:result) - endif - endif - endfor - endif - - return l:output -endfunction - -call ale#linter#Define('perl6', { -\ 'name': 'perl6', -\ 'executable': function('ale_linters#perl6#perl6#GetExecutable'), -\ 'output_stream': 'both', -\ 'command': function('ale_linters#perl6#perl6#GetCommand'), -\ 'callback': 'ale_linters#perl6#perl6#Handle', -\}) - diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/cspell.vim deleted file mode 100644 index 574df575..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for PHP files. - -call ale#handlers#cspell#DefineLinter('php') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/intelephense.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/intelephense.vim deleted file mode 100755 index 0fdcc93e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/intelephense.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Author: Eric Stern , -" Arnold Chand -" Description: Intelephense language server integration for ALE - -call ale#Set('php_intelephense_executable', 'intelephense') -call ale#Set('php_intelephense_use_global', 1) -call ale#Set('php_intelephense_config', {}) - -function! ale_linters#php#intelephense#GetProjectRoot(buffer) abort - let l:composer_path = ale#path#FindNearestFile(a:buffer, 'composer.json') - - if (!empty(l:composer_path)) - return fnamemodify(l:composer_path, ':h') - endif - - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -function! ale_linters#php#intelephense#GetInitializationOptions(buffer) abort - return ale#Var(a:buffer, 'php_intelephense_config') -endfunction - -call ale#linter#Define('php', { -\ 'name': 'intelephense', -\ 'lsp': 'stdio', -\ 'initialization_options': function('ale_linters#php#intelephense#GetInitializationOptions'), -\ 'executable': {b -> ale#path#FindExecutable(b, 'php_intelephense', [])}, -\ 'command': '%e --stdio', -\ 'project_root': function('ale_linters#php#intelephense#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/langserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/langserver.vim deleted file mode 100644 index c3d89a00..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/langserver.vim +++ /dev/null @@ -1,27 +0,0 @@ -" Author: Eric Stern -" Description: PHP Language server integration for ALE - -call ale#Set('php_langserver_executable', 'php-language-server.php') -call ale#Set('php_langserver_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#php#langserver#GetProjectRoot(buffer) abort - let l:composer_path = ale#path#FindNearestFile(a:buffer, 'composer.json') - - if (!empty(l:composer_path)) - return fnamemodify(l:composer_path, ':h') - endif - - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -call ale#linter#Define('php', { -\ 'name': 'langserver', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#path#FindExecutable(b, 'php_langserver', [ -\ 'vendor/bin/php-language-server.php', -\ ])}, -\ 'command': 'php %e', -\ 'project_root': function('ale_linters#php#langserver#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/phan.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/phan.vim deleted file mode 100644 index 50c6d6e6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/phan.vim +++ /dev/null @@ -1,75 +0,0 @@ -" Author: diegoholiveira , haginaga -" Description: static analyzer for PHP - -" Define the minimum severity -let g:ale_php_phan_minimum_severity = get(g:, 'ale_php_phan_minimum_severity', 0) - -let g:ale_php_phan_executable = get(g:, 'ale_php_phan_executable', 'phan') -let g:ale_php_phan_use_client = get(g:, 'ale_php_phan_use_client', 0) - -function! ale_linters#php#phan#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'php_phan_executable') - - if ale#Var(a:buffer, 'php_phan_use_client') == 1 && l:executable is# 'phan' - let l:executable = 'phan_client' - endif - - return l:executable -endfunction - -function! ale_linters#php#phan#GetCommand(buffer) abort - if ale#Var(a:buffer, 'php_phan_use_client') == 1 - let l:args = '-l ' - \ . ' %s' - else - let l:args = '-y ' - \ . ale#Var(a:buffer, 'php_phan_minimum_severity') - \ . ' %s' - endif - - let l:executable = ale_linters#php#phan#GetExecutable(a:buffer) - - return ale#Escape(l:executable) . ' ' . l:args -endfunction - -function! ale_linters#php#phan#Handle(buffer, lines) abort - " Matches against lines like the following: - if ale#Var(a:buffer, 'php_phan_use_client') == 1 - " Phan error: ERRORTYPE: message in /path/to/some-filename.php on line nnn - let l:pattern = '^Phan error: \(\w\+\): \(.\+\) in \(.\+\) on line \(\d\+\)$' - else - " /path/to/some-filename.php:18 ERRORTYPE message - let l:pattern = '^\(.*\):\(\d\+\)\s\(\w\+\)\s\(.\+\)$' - endif - - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if ale#Var(a:buffer, 'php_phan_use_client') == 1 - let l:dict = { - \ 'lnum': l:match[4] + 0, - \ 'text': l:match[2], - \ 'filename': l:match[3], - \ 'type': 'W', - \} - else - let l:dict = { - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[4], - \ 'type': 'W', - \ 'filename': l:match[1], - \} - endif - - call add(l:output, l:dict) - endfor - - return l:output -endfunction - -call ale#linter#Define('php', { -\ 'name': 'phan', -\ 'executable': function('ale_linters#php#phan#GetExecutable'), -\ 'command': function('ale_linters#php#phan#GetCommand'), -\ 'callback': 'ale_linters#php#phan#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/php.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/php.vim deleted file mode 100644 index 51a109b9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/php.vim +++ /dev/null @@ -1,39 +0,0 @@ -" Author: Spencer Wood , Adriaan Zonnenberg -" Description: This file adds support for checking PHP with php-cli - -call ale#Set('php_php_executable', 'php') - -function! ale_linters#php#php#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " PHP 7.1<= - Parse error: syntax error, unexpected ';', expecting ']' in - on line 15 - " PHP 7.2>= - Parse error: syntax error, unexpected ';', expecting ']' in Standard input code on line 15 - let l:pattern = '\v^%(Fatal|Parse) error:\s+(.+unexpected ''(.+)%(expecting.+)@ ale#Var(b, 'php_php_executable')}, -\ 'output_stream': 'stdout', -\ 'command': '%e -l -d error_reporting=E_ALL -d display_errors=1 -d log_errors=0 --', -\ 'callback': 'ale_linters#php#php#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/phpactor.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/phpactor.vim deleted file mode 100644 index b137eaf1..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/phpactor.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Arizard -" Description: PHPactor integration for ALE - -" Copied from langserver.vim -function! ale_linters#php#phpactor#GetProjectRoot(buffer) abort - let l:composer_path = ale#path#FindNearestFile(a:buffer, 'composer.json') - - if (!empty(l:composer_path)) - return fnamemodify(l:composer_path, ':h') - endif - - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -call ale#linter#Define('php', { -\ 'name': 'phpactor', -\ 'lsp': 'stdio', -\ 'executable': 'phpactor', -\ 'command': '%e language-server', -\ 'project_root': function('ale_linters#php#phpactor#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/phpcs.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/phpcs.vim deleted file mode 100644 index ce47a13b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/phpcs.vim +++ /dev/null @@ -1,54 +0,0 @@ -" Author: jwilliams108 , Eric Stern -" Description: phpcs for PHP files - -let g:ale_php_phpcs_standard = get(g:, 'ale_php_phpcs_standard', '') - -call ale#Set('php_phpcs_options', '') -call ale#Set('php_phpcs_executable', 'phpcs') -call ale#Set('php_phpcs_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#php#phpcs#GetCommand(buffer) abort - let l:standard = ale#Var(a:buffer, 'php_phpcs_standard') - let l:standard_option = !empty(l:standard) - \ ? '--standard=' . ale#Escape(l:standard) - \ : '' - - return '%e -s --report=emacs --stdin-path=%s' - \ . ale#Pad(l:standard_option) - \ . ale#Pad(ale#Var(a:buffer, 'php_phpcs_options')) -endfunction - -function! ale_linters#php#phpcs#Handle(buffer, lines) abort - " Matches against lines like the following: - " - " /path/to/some-filename.php:18:3: error - Line indented incorrectly; expected 4 spaces, found 2 (Generic.WhiteSpace.ScopeIndent.IncorrectExact) - let l:pattern = '^.*:\(\d\+\):\(\d\+\): \(.\+\) - \(.\+\) (\(.\+\)).*$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:code = l:match[5] - let l:text = l:match[4] . ' (' . l:code . ')' - let l:type = l:match[3] - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:text, - \ 'type': l:type is# 'error' ? 'E' : 'W', - \ 'sub_type': 'style', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('php', { -\ 'name': 'phpcs', -\ 'executable': {b -> ale#path#FindExecutable(b, 'php_phpcs', [ -\ 'vendor/bin/phpcs', -\ 'phpcs' -\ ])}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#php#phpcs#GetCommand'), -\ 'callback': 'ale_linters#php#phpcs#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/phpmd.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/phpmd.vim deleted file mode 100644 index 9b1d1e44..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/phpmd.vim +++ /dev/null @@ -1,38 +0,0 @@ -" Author: medains , David Sierra -" Description: phpmd for PHP files - -let g:ale_php_phpmd_executable = get(g:, 'ale_php_phpmd_executable', 'phpmd') - -" Set to change the ruleset -let g:ale_php_phpmd_ruleset = get(g:, 'ale_php_phpmd_ruleset', 'cleancode,codesize,controversial,design,naming,unusedcode') - -function! ale_linters#php#phpmd#GetCommand(buffer) abort - return '%e %s text' - \ . ale#Pad(ale#Var(a:buffer, 'php_phpmd_ruleset')) - \ . ' --ignore-violations-on-exit %t' -endfunction - -function! ale_linters#php#phpmd#Handle(buffer, lines) abort - " Matches against lines like the following: - " - " /path/to/some-filename.php:18 message - let l:pattern = '^.*:\(\d\+\)\s\+\(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'text': l:match[2], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('php', { -\ 'name': 'phpmd', -\ 'executable': {b -> ale#Var(b, 'php_phpmd_executable')}, -\ 'command': function('ale_linters#php#phpmd#GetCommand'), -\ 'callback': 'ale_linters#php#phpmd#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/phpstan.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/phpstan.vim deleted file mode 100644 index 4dce5d5f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/phpstan.vim +++ /dev/null @@ -1,89 +0,0 @@ -" Author: medains , ardis , Arizard -" Description: phpstan for PHP files - -" Set to change the ruleset -let g:ale_php_phpstan_executable = get(g:, 'ale_php_phpstan_executable', 'phpstan') -let g:ale_php_phpstan_level = get(g:, 'ale_php_phpstan_level', '') -let g:ale_php_phpstan_configuration = get(g:, 'ale_php_phpstan_configuration', '') -let g:ale_php_phpstan_autoload = get(g:, 'ale_php_phpstan_autoload', '') -let g:ale_php_phpstan_memory_limit = get(g:, 'ale_php_phpstan_memory_limit', '') -call ale#Set('php_phpstan_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#php#phpstan#GetCommand(buffer, version) abort - let l:configuration = ale#Var(a:buffer, 'php_phpstan_configuration') - let l:configuration_option = !empty(l:configuration) - \ ? ' -c ' . ale#Escape(l:configuration) - \ : '' - - let l:autoload = ale#Var(a:buffer, 'php_phpstan_autoload') - let l:autoload_option = !empty(l:autoload) - \ ? ' -a ' . ale#Escape(l:autoload) - \ : '' - - let l:memory_limit = ale#Var(a:buffer, 'php_phpstan_memory_limit') - let l:memory_limit_option = !empty(l:memory_limit) - \ ? ' --memory-limit ' . ale#Escape(l:memory_limit) - \ : '' - - let l:level = ale#Var(a:buffer, 'php_phpstan_level') - let l:config_file_exists = ale#path#FindNearestFile(a:buffer, 'phpstan.neon') - let l:dist_config_file_exists = ale#path#FindNearestFile(a:buffer, 'phpstan.neon.dist') - - if empty(l:level) && empty(l:config_file_exists) && empty(l:dist_config_file_exists) - " if no configuration file is found, then use 4 as a default level - let l:level = '4' - endif - - let l:level_option = !empty(l:level) - \ ? ' -l ' . ale#Escape(l:level) - \ : '' - - let l:error_format = ale#semver#GTE(a:version, [0, 10, 3]) - \ ? ' --error-format json' - \ : ' --errorFormat json' - - return '%e analyze --no-progress' - \ . l:error_format - \ . l:configuration_option - \ . l:autoload_option - \ . l:level_option - \ . l:memory_limit_option - \ . ' %s' -endfunction - -function! ale_linters#php#phpstan#Handle(buffer, lines) abort - let l:res = ale#util#FuzzyJSONDecode(a:lines, {'files': []}) - let l:output = [] - - if type(l:res.files) is v:t_list - return l:output - endif - - for l:err in l:res.files[expand('#' . a:buffer .':p')].messages - call add(l:output, { - \ 'lnum': l:err.line, - \ 'text': l:err.message, - \ 'type': 'E', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('php', { -\ 'name': 'phpstan', -\ 'executable': {buffer -> ale#path#FindExecutable(buffer, 'php_phpstan', [ -\ 'vendor/bin/phpstan', -\ 'phpstan' -\ ])}, -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale#path#FindExecutable(buffer, 'php_phpstan', [ -\ 'vendor/bin/phpstan', -\ 'phpstan' -\ ]), -\ '%e --version', -\ function('ale_linters#php#phpstan#GetCommand'), -\ )}, -\ 'callback': 'ale_linters#php#phpstan#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/psalm.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/psalm.vim deleted file mode 100644 index f1280057..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/psalm.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Author: Matt Brown -" Description: plugin for Psalm, static analyzer for PHP - -call ale#Set('php_psalm_executable', 'psalm') -call ale#Set('php_psalm_options', '') -call ale#Set('php_psalm_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#php#psalm#GetProjectRoot(buffer) abort - let l:composer_path = ale#path#FindNearestFile(a:buffer, 'composer.json') - - if (!empty(l:composer_path)) - return fnamemodify(l:composer_path, ':h') - endif - - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -function! ale_linters#php#psalm#GetCommand(buffer) abort - return '%e --language-server' . ale#Pad(ale#Var(a:buffer, 'php_psalm_options')) -endfunction - -call ale#linter#Define('php', { -\ 'name': 'psalm', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#path#FindExecutable(b, 'php_psalm', [ -\ 'vendor/bin/psalm', -\ ])}, -\ 'command': function('ale_linters#php#psalm#GetCommand'), -\ 'project_root': function('ale_linters#php#psalm#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/php/tlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/php/tlint.vim deleted file mode 100644 index 80bdd1f6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/php/tlint.vim +++ /dev/null @@ -1,80 +0,0 @@ -" Author: Jose Soto -" -" Description: Tighten Opinionated PHP Linting -" Website: https://github.com/tightenco/tlint - -call ale#Set('php_tlint_executable', 'tlint') -call ale#Set('php_tlint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('php_tlint_options', '') - -function! ale_linters#php#tlint#GetProjectRoot(buffer) abort - let l:composer_path = ale#path#FindNearestFile(a:buffer, 'composer.json') - - if !empty(l:composer_path) - return fnamemodify(l:composer_path, ':h') - endif - - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -function! ale_linters#php#tlint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'php_tlint', [ - \ 'vendor/bin/tlint', - \ 'tlint', - \]) -endfunction - -function! ale_linters#php#tlint#GetCommand(buffer) abort - let l:executable = ale_linters#php#tlint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'php_tlint_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' lint %s' -endfunction - -function! ale_linters#php#tlint#Handle(buffer, lines) abort - " Matches against lines like the following: - " - " ! There should be 1 space around `.` concatenations, and additional lines should always start with a `.` - " 22 : ` $something = 'a'.'name';` - " - let l:loop_count = 0 - let l:messages_pattern = '^\! \(.*\)' - let l:output = [] - let l:pattern = '^\(\d\+\) \:' - let l:temp_messages = [] - - for l:message in ale#util#GetMatches(a:lines, l:messages_pattern) - call add(l:temp_messages, l:message) - endfor - - let l:loop_count = 0 - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:num = l:match[1] - let l:text = l:temp_messages[l:loop_count] - - call add(l:output, { - \ 'lnum': l:num, - \ 'col': 0, - \ 'text': l:text, - \ 'type': 'W', - \ 'sub_type': 'style', - \}) - - let l:loop_count += 1 - endfor - - return l:output -endfunction - -call ale#linter#Define('php', { -\ 'name': 'tlint', -\ 'executable': function('ale_linters#php#tlint#GetExecutable'), -\ 'command': function('ale_linters#php#tlint#GetCommand'), -\ 'callback': 'ale_linters#php#tlint#Handle', -\ 'project_root': function('ale_linters#php#tlint#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/po/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/po/alex.vim deleted file mode 100644 index 05c67f15..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/po/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Cian Butler https://github.com/butlerx -" Description: alex for PO files - -call ale#handlers#alex#DefineLinter('po', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/po/msgfmt.vim b/dotfiles/.vim/plugged/ale/ale_linters/po/msgfmt.vim deleted file mode 100644 index 8279ccdc..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/po/msgfmt.vim +++ /dev/null @@ -1,30 +0,0 @@ -" Author: Cian Butler https://github.com/butlerx -" Description: msgfmt for PO files - -function! ale_linters#po#msgfmt#Handle(buffer, lines) abort - let l:results = ale#handlers#unix#HandleAsWarning(a:buffer, a:lines) - let l:index = 0 - - for l:item in l:results - if l:index > 0 && l:item.text =~? 'this is the location of the first definition' - let l:last_item = l:results[l:index - 1] - - if l:last_item.text =~? 'duplicate message definition' - let l:last_item.text = 'duplicate of message at line ' . l:item.lnum - let l:item.text = 'first location of duplicate of message at line ' . l:last_item.lnum - endif - endif - - let l:index += 1 - endfor - - return l:results -endfunction - -call ale#linter#Define('po', { -\ 'name': 'msgfmt', -\ 'executable': 'msgfmt', -\ 'output_stream': 'stderr', -\ 'command': 'msgfmt --statistics --output-file=- %t', -\ 'callback': 'ale_linters#po#msgfmt#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/po/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/po/proselint.vim deleted file mode 100644 index ce132508..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/po/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Cian Butler https://github.com/butlerx -" Description: proselint for PO files - -call ale#linter#Define('po', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/po/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/po/writegood.vim deleted file mode 100644 index 14686473..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/po/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Cian Butler https://github.com/butlerx -" Description: write-good for PO files - -call ale#handlers#writegood#DefineLinter('po') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/pod/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/pod/alex.vim deleted file mode 100644 index c89f8330..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/pod/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for pod files - -call ale#handlers#alex#DefineLinter('pod', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/pod/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/pod/proselint.vim deleted file mode 100644 index 2eb83f56..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/pod/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for Pod files - -call ale#linter#Define('pod', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/pod/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/pod/writegood.vim deleted file mode 100644 index 9f5461e6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/pod/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for Pod files - -call ale#handlers#writegood#DefineLinter('pod') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/pony/ponyc.vim b/dotfiles/.vim/plugged/ale/ale_linters/pony/ponyc.vim deleted file mode 100644 index 6d4594f9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/pony/ponyc.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Description: ponyc linter for pony files - -call ale#Set('pony_ponyc_executable', 'ponyc') -call ale#Set('pony_ponyc_options', '--pass paint') - -function! ale_linters#pony#ponyc#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'pony_ponyc_options')) -endfunction - -call ale#linter#Define('pony', { -\ 'name': 'ponyc', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'pony_ponyc_executable')}, -\ 'command': function('ale_linters#pony#ponyc#GetCommand'), -\ 'callback': 'ale#handlers#pony#HandlePonycFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/powershell/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/powershell/cspell.vim deleted file mode 100644 index 4a66dbaa..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/powershell/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for PowerShell files. - -call ale#handlers#cspell#DefineLinter('powershell') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/powershell/powershell.vim b/dotfiles/.vim/plugged/ale/ale_linters/powershell/powershell.vim deleted file mode 100644 index 5f49f72c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/powershell/powershell.vim +++ /dev/null @@ -1,100 +0,0 @@ -" Author: Jesse Harris - https://github.com/zigford -" Description: This file adds support for powershell scripts synatax errors - -call ale#Set('powershell_powershell_executable', 'pwsh') - -function! ale_linters#powershell#powershell#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'powershell_powershell_executable') -endfunction - -" Some powershell magic to show syntax errors without executing the script -" thanks to keith hill: -" https://rkeithhill.wordpress.com/2007/10/30/powershell-quicktip-preparsing-scripts-to-check-for-syntax-errors/ -function! ale_linters#powershell#powershell#GetCommand(buffer) abort - let l:script = ['Param($Script); - \ $ErrorView = "Normal"; - \ trap {$_;continue} & { - \ $Contents = Get-Content -Path $Script; - \ $Contents = [string]::Join([Environment]::NewLine, $Contents); - \ [void]$ExecutionContext.InvokeCommand.NewScriptBlock($Contents); - \ };'] - - return ale#powershell#RunPowerShell( - \ a:buffer, 'powershell_powershell', l:script) -endfunction - -" Parse powershell error output using regex into a list of dicts -function! ale_linters#powershell#powershell#Handle(buffer, lines) abort - let l:output = [] - " Our 3 patterns we need to scrape the data for the dicts - let l:patterns = [ - \ '\v^At line:(\d+) char:(\d+)', - \ '\v^(At|\+| )@!.*', - \ '\vFullyQualifiedErrorId : (\w+)', - \] - - let l:matchcount = 0 - - for l:match in ale#util#GetMatches(a:lines, l:patterns) - " We want to work with 3 matches per syntax error - let l:matchcount = l:matchcount + 1 - - if l:matchcount == 1 || str2nr(l:match[1]) - " First match consists of 2 capture groups, and - " can capture the line and col - if exists('l:item') - " We may be here because the last syntax - " didn't emit a code, and so only had 2 - " matches - call add(l:output, l:item) - let l:matchcount = 1 - endif - - " If the match is 0, it was a failed match - " probably due to an unexpected token which - " contained a newline. Reset matchcount. to - " continue to the next match - if !empty(l:match[1]) - let l:item = { - \ 'lnum': str2nr(l:match[1]), - \ 'col': str2nr(l:match[2]), - \ 'type': 'E', - \} - else - let l:matchcount = 0 - endif - elseif l:matchcount == 2 - " Second match[0] grabs the full line in order - " to handles the text - let l:item['text'] = l:match[0] - else - " Final match handles the code, however - " powershell only emits 1 code for all errors - " so, we get the final code on the last error - " and loop over the previously added items to - " append the code we now know - call add(l:output, l:item) - unlet l:item - - if len(l:match[1]) > 0 - for l:i in l:output - let l:i['code'] = l:match[1] - endfor - endif - - " Reset the matchcount so we can begin gathering - " matches for the next syntax error - let l:matchcount = 0 - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('powershell', { -\ 'name': 'powershell', -\ 'executable': function('ale_linters#powershell#powershell#GetExecutable'), -\ 'command': function('ale_linters#powershell#powershell#GetCommand'), -\ 'output_stream': 'stdout', -\ 'callback': 'ale_linters#powershell#powershell#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/powershell/psscriptanalyzer.vim b/dotfiles/.vim/plugged/ale/ale_linters/powershell/psscriptanalyzer.vim deleted file mode 100644 index 4794d9d8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/powershell/psscriptanalyzer.vim +++ /dev/null @@ -1,76 +0,0 @@ -" Author: Jesse Harris - https://github.com/zigford -" Description: This file adds support for lintng powershell scripts -" using the PSScriptAnalyzer module. - -" let g:ale_powershell_psscriptanalyzer_exclusions = -" \ 'PSAvoidUsingWriteHost,PSAvoidGlobalVars' -call ale#Set('powershell_psscriptanalyzer_exclusions', '') -call ale#Set('powershell_psscriptanalyzer_executable', 'pwsh') -call ale#Set('powershell_psscriptanalyzer_module', -\ 'psscriptanalyzer') - -function! ale_linters#powershell#psscriptanalyzer#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'powershell_psscriptanalyzer_executable') -endfunction - -" Run Invoke-ScriptAnalyzer and output each linting message as 4 seperate lines -" for each parsing -function! ale_linters#powershell#psscriptanalyzer#GetCommand(buffer) abort - let l:exclude_option = ale#Var( - \ a:buffer, 'powershell_psscriptanalyzer_exclusions') - let l:module = ale#Var( - \ a:buffer, 'powershell_psscriptanalyzer_module') - let l:script = ['Param($Script); - \ Invoke-ScriptAnalyzer "$Script" ' - \ . (!empty(l:exclude_option) ? '-Exclude ' . l:exclude_option : '') - \ . '| ForEach-Object { - \ $_.Line; - \ $_.Severity; - \ $_.Message; - \ $_.RuleName}'] - - return ale#powershell#RunPowerShell( - \ a:buffer, - \ 'powershell_psscriptanalyzer', - \ l:script) -endfunction - -" add every 4 lines to an item(Dict) and every item to a list -" return the list -function! ale_linters#powershell#psscriptanalyzer#Handle(buffer, lines) abort - let l:output = [] - let l:lcount = 0 - - for l:line in a:lines - if l:lcount is# 0 - " the very first line - let l:item = {'lnum': str2nr(l:line)} - elseif l:lcount is# 1 - if l:line is# 'Error' - let l:item['type'] = 'E' - elseif l:line is# 'Information' - let l:item['type'] = 'I' - else - let l:item['type'] = 'W' - endif - elseif l:lcount is# 2 - let l:item['text'] = l:line - elseif l:lcount is# 3 - let l:item['code'] = l:line - call add(l:output, l:item) - let l:lcount = -1 - endif - - let l:lcount = l:lcount + 1 - endfor - - return l:output -endfunction - -call ale#linter#Define('powershell', { -\ 'name': 'psscriptanalyzer', -\ 'executable': function('ale_linters#powershell#psscriptanalyzer#GetExecutable'), -\ 'command': function('ale_linters#powershell#psscriptanalyzer#GetCommand'), -\ 'output_stream': 'stdout', -\ 'callback': 'ale_linters#powershell#psscriptanalyzer#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/prolog/swipl.vim b/dotfiles/.vim/plugged/ale/ale_linters/prolog/swipl.vim deleted file mode 100644 index 82859eb0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/prolog/swipl.vim +++ /dev/null @@ -1,110 +0,0 @@ -" Author: Takuya Fujiwara -" Description: swipl syntax / semantic check for Prolog files - -call ale#Set('prolog_swipl_executable', 'swipl') -call ale#Set('prolog_swipl_load', 'current_prolog_flag(argv, [File]), load_files(File, [sandboxed(true)]), halt.') -call ale#Set('prolog_swipl_timeout', 3) -call ale#Set('prolog_swipl_alarm', 'alarm(%t, (%h), _, [])') -call ale#Set('prolog_swipl_alarm_handler', 'writeln(user_error, "ERROR: Exceeded %t seconds, Please change g:prolog_swipl_timeout to modify the limit."), halt(1)') - -function! ale_linters#prolog#swipl#GetCommand(buffer) abort - let l:goals = ale#Var(a:buffer, 'prolog_swipl_load') - let l:goals = l:goals =~# '^\s*$' ? 'halt' : l:goals - let l:timeout = ale#Var(a:buffer, 'prolog_swipl_timeout') + 0 - - if l:timeout > 0 - let l:goals = s:GetAlarm(a:buffer, l:timeout) . ', ' . l:goals - endif - - return '%e -g ' . ale#Escape(l:goals) . ' -- %s' -endfunction - -function! s:GetAlarm(buffer, timeout) abort - let l:handler = ale#Var(a:buffer, 'prolog_swipl_alarm_handler') - let l:handler = s:Subst(l:handler, {'t': a:timeout}) - let l:alarm = ale#Var(a:buffer, 'prolog_swipl_alarm') - let l:alarm = s:Subst(l:alarm, {'t': a:timeout, 'h': l:handler}) - - return l:alarm -endfunction - -function! s:Subst(format, vars) abort - let l:vars = extend(copy(a:vars), {'%': '%'}) - - return substitute(a:format, '%\(.\)', '\=get(l:vars, submatch(1), "")', 'g') -endfunction - -function! ale_linters#prolog#swipl#Handle(buffer, lines) abort - let l:output = [] - let l:i = 0 - - let l:pattern = '\v^(ERROR|Warning)+%(:\s*[^:]+:(\d+)%(:(\d+))?)?:\s*(.*)$' - - while l:i < len(a:lines) - let l:match = matchlist(a:lines[l:i], l:pattern) - - if empty(l:match) - let l:i += 1 - continue - endif - - let [l:i, l:text] = s:GetErrMsg(l:i, a:lines, l:match[4]) - let l:item = { - \ 'lnum': (l:match[2] + 0 ? l:match[2] + 0 : 1), - \ 'col': l:match[3] + 0, - \ 'text': l:text, - \ 'type': (l:match[1] is# 'ERROR' ? 'E' : 'W'), - \} - - if !s:Ignore(l:item) - call add(l:output, l:item) - endif - endwhile - - return l:output -endfunction - -" This returns [, ] -function! s:GetErrMsg(i, lines, text) abort - if a:text !~# '^\s*$' - return [a:i + 1, a:text] - endif - - let l:i = a:i + 1 - let l:text = [] - - let l:pattern = '\v^(ERROR|Warning)?:?(.*)$' - - while l:i < len(a:lines) - let l:match = matchlist(a:lines[l:i], l:pattern) - - if empty(l:match) || empty(l:match[2]) - let l:i += 1 - break - endif - - call add(l:text, s:Trim(l:match[2])) - let l:i += 1 - endwhile - - return [l:i, join(l:text, '. ')] -endfunction - -function! s:Trim(str) abort - return substitute(a:str, '\v^\s+|\s+$', '', 'g') -endfunction - -" Skip sandbox error which is caused by directives -" because what we want is syntactic or semantic check. -function! s:Ignore(item) abort - return a:item.type is# 'E' - \ && a:item.text =~# '\vNo permission to (call|directive|assert) sandboxed' -endfunction - -call ale#linter#Define('prolog', { -\ 'name': 'swipl', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'prolog_swipl_executable')}, -\ 'command': function('ale_linters#prolog#swipl#GetCommand'), -\ 'callback': 'ale_linters#prolog#swipl#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/proto/buf_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/proto/buf_lint.vim deleted file mode 100644 index a22f8e53..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/proto/buf_lint.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Alex McKinney -" Description: Run buf lint. - -call ale#Set('proto_buf_lint_executable', 'buf') -call ale#Set('proto_buf_lint_config', '') -call ale#Set('proto_buf_lint_options', '') - -function! ale_linters#proto#buf_lint#GetCommand(buffer) abort - let l:config = ale#Var(a:buffer, 'proto_buf_lint_config') - let l:options = ale#Var(a:buffer, 'proto_buf_lint_options') - - return '%e lint' - \ . (!empty(l:config) ? ' --config=' . ale#Escape(l:config) : '') - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %s#include_package_files=true' -endfunction - -call ale#linter#Define('proto', { -\ 'name': 'buf_lint', -\ 'aliases': ['buf-lint'], -\ 'lint_file': 1, -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'proto_buf_lint_executable')}, -\ 'command': function('ale_linters#proto#buf_lint#GetCommand'), -\ 'callback': 'ale#handlers#go#Handler', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/proto/protoc_gen_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/proto/protoc_gen_lint.vim deleted file mode 100644 index c3d10935..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/proto/protoc_gen_lint.vim +++ /dev/null @@ -1,27 +0,0 @@ -" Author: Jeff Willette -" Description: run the protoc-gen-lint plugin for the protoc binary - -call ale#Set('proto_protoc_gen_lint_options', '') - -function! ale_linters#proto#protoc_gen_lint#GetCommand(buffer) abort - let l:dirname = expand('#' . a:buffer . ':p:h') - - let l:options = ['-I ' . ale#Escape(l:dirname)] - - if !empty(ale#Var(a:buffer, 'proto_protoc_gen_lint_options')) - let l:options += [ale#Var(a:buffer, 'proto_protoc_gen_lint_options')] - endif - - let l:options += ['--lint_out=. ' . '%s'] - - return 'protoc' . ' ' . join(l:options) -endfunction - -call ale#linter#Define('proto', { -\ 'name': 'protoc-gen-lint', -\ 'lint_file': 1, -\ 'output_stream': 'stderr', -\ 'executable': 'protoc', -\ 'command': function('ale_linters#proto#protoc_gen_lint#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsError', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/proto/protolint.vim b/dotfiles/.vim/plugged/ale/ale_linters/proto/protolint.vim deleted file mode 100644 index 2754c7b6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/proto/protolint.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: Yohei Yoshimuta -" Description: run the protolint for Protocol Buffer files - -call ale#Set('proto_protolint_executable', 'protolint') -call ale#Set('proto_protolint_config', '') - -function! ale_linters#proto#protolint#GetCommand(buffer) abort - let l:config = ale#Var(a:buffer, 'proto_protolint_config') - - return '%e lint' - \ . (!empty(l:config) ? ' -config_path=' . ale#Escape(l:config) : '') - \ . ' -reporter=unix' - \ . ' %s' -endfunction - -call ale#linter#Define('proto', { -\ 'name': 'protolint', -\ 'lint_file': 1, -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'proto_protolint_executable')}, -\ 'command': function('ale_linters#proto#protolint#GetCommand'), -\ 'callback': 'ale#handlers#unix#HandleAsError', -\}) - diff --git a/dotfiles/.vim/plugged/ale/ale_linters/pug/puglint.vim b/dotfiles/.vim/plugged/ale/ale_linters/pug/puglint.vim deleted file mode 100644 index b552cc06..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/pug/puglint.vim +++ /dev/null @@ -1,56 +0,0 @@ -" Author: w0rp - -" Description: pug-lint for checking Pug/Jade files. - -call ale#Set('pug_puglint_options', '') -call ale#Set('pug_puglint_executable', 'pug-lint') -call ale#Set('pug_puglint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! s:FindConfig(buffer) abort - for l:filename in [ - \ '.pug-lintrc', - \ '.pug-lintrc.js', - \ '.pug-lintrc.json', - \ 'package.json', - \] - let l:config = ale#path#FindNearestFile(a:buffer, l:filename) - - if !empty(l:config) - return l:config - endif - endfor - - return '' -endfunction - -function! ale_linters#pug#puglint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'pug_puglint_options') - let l:config = s:FindConfig(a:buffer) - - return '%e' . ale#Pad(l:options) - \ . (!empty(l:config) ? ' -c ' . ale#Escape(l:config) : '') - \ . ' -r inline %t' -endfunction - -function! ale_linters#pug#puglint#Handle(buffer, lines) abort - for l:line in a:lines[:10] - if l:line =~# '^SyntaxError: ' - return [{ - \ 'lnum': 1, - \ 'text': 'puglint configuration error (type :ALEDetail for more information)', - \ 'detail': join(a:lines, "\n"), - \}] - endif - endfor - - return ale#handlers#unix#HandleAsError(a:buffer, a:lines) -endfunction - -call ale#linter#Define('pug', { -\ 'name': 'puglint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'pug_puglint', [ -\ 'node_modules/.bin/pug-lint', -\ ])}, -\ 'output_stream': 'stderr', -\ 'command': function('ale_linters#pug#puglint#GetCommand'), -\ 'callback': 'ale_linters#pug#puglint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/puppet/languageserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/puppet/languageserver.vim deleted file mode 100644 index 2078695f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/puppet/languageserver.vim +++ /dev/null @@ -1,37 +0,0 @@ -" Author: Alexander Olofsson -" Description: Puppet Language Server integration for ALE - -call ale#Set('puppet_languageserver_executable', 'puppet-languageserver') - -function! ale_linters#puppet#languageserver#GetProjectRoot(buffer) abort - " Note: The metadata.json file is recommended for Puppet 4+ modules, but - " there's no requirement to have it, so fall back to the other possible - " Puppet module directories - let l:root_path = ale#path#FindNearestFile(a:buffer, 'metadata.json') - - if !empty(l:root_path) - return fnamemodify(l:root_path, ':h') - endif - - for l:test_path in [ - \ 'manifests', - \ 'templates', - \] - let l:root_path = ale#path#FindNearestDirectory(a:buffer, l:test_path) - - if !empty(l:root_path) - return fnamemodify(l:root_path, ':h:h') - endif - endfor - - return '' -endfunction - -call ale#linter#Define('puppet', { -\ 'name': 'languageserver', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'puppet_languageserver_executable')}, -\ 'command': '%e --stdio', -\ 'language': 'puppet', -\ 'project_root': function('ale_linters#puppet#languageserver#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/puppet/puppet.vim b/dotfiles/.vim/plugged/ale/ale_linters/puppet/puppet.vim deleted file mode 100644 index 59228dc8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/puppet/puppet.vim +++ /dev/null @@ -1,39 +0,0 @@ -" Author: Alexander Olofsson - -call ale#Set('puppet_puppet_executable', 'puppet') -call ale#Set('puppet_puppet_options', '') - -function! ale_linters#puppet#puppet#Handle(buffer, lines) abort - " Matches patterns like the following: - " Error: Could not parse for environment production: Syntax error at ':' at /root/puppetcode/modules/nginx/manifests/init.pp:43:12 - " Error: Could not parse for environment production: Syntax error at '='; expected '}' at /root/puppetcode/modules/pancakes/manifests/init.pp:5" - " Error: Could not parse for environment production: Syntax error at 'parameter1' (file: /tmp/modules/mariadb/manifests/slave.pp, line: 4, column: 5) - " Error: Illegal attempt to assign to 'a Name'. Not an assignable reference (file: /tmp/modules/waffles/manifests/syrup.pp, line: 5, column: 11) - " Error: Could not parse for environment production: Syntax error at end of input (file: /tmp/modules/bob/manifests/init.pp) - let l:pattern = '^Error:\%(.*:\)\? \(.\+\) \((file:\|at\) .\+\.pp\(\(, line: \|:\)\(\d\+\)\(, column: \|:\)\=\(\d*\)\|)$\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[5] + 0, - \ 'col': l:match[7] + 0, - \ 'text': l:match[1], - \}) - endfor - - return l:output -endfunction - -function! ale_linters#puppet#puppet#GetCommand(buffer) abort - return '%e parser validate --color=false ' - \ . ale#Pad(ale#Var(a:buffer, 'puppet_puppet_options')) - \ . ' %t' -endfunction - -call ale#linter#Define('puppet', { -\ 'name': 'puppet', -\ 'executable': {b -> ale#Var(b, 'puppet_puppet_executable')}, -\ 'output_stream': 'stderr', -\ 'command': function('ale_linters#puppet#puppet#GetCommand'), -\ 'callback': 'ale_linters#puppet#puppet#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/puppet/puppetlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/puppet/puppetlint.vim deleted file mode 100644 index 985d6a4d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/puppet/puppetlint.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: Alexander Olofsson , Robert Flechtner -" Description: puppet-lint for puppet files - -call ale#Set('puppet_puppetlint_executable', 'puppet-lint') -call ale#Set('puppet_puppetlint_options', '--no-autoloader_layout-check') - -function! ale_linters#puppet#puppetlint#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'puppet_puppetlint_options')) - \ . ' --log-format "-:%{line}:%{column}: %{kind}: [%{check}] %{message}"' - \ . ' %t' -endfunction - -call ale#linter#Define('puppet', { -\ 'name': 'puppetlint', -\ 'executable': {b -> ale#Var(b, 'puppet_puppetlint_executable')}, -\ 'command': function('ale_linters#puppet#puppetlint#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/purescript/ls.vim b/dotfiles/.vim/plugged/ale/ale_linters/purescript/ls.vim deleted file mode 100644 index a20fae47..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/purescript/ls.vim +++ /dev/null @@ -1,49 +0,0 @@ -" Author: Drew Olson -" Description: Integrate ALE with purescript-language-server. - -call ale#Set('purescript_ls_executable', 'purescript-language-server') -call ale#Set('purescript_ls_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('purescript_ls_config', {}) - -function! ale_linters#purescript#ls#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'purescript_ls', [ - \ 'node_modules/.bin/purescript-language-server', - \]) -endfunction - -function! ale_linters#purescript#ls#GetCommand(buffer) abort - let l:executable = ale_linters#purescript#ls#GetExecutable(a:buffer) - - return ale#Escape(l:executable) . ' --stdio' -endfunction - -function! ale_linters#purescript#ls#FindProjectRoot(buffer) abort - let l:config = ale#path#FindNearestFile(a:buffer, 'bower.json') - - if !empty(l:config) - return fnamemodify(l:config, ':h') - endif - - let l:config = ale#path#FindNearestFile(a:buffer, 'psc-package.json') - - if !empty(l:config) - return fnamemodify(l:config, ':h') - endif - - let l:config = ale#path#FindNearestFile(a:buffer, 'spago.dhall') - - if !empty(l:config) - return fnamemodify(l:config, ':h') - endif - - return '' -endfunction - -call ale#linter#Define('purescript', { -\ 'name': 'purescript-language-server', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#purescript#ls#GetExecutable'), -\ 'command': function('ale_linters#purescript#ls#GetCommand'), -\ 'project_root': function('ale_linters#purescript#ls#FindProjectRoot'), -\ 'lsp_config': {b -> ale#Var(b, 'purescript_ls_config')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/pyrex/cython.vim b/dotfiles/.vim/plugged/ale/ale_linters/pyrex/cython.vim deleted file mode 100644 index 247c3060..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/pyrex/cython.vim +++ /dev/null @@ -1,36 +0,0 @@ -" Author: w0rp , -" Nicolas Pauss -" Description: cython syntax checking for cython files. - -call ale#Set('pyrex_cython_executable', 'cython') -call ale#Set('pyrex_cython_options', '--warning-extra') - -function! ale_linters#pyrex#cython#GetCommand(buffer) abort - return '%e --working %s:h --include-dir %s:h' - \ . ale#Pad(ale#Var(a:buffer, 'pyrex_cython_options')) - \ . ' --output-file ' . g:ale#util#nul_file . ' %t' -endfunction - -function! ale_linters#pyrex#cython#Handle(buffer, lines) abort - let l:pattern = '\v^(\w+: )?[^:]+:(\d+):?(\d+)?:? ?(.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \ 'type': l:match[1][0] is# 'w' ? 'W' : 'E', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('pyrex', { -\ 'name': 'cython', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'pyrex_cython_executable')}, -\ 'command': function('ale_linters#pyrex#cython#GetCommand'), -\ 'callback': 'ale_linters#pyrex#cython#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/bandit.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/bandit.vim deleted file mode 100644 index 9cfca7c0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/bandit.vim +++ /dev/null @@ -1,76 +0,0 @@ -" Author: Martino Pilia -" Description: bandit linting for python files - -call ale#Set('python_bandit_executable', 'bandit') -call ale#Set('python_bandit_options', '') -call ale#Set('python_bandit_use_config', 1) -call ale#Set('python_bandit_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_bandit_auto_pipenv', 0) -call ale#Set('python_bandit_auto_poetry', 0) - -function! ale_linters#python#bandit#GetExecutable(buffer) abort - if ( - \ ale#Var(a:buffer, 'python_auto_pipenv') - \ || ale#Var(a:buffer, 'python_bandit_auto_pipenv') - \) && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if ( - \ ale#Var(a:buffer, 'python_auto_poetry') - \ || ale#Var(a:buffer, 'python_bandit_auto_poetry') - \) && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_bandit', ['bandit']) -endfunction - -function! ale_linters#python#bandit#GetCommand(buffer) abort - let l:executable = ale_linters#python#bandit#GetExecutable(a:buffer) - let l:flags = ' --format custom' - \ . ' --msg-template "{line}:{test_id}:{severity}:{msg}" ' - - if ale#Var(a:buffer, 'python_bandit_use_config') - let l:config_path = ale#path#FindNearestFile(a:buffer, '.bandit') - - if !empty(l:config_path) - let l:flags = ' --ini ' . ale#Escape(l:config_path) . l:flags - endif - endif - - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run bandit' - \ : '' - - return ale#Escape(l:executable) . l:exec_args - \ . l:flags - \ . ale#Pad(ale#Var(a:buffer, 'python_bandit_options')) - \ . ' -' -endfunction - -function! ale_linters#python#bandit#Handle(buffer, lines) abort - " Custom format defined in GetCommand via --msg-template - let l:pattern = '\v^([0-9]+):(B[0-9]+):([A-Z]+):(.*)$' - let l:severity = {'LOW': 'I', 'MEDIUM': 'W', 'HIGH': 'E'} - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': str2nr(l:match[1]), - \ 'code': l:match[2], - \ 'type': l:severity[l:match[3]], - \ 'text': l:match[4], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'bandit', -\ 'executable': function('ale_linters#python#bandit#GetExecutable'), -\ 'command': function('ale_linters#python#bandit#GetCommand'), -\ 'callback': 'ale_linters#python#bandit#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/cspell.vim deleted file mode 100644 index a2325311..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Python files. - -call ale#handlers#cspell#DefineLinter('python') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/flake8.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/flake8.vim deleted file mode 100644 index 9950614a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/flake8.vim +++ /dev/null @@ -1,170 +0,0 @@ -" Author: w0rp -" Description: flake8 for python files - -call ale#Set('python_flake8_executable', 'flake8') -call ale#Set('python_flake8_options', '') -call ale#Set('python_flake8_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_flake8_change_directory', 'project') -call ale#Set('python_flake8_auto_pipenv', 0) -call ale#Set('python_flake8_auto_poetry', 0) - -function! s:UsingModule(buffer) abort - return ale#Var(a:buffer, 'python_flake8_options') =~# ' *-m flake8' -endfunction - -function! ale_linters#python#flake8#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_flake8_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_flake8_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - if !s:UsingModule(a:buffer) - return ale#python#FindExecutable(a:buffer, 'python_flake8', ['flake8']) - endif - - return ale#Var(a:buffer, 'python_flake8_executable') -endfunction - -function! ale_linters#python#flake8#RunWithVersionCheck(buffer) abort - let l:executable = ale_linters#python#flake8#GetExecutable(a:buffer) - - let l:module_string = s:UsingModule(a:buffer) ? ' -m flake8' : '' - let l:command = ale#Escape(l:executable) . l:module_string . ' --version' - - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ l:executable, - \ l:command, - \ function('ale_linters#python#flake8#GetCommand'), - \) -endfunction - -function! ale_linters#python#flake8#GetCwd(buffer) abort - let l:change_directory = ale#Var(a:buffer, 'python_flake8_change_directory') - let l:cwd = '' - - if l:change_directory is# 'project' - let l:project_root = ale#python#FindProjectRootIni(a:buffer) - - if !empty(l:project_root) - let l:cwd = l:project_root - endif - endif - - if (l:change_directory is# 'project' && empty(l:cwd)) - \|| l:change_directory is# 1 - \|| l:change_directory is# 'file' - let l:cwd = '%s:h' - endif - - return l:cwd -endfunction - -function! ale_linters#python#flake8#GetCommand(buffer, version) abort - let l:executable = ale_linters#python#flake8#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run flake8' - \ : '' - - " Only include the --stdin-display-name argument if we can parse the - " flake8 version, and it is recent enough to support it. - let l:display_name_args = ale#semver#GTE(a:version, [3, 0, 0]) - \ ? ' --stdin-display-name %s' - \ : '' - - let l:options = ale#Var(a:buffer, 'python_flake8_options') - - return ale#Escape(l:executable) . l:exec_args - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --format=default' - \ . l:display_name_args . ' -' -endfunction - -let s:end_col_pattern_map = { -\ 'F405': '\(.\+\) may be undefined', -\ 'F821': 'undefined name ''\([^'']\+\)''', -\ 'F999': '^''\([^'']\+\)''', -\ 'F841': 'local variable ''\([^'']\+\)''', -\} - -function! ale_linters#python#flake8#Handle(buffer, lines) abort - let l:output = ale#python#HandleTraceback(a:lines, 10) - - if !empty(l:output) - return l:output - endif - - " Matches patterns line the following: - " - " Matches patterns line the following: - " - " stdin:6:6: E111 indentation is not a multiple of four - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):?(\d+)?: ([[:alnum:]]+):? (.*)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:code = l:match[3] - - if (l:code is# 'W291' || l:code is# 'W293') - \ && !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - " Skip warnings for trailing whitespace if the option is off. - continue - endif - - if l:code is# 'W391' - \&& !ale#Var(a:buffer, 'warn_about_trailing_blank_lines') - " Skip warnings for trailing blank lines if the option is off - continue - endif - - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'vcol': 1, - \ 'text': l:match[4], - \ 'code': l:code, - \ 'type': 'W', - \} - - if l:code[:0] is# 'F' - if l:code isnot# 'F401' - let l:item.type = 'E' - endif - elseif l:code[:0] is# 'E' - let l:item.type = 'E' - - if l:code isnot# 'E999' && l:code isnot# 'E112' - let l:item.sub_type = 'style' - endif - elseif l:code[:0] is# 'W' - let l:item.sub_type = 'style' - endif - - let l:end_col_pattern = get(s:end_col_pattern_map, l:code, '') - - if !empty(l:end_col_pattern) - let l:end_col_match = matchlist(l:match[4], l:end_col_pattern) - - if !empty(l:end_col_match) - let l:item.end_col = l:item.col + len(l:end_col_match[1]) - 1 - endif - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'flake8', -\ 'executable': function('ale_linters#python#flake8#GetExecutable'), -\ 'cwd': function('ale_linters#python#flake8#GetCwd'), -\ 'command': function('ale_linters#python#flake8#RunWithVersionCheck'), -\ 'callback': 'ale_linters#python#flake8#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/flakehell.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/flakehell.vim deleted file mode 100644 index ffe87e29..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/flakehell.vim +++ /dev/null @@ -1,175 +0,0 @@ -" Author: w0rp -" Description: flakehell for python files - -call ale#Set('python_flakehell_executable', 'flakehell') -call ale#Set('python_flakehell_options', '') -call ale#Set('python_flakehell_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_flakehell_change_directory', 'project') -call ale#Set('python_flakehell_auto_pipenv', 0) -call ale#Set('python_flakehell_auto_poetry', 0) - -function! s:UsingModule(buffer) abort - return ale#Var(a:buffer, 'python_flakehell_executable') is? 'python' -endfunction - -function! ale_linters#python#flakehell#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_flakehell_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_flakehell_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - if !s:UsingModule(a:buffer) - return ale#python#FindExecutable(a:buffer, 'python_flakehell', ['flakehell']) - endif - - return ale#Var(a:buffer, 'python_flakehell_executable') -endfunction - -function! ale_linters#python#flakehell#RunWithVersionCheck(buffer) abort - let l:executable = ale_linters#python#flakehell#GetExecutable(a:buffer) - - let l:module_string = s:UsingModule(a:buffer) ? ' -m flakehell' : '' - let l:command = ale#Escape(l:executable) . l:module_string . ' --version' - - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ l:executable, - \ l:command, - \ function('ale_linters#python#flakehell#GetCommand'), - \) -endfunction - -function! ale_linters#python#flakehell#GetCwd(buffer) abort - let l:change_directory = ale#Var(a:buffer, 'python_flakehell_change_directory') - let l:cwd = '' - - if l:change_directory is# 'project' - let l:project_root = ale#python#FindProjectRootIni(a:buffer) - - if !empty(l:project_root) - let l:cwd = l:project_root - endif - endif - - if (l:change_directory is# 'project' && empty(l:cwd)) - \|| l:change_directory is# 1 - \|| l:change_directory is# 'file' - let l:cwd = '%s:h' - endif - - return l:cwd -endfunction - -function! ale_linters#python#flakehell#GetCommand(buffer, version) abort - let l:executable = ale_linters#python#flakehell#GetExecutable(a:buffer) - - if (l:executable =~? 'pipenv\|poetry$') - let l:exec_args = ' run flakehell' - elseif (l:executable is? 'python') - let l:exec_args = ' -m flakehell' - else - let l:exec_args = '' - endif - - " Only include the --stdin-display-name argument if we can parse the - " flakehell version, and it is recent enough to support it. - let l:display_name_args = ale#semver#GTE(a:version, [0, 8, 0]) - \ ? ' --stdin-display-name %s' - \ : '' - - let l:options = ale#Var(a:buffer, 'python_flakehell_options') - - return ale#Escape(l:executable) - \ . l:exec_args - \ . (!empty(l:options) ? ' lint ' . l:options : ' lint') - \ . ' --format=default' - \ . l:display_name_args . ' -' -endfunction - -let s:end_col_pattern_map = { -\ 'F405': '\(.\+\) may be undefined', -\ 'F821': 'undefined name ''\([^'']\+\)''', -\ 'F999': '^''\([^'']\+\)''', -\ 'F841': 'local variable ''\([^'']\+\)''', -\} - -function! ale_linters#python#flakehell#Handle(buffer, lines) abort - let l:output = ale#python#HandleTraceback(a:lines, 10) - - if !empty(l:output) - return l:output - endif - - " Matches patterns line the following: - " - " Matches patterns line the following: - " - " stdin:6:6: E111 indentation is not a multiple of four - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):?(\d+)?: ([[:alnum:]]+):? (.*)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:code = l:match[3] - - if (l:code is# 'W291' || l:code is# 'W293') - \ && !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - " Skip warnings for trailing whitespace if the option is off. - continue - endif - - if l:code is# 'W391' - \&& !ale#Var(a:buffer, 'warn_about_trailing_blank_lines') - " Skip warnings for trailing blank lines if the option is off - continue - endif - - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'vcol': 1, - \ 'text': l:match[4], - \ 'code': l:code, - \ 'type': 'W', - \} - - if l:code[:0] is# 'F' - if l:code isnot# 'F401' - let l:item.type = 'E' - endif - elseif l:code[:0] is# 'E' - let l:item.type = 'E' - - if l:code isnot# 'E999' && l:code isnot# 'E112' - let l:item.sub_type = 'style' - endif - elseif l:code[:0] is# 'W' - let l:item.sub_type = 'style' - endif - - let l:end_col_pattern = get(s:end_col_pattern_map, l:code, '') - - if !empty(l:end_col_pattern) - let l:end_col_match = matchlist(l:match[4], l:end_col_pattern) - - if !empty(l:end_col_match) - let l:item.end_col = l:item.col + len(l:end_col_match[1]) - 1 - endif - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'flakehell', -\ 'executable': function('ale_linters#python#flakehell#GetExecutable'), -\ 'cwd': function('ale_linters#python#flakehell#GetCwd'), -\ 'command': function('ale_linters#python#flakehell#RunWithVersionCheck'), -\ 'callback': 'ale_linters#python#flakehell#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/jedils.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/jedils.vim deleted file mode 100644 index eae5fb07..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/jedils.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Author: Dalius Dobravolskas -" Description: https://github.com/pappasam/jedi-language-server - -call ale#Set('python_jedils_executable', 'jedi-language-server') -call ale#Set('python_jedils_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_jedils_auto_pipenv', 0) - -function! ale_linters#python#jedils#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_jedils_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - return ale#python#FindExecutable(a:buffer, 'python_jedils', ['jedi-language-server']) -endfunction - -function! ale_linters#python#jedils#GetCommand(buffer) abort - let l:executable = ale_linters#python#jedils#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv$' - \ ? ' run jedi-language-server' - \ : '' - - return ale#Escape(l:executable) . l:exec_args -endfunction - -call ale#linter#Define('python', { -\ 'name': 'jedils', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#python#jedils#GetExecutable'), -\ 'command': function('ale_linters#python#jedils#GetCommand'), -\ 'project_root': function('ale#python#FindProjectRoot'), -\ 'completion_filter': 'ale#completion#python#CompletionItemFilter', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/mypy.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/mypy.vim deleted file mode 100644 index 9d469a1a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/mypy.vim +++ /dev/null @@ -1,103 +0,0 @@ -" Author: Keith Smiley , w0rp -" Description: mypy support for optional python typechecking - -call ale#Set('python_mypy_executable', 'mypy') -call ale#Set('python_mypy_ignore_invalid_syntax', 0) -call ale#Set('python_mypy_show_notes', 1) -call ale#Set('python_mypy_options', '') -call ale#Set('python_mypy_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_mypy_auto_pipenv', 0) -call ale#Set('python_mypy_auto_poetry', 0) - -function! ale_linters#python#mypy#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_mypy_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_mypy_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_mypy', ['mypy']) -endfunction - -" The directory to change to before running mypy -function! ale_linters#python#mypy#GetCwd(buffer) abort - " If we find a directory with "mypy.ini" in it use that, - " else try and find the "python project" root, or failing - " that, run from the same folder as the current file - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - if filereadable(l:path . '/mypy.ini') - return l:path - endif - endfor - - let l:project_root = ale#python#FindProjectRoot(a:buffer) - - return !empty(l:project_root) - \ ? l:project_root - \ : expand('#' . a:buffer . ':p:h') -endfunction - -function! ale_linters#python#mypy#GetCommand(buffer) abort - let l:executable = ale_linters#python#mypy#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run mypy' - \ : '' - - return '%e' . l:exec_args - \ . ale#Pad(ale#Var(a:buffer, 'python_mypy_options')) - \ . ' --show-column-numbers' - \ . ' --shadow-file %s %t %s' -endfunction - -function! ale_linters#python#mypy#Handle(buffer, lines) abort - let l:dir = ale_linters#python#mypy#GetCwd(a:buffer) - " Look for lines like the following: - " - " file.py:4: error: No library stub file for module 'django.db' - " - " Lines like these should be ignored below: - " - " file.py:4: note: (Stub files are from https://github.com/python/typeshed) - - let l:types = 'error|warning' - - if ale#Var(a:buffer, 'python_mypy_show_notes') - let l:types = 'error|warning|note' - endif - - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?: (' - \ . l:types - \ . '): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - " Skip invalid syntax errors if the option is on. - if l:match[5] is# 'invalid syntax' - \&& ale#Var(a:buffer, 'python_mypy_ignore_invalid_syntax') - continue - endif - - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'type': l:match[4] is# 'error' ? 'E' : (l:match[4] is# 'note' ? 'I': 'W'), - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'mypy', -\ 'executable': function('ale_linters#python#mypy#GetExecutable'), -\ 'cwd': function('ale_linters#python#mypy#GetCwd'), -\ 'command': function('ale_linters#python#mypy#GetCommand'), -\ 'callback': 'ale_linters#python#mypy#Handle', -\ 'output_stream': 'both' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/prospector.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/prospector.vim deleted file mode 100644 index 3623bda0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/prospector.vim +++ /dev/null @@ -1,106 +0,0 @@ -" Author: chocoelho -" Description: prospector linter python files - -call ale#Set('python_prospector_auto_pipenv', 0) -call ale#Set('python_prospector_auto_poetry', 0) - -let g:ale_python_prospector_executable = -\ get(g:, 'ale_python_prospector_executable', 'prospector') - -let g:ale_python_prospector_options = -\ get(g:, 'ale_python_prospector_options', '') - -let g:ale_python_prospector_use_global = get(g:, 'ale_python_prospector_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#python#prospector#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_prospector_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_prospector_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_prospector', ['prospector']) -endfunction - -function! ale_linters#python#prospector#GetCommand(buffer) abort - let l:executable = ale_linters#python#prospector#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run prospector' - \ : '' - - return ale#Escape(l:executable) - \ . l:exec_args - \ . ' ' . ale#Var(a:buffer, 'python_prospector_options') - \ . ' --messages-only --absolute-paths --zero-exit --output-format json' - \ . ' %s' -endfunction - -function! ale_linters#python#prospector#Handle(buffer, lines) abort - let l:output = [] - - if empty(a:lines) - return [] - endif - - let l:prospector_error = json_decode(join(a:lines, '')) - - for l:error in l:prospector_error.messages - if (l:error.code is# 'W291' || l:error.code is# 'W293' || l:error.code is# 'trailing-whitespace') - \ && !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - " Skip warnings for trailing whitespace if the option is off. - continue - endif - - if l:error.code is# 'W391' - \&& !ale#Var(a:buffer, 'warn_about_trailing_blank_lines') - " Skip warnings for trailing blank lines if the option is off - continue - endif - - if l:error.source =~# '\v\[%(dodgy|mccabe|pep8|pep257|pyroma)\]$' - let l:sub_type = 'style' - else - let l:sub_type = '' - endif - - if l:error.source =~# '\v\[pylint\]$' - let l:type = l:error.code =~? '\m^[CRW]' ? 'W' : 'E' - elseif l:error.source =~# '\v\[%(frosted|pep8)\]$' - let l:type = l:error.code =~? '\m^W' ? 'W' : 'E' - elseif l:error.source =~# '\v\[%(dodgy|pyroma|vulture)\]$' - let l:type = 'W' - else - let l:type = 'E' - endif - - let l:item = { - \ 'lnum': l:error.location.line, - \ 'col': l:error.location.character + 1, - \ 'text': l:error.message, - \ 'code': printf('(%s) %s', l:error.source, l:error.code), - \ 'type': l:type, - \ 'sub_type': l:sub_type, - \} - - if l:sub_type is# '' - unlet l:item.sub_type - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'prospector', -\ 'executable': function('ale_linters#python#prospector#GetExecutable'), -\ 'command': function('ale_linters#python#prospector#GetCommand'), -\ 'callback': 'ale_linters#python#prospector#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/pycodestyle.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/pycodestyle.vim deleted file mode 100644 index 3fb94d69..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/pycodestyle.vim +++ /dev/null @@ -1,81 +0,0 @@ -" Author: Michael Thiesen -" Description: pycodestyle linting for python files - -call ale#Set('python_pycodestyle_executable', 'pycodestyle') -call ale#Set('python_pycodestyle_options', '') -call ale#Set('python_pycodestyle_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pycodestyle_auto_pipenv', 0) -call ale#Set('python_pycodestyle_auto_poetry', 0) - -function! ale_linters#python#pycodestyle#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pycodestyle_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pycodestyle_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pycodestyle', ['pycodestyle']) -endfunction - -function! ale_linters#python#pycodestyle#GetCommand(buffer) abort - let l:executable = ale_linters#python#pycodestyle#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run pycodestyle' - \ : '' - - return ale#Escape(l:executable) . l:exec_args - \ . ' ' - \ . ale#Var(a:buffer, 'python_pycodestyle_options') - \ . ' -' -endfunction - -function! ale_linters#python#pycodestyle#Handle(buffer, lines) abort - let l:pattern = '\v^(\S*):(\d*):(\d*): ([EW]\d+) (.*)$' - let l:output = [] - - " lines are formatted as follows: - " file.py:21:26: W291 trailing whitespace - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if(l:match[4] is# 'W291' || l:match[4] is# 'W293') - \&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - " Skip warnings for trailing whitespace if the option is off. - continue - endif - - if l:match[4] is# 'W391' - \&& !ale#Var(a:buffer, 'warn_about_trailing_blank_lines') - " Skip warnings for trailing blank lines if the option is off - continue - endif - - let l:item = { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'type': l:match[4][0], - \ 'sub_type': 'style', - \ 'text': l:match[5], - \ 'code': l:match[4], - \} - - " E999 and E112 are syntax errors. - if l:match[4] is# 'E999' || l:match[4] is# 'E112' - unlet l:item.sub_type - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pycodestyle', -\ 'executable': function('ale_linters#python#pycodestyle#GetExecutable'), -\ 'command': function('ale_linters#python#pycodestyle#GetCommand'), -\ 'callback': 'ale_linters#python#pycodestyle#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/pydocstyle.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/pydocstyle.vim deleted file mode 100644 index ef0d818c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/pydocstyle.vim +++ /dev/null @@ -1,77 +0,0 @@ -" Author: Pablo Acosta -" Description: pydocstyle for python files - -call ale#Set('python_pydocstyle_executable', 'pydocstyle') -call ale#Set('python_pydocstyle_options', '') -call ale#Set('python_pydocstyle_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pydocstyle_auto_pipenv', 0) -call ale#Set('python_pydocstyle_auto_poetry', 0) - -function! ale_linters#python#pydocstyle#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pydocstyle_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pydocstyle_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pydocstyle', ['pydocstyle']) -endfunction - -function! ale_linters#python#pydocstyle#GetCommand(buffer) abort - let l:executable = ale_linters#python#pydocstyle#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run pydocstyle' - \ : '' - - return ale#Escape(l:executable) . l:exec_args - \ . ale#Pad(ale#Var(a:buffer, 'python_pydocstyle_options')) - \ . ' %s' -endfunction - -function! ale_linters#python#pydocstyle#Handle(buffer, lines) abort - " Matches patterns like the following: - " mydir/myfile.py:33 in public function `myfunction`: - " DXXX: Error description - let l:line1_pattern = '\v^.*:\s*(\d+)\s+.*$' - let l:line2_pattern = '\v^.*([a-zA-Z]\d+):\s*(.*)$' - let l:output = [] - - let l:num_lines = len(a:lines) - let l:index = 0 - - while l:index < l:num_lines - let l:lnum = matchlist(a:lines[l:index], l:line1_pattern) - - if !empty(l:lnum) && (l:index + 1 < l:num_lines) - let l:desc = matchlist(a:lines[l:index + 1], l:line2_pattern) - - if !empty(l:desc) - call add(l:output, { - \ 'lnum': l:lnum[1] + 0, - \ 'col': 1, - \ 'type': 'W', - \ 'text': l:desc[2], - \ 'code': l:desc[1], - \}) - endif - - let l:index = l:index + 2 - else - let l:index = l:index + 1 - endif - endwhile - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pydocstyle', -\ 'executable': function('ale_linters#python#pydocstyle#GetExecutable'), -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#python#pydocstyle#GetCommand'), -\ 'callback': 'ale_linters#python#pydocstyle#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/pyflakes.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/pyflakes.vim deleted file mode 100644 index 2567c533..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/pyflakes.vim +++ /dev/null @@ -1,56 +0,0 @@ -" Author: w0rp -" Description: pyflakes for python files - -call ale#Set('python_pyflakes_executable', 'pyflakes') -call ale#Set('python_pyflakes_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pyflakes_auto_pipenv', 0) -call ale#Set('python_pyflakes_auto_poetry', 0) - -function! ale_linters#python#pyflakes#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyflakes_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pyflakes_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pyflakes', ['pyflakes']) -endfunction - -function! ale_linters#python#pyflakes#GetCommand(buffer) abort - let l:executable = ale_linters#python#pyflakes#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run pyflakes' - \ : '' - - return ale#Escape(l:executable) - \ . l:exec_args - \ . ' %t' -endfunction - -function! ale_linters#python#pyflakes#Handle(buffer, lines) abort - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+)?:? (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pyflakes', -\ 'executable': function('ale_linters#python#pyflakes#GetExecutable'), -\ 'command': function('ale_linters#python#pyflakes#GetCommand'), -\ 'callback': 'ale_linters#python#pyflakes#Handle', -\ 'output_stream': 'both', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/pylama.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/pylama.vim deleted file mode 100644 index 14f8071a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/pylama.vim +++ /dev/null @@ -1,154 +0,0 @@ -" Author: Kevin Locke -" Description: pylama for python files - -call ale#Set('python_pylama_executable', 'pylama') -call ale#Set('python_pylama_options', '') -call ale#Set('python_pylama_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pylama_auto_pipenv', 0) -call ale#Set('python_pylama_auto_poetry', 0) -call ale#Set('python_pylama_change_directory', 1) - -function! ale_linters#python#pylama#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pylama_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pylama_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pylama', ['pylama']) -endfunction - -function! ale_linters#python#pylama#RunWithVersionCheck(buffer) abort - let l:executable = ale_linters#python#pylama#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run pylama' - \ : '' - - let l:command = ale#Escape(l:executable) . l:exec_args . ' --version' - - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ l:executable, - \ l:command, - \ function('ale_linters#python#pylama#GetCommand'), - \) -endfunction - -function! ale_linters#python#pylama#GetCwd(buffer) abort - if ale#Var(a:buffer, 'python_pylama_change_directory') - " Pylama loads its configuration from the current directory only, and - " applies file masks using paths relative to the current directory. - " Run from project root, if found, otherwise buffer dir. - let l:project_root = ale#python#FindProjectRoot(a:buffer) - - return !empty(l:project_root) ? l:project_root : '%s:h' - endif - - return '' -endfunction - -function! ale_linters#python#pylama#GetCommand(buffer, version) abort - let l:executable = ale_linters#python#pylama#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run pylama' - \ : '' - - " json format is added in version 8.1.4 - " https://github.com/klen/pylama/blob/develop/Changelog - let l:format_json_args = ale#semver#GTE(a:version, [8, 1, 4]) - \ ? ' --format json' - \ : '' - - " Note: Using %t to lint changes would be preferable, but many pylama - " checks use surrounding paths (e.g. C0103 module name, E0402 relative - " import beyond top, etc.). Neither is ideal. - return ale#Escape(l:executable) . l:exec_args - \ . ale#Pad(ale#Var(a:buffer, 'python_pylama_options')) - \ . l:format_json_args - \ . ' %s' -endfunction - -function! ale_linters#python#pylama#Handle(buffer, version, lines) abort - if empty(a:lines) - return [] - endif - - let l:output = ale#python#HandleTraceback(a:lines, 1) - - " First letter of error code is a pylint-compatible message type - " http://pylint.pycqa.org/en/latest/user_guide/output.html#source-code-analysis-section - " D is for Documentation (pydocstyle) - let l:pylint_type_to_ale_type = { - \ 'I': 'I', - \ 'R': 'W', - \ 'C': 'W', - \ 'W': 'W', - \ 'E': 'E', - \ 'F': 'E', - \ 'D': 'W', - \} - let l:pylint_type_to_ale_sub_type = { - \ 'R': 'style', - \ 'C': 'style', - \ 'D': 'style', - \} - - if ale#semver#GTE(a:version, [8, 1, 4]) - try - let l:errors = json_decode(join(a:lines, '')) - catch - return l:output - endtry - - if empty(l:errors) - return l:output - endif - - for l:error in l:errors - call add(l:output, { - \ 'lnum': l:error['lnum'], - \ 'col': l:error['col'], - \ 'code': l:error['number'], - \ 'type': get(l:pylint_type_to_ale_type, l:error['etype'], 'W'), - \ 'sub_type': get(l:pylint_type_to_ale_sub_type, l:error['etype'], ''), - \ 'text': printf('%s [%s]', l:error['message'], l:error['source']), - \}) - endfor - else - let l:pattern = '\v^.{-}:([0-9]+):([0-9]+): +%(([A-Z][0-9]+):? +)?(.*)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': str2nr(l:match[1]), - \ 'col': str2nr(l:match[2]), - \ 'code': l:match[3], - \ 'type': get(l:pylint_type_to_ale_type, l:match[3][0], 'W'), - \ 'sub_type': get(l:pylint_type_to_ale_sub_type, l:match[3][0], ''), - \ 'text': l:match[4], - \}) - endfor - endif - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pylama', -\ 'executable': function('ale_linters#python#pylama#GetExecutable'), -\ 'cwd': function('ale_linters#python#pylama#GetCwd'), -\ 'command': function('ale_linters#python#pylama#RunWithVersionCheck'), -\ 'callback': {buffer, lines -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale_linters#python#pylama#GetExecutable(buffer), -\ '%e --version', -\ {buffer, version -> ale_linters#python#pylama#Handle( -\ buffer, -\ l:version, -\ lines)}, -\ )}, -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/pylint.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/pylint.vim deleted file mode 100644 index 2ce5376f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/pylint.vim +++ /dev/null @@ -1,120 +0,0 @@ -" Author: keith -" Description: pylint for python files - -call ale#Set('python_pylint_executable', 'pylint') -call ale#Set('python_pylint_options', '') -call ale#Set('python_pylint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pylint_change_directory', 1) -call ale#Set('python_pylint_auto_pipenv', 0) -call ale#Set('python_pylint_auto_poetry', 0) -call ale#Set('python_pylint_use_msg_id', 0) - -function! ale_linters#python#pylint#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pylint_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pylint_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pylint', ['pylint']) -endfunction - -function! ale_linters#python#pylint#GetCwd(buffer) abort - if ale#Var(a:buffer, 'python_pylint_change_directory') - " pylint only checks for pylintrc in the packages above its current - " directory before falling back to user and global pylintrc. - " Run from project root, if found, otherwise buffer dir. - let l:project_root = ale#python#FindProjectRoot(a:buffer) - - return !empty(l:project_root) ? l:project_root : '%s:h' - endif - - return '' -endfunction - -function! ale_linters#python#pylint#GetCommand(buffer, version) abort - let l:executable = ale_linters#python#pylint#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run pylint' - \ : '' - - return ale#Escape(l:executable) . l:exec_args - \ . ale#Pad(ale#Var(a:buffer, 'python_pylint_options')) - \ . ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n' - \ . (ale#semver#GTE(a:version, [2, 4, 0]) ? ' --from-stdin' : '') - \ . ' %s' -endfunction - -function! ale_linters#python#pylint#Handle(buffer, lines) abort - let l:output = ale#python#HandleTraceback(a:lines, 10) - - if !empty(l:output) - return l:output - endif - - " Matches patterns like the following: - " - " test.py:4:4: W0101 (unreachable) Unreachable code - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+): ([[:alnum:]]+) \(([^(]*)\) (.*)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - "let l:failed = append(0, l:match) - let l:code = l:match[3] - - if (l:code is# 'C0303') - \ && !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - " Skip warnings for trailing whitespace if the option is off. - continue - endif - - if l:code is# 'I0011' - " Skip 'Locally disabling' message - continue - endif - - if ale#Var(a:buffer, 'python_pylint_use_msg_id') is# 1 - let l:code_out = l:code - else - let l:code_out = l:match[4] - endif - - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 1, - \ 'text': l:match[5], - \ 'code': l:code_out, - \ 'type': 'W', - \} - - if l:code[:0] is# 'E' - let l:item.type = 'E' - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pylint', -\ 'executable': function('ale_linters#python#pylint#GetExecutable'), -\ 'lint_file': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale#Var(buffer, 'python_pylint_executable'), -\ '%e --version', -\ {buffer, version -> !ale#semver#GTE(version, [2, 4, 0])}, -\ )}, -\ 'cwd': function('ale_linters#python#pylint#GetCwd'), -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale#Var(buffer, 'python_pylint_executable'), -\ '%e --version', -\ function('ale_linters#python#pylint#GetCommand'), -\ )}, -\ 'callback': 'ale_linters#python#pylint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/pylsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/pylsp.vim deleted file mode 100644 index 537d1e74..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/pylsp.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: aurieh -" Description: A language server for Python - -call ale#Set('python_pylsp_executable', 'pylsp') -call ale#Set('python_pylsp_options', '') -call ale#Set('python_pylsp_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pylsp_auto_pipenv', 0) -call ale#Set('python_pylsp_auto_poetry', 0) -call ale#Set('python_pylsp_config', {}) - -function! ale_linters#python#pylsp#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pylsp_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pylsp_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pylsp', ['pylsp']) -endfunction - -function! ale_linters#python#pylsp#GetCommand(buffer) abort - let l:executable = ale_linters#python#pylsp#GetExecutable(a:buffer) - - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run pylsp' - \ : '' - - return ale#Escape(l:executable) . l:exec_args . ale#Pad(ale#Var(a:buffer, 'python_pylsp_options')) -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pylsp', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#python#pylsp#GetExecutable'), -\ 'command': function('ale_linters#python#pylsp#GetCommand'), -\ 'project_root': function('ale#python#FindProjectRoot'), -\ 'completion_filter': 'ale#completion#python#CompletionItemFilter', -\ 'lsp_config': {b -> ale#Var(b, 'python_pylsp_config')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/pyre.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/pyre.vim deleted file mode 100644 index 5e5786f9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/pyre.vim +++ /dev/null @@ -1,44 +0,0 @@ -" Author: dsifford -" Description: A performant type-checker supporting LSP for Python 3 created by Facebook - -call ale#Set('python_pyre_executable', 'pyre') -call ale#Set('python_pyre_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pyre_auto_pipenv', 0) -call ale#Set('python_pyre_auto_poetry', 0) - -function! ale_linters#python#pyre#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyre_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pyre_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pyre', ['pyre']) -endfunction - -function! ale_linters#python#pyre#GetCommand(buffer) abort - let l:executable = ale_linters#python#pyre#GetExecutable(a:buffer) - let l:exec_args = (l:executable =~? 'pipenv\|poetry$' ? ' run pyre' : '') . ' persistent' - - return ale#Escape(l:executable) . l:exec_args -endfunction - -function! ale_linters#python#pyre#GetCwd(buffer) abort - let l:local_config = ale#path#FindNearestFile(a:buffer, '.pyre_configuration.local') - - return fnamemodify(l:local_config, ':h') -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pyre', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#python#pyre#GetExecutable'), -\ 'command': function('ale_linters#python#pyre#GetCommand'), -\ 'project_root': function('ale#python#FindProjectRoot'), -\ 'completion_filter': 'ale#completion#python#CompletionItemFilter', -\ 'cwd': function('ale_linters#python#pyre#GetCwd'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/pyright.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/pyright.vim deleted file mode 100644 index 422ecd61..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/pyright.vim +++ /dev/null @@ -1,43 +0,0 @@ -call ale#Set('python_pyright_executable', 'pyright-langserver') -call ale#Set('python_pyright_config', {}) - -function! ale_linters#python#pyright#GetConfig(buffer) abort - let l:config = deepcopy(ale#Var(a:buffer, 'python_pyright_config')) - - if !has_key(l:config, 'python') - let l:config.python = {} - endif - - if type(l:config.python) is v:t_dict - " Automatically detect the virtualenv path and use it. - if !has_key(l:config.python, 'venvPath') - let l:venv = ale#python#FindVirtualenv(a:buffer) - - if !empty(l:venv) - let l:config.python.venvPath = l:venv - endif - endif - - " Automatically use the version of Python in virtualenv. - if type(get(l:config.python, 'venvPath')) is v:t_string - \&& !empty(l:config.python.venvPath) - \&& !has_key(l:config.python, 'pythonPath') - let l:config.python.pythonPath = ale#path#Simplify( - \ l:config.python.venvPath - \ . (has('win32') ? '/Scripts/python' : '/bin/python') - \) - endif - endif - - return l:config -endfunction - -call ale#linter#Define('python', { -\ 'name': 'pyright', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'python_pyright_executable')}, -\ 'command': '%e --stdio', -\ 'project_root': function('ale#python#FindProjectRoot'), -\ 'completion_filter': 'ale#completion#python#CompletionItemFilter', -\ 'lsp_config': function('ale_linters#python#pyright#GetConfig'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/unimport.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/unimport.vim deleted file mode 100644 index 71fd80f0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/unimport.vim +++ /dev/null @@ -1,75 +0,0 @@ -" Author: Author: Jon Parise - -call ale#Set('python_unimport_executable', 'unimport') -call ale#Set('python_unimport_options', '') -call ale#Set('python_unimport_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_unimport_auto_pipenv', 0) -call ale#Set('python_unimport_auto_poetry', 0) - -function! ale_linters#python#unimport#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_unimport_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_unimport_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_unimport', ['unimport']) -endfunction - -function! ale_linters#python#unimport#GetCommand(buffer) abort - let l:executable = ale_linters#python#unimport#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run unimport' - \ : '' - - return '%e' . l:exec_args - \ . ale#Pad(ale#Var(a:buffer, 'python_unimport_options')) - \ . ' --check' - \ . ' %t' -endfunction - - -function! ale_linters#python#unimport#GetCwd(buffer) abort - let l:project_root = ale#python#FindProjectRoot(a:buffer) - - return !empty(l:project_root) - \ ? l:project_root - \ : expand('#' . a:buffer . ':p:h') -endfunction - - -function! ale_linters#python#unimport#Handle(buffer, lines) abort - let l:output = ale#python#HandleTraceback(a:lines, 10) - - if !empty(l:output) - return l:output - endif - - " Matches lines like: - " - " urllib.parse at path/to/file.py:9 - let l:pattern = '\v(.+) at [^:]+:(\d+)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'type': 'W', - \ 'text': 'unused: ' . l:match[1], - \}) - endfor - - return l:output -endfunction - - -call ale#linter#Define('python', { -\ 'name': 'unimport', -\ 'executable': function('ale_linters#python#unimport#GetExecutable'), -\ 'cwd': function('ale_linters#python#unimport#GetCwd'), -\ 'command': function('ale_linters#python#unimport#GetCommand'), -\ 'callback': 'ale_linters#python#unimport#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/python/vulture.vim b/dotfiles/.vim/plugged/ale/ale_linters/python/vulture.vim deleted file mode 100644 index a7ba1860..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/python/vulture.vim +++ /dev/null @@ -1,79 +0,0 @@ -" Author: Yauheni Kirylau -" Description: vulture linting for python files - -call ale#Set('python_vulture_executable', 'vulture') -call ale#Set('python_vulture_options', '') -call ale#Set('python_vulture_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_vulture_change_directory', 1) - -" The directory to change to before running vulture -function! s:GetDir(buffer) abort - let l:project_root = ale#python#FindProjectRoot(a:buffer) - - return !empty(l:project_root) - \ ? l:project_root - \ : expand('#' . a:buffer . ':p:h') -endfunction - -function! ale_linters#python#vulture#GetExecutable(buffer) abort - return ale#python#FindExecutable(a:buffer, 'python_vulture', ['vulture']) -endfunction - -function! ale_linters#python#vulture#GetCwd(buffer) abort - if !ale#Var(a:buffer, 'python_vulture_change_directory') - return '' - endif - - return s:GetDir(a:buffer) -endfunction - -function! ale_linters#python#vulture#GetCommand(buffer) abort - let l:executable = ale_linters#python#vulture#GetExecutable(a:buffer) - let l:exec_args = l:executable =~? 'pipenv\|poetry$' - \ ? ' run vulture' - \ : '' - let l:lint_dest = ale#Var(a:buffer, 'python_vulture_change_directory') - \ ? ' .' - \ : ' %s' - - return ale#Escape(l:executable) . l:exec_args - \ . ' ' - \ . ale#Var(a:buffer, 'python_vulture_options') - \ . l:lint_dest -endfunction - - -function! ale_linters#python#vulture#Handle(buffer, lines) abort - let l:output = ale#python#HandleTraceback(a:lines, 10) - - if !empty(l:output) - return l:output - endif - - " Matches patterns line the following: - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+): (.*)$' - let l:dir = s:GetDir(a:buffer) - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:abspath = ale#path#GetAbsPath(l:dir, l:match[1]) - let l:item = { - \ 'filename': l:abspath, - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[3], - \ 'type': 'W', - \} - call add(l:output, l:item) - endfor - - return l:output -endfunction - - -call ale#linter#Define('python', { -\ 'name': 'vulture', -\ 'executable': function('ale_linters#python#vulture#GetExecutable'), -\ 'cwd': function('ale_linters#python#vulture#GetCwd'), -\ 'command': function('ale_linters#python#vulture#GetCommand'), -\ 'callback': 'ale_linters#python#vulture#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/qml/qmlfmt.vim b/dotfiles/.vim/plugged/ale/ale_linters/qml/qmlfmt.vim deleted file mode 100644 index 11cc9413..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/qml/qmlfmt.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: pylipp (www.github.com/pylipp) -" Description: qmlfmt for QML files - -call ale#Set('qml_qmlfmt_executable', 'qmlfmt') - -" Find lines like -" Error:11:1: Expected token `}' -function! ale_linters#qml#qmlfmt#Handle(buffer, lines) abort - let l:pattern = '\v^(Error|Warning):(\d+):(\d+): (.+)$' - - return map(ale#util#GetMatches(a:lines, l:pattern), "{ - \ 'lnum': v:val[2] + 0, - \ 'col': v:val[3] + 0, - \ 'text': v:val[4], - \ 'type': v:val[1] is# 'Warning' ? 'W' : 'E', - \}") -endfunction - -call ale#linter#Define('qml', { -\ 'name': 'qmlfmt', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'qml_qmlfmt_executable')}, -\ 'command': '%e -e', -\ 'callback': 'ale_linters#qml#qmlfmt#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/qml/qmllint.vim b/dotfiles/.vim/plugged/ale/ale_linters/qml/qmllint.vim deleted file mode 100644 index c2258a14..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/qml/qmllint.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: pylipp (www.github.com/pylipp) -" Description: qmllint for QML files - -" Find lines like -" /home/foo_user42/code-base/qml/Screen.qml:11 : Expected token `}' -function! ale_linters#qml#qmllint#Handle(buffer, lines) abort - let l:pattern = '\v^[/_-a-zA-z0-9\. ]+:(\d+) : (.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'col': 0, - \ 'text': l:match[2], - \ 'type': 'E', - \} - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('qml', { -\ 'name': 'qmllint', -\ 'output_stream': 'stderr', -\ 'executable': 'qmllint', -\ 'command': 'qmllint %t', -\ 'callback': 'ale_linters#qml#qmllint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/r/languageserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/r/languageserver.vim deleted file mode 100644 index bab869d1..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/r/languageserver.vim +++ /dev/null @@ -1,27 +0,0 @@ -" Author: Eric Zhao <21zhaoe@protonmail.com> -" Author: ourigen -" Description: Implementation of the Language Server Protocol for R. - -call ale#Set('r_languageserver_cmd', 'languageserver::run()') -call ale#Set('r_languageserver_config', {}) - -function! ale_linters#r#languageserver#GetCommand(buffer) abort - let l:cmd_string = ale#Var(a:buffer, 'r_languageserver_cmd') - - return 'Rscript --no-save --no-restore --no-site-file --no-init-file -e ' . ale#Escape(l:cmd_string) -endfunction - -function! ale_linters#r#languageserver#GetProjectRoot(buffer) abort - let l:project_root = ale#path#FindNearestFile(a:buffer, '.Rprofile') - - return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : fnamemodify(a:buffer, ':h') -endfunction - -call ale#linter#Define('r', { -\ 'name': 'languageserver', -\ 'lsp': 'stdio', -\ 'lsp_config': {b -> ale#Var(b, 'r_languageserver_config')}, -\ 'executable': 'Rscript', -\ 'command': function('ale_linters#r#languageserver#GetCommand'), -\ 'project_root': function('ale_linters#r#languageserver#GetProjectRoot') -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/r/lintr.vim b/dotfiles/.vim/plugged/ale/ale_linters/r/lintr.vim deleted file mode 100644 index 339ad2b0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/r/lintr.vim +++ /dev/null @@ -1,35 +0,0 @@ -" Author: Michel Lang , w0rp , -" Fenner Macrae , -" ourigen -" Description: This file adds support for checking R code with lintr. - -let g:ale_r_lintr_options = get(g:, 'ale_r_lintr_options', 'with_defaults()') -" A reasonable alternative default: -" get(g:, 'ale_r_lintr_options', 'with_defaults(object_usage_linter = NULL)') - - -let g:ale_r_lintr_lint_package = get(g:, 'ale_r_lintr_lint_package', 0) - -function! ale_linters#r#lintr#GetCommand(buffer) abort - if ale#Var(a:buffer, 'r_lintr_lint_package') - let l:lint_cmd = 'lint_package(cache = FALSE, linters = ' - \ . ale#Var(a:buffer, 'r_lintr_options') . ')' - else - let l:lint_cmd = 'lint(cache = FALSE, commandArgs(TRUE), ' - \ . ale#Var(a:buffer, 'r_lintr_options') . ')' - endif - - let l:cmd_string = 'suppressPackageStartupMessages(library(lintr));' - \ . l:lint_cmd - - return 'Rscript --no-save --no-restore --no-site-file --no-init-file -e ' . ale#Escape(l:cmd_string) . ' %t' -endfunction - -call ale#linter#Define('r', { -\ 'name': 'lintr', -\ 'executable': 'Rscript', -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#r#lintr#GetCommand'), -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\ 'output_stream': 'both', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/racket/langserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/racket/langserver.vim deleted file mode 100644 index ec80ed7b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/racket/langserver.vim +++ /dev/null @@ -1,7 +0,0 @@ -call ale#linter#Define('racket', { -\ 'name': 'racket_langserver', -\ 'lsp': 'stdio', -\ 'executable': 'racket', -\ 'command': '%e -l racket-langserver', -\ 'project_root': function('ale#racket#FindProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/racket/raco.vim b/dotfiles/.vim/plugged/ale/ale_linters/racket/raco.vim deleted file mode 100644 index 5b26065f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/racket/raco.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Author: aqui18 -" Description: This file adds support for checking Racket code with raco. -" This is the same form of syntax-checking used by DrRacket as well. The -" downside is that it will only catch the first error, but none of the -" subsequent ones. This is due to how evaluation in Racket works. - -function! ale_linters#racket#raco#Handle(buffer, lines) abort - " Matches patterns - " :: - " eg: - " info.rkt:4:0: infotab-module: not a well-formed definition - let l:pattern = '^\(\s\)\@!\(.\+\):\(\d\+\):\(\d\+\): \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'filename': l:match[2], - \ 'lnum': l:match[3] + 0, - \ 'col': l:match[4] + 0, - \ 'type': 'E', - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('racket', { -\ 'name': 'raco', -\ 'executable': 'raco', -\ 'output_stream': 'stderr', -\ 'command': 'raco expand %s', -\ 'callback': 'ale_linters#racket#raco#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/reason/ls.vim b/dotfiles/.vim/plugged/ale/ale_linters/reason/ls.vim deleted file mode 100644 index fb1114ae..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/reason/ls.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: David Buchan-Swanson -" Description: Integrate ALE with reason-language-server. - -call ale#Set('reason_ls_executable', '') - -function! ale_linters#reason#ls#FindProjectRoot(buffer) abort - let l:reason_config = ale#path#FindNearestFile(a:buffer, 'bsconfig.json') - - if !empty(l:reason_config) - return fnamemodify(l:reason_config, ':h') - endif - - return '' -endfunction - -call ale#linter#Define('reason', { -\ 'name': 'reason-language-server', -\ 'lsp': 'stdio', -\ 'executable': {buffer -> ale#Var(buffer, 'reason_ls_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale_linters#reason#ls#FindProjectRoot'), -\ 'language': 'reason', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/reason/merlin.vim b/dotfiles/.vim/plugged/ale/ale_linters/reason/merlin.vim deleted file mode 100644 index 7bef7df8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/reason/merlin.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Andrey Popp -- @andreypopp -" Description: Report errors in ReasonML code with Merlin - -if !exists('g:merlin') - finish -endif - -function! ale_linters#reason#merlin#Handle(buffer, lines) abort - return merlin#ErrorLocList() -endfunction - -call ale#linter#Define('reason', { -\ 'name': 'merlin', -\ 'executable': 'ocamlmerlin', -\ 'command': 'true', -\ 'callback': 'ale_linters#reason#merlin#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/reason/ols.vim b/dotfiles/.vim/plugged/ale/ale_linters/reason/ols.vim deleted file mode 100644 index 9fbd9b4f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/reason/ols.vim +++ /dev/null @@ -1,14 +0,0 @@ -" Author: Michael Jungo -" Description: A language server for Reason - -call ale#Set('reason_ols_executable', 'ocaml-language-server') -call ale#Set('reason_ols_use_global', get(g:, 'ale_use_global_executables', 0)) - -call ale#linter#Define('reason', { -\ 'name': 'ols', -\ 'lsp': 'stdio', -\ 'executable': function('ale#handlers#ols#GetExecutable'), -\ 'command': function('ale#handlers#ols#GetCommand'), -\ 'language': function('ale#handlers#ols#GetLanguage'), -\ 'project_root': function('ale#handlers#ols#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rego/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/rego/cspell.vim deleted file mode 100644 index a54a5379..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rego/cspell.vim +++ /dev/null @@ -1,4 +0,0 @@ -scriptencoding utf-8 -" Description: cspell support for rego files. - -call ale#handlers#cspell#DefineLinter('rego') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rego/opacheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/rego/opacheck.vim deleted file mode 100644 index 77d8c93a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rego/opacheck.vim +++ /dev/null @@ -1,56 +0,0 @@ -" Description: opa check for rego files - -call ale#Set('rego_opacheck_executable', 'opa') -call ale#Set('rego_opacheck_options', '') - -function! ale_linters#rego#opacheck#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'rego_opacheck_executable') -endfunction - -function! ale_linters#rego#opacheck#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'rego_opacheck_options') - - return ale#Escape(ale_linters#rego#opacheck#GetExecutable(a:buffer)) - \ . ' check %s --format json ' - \ . (!empty(l:options) ? ' ' . l:options : '') -endfunction - -function! ale_linters#rego#opacheck#Handle(buffer, lines) abort - let l:output = [] - - let l:errors = ale#util#FuzzyJSONDecode(a:lines, {'errors': []}) - let l:dir = expand('#' . a:buffer . ':p:h') - let l:file = expand('#' . a:buffer . ':p') - - for l:error in l:errors['errors'] - if has_key(l:error, 'location') - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:error['location']['file']), - \ 'lnum': l:error['location']['row'], - \ 'col': l:error['location']['col'], - \ 'text': l:error['message'], - \ 'code': l:error['code'], - \ 'type': 'E', - \}) - else - call add(l:output, { - \ 'filename': l:file, - \ 'lnum': 0, - \ 'col': 0, - \ 'text': l:error['message'], - \ 'code': l:error['code'], - \ 'type': 'E', - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('rego', { -\ 'name': 'opacheck', -\ 'output_stream': 'both', -\ 'executable': function('ale_linters#rego#opacheck#GetExecutable'), -\ 'command': function('ale_linters#rego#opacheck#GetCommand'), -\ 'callback': 'ale_linters#rego#opacheck#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/review/redpen.vim b/dotfiles/.vim/plugged/ale/ale_linters/review/redpen.vim deleted file mode 100644 index 0006cab9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/review/redpen.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: rhysd https://rhysd.github.io -" Description: Redpen, a proofreading tool (http://redpen.cc) - -call ale#linter#Define('review', { -\ 'name': 'redpen', -\ 'executable': 'redpen', -\ 'command': 'redpen -f review -r json %t', -\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/robot/rflint.vim b/dotfiles/.vim/plugged/ale/ale_linters/robot/rflint.vim deleted file mode 100644 index 8fe2d797..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/robot/rflint.vim +++ /dev/null @@ -1,46 +0,0 @@ -" Author: Samuel Branisa -" Description: rflint linting for robot framework files - -call ale#Set('robot_rflint_executable', 'rflint') - -function! ale_linters#robot#rflint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'robot_rflint_executable') -endfunction - -function! ale_linters#robot#rflint#GetCommand(buffer) abort - let l:executable = ale_linters#robot#rflint#GetExecutable(a:buffer) - let l:flags = '--format' - \ . ' "{filename}:{severity}:{linenumber}:{char}:{rulename}:{message}"' - - return l:executable - \ . ' ' - \ . l:flags - \ . ' %s' -endfunction - -function! ale_linters#robot#rflint#Handle(buffer, lines) abort - let l:pattern = '\v^([[:alnum:][:punct:]]+):(W|E):([[:digit:]]+):([[:digit:]]+):([[:alnum:]]+):(.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'filename': l:match[1], - \ 'type': l:match[2], - \ 'lnum': str2nr(l:match[3]), - \ 'col': str2nr(l:match[4]), - \ 'text': l:match[5], - \ 'detail': l:match[6], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('robot', { -\ 'name': 'rflint', -\ 'executable': function('ale_linters#robot#rflint#GetExecutable'), -\ 'command': function('ale_linters#robot#rflint#GetCommand'), -\ 'callback': 'ale_linters#robot#rflint#Handle', -\}) - diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rst/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/rst/alex.vim deleted file mode 100644 index e7ca6fa0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rst/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for rst files - -call ale#handlers#alex#DefineLinter('rst', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rst/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/rst/cspell.vim deleted file mode 100644 index 14cfb42e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rst/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for ReStructuredText files. - -call ale#handlers#cspell#DefineLinter('rst') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rst/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/rst/proselint.vim deleted file mode 100644 index 018347ae..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rst/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for reStructuredText files - -call ale#linter#Define('rst', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rst/redpen.vim b/dotfiles/.vim/plugged/ale/ale_linters/rst/redpen.vim deleted file mode 100644 index ac966c56..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rst/redpen.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: rhysd https://rhysd.github.io -" Description: Redpen, a proofreading tool (http://redpen.cc) - -call ale#linter#Define('rst', { -\ 'name': 'redpen', -\ 'executable': 'redpen', -\ 'command': 'redpen -f rest -r json %t', -\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rst/rstcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/rst/rstcheck.vim deleted file mode 100644 index e0cf0798..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rst/rstcheck.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Author: John Nduli https://github.com/jnduli -" Description: Rstcheck for reStructuredText files - -function! ale_linters#rst#rstcheck#Handle(buffer, lines) abort - " matches: 'bad_rst.rst:1: (SEVERE/4) Title overline & underline - " mismatch.' - let l:pattern = '\v^(.+):(\d*): \(([a-zA-Z]*)/\d*\) (.+)$' - let l:dir = expand('#' . a:buffer . ':p:h') - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': 0, - \ 'type': l:match[3] is# 'SEVERE' ? 'E' : 'W', - \ 'text': l:match[4], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('rst', { -\ 'name': 'rstcheck', -\ 'executable': 'rstcheck', -\ 'cwd': '%s:h', -\ 'command': 'rstcheck %t', -\ 'callback': 'ale_linters#rst#rstcheck#Handle', -\ 'output_stream': 'both', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rst/textlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/rst/textlint.vim deleted file mode 100644 index 56dd8db8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rst/textlint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: hokorobi -" Description: textlint, a proofreading tool (https://textlint.github.io/) - -call ale#linter#Define('rst', { -\ 'name': 'textlint', -\ 'executable': function('ale#handlers#textlint#GetExecutable'), -\ 'command': function('ale#handlers#textlint#GetCommand'), -\ 'callback': 'ale#handlers#textlint#HandleTextlintOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rst/vale.vim b/dotfiles/.vim/plugged/ale/ale_linters/rst/vale.vim deleted file mode 100644 index 2e654dc4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rst/vale.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: chew-z https://github.com/chew-z -" Description: vale for RST files - -call ale#linter#Define('rst', { -\ 'name': 'vale', -\ 'executable': 'vale', -\ 'command': 'vale --output=JSON %t', -\ 'callback': 'ale#handlers#vale#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rst/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/rst/writegood.vim deleted file mode 100644 index 26b1152a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rst/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for reStructuredText files - -call ale#handlers#writegood#DefineLinter('rst') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/brakeman.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/brakeman.vim deleted file mode 100644 index 2dc48740..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/brakeman.vim +++ /dev/null @@ -1,51 +0,0 @@ -" Author: Eddie Lebow https://github.com/elebow -" Description: Brakeman, a static analyzer for Rails security - -call ale#Set('ruby_brakeman_options', '') -call ale#Set('ruby_brakeman_executable', 'brakeman') -call ale#Set('ruby_brakeman_options', '') - -function! ale_linters#ruby#brakeman#Handle(buffer, lines) abort - let l:output = [] - let l:json = ale#util#FuzzyJSONDecode(a:lines, {}) - let l:sep = has('win32') ? '\' : '/' - " Brakeman always outputs paths relative to the Rails app root - let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) - - for l:warning in get(l:json, 'warnings', []) - let l:text = l:warning.warning_type . ' ' . l:warning.message . ' (' . l:warning.confidence . ')' - let l:line = l:warning.line != v:null ? l:warning.line : 1 - - call add(l:output, { - \ 'filename': l:rails_root . l:sep . l:warning.file, - \ 'lnum': l:line, - \ 'type': 'W', - \ 'text': l:text, - \}) - endfor - - return l:output -endfunction - -function! ale_linters#ruby#brakeman#GetCommand(buffer) abort - let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) - - if l:rails_root is? '' - return '' - endif - - let l:executable = ale#Var(a:buffer, 'ruby_brakeman_executable') - - return ale#ruby#EscapeExecutable(l:executable, 'brakeman') - \ . ' -f json -q ' - \ . ale#Var(a:buffer, 'ruby_brakeman_options') - \ . ' -p ' . ale#Escape(l:rails_root) -endfunction - -call ale#linter#Define('ruby', { -\ 'name': 'brakeman', -\ 'executable': {b -> ale#Var(b, 'ruby_brakeman_executable')}, -\ 'command': function('ale_linters#ruby#brakeman#GetCommand'), -\ 'callback': 'ale_linters#ruby#brakeman#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/cspell.vim deleted file mode 100644 index 780356b1..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Ruby files. - -call ale#handlers#cspell#DefineLinter('ruby') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/debride.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/debride.vim deleted file mode 100644 index 3b2cc443..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/debride.vim +++ /dev/null @@ -1,42 +0,0 @@ -" Author: Eddie Lebow https://github.com/elebow -" Description: debride, a dead method detector for Ruby files - -call ale#Set('ruby_debride_executable', 'debride') -call ale#Set('ruby_debride_options', '') - -function! ale_linters#ruby#debride#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_debride_executable') - - return ale#ruby#EscapeExecutable(l:executable, 'debride') - \ . ale#Var(a:buffer, 'ruby_debride_options') - \ . ' %s' -endfunction - -function! ale_linters#ruby#debride#HandleOutput(buffer, lines) abort - let l:output = [] - - for l:line in a:lines - if l:line !~# '^ ' - continue - endif - - let l:elements = split(l:line) - let l:method_name = l:elements[0] - let l:lnum = split(l:elements[1], ':')[1] - - call add(l:output, { - \ 'lnum': 0 + l:lnum, - \ 'text': 'Possible unused method: ' . l:method_name, - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('ruby', { -\ 'name': 'debride', -\ 'executable': {b -> ale#Var(b, 'ruby_debride_executable')}, -\ 'command': function('ale_linters#ruby#debride#GetCommand'), -\ 'callback': 'ale_linters#ruby#debride#HandleOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/rails_best_practices.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/rails_best_practices.vim deleted file mode 100644 index 36646647..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/rails_best_practices.vim +++ /dev/null @@ -1,49 +0,0 @@ -" Author: Eddie Lebow https://github.com/elebow -" Description: rails_best_practices, a code metric tool for rails projects - -call ale#Set('ruby_rails_best_practices_options', '') -call ale#Set('ruby_rails_best_practices_executable', 'rails_best_practices') - -function! ale_linters#ruby#rails_best_practices#Handle(buffer, lines) abort - let l:output = [] - - for l:warning in ale#util#FuzzyJSONDecode(a:lines, []) - if !ale#path#IsBufferPath(a:buffer, l:warning.filename) - continue - endif - - call add(l:output, { - \ 'lnum': l:warning.line_number + 0, - \ 'type': 'W', - \ 'text': l:warning.message, - \}) - endfor - - return l:output -endfunction - -function! ale_linters#ruby#rails_best_practices#GetCommand(buffer) abort - let l:rails_root = ale#ruby#FindRailsRoot(a:buffer) - - if l:rails_root is? '' - return '' - endif - - let l:executable = ale#Var(a:buffer, 'ruby_rails_best_practices_executable') - let l:output_file = has('win32') ? '%t ' : '/dev/stdout ' - let l:cat_file = has('win32') ? '; type %t' : '' - - return ale#ruby#EscapeExecutable(l:executable, 'rails_best_practices') - \ . ' --silent -f json --output-file ' . l:output_file - \ . ale#Var(a:buffer, 'ruby_rails_best_practices_options') - \ . ale#Escape(l:rails_root) - \ . l:cat_file -endfunction - -call ale#linter#Define('ruby', { -\ 'name': 'rails_best_practices', -\ 'executable': {b -> ale#Var(b, 'ruby_rails_best_practices_executable')}, -\ 'command': function('ale_linters#ruby#rails_best_practices#GetCommand'), -\ 'callback': 'ale_linters#ruby#rails_best_practices#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/reek.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/reek.vim deleted file mode 100644 index b6fa9d76..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/reek.vim +++ /dev/null @@ -1,69 +0,0 @@ -" Author: Eddie Lebow https://github.com/elebow -" Description: Reek, a code smell detector for Ruby files - -call ale#Set('ruby_reek_show_context', 0) -call ale#Set('ruby_reek_show_wiki_link', 0) -call ale#Set('ruby_reek_options', '') -call ale#Set('ruby_reek_executable', 'reek') - -function! ale_linters#ruby#reek#GetCommand(buffer, version) abort - let l:executable = ale#Var(a:buffer, 'ruby_reek_executable') - - " Tell reek what the filename is if the version of reek is new enough. - let l:display_name_args = ale#semver#GTE(a:version, [5, 0, 0]) - \ ? ' --stdin-filename %s' - \ : '' - - return ale#ruby#EscapeExecutable(l:executable, 'reek') - \ . ' -f json --no-progress --no-color --force-exclusion' - \ . l:display_name_args -endfunction - -function! s:GetDocumentationLink(error) abort - return get(a:error, 'documentation_link', get(a:error, 'wiki_link', '')) -endfunction - -function! s:BuildText(buffer, error) abort - let l:parts = [] - - if ale#Var(a:buffer, 'ruby_reek_show_context') - call add(l:parts, a:error.context) - endif - - call add(l:parts, a:error.message) - - if ale#Var(a:buffer, 'ruby_reek_show_wiki_link') - call add(l:parts, '[' . s:GetDocumentationLink(a:error) . ']') - endif - - return join(l:parts, ' ') -endfunction - -function! ale_linters#ruby#reek#Handle(buffer, lines) abort - let l:output = [] - - for l:error in ale#util#FuzzyJSONDecode(a:lines, []) - for l:location in l:error.lines - call add(l:output, { - \ 'lnum': l:location, - \ 'type': 'W', - \ 'text': s:BuildText(a:buffer, l:error), - \ 'code': l:error.smell_type, - \}) - endfor - endfor - - return l:output -endfunction - -call ale#linter#Define('ruby', { -\ 'name': 'reek', -\ 'executable': {b -> ale#Var(b, 'ruby_reek_executable')}, -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale#Var(buffer, 'ruby_reek_executable'), -\ '%e --version', -\ function('ale_linters#ruby#reek#GetCommand'), -\ )}, -\ 'callback': 'ale_linters#ruby#reek#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/rubocop.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/rubocop.vim deleted file mode 100644 index 483806a6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/rubocop.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Author: ynonp - https://github.com/ynonp, Eddie Lebow https://github.com/elebow -" Description: RuboCop, a code style analyzer for Ruby files - -call ale#Set('ruby_rubocop_executable', 'rubocop') -call ale#Set('ruby_rubocop_options', '') - -function! ale_linters#ruby#rubocop#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_rubocop_executable') - - return ale#ruby#EscapeExecutable(l:executable, 'rubocop') - \ . ' --format json --force-exclusion ' - \ . ale#Var(a:buffer, 'ruby_rubocop_options') - \ . ' --stdin %s' -endfunction - -function! ale_linters#ruby#rubocop#GetType(severity) abort - if a:severity is? 'convention' - \|| a:severity is? 'warning' - \|| a:severity is? 'refactor' - return 'W' - endif - - return 'E' -endfunction - -call ale#linter#Define('ruby', { -\ 'name': 'rubocop', -\ 'executable': {b -> ale#Var(b, 'ruby_rubocop_executable')}, -\ 'command': function('ale_linters#ruby#rubocop#GetCommand'), -\ 'callback': 'ale#ruby#HandleRubocopOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/ruby.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/ruby.vim deleted file mode 100644 index 621fcbc0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/ruby.vim +++ /dev/null @@ -1,12 +0,0 @@ -" Author: Brandon Roehl - https://github.com/BrandonRoehl -" Description: Ruby MRI for Ruby files - -call ale#Set('ruby_ruby_executable', 'ruby') - -call ale#linter#Define('ruby', { -\ 'name': 'ruby', -\ 'executable': {b -> ale#Var(b, 'ruby_ruby_executable')}, -\ 'command': '%e -w -c %t', -\ 'output_stream': 'stderr', -\ 'callback': 'ale#handlers#ruby#HandleSyntaxErrors', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/solargraph.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/solargraph.vim deleted file mode 100644 index bf54a55c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/solargraph.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: Horacio Sanson - https://github.com/hsanson -" Description: Solargraph Language Server https://solargraph.org/ -" -" Author: Devon Meunier -" Description: updated to use stdio - -call ale#Set('ruby_solargraph_executable', 'solargraph') -call ale#Set('ruby_solargraph_options', {}) - -function! ale_linters#ruby#solargraph#GetCommand(buffer) abort - return '%e' . ale#Pad('stdio') -endfunction - -call ale#linter#Define('ruby', { -\ 'name': 'solargraph', -\ 'lsp': 'stdio', -\ 'language': 'ruby', -\ 'executable': {b -> ale#Var(b, 'ruby_solargraph_executable')}, -\ 'command': function('ale_linters#ruby#solargraph#GetCommand'), -\ 'project_root': function('ale#ruby#FindProjectRoot'), -\ 'initialization_options': {b -> ale#Var(b, 'ruby_solargraph_options')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/sorbet.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/sorbet.vim deleted file mode 100644 index c67e20cc..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/sorbet.vim +++ /dev/null @@ -1,26 +0,0 @@ -call ale#Set('ruby_sorbet_executable', 'srb') -call ale#Set('ruby_sorbet_options', '') -call ale#Set('ruby_sorbet_enable_watchman', 0) - -function! ale_linters#ruby#sorbet#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_sorbet_executable') - let l:options = ale#Var(a:buffer, 'ruby_sorbet_options') - let l:enable_watchman = ale#Var(a:buffer, 'ruby_sorbet_enable_watchman') - - return ale#ruby#EscapeExecutable(l:executable, 'srb') - \ . ' tc' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --lsp' - \ . (l:enable_watchman ? '' : ' --disable-watchman') -endfunction - -call ale#linter#Define('ruby', { -\ 'name': 'sorbet', -\ 'aliases': ['srb'], -\ 'lsp': 'stdio', -\ 'language': 'ruby', -\ 'executable': {b -> ale#Var(b, 'ruby_sorbet_executable')}, -\ 'command': function('ale_linters#ruby#sorbet#GetCommand'), -\ 'project_root': function('ale#ruby#FindProjectRoot') -\}) - diff --git a/dotfiles/.vim/plugged/ale/ale_linters/ruby/standardrb.vim b/dotfiles/.vim/plugged/ale/ale_linters/ruby/standardrb.vim deleted file mode 100644 index 6ccfd2d6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/ruby/standardrb.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Justin Searls https://github.com/searls, ynonp - https://github.com/ynonp, Eddie Lebow https://github.com/elebow -" based on the ale rubocop linter -" Description: StandardRB - Ruby Style Guide, with linter & automatic code fixer - -call ale#Set('ruby_standardrb_executable', 'standardrb') -call ale#Set('ruby_standardrb_options', '') - -function! ale_linters#ruby#standardrb#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_standardrb_executable') - - return ale#ruby#EscapeExecutable(l:executable, 'standardrb') - \ . ' --format json --force-exclusion ' - \ . ale#Var(a:buffer, 'ruby_standardrb_options') - \ . ' --stdin %s' -endfunction - -" standardrb is based on RuboCop so the callback is the same -call ale#linter#Define('ruby', { -\ 'name': 'standardrb', -\ 'executable': {b -> ale#Var(b, 'ruby_standardrb_executable')}, -\ 'command': function('ale_linters#ruby#standardrb#GetCommand'), -\ 'callback': 'ale#ruby#HandleRubocopOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rust/analyzer.vim b/dotfiles/.vim/plugged/ale/ale_linters/rust/analyzer.vim deleted file mode 100644 index 3ead3871..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rust/analyzer.vim +++ /dev/null @@ -1,36 +0,0 @@ -" Author: Jon Gjengset -" Description: The next generation language server for Rust - -call ale#Set('rust_analyzer_executable', 'rust-analyzer') -call ale#Set('rust_analyzer_config', {}) - -function! ale_linters#rust#analyzer#GetCommand(buffer) abort - return '%e' -endfunction - -function! ale_linters#rust#analyzer#GetProjectRoot(buffer) abort - " Try to find nearest Cargo.toml for cargo projects - let l:cargo_file = ale#path#FindNearestFile(a:buffer, 'Cargo.toml') - - if !empty(l:cargo_file) - return fnamemodify(l:cargo_file, ':h') - endif - - " Try to find nearest rust-project.json for non-cargo projects - let l:rust_project = ale#path#FindNearestFile(a:buffer, 'rust-project.json') - - if !empty(l:rust_project) - return fnamemodify(l:rust_project, ':h') - endif - - return '' -endfunction - -call ale#linter#Define('rust', { -\ 'name': 'analyzer', -\ 'lsp': 'stdio', -\ 'initialization_options': {b -> ale#Var(b, 'rust_analyzer_config')}, -\ 'executable': {b -> ale#Var(b, 'rust_analyzer_executable')}, -\ 'command': function('ale_linters#rust#analyzer#GetCommand'), -\ 'project_root': function('ale_linters#rust#analyzer#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rust/cargo.vim b/dotfiles/.vim/plugged/ale/ale_linters/rust/cargo.vim deleted file mode 100644 index 37fd10a8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rust/cargo.vim +++ /dev/null @@ -1,110 +0,0 @@ -" Author: Daniel Schemala , -" Ivan Petkov -" Description: rustc invoked by cargo for rust files - -call ale#Set('rust_cargo_use_check', 1) -call ale#Set('rust_cargo_check_all_targets', 0) -call ale#Set('rust_cargo_check_examples', 0) -call ale#Set('rust_cargo_check_tests', 0) -call ale#Set('rust_cargo_avoid_whole_workspace', 1) -call ale#Set('rust_cargo_default_feature_behavior', 'default') -call ale#Set('rust_cargo_include_features', '') -call ale#Set('rust_cargo_use_clippy', 0) -call ale#Set('rust_cargo_clippy_options', '') -call ale#Set('rust_cargo_target_dir', '') - -function! ale_linters#rust#cargo#GetCargoExecutable(bufnr) abort - if ale#path#FindNearestFile(a:bufnr, 'Cargo.toml') isnot# '' - return 'cargo' - else - " if there is no Cargo.toml file, we don't use cargo even if it exists, - " so we return '', because executable('') apparently always fails - return '' - endif -endfunction - -function! ale_linters#rust#cargo#GetCwd(buffer) abort - if ale#Var(a:buffer, 'rust_cargo_avoid_whole_workspace') - let l:nearest_cargo = ale#path#FindNearestFile(a:buffer, 'Cargo.toml') - let l:nearest_cargo_dir = fnamemodify(l:nearest_cargo, ':h') - - if l:nearest_cargo_dir isnot# '.' - return l:nearest_cargo_dir - endif - endif - - return '' -endfunction - -function! ale_linters#rust#cargo#GetCommand(buffer, version) abort - let l:use_check = ale#Var(a:buffer, 'rust_cargo_use_check') - \ && ale#semver#GTE(a:version, [0, 17, 0]) - let l:use_all_targets = ale#Var(a:buffer, 'rust_cargo_check_all_targets') - \ && ale#semver#GTE(a:version, [0, 22, 0]) - let l:use_examples = ale#Var(a:buffer, 'rust_cargo_check_examples') - \ && ale#semver#GTE(a:version, [0, 22, 0]) - let l:use_tests = ale#Var(a:buffer, 'rust_cargo_check_tests') - \ && ale#semver#GTE(a:version, [0, 22, 0]) - let l:target_dir = ale#Var(a:buffer, 'rust_cargo_target_dir') - let l:use_target_dir = !empty(l:target_dir) - \ && ale#semver#GTE(a:version, [0, 17, 0]) - - let l:include_features = ale#Var(a:buffer, 'rust_cargo_include_features') - - if !empty(l:include_features) - let l:include_features = ' --features ' . ale#Escape(l:include_features) - endif - - let l:default_feature_behavior = ale#Var(a:buffer, 'rust_cargo_default_feature_behavior') - - if l:default_feature_behavior is# 'all' - let l:include_features = '' - let l:default_feature = ' --all-features' - elseif l:default_feature_behavior is# 'none' - let l:default_feature = ' --no-default-features' - else - let l:default_feature = '' - endif - - let l:subcommand = l:use_check ? 'check' : 'build' - let l:clippy_options = '' - - if ale#Var(a:buffer, 'rust_cargo_use_clippy') - let l:subcommand = 'clippy' - let l:clippy_options = ale#Var(a:buffer, 'rust_cargo_clippy_options') - - if l:clippy_options =~# '^-- ' - let l:clippy_options = join(split(l:clippy_options, '-- ')) - endif - - if l:clippy_options isnot# '' - let l:clippy_options = ' -- ' . l:clippy_options - endif - endif - - return 'cargo ' - \ . l:subcommand - \ . (l:use_all_targets ? ' --all-targets' : '') - \ . (l:use_examples ? ' --examples' : '') - \ . (l:use_tests ? ' --tests' : '') - \ . (l:use_target_dir ? (' --target-dir ' . ale#Escape(l:target_dir)) : '') - \ . ' --frozen --message-format=json -q' - \ . l:default_feature - \ . l:include_features - \ . l:clippy_options -endfunction - -call ale#linter#Define('rust', { -\ 'name': 'cargo', -\ 'executable': function('ale_linters#rust#cargo#GetCargoExecutable'), -\ 'cwd': function('ale_linters#rust#cargo#GetCwd'), -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale_linters#rust#cargo#GetCargoExecutable(buffer), -\ '%e --version', -\ function('ale_linters#rust#cargo#GetCommand'), -\ )}, -\ 'callback': 'ale#handlers#rust#HandleRustErrors', -\ 'output_stream': 'both', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rust/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/rust/cspell.vim deleted file mode 100644 index d2523c7d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rust/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Rust files. - -call ale#handlers#cspell#DefineLinter('rust') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rust/rls.vim b/dotfiles/.vim/plugged/ale/ale_linters/rust/rls.vim deleted file mode 100644 index 111d7558..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rust/rls.vim +++ /dev/null @@ -1,27 +0,0 @@ -" Author: w0rp -" Description: A language server for Rust - -call ale#Set('rust_rls_executable', 'rls') -call ale#Set('rust_rls_toolchain', '') -call ale#Set('rust_rls_config', {}) - -function! ale_linters#rust#rls#GetCommand(buffer) abort - let l:toolchain = ale#Var(a:buffer, 'rust_rls_toolchain') - - return '%e' . (!empty(l:toolchain) ? ' +' . ale#Escape(l:toolchain) : '') -endfunction - -function! ale_linters#rust#rls#GetProjectRoot(buffer) abort - let l:cargo_file = ale#path#FindNearestFile(a:buffer, 'Cargo.toml') - - return !empty(l:cargo_file) ? fnamemodify(l:cargo_file, ':h') : '' -endfunction - -call ale#linter#Define('rust', { -\ 'name': 'rls', -\ 'lsp': 'stdio', -\ 'lsp_config': {b -> ale#Var(b, 'rust_rls_config')}, -\ 'executable': {b -> ale#Var(b, 'rust_rls_executable')}, -\ 'command': function('ale_linters#rust#rls#GetCommand'), -\ 'project_root': function('ale_linters#rust#rls#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/rust/rustc.vim b/dotfiles/.vim/plugged/ale/ale_linters/rust/rustc.vim deleted file mode 100644 index bc6431ba..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/rust/rustc.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Daniel Schemala -" Description: rustc for rust files - -call ale#Set('rust_rustc_options', '--emit=mir -o /dev/null') - -function! ale_linters#rust#rustc#RustcCommand(buffer) abort - " Try to guess the library search path. If the project is managed by cargo, - " it's usually /target/debug/deps/ or - " /target/release/deps/ - let l:cargo_file = ale#path#FindNearestFile(a:buffer, 'Cargo.toml') - - if l:cargo_file isnot# '' - let l:root = fnamemodify(l:cargo_file, ':h') - let l:dependencies = ' -L ' . ale#Escape(ale#path#GetAbsPath(l:root, 'target/debug/deps')) - \ . ' -L ' . ale#Escape(ale#path#GetAbsPath(l:root, 'target/release/deps')) - else - let l:dependencies = '' - endif - - let l:options = ale#Var(a:buffer, 'rust_rustc_options') - - return 'rustc --error-format=json' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . l:dependencies . ' -' -endfunction - -call ale#linter#Define('rust', { -\ 'name': 'rustc', -\ 'executable': 'rustc', -\ 'command': function('ale_linters#rust#rustc#RustcCommand'), -\ 'callback': 'ale#handlers#rust#HandleRustErrors', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/salt/salt_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/salt/salt_lint.vim deleted file mode 100644 index 47f66d83..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/salt/salt_lint.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Benjamin BINIER -" Description: salt-lint, saltstack linter - -call ale#Set('salt_salt_lint_executable', 'salt-lint') -call ale#Set('salt_salt_lint_options', '') - -function! ale_linters#salt#salt_lint#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'salt_salt_lint_options')) - \ . ' --json' -endfunction - -function! ale_linters#salt#salt_lint#Handle(buffer, lines) abort - let l:output = [] - - for l:error in ale#util#FuzzyJSONDecode(a:lines, []) - call add(l:output, { - \ 'lnum': l:error.linenumber + 0, - \ 'code': l:error.id + 0, - \ 'text': l:error.message, - \ 'type': l:error.severity is# 'HIGH' ? 'E' : 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('salt', { -\ 'name': 'salt_lint', -\ 'aliases': ['salt-lint'], -\ 'executable': {b -> ale#Var(b, 'salt_salt_lint_executable')}, -\ 'command': function('ale_linters#salt#salt_lint#GetCommand'), -\ 'callback': 'ale_linters#salt#salt_lint#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sass/sasslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/sass/sasslint.vim deleted file mode 100644 index ff396e68..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sass/sasslint.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: sQVe - https://github.com/sQVe - -call ale#Set('sass_sasslint_executable', 'sass-lint') -call ale#Set('sass_sasslint_options', '') -call ale#Set('sass_sasslint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#sass#sasslint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'sass_sasslint', [ - \ 'node_modules/sass-lint/bin/sass-lint.js', - \ 'node_modules/.bin/sass-lint', - \]) -endfunction - -function! ale_linters#sass#sasslint#GetCommand(buffer) abort - let l:executable = ale_linters#sass#sasslint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'sass_sasslint_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -v -q -f compact %t' -endfunction - -call ale#linter#Define('sass', { -\ 'name': 'sasslint', -\ 'executable': function('ale_linters#sass#sasslint#GetExecutable'), -\ 'command': function('ale_linters#sass#sasslint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleCSSLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sass/stylelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/sass/stylelint.vim deleted file mode 100644 index 22abef9b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sass/stylelint.vim +++ /dev/null @@ -1,13 +0,0 @@ -" Author: diartyz - -call ale#Set('sass_stylelint_executable', 'stylelint') -call ale#Set('sass_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) - -call ale#linter#Define('sass', { -\ 'name': 'stylelint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'sass_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': '%e --stdin-filename %s', -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scala/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/scala/cspell.vim deleted file mode 100644 index fa09d420..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scala/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Scala files. - -call ale#handlers#cspell#DefineLinter('scala') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scala/fsc.vim b/dotfiles/.vim/plugged/ale/ale_linters/scala/fsc.vim deleted file mode 100644 index 94135235..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scala/fsc.vim +++ /dev/null @@ -1,14 +0,0 @@ -" Author: Nils Leuzinger - https://github.com/PawkyPenguin -" Description: Basic scala support using fsc - -function! s:IsSbt(buffer) abort - return index(split(getbufvar(a:buffer, '&filetype'), '\.'), 'sbt') >= 0 -endfunction - -call ale#linter#Define('scala', { -\ 'name': 'fsc', -\ 'executable': {buf -> s:IsSbt(buf) ? '' : 'fsc'}, -\ 'command': '%e -Ystop-after:parser %t', -\ 'callback': 'ale#handlers#scala#HandleScalacLintFormat', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scala/metals.vim b/dotfiles/.vim/plugged/ale/ale_linters/scala/metals.vim deleted file mode 100644 index da9e855d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scala/metals.vim +++ /dev/null @@ -1,50 +0,0 @@ -" Author: Jeffrey Lau - https://github.com/zoonfafer -" Description: Metals Language Server for Scala https://scalameta.org/metals/ - -call ale#Set('scala_metals_executable', 'metals-vim') -call ale#Set('scala_metals_project_root', '') - -function! ale_linters#scala#metals#GetProjectRoot(buffer) abort - let l:project_root = ale#Var(a:buffer, 'scala_metals_project_root') - - if !empty(l:project_root) - return l:project_root - endif - - let l:potential_roots = [ - \ 'build.sc', - \ 'build.sbt', - \ '.bloop', - \ '.metals', - \] - - for l:root in l:potential_roots - let l:project_root = ale#path#ResolveLocalPath( - \ a:buffer, - \ l:root, - \ '' - \) - - if !empty(l:project_root) - return fnamemodify( - \ l:project_root, - \ ':h', - \) - endif - endfor - - return '' -endfunction - -function! ale_linters#scala#metals#GetCommand(buffer) abort - return '%e' . ale#Pad('stdio') -endfunction - -call ale#linter#Define('scala', { -\ 'name': 'metals', -\ 'lsp': 'stdio', -\ 'language': 'scala', -\ 'executable': {b -> ale#Var(b, 'scala_metals_executable')}, -\ 'command': function('ale_linters#scala#metals#GetCommand'), -\ 'project_root': function('ale_linters#scala#metals#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scala/sbtserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/scala/sbtserver.vim deleted file mode 100644 index d4f137c2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scala/sbtserver.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Author: ophirr33 -" Description: TCP lsp client for sbt Server - -call ale#Set('scala_sbtserver_address', '127.0.0.1:4273') -call ale#Set('scala_sbtserver_project_root', '') - -function! ale_linters#scala#sbtserver#GetProjectRoot(buffer) abort - let l:project_root = ale#Var(a:buffer, 'scala_sbtserver_project_root') - - if l:project_root is? '' - let l:project_root = ale#path#FindNearestFile(a:buffer, 'build.sbt') - - return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' - endif - - return l:project_root -endfunction - -function! ale_linters#scala#sbtserver#GetAddress(buffer) abort - let l:address = ale#Var(a:buffer, 'scala_sbtserver_address') - - return l:address -endfunction - -call ale#linter#Define('scala', { -\ 'name': 'sbtserver', -\ 'lsp': 'socket', -\ 'address': function('ale_linters#scala#sbtserver#GetAddress'), -\ 'language': 'scala', -\ 'project_root': function('ale_linters#scala#sbtserver#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scala/scalac.vim b/dotfiles/.vim/plugged/ale/ale_linters/scala/scalac.vim deleted file mode 100644 index 1dd579b4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scala/scalac.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Zoltan Kalmar - https://github.com/kalmiz, -" w0rp -" Description: Basic scala support using scalac - -function! s:IsSbt(buffer) abort - return index(split(getbufvar(a:buffer, '&filetype'), '\.'), 'sbt') >= 0 -endfunction - -call ale#linter#Define('scala', { -\ 'name': 'scalac', -\ 'executable': {buf -> s:IsSbt(buf) ? '' : 'scalac'}, -\ 'command': '%e -Ystop-after:parser %t', -\ 'callback': 'ale#handlers#scala#HandleScalacLintFormat', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scala/scalastyle.vim b/dotfiles/.vim/plugged/ale/ale_linters/scala/scalastyle.vim deleted file mode 100644 index 6e9e4c13..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scala/scalastyle.vim +++ /dev/null @@ -1,86 +0,0 @@ -" Author: Kevin Kays - https://github.com/okkays -" Description: Support for the scalastyle checker. - -call ale#Set('scala_scalastyle_options', '') -" TODO: Remove support for the old option name in ALE 3.0. -call ale#Set('scala_scalastyle_config', -\ get(g:, 'ale_scalastyle_config_loc', '') -\) - -function! ale_linters#scala#scalastyle#Handle(buffer, lines) abort - " Look for help output from scalastyle first, which indicates that no - " configuration file was found. - for l:line in a:lines[:10] - if l:line =~# '-c, --config' - return [{ - \ 'lnum': 1, - \ 'text': '(See :help ale-scala-scalastyle)' - \ . ' No scalastyle configuration file was found.', - \}] - endif - endfor - - " Matches patterns like the following: - " - " warning file=/home/blurble/Doop.scala message=Missing or badly formed ScalaDoc: Extra @param foobles line=190 - let l:patterns = [ - \ '^\(.\+\) .\+ message=\(.\+\) line=\(\d\+\)$', - \ '^\(.\+\) .\+ message=\(.\+\) line=\(\d\+\) column=\(\d\+\)$', - \] - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:patterns) - let l:args = { - \ 'lnum': l:match[3] + 0, - \ 'type': l:match[1] =~? 'error' ? 'E' : 'W', - \ 'text': l:match[2] - \} - - if !empty(l:match[4]) - let l:args['col'] = l:match[4] + 1 - endif - - call add(l:output, l:args) - endfor - - return l:output -endfunction - -function! ale_linters#scala#scalastyle#GetCommand(buffer) abort - " Search for scalastyle config in parent directories. - let l:scalastyle_config = '' - let l:potential_configs = [ - \ 'scalastyle_config.xml', - \ 'scalastyle-config.xml' - \] - - for l:config in l:potential_configs - let l:scalastyle_config = ale#path#ResolveLocalPath( - \ a:buffer, - \ l:config, - \ '' - \) - - if !empty(l:scalastyle_config) - break - endif - endfor - - " If all else fails, try the global config. - if empty(l:scalastyle_config) - let l:scalastyle_config = ale#Var(a:buffer, 'scala_scalastyle_config') - endif - - return 'scalastyle' - \ . (!empty(l:scalastyle_config) ? ' --config ' . ale#Escape(l:scalastyle_config) : '') - \ . ale#Pad(ale#Var(a:buffer, 'scala_scalastyle_options')) - \ . ' %t' -endfunction - -call ale#linter#Define('scala', { -\ 'name': 'scalastyle', -\ 'executable': 'scalastyle', -\ 'output_stream': 'stdout', -\ 'command': function('ale_linters#scala#scalastyle#GetCommand'), -\ 'callback': 'ale_linters#scala#scalastyle#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scss/sasslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/scss/sasslint.vim deleted file mode 100644 index 99027051..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scss/sasslint.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: sQVe - https://github.com/sQVe - -call ale#Set('scss_sasslint_executable', 'sass-lint') -call ale#Set('scss_sasslint_options', '') -call ale#Set('scss_sasslint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#scss#sasslint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'scss_sasslint', [ - \ 'node_modules/sass-lint/bin/sass-lint.js', - \ 'node_modules/.bin/sass-lint', - \]) -endfunction - -function! ale_linters#scss#sasslint#GetCommand(buffer) abort - let l:executable = ale_linters#scss#sasslint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'scss_sasslint_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -v -q -f compact %t' -endfunction - -call ale#linter#Define('scss', { -\ 'name': 'sasslint', -\ 'executable': function('ale_linters#scss#sasslint#GetExecutable'), -\ 'command': function('ale_linters#scss#sasslint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleCSSLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scss/scsslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/scss/scsslint.vim deleted file mode 100644 index 7ce57241..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scss/scsslint.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Author: w0rp -" Description: This file add scsslint support for SCSS support - -function! ale_linters#scss#scsslint#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " test.scss:2:1 [W] Indentation: Line should be indented 2 spaces, but was indented 4 spaces - let l:pattern = '^.*:\(\d\+\):\(\d*\) \[\([^\]]\+\)\] \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - \&& l:match[4] =~# '^TrailingWhitespace' - " Skip trailing whitespace warnings if that option is off. - continue - endif - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[4], - \ 'type': l:match[3] is# 'E' ? 'E' : 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('scss', { -\ 'name': 'scsslint', -\ 'executable': 'scss-lint', -\ 'command': 'scss-lint --stdin-file-path=%s', -\ 'callback': 'ale_linters#scss#scsslint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/scss/stylelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/scss/stylelint.vim deleted file mode 100644 index fea4ea8f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/scss/stylelint.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Author: diartyz - -call ale#Set('scss_stylelint_executable', 'stylelint') -call ale#Set('scss_stylelint_options', '') -call ale#Set('scss_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#scss#stylelint#GetCommand(buffer) abort - return '%e ' . ale#Pad(ale#Var(a:buffer, 'scss_stylelint_options')) - \ . ' --stdin-filename %s' -endfunction - -call ale#linter#Define('scss', { -\ 'name': 'stylelint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'scss_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#scss#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sh/bashate.vim b/dotfiles/.vim/plugged/ale/ale_linters/sh/bashate.vim deleted file mode 100644 index 3cd84245..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sh/bashate.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: hsanson -" Description: Lints sh files using bashate -" URL: https://github.com/openstack/bashate - -call ale#Set('sh_bashate_executable', 'bashate') -call ale#Set('sh_bashate_options', '') - -function! ale_linters#sh#bashate#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'sh_bashate_executable') -endfunction - -function! ale_linters#sh#bashate#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'sh_bashate_options') - let l:executable = ale_linters#sh#bashate#GetExecutable(a:buffer) - - return ale#Escape(l:executable) . ' ' . l:options . ' ' . '%t' -endfunction - -function! ale_linters#sh#bashate#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " /path/to/script/file:694:1: E003 Indent not multiple of 4 - let l:pattern = ':\(\d\+\):\(\d\+\): \(.*\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': str2nr(l:match[1]), - \ 'col': str2nr(l:match[2]), - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('sh', { -\ 'name': 'bashate', -\ 'output_stream': 'stdout', -\ 'executable': function('ale_linters#sh#bashate#GetExecutable'), -\ 'command': function('ale_linters#sh#bashate#GetCommand'), -\ 'callback': 'ale_linters#sh#bashate#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sh/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/sh/cspell.vim deleted file mode 100644 index e3c5a6f0..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sh/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for shell scripts. - -call ale#handlers#cspell#DefineLinter('sh') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sh/language_server.vim b/dotfiles/.vim/plugged/ale/ale_linters/sh/language_server.vim deleted file mode 100644 index c6781584..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sh/language_server.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Author: Christian Höltje (https://docwhat.org/) -" Description: BASH Language server integration for ALE -scriptencoding utf-8 - -call ale#Set('sh_language_server_executable', 'bash-language-server') -call ale#Set('sh_language_server_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#sh#language_server#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'sh_language_server', [ - \ 'node_modules/.bin/bash-language-server', - \]) -endfunction - -function! ale_linters#sh#language_server#GetCommand(buffer) abort - let l:exe = ale#Escape(ale_linters#sh#language_server#GetExecutable(a:buffer)) - - return l:exe . ' start' -endfunction - -function! ale_linters#sh#language_server#GetProjectRoot(buffer) abort - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -call ale#linter#Define('sh', { -\ 'name': 'language_server', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#sh#language_server#GetExecutable'), -\ 'command': function('ale_linters#sh#language_server#GetCommand'), -\ 'project_root': function('ale_linters#sh#language_server#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sh/shell.vim b/dotfiles/.vim/plugged/ale/ale_linters/sh/shell.vim deleted file mode 100644 index 73ab3608..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sh/shell.vim +++ /dev/null @@ -1,59 +0,0 @@ -" Author: w0rp -" Description: Lints shell files by invoking the shell with -n - -" Backwards compatibility -if exists('g:ale_linters_sh_shell_default_shell') - let g:ale_sh_shell_default_shell = g:ale_linters_sh_shell_default_shell -endif - -" This option can be changed to change the default shell when the shell -" cannot be taken from the hashbang line. -if !exists('g:ale_sh_shell_default_shell') - let g:ale_sh_shell_default_shell = fnamemodify($SHELL, ':t') - - if g:ale_sh_shell_default_shell is# '' || g:ale_sh_shell_default_shell is# 'fish' - let g:ale_sh_shell_default_shell = 'bash' - endif -endif - -function! ale_linters#sh#shell#GetExecutable(buffer) abort - let l:shell_type = ale#handlers#sh#GetShellType(a:buffer) - - if !empty(l:shell_type) - return l:shell_type - endif - - return ale#Var(a:buffer, 'sh_shell_default_shell') -endfunction - -function! ale_linters#sh#shell#GetCommand(buffer) abort - return ale_linters#sh#shell#GetExecutable(a:buffer) . ' -n %t' -endfunction - -function! ale_linters#sh#shell#Handle(buffer, lines) abort - " Matches patterns line the following: - " - " bash: line 13: syntax error near unexpected token `d' - " bash:行0: 未预期的符号“done”附近有语法错误 - " bash: 列 90: 尋找匹配的「"」時遇到了未預期的檔案結束符 - " sh: 11: Syntax error: "(" unexpected - let l:pattern = '\v([^:]+:\D*)(\d+): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': str2nr(l:match[2]), - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('sh', { -\ 'name': 'shell', -\ 'output_stream': 'stderr', -\ 'executable': function('ale_linters#sh#shell#GetExecutable'), -\ 'command': function('ale_linters#sh#shell#GetCommand'), -\ 'callback': 'ale_linters#sh#shell#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sh/shellcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/sh/shellcheck.vim deleted file mode 100644 index d9945126..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sh/shellcheck.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: w0rp -" Description: shellcheck linter for shell scripts. - -call ale#handlers#shellcheck#DefineLinter('sh') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/slim/slimlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/slim/slimlint.vim deleted file mode 100644 index 1b365e25..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/slim/slimlint.vim +++ /dev/null @@ -1,55 +0,0 @@ -" Author: Markus Doits - https://github.com/doits -" Description: slim-lint for Slim files - -function! ale_linters#slim#slimlint#GetCommand(buffer) abort - let l:command = 'slim-lint %t' - - let l:rubocop_config = ale#path#FindNearestFile(a:buffer, '.rubocop.yml') - - " Set SLIM_LINT_RUBOCOP_CONF variable as it is needed for slim-lint to - " pick up the rubocop config. - " - " See https://github.com/sds/slim-lint/blob/master/lib/slim_lint/linter/README.md#rubocop - if !empty(l:rubocop_config) - if has('win32') - let l:command = 'set SLIM_LINT_RUBOCOP_CONF=' . ale#Escape(l:rubocop_config) . ' && ' . l:command - else - let l:command = 'SLIM_LINT_RUBOCOP_CONF=' . ale#Escape(l:rubocop_config) . ' ' . l:command - endif - endif - - return l:command -endfunction - -function! ale_linters#slim#slimlint#Handle(buffer, lines) abort - " Matches patterns like the following: - " :5 [W] LineLength: Line is too long. [150/120] - let l:pattern = '\v^.*:(\d+) \[([EW])\] (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'type': l:match[2], - \ 'text': l:match[3] - \} - - let l:code_match = matchlist(l:item.text, '\v^([^:]+): (.+)$') - - if !empty(l:code_match) - let l:item.code = l:code_match[1] - let l:item.text = l:code_match[2] - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('slim', { -\ 'name': 'slimlint', -\ 'executable': 'slim-lint', -\ 'command': function('ale_linters#slim#slimlint#GetCommand'), -\ 'callback': 'ale_linters#slim#slimlint#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj.vim b/dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj.vim deleted file mode 100644 index 852ea170..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Paulo Alem , Jake Zimmerman -" Description: Single-file SML checking with SML/NJ compiler - -call ale#linter#Define('sml', { -\ 'name': 'smlnj', -\ 'executable': function('ale#handlers#sml#GetExecutableSmlnjFile'), -\ 'command': 'sml', -\ 'callback': 'ale#handlers#sml#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj_cm.vim b/dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj_cm.vim deleted file mode 100644 index 9ad24af4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sml/smlnj_cm.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Jake Zimmerman -" Description: SML checking with SML/NJ Compilation Manager - -function! ale_linters#sml#smlnj_cm#GetCommand(buffer) abort - let l:cmfile = ale#handlers#sml#GetCmFile(a:buffer) - - return 'sml -m ' . l:cmfile . ' < /dev/null' -endfunction - -" Using CM requires that we set "lint_file: 1", since it reads the files -" from the disk itself. -call ale#linter#Define('sml', { -\ 'name': 'smlnj_cm', -\ 'aliases': ['smlnj-cm'], -\ 'executable': function('ale#handlers#sml#GetExecutableSmlnjCm'), -\ 'lint_file': 1, -\ 'command': function('ale_linters#sml#smlnj_cm#GetCommand'), -\ 'callback': 'ale#handlers#sml#Handle', -\}) - -" vim:ts=4:sts=4:sw=4 diff --git a/dotfiles/.vim/plugged/ale/ale_linters/solidity/solc.vim b/dotfiles/.vim/plugged/ale/ale_linters/solidity/solc.vim deleted file mode 100644 index 28977083..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/solidity/solc.vim +++ /dev/null @@ -1,53 +0,0 @@ -" Author: Karl Bartel - http://karl.berlin/ -" Description: Report solc compiler errors in Solidity code - -call ale#Set('solidity_solc_executable', 'solc') -call ale#Set('solidity_solc_options', '') - -function! ale_linters#solidity#solc#Handle(buffer, lines) abort - " Matches patterns like the following: - " Error: Expected ';' but got '(' - " --> /path/to/file/file.sol:1:10:) - let l:pattern = '\v(Error|Warning): (.*)$' - let l:line_and_column_pattern = '\v\.sol:(\d+):(\d+):' - let l:output = [] - - for l:line in a:lines - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) == 0 - let l:match = matchlist(l:line, l:line_and_column_pattern) - - if len(l:match) > 0 - let l:index = len(l:output) - 1 - let l:output[l:index]['lnum'] = l:match[1] + 0 - let l:output[l:index]['col'] = l:match[2] + 0 - endif - else - let l:isError = l:match[1] is? 'Error' - - call add(l:output, { - \ 'lnum': 0, - \ 'col': 0, - \ 'text': l:match[2], - \ 'type': l:isError ? 'E' : 'W', - \}) - endif - endfor - - return l:output -endfunction - -function! ale_linters#solidity#solc#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'solidity_solc_executable') - - return l:executable . ale#Pad(ale#Var(a:buffer, 'solidity_solc_options')) . ' %s' -endfunction - -call ale#linter#Define('solidity', { -\ 'name': 'solc', -\ 'executable': {b -> ale#Var(b, 'solidity_solc_executable')}, -\ 'command': function('ale_linters#solidity#solc#GetCommand'), -\ 'callback': 'ale_linters#solidity#solc#Handle', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/solidity/solhint.vim b/dotfiles/.vim/plugged/ale/ale_linters/solidity/solhint.vim deleted file mode 100644 index 505bd5bb..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/solidity/solhint.vim +++ /dev/null @@ -1,12 +0,0 @@ -" Authors: Franco Victorio - https://github.com/fvictorio, Henrique Barcelos -" https://github.com/hbarcelos -" Description: Report errors in Solidity code with solhint - -call ale#linter#Define('solidity', { -\ 'name': 'solhint', -\ 'output_stream': 'both', -\ 'executable': function('ale#handlers#solhint#GetExecutable'), -\ 'cwd': function('ale#handlers#solhint#GetCwd'), -\ 'command': function('ale#handlers#solhint#GetCommand'), -\ 'callback': 'ale#handlers#solhint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/solidity/solium.vim b/dotfiles/.vim/plugged/ale/ale_linters/solidity/solium.vim deleted file mode 100644 index 61ab184d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/solidity/solium.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Jeff Sutherland - https://github.com/jdsutherland -" Description: Report errors in Solidity code with solium - -call ale#linter#Define('solidity', { -\ 'name': 'solium', -\ 'executable': 'solium', -\ 'command': 'solium --reporter gcc --file %t', -\ 'callback': 'ale#handlers#gcc#HandleGCCFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/spec/rpmlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/spec/rpmlint.vim deleted file mode 100644 index 5594e3b8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/spec/rpmlint.vim +++ /dev/null @@ -1,90 +0,0 @@ -" Author: Jason Tibbitts -" Description: Adds support for checking RPM spec files with rpmlint - -" rpmlint will produce varions types of output: -" -" Lines like the following are output when the file is simply not able to be -" parsed by rpmspec -P: -" apcupsd.spec: E: specfile-error warning: bogus date in %changelog: Mon Oct 1 2005 - Foo -" apcupsd.spec: E: specfile-error error: %changelog not in descending chronological order -" They do not contain a line number, and there's not a whole lot that can be -" done to locate them besides grep for them. rpmlint is just passing the -" output from rpm along with the filename, an error indicator, and an error -" type. -" -" Lines like the following: -" cyrus-imapd.spec:23: W: macro-in-comment %version -" cyrus-imapd.spec:18: E: hardcoded-library-path in %_prefix/lib/%name -" indicate warnings and errors, respectively. No column numbers are provided -" -" Lines like: -" apcupsd.spec: I: checking -" apcupsd.spec: I: checking-url https://downloads.sourceforge.net/apcupsd/apcupsd-3.14.14.tar.gz (timeout 10 seconds) -" are merely informational and are only output when -v is passed. But they -" may be useful in a log to know why things are taking so long. -" -" And this is always output at the end and should just be ignored: -" 0 packages and 1 specfiles checked; 4 errors, 0 warnings. - -call ale#Set('spec_rpmlint_executable', 'rpmlint') -call ale#Set('spec_rpmlint_options', '') - -function! ale_linters#spec#rpmlint#GetCommand(buffer, version) abort - if ale#semver#GTE(a:version, [2, 0, 0]) - " The -o/--option flag was removed in version 2.0.0 - let l:version_dependent_args = '' - else - let l:version_dependent_args = ' -o "NetworkEnabled False"' - endif - - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'spec_rpmlint_options')) - \ . ' -v' - \ . l:version_dependent_args - \ . ' %t' -endfunction - -function! ale_linters#spec#rpmlint#Handle(buffer, lines) abort - " let l:pat_inform = '^.\+: I: \(.+\)' - let l:pat_errwarn = '^.\+:\(\d\+\): \([EW]\): \(.\+\)' - let l:pat_baderr = '^.\+: E: \(.\+\)' - let l:output = [] - - for l:line in a:lines - let l:match_errwarn = matchlist(l:line, l:pat_errwarn) - let l:match_baderr = matchlist(l:line, l:pat_baderr) - - if len(l:match_errwarn) > 0 - let l:text = l:match_errwarn[3] - let l:type = l:match_errwarn[2] - let l:lnum = l:match_errwarn[1] + 0 - elseif len(l:match_baderr) > 0 - let l:text = l:match_baderr[1] - let l:type = 'E' - let l:lnum = 1 - else - continue - endif - - call add(l:output, { - \ 'bufnr': a:buffer, - \ 'lnum': l:lnum, - \ 'text': l:text, - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('spec', { -\ 'name': 'rpmlint', -\ 'executable': {b -> ale#Var(b, 'spec_rpmlint_executable')}, -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale#Var(buffer, 'spec_rpmlint_executable'), -\ '%e --version', -\ function('ale_linters#spec#rpmlint#GetCommand'), -\ )}, -\ 'callback': 'ale_linters#spec#rpmlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sql/sqlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/sql/sqlint.vim deleted file mode 100644 index ca893724..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sql/sqlint.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: Adriaan Zonnenberg -" Description: sqlint for SQL files - -function! ale_linters#sql#sqlint#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " stdin:3:1:ERROR syntax error at or near "WIBBLE" - let l:pattern = '\v^[^:]+:(\d+):(\d+):(\u+) (.*)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[3][0], - \ 'text': l:match[4], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('sql', { -\ 'name': 'sqlint', -\ 'executable': 'sqlint', -\ 'command': 'sqlint', -\ 'callback': 'ale_linters#sql#sqlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sql/sqllint.vim b/dotfiles/.vim/plugged/ale/ale_linters/sql/sqllint.vim deleted file mode 100644 index 78396fe9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sql/sqllint.vim +++ /dev/null @@ -1,33 +0,0 @@ -" ale_linters/sql/sqllint.vim -" Author: Joe Reynolds -" Description: sql-lint for SQL files. -" sql-lint can be found at -" https://www.npmjs.com/package/sql-lint -" https://github.com/joereynolds/sql-lint - -function! ale_linters#sql#sqllint#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " stdin:1 [ER_NO_DB_ERROR] No database selected - let l:pattern = '\v^[^:]+:(\d+) (.*)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[3][0], - \ 'text': l:match[0], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('sql', { -\ 'name': 'sqllint', -\ 'aliases': ['sql-lint'], -\ 'executable': 'sql-lint', -\ 'command': 'sql-lint', -\ 'callback': 'ale_linters#sql#sqllint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/stylus/stylelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/stylus/stylelint.vim deleted file mode 100644 index b60e38ed..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/stylus/stylelint.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: diartyz , w0rp - -call ale#Set('stylus_stylelint_executable', 'stylelint') -call ale#Set('stylus_stylelint_options', '') -call ale#Set('stylus_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#stylus#stylelint#GetCommand(buffer) abort - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'stylus_stylelint_options')) - \ . ' --stdin-filename %s' -endfunction - -call ale#linter#Define('stylus', { -\ 'name': 'stylelint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'stylus_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#stylus#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/sugarss/stylelint.vim b/dotfiles/.vim/plugged/ale/ale_linters/sugarss/stylelint.vim deleted file mode 100644 index 879ff0ca..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/sugarss/stylelint.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: toastal -" Description: `stylelint` linter for SugarSS files - -call ale#Set('sugarss_stylelint_executable', 'stylelint') -call ale#Set('sugarss_stylelint_options', '') -call ale#Set('sugarss_stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#sugarss#stylelint#GetCommand(buffer) abort - return '%e ' . ale#Pad(ale#Var(a:buffer, 'sugarss_stylelint_options')) - \ . ' --syntax=sugarss' - \ . ' --stdin-filename %s' -endfunction - -call ale#linter#Define('sugarss', { -\ 'name': 'stylelint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'sugarss_stylelint', [ -\ 'node_modules/.bin/stylelint', -\ ])}, -\ 'command': function('ale_linters#sugarss#stylelint#GetCommand'), -\ 'callback': 'ale#handlers#css#HandleStyleLintFormat', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/svelte/svelteserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/svelte/svelteserver.vim deleted file mode 100644 index 2200b582..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/svelte/svelteserver.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Joakim Repomaa -" Description: Svelte Language Server integration for ALE - -call ale#Set('svelte_svelteserver_executable', 'svelteserver') -call ale#Set('svelte_svelteserver_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#svelte#svelteserver#GetProjectRoot(buffer) abort - let l:package_path = ale#path#FindNearestFile(a:buffer, 'package.json') - - return !empty(l:package_path) ? fnamemodify(l:package_path, ':h') : '' -endfunction - -call ale#linter#Define('svelte', { -\ 'name': 'svelteserver', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#path#FindExecutable(b, 'svelte_svelteserver', [ -\ 'node_modules/.bin/svelteserver', -\ ])}, -\ 'command': '%e --stdio', -\ 'project_root': function('ale_linters#svelte#svelteserver#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/swift/appleswiftformat.vim b/dotfiles/.vim/plugged/ale/ale_linters/swift/appleswiftformat.vim deleted file mode 100644 index 4c61764d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/swift/appleswiftformat.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Authors: Klaas Pieter Annema , bosr -" Description: Support for swift-format https://github.com/apple/swift-format - -function! ale_linters#swift#appleswiftformat#GetLinterCommand(buffer) abort - let l:command_args = ale#swift#GetAppleSwiftFormatCommand(a:buffer) . ' lint %t' - let l:config_args = ale#swift#GetAppleSwiftFormatConfigArgs(a:buffer) - - if l:config_args isnot# '' - let l:command_args = l:command_args . ' ' . l:config_args - endif - - return l:command_args -endfunction - -function! ale_linters#swift#appleswiftformat#Handle(buffer, lines) abort - " Matches the typical output of swift-format, that is lines of the following pattern: - " - " Sources/main.swift:4:21: warning: [DoNotUseSemicolons] remove ';' and move the next statement to the new line - " Sources/main.swift:3:12: warning: [Spacing] remove 1 space - let l:pattern = '\v^.*:(\d+):(\d+): (\S+): \[(\S+)\] (.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[3] is# 'error' ? 'E' : 'W', - \ 'code': l:match[4], - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('swift', { -\ 'name': 'apple-swift-format', -\ 'executable': function('ale#swift#GetAppleSwiftFormatExecutable'), -\ 'command': function('ale_linters#swift#appleswiftformat#GetLinterCommand'), -\ 'output_stream': 'stderr', -\ 'language': 'swift', -\ 'callback': 'ale_linters#swift#appleswiftformat#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/swift/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/swift/cspell.vim deleted file mode 100644 index 25451e9d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/swift/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Swift files. - -call ale#handlers#cspell#DefineLinter('swift') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/swift/sourcekitlsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/swift/sourcekitlsp.vim deleted file mode 100644 index 560893bf..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/swift/sourcekitlsp.vim +++ /dev/null @@ -1,13 +0,0 @@ -" Author: Dan Loman -" Description: Support for sourcekit-lsp https://github.com/apple/sourcekit-lsp - -call ale#Set('sourcekit_lsp_executable', 'sourcekit-lsp') - -call ale#linter#Define('swift', { -\ 'name': 'sourcekitlsp', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'sourcekit_lsp_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale#swift#FindProjectRoot'), -\ 'language': 'swift', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/swift/swiftlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/swift/swiftlint.vim deleted file mode 100644 index d08c68f6..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/swift/swiftlint.vim +++ /dev/null @@ -1,69 +0,0 @@ -" Author: David Mohundro , Gordon Fontenot -" Description: swiftlint for swift files - -call ale#Set('swift_swiftlint_executable', 'swiftlint') -call ale#Set('swift_swiftlint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#swift#swiftlint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'swift_swiftlint', [ - \ 'Pods/SwiftLint/swiftlint', - \ 'ios/Pods/SwiftLint/swiftlint', - \ 'swiftlint', - \]) -endfunction - -function! ale_linters#swift#swiftlint#GetCommand(buffer) abort - let l:executable = ale_linters#swift#swiftlint#GetExecutable(a:buffer) - let l:args = 'lint --use-stdin' - - return ale#Escape(l:executable) - \ . ' ' .l:args -endfunction - -function! ale_linters#swift#swiftlint#Handle(buffer, lines) abort - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+)?:? ([^:]+): (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': str2nr(l:match[2]), - \ 'type': l:match[4] is# 'error' ? 'E' : 'W', - \ 'text': l:match[5], - \} - - if l:match[4] is# 'error' - let l:item.type = 'E' - elseif l:match[4] is# 'note' - let l:item.type = 'I' - endif - - if !empty(l:match[3]) - let l:item.col = str2nr(l:match[3]) - endif - - " If the filename is something like , or -, then - " this is an error for the file we checked. - if l:match[1] isnot# '-' && l:match[1][0] isnot# '<' - let l:item['filename'] = l:match[1] - endif - - " Parse the code if it's there. - let l:code_match = matchlist(l:item.text, '\v^(.+) \(([^ (]+)\)$') - - if !empty(l:code_match) - let l:item.text = l:code_match[1] - let l:item.code = l:code_match[2] - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('swift', { -\ 'name': 'swiftlint', -\ 'executable': function('ale_linters#swift#swiftlint#GetExecutable'), -\ 'command': function('ale_linters#swift#swiftlint#GetCommand'), -\ 'callback': 'ale_linters#swift#swiftlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/systemd/systemd_analyze.vim b/dotfiles/.vim/plugged/ale/ale_linters/systemd/systemd_analyze.vim deleted file mode 100644 index 64eef8cf..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/systemd/systemd_analyze.vim +++ /dev/null @@ -1,18 +0,0 @@ -function! ale_linters#systemd#systemd_analyze#Handle(buffer, lines) abort - return ale#util#MapMatches(a:lines, '\v(.+):([0-9]+): (.+)', {match -> { - \ 'lnum': str2nr(match[2]), - \ 'col': 1, - \ 'type': 'W', - \ 'text': match[3], - \}}) -endfunction - -call ale#linter#Define('systemd', { -\ 'name': 'systemd_analyze', -\ 'aliases': ['systemd-analyze'], -\ 'executable': 'systemd-analyze', -\ 'command': 'SYSTEMD_LOG_COLOR=0 %e --user verify %s', -\ 'callback': 'ale_linters#systemd#systemd_analyze#Handle', -\ 'output_stream': 'both', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tcl/nagelfar.vim b/dotfiles/.vim/plugged/ale/ale_linters/tcl/nagelfar.vim deleted file mode 100644 index 5a4940e1..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tcl/nagelfar.vim +++ /dev/null @@ -1,39 +0,0 @@ -" Author: Nick James -" Description: nagelfar linter for tcl files - -call ale#Set('tcl_nagelfar_executable', 'nagelfar.tcl') -call ale#Set('tcl_nagelfar_options', '') - -function! ale_linters#tcl#nagelfar#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'tcl_nagelfar_options') - - return '%e' . ale#Pad(l:options) . ' %s' -endfunction - -function! ale_linters#tcl#nagelfar#Handle(buffer, lines) abort - " Matches patterns like the following: - " Line 5: W Found constant "bepa" which is also a variable. - " Line 13: E Wrong number of arguments (3) to "set" - " Line 93: N Close brace not aligned with line 90 (4 0) - let l:pattern = '^Line\s\+\([0-9]\+\): \([NEW]\) \(.*\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'type': l:match[2] is# 'N' ? 'W' : l:match[2], - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('tcl', { -\ 'name': 'nagelfar', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'tcl_nagelfar_executable')}, -\ 'command': function('ale_linters#tcl#nagelfar#GetCommand'), -\ 'callback': 'ale_linters#tcl#nagelfar#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/terraform/checkov.vim b/dotfiles/.vim/plugged/ale/ale_linters/terraform/checkov.vim deleted file mode 100644 index 568b46e1..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/terraform/checkov.vim +++ /dev/null @@ -1,41 +0,0 @@ -" Author: Thyme-87 -" Description: use checkov for providing warnings via ale - -call ale#Set('terraform_checkov_executable', 'checkov') -call ale#Set('terraform_checkov_options', '') - -function! ale_linters#terraform#checkov#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'terraform_checkov_executable') -endfunction - -function! ale_linters#terraform#checkov#GetCommand(buffer) abort - return '%e ' . '-f %t -o json --quiet ' . ale#Var(a:buffer, 'terraform_checkov_options') -endfunction - -function! ale_linters#terraform#checkov#Handle(buffer, lines) abort - let l:output = [] - - let l:results = get(get(ale#util#FuzzyJSONDecode(a:lines, {}), 'results', []), 'failed_checks', []) - - for l:violation in l:results - call add(l:output, { - \ 'filename': l:violation['file_path'], - \ 'lnum': l:violation['file_line_range'][0], - \ 'end_lnum': l:violation['file_line_range'][1], - \ 'text': l:violation['check_name'] . ' [' . l:violation['check_id'] . ']', - \ 'detail': l:violation['check_id'] . ': ' . l:violation['check_name'] . "\n" . - \ 'For more information, see: '. l:violation['guideline'], - \ 'type': 'W', - \ }) - endfor - - return l:output -endfunction - -call ale#linter#Define('terraform', { -\ 'name': 'checkov', -\ 'output_stream': 'stdout', -\ 'executable': function('ale_linters#terraform#checkov#GetExecutable'), -\ 'command': function('ale_linters#terraform#checkov#GetCommand'), -\ 'callback': 'ale_linters#terraform#checkov#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform.vim b/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform.vim deleted file mode 100644 index 1beb8501..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform.vim +++ /dev/null @@ -1,69 +0,0 @@ -" Author: Keith Maxwell -" Description: terraform fmt to check for errors - -call ale#Set('terraform_terraform_executable', 'terraform') - -function! ale_linters#terraform#terraform#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'terraform_terraform_executable') -endfunction - -function! ale_linters#terraform#terraform#GetCommand(buffer) abort - return ale#Escape(ale_linters#terraform#terraform#GetExecutable(a:buffer)) - \ . ' validate -no-color -json ' -endfunction - -function! ale_linters#terraform#terraform#GetType(severity) abort - if a:severity is? 'warning' - return 'W' - endif - - return 'E' -endfunction - -function! ale_linters#terraform#terraform#GetDetail(error) abort - let l:detail = get(a:error, 'detail', '') - - if strlen(l:detail) > 0 - return l:detail - else - return get(a:error, 'summary', '') - endif -endfunction - -function! ale_linters#terraform#terraform#Handle(buffer, lines) abort - let l:output = [] - - let l:errors = ale#util#FuzzyJSONDecode(a:lines, {'diagnostics': []}) - let l:dir = expand('#' . a:buffer . ':p:h') - let l:file = expand('#' . a:buffer . ':p') - - for l:error in l:errors['diagnostics'] - if has_key(l:error, 'range') - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:error['range']['filename']), - \ 'lnum': l:error['range']['start']['line'], - \ 'col': l:error['range']['start']['column'], - \ 'text': ale_linters#terraform#terraform#GetDetail(l:error), - \ 'type': ale_linters#terraform#terraform#GetType(l:error['severity']), - \}) - else - call add(l:output, { - \ 'filename': l:file, - \ 'lnum': 0, - \ 'col': 0, - \ 'text': ale_linters#terraform#terraform#GetDetail(l:error), - \ 'type': ale_linters#terraform#terraform#GetType(l:error['severity']), - \}) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('terraform', { -\ 'name': 'terraform', -\ 'output_stream': 'stdout', -\ 'executable': function('ale_linters#terraform#terraform#GetExecutable'), -\ 'command': function('ale_linters#terraform#terraform#GetCommand'), -\ 'callback': 'ale_linters#terraform#terraform#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_ls.vim b/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_ls.vim deleted file mode 100644 index ab35126e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_ls.vim +++ /dev/null @@ -1,38 +0,0 @@ -" Author: Horacio Sanson -" Description: terraform-ls integration for ALE (cf. https://github.com/hashicorp/terraform-ls) - -call ale#Set('terraform_terraform_executable', 'terraform') -call ale#Set('terraform_ls_executable', 'terraform-ls') -call ale#Set('terraform_ls_options', '') - -function! ale_linters#terraform#terraform_ls#GetTerraformExecutable(buffer) abort - let l:terraform_executable = ale#Var(a:buffer, 'terraform_terraform_executable') - - if(ale#path#IsAbsolute(l:terraform_executable)) - return '-tf-exec ' . l:terraform_executable - endif - - return '' -endfunction - -function! ale_linters#terraform#terraform_ls#GetCommand(buffer) abort - return '%e' - \ . ale#Pad('serve') - \ . ale#Pad(ale_linters#terraform#terraform_ls#GetTerraformExecutable(a:buffer)) - \ . ale#Pad(ale#Var(a:buffer, 'terraform_ls_options')) -endfunction - -function! ale_linters#terraform#terraform_ls#GetProjectRoot(buffer) abort - let l:tf_dir = ale#path#FindNearestDirectory(a:buffer, '.terraform') - - return !empty(l:tf_dir) ? fnamemodify(l:tf_dir, ':h:h') : '' -endfunction - -call ale#linter#Define('terraform', { -\ 'name': 'terraform_ls', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'terraform_ls_executable')}, -\ 'command': function('ale_linters#terraform#terraform_ls#GetCommand'), -\ 'project_root': function('ale_linters#terraform#terraform_ls#GetProjectRoot'), -\ 'language': 'terraform', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_lsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_lsp.vim deleted file mode 100644 index e2408c15..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/terraform/terraform_lsp.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: OJFord -" Description: terraform-lsp integration for ALE (cf. https://github.com/juliosueiras/terraform-lsp) - -call ale#Set('terraform_langserver_executable', 'terraform-lsp') -call ale#Set('terraform_langserver_options', '') - -function! ale_linters#terraform#terraform_lsp#GetCommand(buffer) abort - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'terraform_langserver_options')) -endfunction - -function! ale_linters#terraform#terraform_lsp#GetProjectRoot(buffer) abort - let l:tf_dir = ale#path#FindNearestDirectory(a:buffer, '.terraform') - - return !empty(l:tf_dir) ? fnamemodify(l:tf_dir, ':h:h') : '' -endfunction - -call ale#linter#Define('terraform', { -\ 'name': 'terraform_lsp', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'terraform_langserver_executable')}, -\ 'command': function('ale_linters#terraform#terraform_lsp#GetCommand'), -\ 'project_root': function('ale_linters#terraform#terraform_lsp#GetProjectRoot'), -\ 'language': 'terraform', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/terraform/tflint.vim b/dotfiles/.vim/plugged/ale/ale_linters/terraform/tflint.vim deleted file mode 100644 index 86b5b74a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/terraform/tflint.vim +++ /dev/null @@ -1,105 +0,0 @@ -" Author: Nat Williams -" Description: tflint for Terraform files -" -" See: https://www.terraform.io/ -" https://github.com/wata727/tflint - -call ale#Set('terraform_tflint_options', '') -call ale#Set('terraform_tflint_executable', 'tflint') - -function! ale_linters#terraform#tflint#Handle(buffer, lines) abort - let l:output = [] - let l:pattern = '\v^(.*):(\d+),(\d+)-(\d+)?,?(\d+): (.{-1,}); (.+)$' - let l:json = ale#util#FuzzyJSONDecode(a:lines, {}) - - " This is a rough test for tflint's output format - " On versions prior to 0.11 it outputs all errors as a single level list - if type(l:json) is v:t_list - for l:error in l:json - if l:error.type is# 'ERROR' - let l:type = 'E' - elseif l:error.type is# 'NOTICE' - let l:type = 'I' - else - let l:type = 'W' - endif - - call add(l:output, { - \ 'lnum': l:error.line, - \ 'text': l:error.message, - \ 'type': l:type, - \ 'code': l:error.detector, - \}) - endfor - else - for l:error in get(l:json, 'errors', []) - for l:match in ale#util#GetMatches(l:error.message, [l:pattern]) - if l:match[4] is# '' - let l:match[4] = l:match[2] - endif - - call add(l:output, { - \ 'filename': l:match[1], - \ 'lnum': str2nr(l:match[2]), - \ 'col': str2nr(l:match[3]), - \ 'end_lnum': str2nr(l:match[4]), - \ 'end_col': str2nr(l:match[5]), - \ 'text': l:match[7], - \ 'code': l:match[6], - \ 'type': 'E', - \}) - endfor - endfor - - for l:error in get(l:json, 'issues', []) - if l:error.rule.severity is# 'ERROR' - let l:type = 'E' - elseif l:error.rule.severity is# 'NOTICE' - let l:type = 'I' - else - let l:type = 'W' - endif - - call add(l:output, { - \ 'filename': l:error.range.filename, - \ 'lnum': l:error.range.start.line, - \ 'col': l:error.range.start.column, - \ 'end_lnum': l:error.range.end.line, - \ 'end_col': l:error.range.end.column, - \ 'text': l:error.message, - \ 'code': l:error.rule.name, - \ 'type': l:type, - \}) - endfor - endif - - return l:output -endfunction - -function! ale_linters#terraform#tflint#GetCommand(buffer) abort - let l:cmd = '%e' - - let l:config_file = ale#path#FindNearestFile(a:buffer, '.tflint.hcl') - - if !empty(l:config_file) - let l:cmd .= ' --config ' . ale#Escape(l:config_file) - endif - - let l:opts = ale#Var(a:buffer, 'terraform_tflint_options') - - if !empty(l:opts) - let l:cmd .= ' ' . l:opts - endif - - let l:cmd .= ' -f json' - - return l:cmd -endfunction - -call ale#linter#Define('terraform', { -\ 'name': 'tflint', -\ 'executable': {b -> ale#Var(b, 'terraform_tflint_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#terraform#tflint#GetCommand'), -\ 'callback': 'ale_linters#terraform#tflint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/terraform/tfsec.vim b/dotfiles/.vim/plugged/ale/ale_linters/terraform/tfsec.vim deleted file mode 100644 index d29cdd13..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/terraform/tfsec.vim +++ /dev/null @@ -1,87 +0,0 @@ -" Description: tfsec for Terraform files -" -" See: https://www.terraform.io/ -" https://github.com/aquasecurity/tfsec - -call ale#Set('terraform_tfsec_options', '') -call ale#Set('terraform_tfsec_executable', 'tfsec') - -let s:separator = has('win32') ? '\' : '/' - -function! ale_linters#terraform#tfsec#Handle(buffer, lines) abort - let l:output = [] - let l:json = ale#util#FuzzyJSONDecode(a:lines, {}) - - " if there's no warning, 'result' is `null`. - if empty(get(l:json, 'results')) - return l:output - endif - - for l:result in get(l:json, 'results', []) - if l:result.severity is# 'LOW' - let l:type = 'I' - elseif l:result.severity is# 'CRITICAL' - let l:type = 'E' - else - let l:type = 'W' - endif - - call add(l:output, { - \ 'filename': l:result.location.filename, - \ 'lnum': l:result.location.start_line, - \ 'end_lnum': l:result.location.end_line, - \ 'text': l:result.description, - \ 'code': l:result.long_id, - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction - -" Construct command arguments to tfsec with `terraform_tfsec_options`. -function! ale_linters#terraform#tfsec#GetCommand(buffer) abort - let l:cmd = '%e' - - let l:config = ale_linters#terraform#tfsec#FindConfig(a:buffer) - - if !empty(l:config) - let l:cmd .= ' --config-file ' . l:config - endif - - let l:opts = ale#Var(a:buffer, 'terraform_tfsec_options') - - if !empty(l:opts) - let l:cmd .= ' ' . l:opts - endif - - let l:cmd .= ' --format json' - - return l:cmd -endfunction - -" Find the nearest configuration file of tfsec. -function! ale_linters#terraform#tfsec#FindConfig(buffer) abort - let l:config_dir = ale#path#FindNearestDirectory(a:buffer, '.tfsec') - - if !empty(l:config_dir) - " https://aquasecurity.github.io/tfsec/v1.28.0/guides/configuration/config/ - for l:basename in ['config.yml', 'config.json'] - let l:config = ale#path#Simplify(join([l:config_dir, l:basename], s:separator)) - - if filereadable(l:config) - return ale#Escape(l:config) - endif - endfor - endif - - return '' -endfunction - -call ale#linter#Define('terraform', { -\ 'name': 'tfsec', -\ 'executable': {b -> ale#Var(b, 'terraform_tfsec_executable')}, -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#terraform#tfsec#GetCommand'), -\ 'callback': 'ale_linters#terraform#tfsec#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/testft/testlinter.vim b/dotfiles/.vim/plugged/ale/ale_linters/testft/testlinter.vim deleted file mode 100644 index 65e0b205..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/testft/testlinter.vim +++ /dev/null @@ -1,10 +0,0 @@ -" Author: neersighted -" Description: dummy linter to use in tests - -call ale#linter#Define('testft', { -\ 'name': 'testlinter', -\ 'output_stream': 'stdout', -\ 'executable': 'testlinter', -\ 'command': 'testlinter', -\ 'callback': 'testCB', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/alex.vim deleted file mode 100644 index 5d9aec66..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for TeX files - -call ale#handlers#alex#DefineLinter('tex', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/chktex.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/chktex.vim deleted file mode 100644 index 160baf0d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/chktex.vim +++ /dev/null @@ -1,54 +0,0 @@ -" Author: Andrew Balmos - -" Description: chktex for LaTeX files - -let g:ale_tex_chktex_executable = -\ get(g:, 'ale_tex_chktex_executable', 'chktex') - -let g:ale_tex_chktex_options = -\ get(g:, 'ale_tex_chktex_options', '-I') - -function! ale_linters#tex#chktex#GetCommand(buffer) abort - " Check for optional .chktexrc - let l:chktex_config = ale#path#FindNearestFile( - \ a:buffer, - \ '.chktexrc') - - let l:command = ale#Var(a:buffer, 'tex_chktex_executable') - " Avoid bug when used without -p (last warning has gibberish for a filename) - let l:command .= ' -v0 -p stdin -q' - - if !empty(l:chktex_config) - let l:command .= ' -l ' . ale#Escape(l:chktex_config) - endif - - let l:command .= ' ' . ale#Var(a:buffer, 'tex_chktex_options') - - return l:command -endfunction - -function! ale_linters#tex#chktex#Handle(buffer, lines) abort - " Mattes lines like: - " - " stdin:499:2:24:Delete this space to maintain correct pagereferences. - " stdin:507:81:3:You should enclose the previous parenthesis with `{}'. - let l:pattern = '^stdin:\(\d\+\):\(\d\+\):\(\d\+\):\(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[4] . ' (' . (l:match[3]+0) . ')', - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('tex', { -\ 'name': 'chktex', -\ 'executable': 'chktex', -\ 'command': function('ale_linters#tex#chktex#GetCommand'), -\ 'callback': 'ale_linters#tex#chktex#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/cspell.vim deleted file mode 100644 index 4cf2b08e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for TeX files. - -call ale#handlers#cspell#DefineLinter('tex') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/lacheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/lacheck.vim deleted file mode 100644 index 19d69403..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/lacheck.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: Andrew Balmos - -" Description: lacheck for LaTeX files - -call ale#Set('tex_lacheck_executable', 'lacheck') - -function! ale_linters#tex#lacheck#Handle(buffer, lines) abort - " Mattes lines like: - " - " "book.tex", line 37: possible unwanted space at "{" - " "book.tex", line 38: missing `\ ' after "etc." - let l:pattern = '^"\(.\+\)", line \(\d\+\): \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - " lacheck follows `\input{}` commands. If the cwd is not the same as the - " file in the buffer then it will fail to find the inputed items. We do not - " want warnings from those items anyway - if !empty(matchstr(l:match[3], '^Could not open ".\+"$')) - continue - endif - - " lacheck follows `\input{}` commands. We are only interested in - " reporting errors for the current buffer only. - if empty(matchstr(fnamemodify(l:match[1], ':t'), fnamemodify(bufname(a:buffer), ':t'))) - continue - endif - - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[3], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('tex', { -\ 'name': 'lacheck', -\ 'executable': {b -> ale#Var(b, 'tex_lacheck_executable')}, -\ 'command': '%e %t', -\ 'callback': 'ale_linters#tex#lacheck#Handle' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/proselint.vim deleted file mode 100644 index 35e764e2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: poohzrn https://github.com/poohzrn -" Description: proselint for TeX files - -call ale#linter#Define('tex', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/redpen.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/redpen.vim deleted file mode 100644 index 952a6004..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/redpen.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: rhysd https://rhysd.github.io -" Description: Redpen, a proofreading tool (http://redpen.cc) - -call ale#linter#Define('tex', { -\ 'name': 'redpen', -\ 'executable': 'redpen', -\ 'command': 'redpen -f latex -r json %t', -\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/texlab.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/texlab.vim deleted file mode 100644 index 8e96b80b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/texlab.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Ricardo Liang -" Author: ourigen -" Description: Texlab language server (Rust rewrite) - -call ale#Set('tex_texlab_executable', 'texlab') -call ale#Set('tex_texlab_options', '') -call ale#Set('tex_texlab_config', {}) - -function! ale_linters#tex#texlab#GetProjectRoot(buffer) abort - let l:git_path = ale#path#FindNearestDirectory(a:buffer, '.git') - - return !empty(l:git_path) ? fnamemodify(l:git_path, ':h:h') : '' -endfunction - -function! ale_linters#tex#texlab#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'tex_texlab_options')) -endfunction - -call ale#linter#Define('tex', { -\ 'name': 'texlab', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'tex_texlab_executable')}, -\ 'command': function('ale_linters#tex#texlab#GetCommand'), -\ 'project_root': function('ale_linters#tex#texlab#GetProjectRoot'), -\ 'lsp_config': {b -> ale#Var(b, 'tex_texlab_config')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/textlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/textlint.vim deleted file mode 100644 index 5edac46d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/textlint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: TANIGUCHI Masaya -" Description: textlint for LaTeX files - -call ale#linter#Define('tex', { -\ 'name': 'textlint', -\ 'executable': function('ale#handlers#textlint#GetExecutable'), -\ 'command': function('ale#handlers#textlint#GetCommand'), -\ 'callback': 'ale#handlers#textlint#HandleTextlintOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/vale.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/vale.vim deleted file mode 100644 index f64e72ac..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/vale.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: chew-z https://github.com/chew-z -" Description: vale for LaTeX files - -call ale#linter#Define('tex', { -\ 'name': 'vale', -\ 'executable': 'vale', -\ 'command': 'vale --output=JSON %t', -\ 'callback': 'ale#handlers#vale#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/tex/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/tex/writegood.vim deleted file mode 100644 index c1aeace9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/tex/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for TeX files - -call ale#handlers#writegood#DefineLinter('tex') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/texinfo/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/texinfo/alex.vim deleted file mode 100644 index 4d245524..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/texinfo/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for texinfo files - -call ale#handlers#alex#DefineLinter('texinfo', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/texinfo/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/texinfo/cspell.vim deleted file mode 100644 index d691b3a7..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/texinfo/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for TeXInfo files. - -call ale#handlers#cspell#DefineLinter('texinfo') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/texinfo/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/texinfo/proselint.vim deleted file mode 100644 index 003e3a0f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/texinfo/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for Texinfo files - -call ale#linter#Define('texinfo', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/texinfo/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/texinfo/writegood.vim deleted file mode 100644 index 4427f056..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/texinfo/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for Texinfo files - -call ale#handlers#writegood#DefineLinter('texinfo') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/text/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/text/alex.vim deleted file mode 100644 index d87ed915..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/text/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for text files - -call ale#handlers#alex#DefineLinter('text', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/text/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/text/cspell.vim deleted file mode 100644 index 813ef3b8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/text/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for general text files. - -call ale#handlers#cspell#DefineLinter('text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/text/languagetool.vim b/dotfiles/.vim/plugged/ale/ale_linters/text/languagetool.vim deleted file mode 100644 index 58c99ba2..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/text/languagetool.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Vincent (wahrwolf [ät] wolfpit.net) -" Description: languagetool for text files - -call ale#handlers#languagetool#DefineLinter('text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/text/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/text/proselint.vim deleted file mode 100644 index 281b4ffa..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/text/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: poohzrn https://github.com/poohzrn -" Description: proselint for text files - -call ale#linter#Define('text', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/text/redpen.vim b/dotfiles/.vim/plugged/ale/ale_linters/text/redpen.vim deleted file mode 100644 index ec4433b9..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/text/redpen.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: rhysd https://rhysd.github.io -" Description: Redpen, a proofreading tool (http://redpen.cc) - -call ale#linter#Define('text', { -\ 'name': 'redpen', -\ 'executable': 'redpen', -\ 'command': 'redpen -f plain -r json %t', -\ 'callback': 'ale#handlers#redpen#HandleRedpenOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/text/textlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/text/textlint.vim deleted file mode 100644 index 67c4e378..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/text/textlint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Yasuhiro Kiyota -" Description: textlint, a proofreading tool (https://textlint.github.io/) - -call ale#linter#Define('text', { -\ 'name': 'textlint', -\ 'executable': function('ale#handlers#textlint#GetExecutable'), -\ 'command': function('ale#handlers#textlint#GetCommand'), -\ 'callback': 'ale#handlers#textlint#HandleTextlintOutput', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/text/vale.vim b/dotfiles/.vim/plugged/ale/ale_linters/text/vale.vim deleted file mode 100644 index cf37c2f8..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/text/vale.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: chew-z https://github.com/chew-z -" Description: vale for text files - -call ale#linter#Define('text', { -\ 'name': 'vale', -\ 'executable': 'vale', -\ 'command': 'vale --output=JSON %t', -\ 'callback': 'ale#handlers#vale#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/text/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/text/writegood.vim deleted file mode 100644 index 81b935d4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/text/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for text files - -call ale#handlers#writegood#DefineLinter('text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/thrift/thrift.vim b/dotfiles/.vim/plugged/ale/ale_linters/thrift/thrift.vim deleted file mode 100644 index 345c7abe..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/thrift/thrift.vim +++ /dev/null @@ -1,87 +0,0 @@ -" Author: Jon Parise - -call ale#Set('thrift_thrift_executable', 'thrift') -call ale#Set('thrift_thrift_generators', ['cpp']) -call ale#Set('thrift_thrift_includes', ['.']) -call ale#Set('thrift_thrift_options', '-strict') - -function! ale_linters#thrift#thrift#GetCommand(buffer) abort - let l:generators = ale#Var(a:buffer, 'thrift_thrift_generators') - let l:includes = ale#Var(a:buffer, 'thrift_thrift_includes') - - " The thrift compiler requires at least one generator. If none are set, - " fall back to our default value to avoid silently failing. We could also - " `throw` here, but that seems even less helpful. - if empty(l:generators) - let l:generators = ['cpp'] - endif - - let l:output_dir = ale#command#CreateDirectory(a:buffer) - - return '%e' - \ . ale#Pad(join(map(copy(l:generators), "'--gen ' . v:val"))) - \ . ale#Pad(join(map(copy(l:includes), "'-I ' . v:val"))) - \ . ale#Pad(ale#Var(a:buffer, 'thrift_thrift_options')) - \ . ' -out ' . ale#Escape(l:output_dir) - \ . ' %t' -endfunction - -function! ale_linters#thrift#thrift#Handle(buffer, lines) abort - " Matches lines like the following: - " - " [SEVERITY:/path/filename.thrift:31] Message text - " [ERROR:/path/filename.thrift:31] (last token was ';') - let l:pattern = '\v^\[(\u+):(.*):(\d+)\] (.*)$' - - let l:index = 0 - let l:output = [] - - " Roll our own output-matching loop instead of using ale#util#GetMatches - " because we need to support error messages that span multiple lines. - while l:index < len(a:lines) - let l:line = a:lines[l:index] - - let l:match = matchlist(l:line, l:pattern) - - if empty(l:match) - let l:index += 1 - continue - endif - - let l:severity = l:match[1] - - if l:severity is# 'WARNING' - let l:type = 'W' - else - let l:type = 'E' - endif - - " If our text looks like "(last token was ';')", the *next* line - " should contain a more descriptive error message. - let l:text = l:match[4] - - if l:text =~# '\(last token was .*\)' - let l:index += 1 - let l:text = get(a:lines, l:index, 'Unknown error ' . l:text) - endif - - call add(l:output, { - \ 'lnum': l:match[3] + 0, - \ 'col': 0, - \ 'type': l:type, - \ 'text': l:text, - \}) - - let l:index += 1 - endwhile - - return l:output -endfunction - -call ale#linter#Define('thrift', { -\ 'name': 'thrift', -\ 'output_stream': 'both', -\ 'executable': {b -> ale#Var(b, 'thrift_thrift_executable')}, -\ 'command': function('ale_linters#thrift#thrift#GetCommand'), -\ 'callback': 'ale_linters#thrift#thrift#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/thrift/thriftcheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/thrift/thriftcheck.vim deleted file mode 100644 index bf929d10..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/thrift/thriftcheck.vim +++ /dev/null @@ -1,46 +0,0 @@ -" Author: Jon Parise - -call ale#Set('thrift_thriftcheck_executable', 'thriftcheck') -call ale#Set('thrift_thriftcheck_options', '') - -function! ale_linters#thrift#thriftcheck#GetCommand(buffer) abort - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'thrift_thriftcheck_options')) - \ . ' --stdin-filename %s' - \ . ' %t' -endfunction - -function! ale_linters#thrift#thriftcheck#Handle(buffer, lines) abort - " Matches lines like the following: - " - " file.thrift:1:1: error: "py" namespace must match "^idl\\." (namespace.pattern) - " file.thrift:3:5: warning: 64-bit integer constant -2147483649 may not work in all languages (int.64bit) - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):(\d+): ?([^:]+): (.+) \(([^\)]+)\)$' - - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if l:match[3] is# 'warning' - let l:type = 'W' - else - let l:type = 'E' - endif - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:type, - \ 'text': l:match[4], - \ 'code': l:match[5], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('thrift', { -\ 'name': 'thriftcheck', -\ 'executable': {b -> ale#Var(b, 'thrift_thriftcheck_executable')}, -\ 'command': function('ale_linters#thrift#thriftcheck#GetCommand'), -\ 'callback': 'ale_linters#thrift#thriftcheck#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/typescript/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/typescript/cspell.vim deleted file mode 100644 index 6061b75c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/typescript/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for TypeScript files. - -call ale#handlers#cspell#DefineLinter('typescript') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/typescript/deno.vim b/dotfiles/.vim/plugged/ale/ale_linters/typescript/deno.vim deleted file mode 100644 index f47fac7a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/typescript/deno.vim +++ /dev/null @@ -1,12 +0,0 @@ -" Author: Mohammed Chelouti - https://github.com/motato1 -" Arnold Chand -" Description: Deno lsp linter for TypeScript files. - -call ale#linter#Define('typescript', { -\ 'name': 'deno', -\ 'lsp': 'stdio', -\ 'executable': function('ale#handlers#deno#GetExecutable'), -\ 'command': '%e lsp', -\ 'project_root': function('ale#handlers#deno#GetProjectRoot'), -\ 'initialization_options': function('ale#handlers#deno#GetInitializationOptions'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/typescript/eslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/typescript/eslint.vim deleted file mode 100644 index eaeac307..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/typescript/eslint.vim +++ /dev/null @@ -1,10 +0,0 @@ -" Author: w0rp -" Description: eslint for JavaScript files - -call ale#linter#Define('typescript', { -\ 'name': 'eslint', -\ 'executable': function('ale#handlers#eslint#GetExecutable'), -\ 'cwd': function('ale#handlers#eslint#GetCwd'), -\ 'command': function('ale#handlers#eslint#GetCommand'), -\ 'callback': 'ale#handlers#eslint#HandleJSON', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/typescript/standard.vim b/dotfiles/.vim/plugged/ale/ale_linters/typescript/standard.vim deleted file mode 100644 index 1d524a10..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/typescript/standard.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Author: Ahmed El Gabri <@ahmedelgabri> -" Description: standardjs for typescript files - -call ale#Set('typescript_standard_executable', 'standard') -call ale#Set('typescript_standard_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('typescript_standard_options', '') - -function! ale_linters#typescript#standard#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'typescript_standard', [ - \ 'node_modules/standardx/bin/cmd.js', - \ 'node_modules/standard/bin/cmd.js', - \ 'node_modules/.bin/standard', - \]) -endfunction - -function! ale_linters#typescript#standard#GetCommand(buffer) abort - let l:executable = ale_linters#typescript#standard#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'typescript_standard_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --stdin %s' -endfunction - -" standard uses eslint and the output format is the same -call ale#linter#Define('typescript', { -\ 'name': 'standard', -\ 'executable': function('ale_linters#typescript#standard#GetExecutable'), -\ 'command': function('ale_linters#typescript#standard#GetCommand'), -\ 'callback': 'ale#handlers#eslint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/typescript/tslint.vim b/dotfiles/.vim/plugged/ale/ale_linters/typescript/tslint.vim deleted file mode 100644 index 886a3cd4..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/typescript/tslint.vim +++ /dev/null @@ -1,75 +0,0 @@ -" Author: Prashanth Chandra , Jonathan Clem -" Description: tslint for TypeScript files - -call ale#handlers#tslint#InitVariables() - -function! ale_linters#typescript#tslint#Handle(buffer, lines) abort - " Do not output any errors for empty files if the option is on. - if ale#Var(a:buffer, 'typescript_tslint_ignore_empty_files') - \&& getbufline(a:buffer, 1, '$') == [''] - return [] - endif - - let l:dir = expand('#' . a:buffer . ':p:h') - let l:output = [] - - for l:error in ale#util#FuzzyJSONDecode(a:lines, []) - if get(l:error, 'ruleName', '') is# 'no-implicit-dependencies' - continue - endif - - let l:item = { - \ 'type': (get(l:error, 'ruleSeverity', '') is# 'WARNING' ? 'W' : 'E'), - \ 'text': l:error.failure, - \ 'lnum': l:error.startPosition.line + 1, - \ 'col': l:error.startPosition.character + 1, - \ 'end_lnum': l:error.endPosition.line + 1, - \ 'end_col': l:error.endPosition.character + 1, - \} - - let l:filename = ale#path#GetAbsPath(l:dir, l:error.name) - - " Assume temporary files are this file. - if !ale#path#IsTempName(l:filename) - let l:item.filename = l:filename - endif - - if has_key(l:error, 'ruleName') - let l:item.code = l:error.ruleName - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -function! ale_linters#typescript#tslint#GetCommand(buffer) abort - let l:tslint_config_path = ale#path#ResolveLocalPath( - \ a:buffer, - \ 'tslint.json', - \ ale#Var(a:buffer, 'typescript_tslint_config_path') - \) - let l:tslint_config_option = !empty(l:tslint_config_path) - \ ? ' -c ' . ale#Escape(l:tslint_config_path) - \ : '' - - let l:tslint_rules_dir = ale#Var(a:buffer, 'typescript_tslint_rules_dir') - let l:tslint_rules_option = !empty(l:tslint_rules_dir) - \ ? ' -r ' . ale#Escape(l:tslint_rules_dir) - \ : '' - - return ale#Escape(ale#handlers#tslint#GetExecutable(a:buffer)) - \ . ' --format json' - \ . l:tslint_config_option - \ . l:tslint_rules_option - \ . ' %t' -endfunction - -call ale#linter#Define('typescript', { -\ 'name': 'tslint', -\ 'executable': function('ale#handlers#tslint#GetExecutable'), -\ 'cwd': '%s:h', -\ 'command': function('ale_linters#typescript#tslint#GetCommand'), -\ 'callback': 'ale_linters#typescript#tslint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/typescript/tsserver.vim b/dotfiles/.vim/plugged/ale/ale_linters/typescript/tsserver.vim deleted file mode 100644 index d97becca..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/typescript/tsserver.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: w0rp -" Description: tsserver integration for ALE - -call ale#Set('typescript_tsserver_executable', 'tsserver') -call ale#Set('typescript_tsserver_config_path', '') -call ale#Set('typescript_tsserver_use_global', get(g:, 'ale_use_global_executables', 0)) - -call ale#linter#Define('typescript', { -\ 'name': 'tsserver', -\ 'lsp': 'tsserver', -\ 'executable': {b -> ale#path#FindExecutable(b, 'typescript_tsserver', [ -\ '.yarn/sdks/typescript/bin/tsserver', -\ 'node_modules/.bin/tsserver', -\ ])}, -\ 'command': '%e', -\ 'project_root': function('ale#handlers#tsserver#GetProjectRoot'), -\ 'language': '', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/typescript/typecheck.vim b/dotfiles/.vim/plugged/ale/ale_linters/typescript/typecheck.vim deleted file mode 100644 index 2f18691b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/typescript/typecheck.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Prashanth Chandra https://github.com/prashcr, Aleh Kashnikau https://github.com/mkusher -" Description: type checker for TypeScript files - -function! ale_linters#typescript#typecheck#Handle(buffer, lines) abort - " Matches patterns like the following: - " - " hello.ts[7, 41]: Property 'a' does not exist on type 'A' - " hello.ts[16, 7]: Type 'A' is not assignable to type 'B' - " - let l:pattern = '.\+\.ts\[\(\d\+\), \(\d\+\)\]: \(.\+\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:line = l:match[1] + 0 - let l:column = l:match[2] + 0 - let l:text = l:match[3] - - call add(l:output, { - \ 'lnum': l:line, - \ 'col': l:column, - \ 'text': l:text, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('typescript', { -\ 'name': 'typecheck', -\ 'executable': 'typecheck', -\ 'command': 'typecheck %s', -\ 'callback': 'ale_linters#typescript#typecheck#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/typescript/xo.vim b/dotfiles/.vim/plugged/ale/ale_linters/typescript/xo.vim deleted file mode 100644 index 6f4ee50c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/typescript/xo.vim +++ /dev/null @@ -1,6 +0,0 @@ -call ale#linter#Define('typescript', { -\ 'name': 'xo', -\ 'executable': function('ale#handlers#xo#GetExecutable'), -\ 'command': function('ale#handlers#xo#GetLintCommand'), -\ 'callback': 'ale#handlers#xo#HandleJSON', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/v/v.vim b/dotfiles/.vim/plugged/ale/ale_linters/v/v.vim deleted file mode 100644 index afa98c56..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/v/v.vim +++ /dev/null @@ -1,82 +0,0 @@ -" Author: fiatjaf -" Description: v build for V files - -call ale#Set('v_v_executable', 'v') -call ale#Set('v_v_options', '') - -function! ale_linters#v#v#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'v_v_options') - - " Run v in local directory with relative path - let l:command = ale#Var(a:buffer, 'v_v_executable') - \ . ale#Pad(l:options) - \ . ' .' . ' -o /tmp/vim-ale-v' - - return l:command -endfunction - -function! ale_linters#v#v#Handler(buffer, lines) abort - let l:dir = expand('#' . a:buffer . ':p:h') - let l:output = [] - - " Matches patterns like the following: - " - " ./const.v:4:3: warning: const names cannot contain uppercase letters, use snake_case instead - " 2 | - " 3 | const ( - " 4 | BUTTON_TEXT = 'OK' - " | ~~~~~~~~~~~ - " 5 | ) - " ./main.v:4:8: warning: module 'os' is imported but never used - " 2 | - " 3 | import ui - " 4 | import os - " | ~~ - " 5 | - " 6 | const ( - " ./main.v:20:10: error: undefined ident: `win_widt` - " 18 | mut app := &App{} - " 19 | app.window = ui.window({ - " 20 | width: win_widt - " | ~~~~~~~~ - " 21 | height: win_height - " 22 | title: 'Counter' - let l:current = {} - - for l:line in a:lines - " matches basic error description - let l:match = matchlist(l:line, - \ '\([^:]\+\):\([^:]\+\):\([^:]\+\): \([^:]\+\): \(.*\)') - - if !empty(l:match) - let l:current = { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[5], - \ 'type': l:match[4] is# 'error' ? 'E' : 'W', - \} - call add(l:output, l:current) - continue - endif - - " try to get information about the ending column - let l:tildematch = matchstr(l:line, '\~\+') - - if !empty(l:tildematch) - let l:current['end_col'] = l:current['col'] + len(l:tildematch) - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('v', { -\ 'name': 'v', -\ 'aliases': [], -\ 'executable': {b -> ale#Var(b, 'v_v_executable')}, -\ 'command': function('ale_linters#v#v#GetCommand'), -\ 'output_stream': 'stderr', -\ 'callback': 'ale_linters#v#v#Handler', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vala/vala_lint.vim b/dotfiles/.vim/plugged/ale/ale_linters/vala/vala_lint.vim deleted file mode 100644 index 7f8a566a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vala/vala_lint.vim +++ /dev/null @@ -1,66 +0,0 @@ -" Author: Atsuya Takagi -" Description: A linter for Vala using Vala-Lint. - -call ale#Set('vala_vala_lint_config_filename', 'vala-lint.conf') -call ale#Set('vala_vala_lint_executable', 'io.elementary.vala-lint') - -function! ale_linters#vala#vala_lint#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'vala_vala_lint_executable') -endfunction - -function! ale_linters#vala#vala_lint#GetCommand(buffer) abort - let l:command = ale_linters#vala#vala_lint#GetExecutable(a:buffer) - - let l:config_filename = ale#Var(a:buffer, 'vala_vala_lint_config_filename') - let l:config_path = ale#path#FindNearestFile(a:buffer, l:config_filename) - - if !empty(l:config_path) - let l:command .= ' -c ' . l:config_path - endif - - return l:command . ' %s' -endfunction - -function! ale_linters#vala#vala_lint#Handle(buffer, lines) abort - let l:pattern = '^\s*\(\d\+\)\.\(\d\+\)\s\+\(error\|warn\)\s\+\(.\+\)\s\([A-Za-z0-9_\-]\+\)' - let l:output = [] - - for l:line in a:lines - " remove color escape sequences since vala-lint doesn't support - " output without colors - let l:cleaned_line = substitute(l:line, '\e\[[0-9;]\+[mK]', '', 'g') - let l:match = matchlist(l:cleaned_line, l:pattern) - - if len(l:match) == 0 - continue - endif - - let l:refined_type = l:match[3] is# 'warn' ? 'W' : 'E' - let l:cleaned_text = substitute(l:match[4], '^\s*\(.\{-}\)\s*$', '\1', '') - - let l:lnum = l:match[1] + 0 - let l:column = l:match[2] + 0 - let l:type = l:refined_type - let l:text = l:cleaned_text - let l:code = l:match[5] - - call add(l:output, { - \ 'lnum': l:lnum, - \ 'col': l:column, - \ 'text': l:text, - \ 'type': l:type, - \ 'code': l:code, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('vala', { -\ 'name': 'vala_lint', -\ 'output_stream': 'stdout', -\ 'executable': function('ale_linters#vala#vala_lint#GetExecutable'), -\ 'command': function('ale_linters#vala#vala_lint#GetCommand'), -\ 'callback': 'ale_linters#vala#vala_lint#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/verilog/hdl_checker.vim b/dotfiles/.vim/plugged/ale/ale_linters/verilog/hdl_checker.vim deleted file mode 100644 index b05d8565..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/verilog/hdl_checker.vim +++ /dev/null @@ -1,5 +0,0 @@ -" Author: suoto -" Description: Adds support for HDL Code Checker, which wraps vcom/vlog, ghdl -" or xvhdl. More info on https://github.com/suoto/hdl_checker - -call ale#handlers#hdl_checker#DefineLinter('verilog') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/verilog/iverilog.vim b/dotfiles/.vim/plugged/ale/ale_linters/verilog/iverilog.vim deleted file mode 100644 index e081f33f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/verilog/iverilog.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: Masahiro H https://github.com/mshr-h -" Description: iverilog for verilog files - -call ale#Set('verilog_iverilog_options', '') - -function! ale_linters#verilog#iverilog#GetCommand(buffer) abort - return 'iverilog -t null -Wall ' - \ . ale#Var(a:buffer, 'verilog_iverilog_options') - \ . ' %t' -endfunction - -function! ale_linters#verilog#iverilog#Handle(buffer, lines) abort - " Look for lines like the following. - " - " tb_me_top.v:37: warning: Instantiating module me_top with dangling input port 1 (rst_n) floating. - " tb_me_top.v:17: syntax error - " memory_single_port.v:2: syntax error - " tb_me_top.v:17: error: Invalid module instantiation - let l:pattern = '^[^:]\+:\(\d\+\): \(warning\|error\|syntax error\)\(: \(.\+\)\)\?' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:line = l:match[1] + 0 - let l:type = l:match[2] =~# 'error' ? 'E' : 'W' - let l:text = l:match[2] is# 'syntax error' ? 'syntax error' : l:match[4] - - call add(l:output, { - \ 'lnum': l:line, - \ 'text': l:text, - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('verilog', { -\ 'name': 'iverilog', -\ 'output_stream': 'stderr', -\ 'executable': 'iverilog', -\ 'command': function('ale_linters#verilog#iverilog#GetCommand'), -\ 'callback': 'ale_linters#verilog#iverilog#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/verilog/verilator.vim b/dotfiles/.vim/plugged/ale/ale_linters/verilog/verilator.vim deleted file mode 100644 index 006e310d..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/verilog/verilator.vim +++ /dev/null @@ -1,60 +0,0 @@ -" Author: Masahiro H https://github.com/mshr-h -" Description: verilator for verilog files - -" Set this option to change Verilator lint options -if !exists('g:ale_verilog_verilator_options') - let g:ale_verilog_verilator_options = '' -endif - -function! ale_linters#verilog#verilator#GetCommand(buffer) abort - " the path to the current file is systematically added to the search path - return 'verilator --lint-only -Wall -Wno-DECLFILENAME ' - \ . '-I%s:h ' - \ . ale#Var(a:buffer, 'verilog_verilator_options') .' ' - \ . '%t' -endfunction - -function! ale_linters#verilog#verilator#Handle(buffer, lines) abort - " Look for lines like the following. - " - " %Error: addr_gen.v:3: syntax error, unexpected IDENTIFIER - " %Warning-WIDTH: addr_gen.v:26: Operator ASSIGNDLY expects 12 bits on the Assign RHS, but Assign RHS's CONST '20'h0' generates 20 bits. - " %Warning-UNUSED: test.v:3: Signal is not used: a - " %Warning-UNDRIVEN: test.v:3: Signal is not driven: clk - " %Warning-UNUSED: test.v:4: Signal is not used: dout - " %Warning-BLKSEQ: test.v:10: Blocking assignments (=) in sequential (flop or latch) block; suggest delayed assignments (<=). - " Since version 4.032 (04/2020) verilator linter messages also contain the column number, - " and look like: - " %Error: /tmp/test.sv:3:1: syntax error, unexpected endmodule, expecting ';' - " - " to stay compatible with old versions of the tool, the column number is - " optional in the researched pattern - let l:pattern = '^%\(Warning\|Error\)[^:]*:\s*\([^:]\+\):\(\d\+\):\(\d\+\)\?:\? \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': str2nr(l:match[3]), - \ 'text': l:match[5], - \ 'type': l:match[1] is# 'Error' ? 'E' : 'W', - \ 'filename': l:match[2], - \} - - if !empty(l:match[4]) - let l:item.col = str2nr(l:match[4]) - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -call ale#linter#Define('verilog', { -\ 'name': 'verilator', -\ 'output_stream': 'stderr', -\ 'executable': 'verilator', -\ 'command': function('ale_linters#verilog#verilator#GetCommand'), -\ 'callback': 'ale_linters#verilog#verilator#Handle', -\ 'read_buffer': 0, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/verilog/vlog.vim b/dotfiles/.vim/plugged/ale/ale_linters/verilog/vlog.vim deleted file mode 100644 index 45e1977c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/verilog/vlog.vim +++ /dev/null @@ -1,52 +0,0 @@ -" Author: John Gentile -" Description: Adds support for Mentor Graphics Questa/ModelSim `vlog` Verilog compiler/checker - -call ale#Set('verilog_vlog_executable', 'vlog') -" See `$ vlog -h` for more options -call ale#Set('verilog_vlog_options', '-quiet -lint') - -function! ale_linters#verilog#vlog#GetCommand(buffer) abort - return '%e ' . ale#Pad(ale#Var(a:buffer, 'verilog_vlog_options')) . ' %t' -endfunction - -function! ale_linters#verilog#vlog#Handle(buffer, lines) abort - "Matches patterns like the following: - "** Warning: add.v(7): (vlog-2623) Undefined variable: C. - "** Error: file.v(1): (vlog-13294) Identifier must be declared with a port mode: C. - let l:pattern = '^**\s\(\w*\): \([a-zA-Z0-9\-\.\_\/ ]\+\)(\(\d\+\)):\s\+\(.*\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[3] + 0, - \ 'type': l:match[1] is? 'Error' ? 'E' : 'W', - \ 'text': l:match[4], - \ 'filename': l:match[2], - \}) - endfor - - "Matches patterns like the following: - "** Warning: (vlog-2623) add.v(7): Undefined variable: C. - "** Error: (vlog-13294) file.v(1): Identifier must be declared with a port mode: C. - " let l:pattern = '^**\s\(\w*\):[a-zA-Z0-9\-\.\_\/ ]\+(\(\d\+\)):\s\+\(.*\)' - let l:pattern = '^**\s\(\w*\):\s\([^)]*)\) \([a-zA-Z0-9\-\.\_\/ ]\+\)(\(\d\+\)):\s\+\(.*\)' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[4] + 0, - \ 'type': l:match[1] is? 'Error' ? 'E' : 'W', - \ 'text': l:match[2] . ' ' . l:match[5], - \ 'filename': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('verilog', { -\ 'name': 'vlog', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'verilog_vlog_executable')}, -\ 'command': function('ale_linters#verilog#vlog#GetCommand'), -\ 'callback': 'ale_linters#verilog#vlog#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/verilog/xvlog.vim b/dotfiles/.vim/plugged/ale/ale_linters/verilog/xvlog.vim deleted file mode 100644 index 98b5aae7..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/verilog/xvlog.vim +++ /dev/null @@ -1,35 +0,0 @@ -" Author: John Gentile -" Description: Adds support for Xilinx Vivado `xvlog` Verilog compiler/checker - -call ale#Set('verilog_xvlog_executable', 'xvlog') -call ale#Set('verilog_xvlog_options', '') - -function! ale_linters#verilog#xvlog#GetCommand(buffer) abort - return '%e ' . ale#Pad(ale#Var(a:buffer, 'verilog_xvlog_options')) . ' %t' -endfunction - -function! ale_linters#verilog#xvlog#Handle(buffer, lines) abort - "Matches patterns like the following: - " ERROR: [VRFC 10-1412] syntax error near output [/path/to/file.v:5] - let l:pattern = '^ERROR:\s\+\(\[.*\)\[.*:\([0-9]\+\)\]' - let l:output = [] - - " NOTE: `xvlog` only prints 'INFO' and 'ERROR' messages - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'type': 'E', - \ 'text': l:match[1], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('verilog', { -\ 'name': 'xvlog', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'verilog_xvlog_executable')}, -\ 'command': function('ale_linters#verilog#xvlog#GetCommand'), -\ 'callback': 'ale_linters#verilog#xvlog#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/verilog/yosys.vim b/dotfiles/.vim/plugged/ale/ale_linters/verilog/yosys.vim deleted file mode 100644 index 29657755..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/verilog/yosys.vim +++ /dev/null @@ -1,42 +0,0 @@ -" Author: Nathan Sharp -" Description: Yosys for Verilog files - -call ale#Set('verilog_yosys_executable', 'yosys') -call ale#Set('verilog_yosys_options', '-Q -T -p ''read_verilog %s''') - -function! ale_linters#verilog#yosys#GetCommand(buffer) abort - return '%e ' . ale#Var(a:buffer, 'verilog_yosys_options') . ' 2>&1' -endfunction - -function! ale_linters#verilog#yosys#Handle(buffer, lines) abort - let l:output = [] - let l:path = fnamemodify(bufname(a:buffer), ':p') - - for l:match in ale#util#GetMatches(a:lines, '^\([^:]\+\):\(\d\+\): \(WARNING\|ERROR\): \(.\+\)$') - call add(l:output, { - \ 'lnum': str2nr(l:match[2]), - \ 'text': l:match[4], - \ 'type': l:match[3][0], - \ 'filename': l:match[1], - \}) - endfor - - for l:match in ale#util#GetMatches(a:lines, '^\(Warning\|ERROR\): \(.\+\)$') - call add(l:output, { - \ 'lnum': 1, - \ 'text': l:match[2], - \ 'type': l:match[1][0], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('verilog', { -\ 'name': 'yosys', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'verilog_yosys_executable')}, -\ 'command': function('ale_linters#verilog#yosys#GetCommand'), -\ 'callback': 'ale_linters#verilog#yosys#Handle', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vhdl/ghdl.vim b/dotfiles/.vim/plugged/ale/ale_linters/vhdl/ghdl.vim deleted file mode 100644 index b09e620b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vhdl/ghdl.vim +++ /dev/null @@ -1,37 +0,0 @@ -" Author: John Gentile -" Description: Adds support for `ghdl` VHDL compiler/checker - -call ale#Set('vhdl_ghdl_executable', 'ghdl') -" Compile w/VHDL-2008 support -call ale#Set('vhdl_ghdl_options', '--std=08') - -function! ale_linters#vhdl#ghdl#GetCommand(buffer) abort - return '%e -s ' . ale#Pad(ale#Var(a:buffer, 'vhdl_ghdl_options')) . ' %t' -endfunction - -function! ale_linters#vhdl#ghdl#Handle(buffer, lines) abort - " Look for 'error' lines like the following: - " dff_en.vhd:41:5:error: 'begin' is expected instead of 'if' - " /path/to/file.vhdl:12:8: no declaration for "i0" - let l:pattern = '^[a-zA-Z0-9\-\.\_\/ ]\+:\(\d\+\):\(\d\+\):\(.*\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col' : l:match[2] + 0, - \ 'text': l:match[3], - \ 'type': 'E', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('vhdl', { -\ 'name': 'ghdl', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'vhdl_ghdl_executable')}, -\ 'command': function('ale_linters#vhdl#ghdl#GetCommand'), -\ 'callback': 'ale_linters#vhdl#ghdl#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vhdl/hdl_checker.vim b/dotfiles/.vim/plugged/ale/ale_linters/vhdl/hdl_checker.vim deleted file mode 100644 index c9d306b3..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vhdl/hdl_checker.vim +++ /dev/null @@ -1,5 +0,0 @@ -" Author: suoto -" Description: Adds support for HDL Code Checker, which wraps vcom/vlog, ghdl -" or xvhdl. More info on https://github.com/suoto/hdl_checker - -call ale#handlers#hdl_checker#DefineLinter('vhdl') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vhdl/vcom.vim b/dotfiles/.vim/plugged/ale/ale_linters/vhdl/vcom.vim deleted file mode 100644 index 1914fd33..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vhdl/vcom.vim +++ /dev/null @@ -1,38 +0,0 @@ -" Author: John Gentile -" Description: Adds support for Mentor Graphics Questa/ModelSim `vcom` VHDL compiler/checker - -call ale#Set('vhdl_vcom_executable', 'vcom') -" Use VHDL-2008. See `$ vcom -h` for more options -call ale#Set('vhdl_vcom_options', '-2008 -quiet -lint') - -function! ale_linters#vhdl#vcom#GetCommand(buffer) abort - return '%e ' . ale#Pad(ale#Var(a:buffer, 'vhdl_vcom_options')) . ' %t' -endfunction - -function! ale_linters#vhdl#vcom#Handle(buffer, lines) abort - "Matches patterns like the following: - "** Warning: ../path/to/file.vhd(218): (vcom-1236) Shared variables must be of a protected type. - "** Error: tb_file.vhd(73): (vcom-1136) Unknown identifier "aresetn". - "** Error: tb_file.vhd(73): Bad resolution function (STD_LOGIC) for type (error). - "** Error: tb_file.vhd(73): near ":": (vcom-1576) expecting ';' or ')'. - let l:pattern = '^**\s\(\w*\):[a-zA-Z0-9\-\.\_\/ ]\+(\(\d\+\)):\s\+\(.*\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'type': l:match[1] is? 'Error' ? 'E' : 'W', - \ 'text': l:match[3], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('vhdl', { -\ 'name': 'vcom', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'vhdl_vcom_executable')}, -\ 'command': function('ale_linters#vhdl#vcom#GetCommand'), -\ 'callback': 'ale_linters#vhdl#vcom#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vhdl/xvhdl.vim b/dotfiles/.vim/plugged/ale/ale_linters/vhdl/xvhdl.vim deleted file mode 100644 index 8010ff14..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vhdl/xvhdl.vim +++ /dev/null @@ -1,37 +0,0 @@ -" Author: John Gentile -" Description: Adds support for Xilinx Vivado `xvhdl` VHDL compiler/checker - -call ale#Set('vhdl_xvhdl_executable', 'xvhdl') -" Use VHDL-2008. See `$ xvhdl -h` for more options -call ale#Set('vhdl_xvhdl_options', '--2008') - -function! ale_linters#vhdl#xvhdl#GetCommand(buffer) abort - return '%e ' . ale#Pad(ale#Var(a:buffer, 'vhdl_xvhdl_options')) . ' %t' -endfunction - -function! ale_linters#vhdl#xvhdl#Handle(buffer, lines) abort - "Matches patterns like the following: - " ERROR: [VRFC 10-91] aresetn is not declared [/path/to/file.vhd:17] - " ERROR: [VRFC 10-91] m_axis_tx_tdata is not declared [/home/user/tx_data.vhd:128] - let l:pattern = '^ERROR:\s\+\(\[.*\)\[.*:\([0-9]\+\)\]' - let l:output = [] - - " NOTE: `xvhdl` only prints 'INFO' and 'ERROR' messages - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[2] + 0, - \ 'type': 'E', - \ 'text': l:match[1], - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('vhdl', { -\ 'name': 'xvhdl', -\ 'output_stream': 'stdout', -\ 'executable': {b -> ale#Var(b, 'vhdl_xvhdl_executable')}, -\ 'command': function('ale_linters#vhdl#xvhdl#GetCommand'), -\ 'callback': 'ale_linters#vhdl#xvhdl#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vim/ale_custom_linting_rules.vim b/dotfiles/.vim/plugged/ale/ale_linters/vim/ale_custom_linting_rules.vim deleted file mode 100644 index 5ca2f149..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vim/ale_custom_linting_rules.vim +++ /dev/null @@ -1,70 +0,0 @@ -" Author: w0rp -" Description: A linter for checking ALE project code itself. - -function! ale_linters#vim#ale_custom_linting_rules#GetExecutable(buffer) abort - let l:filename = expand('#' . a:buffer . ':p') - let l:dir_list = [] - - for l:dir in split(&runtimepath, ',') - if l:filename[:len(l:dir) - 1] is# l:dir - call add(l:dir_list, l:dir) - endif - endfor - - return !empty(l:dir_list) - \ ? findfile('test/script/custom-linting-rules', join(l:dir_list, ',')) - \ : '' -endfunction - -function! s:GetALEProjectDir(buffer) abort - let l:executable = ale_linters#vim#ale_custom_linting_rules#GetExecutable(a:buffer) - - return ale#path#Dirname(ale#path#Dirname(ale#path#Dirname(l:executable))) -endfunction - -function! ale_linters#vim#ale_custom_linting_rules#GetCwd(buffer) abort - let l:executable = ale_linters#vim#ale_custom_linting_rules#GetExecutable(a:buffer) - - return ale#path#Dirname(ale#path#Dirname(ale#path#Dirname(l:executable))) -endfunction - -function! ale_linters#vim#ale_custom_linting_rules#GetCommand(buffer) abort - let l:temp_dir = ale#command#CreateDirectory(a:buffer) - let l:temp_file = l:temp_dir . '/example.vim' - - let l:lines = getbufline(a:buffer, 1, '$') - call ale#util#Writefile(a:buffer, l:lines, l:temp_file) - - return '%e ' . ale#Escape(l:temp_dir) -endfunction - -function! ale_linters#vim#ale_custom_linting_rules#Handle(buffer, lines) abort - let l:dir = s:GetALEProjectDir(a:buffer) - let l:output = [] - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+) (.+)$' - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - " Ignore trailing whitespace errors if we've turned them off. - if !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - \&& l:match[3] is# 'Trailing whitespace' - continue - endif - - call add(l:output, { - \ 'lnum': l:match[2], - \ 'text': l:match[3], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -call ale#linter#Define('vim', { -\ 'name': 'ale_custom_linting_rules', -\ 'executable': function('ale_linters#vim#ale_custom_linting_rules#GetExecutable'), -\ 'cwd': function('ale_linters#vim#ale_custom_linting_rules#GetCwd'), -\ 'command': function('ale_linters#vim#ale_custom_linting_rules#GetCommand'), -\ 'callback': 'ale_linters#vim#ale_custom_linting_rules#Handle', -\ 'read_buffer': 0, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vim/vimls.vim b/dotfiles/.vim/plugged/ale/ale_linters/vim/vimls.vim deleted file mode 100644 index 7003eb04..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vim/vimls.vim +++ /dev/null @@ -1,61 +0,0 @@ -" Author: Jeffrey Lau - https://github.com/zoonfafer -" Description: Vim Language Server integration for ALE - -call ale#Set('vim_vimls_executable', 'vim-language-server') -call ale#Set('vim_vimls_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('vim_vimls_config', {}) - -function! ale_linters#vim#vimls#GetProjectRoot(buffer) abort - let l:trigger_file_candidates = [ - \ '.vimrc', - \ 'init.vim', - \] - - for l:candidate in l:trigger_file_candidates - let l:trigger_file = fnamemodify(bufname(a:buffer), ':t') - - if l:trigger_file is# l:candidate - return fnamemodify( - \ bufname(a:buffer), - \ ':h', - \) - endif - endfor - - let l:trigger_dir_candidates = [ - \ 'autoload', - \ 'plugin', - \ '.git', - \] - - let l:path_upwards = ale#path#Upwards(fnamemodify(bufname(a:buffer), ':p:h')) - - for l:path in l:path_upwards - for l:candidate in l:trigger_dir_candidates - let l:trigger_dir = ale#path#Simplify( - \ l:path . '/' . l:candidate, - \) - - if isdirectory(l:trigger_dir) - return fnamemodify( - \ l:trigger_dir, - \ ':p:h:h', - \) - endif - endfor - endfor - - return '' -endfunction - -call ale#linter#Define('vim', { -\ 'name': 'vimls', -\ 'lsp': 'stdio', -\ 'lsp_config': {b -> ale#Var(b, 'vim_vimls_config')}, -\ 'executable': {b -> ale#path#FindExecutable(b, 'vim_vimls', [ -\ 'node_modules/.bin/vim-language-server', -\ ])}, -\ 'command': '%e --stdio', -\ 'language': 'vim', -\ 'project_root': function('ale_linters#vim#vimls#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vim/vint.vim b/dotfiles/.vim/plugged/ale/ale_linters/vim/vint.vim deleted file mode 100644 index f7054ffb..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vim/vint.vim +++ /dev/null @@ -1,65 +0,0 @@ -" Author: w0rp , KabbAmine -" Description: This file adds support for checking Vim code with Vint. - -" This flag can be used to change enable/disable style issues. -call ale#Set('vim_vint_show_style_issues', 1) -call ale#Set('vim_vint_executable', 'vint') -let s:enable_neovim = has('nvim') ? ' --enable-neovim' : '' -let s:format = '-f "{file_path}:{line_number}:{column_number}: {severity}: {policy_name} - {description} (see {reference})"' - -function! ale_linters#vim#vint#GetCommand(buffer, version) abort - let l:can_use_no_color_flag = empty(a:version) - \ || ale#semver#GTE(a:version, [0, 3, 7]) - - let l:warning_flag = ale#Var(a:buffer, 'vim_vint_show_style_issues') ? '-s' : '-w' - - " Use the --stdin-display-name argument if supported, temp file otherwise. - let l:stdin_or_temp = ale#semver#GTE(a:version, [0, 4, 0]) - \ ? ' --stdin-display-name %s -' - \ : ' %t' - - return '%e' - \ . ' ' . l:warning_flag - \ . (l:can_use_no_color_flag ? ' --no-color' : '') - \ . s:enable_neovim - \ . ' ' . s:format - \ . l:stdin_or_temp -endfunction - -let s:word_regex_list = [ -\ '\v^Undefined variable: ([^ ]+)', -\ '\v^Make the scope explicit like ...([^ ]+). ', -\ '\v^.*start with a capital or contain a colon: ([^ ]+)', -\ '\v.*instead of .(\=[=~]).', -\] - -function! ale_linters#vim#vint#Handle(buffer, lines) abort - let l:loclist = ale#handlers#gcc#HandleGCCFormat(a:buffer, a:lines) - - for l:item in l:loclist - let l:match = [] - - for l:regex in s:word_regex_list - let l:match = matchlist(l:item.text, l:regex) - - if !empty(l:match) - let l:item.end_col = l:item.col + len(l:match[1]) - 1 - break - endif - endfor - endfor - - return l:loclist -endfunction - -call ale#linter#Define('vim', { -\ 'name': 'vint', -\ 'executable': {buffer -> ale#Var(buffer, 'vim_vint_executable')}, -\ 'command': {buffer -> ale#semver#RunWithVersionCheck( -\ buffer, -\ ale#Var(buffer, 'vim_vint_executable'), -\ '%e --version', -\ function('ale_linters#vim#vint#GetCommand'), -\ )}, -\ 'callback': 'ale_linters#vim#vint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vue/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/vue/cspell.vim deleted file mode 100644 index 2d8bfdc3..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vue/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for Vue files. - -call ale#handlers#cspell#DefineLinter('vue') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vue/vls.vim b/dotfiles/.vim/plugged/ale/ale_linters/vue/vls.vim deleted file mode 100644 index 4bd75286..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vue/vls.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: Alexander Olofsson -" Description: Vue vls Language Server integration for ALE - -call ale#Set('vue_vls_executable', 'vls') -call ale#Set('vue_vls_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#vue#vls#GetProjectRoot(buffer) abort - let l:package_path = ale#path#FindNearestFile(a:buffer, 'package.json') - - return !empty(l:package_path) ? fnamemodify(l:package_path, ':h') : '' -endfunction - -call ale#linter#Define('vue', { -\ 'name': 'vls', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#path#FindExecutable(b, 'vue_vls', [ -\ 'node_modules/.bin/vls', -\ ])}, -\ 'command': '%e --stdio', -\ 'language': 'vue', -\ 'project_root': function('ale_linters#vue#vls#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/vue/volar.vim b/dotfiles/.vim/plugged/ale/ale_linters/vue/volar.vim deleted file mode 100644 index bb41b883..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/vue/volar.vim +++ /dev/null @@ -1,80 +0,0 @@ -" Author: Arnold Chand -" Description: Volar Language Server integration for ALE adopted from -" nvim-lspconfig and volar/packages/shared/src/types.ts - -call ale#Set('vue_volar_executable', 'vue-language-server') -call ale#Set('vue_volar_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('vue_volar_init_options', { -\ 'documentFeatures': { -\ 'documentColor': v:false, -\ 'documentFormatting': { -\ 'defaultPrintWidth': 100, -\ }, -\ 'documentSymbol': v:true, -\ 'foldingRange': v:true, -\ 'linkedEditingRange': v:true, -\ 'selectionRange': v:true, -\ }, -\ 'languageFeatures': { -\ 'callHierarchy': v:true, -\ 'codeAction': v:true, -\ 'codeLens': v:true, -\ 'completion': { -\ 'defaultAttrNameCase': 'kebabCase', -\ 'defaultTagNameCase': 'both', -\ 'getDocumentNameCaseRequest': v:false, -\ 'getDocumentSelectionRequest': v:false, -\ }, -\ 'definition': v:true, -\ 'diagnostics': v:true, -\ 'documentHighlight': v:true, -\ 'documentLink': v:true, -\ 'hover': v:true, -\ 'references': v:true, -\ 'rename': v:true, -\ 'renameFileRefactoring': v:true, -\ 'schemaRequestService': v:true, -\ 'semanticTokens': v:false, -\ 'signatureHelp': v:true, -\ 'typeDefinition': v:true, -\ 'workspaceSymbol': v:false, -\ }, -\ 'typescript': { -\ 'serverPath': '', -\ 'localizedPath': v:null, -\ }, -\}) - -function! ale_linters#vue#volar#GetProjectRoot(buffer) abort - let l:project_roots = ['package.json', 'vite.config.js', '.git', bufname(a:buffer)] - - for l:project_root in l:project_roots - let l:nearest_filepath = ale#path#FindNearestFile(a:buffer, l:project_root) - - if !empty(l:nearest_filepath) - return fnamemodify(l:nearest_filepath, ':h') - endif - endfor - - return '' -endfunction - -function! ale_linters#vue#volar#GetInitializationOptions(buffer) abort - let l:tsserver_path = ale#path#FindNearestExecutable(a:buffer, [ - \ 'node_modules/typescript/lib/tsserverlibrary.js' - \ ]) - let l:init_options = ale#Var(a:buffer, 'vue_volar_init_options') - let l:init_options.typescript.serverPath = l:tsserver_path - - return l:init_options -endfunction - -call ale#linter#Define('vue', { -\ 'name': 'volar', -\ 'language': 'vue', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#path#FindExecutable(b, 'vue_volar', ['node_modules/.bin/vue-language-server'])}, -\ 'command': '%e --stdio', -\ 'project_root': function('ale_linters#vue#volar#GetProjectRoot'), -\ 'initialization_options': function('ale_linters#vue#volar#GetInitializationOptions'), -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/wgsl/naga.vim b/dotfiles/.vim/plugged/ale/ale_linters/wgsl/naga.vim deleted file mode 100644 index 2816751b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/wgsl/naga.vim +++ /dev/null @@ -1,12 +0,0 @@ -" Author: rhysd -" Description: naga-cli linter for WGSL syntax. - -call ale#Set('wgsl_naga_executable', 'naga') - -call ale#linter#Define('wgsl', { -\ 'name': 'naga', -\ 'executable': {b -> ale#Var(b, 'wgsl_naga_executable')}, -\ 'output_stream': 'stderr', -\ 'command': {b -> '%e --stdin-file-path %s'}, -\ 'callback': 'ale#handlers#naga#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/xhtml/alex.vim b/dotfiles/.vim/plugged/ale/ale_linters/xhtml/alex.vim deleted file mode 100644 index 97f3b59a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/xhtml/alex.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Johannes Wienke -" Description: alex for XHTML files - -call ale#handlers#alex#DefineLinter('xhtml', '--text') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/xhtml/cspell.vim b/dotfiles/.vim/plugged/ale/ale_linters/xhtml/cspell.vim deleted file mode 100644 index c465b41b..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/xhtml/cspell.vim +++ /dev/null @@ -1,5 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: cspell support for XHTML files. - -call ale#handlers#cspell#DefineLinter('xhtml') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/xhtml/proselint.vim b/dotfiles/.vim/plugged/ale/ale_linters/xhtml/proselint.vim deleted file mode 100644 index dfad921f..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/xhtml/proselint.vim +++ /dev/null @@ -1,9 +0,0 @@ -" Author: Daniel M. Capella https://github.com/polyzen -" Description: proselint for XHTML files - -call ale#linter#Define('xhtml', { -\ 'name': 'proselint', -\ 'executable': 'proselint', -\ 'command': 'proselint %t', -\ 'callback': 'ale#handlers#unix#HandleAsWarning', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/xhtml/writegood.vim b/dotfiles/.vim/plugged/ale/ale_linters/xhtml/writegood.vim deleted file mode 100644 index 1fcba182..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/xhtml/writegood.vim +++ /dev/null @@ -1,4 +0,0 @@ -" Author: Sumner Evans -" Description: write-good for XHTML files - -call ale#handlers#writegood#DefineLinter('xhtml') diff --git a/dotfiles/.vim/plugged/ale/ale_linters/xml/xmllint.vim b/dotfiles/.vim/plugged/ale/ale_linters/xml/xmllint.vim deleted file mode 100644 index 553d0883..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/xml/xmllint.vim +++ /dev/null @@ -1,65 +0,0 @@ -" Author: q12321q -" Description: This file adds support for checking XML code with xmllint. - -" CLI options -let g:ale_xml_xmllint_executable = get(g:, 'ale_xml_xmllint_executable', 'xmllint') -let g:ale_xml_xmllint_options = get(g:, 'ale_xml_xmllint_options', '') - -function! ale_linters#xml#xmllint#GetCommand(buffer) abort - return '%e' - \ . ale#Pad(ale#Var(a:buffer, 'xml_xmllint_options')) - \ . ' --noout -' -endfunction - -function! ale_linters#xml#xmllint#Handle(buffer, lines) abort - " Matches patterns lines like the following: - " file/path:123: error level : error message - let l:pattern_message = '\v^([^:]+):(\d+):\s*(([^:]+)\s*:\s+.*)$' - - " parse column token line like that: - " file/path:123: parser error : Opening and ending tag mismatch: foo line 1 and bar - " - " ^ - let l:pattern_column_token = '\v^\s*\^$' - - let l:output = [] - - for l:line in a:lines - " Parse error/warning lines - let l:match_message = matchlist(l:line, l:pattern_message) - - if !empty(l:match_message) - let l:line = l:match_message[2] + 0 - let l:type = l:match_message[4] =~? 'warning' ? 'W' : 'E' - let l:text = l:match_message[3] - - call add(l:output, { - \ 'lnum': l:line, - \ 'text': l:text, - \ 'type': l:type, - \}) - - continue - endif - - " Parse column position - let l:match_column_token = matchlist(l:line, l:pattern_column_token) - - if !empty(l:output) && !empty(l:match_column_token) - let l:previous = l:output[len(l:output) - 1] - let l:previous['col'] = len(l:match_column_token[0]) - - continue - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('xml', { -\ 'name': 'xmllint', -\ 'output_stream': 'stderr', -\ 'executable': {b -> ale#Var(b, 'xml_xmllint_executable')}, -\ 'command': function('ale_linters#xml#xmllint#GetCommand'), -\ 'callback': 'ale_linters#xml#xmllint#Handle', -\ }) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/yaml/actionlint.vim b/dotfiles/.vim/plugged/ale/ale_linters/yaml/actionlint.vim deleted file mode 100644 index 1e2fda49..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/yaml/actionlint.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Author: bretello - -call ale#Set('yaml_actionlint_executable', 'actionlint') -call ale#Set('yaml_actionlint_options', '') - -call ale#linter#Define('yaml', { -\ 'name': 'actionlint', -\ 'executable': {b -> ale#Var(b, 'yaml_actionlint_executable')}, -\ 'command': function('ale#handlers#actionlint#GetCommand'), -\ 'callback': 'ale#handlers#actionlint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/yaml/circleci.vim b/dotfiles/.vim/plugged/ale/ale_linters/yaml/circleci.vim deleted file mode 100644 index 20835454..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/yaml/circleci.vim +++ /dev/null @@ -1,35 +0,0 @@ -function! ale_linters#yaml#circleci#Handle(buffer, lines) abort - let l:match_index = -1 - let l:output = [] - - for l:index in range(len(a:lines)) - let l:line = a:lines[l:index] - - if l:line =~? 'Error: ERROR IN CONFIG FILE:' - let l:match_index = l:index + 1 - break - endif - endfor - - if l:match_index > 0 - return [{ - \ 'type': 'E', - \ 'lnum': 1, - \ 'text': a:lines[l:match_index], - \ 'detail': join(a:lines[l:match_index :], "\n"), - \}] - endif - - return [] -endfunction - -" The circleci validate requires network requests, so we'll only run it when -" files are saved to prevent the server from being hammered. -call ale#linter#Define('yaml', { -\ 'name': 'circleci', -\ 'executable': {b -> expand('#' . b . ':p') =~? '\.circleci' ? 'circleci' : ''}, -\ 'command': 'circleci --skip-update-check config validate - < %s', -\ 'callback': 'ale_linters#yaml#circleci#Handle', -\ 'output_stream': 'stderr', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/yaml/gitlablint.vim b/dotfiles/.vim/plugged/ale/ale_linters/yaml/gitlablint.vim deleted file mode 100644 index ec48115a..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/yaml/gitlablint.vim +++ /dev/null @@ -1,49 +0,0 @@ -call ale#Set('yaml_gitlablint_executable', 'gll') -call ale#Set('yaml_gitlablint_options', '') - -function! ale_linters#yaml#gitlablint#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'yaml_gitlablint_options')) - \ . ' -p %t' -endfunction - -function! ale_linters#yaml#gitlablint#Handle(buffer, lines) abort - " Matches patterns line the following: - " (): mapping values are not allowed in this context at line 68 column 8 - " jobs:build:dev config contains unknown keys: ony - let l:pattern = '^\(.*\) at line \(\d\+\) column \(\d\+\)$' - let l:output = [] - - for l:line in a:lines - let l:match = matchlist(l:line, l:pattern) - - if !empty(l:match) - let l:item = { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[1], - \ 'type': 'E', - \} - call add(l:output, l:item) - else - if l:line isnot# 'GitLab CI configuration is invalid' - let l:item = { - \ 'lnum': 0, - \ 'col': 0, - \ 'text': l:line, - \ 'type': 'E', - \} - call add(l:output, l:item) - endif - endif - endfor - - return l:output -endfunction - -call ale#linter#Define('yaml', { -\ 'name': 'gitlablint', -\ 'executable': {b -> ale#Var(b, 'yaml_gitlablint_executable')}, -\ 'command': function('ale_linters#yaml#gitlablint#GetCommand'), -\ 'callback': 'ale_linters#yaml#gitlablint#Handle', -\ 'output_stream': 'stderr', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/yaml/ls.vim b/dotfiles/.vim/plugged/ale/ale_linters/yaml/ls.vim deleted file mode 100644 index 8e3f6d00..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/yaml/ls.vim +++ /dev/null @@ -1,34 +0,0 @@ -" Author: Jeffrey Lau - https://github.com/zoonfafer -" Description: YAML Language Server https://github.com/redhat-developer/yaml-language-server - -call ale#Set('yaml_ls_executable', 'yaml-language-server') -call ale#Set('yaml_ls_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('yaml_ls_config', {}) - -function! ale_linters#yaml#ls#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'yaml_ls', [ - \ 'node_modules/.bin/yaml-language-server', - \]) -endfunction - -function! ale_linters#yaml#ls#GetCommand(buffer) abort - let l:executable = ale_linters#yaml#ls#GetExecutable(a:buffer) - - return ale#Escape(l:executable) . ' --stdio' -endfunction - -" Just use the current file -function! ale_linters#yaml#ls#FindProjectRoot(buffer) abort - let l:project_file = expand('#' . a:buffer . ':p') - - return fnamemodify(l:project_file, ':h') -endfunction - -call ale#linter#Define('yaml', { -\ 'name': 'yaml-language-server', -\ 'lsp': 'stdio', -\ 'executable': function('ale_linters#yaml#ls#GetExecutable'), -\ 'command': function('ale_linters#yaml#ls#GetCommand'), -\ 'project_root': function('ale_linters#yaml#ls#FindProjectRoot'), -\ 'lsp_config': {b -> ale#Var(b, 'yaml_ls_config')}, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/yaml/spectral.vim b/dotfiles/.vim/plugged/ale/ale_linters/yaml/spectral.vim deleted file mode 100644 index 13654f06..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/yaml/spectral.vim +++ /dev/null @@ -1,14 +0,0 @@ -" Author: t2h5 -" Description: Integration of Stoplight Spectral CLI with ALE. - -call ale#Set('yaml_spectral_executable', 'spectral') -call ale#Set('yaml_spectral_use_global', get(g:, 'ale_use_global_executables', 0)) - -call ale#linter#Define('yaml', { -\ 'name': 'spectral', -\ 'executable': {b -> ale#path#FindExecutable(b, 'yaml_spectral', [ -\ 'node_modules/.bin/spectral', -\ ])}, -\ 'command': '%e lint --ignore-unknown-format -q -f text %t', -\ 'callback': 'ale#handlers#spectral#HandleSpectralOutput' -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/yaml/swaglint.vim b/dotfiles/.vim/plugged/ale/ale_linters/yaml/swaglint.vim deleted file mode 100644 index 7fc2b430..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/yaml/swaglint.vim +++ /dev/null @@ -1,40 +0,0 @@ -" Author: Matthew Turland -" Description: This file adds support for linting Swagger / OpenAPI documents using swaglint - -call ale#Set('yaml_swaglint_executable', 'swaglint') -call ale#Set('yaml_swaglint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale_linters#yaml#swaglint#Handle(buffer, lines) abort - let l:pattern = ': \([^\s]\+\) @ \(\d\+\):\(\d\+\) - \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:obj = { - \ 'type': l:match[1] is# 'error' ? 'E' : 'W', - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \} - - " Parse the code if it's there. - let l:code_match = matchlist(l:obj.text, '\v^(.+) \(([^ (]+)\)$') - - if !empty(l:code_match) - let l:obj.text = l:code_match[1] - let l:obj.code = l:code_match[2] - endif - - call add(l:output, l:obj) - endfor - - return l:output -endfunction - -call ale#linter#Define('yaml', { -\ 'name': 'swaglint', -\ 'executable': {b -> ale#path#FindExecutable(b, 'yaml_swaglint', [ -\ 'node_modules/.bin/swaglint', -\ ])}, -\ 'command': '%e -r compact --stdin', -\ 'callback': 'ale_linters#yaml#swaglint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/yaml/yamllint.vim b/dotfiles/.vim/plugged/ale/ale_linters/yaml/yamllint.vim deleted file mode 100644 index 39011df1..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/yaml/yamllint.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Author: KabbAmine - -call ale#Set('yaml_yamllint_executable', 'yamllint') -call ale#Set('yaml_yamllint_options', '') - -call ale#linter#Define('yaml', { -\ 'name': 'yamllint', -\ 'executable': {b -> ale#Var(b, 'yaml_yamllint_executable')}, -\ 'command': function('ale#handlers#yamllint#GetCommand'), -\ 'callback': 'ale#handlers#yamllint#Handle', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/yang/yang_lsp.vim b/dotfiles/.vim/plugged/ale/ale_linters/yang/yang_lsp.vim deleted file mode 100644 index 81fcaa0e..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/yang/yang_lsp.vim +++ /dev/null @@ -1,15 +0,0 @@ -call ale#Set('yang_lsp_executable', 'yang-language-server') - -function! ale_linters#yang#yang_lsp#GetProjectRoot(buffer) abort - let l:project_root = ale#path#FindNearestFile(a:buffer, 'yang.settings') - - return !empty(l:project_root) ? fnamemodify(l:project_root, ':h') : '' -endfunction - -call ale#linter#Define('yang', { -\ 'name': 'yang_lsp', -\ 'lsp': 'stdio', -\ 'executable': {b -> ale#Var(b, 'yang_lsp_executable')}, -\ 'project_root': function('ale_linters#yang#yang_lsp#GetProjectRoot'), -\ 'command': '%e', -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/zeek/zeek.vim b/dotfiles/.vim/plugged/ale/ale_linters/zeek/zeek.vim deleted file mode 100644 index e976d75c..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/zeek/zeek.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: Benjamin Bannier -" Description: Support for checking Zeek files. -" -call ale#Set('zeek_zeek_executable', 'zeek') - -function! ale_linters#zeek#zeek#HandleErrors(buffer, lines) abort - let l:pattern = 'error in \v.*, line (\d+): (.*)$' - - return map(ale#util#GetMatches(a:lines, l:pattern), "{ - \ 'lnum': str2nr(v:val[1]), - \ 'text': v:val[2], - \}") -endfunction - -call ale#linter#Define('zeek', { -\ 'name': 'zeek', -\ 'executable': {b -> ale#Var(b, 'zeek_zeek_executable')}, -\ 'output_stream': 'stderr', -\ 'command': {-> '%e --parse-only %s'}, -\ 'callback': 'ale_linters#zeek#zeek#HandleErrors', -\ 'lint_file': 1, -\}) diff --git a/dotfiles/.vim/plugged/ale/ale_linters/zig/zls.vim b/dotfiles/.vim/plugged/ale/ale_linters/zig/zls.vim deleted file mode 100644 index 1390f6b1..00000000 --- a/dotfiles/.vim/plugged/ale/ale_linters/zig/zls.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: CherryMan -" Description: A language server for Zig - -call ale#Set('zig_zls_executable', 'zls') -call ale#Set('zig_zls_config', {}) - -function! ale_linters#zig#zls#GetProjectRoot(buffer) abort - let l:build_rs = ale#path#FindNearestFile(a:buffer, 'build.zig') - - return !empty(l:build_rs) ? fnamemodify(l:build_rs, ':h') : '' -endfunction - -call ale#linter#Define('zig', { -\ 'name': 'zls', -\ 'lsp': 'stdio', -\ 'lsp_config': {b -> ale#Var(b, 'zig_zls_config')}, -\ 'executable': {b -> ale#Var(b, 'zig_zls_executable')}, -\ 'command': '%e', -\ 'project_root': function('ale_linters#zig#zls#GetProjectRoot'), -\}) diff --git a/dotfiles/.vim/plugged/ale/autoload/ale.vim b/dotfiles/.vim/plugged/ale/autoload/ale.vim deleted file mode 100644 index 029472ad..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale.vim +++ /dev/null @@ -1,284 +0,0 @@ -" Author: w0rp , David Alexander -" Description: Primary code path for the plugin -" Manages execution of linters when requested by autocommands - -" Strings used for severity in the echoed message -let g:ale_echo_msg_error_str = get(g:, 'ale_echo_msg_error_str', 'Error') -let g:ale_echo_msg_info_str = get(g:, 'ale_echo_msg_info_str', 'Info') -let g:ale_echo_msg_log_str = get(g:, 'ale_echo_msg_log_str', 'Log') -let g:ale_echo_msg_warning_str = get(g:, 'ale_echo_msg_warning_str', 'Warning') -" Ignoring linters, for disabling some, or ignoring LSP diagnostics. -let g:ale_linters_ignore = get(g:, 'ale_linters_ignore', {}) -let g:ale_disable_lsp = get(g:, 'ale_disable_lsp', 0) - -" LSP window/showMessage format -let g:ale_lsp_show_message_format = get(g:, 'ale_lsp_show_message_format', '%severity%:%linter%: %s') -" Valid values mimic LSP definitions (error, warning and information; log is -" never shown) -let g:ale_lsp_show_message_severity = get(g:, 'ale_lsp_show_message_severity', 'error') - -let s:lint_timer = -1 -let s:getcmdwintype_exists = exists('*getcmdwintype') - -" Return 1 if a file is too large for ALE to handle. -function! ale#FileTooLarge(buffer) abort - let l:max = getbufvar(a:buffer, 'ale_maximum_file_size', get(g:, 'ale_maximum_file_size', 0)) - - return l:max > 0 ? (line2byte(line('$') + 1) > l:max) : 0 -endfunction - -" A function for checking various conditions whereby ALE just shouldn't -" attempt to do anything, say if particular buffer types are open in Vim. -function! ale#ShouldDoNothing(buffer) abort - " The checks are split into separate if statements to make it possible to - " profile each check individually with Vim's profiling tools. - " - " Do nothing if ALE is disabled. - if !getbufvar(a:buffer, 'ale_enabled', get(g:, 'ale_enabled', 0)) - return 1 - endif - - " Don't perform any checks when newer NeoVim versions are exiting. - if get(v:, 'exiting', v:null) isnot v:null - return 1 - endif - - let l:filetype = getbufvar(a:buffer, '&filetype') - - " Do nothing when there's no filetype. - if l:filetype is# '' - return 1 - endif - - " Do nothing for diff buffers. - if getbufvar(a:buffer, '&diff') - return 1 - endif - - " Do nothing for blacklisted files. - if index(get(g:, 'ale_filetype_blacklist', []), l:filetype) >= 0 - return 1 - endif - - " Do nothing if running from command mode. - if s:getcmdwintype_exists && !empty(getcmdwintype()) - return 1 - endif - - let l:filename = fnamemodify(bufname(a:buffer), ':t') - - " Do nothing for directories. - if l:filename is# '.' - return 1 - endif - - " Don't start linting and so on when an operator is pending. - if ale#util#Mode(1) is# 'no' - return 1 - endif - - " Do nothing if running in the sandbox. - if ale#util#InSandbox() - return 1 - endif - - " Do nothing if the file is too large. - if ale#FileTooLarge(a:buffer) - return 1 - endif - - " Do nothing from CtrlP buffers with CtrlP-funky. - if exists(':CtrlPFunky') is 2 - \&& getbufvar(a:buffer, '&l:statusline') =~# 'CtrlPMode.*funky' - return 1 - endif - - return 0 -endfunction - -function! s:Lint(buffer, should_lint_file, timer_id) abort - " Use the filetype from the buffer - let l:filetype = getbufvar(a:buffer, '&filetype') - let l:linters = ale#linter#Get(l:filetype) - let l:linters = ale#linter#RemoveIgnored(a:buffer, l:filetype, l:linters) - - " Tell other sources that they can start checking the buffer now. - let g:ale_want_results_buffer = a:buffer - silent doautocmd User ALEWantResults - unlet! g:ale_want_results_buffer - - " Don't set up buffer data and so on if there are no linters to run. - if !has_key(g:ale_buffer_info, a:buffer) && empty(l:linters) - return - endif - - " Clear lint_file linters, or only run them if the file exists. - let l:lint_file = empty(l:linters) - \ || (a:should_lint_file && filereadable(expand('#' . a:buffer . ':p'))) - - call ale#engine#RunLinters(a:buffer, l:linters, l:lint_file) -endfunction - -" (delay, [linting_flag, buffer_number]) -function! ale#Queue(delay, ...) abort - if a:0 > 2 - throw 'too many arguments!' - endif - - let l:buffer = get(a:000, 1, v:null) - - if l:buffer is v:null - let l:buffer = bufnr('') - endif - - if type(l:buffer) isnot v:t_number - throw 'buffer_number must be a Number' - endif - - if ale#ShouldDoNothing(l:buffer) - return - endif - - " Default linting_flag to '' - let l:should_lint_file = get(a:000, 0) is# 'lint_file' - - if s:lint_timer != -1 - call timer_stop(s:lint_timer) - let s:lint_timer = -1 - endif - - if a:delay > 0 - let s:lint_timer = timer_start( - \ a:delay, - \ function('s:Lint', [l:buffer, l:should_lint_file]) - \) - else - call s:Lint(l:buffer, l:should_lint_file, 0) - endif -endfunction - -let s:current_ale_version = [3, 2, 0] - -" A function used to check for ALE features in files outside of the project. -function! ale#Has(feature) abort - let l:match = matchlist(a:feature, '\c\v^ale-(\d+)\.(\d+)(\.(\d+))?$') - - if !empty(l:match) - let l:version = [l:match[1] + 0, l:match[2] + 0, l:match[4] + 0] - - return ale#semver#GTE(s:current_ale_version, l:version) - endif - - return 0 -endfunction - -" Given a buffer number and a variable name, look for that variable in the -" buffer scope, then in global scope. If the name does not exist in the global -" scope, an exception will be thrown. -" -" Every variable name will be prefixed with 'ale_'. -function! ale#Var(buffer, variable_name) abort - let l:full_name = 'ale_' . a:variable_name - let l:vars = getbufvar(str2nr(a:buffer), '', {}) - - return get(l:vars, l:full_name, g:[l:full_name]) -endfunction - -" Initialize a variable with a default value, if it isn't already set. -" -" Every variable name will be prefixed with 'ale_'. -function! ale#Set(variable_name, default) abort - let l:full_name = 'ale_' . a:variable_name - - if !has_key(g:, l:full_name) - let g:[l:full_name] = a:default - endif -endfunction - -" Given a string for adding to a command, return the string padded with a -" space on the left if it is not empty. Otherwise return an empty string. -" -" This can be used for making command strings cleaner and easier to test. -function! ale#Pad(string) abort - return !empty(a:string) ? ' ' . a:string : '' -endfunction - -" Given a environment variable name and a value, produce part of a command for -" setting an environment variable before running a command. The syntax will be -" valid for cmd on Windows, or most shells on Unix. -function! ale#Env(variable_name, value) abort - if has('win32') - return 'set ' . a:variable_name . '=' . ale#Escape(a:value) . ' && ' - endif - - return a:variable_name . '=' . ale#Escape(a:value) . ' ' -endfunction - -" Escape a string suitably for each platform. -" shellescape does not work on Windows. -function! ale#Escape(str) abort - if fnamemodify(&shell, ':t') is? 'cmd.exe' - " If the string contains spaces, it will be surrounded by quotes. - " Otherwise, special characters will be escaped with carets (^). - return substitute( - \ a:str =~# ' ' - \ ? '"' . substitute(a:str, '"', '""', 'g') . '"' - \ : substitute(a:str, '\v([&|<>^])', '^\1', 'g'), - \ '%', - \ '%%', - \ 'g', - \) - endif - - return shellescape (a:str) -endfunction - -" Get the loclist item message according to a given format string. -" -" See `:help g:ale_loclist_msg_format` and `:help g:ale_echo_msg_format` -function! ale#GetLocItemMessage(item, format_string) abort - let l:msg = a:format_string - let l:severity = g:ale_echo_msg_warning_str - let l:code = get(a:item, 'code', '') - let l:type = get(a:item, 'type', 'E') - let l:linter_name = get(a:item, 'linter_name', '') - let l:code_repl = !empty(l:code) ? '\=submatch(1) . l:code . submatch(2)' : '' - - if l:type is# 'E' - let l:severity = g:ale_echo_msg_error_str - elseif l:type is# 'I' - let l:severity = g:ale_echo_msg_info_str - endif - - " Replace special markers with certain information. - " \=l:variable is used to avoid escaping issues. - let l:msg = substitute(l:msg, '\v\%([^\%]*)code([^\%]*)\%', l:code_repl, 'g') - let l:msg = substitute(l:msg, '\V%severity%', '\=l:severity', 'g') - let l:msg = substitute(l:msg, '\V%linter%', '\=l:linter_name', 'g') - " Replace %s with the text. - let l:msg = substitute(l:msg, '\V%s', '\=a:item.text', 'g') - " Windows may insert carriage return line endings (^M), strip these characters. - let l:msg = substitute(l:msg, '\r', '', 'g') - - return l:msg -endfunction - -" Given a buffer and a linter or fixer name, return an Array of two-item -" Arrays describing how to map filenames to and from the local to foreign file -" systems. -function! ale#GetFilenameMappings(buffer, name) abort - let l:linter_mappings = ale#Var(a:buffer, 'filename_mappings') - - if type(l:linter_mappings) is v:t_list - return l:linter_mappings - endif - - let l:name = a:name - - if !has_key(l:linter_mappings, l:name) - " Use * as a default setting for all tools. - let l:name = '*' - endif - - return get(l:linter_mappings, l:name, []) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/ant.vim b/dotfiles/.vim/plugged/ale/autoload/ale/ant.vim deleted file mode 100644 index b6d4217f..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/ant.vim +++ /dev/null @@ -1,45 +0,0 @@ -" Author: Andrew Lee . -" Inspired by ale/gradle.vim by Michael Pardo -" Description: Functions for working with Ant projects. - -" Given a buffer number, find an Ant project root -function! ale#ant#FindProjectRoot(buffer) abort - let l:build_xml_path = ale#path#FindNearestFile(a:buffer, 'build.xml') - - if !empty(l:build_xml_path) - return fnamemodify(l:build_xml_path, ':h') - endif - - return '' -endfunction - -" Given a buffer number, find the path to the `ant` executable. Returns an empty -" string if cannot find the executable. -function! ale#ant#FindExecutable(buffer) abort - if executable('ant') - return 'ant' - endif - - return '' -endfunction - -" Given a buffer number, get a working directory and command to print the -" classpath of the root project. -" -" Returns an empty string for the command if Ant is not detected. -function! ale#ant#BuildClasspathCommand(buffer) abort - let l:executable = ale#ant#FindExecutable(a:buffer) - - if !empty(l:executable) - let l:project_root = ale#ant#FindProjectRoot(a:buffer) - - if !empty(l:project_root) - return [ - \ l:project_root, - \ ale#Escape(l:executable) .' classpath -S -q' - \] - endif - endif - - return ['', ''] -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/args.vim b/dotfiles/.vim/plugged/ale/autoload/ale/args.vim deleted file mode 100644 index 70afb2e5..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/args.vim +++ /dev/null @@ -1,43 +0,0 @@ -" Author: w0rp -" Description: This module implements a function for parsing arguments for -" commands. - -" Given a list of valid arguments like ['foo', 'bar'] and a string to parse, -" parse the arguments from the string and return [parsed_args, remainder]. -" -" Arguments must be prefixed in the string with a single minus (-), and a -" double minus (--) denotes the end of arguments. -function! ale#args#Parse(arg_list, string) abort - let l:parsed = {} - let l:end_of_args = 0 - let l:word_list = split(a:string, ' ') - let l:index = 0 - - while l:index < len(l:word_list) - let l:word = l:word_list[l:index] - - if l:word[:0] is# '-' - let l:index += 1 - - if l:word is# '--' - break - endif - - let l:arg = l:word[1:] - - if index(a:arg_list, l:arg) >= 0 - let l:parsed[l:arg] = '' - else - throw 'Invalid argument: ' . l:word - endif - elseif l:word is# '' - let l:index += 1 - else - break - endif - endwhile - - let l:new_string = join(l:word_list[l:index :], ' ') - - return [l:parsed, l:new_string] -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/assert.vim b/dotfiles/.vim/plugged/ale/autoload/ale/assert.vim deleted file mode 100644 index 141cd0f2..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/assert.vim +++ /dev/null @@ -1,424 +0,0 @@ -let s:command_output = [] - -function! ale#assert#GivenCommandOutput(...) abort - let s:command_output = a:000 -endfunction - -function! s:GetLinter() abort - let l:linters = ale#linter#GetLintersLoaded() - let l:filetype_linters = get(values(l:linters), 0, []) - - if len(l:linters) is 0 || len(l:filetype_linters) is 0 - throw 'No linters were loaded' - endif - - if len(l:linters) > 1 || len(l:filetype_linters) > 1 - throw 'More than one linter was loaded' - endif - - return l:filetype_linters[0] -endfunction - -function! s:FormatExe(command, executable) abort - return substitute(a:command, '%e', '\=ale#Escape(a:executable)', 'g') -endfunction - -function! s:ProcessDeferredCommands(initial_result) abort - let l:result = a:initial_result - let l:command_index = 0 - let l:command = [] - - while ale#command#IsDeferred(l:result) - call add(l:command, s:FormatExe(l:result.command, l:result.executable)) - - if get(g:, 'ale_run_synchronously_emulate_commands') - " Don't run commands, but simulate the results. - let l:Callback = g:ale_run_synchronously_callbacks[0] - let l:output = get(s:command_output, l:command_index, []) - call l:Callback(0, l:output) - unlet g:ale_run_synchronously_callbacks - - let l:command_index += 1 - else - " Run the commands in the shell, synchronously. - call ale#test#FlushJobs() - endif - - let l:result = l:result.value - endwhile - - call add(l:command, l:result) - - return l:command -endfunction - -function! s:ProcessDeferredCwds(initial_command, initial_cwd) abort - let l:result = a:initial_command - let l:last_cwd = v:null - let l:command_index = 0 - let l:cwd_list = [] - - while ale#command#IsDeferred(l:result) - call add(l:cwd_list, l:result.cwd) - - if get(g:, 'ale_run_synchronously_emulate_commands') - " Don't run commands, but simulate the results. - let l:Callback = g:ale_run_synchronously_callbacks[0] - let l:output = get(s:command_output, l:command_index, []) - call l:Callback(0, l:output) - unlet g:ale_run_synchronously_callbacks - - let l:command_index += 1 - else - " Run the commands in the shell, synchronously. - call ale#test#FlushJobs() - endif - - let l:result = l:result.value - endwhile - - call add(l:cwd_list, a:initial_cwd is v:null ? l:last_cwd : a:initial_cwd) - - return l:cwd_list -endfunction - -" Load the currently loaded linter for a test case, and check that the command -" matches the given string. -function! ale#assert#Linter(expected_executable, expected_command) abort - let l:buffer = bufnr('') - let l:linter = s:GetLinter() - let l:executable = ale#linter#GetExecutable(l:buffer, l:linter) - - while ale#command#IsDeferred(l:executable) - call ale#test#FlushJobs() - let l:executable = l:executable.value - endwhile - - let l:command = s:ProcessDeferredCommands( - \ ale#linter#GetCommand(l:buffer, l:linter), - \) - - if type(a:expected_command) isnot v:t_list - let l:command = l:command[-1] - endif - - if type(l:command) is v:t_string - " Replace %e with the escaped executable, so tests keep passing after - " linters are changed to use %e. - let l:command = s:FormatExe(l:command, l:executable) - elseif type(l:command) is v:t_list - call map(l:command, 's:FormatExe(v:val, l:executable)') - endif - - AssertEqual - \ [a:expected_executable, a:expected_command], - \ [l:executable, l:command] -endfunction - -function! ale#assert#LinterCwd(expected_cwd) abort - let l:buffer = bufnr('') - let l:linter = s:GetLinter() - - let l:initial_cwd = ale#linter#GetCwd(l:buffer, l:linter) - call ale#command#SetCwd(l:buffer, l:initial_cwd) - - let l:cwd = s:ProcessDeferredCwds( - \ ale#linter#GetCommand(l:buffer, l:linter), - \ l:initial_cwd, - \) - - call ale#command#ResetCwd(l:buffer) - - if type(a:expected_cwd) isnot v:t_list - let l:cwd = l:cwd[-1] - endif - - AssertEqual a:expected_cwd, l:cwd -endfunction - -function! ale#assert#FixerCwd(expected_cwd) abort - let l:buffer = bufnr('') - let l:cwd = s:ProcessDeferredCwds(s:FixerFunction(l:buffer), v:null) - - if type(a:expected_cwd) isnot v:t_list - let l:cwd = l:cwd[-1] - endif - - AssertEqual a:expected_cwd, l:cwd -endfunction - -function! ale#assert#Fixer(expected_result) abort - let l:buffer = bufnr('') - let l:result = s:ProcessDeferredCommands(s:FixerFunction(l:buffer)) - - if type(a:expected_result) isnot v:t_list - let l:result = l:result[-1] - endif - - AssertEqual a:expected_result, l:result -endfunction - -function! ale#assert#FixerNotExecuted() abort - let l:buffer = bufnr('') - let l:result = s:ProcessDeferredCommands(s:FixerFunction(l:buffer))[-1] - - Assert empty(l:result), "The fixer will be executed when it shouldn't be" -endfunction - -function! ale#assert#LinterNotExecuted() abort - let l:buffer = bufnr('') - let l:linter = s:GetLinter() - let l:executable = ale#linter#GetExecutable(l:buffer, l:linter) - let l:executed = 1 - - if !empty(l:executable) - let l:command = ale#linter#GetCommand(l:buffer, l:linter) - - if type(l:command) is v:t_list - let l:command = l:command[-1] - endif - - let l:executed = !empty(l:command) - else - let l:executed = 0 - endif - - Assert !l:executed, "The linter will be executed when it shouldn't be" -endfunction - -function! ale#assert#LSPOptions(expected_options) abort - let l:buffer = bufnr('') - let l:linter = s:GetLinter() - let l:initialization_options = ale#lsp_linter#GetOptions(l:buffer, l:linter) - - AssertEqual a:expected_options, l:initialization_options -endfunction - -function! ale#assert#LSPConfig(expected_config) abort - let l:buffer = bufnr('') - let l:linter = s:GetLinter() - let l:config = ale#lsp_linter#GetConfig(l:buffer, l:linter) - - AssertEqual a:expected_config, l:config -endfunction - -function! ale#assert#LSPLanguage(expected_language) abort - let l:buffer = bufnr('') - let l:linter = s:GetLinter() - let l:language = ale#linter#GetLanguage(l:buffer, l:linter) - - AssertEqual a:expected_language, l:language -endfunction - -function! ale#assert#LSPProject(expected_root) abort - let l:buffer = bufnr('') - let l:linter = s:GetLinter() - let l:root = ale#lsp_linter#FindProjectRoot(l:buffer, l:linter) - - AssertEqual a:expected_root, l:root -endfunction - -function! ale#assert#LSPAddress(expected_address) abort - let l:buffer = bufnr('') - let l:linter = s:GetLinter() - let l:address = ale#linter#GetAddress(l:buffer, l:linter) - - AssertEqual a:expected_address, l:address -endfunction - -function! ale#assert#SetUpLinterTestCommands() abort - command! -nargs=+ GivenCommandOutput :call ale#assert#GivenCommandOutput() - command! -nargs=+ AssertLinterCwd :call ale#assert#LinterCwd() - command! -nargs=+ AssertLinter :call ale#assert#Linter() - command! -nargs=0 AssertLinterNotExecuted :call ale#assert#LinterNotExecuted() - command! -nargs=+ AssertLSPOptions :call ale#assert#LSPOptions() - command! -nargs=+ AssertLSPConfig :call ale#assert#LSPConfig() - command! -nargs=+ AssertLSPLanguage :call ale#assert#LSPLanguage() - command! -nargs=+ AssertLSPProject :call ale#assert#LSPProject() - command! -nargs=+ AssertLSPAddress :call ale#assert#LSPAddress() -endfunction - -function! ale#assert#SetUpFixerTestCommands() abort - command! -nargs=+ GivenCommandOutput :call ale#assert#GivenCommandOutput() - command! -nargs=+ AssertFixerCwd :call ale#assert#FixerCwd() - command! -nargs=+ AssertFixer :call ale#assert#Fixer() - command! -nargs=0 AssertFixerNotExecuted :call ale#assert#FixerNotExecuted() -endfunction - -function! ale#assert#ResetVariables(filetype, name, ...) abort - " If the suffix of the option names format is different, an additional - " argument can be used for that instead. - if a:0 > 1 - throw 'Too many arguments' - endif - - let l:option_suffix = get(a:000, 0, a:name) - let l:prefix = 'ale_' . a:filetype . '_' - \ . substitute(l:option_suffix, '-', '_', 'g') - let l:filter_expr = 'v:val[: len(l:prefix) - 1] is# l:prefix' - - " Save and clear linter variables. - " We'll load the runtime file to reset them to defaults. - for l:key in filter(keys(g:), l:filter_expr) - execute 'Save g:' . l:key - unlet g:[l:key] - endfor - - for l:key in filter(keys(b:), l:filter_expr) - unlet b:[l:key] - endfor -endfunction - -" A dummy function for making sure this module is loaded. -function! ale#assert#SetUpLinterTest(filetype, name) abort - " Set up a marker so ALE doesn't create real random temporary filenames. - let g:ale_create_dummy_temporary_file = 1 - - " Remove current linters. - call ale#linter#Reset() - call ale#linter#PreventLoading(a:filetype) - - Save g:ale_root - let g:ale_root = {} - - Save b:ale_root - unlet! b:ale_root - - call ale#assert#ResetVariables(a:filetype, a:name) - - Save g:ale_c_build_dir - unlet! g:ale_c_build_dir - unlet! b:ale_c_build_dir - - execute 'runtime ale_linters/' . a:filetype . '/' . a:name . '.vim' - - if !exists('g:dir') - call ale#test#SetDirectory('/testplugin/test/linter') - endif - - call ale#assert#SetUpLinterTestCommands() - - let g:ale_run_synchronously = 1 - let g:ale_run_synchronously_emulate_commands = 1 -endfunction - -function! ale#assert#TearDownLinterTest() abort - unlet! g:ale_create_dummy_temporary_file - unlet! g:ale_run_synchronously - unlet! g:ale_run_synchronously_callbacks - unlet! g:ale_run_synchronously_emulate_commands - unlet! g:ale_run_synchronously_command_results - let s:command_output = [] - - if exists(':GivenCommandOutput') - delcommand GivenCommandOutput - endif - - if exists(':AssertLinterCwd') - delcommand AssertLinterCwd - endif - - if exists(':AssertLinter') - delcommand AssertLinter - endif - - if exists(':AssertLinterNotExecuted') - delcommand AssertLinterNotExecuted - endif - - if exists(':AssertLSPOptions') - delcommand AssertLSPOptions - endif - - if exists(':AssertLSPConfig') - delcommand AssertLSPConfig - endif - - if exists(':AssertLSPLanguage') - delcommand AssertLSPLanguage - endif - - if exists(':AssertLSPProject') - delcommand AssertLSPProject - endif - - if exists(':AssertLSPAddress') - delcommand AssertLSPAddress - endif - - if exists('g:dir') - call ale#test#RestoreDirectory() - endif - - Restore - - call ale#linter#Reset() - - if exists('*ale#semver#ResetVersionCache') - call ale#semver#ResetVersionCache() - endif -endfunction - -function! ale#assert#SetUpFixerTest(filetype, name, ...) abort - " If the suffix of the option names format is different, an additional - " argument can be used for that instead. - if a:0 > 1 - throw 'Too many arguments' - endif - - " Set up a marker so ALE doesn't create real random temporary filenames. - let g:ale_create_dummy_temporary_file = 1 - - let l:function_name = ale#fix#registry#GetFunc(a:name) - let s:FixerFunction = function(l:function_name) - - let l:option_suffix = get(a:000, 0, a:name) - call ale#assert#ResetVariables(a:filetype, a:name, l:option_suffix) - - execute 'runtime autoload/ale/fixers/' . substitute(a:name, '-', '_', 'g') . '.vim' - - if !exists('g:dir') - call ale#test#SetDirectory('/testplugin/test/fixers') - endif - - call ale#assert#SetUpFixerTestCommands() - - let g:ale_run_synchronously = 1 - let g:ale_run_synchronously_emulate_commands = 1 -endfunction - -function! ale#assert#TearDownFixerTest() abort - unlet! g:ale_create_dummy_temporary_file - unlet! g:ale_run_synchronously - unlet! g:ale_run_synchronously_callbacks - unlet! g:ale_run_synchronously_emulate_commands - unlet! g:ale_run_synchronously_command_results - let s:command_output = [] - unlet! s:FixerFunction - - if exists('g:dir') - call ale#test#RestoreDirectory() - endif - - Restore - - if exists('*ale#semver#ResetVersionCache') - call ale#semver#ResetVersionCache() - endif - - if exists(':GivenCommandOutput') - delcommand GivenCommandOutput - endif - - if exists(':AssertFixerCwd') - delcommand AssertFixerCwd - endif - - if exists(':AssertFixer') - delcommand AssertFixer - endif - - if exists(':AssertFixerNotExecuted') - delcommand AssertFixerNotExecuted - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/balloon.vim b/dotfiles/.vim/plugged/ale/autoload/ale/balloon.vim deleted file mode 100644 index 8678376f..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/balloon.vim +++ /dev/null @@ -1,74 +0,0 @@ -" Author: w0rp -" Description: balloonexpr support for ALE. - -function! ale#balloon#MessageForPos(bufnr, lnum, col) abort - let l:set_balloons = ale#Var(a:bufnr, 'set_balloons') - let l:show_problems = 0 - let l:show_hover = 0 - - if l:set_balloons is 1 - let l:show_problems = 1 - let l:show_hover = 1 - elseif l:set_balloons is# 'hover' - let l:show_hover = 1 - endif - - " Don't show balloons if they are disabled, or linting is disabled. - if !(l:show_problems || l:show_hover) - \|| !g:ale_enabled - \|| !getbufvar(a:bufnr, 'ale_enabled', 1) - return '' - endif - - if l:show_problems - let l:loclist = get(g:ale_buffer_info, a:bufnr, {'loclist': []}).loclist - let l:index = ale#util#BinarySearch(l:loclist, a:bufnr, a:lnum, a:col) - endif - - " Show the diagnostics message if found, 'Hover' output otherwise - if l:show_problems && l:index >= 0 - return l:loclist[l:index].text - elseif l:show_hover && ( - \ exists('*balloon_show') - \ || getbufvar( - \ a:bufnr, - \ 'ale_set_balloons_legacy_echo', - \ get(g:, 'ale_set_balloons_legacy_echo', 0) - \ ) - \) - " Request LSP/tsserver hover information, but only if this version of - " Vim supports the balloon_show function, or if we turned a legacy - " setting on. - call ale#hover#Show(a:bufnr, a:lnum, a:col, {'called_from_balloonexpr': 1}) - endif - - return '' -endfunction - -function! ale#balloon#Expr() abort - return ale#balloon#MessageForPos(v:beval_bufnr, v:beval_lnum, v:beval_col) -endfunction - -function! ale#balloon#Disable() abort - if has('balloon_eval') - set noballooneval - set balloonexpr= - endif - - if has('balloon_eval_term') - set noballoonevalterm - set balloonexpr= - endif -endfunction - -function! ale#balloon#Enable() abort - if has('balloon_eval') - set ballooneval - set balloonexpr=ale#balloon#Expr() - endif - - if has('balloon_eval_term') - set balloonevalterm - set balloonexpr=ale#balloon#Expr() - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/c.vim b/dotfiles/.vim/plugged/ale/autoload/ale/c.vim deleted file mode 100644 index 4a22c6fe..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/c.vim +++ /dev/null @@ -1,622 +0,0 @@ -" Author: gagbo , w0rp , roel0 -" Description: Functions for integrating with C-family linters. - -call ale#Set('c_parse_makefile', 0) -call ale#Set('c_always_make', has('unix') && !has('macunix')) -call ale#Set('c_parse_compile_commands', 1) - -let s:sep = has('win32') ? '\' : '/' - -" Set just so tests can override it. -let g:__ale_c_project_filenames = ['.git/HEAD', 'configure', 'Makefile', 'CMakeLists.txt'] - -let g:ale_c_build_dir_names = get(g:, 'ale_c_build_dir_names', [ -\ 'build', -\ 'bin', -\]) - -function! s:CanParseMakefile(buffer) abort - " Something somewhere seems to delete this setting in tests, so ensure we - " always have a default value. - call ale#Set('c_parse_makefile', 0) - - return ale#Var(a:buffer, 'c_parse_makefile') -endfunction - -function! ale#c#GetBuildDirectory(buffer) abort - let l:build_dir = ale#Var(a:buffer, 'c_build_dir') - - " c_build_dir has the priority if defined - if !empty(l:build_dir) - return l:build_dir - endif - - let [l:root, l:json_file] = ale#c#FindCompileCommands(a:buffer) - - return ale#path#Dirname(l:json_file) -endfunction - -function! ale#c#ShellSplit(line) abort - let l:stack = [] - let l:args = [''] - let l:prev = '' - - for l:char in split(a:line, '\zs') - if l:char is# '''' - if len(l:stack) > 0 && get(l:stack, -1) is# '''' - call remove(l:stack, -1) - elseif (len(l:stack) == 0 || get(l:stack, -1) isnot# '"') && l:prev isnot# '\' - call add(l:stack, l:char) - endif - elseif (l:char is# '"' || l:char is# '`') && l:prev isnot# '\' - if len(l:stack) > 0 && get(l:stack, -1) is# l:char - call remove(l:stack, -1) - elseif len(l:stack) == 0 || get(l:stack, -1) isnot# '''' - call add(l:stack, l:char) - endif - elseif (l:char is# '(' || l:char is# '[' || l:char is# '{') && l:prev isnot# '\' - if len(l:stack) == 0 || get(l:stack, -1) isnot# '''' - call add(l:stack, l:char) - endif - elseif (l:char is# ')' || l:char is# ']' || l:char is# '}') && l:prev isnot# '\' - if len(l:stack) > 0 && get(l:stack, -1) is# {')': '(', ']': '[', '}': '{'}[l:char] - call remove(l:stack, -1) - endif - elseif l:char is# ' ' && len(l:stack) == 0 - if len(get(l:args, -1)) > 0 - call add(l:args, '') - endif - - continue - endif - - let l:args[-1] = get(l:args, -1) . l:char - endfor - - return l:args -endfunction - -" Takes the path prefix and a list of cflags and expands @file arguments to -" the contents of the file. -" -" @file arguments are command line arguments recognised by gcc and clang. For -" instance, if @./path/to/file was given to gcc, it would load .path/to/file -" and use the contents of that file as arguments. -function! ale#c#ExpandAtArgs(path_prefix, raw_split_lines) abort - let l:out_lines = [] - - for l:option in a:raw_split_lines - if stridx(l:option, '@') == 0 - " This is an argument specifying a location of a file containing other arguments - let l:path = join(split(l:option, '\zs')[1:], '') - - " Make path absolute - if !ale#path#IsAbsolute(l:path) - let l:rel_path = substitute(l:path, '"', '', 'g') - let l:rel_path = substitute(l:rel_path, '''', '', 'g') - let l:path = ale#path#GetAbsPath(a:path_prefix, l:rel_path) - endif - - " Read the file and add all the arguments - try - let l:additional_args = readfile(l:path) - catch - continue " All we can really do is skip this argument - endtry - - let l:file_lines = [] - - for l:line in l:additional_args - let l:file_lines += ale#c#ShellSplit(l:line) - endfor - - " @file arguments can include other @file arguments, so we must - " recurse. - let l:out_lines += ale#c#ExpandAtArgs(a:path_prefix, l:file_lines) - else - " This is not an @file argument, so don't touch it. - let l:out_lines += [l:option] - endif - endfor - - return l:out_lines -endfunction - -" Quote C/C++ a compiler argument, if needed. -" -" Quoting arguments might cause issues with some systems/compilers, so we only -" quote them if we need to. -function! ale#c#QuoteArg(arg) abort - if a:arg !~# '\v[#$&*()\\|[\]{};''"<>/?! ^%]' - return a:arg - endif - - return ale#Escape(a:arg) -endfunction - -function! ale#c#ParseCFlags(path_prefix, should_quote, raw_arguments) abort - " Expand @file arguments now before parsing - let l:arguments = ale#c#ExpandAtArgs(a:path_prefix, a:raw_arguments) - " A list of [already_quoted, argument] - let l:items = [] - let l:option_index = 0 - - while l:option_index < len(l:arguments) - let l:option = l:arguments[l:option_index] - let l:option_index = l:option_index + 1 - - " Include options, that may need relative path fix - if stridx(l:option, '-I') == 0 - \ || stridx(l:option, '-iquote') == 0 - \ || stridx(l:option, '-isystem') == 0 - \ || stridx(l:option, '-idirafter') == 0 - \ || stridx(l:option, '-iframework') == 0 - if stridx(l:option, '-I') == 0 && l:option isnot# '-I' - let l:arg = join(split(l:option, '\zs')[2:], '') - let l:option = '-I' - else - let l:arg = l:arguments[l:option_index] - let l:option_index = l:option_index + 1 - endif - - " Fix relative paths if needed - if !ale#path#IsAbsolute(l:arg) - let l:rel_path = substitute(l:arg, '"', '', 'g') - let l:rel_path = substitute(l:rel_path, '''', '', 'g') - let l:arg = ale#path#GetAbsPath(a:path_prefix, l:rel_path) - endif - - call add(l:items, [1, l:option]) - call add(l:items, [1, ale#Escape(l:arg)]) - " Options with arg that can be grouped with the option or separate - elseif stridx(l:option, '-D') == 0 || stridx(l:option, '-B') == 0 - if l:option is# '-D' || l:option is# '-B' - call add(l:items, [1, l:option]) - call add(l:items, [0, l:arguments[l:option_index]]) - let l:option_index = l:option_index + 1 - else - call add(l:items, [0, l:option]) - endif - " Options that have an argument (always separate) - elseif l:option is# '-iprefix' || stridx(l:option, '-iwithprefix') == 0 - \ || l:option is# '-isysroot' || l:option is# '-imultilib' - \ || l:option is# '-include' || l:option is# '-imacros' - call add(l:items, [0, l:option]) - call add(l:items, [0, l:arguments[l:option_index]]) - let l:option_index = l:option_index + 1 - " Options without argument - elseif (stridx(l:option, '-W') == 0 && stridx(l:option, '-Wa,') != 0 && stridx(l:option, '-Wl,') != 0 && stridx(l:option, '-Wp,') != 0) - \ || l:option is# '-w' || stridx(l:option, '-pedantic') == 0 - \ || l:option is# '-ansi' || stridx(l:option, '-std=') == 0 - \ || stridx(l:option, '-f') == 0 && l:option !~# '\v^-f(dump|diagnostics|no-show-column|stack-usage)' - \ || stridx(l:option, '-O') == 0 - \ || l:option is# '-C' || l:option is# '-CC' || l:option is# '-trigraphs' - \ || stridx(l:option, '-nostdinc') == 0 || stridx(l:option, '-iplugindir=') == 0 - \ || stridx(l:option, '--sysroot=') == 0 || l:option is# '--no-sysroot-suffix' - \ || stridx(l:option, '-m') == 0 - call add(l:items, [0, l:option]) - endif - endwhile - - if a:should_quote - " Quote C arguments that haven't already been quoted above. - " If and only if we've been asked to quote them. - call map(l:items, 'v:val[0] ? v:val[1] : ale#c#QuoteArg(v:val[1])') - else - call map(l:items, 'v:val[1]') - endif - - return join(l:items, ' ') -endfunction - -function! ale#c#ParseCFlagsFromMakeOutput(buffer, make_output) abort - if !s:CanParseMakefile(a:buffer) - return v:null - endif - - let l:buffer_filename = expand('#' . a:buffer . ':t') - let l:cflag_line = '' - - " Find a line matching this buffer's filename in the make output. - for l:line in a:make_output - if stridx(l:line, l:buffer_filename) >= 0 - let l:cflag_line = l:line - break - endif - endfor - - let l:makefile_path = ale#path#FindNearestFile(a:buffer, 'Makefile') - let l:makefile_dir = fnamemodify(l:makefile_path, ':p:h') - - return ale#c#ParseCFlags(l:makefile_dir, 0, ale#c#ShellSplit(l:cflag_line)) -endfunction - -" Given a buffer number, find the project directory containing -" compile_commands.json, and the path to the compile_commands.json file. -" -" If compile_commands.json cannot be found, two empty strings will be -" returned. -function! ale#c#FindCompileCommands(buffer) abort - " Look above the current source file to find compile_commands.json - let l:json_file = ale#path#FindNearestFile(a:buffer, 'compile_commands.json') - - if !empty(l:json_file) - return [fnamemodify(l:json_file, ':h'), l:json_file] - endif - - " Search in build directories if we can't find it in the project. - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - for l:dirname in ale#Var(a:buffer, 'c_build_dir_names') - let l:c_build_dir = l:path . s:sep . l:dirname - let l:json_file = l:c_build_dir . s:sep . 'compile_commands.json' - - if filereadable(l:json_file) - return [l:path, l:json_file] - endif - endfor - endfor - - return ['', ''] -endfunction - -" Find the project root for C/C++ projects. -" -" The location of compile_commands.json will be used to find project roots. -" -" If compile_commands.json cannot be found, other common configuration files -" will be used to detect the project root. -function! ale#c#FindProjectRoot(buffer) abort - let [l:root, l:json_file] = ale#c#FindCompileCommands(a:buffer) - - " Fall back on detecting the project root based on other filenames. - if empty(l:root) - for l:project_filename in g:__ale_c_project_filenames - let l:full_path = ale#path#FindNearestFile(a:buffer, l:project_filename) - - if !empty(l:full_path) - let l:path = fnamemodify(l:full_path, ':h') - - " Correct .git path detection. - if fnamemodify(l:path, ':t') is# '.git' - let l:path = fnamemodify(l:path, ':h') - endif - - return l:path - endif - endfor - endif - - return l:root -endfunction - -" Cache compile_commands.json data in a Dictionary, so we don't need to read -" the same files over and over again. The key in the dictionary will include -" the last modified time of the file. -if !exists('s:compile_commands_cache') - let s:compile_commands_cache = {} -endif - -function! ale#c#ResetCompileCommandsCache() abort - let s:compile_commands_cache = {} -endfunction - -function! s:GetLookupFromCompileCommandsFile(compile_commands_file) abort - let l:empty = [{}, {}] - - if empty(a:compile_commands_file) - return l:empty - endif - - let l:time = getftime(a:compile_commands_file) - - if l:time < 0 - return l:empty - endif - - let l:key = a:compile_commands_file . ':' . l:time - - if has_key(s:compile_commands_cache, l:key) - return s:compile_commands_cache[l:key] - endif - - let l:raw_data = [] - silent! let l:raw_data = json_decode(join(readfile(a:compile_commands_file), '')) - - if type(l:raw_data) isnot v:t_list - let l:raw_data = [] - endif - - let l:file_lookup = {} - let l:dir_lookup = {} - - for l:entry in (type(l:raw_data) is v:t_list ? l:raw_data : []) - let l:filename = ale#path#GetAbsPath(l:entry.directory, l:entry.file) - - " Store a key for lookups by the absolute path to the filename. - let l:file_lookup[l:filename] = get(l:file_lookup, l:filename, []) + [l:entry] - - " Store a key for fuzzy lookups by the absolute path to the directory. - let l:dirname = fnamemodify(l:filename, ':h') - let l:dir_lookup[l:dirname] = get(l:dir_lookup, l:dirname, []) + [l:entry] - - " Store a key for fuzzy lookups by just the basename of the file. - let l:basename = tolower(fnamemodify(l:entry.file, ':t')) - let l:file_lookup[l:basename] = get(l:file_lookup, l:basename, []) + [l:entry] - - " Store a key for fuzzy lookups by just the basename of the directory. - let l:dirbasename = tolower(fnamemodify(l:entry.directory, ':p:h:t')) - let l:dir_lookup[l:dirbasename] = get(l:dir_lookup, l:dirbasename, []) + [l:entry] - endfor - - if !empty(l:file_lookup) && !empty(l:dir_lookup) - let l:result = [l:file_lookup, l:dir_lookup] - let s:compile_commands_cache[l:key] = l:result - - return l:result - endif - - return l:empty -endfunction - -" Get [should_quote, arguments] from either 'command' or 'arguments' -" 'arguments' should be quoted later, the split 'command' strings should not. -function! s:GetArguments(json_item) abort - if has_key(a:json_item, 'arguments') - return [1, a:json_item.arguments] - elseif has_key(a:json_item, 'command') - return [0, ale#c#ShellSplit(a:json_item.command)] - endif - - return [0, []] -endfunction - -function! ale#c#ParseCompileCommandsFlags(buffer, file_lookup, dir_lookup) abort - let l:buffer_filename = ale#path#Simplify(expand('#' . a:buffer . ':p')) - let l:basename = tolower(fnamemodify(l:buffer_filename, ':t')) - " Look for any file in the same directory if we can't find an exact match. - let l:dir = fnamemodify(l:buffer_filename, ':h') - - " Search for an exact file match first. - let l:file_list = get(a:file_lookup, l:buffer_filename, []) - - " We may have to look for /foo/bar instead of C:\foo\bar - if empty(l:file_list) && has('win32') - let l:file_list = get( - \ a:file_lookup, - \ ale#path#RemoveDriveLetter(l:buffer_filename), - \ [] - \) - endif - - " Try the absolute path to the directory second. - let l:dir_list = get(a:dir_lookup, l:dir, []) - - if empty(l:dir_list) && has('win32') - let l:dir_list = get( - \ a:dir_lookup, - \ ale#path#RemoveDriveLetter(l:dir), - \ [] - \) - endif - - if empty(l:file_list) && empty(l:dir_list) - " If we can't find matches with the path to the file, try a - " case-insensitive match for any similarly-named file. - let l:file_list = get(a:file_lookup, l:basename, []) - - " If we can't find matches with the path to the directory, try a - " case-insensitive match for anything in similarly-named directory. - let l:dir_list = get(a:dir_lookup, tolower(fnamemodify(l:dir, ':t')), []) - endif - - " A source file matching the header filename. - let l:source_file = '' - - if empty(l:file_list) && l:basename =~? '\.h$\|\.hpp$' - for l:suffix in ['.c', '.cpp'] - " Try to find a source file by an absolute path first. - let l:key = fnamemodify(l:buffer_filename, ':r') . l:suffix - let l:file_list = get(a:file_lookup, l:key, []) - - if empty(l:file_list) && has('win32') - let l:file_list = get( - \ a:file_lookup, - \ ale#path#RemoveDriveLetter(l:key), - \ [] - \) - endif - - if empty(l:file_list) - " Look fuzzy matches on the basename second. - let l:key = fnamemodify(l:basename, ':r') . l:suffix - let l:file_list = get(a:file_lookup, l:key, []) - endif - - if !empty(l:file_list) - let l:source_file = l:key - break - endif - endfor - endif - - for l:item in l:file_list - let l:filename = ale#path#GetAbsPath(l:item.directory, l:item.file) - - " Load the flags for this file, or for a source file matching the - " header file. - if ( - \ bufnr(l:filename) is a:buffer - \ || ( - \ !empty(l:source_file) - \ && l:filename[-len(l:source_file):] is? l:source_file - \ ) - \) - let [l:should_quote, l:args] = s:GetArguments(l:item) - - return ale#c#ParseCFlags(l:item.directory, l:should_quote, l:args) - endif - endfor - - for l:item in l:dir_list - let l:filename = ale#path#GetAbsPath(l:item.directory, l:item.file) - - if ale#path#RemoveDriveLetter(fnamemodify(l:filename, ':h')) - \ is? ale#path#RemoveDriveLetter(l:dir) - let [l:should_quote, l:args] = s:GetArguments(l:item) - - return ale#c#ParseCFlags(l:item.directory, l:should_quote, l:args) - endif - endfor - - return '' -endfunction - -function! ale#c#FlagsFromCompileCommands(buffer, compile_commands_file) abort - let l:lookups = s:GetLookupFromCompileCommandsFile(a:compile_commands_file) - let l:file_lookup = l:lookups[0] - let l:dir_lookup = l:lookups[1] - - return ale#c#ParseCompileCommandsFlags(a:buffer, l:file_lookup, l:dir_lookup) -endfunction - -function! ale#c#GetCFlags(buffer, output) abort - let l:cflags = v:null - - if ale#Var(a:buffer, 'c_parse_compile_commands') - let [l:root, l:json_file] = ale#c#FindCompileCommands(a:buffer) - - if !empty(l:json_file) - let l:cflags = ale#c#FlagsFromCompileCommands(a:buffer, l:json_file) - endif - endif - - if empty(l:cflags) && s:CanParseMakefile(a:buffer) && !empty(a:output) - let l:cflags = ale#c#ParseCFlagsFromMakeOutput(a:buffer, a:output) - endif - - if l:cflags is v:null - let l:cflags = ale#c#IncludeOptions(ale#c#FindLocalHeaderPaths(a:buffer)) - endif - - return l:cflags isnot v:null ? l:cflags : '' -endfunction - -function! ale#c#GetMakeCommand(buffer) abort - if s:CanParseMakefile(a:buffer) - let l:path = ale#path#FindNearestFile(a:buffer, 'Makefile') - - if empty(l:path) - let l:path = ale#path#FindNearestFile(a:buffer, 'GNUmakefile') - endif - - if !empty(l:path) - let l:always_make = ale#Var(a:buffer, 'c_always_make') - - return [ - \ fnamemodify(l:path, ':h'), - \ 'make -n' . (l:always_make ? ' --always-make' : ''), - \] - endif - endif - - return ['', ''] -endfunction - -function! ale#c#RunMakeCommand(buffer, Callback) abort - let [l:cwd, l:command] = ale#c#GetMakeCommand(a:buffer) - - if empty(l:command) - return a:Callback(a:buffer, []) - endif - - return ale#command#Run( - \ a:buffer, - \ l:command, - \ {b, output -> a:Callback(a:buffer, output)}, - \ {'cwd': l:cwd}, - \) -endfunction - -" Given a buffer number, search for a project root, and output a List -" of directories to include based on some heuristics. -" -" For projects with headers in the project root, the project root will -" be returned. -" -" For projects with an 'include' directory, that directory will be returned. -function! ale#c#FindLocalHeaderPaths(buffer) abort - let l:project_root = ale#c#FindProjectRoot(a:buffer) - - if empty(l:project_root) - return [] - endif - - " See if we can find .h files directory in the project root. - " If we can, that's our include directory. - if !empty(globpath(l:project_root, '*.h', 0)) - return [l:project_root] - endif - - " Look for .hpp files too. - if !empty(globpath(l:project_root, '*.hpp', 0)) - return [l:project_root] - endif - - " If we find an 'include' directory in the project root, then use that. - if isdirectory(l:project_root . '/include') - return [ale#path#Simplify(l:project_root . s:sep . 'include')] - endif - - return [] -endfunction - -" Given a List of include paths, create a string containing the -I include -" options for those paths, with the paths escaped for use in the shell. -function! ale#c#IncludeOptions(include_paths) abort - let l:option_list = [] - - for l:path in a:include_paths - call add(l:option_list, '-I' . ale#Escape(l:path)) - endfor - - if empty(l:option_list) - return '' - endif - - return join(l:option_list) -endfunction - -" Get the language flag depending on on the executable, options and -" file extension -function! ale#c#GetLanguageFlag( -\ buffer, -\ executable, -\ use_header_lang_flag, -\ header_exts, -\ linter_lang_flag -\) abort - " Use only '-header' if the executable is 'clang' by default - if a:use_header_lang_flag == -1 - let l:use_header_lang_flag = a:executable =~# 'clang' - else - let l:use_header_lang_flag = a:use_header_lang_flag - endif - - " If we don't use the header language flag, return the default linter - " language flag - if !l:use_header_lang_flag - return a:linter_lang_flag - endif - - " Get the buffer file extension - let l:buf_ext = expand('#' . a:buffer . ':e') - - " If the buffer file is an header according to its extension, use - " the linter language flag + '-header', ex: 'c-header' - if index(a:header_exts, l:buf_ext) >= 0 - return a:linter_lang_flag . '-header' - endif - - " Else, use the default linter language flag - return a:linter_lang_flag -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/code_action.vim b/dotfiles/.vim/plugged/ale/autoload/ale/code_action.vim deleted file mode 100644 index 60106a24..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/code_action.vim +++ /dev/null @@ -1,389 +0,0 @@ -" Author: Jerko Steiner -" Description: Code action support for LSP / tsserver - -function! ale#code_action#ReloadBuffer() abort - let l:buffer = bufnr('') - - execute 'augroup ALECodeActionReloadGroup' . l:buffer - autocmd! - augroup END - - silent! execute 'augroup! ALECodeActionReloadGroup' . l:buffer - - call ale#util#Execute(':e!') -endfunction - -function! ale#code_action#HandleCodeAction(code_action, options) abort - let l:current_buffer = bufnr('') - let l:changes = a:code_action.changes - - for l:file_code_edit in l:changes - call ale#code_action#ApplyChanges( - \ l:file_code_edit.fileName, - \ l:file_code_edit.textChanges, - \ a:options, - \) - endfor -endfunction - -function! s:ChangeCmp(left, right) abort - if a:left.start.line < a:right.start.line - return -1 - endif - - if a:left.start.line > a:right.start.line - return 1 - endif - - if a:left.start.offset < a:right.start.offset - return -1 - endif - - if a:left.start.offset > a:right.start.offset - return 1 - endif - - if a:left.end.line < a:right.end.line - return -1 - endif - - if a:left.end.line > a:right.end.line - return 1 - endif - - if a:left.end.offset < a:right.end.offset - return -1 - endif - - if a:left.end.offset > a:right.end.offset - return 1 - endif - - return 0 -endfunction - -function! ale#code_action#ApplyChanges(filename, changes, options) abort - let l:should_save = get(a:options, 'should_save') - let l:conn_id = get(a:options, 'conn_id') - - let l:orig_buffer = bufnr('') - - " The buffer is used to determine the fileformat, if available. - let l:buffer = bufnr(a:filename) - - if l:buffer != l:orig_buffer - call ale#util#Execute('silent edit ' . a:filename) - let l:buffer = bufnr('') - endif - - let l:lines = getbufline(l:buffer, 1, '$') - - " Add empty line if there's trailing newline, like readfile() does. - if getbufvar(l:buffer, '&eol') - let l:lines += [''] - endif - - let l:pos = getpos('.')[1:2] - - " Changes have to be sorted so we apply them from bottom-to-top - for l:code_edit in reverse(sort(copy(a:changes), function('s:ChangeCmp'))) - let l:line = l:code_edit.start.line - let l:column = l:code_edit.start.offset - let l:end_line = l:code_edit.end.line - let l:end_column = l:code_edit.end.offset - let l:text = l:code_edit.newText - - let l:insertions = split(l:text, '\n', 1) - - " Fix invalid columns - let l:column = l:column > 0 ? l:column : 1 - let l:end_column = l:end_column > 0 ? l:end_column : 1 - - " Clamp start to BOF - if l:line < 1 - let [l:line, l:column] = [1, 1] - endif - - " Clamp start to EOF - if l:line > len(l:lines) || l:line == len(l:lines) && l:column > len(l:lines[-1]) + 1 - let [l:line, l:column] = [len(l:lines), len(l:lines[-1]) + 1] - " Special case when start is after EOL - elseif l:line < len(l:lines) && l:column > len(l:lines[l:line - 1]) + 1 - let [l:line, l:column] = [l:line + 1, 1] - endif - - " Adjust end: clamp if invalid and/or adjust if we moved start - if l:end_line < l:line || l:end_line == l:line && l:end_column < l:column - let [l:end_line, l:end_column] = [l:line, l:column] - endif - - " Clamp end to EOF - if l:end_line > len(l:lines) || l:end_line == len(l:lines) && l:end_column > len(l:lines[-1]) + 1 - let [l:end_line, l:end_column] = [len(l:lines), len(l:lines[-1]) + 1] - " Special case when end is after EOL - elseif l:end_line < len(l:lines) && l:end_column > len(l:lines[l:end_line - 1]) + 1 - let [l:end_line, l:end_column] = [l:end_line + 1, 1] - endif - - " Careful, [:-1] is not an empty list - let l:start = l:line is 1 ? [] : l:lines[: l:line - 2] - let l:middle = l:column is 1 ? [''] : [l:lines[l:line - 1][: l:column - 2]] - - let l:middle[-1] .= l:insertions[0] - let l:middle += l:insertions[1:] - let l:middle[-1] .= l:lines[l:end_line - 1][l:end_column - 1 :] - - let l:end_line_len = len(l:lines[l:end_line - 1]) - let l:lines_before_change = len(l:lines) - let l:lines = l:start + l:middle + l:lines[l:end_line :] - - let l:current_line_offset = len(l:lines) - l:lines_before_change - let l:column_offset = len(l:middle[-1]) - l:end_line_len - - " Keep cursor where it was (if outside of changes) or move it after - " the changed text (if inside), but don't touch it when the change - " spans the entire buffer, in which case we have no clue and it's - " better to not do anything. - if l:line isnot 1 || l:column isnot 1 - \|| l:end_line < l:lines_before_change - \|| l:end_line == l:lines_before_change && l:end_column <= l:end_line_len - let l:pos = s:UpdateCursor(l:pos, - \ [l:line, l:column], - \ [l:end_line, l:end_column], - \ [l:current_line_offset, l:column_offset]) - endif - endfor - - " Make sure to add a trailing newline if and only if it should be added. - if l:lines[-1] is# '' && getbufvar(l:buffer, '&eol') - call remove(l:lines, -1) - else - call setbufvar(l:buffer, '&eol', 0) - endif - - call ale#util#SetBufferContents(l:buffer, l:lines) - - call ale#lsp#NotifyForChanges(l:conn_id, l:buffer) - - if l:should_save - call ale#util#Execute('silent w!') - endif - - call setpos('.', [0, l:pos[0], l:pos[1], 0]) - - if l:orig_buffer != l:buffer && bufexists(l:orig_buffer) - call ale#util#Execute('silent buf ' . string(l:orig_buffer)) - endif -endfunction - -function! s:UpdateCursor(cursor, start, end, offset) abort - let l:cur_line = a:cursor[0] - let l:cur_column = a:cursor[1] - let l:line = a:start[0] - let l:column = a:start[1] - let l:end_line = a:end[0] - let l:end_column = a:end[1] - let l:line_offset = a:offset[0] - let l:column_offset = a:offset[1] - - if l:end_line < l:cur_line - " both start and end lines are before the cursor. only line offset - " needs to be updated - let l:cur_line += l:line_offset - elseif l:end_line == l:cur_line - " end line is at the same location as cursor, which means - " l:line <= l:cur_line - if l:line < l:cur_line || l:column <= l:cur_column - " updates are happening either before or around the cursor - if l:end_column < l:cur_column - " updates are happening before the cursor, update the - " column offset for cursor - let l:cur_line += l:line_offset - let l:cur_column += l:column_offset - else - " updates are happening around the cursor, move the cursor - " to the end of the changes - let l:cur_line += l:line_offset - let l:cur_column = l:end_column + l:column_offset - endif - " else is not necessary, it means modifications are happening - " after the cursor so no cursor updates need to be done - endif - else - " end line is after the cursor - if l:line < l:cur_line || l:line == l:cur_line && l:column <= l:cur_column - " changes are happening around the cursor, move the cursor - " to the end of the changes - let l:cur_line = l:end_line + l:line_offset - let l:cur_column = l:end_column + l:column_offset - " else is not necesary, it means modifications are happening - " after the cursor so no cursor updates need to be done - endif - endif - - return [l:cur_line, l:cur_column] -endfunction - -function! ale#code_action#GetChanges(workspace_edit) abort - if a:workspace_edit is v:null - return {} - endif - - let l:changes = {} - - if has_key(a:workspace_edit, 'changes') && !empty(a:workspace_edit.changes) - return a:workspace_edit.changes - elseif has_key(a:workspace_edit, 'documentChanges') - let l:document_changes = [] - - if type(a:workspace_edit.documentChanges) is v:t_dict - \ && has_key(a:workspace_edit.documentChanges, 'edits') - call add(l:document_changes, a:workspace_edit.documentChanges) - elseif type(a:workspace_edit.documentChanges) is v:t_list - let l:document_changes = a:workspace_edit.documentChanges - endif - - for l:text_document_edit in l:document_changes - let l:filename = l:text_document_edit.textDocument.uri - let l:edits = l:text_document_edit.edits - let l:changes[l:filename] = l:edits - endfor - endif - - return l:changes -endfunction - -function! ale#code_action#BuildChangesList(changes_map) abort - let l:changes = [] - - for l:file_name in keys(a:changes_map) - let l:text_edits = a:changes_map[l:file_name] - let l:text_changes = [] - - for l:edit in l:text_edits - let l:range = l:edit.range - let l:new_text = l:edit.newText - - call add(l:text_changes, { - \ 'start': { - \ 'line': l:range.start.line + 1, - \ 'offset': l:range.start.character + 1, - \ }, - \ 'end': { - \ 'line': l:range.end.line + 1, - \ 'offset': l:range.end.character + 1, - \ }, - \ 'newText': l:new_text, - \}) - endfor - - call add(l:changes, { - \ 'fileName': ale#util#ToResource(l:file_name), - \ 'textChanges': l:text_changes, - \}) - endfor - - return l:changes -endfunction - -function! s:EscapeMenuName(text) abort - return substitute(a:text, '\\\| \|\.\|&', '\\\0', 'g') -endfunction - -function! s:UpdateMenu(data, menu_items) abort - silent! aunmenu PopUp.Refactor\.\.\. - - if empty(a:data) - return - endif - - for [l:type, l:item] in a:menu_items - let l:name = l:type is# 'tsserver' ? l:item.name : l:item.title - let l:func_name = l:type is# 'tsserver' - \ ? 'ale#codefix#ApplyTSServerCodeAction' - \ : 'ale#codefix#ApplyLSPCodeAction' - - execute printf( - \ 'anoremenu PopUp.&Refactor\.\.\..%s' - \ . ' :call %s(%s, %s)', - \ s:EscapeMenuName(l:name), - \ l:func_name, - \ string(a:data), - \ string(l:item), - \) - endfor - - if empty(a:menu_items) - silent! anoremenu PopUp.Refactor\.\.\..(None) :silent - endif -endfunction - -function! s:GetCodeActions(linter, options) abort - let l:buffer = bufnr('') - let [l:line, l:column] = getpos('.')[1:2] - let l:column = min([l:column, len(getline(l:line))]) - - let l:location = { - \ 'buffer': l:buffer, - \ 'line': l:line, - \ 'column': l:column, - \ 'end_line': l:line, - \ 'end_column': l:column, - \} - let l:Callback = function('s:OnReady', [l:location, a:options]) - call ale#lsp_linter#StartLSP(l:buffer, a:linter, l:Callback) -endfunction - -function! ale#code_action#GetCodeActions(options) abort - silent! aunmenu PopUp.Rename - silent! aunmenu PopUp.Refactor\.\.\. - - " Only display the menu items if there's an LSP server. - let l:has_lsp = 0 - - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - let l:has_lsp = 1 - - break - endif - endfor - - if l:has_lsp - if !empty(expand('')) - silent! anoremenu PopUp.Rename :ALERename - endif - - silent! anoremenu PopUp.Refactor\.\.\..(None) :silent - - call ale#codefix#Execute( - \ mode() is# 'v' || mode() is# "\", - \ function('s:UpdateMenu') - \) - endif -endfunction - -function! s:Setup(enabled) abort - augroup ALECodeActionsGroup - autocmd! - - if a:enabled - autocmd MenuPopup * :call ale#code_action#GetCodeActions({}) - endif - augroup END - - if !a:enabled - silent! augroup! ALECodeActionsGroup - - silent! aunmenu PopUp.Rename - silent! aunmenu PopUp.Refactor\.\.\. - endif -endfunction - -function! ale#code_action#EnablePopUpMenu() abort - call s:Setup(1) -endfunction - -function! ale#code_action#DisablePopUpMenu() abort - call s:Setup(0) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/codefix.vim b/dotfiles/.vim/plugged/ale/autoload/ale/codefix.vim deleted file mode 100644 index 34ce3e15..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/codefix.vim +++ /dev/null @@ -1,497 +0,0 @@ -" Author: Dalius Dobravolskas -" Description: Code Fix support for tsserver and LSP servers - -let s:codefix_map = {} - -" Used to get the codefix map in tests. -function! ale#codefix#GetMap() abort - return deepcopy(s:codefix_map) -endfunction - -" Used to set the codefix map in tests. -function! ale#codefix#SetMap(map) abort - let s:codefix_map = a:map -endfunction - -function! ale#codefix#ClearLSPData() abort - let s:codefix_map = {} -endfunction - -function! s:message(message) abort - call ale#util#Execute('echom ' . string(a:message)) -endfunction - -function! ale#codefix#ApplyTSServerCodeAction(data, item) abort - if has_key(a:item, 'changes') - let l:changes = a:item.changes - - call ale#code_action#HandleCodeAction( - \ { - \ 'description': 'codefix', - \ 'changes': l:changes, - \ }, - \ {}, - \) - else - let l:message = ale#lsp#tsserver_message#GetEditsForRefactor( - \ a:data.buffer, - \ a:data.line, - \ a:data.column, - \ a:data.end_line, - \ a:data.end_column, - \ a:item.id[0], - \ a:item.id[1], - \) - - let l:request_id = ale#lsp#Send(a:data.connection_id, l:message) - - let s:codefix_map[l:request_id] = a:data - endif -endfunction - -function! ale#codefix#HandleTSServerResponse(conn_id, response) abort - if !has_key(a:response, 'request_seq') - \ || !has_key(s:codefix_map, a:response.request_seq) - return - endif - - let l:data = remove(s:codefix_map, a:response.request_seq) - let l:MenuCallback = get(l:data, 'menu_callback', v:null) - - if get(a:response, 'command', '') is# 'getCodeFixes' - if get(a:response, 'success', v:false) is v:false - \&& l:MenuCallback is v:null - let l:message = get(a:response, 'message', 'unknown') - call s:message('Error while getting code fixes. Reason: ' . l:message) - - return - endif - - let l:result = get(a:response, 'body', []) - call filter(l:result, 'has_key(v:val, ''changes'')') - - if l:MenuCallback isnot v:null - call l:MenuCallback( - \ l:data, - \ map(copy(l:result), '[''tsserver'', v:val]') - \) - - return - endif - - if len(l:result) == 0 - call s:message('No code fixes available.') - - return - endif - - let l:code_fix_to_apply = 0 - - if len(l:result) == 1 - let l:code_fix_to_apply = 1 - else - let l:codefix_no = 1 - let l:codefixstring = "Code Fixes:\n" - - for l:codefix in l:result - let l:codefixstring .= l:codefix_no . ') ' - \ . l:codefix.description . "\n" - let l:codefix_no += 1 - endfor - - let l:codefixstring .= 'Type number and (empty cancels): ' - - let l:code_fix_to_apply = ale#util#Input(l:codefixstring, '') - let l:code_fix_to_apply = str2nr(l:code_fix_to_apply) - - if l:code_fix_to_apply == 0 - return - endif - endif - - call ale#codefix#ApplyTSServerCodeAction( - \ l:data, - \ l:result[l:code_fix_to_apply - 1], - \) - elseif get(a:response, 'command', '') is# 'getApplicableRefactors' - if get(a:response, 'success', v:false) is v:false - \&& l:MenuCallback is v:null - let l:message = get(a:response, 'message', 'unknown') - call s:message('Error while getting applicable refactors. Reason: ' . l:message) - - return - endif - - let l:result = get(a:response, 'body', []) - - if len(l:result) == 0 - call s:message('No applicable refactors available.') - - return - endif - - let l:refactors = [] - - for l:item in l:result - for l:action in l:item.actions - call add(l:refactors, { - \ 'name': l:action.description, - \ 'id': [l:item.name, l:action.name], - \}) - endfor - endfor - - if l:MenuCallback isnot v:null - call l:MenuCallback( - \ l:data, - \ map(copy(l:refactors), '[''tsserver'', v:val]') - \) - - return - endif - - let l:refactor_no = 1 - let l:refactorstring = "Applicable refactors:\n" - - for l:refactor in l:refactors - let l:refactorstring .= l:refactor_no . ') ' - \ . l:refactor.name . "\n" - let l:refactor_no += 1 - endfor - - let l:refactorstring .= 'Type number and (empty cancels): ' - - let l:refactor_to_apply = ale#util#Input(l:refactorstring, '') - let l:refactor_to_apply = str2nr(l:refactor_to_apply) - - if l:refactor_to_apply == 0 - return - endif - - let l:id = l:refactors[l:refactor_to_apply - 1].id - - call ale#codefix#ApplyTSServerCodeAction( - \ l:data, - \ l:refactors[l:refactor_to_apply - 1], - \) - elseif get(a:response, 'command', '') is# 'getEditsForRefactor' - if get(a:response, 'success', v:false) is v:false - let l:message = get(a:response, 'message', 'unknown') - call s:message('Error while getting edits for refactor. Reason: ' . l:message) - - return - endif - - call ale#code_action#HandleCodeAction( - \ { - \ 'description': 'editsForRefactor', - \ 'changes': a:response.body.edits, - \ }, - \ {}, - \) - endif -endfunction - -function! ale#codefix#ApplyLSPCodeAction(data, item) abort - if has_key(a:item, 'command') - \&& type(a:item.command) == v:t_dict - let l:command = a:item.command - let l:message = ale#lsp#message#ExecuteCommand( - \ l:command.command, - \ l:command.arguments, - \) - - let l:request_id = ale#lsp#Send(a:data.connection_id, l:message) - elseif has_key(a:item, 'command') && has_key(a:item, 'arguments') - \&& type(a:item.command) == v:t_string - let l:message = ale#lsp#message#ExecuteCommand( - \ a:item.command, - \ a:item.arguments, - \) - - let l:request_id = ale#lsp#Send(a:data.connection_id, l:message) - elseif has_key(a:item, 'edit') || has_key(a:item, 'arguments') - if has_key(a:item, 'edit') - let l:topass = a:item.edit - else - let l:topass = a:item.arguments[0] - endif - - let l:changes_map = ale#code_action#GetChanges(l:topass) - - if empty(l:changes_map) - return - endif - - let l:changes = ale#code_action#BuildChangesList(l:changes_map) - - call ale#code_action#HandleCodeAction( - \ { - \ 'description': 'codeaction', - \ 'changes': l:changes, - \ }, - \ {}, - \) - endif -endfunction - -function! ale#codefix#HandleLSPResponse(conn_id, response) abort - if has_key(a:response, 'method') - \ && a:response.method is# 'workspace/applyEdit' - \ && has_key(a:response, 'params') - let l:params = a:response.params - - let l:changes_map = ale#code_action#GetChanges(l:params.edit) - - if empty(l:changes_map) - return - endif - - let l:changes = ale#code_action#BuildChangesList(l:changes_map) - - call ale#code_action#HandleCodeAction( - \ { - \ 'description': 'applyEdit', - \ 'changes': l:changes, - \ }, - \ {} - \) - elseif has_key(a:response, 'id') - \&& has_key(s:codefix_map, a:response.id) - let l:data = remove(s:codefix_map, a:response.id) - let l:MenuCallback = get(l:data, 'menu_callback', v:null) - - let l:result = get(a:response, 'result') - - if type(l:result) != v:t_list - let l:result = [] - endif - - " Send the results to the menu callback, if set. - if l:MenuCallback isnot v:null - call l:MenuCallback( - \ l:data, - \ map(copy(l:result), '[''lsp'', v:val]') - \) - - return - endif - - if len(l:result) == 0 - call s:message('No code actions received from server') - - return - endif - - let l:codeaction_no = 1 - let l:codeactionstring = "Code Fixes:\n" - - for l:codeaction in l:result - let l:codeactionstring .= l:codeaction_no . ') ' - \ . l:codeaction.title . "\n" - let l:codeaction_no += 1 - endfor - - let l:codeactionstring .= 'Type number and (empty cancels): ' - - let l:codeaction_to_apply = ale#util#Input(l:codeactionstring, '') - let l:codeaction_to_apply = str2nr(l:codeaction_to_apply) - - if l:codeaction_to_apply == 0 - return - endif - - let l:item = l:result[l:codeaction_to_apply - 1] - - call ale#codefix#ApplyLSPCodeAction(l:data, l:item) - endif -endfunction - -function! s:FindError(buffer, line, column, end_line, end_column, linter_name) abort - let l:nearest_error = v:null - - if a:line == a:end_line - \&& a:column == a:end_column - \&& has_key(g:ale_buffer_info, a:buffer) - let l:nearest_error_diff = -1 - - for l:error in get(g:ale_buffer_info[a:buffer], 'loclist', []) - if has_key(l:error, 'code') - \ && (a:linter_name is v:null || l:error.linter_name is# a:linter_name) - \ && l:error.lnum == a:line - let l:diff = abs(l:error.col - a:column) - - if l:nearest_error_diff == -1 || l:diff < l:nearest_error_diff - let l:nearest_error_diff = l:diff - let l:nearest_error = l:error - endif - endif - endfor - endif - - return l:nearest_error -endfunction - -function! s:OnReady( -\ line, -\ column, -\ end_line, -\ end_column, -\ MenuCallback, -\ linter, -\ lsp_details, -\) abort - let l:id = a:lsp_details.connection_id - - if !ale#lsp#HasCapability(l:id, 'code_actions') - return - endif - - let l:buffer = a:lsp_details.buffer - - if a:linter.lsp is# 'tsserver' - let l:nearest_error = - \ s:FindError(l:buffer, a:line, a:column, a:end_line, a:end_column, a:linter.lsp) - - if l:nearest_error isnot v:null - let l:message = ale#lsp#tsserver_message#GetCodeFixes( - \ l:buffer, - \ a:line, - \ a:column, - \ a:line, - \ a:column, - \ [l:nearest_error.code], - \) - else - let l:message = ale#lsp#tsserver_message#GetApplicableRefactors( - \ l:buffer, - \ a:line, - \ a:column, - \ a:end_line, - \ a:end_column, - \) - endif - else - " Send a message saying the buffer has changed first, otherwise - " completions won't know what text is nearby. - call ale#lsp#NotifyForChanges(l:id, l:buffer) - - let l:diagnostics = [] - let l:nearest_error = - \ s:FindError(l:buffer, a:line, a:column, a:end_line, a:end_column, v:null) - - if l:nearest_error isnot v:null - let l:diagnostics = [ - \ { - \ 'code': l:nearest_error.code, - \ 'message': l:nearest_error.text, - \ 'range': { - \ 'start': { - \ 'line': l:nearest_error.lnum - 1, - \ 'character': l:nearest_error.col - 1, - \ }, - \ 'end': { - \ 'line': get(l:nearest_error, 'end_lnum', 1) - 1, - \ 'character': get(l:nearest_error, 'end_col', 0) - \ }, - \ }, - \ }, - \] - endif - - let l:message = ale#lsp#message#CodeAction( - \ l:buffer, - \ a:line, - \ a:column, - \ a:end_line, - \ a:end_column, - \ l:diagnostics, - \) - endif - - let l:Callback = a:linter.lsp is# 'tsserver' - \ ? function('ale#codefix#HandleTSServerResponse') - \ : function('ale#codefix#HandleLSPResponse') - - call ale#lsp#RegisterCallback(l:id, l:Callback) - - let l:request_id = ale#lsp#Send(l:id, l:message) - - let s:codefix_map[l:request_id] = { - \ 'connection_id': l:id, - \ 'buffer': l:buffer, - \ 'line': a:line, - \ 'column': a:column, - \ 'end_line': a:end_line, - \ 'end_column': a:end_column, - \ 'menu_callback': a:MenuCallback, - \} -endfunction - -function! s:ExecuteGetCodeFix(linter, range, MenuCallback) abort - let l:buffer = bufnr('') - - if a:range == 0 - let [l:line, l:column] = getpos('.')[1:2] - let l:end_line = l:line - let l:end_column = l:column - - " Expand the range to cover the current word, if there is one. - let l:cword = expand('') - - if !empty(l:cword) - let l:search_pos = searchpos('\V' . l:cword, 'bn', l:line) - - if l:search_pos != [0, 0] - let l:column = l:search_pos[1] - let l:end_column = l:column + len(l:cword) - 1 - endif - endif - elseif mode() is# 'v' || mode() is# "\" - " You need to get the start and end in a different way when you're in - " visual mode. - let [l:line, l:column] = getpos('v')[1:2] - let [l:end_line, l:end_column] = getpos('.')[1:2] - else - let [l:line, l:column] = getpos("'<")[1:2] - let [l:end_line, l:end_column] = getpos("'>")[1:2] - endif - - let l:column = max([min([l:column, len(getline(l:line))]), 1]) - let l:end_column = min([l:end_column, len(getline(l:end_line))]) - - let l:Callback = function( - \ 's:OnReady', [l:line, l:column, l:end_line, l:end_column, a:MenuCallback] - \) - - call ale#lsp_linter#StartLSP(l:buffer, a:linter, l:Callback) -endfunction - -function! ale#codefix#Execute(range, ...) abort - if a:0 > 1 - throw 'Too many arguments' - endif - - let l:MenuCallback = get(a:000, 0, v:null) - let l:lsp_linters = [] - - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - call add(l:lsp_linters, l:linter) - endif - endfor - - if empty(l:lsp_linters) - if l:MenuCallback is v:null - call s:message('No active LSPs') - else - call l:MenuCallback({}, []) - endif - - return - endif - - for l:lsp_linter in l:lsp_linters - call s:ExecuteGetCodeFix(l:lsp_linter, a:range, l:MenuCallback) - endfor -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/command.vim b/dotfiles/.vim/plugged/ale/autoload/ale/command.vim deleted file mode 100644 index c9dc8d94..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/command.vim +++ /dev/null @@ -1,473 +0,0 @@ -" Author: w0rp -" Description: Functions for formatting command strings, running commands, and -" managing files during linting and fixing cycles. - -" This dictionary holds lists of files and directories to remove later. -if !exists('s:buffer_data') - let s:buffer_data = {} -endif - -" The regular expression used for formatting filenames with modifiers. -let s:path_format_regex = '\v\%s(%(:h|:t|:r|:e)*)' - -" Used to get the data in tests. -function! ale#command#GetData() abort - return deepcopy(s:buffer_data) -endfunction - -function! ale#command#ClearData() abort - let s:buffer_data = {} -endfunction - -function! ale#command#InitData(buffer) abort - if !has_key(s:buffer_data, a:buffer) - let s:buffer_data[a:buffer] = { - \ 'jobs': {}, - \ 'file_list': [], - \ 'directory_list': [], - \} - endif -endfunction - -" Set the cwd for commands that are about to run. -" Used internally. -function! ale#command#SetCwd(buffer, cwd) abort - call ale#command#InitData(a:buffer) - let s:buffer_data[a:buffer].cwd = a:cwd -endfunction - -function! ale#command#ResetCwd(buffer) abort - if has_key(s:buffer_data, a:buffer) - let s:buffer_data[a:buffer].cwd = v:null - endif -endfunction - -function! ale#command#ManageFile(buffer, file) abort - call ale#command#InitData(a:buffer) - call add(s:buffer_data[a:buffer].file_list, a:file) -endfunction - -function! ale#command#ManageDirectory(buffer, directory) abort - call ale#command#InitData(a:buffer) - call add(s:buffer_data[a:buffer].directory_list, a:directory) -endfunction - -function! ale#command#CreateFile(buffer) abort - " This variable can be set to 1 in tests to stub this out. - if get(g:, 'ale_create_dummy_temporary_file') - return 'TEMP' - endif - - let l:temporary_file = ale#util#Tempname() - call ale#command#ManageFile(a:buffer, l:temporary_file) - - return l:temporary_file -endfunction - -" Create a new temporary directory and manage it in one go. -function! ale#command#CreateDirectory(buffer) abort - " This variable can be set to 1 in tests to stub this out. - if get(g:, 'ale_create_dummy_temporary_file') - return 'TEMP_DIR' - endif - - let l:temporary_directory = ale#util#Tempname() - " Create the temporary directory for the file, unreadable by 'other' - " users. - call mkdir(l:temporary_directory, '', 0750) - call ale#command#ManageDirectory(a:buffer, l:temporary_directory) - - return l:temporary_directory -endfunction - -function! ale#command#RemoveManagedFiles(buffer) abort - let l:info = get(s:buffer_data, a:buffer, {}) - - if !empty(l:info) && empty(l:info.jobs) - " We can't delete anything in a sandbox, so wait until we escape from - " it to delete temporary files and directories. - if ale#util#InSandbox() - return - endif - - " Delete files with a call akin to a plan `rm` command. - for l:filename in l:info.file_list - call delete(l:filename) - endfor - - " Delete directories like `rm -rf`. - " Directories are handled differently from files, so paths that are - " intended to be single files can be set up for automatic deletion - " without accidentally deleting entire directories. - for l:directory in l:info.directory_list - call delete(l:directory, 'rf') - endfor - - call remove(s:buffer_data, a:buffer) - endif -endfunction - -function! ale#command#CreateTempFile(buffer, temporary_file, input) abort - if empty(a:temporary_file) - " There is no file, so we didn't create anything. - return 0 - endif - - " Use an existing list of lines of input if we have it, or get the lines - " from the file. - let l:lines = a:input isnot v:null ? a:input : getbufline(a:buffer, 1, '$') - - let l:temporary_directory = fnamemodify(a:temporary_file, ':h') - " Create the temporary directory for the file, unreadable by 'other' - " users. - call mkdir(l:temporary_directory, '', 0750) - " Automatically delete the directory later. - call ale#command#ManageDirectory(a:buffer, l:temporary_directory) - " Write the buffer out to a file. - call ale#util#Writefile(a:buffer, l:lines, a:temporary_file) - - return 1 -endfunction - -function! s:TemporaryFilename(buffer) abort - let l:filename = fnamemodify(bufname(a:buffer), ':t') - - if empty(l:filename) - " If the buffer's filename is empty, create a dummy filename. - let l:ft = getbufvar(a:buffer, '&filetype') - let l:filename = 'file' . ale#filetypes#GuessExtension(l:ft) - endif - - " Create a temporary filename, / - " The file itself will not be created by this function. - return ale#util#Tempname() . (has('win32') ? '\' : '/') . l:filename -endfunction - -" Given part of a command, replace any % with %%, so that no characters in -" the string will be replaced with filenames, etc. -function! ale#command#EscapeCommandPart(command_part) abort - return substitute(a:command_part, '%', '%%', 'g') -endfunction - -" Format a filename, converting it with filename mappings, if non-empty, -" and escaping it for putting into a command string. -" -" The filename can be modified. -function! s:FormatFilename(filename, mappings, modifiers) abort - let l:filename = a:filename - - if !empty(a:mappings) - let l:filename = ale#filename_mapping#Map(l:filename, a:mappings) - endif - - if !empty(a:modifiers) - let l:filename = fnamemodify(l:filename, a:modifiers) - endif - - return ale#Escape(l:filename) -endfunction - -" Produce a command prefix to check to a particular directory for a command. -" %s format markers with filename-modifiers can be used as the directory, and -" will be returned verbatim for formatting in paths relative to files. -function! ale#command#CdString(directory) abort - let l:match = matchstrpos(a:directory, s:path_format_regex) - " Do not escape the directory here if it's a valid format string. - " This allows us to use sequences like %s:h, %s:h:h, etc. - let l:directory = l:match[1:] == [0, len(a:directory)] - \ ? a:directory - \ : ale#Escape(a:directory) - - if has('win32') - return 'cd /d ' . l:directory . ' && ' - endif - - return 'cd ' . l:directory . ' && ' -endfunction - -" Given a command string, replace every... -" %s -> with the current filename -" %t -> with the name of an unused file in a temporary directory -" %% -> with a literal % -function! ale#command#FormatCommand( -\ buffer, -\ executable, -\ command, -\ pipe_file_if_needed, -\ input, -\ cwd, -\ mappings, -\) abort - let l:temporary_file = '' - let l:command = a:command - - if !empty(a:cwd) - let l:command = ale#command#CdString(a:cwd) . l:command - endif - - " First replace all uses of %%, used for literal percent characters, - " with an ugly string. - let l:command = substitute(l:command, '%%', '<>', 'g') - - " Replace %e with the escaped executable, if available. - if !empty(a:executable) && l:command =~# '%e' - let l:command = substitute(l:command, '%e', '\=ale#Escape(a:executable)', 'g') - endif - - " Replace all %s occurrences in the string with the name of the current - " file. - if l:command =~# '%s' - let l:filename = fnamemodify(bufname(a:buffer), ':p') - let l:command = substitute( - \ l:command, - \ s:path_format_regex, - \ '\=s:FormatFilename(l:filename, a:mappings, submatch(1))', - \ 'g' - \) - endif - - if a:input isnot v:false && l:command =~# '%t' - " Create a temporary filename, / - " The file itself will not be created by this function. - let l:temporary_file = s:TemporaryFilename(a:buffer) - let l:command = substitute( - \ l:command, - \ '\v\%t(%(:h|:t|:r|:e)*)', - \ '\=s:FormatFilename(l:temporary_file, a:mappings, submatch(1))', - \ 'g' - \) - endif - - " Finish formatting so %% becomes %. - let l:command = substitute(l:command, '<>', '%', 'g') - - if a:pipe_file_if_needed && empty(l:temporary_file) - " If we are to send the Vim buffer to a command, we'll do it - " in the shell. We'll write out the file to a temporary file, - " and then read it back in, in the shell. - let l:temporary_file = s:TemporaryFilename(a:buffer) - let l:command = l:command . ' < ' . ale#Escape(l:temporary_file) - endif - - let l:file_created = ale#command#CreateTempFile( - \ a:buffer, - \ l:temporary_file, - \ a:input, - \) - - return [l:temporary_file, l:command, l:file_created] -endfunction - -function! ale#command#StopJobs(buffer, job_type) abort - let l:info = get(s:buffer_data, a:buffer, {}) - - if !empty(l:info) - let l:new_map = {} - - for [l:job_id, l:job_type] in items(l:info.jobs) - let l:job_id = str2nr(l:job_id) - - if a:job_type is# 'all' || a:job_type is# l:job_type - call ale#job#Stop(l:job_id) - else - let l:new_map[l:job_id] = l:job_type - endif - endfor - - let l:info.jobs = l:new_map - endif -endfunction - -function! s:GatherOutput(line_list, job_id, line) abort - call add(a:line_list, a:line) -endfunction - -function! s:ExitCallback(buffer, line_list, Callback, data) abort - if !has_key(s:buffer_data, a:buffer) - return - endif - - let l:jobs = s:buffer_data[a:buffer].jobs - - if !has_key(l:jobs, a:data.job_id) - return - endif - - let l:job_type = remove(l:jobs, a:data.job_id) - - if g:ale_history_enabled - call ale#history#SetExitCode(a:buffer, a:data.job_id, a:data.exit_code) - - " Log the output of the command for ALEInfo if we should. - if g:ale_history_log_output && a:data.log_output is 1 - call ale#history#RememberOutput( - \ a:buffer, - \ a:data.job_id, - \ a:line_list[:] - \) - endif - endif - - " If the callback starts any new jobs, use the same job type for them. - call setbufvar(a:buffer, 'ale_job_type', l:job_type) - let l:value = a:Callback(a:buffer, a:line_list, { - \ 'exit_code': a:data.exit_code, - \ 'temporary_file': a:data.temporary_file, - \}) - - let l:result = a:data.result - let l:result.value = l:value - - " Set the default cwd for this buffer in this call stack. - call ale#command#SetCwd(a:buffer, l:result.cwd) - - try - if get(l:result, 'result_callback', v:null) isnot v:null - call call(l:result.result_callback, [l:value]) - endif - finally - call ale#command#ResetCwd(a:buffer) - endtry -endfunction - -function! ale#command#Run(buffer, command, Callback, ...) abort - let l:options = get(a:000, 0, {}) - - if len(a:000) > 1 - throw 'Too many arguments!' - endif - - let l:output_stream = get(l:options, 'output_stream', 'stdout') - let l:line_list = [] - let l:cwd = get(l:options, 'cwd', v:null) - - if l:cwd is v:null - " Default the working directory to whatever it was for the last - " command run in the chain. - let l:cwd = get(get(s:buffer_data, a:buffer, {}), 'cwd', v:null) - endif - - let [l:temporary_file, l:command, l:file_created] = ale#command#FormatCommand( - \ a:buffer, - \ get(l:options, 'executable', ''), - \ a:command, - \ get(l:options, 'read_buffer', 0), - \ get(l:options, 'input', v:null), - \ l:cwd, - \ get(l:options, 'filename_mappings', []), - \) - let l:command = ale#job#PrepareCommand(a:buffer, l:command) - let l:job_options = { - \ 'exit_cb': {job_id, exit_code -> s:ExitCallback( - \ a:buffer, - \ l:line_list, - \ a:Callback, - \ { - \ 'job_id': job_id, - \ 'exit_code': exit_code, - \ 'temporary_file': l:temporary_file, - \ 'log_output': get(l:options, 'log_output', 1), - \ 'result': l:result, - \ } - \ )}, - \ 'mode': 'nl', - \} - - if l:output_stream is# 'stdout' - let l:job_options.out_cb = function('s:GatherOutput', [l:line_list]) - elseif l:output_stream is# 'stderr' - let l:job_options.err_cb = function('s:GatherOutput', [l:line_list]) - elseif l:output_stream is# 'both' - let l:job_options.out_cb = function('s:GatherOutput', [l:line_list]) - let l:job_options.err_cb = function('s:GatherOutput', [l:line_list]) - endif - - let l:status = 'failed' - - if get(g:, 'ale_run_synchronously') == 1 - if get(g:, 'ale_emulate_job_failure') == 1 - let l:job_id = 0 - else - " Generate a fake job ID for tests. - let s:fake_job_id = get(s:, 'fake_job_id', 0) + 1 - let l:job_id = s:fake_job_id - endif - elseif has('win32') - let l:job_id = ale#job#StartWithCmd(l:command, l:job_options) - else - let l:job_id = ale#job#Start(l:command, l:job_options) - endif - - if l:job_id - let l:status = 'started' - let l:job_type = getbufvar(a:buffer, 'ale_job_type', 'all') - - call ale#command#InitData(a:buffer) - let s:buffer_data[a:buffer].jobs[l:job_id] = l:job_type - endif - - if g:ale_history_enabled - call ale#history#Add(a:buffer, l:status, l:job_id, l:command) - endif - - if !l:job_id - return 0 - endif - - " We'll return this Dictionary. A `result_callback` can be assigned to it - " later for capturing the result of a:Callback. - " - " The `_deferred_job_id` is used for both checking the type of object, and - " for checking the job ID and status. - " - " The cwd is kept and used as the default value for the next command in - " the chain. - " - " The original command here is used in tests. - let l:result = { - \ '_deferred_job_id': l:job_id, - \ 'executable': get(l:options, 'executable', ''), - \ 'cwd': l:cwd, - \ 'command': a:command, - \} - - if get(g:, 'ale_run_synchronously') == 1 && l:job_id - if !exists('g:ale_run_synchronously_callbacks') - let g:ale_run_synchronously_callbacks = [] - endif - - if get(g:, 'ale_run_synchronously_emulate_commands', 0) - call add( - \ g:ale_run_synchronously_callbacks, - \ {exit_code, output -> [ - \ extend(l:line_list, output), - \ l:job_options.exit_cb(l:job_id, exit_code), - \ ]} - \) - else - " Run a command synchronously if this test option is set. - call extend(l:line_list, systemlist( - \ type(l:command) is v:t_list - \ ? join(l:command[0:1]) . ' ' . ale#Escape(l:command[2]) - \ : l:command - \)) - - " Don't capture output when the callbacks aren't set. - if !has_key(l:job_options, 'out_cb') - \&& !has_key(l:job_options, 'err_cb') - let l:line_list = [] - endif - - call add( - \ g:ale_run_synchronously_callbacks, - \ {-> l:job_options.exit_cb(l:job_id, v:shell_error)} - \) - endif - endif - - return l:result -endfunction - -function! ale#command#IsDeferred(value) abort - return type(a:value) is v:t_dict && has_key(a:value, '_deferred_job_id') -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/completion.vim b/dotfiles/.vim/plugged/ale/autoload/ale/completion.vim deleted file mode 100644 index 920c03cc..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/completion.vim +++ /dev/null @@ -1,1069 +0,0 @@ -" Author: w0rp -" Description: Completion support for LSP linters -scriptencoding utf-8 - -" The omnicompletion menu is shown through a special Plug mapping which is -" only valid in Insert mode. This way, feedkeys() won't send these keys if you -" quit Insert mode quickly enough. -inoremap (ale_show_completion_menu) -" If we hit the key sequence in normal mode, then we won't show the menu, so -" we should restore the old settings right away. -nnoremap (ale_show_completion_menu) :call ale#completion#RestoreCompletionOptions() -cnoremap (ale_show_completion_menu) -vnoremap (ale_show_completion_menu) -onoremap (ale_show_completion_menu) - -let g:ale_completion_delay = get(g:, 'ale_completion_delay', 100) -let g:ale_completion_excluded_words = get(g:, 'ale_completion_excluded_words', []) -let g:ale_completion_max_suggestions = get(g:, 'ale_completion_max_suggestions', 50) -let g:ale_completion_autoimport = get(g:, 'ale_completion_autoimport', 1) -let g:ale_completion_tsserver_remove_warnings = get(g:, 'ale_completion_tsserver_remove_warnings', 0) - -let s:timer_id = -1 -let s:last_done_pos = [] - -" CompletionItemKind values from the LSP protocol. -let g:ale_lsp_types = { -\ 1: 'text', -\ 2: 'method', -\ 3: 'function', -\ 4: 'constructor', -\ 5: 'field', -\ 6: 'variable', -\ 7: 'class', -\ 8: 'interface', -\ 9: 'module', -\ 10: 'property', -\ 11: 'unit', -\ 12: 'value', -\ 13: 'enum', -\ 14: 'keyword', -\ 15: 'snippet', -\ 16: 'color', -\ 17: 'file', -\ 18: 'reference', -\ 19: 'folder', -\ 20: 'enum_member', -\ 21: 'constant', -\ 22: 'struct', -\ 23: 'event', -\ 24: 'operator', -\ 25: 'type_parameter', -\ } - -" from https://github.com/microsoft/TypeScript/blob/29becf05012bfa7ba20d50b0d16813971e46b8a6/lib/protocol.d.ts#L2472 -let g:ale_tsserver_types = { -\ 'warning': 'text', -\ 'keyword': 'keyword', -\ 'script': 'file', -\ 'module': 'module', -\ 'class': 'class', -\ 'local class': 'class', -\ 'interface': 'interface', -\ 'type': 'class', -\ 'enum': 'enum', -\ 'enum member': 'enum_member', -\ 'var': 'variable', -\ 'local var': 'variable', -\ 'function': 'function', -\ 'local function': 'function', -\ 'method': 'method', -\ 'getter': 'property', -\ 'setter': 'method', -\ 'property': 'property', -\ 'constructor': 'constructor', -\ 'call': 'method', -\ 'index': 'index', -\ 'construct': 'constructor', -\ 'parameter': 'parameter', -\ 'type parameter': 'type_parameter', -\ 'primitive type': 'unit', -\ 'label': 'text', -\ 'alias': 'class', -\ 'const': 'constant', -\ 'let': 'variable', -\ 'directory': 'folder', -\ 'external module name': 'text', -\ 'JSX attribute': 'parameter', -\ 'string': 'text' -\ } - -" For compatibility reasons, we only use built in VIM completion kinds -" See :help complete-items for Vim completion kinds -let g:ale_completion_symbols = get(g:, 'ale_completion_symbols', { -\ 'text': 'v', -\ 'method': 'f', -\ 'function': 'f', -\ 'constructor': 'f', -\ 'field': 'm', -\ 'variable': 'v', -\ 'class': 't', -\ 'interface': 't', -\ 'module': 'd', -\ 'property': 'm', -\ 'unit': 'v', -\ 'value': 'v', -\ 'enum': 't', -\ 'keyword': 'v', -\ 'snippet': 'v', -\ 'color': 'v', -\ 'file': 'v', -\ 'reference': 'v', -\ 'folder': 'v', -\ 'enum_member': 'm', -\ 'constant': 'm', -\ 'struct': 't', -\ 'event': 'v', -\ 'operator': 'f', -\ 'type_parameter': 'p', -\ '': 'v' -\ }) - -let s:LSP_INSERT_TEXT_FORMAT_PLAIN = 1 -let s:LSP_INSERT_TEXT_FORMAT_SNIPPET = 2 - -let s:lisp_regex = '\v[a-zA-Z_\-][a-zA-Z_\-0-9]*$' - -" Regular expressions for checking the characters in the line before where -" the insert cursor is. If one of these matches, we'll check for completions. -let s:should_complete_map = { -\ '': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$', -\ 'clojure': s:lisp_regex, -\ 'lisp': s:lisp_regex, -\ 'typescript': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|''$|"$', -\ 'rust': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$', -\ 'cpp': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|::$|-\>$', -\ 'c': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$|\.$|-\>$', -\} - -" Regular expressions for finding the start column to replace with completion. -let s:omni_start_map = { -\ '': '\v[a-zA-Z$_][a-zA-Z$_0-9]*$', -\ 'racket': '\k\+$', -\} - -" A map of exact characters for triggering LSP completions. Do not forget to -" update self.input_patterns in ale.py in updating entries in this map. -let s:trigger_character_map = { -\ '': ['.'], -\ 'typescript': ['.', '''', '"'], -\ 'rust': ['.', '::'], -\ 'cpp': ['.', '::', '->'], -\ 'c': ['.', '->'], -\} - -function! s:GetFiletypeValue(map, filetype) abort - for l:part in reverse(split(a:filetype, '\.')) - let l:regex = get(a:map, l:part, []) - - if !empty(l:regex) - return l:regex - endif - endfor - - " Use the default regex for other files. - return a:map[''] -endfunction - -" Check if we should look for completions for a language. -function! ale#completion#GetPrefix(filetype, line, column) abort - let l:regex = s:GetFiletypeValue(s:should_complete_map, a:filetype) - - " The column we're using completions for is where we are inserting text, - " like so: - " abc - " ^ - " So we need check the text in the column before that position. - return matchstr(getline(a:line)[: a:column - 2], l:regex) -endfunction - -function! ale#completion#GetTriggerCharacter(filetype, prefix) abort - if empty(a:prefix) - return '' - endif - - let l:char_list = s:GetFiletypeValue(s:trigger_character_map, a:filetype) - - if index(l:char_list, a:prefix) >= 0 - return a:prefix - endif - - return '' -endfunction - -function! ale#completion#Filter( -\ buffer, -\ filetype, -\ suggestions, -\ prefix, -\ exact_prefix_match, -\) abort - let l:excluded_words = ale#Var(a:buffer, 'completion_excluded_words') - - if empty(a:prefix) - let l:filtered_suggestions = a:suggestions - else - let l:triggers = s:GetFiletypeValue(s:trigger_character_map, a:filetype) - - " For completing... - " foo. - " ^ - " We need to include all of the given suggestions. - if index(l:triggers, a:prefix) >= 0 || empty(a:prefix) - let l:filtered_suggestions = a:suggestions - else - let l:filtered_suggestions = [] - - " Filter suggestions down to those starting with the prefix we - " used for finding suggestions in the first place. - " - " Some completion tools will include suggestions which don't even - " start with the characters we have already typed. - for l:item in a:suggestions - " A List of String values or a List of completion item - " Dictionaries is accepted here. - let l:word = type(l:item) is v:t_string ? l:item : l:item.word - - if a:exact_prefix_match - " Add suggestions if the word is an exact match. - if l:word is# a:prefix - call add(l:filtered_suggestions, l:item) - endif - else - " Add suggestions if the suggestion starts with a - " case-insensitive match for the prefix. - if l:word[: len(a:prefix) - 1] is? a:prefix - call add(l:filtered_suggestions, l:item) - endif - endif - endfor - endif - endif - - if !empty(l:excluded_words) - " Copy the List if needed. We don't want to modify the argument. - " We shouldn't make a copy if we don't need to. - if l:filtered_suggestions is a:suggestions - let l:filtered_suggestions = copy(a:suggestions) - endif - - " Remove suggestions with words in the exclusion List. - call filter( - \ l:filtered_suggestions, - \ 'index(l:excluded_words, type(v:val) is v:t_string ? v:val : v:val.word) < 0', - \) - endif - - return l:filtered_suggestions -endfunction - -function! s:ReplaceCompletionOptions(source) abort - " Remember the old omnifunc value, if there is one. - " If we don't store an old one, we'll just never reset the option. - " This will stop some random exceptions from appearing. - if !exists('b:ale_old_omnifunc') && !empty(&l:omnifunc) - let b:ale_old_omnifunc = &l:omnifunc - endif - - let &l:omnifunc = 'ale#completion#AutomaticOmniFunc' - - if a:source is# 'ale-automatic' - if !exists('b:ale_old_completeopt') - let b:ale_old_completeopt = &l:completeopt - endif - - let l:opt_list = split(&l:completeopt, ',') - " The menu and noinsert options must be set, or automatic completion - " will be annoying. - let l:new_opt_list = ['menu', 'menuone', 'noinsert'] - - " Permit some other completion options, provided users have set them. - for l:opt in ['preview', 'popup', 'noselect'] - if index(l:opt_list, l:opt) >= 0 - call add(l:new_opt_list, l:opt) - endif - endfor - - let &l:completeopt = join(l:new_opt_list, ',') - endif -endfunction - -function! ale#completion#RestoreCompletionOptions() abort - " Reset settings when completion is done. - if exists('b:ale_old_omnifunc') - if b:ale_old_omnifunc isnot# 'pythoncomplete#Complete' - let &l:omnifunc = b:ale_old_omnifunc - endif - - unlet b:ale_old_omnifunc - endif - - if exists('b:ale_old_completeopt') - let &l:completeopt = b:ale_old_completeopt - unlet b:ale_old_completeopt - endif -endfunction - -function! ale#completion#GetCompletionPosition() abort - if !exists('b:ale_completion_info') - return 0 - endif - - let l:line = b:ale_completion_info.line - let l:column = b:ale_completion_info.column - let l:regex = s:GetFiletypeValue(s:omni_start_map, &filetype) - let l:up_to_column = getline(l:line)[: l:column - 2] - let l:match = matchstr(l:up_to_column, l:regex) - - return l:column - len(l:match) - 1 -endfunction - -function! ale#completion#GetCompletionPositionForDeoplete(input) abort - return match(a:input, '\k*$') -endfunction - -function! ale#completion#GetCompletionResult() abort - if exists('b:ale_completion_result') - return b:ale_completion_result - endif - - return v:null -endfunction - -function! ale#completion#AutomaticOmniFunc(findstart, base) abort - if a:findstart - return ale#completion#GetCompletionPosition() - else - let l:result = ale#completion#GetCompletionResult() - - let l:source = get(get(b:, 'ale_completion_info', {}), 'source', '') - - if l:source is# 'ale-automatic' || l:source is# 'ale-manual' - call s:ReplaceCompletionOptions(l:source) - endif - - return l:result isnot v:null ? l:result : [] - endif -endfunction - -function! s:OpenCompletionMenu(...) abort - if !&l:paste - call ale#util#FeedKeys("\(ale_show_completion_menu)") - endif -endfunction - -function! ale#completion#Show(result) abort - let l:source = get(get(b:, 'ale_completion_info', {}), 'source', '') - - if ale#util#Mode() isnot# 'i' && l:source isnot# 'ale-import' - return - endif - - " Set the list in the buffer. - let b:ale_completion_result = a:result - - " Don't try to open the completion menu if there's nothing to show. - if empty(b:ale_completion_result) - if l:source is# 'ale-import' - " If we ran completion from :ALEImport, - " tell the user that nothing is going to happen. - call s:message('No possible imports found.') - endif - - return - endif - - " Replace completion options shortly before opening the menu. - if l:source is# 'ale-automatic' || l:source is# 'ale-manual' - call s:ReplaceCompletionOptions(l:source) - - call timer_start(0, function('s:OpenCompletionMenu')) - endif - - if l:source is# 'ale-callback' - call b:CompleteCallback(b:ale_completion_result) - endif - - if l:source is# 'ale-import' - call ale#completion#HandleUserData(b:ale_completion_result[0]) - - let l:text_changed = '' . g:ale_lint_on_text_changed - - " Check the buffer again right away, if linting is enabled. - if g:ale_enabled - \&& ( - \ l:text_changed is# '1' - \ || l:text_changed is# 'always' - \ || l:text_changed is# 'normal' - \ || l:text_changed is# 'insert' - \) - call ale#Queue(0, '') - endif - endif -endfunction - -function! ale#completion#GetAllTriggers() abort - return deepcopy(s:trigger_character_map) -endfunction - -function! ale#completion#GetCompletionKind(kind) abort - let l:lsp_symbol = get(g:ale_lsp_types, a:kind, '') - - if !empty(l:lsp_symbol) - return l:lsp_symbol - endif - - return get(g:ale_tsserver_types, a:kind, '') -endfunction - -function! ale#completion#GetCompletionSymbols(kind) abort - let l:kind = ale#completion#GetCompletionKind(a:kind) - let l:symbol = get(g:ale_completion_symbols, l:kind, '') - - if !empty(l:symbol) - return l:symbol - endif - - return get(g:ale_completion_symbols, '', 'v') -endfunction - -function! s:CompletionStillValid(request_id) abort - let [l:line, l:column] = getpos('.')[1:2] - - return has_key(b:, 'ale_completion_info') - \&& ( - \ ale#util#Mode() is# 'i' - \ || b:ale_completion_info.source is# 'ale-import' - \) - \&& b:ale_completion_info.request_id == a:request_id - \&& b:ale_completion_info.line == l:line - \&& ( - \ b:ale_completion_info.column == l:column - \ || b:ale_completion_info.source is# 'ale-omnifunc' - \ || b:ale_completion_info.source is# 'ale-callback' - \ || b:ale_completion_info.source is# 'ale-import' - \) -endfunction - -function! ale#completion#ParseTSServerCompletions(response) abort - let l:names = [] - - for l:suggestion in a:response.body - let l:kind = get(l:suggestion, 'kind', '') - - if g:ale_completion_tsserver_remove_warnings == 0 || l:kind isnot# 'warning' - call add(l:names, { - \ 'word': l:suggestion.name, - \ 'source': get(l:suggestion, 'source', ''), - \}) - endif - endfor - - return l:names -endfunction - -function! ale#completion#ParseTSServerCompletionEntryDetails(response) abort - let l:buffer = bufnr('') - let l:results = [] - let l:names_with_details = [] - let l:info = get(b:, 'ale_completion_info', {}) - - for l:suggestion in a:response.body - let l:displayParts = [] - let l:local_name = v:null - - for l:action in get(l:suggestion, 'codeActions', []) - call add(l:displayParts, l:action.description . ' ') - endfor - - for l:part in l:suggestion.displayParts - " Stop on stop on line breaks for the menu. - if get(l:part, 'kind') is# 'lineBreak' - break - endif - - if get(l:part, 'kind') is# 'localName' - let l:local_name = l:part.text - endif - - call add(l:displayParts, l:part.text) - endfor - - " Each one of these parts has 'kind' properties - let l:documentationParts = [] - - for l:part in get(l:suggestion, 'documentation', []) - call add(l:documentationParts, l:part.text) - endfor - - " See :help complete-items - let l:result = { - \ 'word': ( - \ l:suggestion.name is# 'default' - \ && l:suggestion.kind is# 'alias' - \ && !empty(l:local_name) - \ ? l:local_name - \ : l:suggestion.name - \ ), - \ 'kind': ale#completion#GetCompletionSymbols(l:suggestion.kind), - \ 'icase': 1, - \ 'menu': join(l:displayParts, ''), - \ 'dup': get(l:info, 'additional_edits_only', 0) - \ || g:ale_completion_autoimport, - \ 'info': join(l:documentationParts, ''), - \} - " This flag is used to tell if this completion came from ALE or not. - let l:user_data = {'_ale_completion_item': 1} - - if has_key(l:suggestion, 'codeActions') - let l:user_data.code_actions = l:suggestion.codeActions - endif - - let l:result.user_data = json_encode(l:user_data) - - " Include this item if we'll accept any items, - " or if we only want items with additional edits, and this has them. - if !get(l:info, 'additional_edits_only', 0) - \|| has_key(l:user_data, 'code_actions') - call add(l:results, l:result) - endif - endfor - - let l:names = getbufvar(l:buffer, 'ale_tsserver_completion_names', []) - - if !empty(l:names) && len(l:names) != len(l:results) - let l:names_with_details = map(copy(l:results), 'v:val.word') - let l:missing_names = filter( - \ copy(l:names), - \ 'index(l:names_with_details, v:val.word) < 0', - \) - - for l:name in l:missing_names - call add(l:results, { - \ 'word': l:name.word, - \ 'kind': 'v', - \ 'icase': 1, - \ 'menu': '', - \ 'info': '', - \ 'user_data': json_encode({'_ale_completion_item': 1}), - \}) - endfor - endif - - return l:results -endfunction - -function! ale#completion#NullFilter(buffer, item) abort - return 1 -endfunction - -function! ale#completion#ParseLSPCompletions(response) abort - let l:buffer = bufnr('') - let l:info = get(b:, 'ale_completion_info', {}) - let l:Filter = get(l:info, 'completion_filter', v:null) - - if l:Filter is v:null - let l:Filter = function('ale#completion#NullFilter') - else - let l:Filter = ale#util#GetFunction(l:Filter) - endif - - let l:item_list = [] - - if type(get(a:response, 'result')) is v:t_list - let l:item_list = a:response.result - elseif type(get(a:response, 'result')) is v:t_dict - \&& type(get(a:response.result, 'items')) is v:t_list - let l:item_list = a:response.result.items - endif - - let l:results = [] - - for l:item in l:item_list - if !call(l:Filter, [l:buffer, l:item]) - continue - endif - - if get(l:item, 'insertTextFormat', s:LSP_INSERT_TEXT_FORMAT_PLAIN) is s:LSP_INSERT_TEXT_FORMAT_PLAIN - \&& type(get(l:item, 'textEdit')) is v:t_dict - let l:text = l:item.textEdit.newText - elseif type(get(l:item, 'insertText')) is v:t_string - let l:text = l:item.insertText - else - let l:text = l:item.label - endif - - let l:word = matchstr(l:text, '\v^[^(]+') - - if empty(l:word) - continue - endif - - " Don't use LSP items with additional text edits when autoimport for - " completions is turned off. - if !empty(get(l:item, 'additionalTextEdits')) - \&& !( - \ get(l:info, 'additional_edits_only', 0) - \ || g:ale_completion_autoimport - \) - continue - endif - - let l:doc = get(l:item, 'documentation', '') - - if type(l:doc) is v:t_dict && has_key(l:doc, 'value') - let l:doc = l:doc.value - endif - - " Collapse whitespaces and line breaks into a single space. - let l:detail = substitute(get(l:item, 'detail', ''), '\_s\+', ' ', 'g') - - let l:result = { - \ 'word': l:word, - \ 'kind': ale#completion#GetCompletionSymbols(get(l:item, 'kind', '')), - \ 'icase': 1, - \ 'menu': l:detail, - \ 'dup': get(l:info, 'additional_edits_only', 0) - \ || g:ale_completion_autoimport, - \ 'info': (type(l:doc) is v:t_string ? l:doc : ''), - \} - " This flag is used to tell if this completion came from ALE or not. - let l:user_data = {'_ale_completion_item': 1} - - if has_key(l:item, 'additionalTextEdits') - \ && l:item.additionalTextEdits isnot v:null - let l:text_changes = [] - - for l:edit in l:item.additionalTextEdits - call add(l:text_changes, { - \ 'start': { - \ 'line': l:edit.range.start.line + 1, - \ 'offset': l:edit.range.start.character + 1, - \ }, - \ 'end': { - \ 'line': l:edit.range.end.line + 1, - \ 'offset': l:edit.range.end.character + 1, - \ }, - \ 'newText': l:edit.newText, - \}) - endfor - - if !empty(l:text_changes) - let l:user_data.code_actions = [{ - \ 'description': 'completion', - \ 'changes': [ - \ { - \ 'fileName': expand('#' . l:buffer . ':p'), - \ 'textChanges': l:text_changes, - \ }, - \ ], - \}] - endif - endif - - let l:result.user_data = json_encode(l:user_data) - - " Include this item if we'll accept any items, - " or if we only want items with additional edits, and this has them. - if !get(l:info, 'additional_edits_only', 0) - \|| has_key(l:user_data, 'code_actions') - call add(l:results, l:result) - endif - endfor - - if has_key(l:info, 'prefix') - let l:results = ale#completion#Filter( - \ l:buffer, - \ &filetype, - \ l:results, - \ l:info.prefix, - \ get(l:info, 'additional_edits_only', 0), - \) - endif - - return l:results[: g:ale_completion_max_suggestions - 1] -endfunction - -function! ale#completion#HandleTSServerResponse(conn_id, response) abort - if !s:CompletionStillValid(get(a:response, 'request_seq')) - return - endif - - if !has_key(a:response, 'body') - return - endif - - let l:buffer = bufnr('') - let l:command = get(a:response, 'command', '') - - if l:command is# 'completions' - let l:names = ale#completion#Filter( - \ l:buffer, - \ &filetype, - \ ale#completion#ParseTSServerCompletions(a:response), - \ b:ale_completion_info.prefix, - \ get(b:ale_completion_info, 'additional_edits_only', 0), - \)[: g:ale_completion_max_suggestions - 1] - - " We need to remember some names for tsserver, as it doesn't send - " details back for everything we send. - call setbufvar(l:buffer, 'ale_tsserver_completion_names', l:names) - - if empty(l:names) - " Response with no results now and skip making a redundant request - " for nothing. - call ale#completion#Show([]) - else - let l:identifiers = [] - - for l:name in l:names - let l:identifier = { - \ 'name': l:name.word, - \} - let l:source = get(l:name, 'source', '') - - " Empty source results in no details for the completed item - if !empty(l:source) - call extend(l:identifier, { 'source': l:source }) - endif - - call add(l:identifiers, l:identifier) - endfor - - let b:ale_completion_info.request_id = ale#lsp#Send( - \ b:ale_completion_info.conn_id, - \ ale#lsp#tsserver_message#CompletionEntryDetails( - \ l:buffer, - \ b:ale_completion_info.line, - \ b:ale_completion_info.column, - \ l:identifiers, - \ ), - \) - endif - elseif l:command is# 'completionEntryDetails' - call ale#completion#Show( - \ ale#completion#ParseTSServerCompletionEntryDetails(a:response), - \) - endif -endfunction - - -function! ale#completion#HandleLSPResponse(conn_id, response) abort - if !s:CompletionStillValid(get(a:response, 'id')) - return - endif - - call ale#completion#Show( - \ ale#completion#ParseLSPCompletions(a:response), - \) -endfunction - -function! s:OnReady(linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - - if !ale#lsp#HasCapability(l:id, 'completion') - return - endif - - let l:buffer = a:lsp_details.buffer - - " If we have sent a completion request already, don't send another. - if b:ale_completion_info.request_id - return - endif - - let l:Callback = a:linter.lsp is# 'tsserver' - \ ? function('ale#completion#HandleTSServerResponse') - \ : function('ale#completion#HandleLSPResponse') - call ale#lsp#RegisterCallback(l:id, l:Callback) - - if a:linter.lsp is# 'tsserver' - if get(g:, 'ale_completion_tsserver_autoimport') is 1 - " no-custom-checks - echom '`g:ale_completion_tsserver_autoimport` is deprecated. Use `g:ale_completion_autoimport` instead.' - endif - - let l:message = ale#lsp#tsserver_message#Completions( - \ l:buffer, - \ b:ale_completion_info.line, - \ b:ale_completion_info.column, - \ b:ale_completion_info.prefix, - \ get(b:ale_completion_info, 'additional_edits_only', 0) - \ || g:ale_completion_autoimport, - \) - else - " Send a message saying the buffer has changed first, otherwise - " completions won't know what text is nearby. - call ale#lsp#NotifyForChanges(l:id, l:buffer) - - " For LSP completions, we need to clamp the column to the length of - " the line. python-language-server and perhaps others do not implement - " this correctly. - let l:message = ale#lsp#message#Completion( - \ l:buffer, - \ b:ale_completion_info.line, - \ b:ale_completion_info.column, - \ ale#completion#GetTriggerCharacter(&filetype, b:ale_completion_info.prefix), - \) - endif - - let l:request_id = ale#lsp#Send(l:id, l:message) - - if l:request_id - let b:ale_completion_info.conn_id = l:id - let b:ale_completion_info.request_id = l:request_id - - if has_key(a:linter, 'completion_filter') - let b:ale_completion_info.completion_filter = a:linter.completion_filter - endif - endif -endfunction - -" This function can be called to check if ALE can provide completion data for -" the current buffer. 1 will be returned if there's a potential source of -" completion data ALE can use, and 0 will be returned otherwise. -function! ale#completion#CanProvideCompletions() abort - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - return 1 - endif - endfor - - return 0 -endfunction - -" This function can be used to manually trigger autocomplete, even when -" g:ale_completion_enabled is set to false -function! ale#completion#GetCompletions(...) abort - let l:source = get(a:000, 0, '') - let l:options = get(a:000, 1, {}) - - if len(a:000) > 2 - throw 'Too many arguments!' - endif - - let l:CompleteCallback = get(l:options, 'callback', v:null) - - if l:CompleteCallback isnot v:null - let b:CompleteCallback = l:CompleteCallback - endif - - if has_key(l:options, 'line') && has_key(l:options, 'column') - " Use a provided line and column, if given. - let l:line = l:options.line - let l:column = l:options.column - else - let [l:line, l:column] = getpos('.')[1:2] - endif - - if has_key(l:options, 'prefix') - let l:prefix = l:options.prefix - else - let l:prefix = ale#completion#GetPrefix(&filetype, l:line, l:column) - endif - - if l:source is# 'ale-automatic' && empty(l:prefix) - return 0 - endif - - let l:line_length = len(getline('.')) - - let b:ale_completion_info = { - \ 'line': l:line, - \ 'line_length': l:line_length, - \ 'column': l:column, - \ 'prefix': l:prefix, - \ 'conn_id': 0, - \ 'request_id': 0, - \ 'source': l:source, - \} - unlet! b:ale_completion_result - - if has_key(l:options, 'additional_edits_only') - let b:ale_completion_info.additional_edits_only = - \ l:options.additional_edits_only - endif - - let l:buffer = bufnr('') - let l:Callback = function('s:OnReady') - - let l:started = 0 - - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - if ale#lsp_linter#StartLSP(l:buffer, l:linter, l:Callback) - let l:started = 1 - endif - endif - endfor - - return l:started -endfunction - -function! s:message(message) abort - call ale#util#Execute('echom ' . string(a:message)) -endfunction - -" This function implements the :ALEImport command. -function! ale#completion#Import() abort - let l:word = expand('') - - if empty(l:word) - call s:message('Nothing to complete at cursor!') - - return - endif - - let [l:line, l:column] = getpos('.')[1:2] - let l:column = searchpos('\V' . escape(l:word, '/\'), 'bnc', l:line)[1] - let l:column = l:column + len(l:word) - 1 - - if l:column isnot 0 - let l:started = ale#completion#GetCompletions('ale-import', { - \ 'line': l:line, - \ 'column': l:column, - \ 'prefix': l:word, - \ 'additional_edits_only': 1, - \}) - - if !l:started - call s:message('No completion providers are available.') - endif - endif -endfunction - -function! ale#completion#OmniFunc(findstart, base) abort - if a:findstart - let l:started = ale#completion#GetCompletions('ale-omnifunc') - - if !l:started - " This is the special value for cancelling completions silently. - " See :help complete-functions - return -3 - endif - - return ale#completion#GetCompletionPosition() - else - let l:result = ale#completion#GetCompletionResult() - - while l:result is v:null && !complete_check() - sleep 2ms - let l:result = ale#completion#GetCompletionResult() - endwhile - - return l:result isnot v:null ? l:result : [] - endif -endfunction - -function! s:TimerHandler(...) abort - if !get(b:, 'ale_completion_enabled', g:ale_completion_enabled) - return - endif - - let s:timer_id = -1 - - let [l:line, l:column] = getpos('.')[1:2] - - " When running the timer callback, we have to be sure that the cursor - " hasn't moved from where it was when we requested completions by typing. - if s:timer_pos == [l:line, l:column] && ale#util#Mode() is# 'i' - call ale#completion#GetCompletions('ale-automatic') - endif -endfunction - -" Stop any completion timer that is queued. This is useful for tests. -function! ale#completion#StopTimer() abort - if s:timer_id != -1 - call timer_stop(s:timer_id) - endif - - let s:timer_id = -1 -endfunction - -function! ale#completion#Queue() abort - if !get(b:, 'ale_completion_enabled', g:ale_completion_enabled) - return - endif - - let s:timer_pos = getpos('.')[1:2] - - if s:timer_pos == s:last_done_pos - " Do not ask for completions if the cursor rests on the position we - " last completed on. - return - endif - - " If we changed the text again while we're still waiting for a response, - " then invalidate the requests before the timer ticks again. - if exists('b:ale_completion_info') - let b:ale_completion_info.request_id = 0 - endif - - call ale#completion#StopTimer() - - let s:timer_id = timer_start(g:ale_completion_delay, function('s:TimerHandler')) -endfunction - -function! ale#completion#HandleUserData(completed_item) abort - let l:user_data_json = get(a:completed_item, 'user_data', '') - let l:user_data = type(l:user_data_json) is v:t_dict - \ ? l:user_data_json - \ : ale#util#FuzzyJSONDecode(l:user_data_json, {}) - - if !has_key(l:user_data, '_ale_completion_item') - return - endif - - let l:source = get(get(b:, 'ale_completion_info', {}), 'source', '') - - if l:source is# 'ale-automatic' - \|| l:source is# 'ale-manual' - \|| l:source is# 'ale-callback' - \|| l:source is# 'ale-import' - \|| l:source is# 'ale-omnifunc' - for l:code_action in get(l:user_data, 'code_actions', []) - call ale#code_action#HandleCodeAction(l:code_action, {}) - endfor - endif - - silent doautocmd User ALECompletePost -endfunction - -function! ale#completion#Done() abort - silent! pclose - - call ale#completion#RestoreCompletionOptions() - - let s:last_done_pos = getpos('.')[1:2] -endfunction - -augroup ALECompletionActions - autocmd! - - autocmd CompleteDone * call ale#completion#HandleUserData(v:completed_item) -augroup END - -function! s:Setup(enabled) abort - augroup ALECompletionGroup - autocmd! - - if a:enabled - autocmd TextChangedI * call ale#completion#Queue() - autocmd CompleteDone * call ale#completion#Done() - endif - augroup END - - if !a:enabled - augroup! ALECompletionGroup - endif -endfunction - -function! ale#completion#Enable() abort - let g:ale_completion_enabled = 1 - call s:Setup(1) -endfunction - -function! ale#completion#Disable() abort - let g:ale_completion_enabled = 0 - call s:Setup(0) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/completion/python.vim b/dotfiles/.vim/plugged/ale/autoload/ale/completion/python.vim deleted file mode 100644 index 6b65c5b5..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/completion/python.vim +++ /dev/null @@ -1,3 +0,0 @@ -function! ale#completion#python#CompletionItemFilter(buffer, item) abort - return a:item.label !~# '\v^__[a-z_]+__' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/cursor.vim b/dotfiles/.vim/plugged/ale/autoload/ale/cursor.vim deleted file mode 100644 index c83bbcb6..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/cursor.vim +++ /dev/null @@ -1,189 +0,0 @@ -scriptencoding utf-8 -" Author: w0rp -" Author: João Paulo S. de Souza -" Description: Echoes lint message for the current line, if any - -" Controls the milliseconds delay before echoing a message. -let g:ale_echo_delay = get(g:, 'ale_echo_delay', 10) -" A string format for the echoed message. -let g:ale_echo_msg_format = get(g:, 'ale_echo_msg_format', '%code: %%s') - -let s:cursor_timer = -1 - -" A wrapper for echon so we can test messages we echo in Vader tests. -function! ale#cursor#Echom(message) abort - " no-custom-checks - exec "norm! :echom a:message\n" -endfunction - -function! ale#cursor#TruncatedEcho(original_message) abort - let l:message = a:original_message - " Change tabs to spaces. - let l:message = substitute(l:message, "\t", ' ', 'g') - " Remove any newlines in the message. - let l:message = substitute(l:message, "\n", '', 'g') - " Convert indentation groups into single spaces for better legibility when - " put on a single line - let l:message = substitute(l:message, ' \+', ' ', 'g') - - " We need to remember the setting for shortmess and reset it again. - let l:shortmess_options = &l:shortmess - - try - let l:cursor_position = getpos('.') - - " The message is truncated and saved to the history. - silent! setlocal shortmess+=T - - try - call ale#cursor#Echom(l:message) - catch /^Vim\%((\a\+)\)\=:E523/ - " Fallback into manual truncate (#1987) - let l:winwidth = winwidth(0) - - if l:winwidth < strdisplaywidth(l:message) - " Truncate message longer than window width with trailing '...' - let l:message = l:message[:l:winwidth - 4] . '...' - endif - - exec 'echomsg l:message' - catch /E481/ - " Do nothing if running from a visual selection. - endtry - - " Reset the cursor position if we moved off the end of the line. - " Using :norm and :echomsg can move the cursor off the end of the - " line. - if l:cursor_position != getpos('.') - call setpos('.', l:cursor_position) - endif - finally - let &l:shortmess = l:shortmess_options - endtry -endfunction - -function! s:StopCursorTimer() abort - if s:cursor_timer != -1 - call timer_stop(s:cursor_timer) - let s:cursor_timer = -1 - endif -endfunction - -function! ale#cursor#EchoCursorWarning(...) abort - let l:buffer = bufnr('') - - if !g:ale_echo_cursor && !g:ale_cursor_detail - return - endif - - " Only echo the warnings in normal mode, otherwise we will get problems. - if mode(1) isnot# 'n' - return - endif - - if ale#ShouldDoNothing(l:buffer) - return - endif - - let [l:info, l:loc] = ale#util#FindItemAtCursor(l:buffer) - - if g:ale_echo_cursor - if !empty(l:loc) - let l:format = ale#Var(l:buffer, 'echo_msg_format') - let l:msg = ale#GetLocItemMessage(l:loc, l:format) - call ale#cursor#TruncatedEcho(l:msg) - let l:info.echoed = 1 - elseif get(l:info, 'echoed') - " We'll only clear the echoed message when moving off errors once, - " so we don't continually clear the echo line. - " - " no-custom-checks - echo - let l:info.echoed = 0 - endif - endif - - if g:ale_cursor_detail - if !empty(l:loc) - call s:ShowCursorDetailForItem(l:loc, {'stay_here': 1}) - else - call ale#preview#CloseIfTypeMatches('ale-preview') - endif - endif -endfunction - -function! ale#cursor#EchoCursorWarningWithDelay() abort - let l:buffer = bufnr('') - - if !g:ale_echo_cursor && !g:ale_cursor_detail - return - endif - - " Only echo the warnings in normal mode, otherwise we will get problems. - if mode(1) isnot# 'n' - return - endif - - call s:StopCursorTimer() - - let l:pos = getpos('.')[0:2] - - if !exists('w:last_pos') - let w:last_pos = [0, 0, 0] - endif - - " Check the current buffer, line, and column number against the last - " recorded position. If the position has actually changed, *then* - " we should echo something. Otherwise we can end up doing processing - " the echo message far too frequently. - if l:pos != w:last_pos - let l:delay = ale#Var(l:buffer, 'echo_delay') - - let w:last_pos = l:pos - let s:cursor_timer = timer_start( - \ l:delay, - \ function('ale#cursor#EchoCursorWarning') - \) - endif -endfunction - -function! s:ShowCursorDetailForItem(loc, options) abort - let l:stay_here = get(a:options, 'stay_here', 0) - - let s:last_detailed_line = line('.') - let l:message = get(a:loc, 'detail', a:loc.text) - let l:lines = split(l:message, "\n") - - if g:ale_floating_preview || g:ale_detail_to_floating_preview - call ale#floating_preview#Show(l:lines) - else - call ale#preview#Show(l:lines, {'stay_here': l:stay_here}) - - " Clear the echo message if we manually displayed details. - if !l:stay_here - " no-custom-checks - echo - endif - endif -endfunction - -function! ale#cursor#ShowCursorDetail() abort - let l:buffer = bufnr('') - - " Only echo the warnings in normal mode, otherwise we will get problems. - if mode() isnot# 'n' - return - endif - - if ale#ShouldDoNothing(l:buffer) - return - endif - - call s:StopCursorTimer() - - let [l:info, l:loc] = ale#util#FindItemAtCursor(l:buffer) - - if !empty(l:loc) - call s:ShowCursorDetailForItem(l:loc, {'stay_here': 0}) - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/d.vim b/dotfiles/.vim/plugged/ale/autoload/ale/d.vim deleted file mode 100644 index 0e232203..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/d.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: Auri -" Description: Functions for integrating with D linters. - -function! ale#d#FindDUBConfig(buffer) abort - " Find a DUB configuration file in ancestor paths. - " The most DUB-specific names will be tried first. - for l:possible_filename in ['dub.sdl', 'dub.json', 'package.json'] - let l:dub_file = ale#path#FindNearestFile(a:buffer, l:possible_filename) - - if !empty(l:dub_file) - return l:dub_file - endif - endfor - - return '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/debugging.vim b/dotfiles/.vim/plugged/ale/autoload/ale/debugging.vim deleted file mode 100644 index 31f3078c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/debugging.vim +++ /dev/null @@ -1,276 +0,0 @@ -" Author: w0rp -" Description: This file implements debugging information for ALE - -let s:global_variable_list = [ -\ 'ale_cache_executable_check_failures', -\ 'ale_change_sign_column_color', -\ 'ale_command_wrapper', -\ 'ale_completion_delay', -\ 'ale_completion_enabled', -\ 'ale_completion_max_suggestions', -\ 'ale_disable_lsp', -\ 'ale_echo_cursor', -\ 'ale_echo_msg_error_str', -\ 'ale_echo_msg_format', -\ 'ale_echo_msg_info_str', -\ 'ale_echo_msg_warning_str', -\ 'ale_enabled', -\ 'ale_fix_on_save', -\ 'ale_fixers', -\ 'ale_history_enabled', -\ 'ale_history_log_output', -\ 'ale_keep_list_window_open', -\ 'ale_lint_delay', -\ 'ale_lint_on_enter', -\ 'ale_lint_on_filetype_changed', -\ 'ale_lint_on_insert_leave', -\ 'ale_lint_on_save', -\ 'ale_lint_on_text_changed', -\ 'ale_linter_aliases', -\ 'ale_linters', -\ 'ale_linters_explicit', -\ 'ale_linters_ignore', -\ 'ale_list_vertical', -\ 'ale_list_window_size', -\ 'ale_loclist_msg_format', -\ 'ale_max_buffer_history_size', -\ 'ale_max_signs', -\ 'ale_maximum_file_size', -\ 'ale_open_list', -\ 'ale_pattern_options', -\ 'ale_pattern_options_enabled', -\ 'ale_root', -\ 'ale_set_balloons', -\ 'ale_set_highlights', -\ 'ale_set_loclist', -\ 'ale_set_quickfix', -\ 'ale_set_signs', -\ 'ale_sign_column_always', -\ 'ale_sign_error', -\ 'ale_sign_info', -\ 'ale_sign_offset', -\ 'ale_sign_style_error', -\ 'ale_sign_style_warning', -\ 'ale_sign_warning', -\ 'ale_sign_highlight_linenrs', -\ 'ale_statusline_format', -\ 'ale_type_map', -\ 'ale_use_global_executables', -\ 'ale_virtualtext_cursor', -\ 'ale_warn_about_trailing_blank_lines', -\ 'ale_warn_about_trailing_whitespace', -\] - -function! s:Echo(message) abort - " no-custom-checks - echo a:message -endfunction - -function! s:GetLinterVariables(filetype, exclude_linter_names) abort - let l:variable_list = [] - let l:filetype_parts = split(a:filetype, '\.') - - for l:key in keys(g:) - " Extract variable names like: 'ale_python_flake8_executable' - let l:match = matchlist(l:key, '\v^ale_([^_]+)_([^_]+)_.+$') - - " Include matching variables. - if !empty(l:match) - \&& index(l:filetype_parts, l:match[1]) >= 0 - \&& index(a:exclude_linter_names, l:match[2]) == -1 - call add(l:variable_list, l:key) - endif - endfor - - call sort(l:variable_list) - - return l:variable_list -endfunction - -function! s:EchoLinterVariables(variable_list) abort - for l:key in a:variable_list - call s:Echo('let g:' . l:key . ' = ' . string(g:[l:key])) - - if has_key(b:, l:key) - call s:Echo('let b:' . l:key . ' = ' . string(b:[l:key])) - endif - endfor -endfunction - -function! s:EchoGlobalVariables() abort - for l:key in s:global_variable_list - call s:Echo('let g:' . l:key . ' = ' . string(get(g:, l:key, v:null))) - - if has_key(b:, l:key) - call s:Echo('let b:' . l:key . ' = ' . string(b:[l:key])) - endif - endfor -endfunction - -" Echo a command that was run. -function! s:EchoCommand(item) abort - let l:status_message = a:item.status - - " Include the exit code in output if we have it. - if a:item.status is# 'finished' - let l:status_message .= ' - exit code ' . a:item.exit_code - endif - - call s:Echo('(' . l:status_message . ') ' . string(a:item.command)) - - if g:ale_history_log_output && has_key(a:item, 'output') - if empty(a:item.output) - call s:Echo('') - call s:Echo('<<>>') - call s:Echo('') - else - call s:Echo('') - call s:Echo('<<>>') - - for l:line in a:item.output - call s:Echo(l:line) - endfor - - call s:Echo('<<>>') - call s:Echo('') - endif - endif -endfunction - -" Echo the results of an executable check. -function! s:EchoExecutable(item) abort - call s:Echo(printf( - \ '(executable check - %s) %s', - \ a:item.status ? 'success' : 'failure', - \ a:item.command, - \)) -endfunction - -function! s:EchoCommandHistory() abort - let l:buffer = bufnr('%') - - for l:item in ale#history#Get(l:buffer) - if l:item.job_id is# 'executable' - call s:EchoExecutable(l:item) - else - call s:EchoCommand(l:item) - endif - endfor -endfunction - -function! s:EchoLinterAliases(all_linters) abort - let l:first = 1 - - for l:linter in a:all_linters - if !empty(l:linter.aliases) - if l:first - call s:Echo(' Linter Aliases:') - endif - - let l:first = 0 - - call s:Echo(string(l:linter.name) . ' -> ' . string(l:linter.aliases)) - endif - endfor -endfunction - -function! s:EchoLSPErrorMessages(all_linter_names) abort - let l:lsp_error_messages = get(g:, 'ale_lsp_error_messages', {}) - let l:header_echoed = 0 - - for l:linter_name in a:all_linter_names - let l:error_list = get(l:lsp_error_messages, l:linter_name, []) - - if !empty(l:error_list) - if !l:header_echoed - call s:Echo(' LSP Error Messages:') - call s:Echo('') - endif - - call s:Echo('(Errors for ' . l:linter_name . ')') - - for l:message in l:error_list - for l:line in split(l:message, "\n") - call s:Echo(l:line) - endfor - endfor - endif - endfor -endfunction - -function! ale#debugging#Info() abort - let l:buffer = bufnr('') - let l:filetype = &filetype - - " We get the list of enabled linters for free by the above function. - let l:enabled_linters = deepcopy(ale#linter#Get(l:filetype)) - - " But have to build the list of available linters ourselves. - let l:all_linters = [] - let l:linter_variable_list = [] - - for l:part in split(l:filetype, '\.') - let l:aliased_filetype = ale#linter#ResolveFiletype(l:part) - call extend(l:all_linters, ale#linter#GetAll(l:aliased_filetype)) - endfor - - let l:all_names = map(copy(l:all_linters), 'v:val[''name'']') - let l:enabled_names = map(copy(l:enabled_linters), 'v:val[''name'']') - let l:exclude_names = filter(copy(l:all_names), 'index(l:enabled_names, v:val) == -1') - - " Load linter variables to display - " This must be done after linters are loaded. - let l:variable_list = s:GetLinterVariables(l:filetype, l:exclude_names) - - let l:fixers = ale#fix#registry#SuggestedFixers(l:filetype) - let l:fixers = uniq(sort(l:fixers[0] + l:fixers[1])) - let l:fixers_string = join(map(copy(l:fixers), '"\n " . v:val'), '') - - let l:non_ignored_names = map( - \ copy(ale#linter#RemoveIgnored(l:buffer, l:filetype, l:enabled_linters)), - \ 'v:val[''name'']', - \) - let l:ignored_names = filter( - \ copy(l:enabled_names), - \ 'index(l:non_ignored_names, v:val) < 0' - \) - - call s:Echo(' Current Filetype: ' . l:filetype) - call s:Echo('Available Linters: ' . string(l:all_names)) - call s:EchoLinterAliases(l:all_linters) - call s:Echo(' Enabled Linters: ' . string(l:enabled_names)) - call s:Echo(' Ignored Linters: ' . string(l:ignored_names)) - call s:Echo(' Suggested Fixers: ' . l:fixers_string) - call s:Echo(' Linter Variables:') - call s:Echo('') - call s:EchoLinterVariables(l:variable_list) - call s:Echo(' Global Variables:') - call s:Echo('') - call s:EchoGlobalVariables() - call s:EchoLSPErrorMessages(l:all_names) - call s:Echo(' Command History:') - call s:Echo('') - call s:EchoCommandHistory() -endfunction - -function! ale#debugging#InfoToClipboard() abort - if !has('clipboard') - call s:Echo('clipboard not available. Try :ALEInfoToFile instead.') - - return - endif - - let l:output = execute('call ale#debugging#Info()') - - let @+ = l:output - call s:Echo('ALEInfo copied to your clipboard') -endfunction - -function! ale#debugging#InfoToFile(filename) abort - let l:expanded_filename = expand(a:filename) - - let l:output = execute('call ale#debugging#Info()') - - call writefile(split(l:output, "\n"), l:expanded_filename) - call s:Echo('ALEInfo written to ' . l:expanded_filename) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/definition.vim b/dotfiles/.vim/plugged/ale/autoload/ale/definition.vim deleted file mode 100644 index fd6cd2e1..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/definition.vim +++ /dev/null @@ -1,224 +0,0 @@ -" Author: w0rp -" Description: Go to definition support for LSP linters. - -let s:go_to_definition_map = {} - -" Enable automatic updates of the tagstack -let g:ale_update_tagstack = get(g:, 'ale_update_tagstack', 1) -let g:ale_default_navigation = get(g:, 'ale_default_navigation', 'buffer') - -" Used to get the definition map in tests. -function! ale#definition#GetMap() abort - return deepcopy(s:go_to_definition_map) -endfunction - -" Used to set the definition map in tests. -function! ale#definition#SetMap(map) abort - let s:go_to_definition_map = a:map -endfunction - -function! ale#definition#ClearLSPData() abort - let s:go_to_definition_map = {} -endfunction - -function! ale#definition#UpdateTagStack() abort - let l:should_update_tagstack = exists('*gettagstack') && exists('*settagstack') && g:ale_update_tagstack - - if l:should_update_tagstack - " Grab the old location (to jump back to) and the word under the - " cursor (as a label for the tagstack) - let l:old_location = [bufnr('%'), line('.'), col('.'), 0] - let l:tagname = expand('') - let l:winid = win_getid() - call settagstack(l:winid, {'items': [{'from': l:old_location, 'tagname': l:tagname}]}, 'a') - call settagstack(l:winid, {'curidx': len(gettagstack(l:winid)['items']) + 1}) - endif -endfunction - -function! ale#definition#HandleTSServerResponse(conn_id, response) abort - if has_key(a:response, 'request_seq') - \&& has_key(s:go_to_definition_map, a:response.request_seq) - let l:options = remove(s:go_to_definition_map, a:response.request_seq) - - if get(a:response, 'success', v:false) is v:true && !empty(a:response.body) - let l:filename = a:response.body[0].file - let l:line = a:response.body[0].start.line - let l:column = a:response.body[0].start.offset - - call ale#definition#UpdateTagStack() - call ale#util#Open(l:filename, l:line, l:column, l:options) - endif - endif -endfunction - -function! ale#definition#HandleLSPResponse(conn_id, response) abort - if has_key(a:response, 'id') - \&& has_key(s:go_to_definition_map, a:response.id) - let l:options = remove(s:go_to_definition_map, a:response.id) - - " The result can be a Dictionary item, a List of the same, or null. - let l:result = get(a:response, 'result', v:null) - - if type(l:result) is v:t_dict - let l:result = [l:result] - elseif type(l:result) isnot v:t_list - let l:result = [] - endif - - for l:item in l:result - if has_key(l:item, 'targetUri') - " LocationLink items use targetUri - let l:uri = l:item.targetUri - let l:line = l:item.targetRange.start.line + 1 - let l:column = l:item.targetRange.start.character + 1 - else - " LocationLink items use uri - let l:uri = l:item.uri - let l:line = l:item.range.start.line + 1 - let l:column = l:item.range.start.character + 1 - endif - - call ale#definition#UpdateTagStack() - - let l:uri_handler = ale#uri#GetURIHandler(l:uri) - - if l:uri_handler is# v:null - let l:filename = ale#path#FromFileURI(l:uri) - call ale#util#Open(l:filename, l:line, l:column, l:options) - else - call l:uri_handler.OpenURILink(l:uri, l:line, l:column, l:options, a:conn_id) - endif - - break - endfor - endif -endfunction - -function! s:OnReady(line, column, options, capability, linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - - if !ale#lsp#HasCapability(l:id, a:capability) - return - endif - - let l:buffer = a:lsp_details.buffer - - let l:Callback = a:linter.lsp is# 'tsserver' - \ ? function('ale#definition#HandleTSServerResponse') - \ : function('ale#definition#HandleLSPResponse') - call ale#lsp#RegisterCallback(l:id, l:Callback) - - if a:linter.lsp is# 'tsserver' - if a:capability is# 'definition' - let l:message = ale#lsp#tsserver_message#Definition( - \ l:buffer, - \ a:line, - \ a:column - \) - elseif a:capability is# 'typeDefinition' - let l:message = ale#lsp#tsserver_message#TypeDefinition( - \ l:buffer, - \ a:line, - \ a:column - \) - elseif a:capability is# 'implementation' - let l:message = ale#lsp#tsserver_message#Implementation( - \ l:buffer, - \ a:line, - \ a:column - \) - endif - else - " Send a message saying the buffer has changed first, or the - " definition position probably won't make sense. - call ale#lsp#NotifyForChanges(l:id, l:buffer) - - " For LSP completions, we need to clamp the column to the length of - " the line. python-language-server and perhaps others do not implement - " this correctly. - if a:capability is# 'definition' - let l:message = ale#lsp#message#Definition(l:buffer, a:line, a:column) - elseif a:capability is# 'typeDefinition' - let l:message = ale#lsp#message#TypeDefinition(l:buffer, a:line, a:column) - elseif a:capability is# 'implementation' - let l:message = ale#lsp#message#Implementation(l:buffer, a:line, a:column) - else - " XXX: log here? - return - endif - endif - - let l:request_id = ale#lsp#Send(l:id, l:message) - - let s:go_to_definition_map[l:request_id] = { - \ 'open_in': get(a:options, 'open_in', 'current-buffer'), - \} -endfunction - -function! s:GoToLSPDefinition(linter, options, capability) abort - let l:buffer = bufnr('') - let [l:line, l:column] = getpos('.')[1:2] - let l:column = min([l:column, len(getline(l:line))]) - - let l:Callback = function( - \ 's:OnReady', - \ [l:line, l:column, a:options, a:capability] - \) - call ale#lsp_linter#StartLSP(l:buffer, a:linter, l:Callback) -endfunction - -function! ale#definition#GoTo(options) abort - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - call s:GoToLSPDefinition(l:linter, a:options, 'definition') - endif - endfor -endfunction - -function! ale#definition#GoToType(options) abort - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - call s:GoToLSPDefinition(l:linter, a:options, 'typeDefinition') - endif - endfor -endfunction - -function! ale#definition#GoToImpl(options) abort - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - call s:GoToLSPDefinition(l:linter, a:options, 'implementation') - endif - endfor -endfunction - -function! ale#definition#GoToCommandHandler(command, ...) abort - let l:options = {} - - if len(a:000) > 0 - for l:option in a:000 - if l:option is? '-tab' - let l:options.open_in = 'tab' - elseif l:option is? '-split' - let l:options.open_in = 'split' - elseif l:option is? '-vsplit' - let l:options.open_in = 'vsplit' - endif - endfor - endif - - if !has_key(l:options, 'open_in') - let l:default_navigation = ale#Var(bufnr(''), 'default_navigation') - - if index(['tab', 'split', 'vsplit'], l:default_navigation) >= 0 - let l:options.open_in = l:default_navigation - endif - endif - - if a:command is# 'type' - call ale#definition#GoToType(l:options) - elseif a:command is# 'implementation' - call ale#definition#GoToImpl(l:options) - else - call ale#definition#GoTo(l:options) - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/dhall.vim b/dotfiles/.vim/plugged/ale/autoload/ale/dhall.vim deleted file mode 100644 index cc54418f..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/dhall.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: Pat Brisbin , toastal -" Description: Functions for working with Dhall’s executable - -call ale#Set('dhall_executable', 'dhall') -call ale#Set('dhall_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('dhall_options', '') - -function! ale#dhall#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'dhall_executable') - - " Dhall is written in Haskell and commonly installed with Stack - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'dhall') -endfunction - -function! ale#dhall#GetExecutableWithOptions(buffer) abort - let l:executable = ale#dhall#GetExecutable(a:buffer) - - return l:executable - \ . ale#Pad(ale#Var(a:buffer, 'dhall_options')) -endfunction - -function! ale#dhall#GetCommand(buffer) abort - return '%e ' . ale#Pad(ale#Var(a:buffer, 'dhall_options')) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/engine.vim b/dotfiles/.vim/plugged/ale/autoload/ale/engine.vim deleted file mode 100644 index 97c46656..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/engine.vim +++ /dev/null @@ -1,738 +0,0 @@ -" Author: w0rp -" Description: Backend execution and job management -" Executes linters in the background, using NeoVim or Vim 8 jobs - -" Remapping of linter problems. -let g:ale_type_map = get(g:, 'ale_type_map', {}) -let g:ale_filename_mappings = get(g:, 'ale_filename_mappings', {}) - -if !has_key(s:, 'executable_cache_map') - let s:executable_cache_map = {} -endif - -function! ale#engine#CleanupEveryBuffer() abort - for l:key in keys(g:ale_buffer_info) - " The key could be a filename or a buffer number, so try and - " convert it to a number. We need a number for the other - " functions. - let l:buffer = str2nr(l:key) - - if l:buffer > 0 - " Stop all jobs and clear the results for everything, and delete - " all of the data we stored for the buffer. - call ale#engine#Cleanup(l:buffer) - endif - endfor -endfunction - -function! ale#engine#MarkLinterActive(info, linter) abort - let l:found = 0 - - for l:other_linter in a:info.active_linter_list - if l:other_linter.name is# a:linter.name - let l:found = 1 - break - endif - endfor - - if !l:found - call add(a:info.active_linter_list, a:linter) - endif -endfunction - -function! ale#engine#MarkLinterInactive(info, linter_name) abort - call filter(a:info.active_linter_list, 'v:val.name isnot# a:linter_name') -endfunction - -function! ale#engine#ResetExecutableCache() abort - let s:executable_cache_map = {} -endfunction - -" Check if files are executable, and if they are, remember that they are -" for subsequent calls. We'll keep checking until programs can be executed. -function! ale#engine#IsExecutable(buffer, executable) abort - if empty(a:executable) - " Don't log the executable check if the executable string is empty. - return 0 - endif - - " Check for a cached executable() check. - let l:result = get(s:executable_cache_map, a:executable, v:null) - - if l:result isnot v:null - return l:result - endif - - " Check if the file is executable, and convert -1 to 1. - let l:result = executable(a:executable) isnot 0 - - " Cache the executable check if we found it, or if the option to cache - " failing checks is on. - if l:result || get(g:, 'ale_cache_executable_check_failures', 0) - let s:executable_cache_map[a:executable] = l:result - endif - - if g:ale_history_enabled - call ale#history#Add(a:buffer, l:result, 'executable', a:executable) - endif - - return l:result -endfunction - -function! ale#engine#InitBufferInfo(buffer) abort - if !has_key(g:ale_buffer_info, a:buffer) - " active_linter_list will hold the list of active linter names - " loclist holds the loclist items after all jobs have completed. - let g:ale_buffer_info[a:buffer] = { - \ 'active_linter_list': [], - \ 'active_other_sources_list': [], - \ 'loclist': [], - \} - - return 1 - endif - - return 0 -endfunction - -" This function is documented and part of the public API. -" -" Return 1 if ALE is busy checking a given buffer -function! ale#engine#IsCheckingBuffer(buffer) abort - let l:info = get(g:ale_buffer_info, a:buffer, {}) - - return !empty(get(l:info, 'active_linter_list', [])) - \ || !empty(get(l:info, 'active_other_sources_list', [])) -endfunction - -function! ale#engine#HandleLoclist(linter_name, buffer, loclist, from_other_source) abort - let l:info = get(g:ale_buffer_info, a:buffer, {}) - - if empty(l:info) - return - endif - - if !a:from_other_source - " Remove this linter from the list of active linters. - " This may have already been done when the job exits. - call filter(l:info.active_linter_list, 'v:val.name isnot# a:linter_name') - endif - - " Make some adjustments to the loclists to fix common problems, and also - " to set default values for loclist items. - let l:linter_loclist = ale#engine#FixLocList( - \ a:buffer, - \ a:linter_name, - \ a:from_other_source, - \ a:loclist, - \) - - " Remove previous items for this linter. - call filter(l:info.loclist, 'v:val.linter_name isnot# a:linter_name') - - " We don't need to add items or sort the list when this list is empty. - if !empty(l:linter_loclist) - " Add the new items. - call extend(l:info.loclist, l:linter_loclist) - - " Sort the loclist again. - " We need a sorted list so we can run a binary search against it - " for efficient lookup of the messages in the cursor handler. - call sort(l:info.loclist, 'ale#util#LocItemCompare') - endif - - if ale#ShouldDoNothing(a:buffer) - return - endif - - call ale#engine#SetResults(a:buffer, l:info.loclist) -endfunction - -function! s:HandleExit(job_info, buffer, output, data) abort - let l:buffer_info = get(g:ale_buffer_info, a:buffer) - - if empty(l:buffer_info) - return - endif - - let l:linter = a:job_info.linter - let l:executable = a:job_info.executable - - " Remove this job from the list. - call ale#engine#MarkLinterInactive(l:buffer_info, l:linter.name) - - " Stop here if we land in the handle for a job completing if we're in - " a sandbox. - if ale#util#InSandbox() - return - endif - - if has('nvim') && !empty(a:output) && empty(a:output[-1]) - call remove(a:output, -1) - endif - - try - let l:loclist = ale#util#GetFunction(l:linter.callback)(a:buffer, a:output) - " Handle the function being unknown, or being deleted. - catch /E700/ - let l:loclist = [] - endtry - - call ale#engine#HandleLoclist(l:linter.name, a:buffer, l:loclist, 0) -endfunction - -function! ale#engine#SetResults(buffer, loclist) abort - let l:linting_is_done = !ale#engine#IsCheckingBuffer(a:buffer) - - " Set signs first. This could potentially fix some line numbers. - " The List could be sorted again here by SetSigns. - if g:ale_set_signs - call ale#sign#SetSigns(a:buffer, a:loclist) - endif - - if g:ale_set_quickfix || g:ale_set_loclist - call ale#list#SetLists(a:buffer, a:loclist) - endif - - if exists('*ale#statusline#Update') - " Don't load/run if not already loaded. - call ale#statusline#Update(a:buffer, a:loclist) - endif - - if g:ale_set_highlights - call ale#highlight#SetHighlights(a:buffer, a:loclist) - endif - - if g:ale_virtualtext_cursor == 2 - call ale#virtualtext#SetTexts(a:buffer, a:loclist) - endif - - if l:linting_is_done - if g:ale_echo_cursor - " Try and echo the warning now. - " This will only do something meaningful if we're in normal mode. - call ale#cursor#EchoCursorWarning() - endif - - if g:ale_virtualtext_cursor == 1 - " Try and show the warning now. - " This will only do something meaningful if we're in normal mode. - call ale#virtualtext#ShowCursorWarning() - endif - - " Reset the save event marker, used for opening windows, etc. - call setbufvar(a:buffer, 'ale_save_event_fired', 0) - " Set a marker showing how many times a buffer has been checked. - call setbufvar( - \ a:buffer, - \ 'ale_linted', - \ getbufvar(a:buffer, 'ale_linted', 0) + 1 - \) - - " Automatically remove all managed temporary files and directories - " now that all jobs have completed. - call ale#command#RemoveManagedFiles(a:buffer) - - " Call user autocommands. This allows users to hook into ALE's lint cycle. - silent doautocmd User ALELintPost - endif -endfunction - -function! s:RemapItemTypes(type_map, loclist) abort - for l:item in a:loclist - let l:key = l:item.type - \ . (get(l:item, 'sub_type', '') is# 'style' ? 'S' : '') - let l:new_key = get(a:type_map, l:key, '') - - if l:new_key is# 'E' - \|| l:new_key is# 'ES' - \|| l:new_key is# 'W' - \|| l:new_key is# 'WS' - \|| l:new_key is# 'I' - let l:item.type = l:new_key[0] - - if l:new_key is# 'ES' || l:new_key is# 'WS' - let l:item.sub_type = 'style' - elseif has_key(l:item, 'sub_type') - call remove(l:item, 'sub_type') - endif - endif - endfor -endfunction - -function! ale#engine#FixLocList(buffer, linter_name, from_other_source, loclist) abort - let l:mappings = ale#GetFilenameMappings(a:buffer, a:linter_name) - - if !empty(l:mappings) - " We need to apply reverse filename mapping here. - let l:mappings = ale#filename_mapping#Invert(l:mappings) - endif - - let l:bufnr_map = {} - let l:new_loclist = [] - - " Some errors have line numbers beyond the end of the file, - " so we need to adjust them so they set the error at the last line - " of the file instead. - let l:last_line_number = ale#util#GetLineCount(a:buffer) - - for l:old_item in a:loclist - " Copy the loclist item with some default values and corrections. - " - " line and column numbers will be converted to numbers. - " The buffer will default to the buffer being checked. - " The vcol setting will default to 0, a byte index. - " The error type will default to 'E' for errors. - " The error number will default to -1. - " - " The line number and text are the only required keys. - " - " The linter_name will be set on the errors so it can be used in - " output, filtering, etc.. - let l:item = { - \ 'bufnr': a:buffer, - \ 'text': l:old_item.text, - \ 'lnum': str2nr(l:old_item.lnum), - \ 'col': str2nr(get(l:old_item, 'col', 0)), - \ 'vcol': 0, - \ 'type': get(l:old_item, 'type', 'E'), - \ 'nr': get(l:old_item, 'nr', -1), - \ 'linter_name': a:linter_name, - \} - - if a:from_other_source - let l:item.from_other_source = 1 - endif - - if has_key(l:old_item, 'code') - let l:item.code = l:old_item.code - endif - - let l:old_name = get(l:old_item, 'filename', '') - - " Map parsed from output to local filesystem files. - if !empty(l:old_name) && !empty(l:mappings) - let l:old_name = ale#filename_mapping#Map(l:old_name, l:mappings) - endif - - if !empty(l:old_name) && !ale#path#IsTempName(l:old_name) - " Use the filename given. - " Temporary files are assumed to be for this buffer, - " and the filename is not included then, because it looks bad - " in the loclist window. - let l:filename = l:old_name - let l:item.filename = l:filename - - if has_key(l:old_item, 'bufnr') - " If a buffer number is also given, include that too. - " If Vim detects that he buffer number is valid, it will - " be used instead of the filename. - let l:item.bufnr = l:old_item.bufnr - elseif has_key(l:bufnr_map, l:filename) - " Get the buffer number from the map, which can be faster. - let l:item.bufnr = l:bufnr_map[l:filename] - else - " Look up the buffer number. - let l:item.bufnr = bufnr(l:filename) - let l:bufnr_map[l:filename] = l:item.bufnr - endif - elseif has_key(l:old_item, 'bufnr') - let l:item.bufnr = l:old_item.bufnr - endif - - if has_key(l:old_item, 'detail') - let l:item.detail = l:old_item.detail - endif - - " Pass on a end_col key if set, used for highlights. - if has_key(l:old_item, 'end_col') - let l:item.end_col = str2nr(l:old_item.end_col) - endif - - if has_key(l:old_item, 'end_lnum') - let l:item.end_lnum = str2nr(l:old_item.end_lnum) - - " When the error ends after the end of the file, put it at the - " end. This is only done for the current buffer. - if l:item.bufnr == a:buffer && l:item.end_lnum > l:last_line_number - let l:item.end_lnum = l:last_line_number - endif - endif - - if has_key(l:old_item, 'sub_type') - let l:item.sub_type = l:old_item.sub_type - endif - - if l:item.lnum < 1 - " When errors appear before line 1, put them at line 1. - let l:item.lnum = 1 - elseif l:item.bufnr == a:buffer && l:item.lnum > l:last_line_number - " When errors go beyond the end of the file, put them at the end. - " This is only done for the current buffer. - let l:item.lnum = l:last_line_number - elseif get(l:old_item, 'vcol', 0) - " Convert virtual column positions to byte positions. - " The positions will be off if the buffer has changed recently. - let l:line = getbufline(a:buffer, l:item.lnum)[0] - - let l:item.col = ale#util#Col(l:line, l:item.col) - - if has_key(l:item, 'end_col') - let l:end_line = get(l:item, 'end_lnum', l:line) != l:line - \ ? getbufline(a:buffer, l:item.end_lnum)[0] - \ : l:line - - let l:item.end_col = ale#util#Col(l:end_line, l:item.end_col) - endif - endif - - call add(l:new_loclist, l:item) - endfor - - let l:type_map = get(ale#Var(a:buffer, 'type_map'), a:linter_name, {}) - - if !empty(l:type_map) - call s:RemapItemTypes(l:type_map, l:new_loclist) - endif - - return l:new_loclist -endfunction - -" Given part of a command, replace any % with %%, so that no characters in -" the string will be replaced with filenames, etc. -function! ale#engine#EscapeCommandPart(command_part) abort - " TODO: Emit deprecation warning here later. - return ale#command#EscapeCommandPart(a:command_part) -endfunction - -" Run a job. -" -" Returns 1 when a job was started successfully. -function! s:RunJob(command, options) abort - if ale#command#IsDeferred(a:command) - let a:command.result_callback = { - \ command -> s:RunJob(command, a:options) - \} - - return 1 - endif - - let l:command = a:command - - if empty(l:command) - return 0 - endif - - let l:cwd = a:options.cwd - let l:executable = a:options.executable - let l:buffer = a:options.buffer - let l:linter = a:options.linter - let l:output_stream = a:options.output_stream - let l:read_buffer = a:options.read_buffer && !a:options.lint_file - let l:info = g:ale_buffer_info[l:buffer] - - let l:Callback = function('s:HandleExit', [{ - \ 'linter': l:linter, - \ 'executable': l:executable, - \}]) - let l:result = ale#command#Run(l:buffer, l:command, l:Callback, { - \ 'cwd': l:cwd, - \ 'output_stream': l:output_stream, - \ 'executable': l:executable, - \ 'read_buffer': l:read_buffer, - \ 'log_output': 1, - \ 'filename_mappings': ale#GetFilenameMappings(l:buffer, l:linter.name), - \}) - - " Only proceed if the job is being run. - if empty(l:result) - return 0 - endif - - call ale#engine#MarkLinterActive(l:info, l:linter) - - silent doautocmd User ALEJobStarted - - return 1 -endfunction - -function! s:StopCurrentJobs(buffer, clear_lint_file_jobs, linter_slots) abort - let l:info = get(g:ale_buffer_info, a:buffer, {}) - call ale#command#StopJobs(a:buffer, 'linter') - - " Update the active linter list, clearing out anything not running. - if a:clear_lint_file_jobs - call ale#command#StopJobs(a:buffer, 'file_linter') - let l:info.active_linter_list = [] - else - let l:lint_file_map = {} - - " Use a previously computed map of `lint_file` values to find - " linters that are used for linting files. - for [l:lint_file, l:linter] in a:linter_slots - if l:lint_file is 1 - let l:lint_file_map[l:linter.name] = 1 - endif - endfor - - " Keep jobs for linting files when we're only linting buffers. - call filter(l:info.active_linter_list, 'get(l:lint_file_map, v:val.name)') - endif -endfunction - -function! ale#engine#Stop(buffer) abort - call s:StopCurrentJobs(a:buffer, 1, []) -endfunction - -function! s:RemoveProblemsForDisabledLinters(buffer, linters) abort - " Figure out which linters are still enabled, and remove - " problems for linters which are no longer enabled. - " Problems from other sources will be kept. - let l:name_map = {} - - for l:linter in a:linters - let l:name_map[l:linter.name] = 1 - endfor - - call filter( - \ get(g:ale_buffer_info[a:buffer], 'loclist', []), - \ 'get(v:val, ''from_other_source'') || get(l:name_map, get(v:val, ''linter_name''))', - \) -endfunction - -function! s:AddProblemsFromOtherBuffers(buffer, linters) abort - let l:filename = expand('#' . a:buffer . ':p') - let l:loclist = [] - let l:name_map = {} - - " Build a map of the active linters. - for l:linter in a:linters - let l:name_map[l:linter.name] = 1 - endfor - - " Find the items from other buffers, for the linters that are enabled. - for l:info in values(g:ale_buffer_info) - for l:item in l:info.loclist - if has_key(l:item, 'filename') - \&& l:item.filename is# l:filename - \&& has_key(l:name_map, l:item.linter_name) - " Copy the items and set the buffer numbers to this one. - let l:new_item = copy(l:item) - let l:new_item.bufnr = a:buffer - call add(l:loclist, l:new_item) - endif - endfor - endfor - - if !empty(l:loclist) - call sort(l:loclist, function('ale#util#LocItemCompareWithText')) - call uniq(l:loclist, function('ale#util#LocItemCompareWithText')) - - " Set the loclist variable, used by some parts of ALE. - let g:ale_buffer_info[a:buffer].loclist = l:loclist - call ale#engine#SetResults(a:buffer, l:loclist) - endif -endfunction - -function! s:RunIfExecutable(buffer, linter, lint_file, executable) abort - if ale#command#IsDeferred(a:executable) - let a:executable.result_callback = { - \ executable -> s:RunIfExecutable( - \ a:buffer, - \ a:linter, - \ a:lint_file, - \ executable - \ ) - \} - - return 1 - endif - - if ale#engine#IsExecutable(a:buffer, a:executable) - " Use different job types for file or linter jobs. - let l:job_type = a:lint_file ? 'file_linter' : 'linter' - call setbufvar(a:buffer, 'ale_job_type', l:job_type) - - " Get the cwd for the linter and set it before we call GetCommand. - " This will ensure that ale#command#Run uses it by default. - let l:cwd = ale#linter#GetCwd(a:buffer, a:linter) - - if l:cwd isnot v:null - call ale#command#SetCwd(a:buffer, l:cwd) - endif - - let l:command = ale#linter#GetCommand(a:buffer, a:linter) - - if l:cwd isnot v:null - call ale#command#ResetCwd(a:buffer) - endif - - let l:options = { - \ 'cwd': l:cwd, - \ 'executable': a:executable, - \ 'buffer': a:buffer, - \ 'linter': a:linter, - \ 'output_stream': get(a:linter, 'output_stream', 'stdout'), - \ 'read_buffer': a:linter.read_buffer, - \ 'lint_file': a:lint_file, - \} - - return s:RunJob(l:command, l:options) - endif - - return 0 -endfunction - -" Run a linter for a buffer. -" -" Returns 1 if the linter was successfully run. -function! s:RunLinter(buffer, linter, lint_file) abort - if !empty(a:linter.lsp) - return ale#lsp_linter#CheckWithLSP(a:buffer, a:linter) - else - let l:executable = ale#linter#GetExecutable(a:buffer, a:linter) - - return s:RunIfExecutable(a:buffer, a:linter, a:lint_file, l:executable) - endif - - return 0 -endfunction - -function! s:GetLintFileSlots(buffer, linters) abort - let l:linter_slots = [] - - for l:linter in a:linters - let l:LintFile = l:linter.lint_file - - if type(l:LintFile) is v:t_func - let l:LintFile = l:LintFile(a:buffer) - endif - - call add(l:linter_slots, [l:LintFile, l:linter]) - endfor - - return l:linter_slots -endfunction - -function! s:GetLintFileValues(slots, Callback) abort - let l:deferred_list = [] - let l:new_slots = [] - - for [l:lint_file, l:linter] in a:slots - while ale#command#IsDeferred(l:lint_file) && has_key(l:lint_file, 'value') - " If we've already computed the return value, use it. - let l:lint_file = l:lint_file.value - endwhile - - if ale#command#IsDeferred(l:lint_file) - " If we are going to return the result later, wait for it. - call add(l:deferred_list, l:lint_file) - else - " If we have the value now, coerce it to 0 or 1. - let l:lint_file = l:lint_file is 1 - endif - - call add(l:new_slots, [l:lint_file, l:linter]) - endfor - - if !empty(l:deferred_list) - for l:deferred in l:deferred_list - let l:deferred.result_callback = - \ {-> s:GetLintFileValues(l:new_slots, a:Callback)} - endfor - else - call a:Callback(l:new_slots) - endif -endfunction - -function! s:RunLinters( -\ buffer, -\ linters, -\ slots, -\ should_lint_file, -\ new_buffer, -\) abort - call s:StopCurrentJobs(a:buffer, a:should_lint_file, a:slots) - call s:RemoveProblemsForDisabledLinters(a:buffer, a:linters) - - " We can only clear the results if we aren't checking the buffer. - let l:can_clear_results = !ale#engine#IsCheckingBuffer(a:buffer) - - silent doautocmd User ALELintPre - - for [l:lint_file, l:linter] in a:slots - " Only run lint_file linters if we should. - if !l:lint_file || a:should_lint_file - if s:RunLinter(a:buffer, l:linter, l:lint_file) - " If a single linter ran, we shouldn't clear everything. - let l:can_clear_results = 0 - endif - else - " If we skipped running a lint_file linter still in the list, - " we shouldn't clear everything. - let l:can_clear_results = 0 - endif - endfor - - " Clear the results if we can. This needs to be done when linters are - " disabled, or ALE itself is disabled. - if l:can_clear_results - call ale#engine#SetResults(a:buffer, []) - elseif a:new_buffer - call s:AddProblemsFromOtherBuffers( - \ a:buffer, - \ map(copy(a:slots), 'v:val[1]') - \) - endif -endfunction - -function! ale#engine#RunLinters(buffer, linters, should_lint_file) abort - " Initialise the buffer information if needed. - let l:new_buffer = ale#engine#InitBufferInfo(a:buffer) - - call s:GetLintFileValues( - \ s:GetLintFileSlots(a:buffer, a:linters), - \ { - \ slots -> s:RunLinters( - \ a:buffer, - \ a:linters, - \ slots, - \ a:should_lint_file, - \ l:new_buffer, - \ ) - \ } - \) -endfunction - -" Clean up a buffer. -" -" This function will stop all current jobs for the buffer, -" clear the state of everything, and remove the Dictionary for managing -" the buffer. -function! ale#engine#Cleanup(buffer) abort - " Don't bother with cleanup code when newer NeoVim versions are exiting. - if get(v:, 'exiting', v:null) isnot v:null - return - endif - - if exists('*ale#lsp#CloseDocument') - call ale#lsp#CloseDocument(a:buffer) - endif - - if !has_key(g:ale_buffer_info, a:buffer) - return - endif - - call ale#engine#RunLinters(a:buffer, [], 1) - - call remove(g:ale_buffer_info, a:buffer) -endfunction - -" Given a buffer number, return the warnings and errors for a given buffer. -function! ale#engine#GetLoclist(buffer) abort - if !has_key(g:ale_buffer_info, a:buffer) - return [] - endif - - return g:ale_buffer_info[a:buffer].loclist -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/engine/ignore.vim b/dotfiles/.vim/plugged/ale/autoload/ale/engine/ignore.vim deleted file mode 100644 index 80574656..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/engine/ignore.vim +++ /dev/null @@ -1,50 +0,0 @@ -" Author: w0rp -" Description: Code for ignoring linters. Only loaded and if configured. - -" Given a filetype and a configuration for ignoring linters, return a List of -" Strings for linter names to ignore. -function! ale#engine#ignore#GetList(filetype, config) abort - if type(a:config) is v:t_list - return a:config - endif - - if type(a:config) is v:t_dict - let l:names_to_remove = [] - - for l:part in split(a:filetype , '\.') - call extend(l:names_to_remove, get(a:config, l:part, [])) - endfor - - return l:names_to_remove - endif - - return [] -endfunction - -" Given a List of linter descriptions, exclude the linters to be ignored. -function! ale#engine#ignore#Exclude(filetype, all_linters, config, disable_lsp) abort - let l:names_to_remove = ale#engine#ignore#GetList(a:filetype, a:config) - let l:filtered_linters = [] - - for l:linter in a:all_linters - let l:name_list = [l:linter.name] + l:linter.aliases - let l:should_include = 1 - - for l:name in l:name_list - if index(l:names_to_remove, l:name) >= 0 - let l:should_include = 0 - break - endif - endfor - - if a:disable_lsp && has_key(l:linter, 'lsp') && l:linter.lsp isnot# '' - let l:should_include = 0 - endif - - if l:should_include - call add(l:filtered_linters, l:linter) - endif - endfor - - return l:filtered_linters -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/events.vim b/dotfiles/.vim/plugged/ale/autoload/ale/events.vim deleted file mode 100644 index 4efb8a3b..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/events.vim +++ /dev/null @@ -1,165 +0,0 @@ -" Author: w0rp -" Description: ALE functions for autocmd events. - -" Get the number of milliseconds since some vague, but consistent, point in -" the past. -" -" This function can be used for timing execution, etc. -" -" The time will be returned as a Number. -function! ale#events#ClockMilliseconds() abort - return float2nr(reltimefloat(reltime()) * 1000) -endfunction - -function! ale#events#QuitEvent(buffer) abort - " Remember when ALE is quitting for BufWrite, etc. - call setbufvar(a:buffer, 'ale_quitting', ale#events#ClockMilliseconds()) -endfunction - -function! ale#events#QuitRecently(buffer) abort - let l:time = getbufvar(a:buffer, 'ale_quitting', 0) - - return l:time && ale#events#ClockMilliseconds() - l:time < 1000 -endfunction - -function! ale#events#SaveEvent(buffer) abort - let l:should_lint = ale#Var(a:buffer, 'enabled') && g:ale_lint_on_save - - if l:should_lint - call setbufvar(a:buffer, 'ale_save_event_fired', 1) - endif - - if ale#Var(a:buffer, 'fix_on_save') && !ale#events#QuitRecently(a:buffer) - let l:will_fix = ale#fix#Fix(a:buffer, 'save_file') - let l:should_lint = l:should_lint && !l:will_fix - endif - - if l:should_lint && !ale#events#QuitRecently(a:buffer) - call ale#Queue(0, 'lint_file', a:buffer) - endif -endfunction - -function! ale#events#LintOnEnter(buffer) abort - " Unmark a file as being changed outside of Vim after we try to check it. - call setbufvar(a:buffer, 'ale_file_changed', 0) - - if ale#Var(a:buffer, 'enabled') && g:ale_lint_on_enter - call ale#Queue(0, 'lint_file', a:buffer) - endif -endfunction - -function! ale#events#ReadOrEnterEvent(buffer) abort - " Apply pattern options if the variable is set. - if get(g:, 'ale_pattern_options_enabled', 1) - \&& !empty(get(g:, 'ale_pattern_options')) - call ale#pattern_options#SetOptions(a:buffer) - endif - - " When entering a buffer, we are no longer quitting it. - call setbufvar(a:buffer, 'ale_quitting', 0) - let l:filetype = getbufvar(a:buffer, '&filetype') - call setbufvar(a:buffer, 'ale_original_filetype', l:filetype) - - " If the file changed outside of Vim, check it on BufEnter,BufRead - if getbufvar(a:buffer, 'ale_file_changed') - call ale#events#LintOnEnter(a:buffer) - endif -endfunction - -function! ale#events#FileTypeEvent(buffer, new_filetype) abort - " The old filetype will be set to an empty string by the BuFEnter event, - " and not linting when the old filetype hasn't been set yet prevents - " buffers being checked when you enter them when linting on enter is off. - let l:old_filetype = getbufvar(a:buffer, 'ale_original_filetype', v:null) - - if l:old_filetype isnot v:null - \&& !empty(a:new_filetype) - \&& a:new_filetype isnot# l:old_filetype - " Remember what the new filetype is. - call setbufvar(a:buffer, 'ale_original_filetype', a:new_filetype) - - if g:ale_lint_on_filetype_changed - call ale#Queue(300, 'lint_file', a:buffer) - endif - endif -endfunction - -function! ale#events#FileChangedEvent(buffer) abort - call setbufvar(a:buffer, 'ale_file_changed', 1) - - if bufnr('') == a:buffer - call ale#events#LintOnEnter(a:buffer) - endif -endfunction - -function! ale#events#Init() abort - " This value used to be a Boolean as a Number, and is now a String. - let l:text_changed = '' . g:ale_lint_on_text_changed - - augroup ALEEvents - autocmd! - - " These events always need to be set up. - autocmd BufEnter,BufRead * call ale#events#ReadOrEnterEvent(str2nr(expand(''))) - autocmd BufWritePost * call ale#events#SaveEvent(str2nr(expand(''))) - - if g:ale_enabled - if l:text_changed is? 'always' || l:text_changed is# '1' - autocmd TextChanged,TextChangedI * call ale#Queue(ale#Var(str2nr(expand('')), 'lint_delay')) - elseif l:text_changed is? 'normal' - autocmd TextChanged * call ale#Queue(ale#Var(str2nr(expand('')), 'lint_delay')) - elseif l:text_changed is? 'insert' - autocmd TextChangedI * call ale#Queue(ale#Var(str2nr(expand('')), 'lint_delay')) - endif - - if g:ale_lint_on_enter - autocmd BufWinEnter * call ale#events#LintOnEnter(str2nr(expand(''))) - " Track when the file is changed outside of Vim. - autocmd FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand(''))) - endif - - if g:ale_lint_on_filetype_changed - " Only start linting if the FileType actually changes after - " opening a buffer. The FileType will fire when buffers are opened. - autocmd FileType * call ale#events#FileTypeEvent( - \ str2nr(expand('')), - \ expand('') - \) - endif - - if g:ale_lint_on_insert_leave - autocmd InsertLeave * if ale#Var(str2nr(expand('')), 'lint_on_insert_leave') | call ale#Queue(0) | endif - endif - - if g:ale_echo_cursor || g:ale_cursor_detail - autocmd CursorMoved,CursorHold * if exists('*ale#engine#Cleanup') | call ale#cursor#EchoCursorWarningWithDelay() | endif - " Look for a warning to echo as soon as we leave Insert mode. - " The script's position variable used when moving the cursor will - " not be changed here. - autocmd InsertLeave * if exists('*ale#engine#Cleanup') | call ale#cursor#EchoCursorWarning() | endif - endif - - if g:ale_virtualtext_cursor == 1 - autocmd CursorMoved,CursorHold * if exists('*ale#engine#Cleanup') | call ale#virtualtext#ShowCursorWarningWithDelay() | endif - " Look for a warning to echo as soon as we leave Insert mode. - " The script's position variable used when moving the cursor will - " not be changed here. - autocmd InsertLeave * if exists('*ale#engine#Cleanup') | call ale#virtualtext#ShowCursorWarning() | endif - endif - - if g:ale_hover_cursor - autocmd CursorHold * if exists('*ale#lsp#Send') | call ale#hover#ShowTruncatedMessageAtCursor() | endif - endif - - if g:ale_close_preview_on_insert - autocmd InsertEnter * if exists('*ale#preview#CloseIfTypeMatches') | call ale#preview#CloseIfTypeMatches('ale-preview') | endif - endif - endif - augroup END - - augroup AleURISchemes - autocmd! - - autocmd BufNewFile,BufReadPre jdt://** call ale#uri#jdt#ReadJDTLink(expand('')) - augroup END -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/filename_mapping.vim b/dotfiles/.vim/plugged/ale/autoload/ale/filename_mapping.vim deleted file mode 100644 index 76d47acc..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/filename_mapping.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: w0rp -" Description: Logic for handling mappings between files - -" Invert filesystem mappings so they can be mapped in reverse. -function! ale#filename_mapping#Invert(filename_mappings) abort - return map(copy(a:filename_mappings), '[v:val[1], v:val[0]]') -endfunction - -" Given a filename and some filename_mappings, map a filename. -function! ale#filename_mapping#Map(filename, filename_mappings) abort - let l:simplified_filename = ale#path#Simplify(a:filename) - - for [l:mapping_from, l:mapping_to] in a:filename_mappings - let l:mapping_from = ale#path#Simplify(l:mapping_from) - - if l:simplified_filename[:len(l:mapping_from) - 1] is# l:mapping_from - return l:mapping_to . l:simplified_filename[len(l:mapping_from):] - endif - endfor - - return a:filename -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/filerename.vim b/dotfiles/.vim/plugged/ale/autoload/ale/filerename.vim deleted file mode 100644 index ec20d279..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/filerename.vim +++ /dev/null @@ -1,133 +0,0 @@ -" Author: Dalius Dobravolskas -" Description: Rename file support for tsserver - -let s:filerename_map = {} - -" Used to get the rename map in tests. -function! ale#filerename#GetMap() abort - return deepcopy(s:filerename_map) -endfunction - -" Used to set the rename map in tests. -function! ale#filerename#SetMap(map) abort - let s:filerename_map = a:map -endfunction - -function! ale#filerename#ClearLSPData() abort - let s:filerename_map = {} -endfunction - -function! s:message(message) abort - call ale#util#Execute('echom ' . string(a:message)) -endfunction - -function! ale#filerename#HandleTSServerResponse(conn_id, response) abort - if get(a:response, 'command', '') isnot# 'getEditsForFileRename' - return - endif - - if !has_key(s:filerename_map, a:response.request_seq) - return - endif - - let l:options = remove(s:filerename_map, a:response.request_seq) - - let l:old_name = l:options.old_name - let l:new_name = l:options.new_name - - if get(a:response, 'success', v:false) is v:false - let l:message = get(a:response, 'message', 'unknown') - call s:message('Error renaming file "' . l:old_name . '" to "' . l:new_name - \ . '". Reason: ' . l:message) - - return - endif - - let l:changes = a:response.body - - if empty(l:changes) - call s:message('No changes while renaming "' . l:old_name . '" to "' . l:new_name . '"') - else - call ale#code_action#HandleCodeAction( - \ { - \ 'description': 'filerename', - \ 'changes': l:changes, - \ }, - \ { - \ 'should_save': 1, - \ }, - \) - endif - - silent! noautocmd execute 'saveas ' . l:new_name - call delete(l:old_name) -endfunction - -function! s:OnReady(options, linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - - if !ale#lsp#HasCapability(l:id, 'filerename') - return - endif - - let l:buffer = a:lsp_details.buffer - - let l:Callback = function('ale#filerename#HandleTSServerResponse') - - call ale#lsp#RegisterCallback(l:id, l:Callback) - - let l:message = ale#lsp#tsserver_message#GetEditsForFileRename( - \ a:options.old_name, - \ a:options.new_name, - \) - - let l:request_id = ale#lsp#Send(l:id, l:message) - - let s:filerename_map[l:request_id] = a:options -endfunction - -function! s:ExecuteFileRename(linter, options) abort - let l:buffer = bufnr('') - - let l:Callback = function('s:OnReady', [a:options]) - call ale#lsp_linter#StartLSP(l:buffer, a:linter, l:Callback) -endfunction - -function! ale#filerename#Execute() abort - let l:lsp_linters = [] - - for l:linter in ale#linter#Get(&filetype) - if l:linter.lsp is# 'tsserver' - call add(l:lsp_linters, l:linter) - endif - endfor - - if empty(l:lsp_linters) - call s:message('No active tsserver LSPs') - - return - endif - - let l:buffer = bufnr('') - let l:old_name = expand('#' . l:buffer . ':p') - let l:new_name = ale#util#Input('New file name: ', l:old_name, 'file') - - if l:old_name is# l:new_name - call s:message('New file name matches old file name') - - return - endif - - if empty(l:new_name) - call s:message('New name cannot be empty!') - - return - endif - - for l:lsp_linter in l:lsp_linters - call s:ExecuteFileRename(l:lsp_linter, { - \ 'old_name': l:old_name, - \ 'new_name': l:new_name, - \}) - endfor -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/filetypes.vim b/dotfiles/.vim/plugged/ale/autoload/ale/filetypes.vim deleted file mode 100644 index 340a9c4e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/filetypes.vim +++ /dev/null @@ -1,58 +0,0 @@ -" Author: w0rp -" Description: This file handles guessing file extensions for filetypes, etc. - -function! ale#filetypes#LoadExtensionMap() abort - " Output includes: - " '*.erl setf erlang' - let l:output = execute('exec "autocmd"') - - let l:map = {} - - for l:line in split(l:output, "\n") - " Parse filetypes, like so: - " - " *.erl setf erlang - " *.md set filetype=markdown - " *.snippet setlocal filetype=snippets - let l:match = matchlist(l:line, '\v^ *\*(\.[^ ]+).*set(f *| *filetype=|local *filetype=)([^ ]+)') - - if !empty(l:match) - let l:map[substitute(l:match[3], '^=', '', '')] = l:match[1] - endif - endfor - - return l:map -endfunction - -let s:cached_map = {} - -function! s:GetCachedExtensionMap() abort - if empty(s:cached_map) - let s:cached_map = ale#filetypes#LoadExtensionMap() - endif - - return s:cached_map -endfunction - -function! ale#filetypes#GuessExtension(filetype) abort - let l:map = s:GetCachedExtensionMap() - let l:ext = get(l:map, a:filetype, '') - - " If we have an exact match, like something for javascript.jsx, use that. - if !empty(l:ext) - return l:ext - endif - - " If we don't have an exact match, use the first filetype in the compound - " filetype. - for l:part in split(a:filetype, '\.') - let l:ext = get(l:map, l:part, '') - - if !empty(l:ext) - return l:ext - endif - endfor - - " Return an empty string if we don't find anything. - return '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fix.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fix.vim deleted file mode 100644 index d9820847..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fix.vim +++ /dev/null @@ -1,399 +0,0 @@ -" Author: w0rp -" Description: Functions for fixing code with programs, or other means. - -let g:ale_fix_on_save_ignore = get(g:, 'ale_fix_on_save_ignore', {}) -let g:ale_filename_mappings = get(g:, 'ale_filename_mappings', {}) - -" Apply fixes queued up for buffers which may be hidden. -" Vim doesn't let you modify hidden buffers. -function! ale#fix#ApplyQueuedFixes(buffer) abort - let l:data = get(g:ale_fix_buffer_data, a:buffer, {'done': 0}) - - if !l:data.done || (!ale#util#HasBuflineApi() && a:buffer isnot bufnr('')) - return - endif - - call remove(g:ale_fix_buffer_data, a:buffer) - - try - if l:data.changes_made - let l:new_lines = ale#util#SetBufferContents(a:buffer, l:data.output) - - if l:data.should_save - if a:buffer is bufnr('') - if empty(&buftype) - noautocmd :w! - else - set nomodified - endif - else - call writefile(l:new_lines, expand('#' . a:buffer . ':p')) " no-custom-checks - call setbufvar(a:buffer, '&modified', 0) - endif - endif - endif - catch /E21/ - " If we cannot modify the buffer now, try again later. - let g:ale_fix_buffer_data[a:buffer] = l:data - - return - endtry - - if l:data.should_save - let l:should_lint = ale#Var(a:buffer, 'fix_on_save') - \ && ale#Var(a:buffer, 'lint_on_save') - else - let l:should_lint = l:data.changes_made - endif - - silent doautocmd User ALEFixPost - - " If ALE linting is enabled, check for problems with the file again after - " fixing problems. - if g:ale_enabled - \&& l:should_lint - \&& !ale#events#QuitRecently(a:buffer) - call ale#Queue(0, l:data.should_save ? 'lint_file' : '') - endif -endfunction - -function! ale#fix#ApplyFixes(buffer, output) abort - let l:data = g:ale_fix_buffer_data[a:buffer] - let l:data.output = a:output - let l:data.changes_made = l:data.lines_before !=# l:data.output " no-custom-checks - let l:data.done = 1 - - call ale#command#RemoveManagedFiles(a:buffer) - - if !bufexists(a:buffer) - " Remove the buffer data when it doesn't exist. - call remove(g:ale_fix_buffer_data, a:buffer) - endif - - if l:data.changes_made && bufexists(a:buffer) - let l:lines = getbufline(a:buffer, 1, '$') - - if l:data.lines_before != l:lines - call remove(g:ale_fix_buffer_data, a:buffer) - - if !l:data.ignore_file_changed_errors - " no-custom-checks - echoerr 'The file was changed before fixing finished' - endif - - return - endif - endif - - " We can only change the lines of a buffer which is currently open, - " so try and apply the fixes to the current buffer. - call ale#fix#ApplyQueuedFixes(a:buffer) -endfunction - -function! s:HandleExit(job_info, buffer, job_output, data) abort - let l:buffer_info = get(g:ale_fix_buffer_data, a:buffer, {}) - - if empty(l:buffer_info) - return - endif - - if a:job_info.read_temporary_file - let l:output = !empty(a:data.temporary_file) - \ ? readfile(a:data.temporary_file) - \ : [] - else - let l:output = a:job_output - endif - - let l:ProcessWith = get(a:job_info, 'process_with', v:null) - - " Post-process the output with a function if we have one. - if l:ProcessWith isnot v:null - let l:output = call(l:ProcessWith, [a:buffer, l:output]) - endif - - " Use the output of the job for changing the file if it isn't empty, - " otherwise skip this job and use the input from before. - " - " We'll use the input from before for chained commands. - if !empty(split(join(l:output))) - let l:input = l:output - else - let l:input = a:job_info.input - endif - - call s:RunFixer({ - \ 'buffer': a:buffer, - \ 'input': l:input, - \ 'callback_list': a:job_info.callback_list, - \ 'callback_index': a:job_info.callback_index + 1, - \}) -endfunction - -function! s:RunJob(result, options) abort - if ale#command#IsDeferred(a:result) - let a:result.result_callback = {x -> s:RunJob(x, a:options)} - - return - endif - - let l:buffer = a:options.buffer - let l:input = a:options.input - let l:fixer_name = a:options.fixer_name - - if a:result is 0 || type(a:result) is v:t_list - if type(a:result) is v:t_list - let l:input = a:result - endif - - call s:RunFixer({ - \ 'buffer': l:buffer, - \ 'input': l:input, - \ 'callback_index': a:options.callback_index + 1, - \ 'callback_list': a:options.callback_list, - \}) - - return - endif - - let l:command = get(a:result, 'command', '') - - if empty(l:command) - " If the command is empty, skip to the next item. - call s:RunFixer({ - \ 'buffer': l:buffer, - \ 'input': l:input, - \ 'callback_index': a:options.callback_index, - \ 'callback_list': a:options.callback_list, - \}) - - return - endif - - let l:read_temporary_file = get(a:result, 'read_temporary_file', 0) - let l:read_buffer = get(a:result, 'read_buffer', 1) - let l:output_stream = get(a:result, 'output_stream', 'stdout') - let l:cwd = get(a:result, 'cwd', v:null) - - if l:read_temporary_file - let l:output_stream = 'none' - endif - - let l:Callback = function('s:HandleExit', [{ - \ 'input': l:input, - \ 'callback_index': a:options.callback_index, - \ 'callback_list': a:options.callback_list, - \ 'process_with': get(a:result, 'process_with', v:null), - \ 'read_temporary_file': l:read_temporary_file, - \}]) - let l:run_result = ale#command#Run(l:buffer, l:command, l:Callback, { - \ 'output_stream': l:output_stream, - \ 'executable': '', - \ 'read_buffer': l:read_buffer, - \ 'input': l:input, - \ 'log_output': 0, - \ 'cwd': l:cwd, - \ 'filename_mappings': ale#GetFilenameMappings(l:buffer, l:fixer_name), - \}) - - if empty(l:run_result) - call s:RunFixer({ - \ 'buffer': l:buffer, - \ 'input': l:input, - \ 'callback_index': a:options.callback_index + 1, - \ 'callback_list': a:options.callback_list, - \}) - endif -endfunction - -function! s:RunFixer(options) abort - let l:buffer = a:options.buffer - let l:input = a:options.input - let l:index = a:options.callback_index - - if len(a:options.callback_list) <= l:index - call ale#fix#ApplyFixes(l:buffer, l:input) - - return - endif - - let [l:fixer_name, l:Function] = a:options.callback_list[l:index] - - " Record new jobs started as fixer jobs. - call setbufvar(l:buffer, 'ale_job_type', 'fixer') - - " Regular fixer commands accept (buffer, [input]) - let l:result = ale#util#FunctionArgCount(l:Function) == 1 - \ ? call(l:Function, [l:buffer]) - \ : call(l:Function, [l:buffer, copy(l:input)]) - - call s:RunJob(l:result, { - \ 'buffer': l:buffer, - \ 'input': l:input, - \ 'callback_list': a:options.callback_list, - \ 'callback_index': l:index, - \ 'fixer_name': l:fixer_name, - \}) -endfunction - -function! s:AddSubCallbacks(full_list, callbacks) abort - if type(a:callbacks) is v:t_string - call add(a:full_list, a:callbacks) - elseif type(a:callbacks) is v:t_list - call extend(a:full_list, a:callbacks) - else - return 0 - endif - - return 1 -endfunction - -function! s:IgnoreFixers(callback_list, filetype, config) abort - if type(a:config) is v:t_list - let l:ignore_list = a:config - else - let l:ignore_list = [] - - for l:part in split(a:filetype , '\.') - call extend(l:ignore_list, get(a:config, l:part, [])) - endfor - endif - - call filter(a:callback_list, 'index(l:ignore_list, v:val) < 0') -endfunction - -function! s:GetCallbacks(buffer, fixing_flag, fixers) abort - if len(a:fixers) - let l:callback_list = a:fixers - elseif type(get(b:, 'ale_fixers')) is v:t_list - " Lists can be used for buffer-local variables only - let l:callback_list = b:ale_fixers - else - " buffer and global options can use dictionaries mapping filetypes to - " callbacks to run. - let l:fixers = ale#Var(a:buffer, 'fixers') - let l:callback_list = [] - let l:matched = 0 - - for l:sub_type in split(&filetype, '\.') - if s:AddSubCallbacks(l:callback_list, get(l:fixers, l:sub_type)) - let l:matched = 1 - endif - endfor - - " If we couldn't find fixers for a filetype, default to '*' fixers. - if !l:matched - call s:AddSubCallbacks(l:callback_list, get(l:fixers, '*')) - endif - endif - - if a:fixing_flag is# 'save_file' - let l:config = ale#Var(a:buffer, 'fix_on_save_ignore') - - if !empty(l:config) - call s:IgnoreFixers(l:callback_list, &filetype, l:config) - endif - endif - - let l:corrected_list = [] - - " Variables with capital characters are needed, or Vim will complain about - " funcref variables. - for l:Item in l:callback_list - " Try to capture the names of registered fixer names, so we can use - " them for filename mapping or other purposes later. - let l:fixer_name = v:null - - if type(l:Item) is v:t_string - let l:Func = ale#fix#registry#GetFunc(l:Item) - - if !empty(l:Func) - let l:fixer_name = l:Item - let l:Item = l:Func - endif - endif - - try - call add(l:corrected_list, [ - \ l:fixer_name, - \ ale#util#GetFunction(l:Item) - \]) - catch /E475/ - " Rethrow exceptions for failing to get a function so we can print - " a friendly message about it. - throw 'BADNAME ' . v:exception - endtry - endfor - - return l:corrected_list -endfunction - -function! ale#fix#InitBufferData(buffer, fixing_flag) abort - " The 'done' flag tells the function for applying changes when fixing - " is complete. - let g:ale_fix_buffer_data[a:buffer] = { - \ 'lines_before': getbufline(a:buffer, 1, '$'), - \ 'done': 0, - \ 'should_save': a:fixing_flag is# 'save_file', - \ 'ignore_file_changed_errors': a:fixing_flag is# '!', - \ 'temporary_directory_list': [], - \} -endfunction - -" Accepts an optional argument for what to do when fixing. -" -" Returns 0 if no fixes can be applied, and 1 if fixing can be done. -function! ale#fix#Fix(buffer, fixing_flag, ...) abort - if a:fixing_flag isnot# '' - \&& a:fixing_flag isnot# '!' - \&& a:fixing_flag isnot# 'save_file' - throw "fixing_flag must be '', '!', or 'save_file'" - endif - - try - let l:callback_list = s:GetCallbacks(a:buffer, a:fixing_flag, a:000) - catch /E700\|BADNAME/ - if a:fixing_flag isnot# '!' - let l:function_name = join(split(split(v:exception, ':')[3])) - let l:echo_message = printf( - \ 'There is no fixer named `%s`. Check :ALEFixSuggest', - \ l:function_name, - \) - " no-custom-checks - echom l:echo_message - endif - - return 0 - endtry - - if empty(l:callback_list) - if a:fixing_flag is# '' - " no-custom-checks - echom 'No fixers have been defined. Try :ALEFixSuggest' - endif - - return 0 - endif - - call ale#command#StopJobs(a:buffer, 'fixer') - " Clean up any files we might have left behind from a previous run. - call ale#command#RemoveManagedFiles(a:buffer) - call ale#fix#InitBufferData(a:buffer, a:fixing_flag) - - silent doautocmd User ALEFixPre - - call s:RunFixer({ - \ 'buffer': a:buffer, - \ 'input': g:ale_fix_buffer_data[a:buffer].lines_before, - \ 'callback_index': 0, - \ 'callback_list': l:callback_list, - \}) - - return 1 -endfunction - -" Set up an autocmd command to try and apply buffer fixes when available. -augroup ALEBufferFixGroup - autocmd! - autocmd BufEnter * call ale#fix#ApplyQueuedFixes(str2nr(expand(''))) -augroup END diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fix/registry.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fix/registry.vim deleted file mode 100644 index f058123e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fix/registry.vim +++ /dev/null @@ -1,780 +0,0 @@ -" Author: w0rp -" Description: A registry of functions for fixing things. - -let s:default_registry = { -\ 'add_blank_lines_for_python_control_statements': { -\ 'function': 'ale#fixers#generic_python#AddLinesBeforeControlStatements', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Add blank lines before control statements.', -\ }, -\ 'align_help_tags': { -\ 'function': 'ale#fixers#help#AlignTags', -\ 'suggested_filetypes': ['help'], -\ 'description': 'Align help tags to the right margin', -\ }, -\ 'autoimport': { -\ 'function': 'ale#fixers#autoimport#Fix', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Fix import issues with autoimport.', -\ }, -\ 'autoflake': { -\ 'function': 'ale#fixers#autoflake#Fix', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Fix flake issues with autoflake.', -\ }, -\ 'autopep8': { -\ 'function': 'ale#fixers#autopep8#Fix', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Fix PEP8 issues with autopep8.', -\ }, -\ 'bibclean': { -\ 'function': 'ale#fixers#bibclean#Fix', -\ 'suggested_filetypes': ['bib'], -\ 'description': 'Format bib files using bibclean.', -\ }, -\ 'black': { -\ 'function': 'ale#fixers#black#Fix', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Fix PEP8 issues with black.', -\ }, -\ 'buf-format': { -\ 'function': 'ale#fixers#buf_format#Fix', -\ 'suggested_filetypes': ['proto'], -\ 'description': 'Fix .proto files with buf format.', -\ }, -\ 'buildifier': { -\ 'function': 'ale#fixers#buildifier#Fix', -\ 'suggested_filetypes': ['bzl'], -\ 'description': 'Format BUILD and .bzl files with buildifier.', -\ }, -\ 'css-beautify': { -\ 'function': 'ale#fixers#css_beautify#Fix', -\ 'suggested_filetypes': ['css'], -\ 'description': 'Format CSS using css-beautify from js-beautify.', -\ }, -\ 'deno': { -\ 'function': 'ale#fixers#deno#Fix', -\ 'suggested_filetypes': ['typescript'], -\ 'description': 'Fix TypeScript using deno fmt.', -\ }, -\ 'dfmt': { -\ 'function': 'ale#fixers#dfmt#Fix', -\ 'suggested_filetypes': ['d'], -\ 'description': 'Fix D files with dfmt.', -\ }, -\ 'dhall': { -\ 'function': 'ale#fixers#dhall#Fix', -\ 'suggested_filetypes': ['dhall'], -\ 'description': 'Fix Dhall files with dhall-format.', -\ }, -\ 'dhall-format': { -\ 'function': 'ale#fixers#dhall_format#Fix', -\ 'suggested_filetypes': ['dhall'], -\ 'description': 'Standard code formatter for the Dhall language', -\ 'aliases': ['dhall'], -\ }, -\ 'dhall-freeze': { -\ 'function': 'ale#fixers#dhall_freeze#Freeze', -\ 'suggested_filetypes': ['dhall'], -\ 'description': 'Add integrity checks to remote import statements of an expression for the Dhall language', -\ }, -\ 'dhall-lint': { -\ 'function': 'ale#fixers#dhall_lint#Fix', -\ 'suggested_filetypes': ['dhall'], -\ 'description': 'Standard code formatter for the Dhall language and removing dead code', -\ }, -\ 'dune': { -\ 'function': 'ale#fixers#dune#Fix', -\ 'suggested_filetypes': ['dune'], -\ 'description': 'Fix dune files with dune format', -\ }, -\ 'fecs': { -\ 'function': 'ale#fixers#fecs#Fix', -\ 'suggested_filetypes': ['javascript', 'css', 'html'], -\ 'description': 'Apply fecs format to a file.', -\ }, -\ 'tidy': { -\ 'function': 'ale#fixers#tidy#Fix', -\ 'suggested_filetypes': ['html'], -\ 'description': 'Fix HTML files with tidy.', -\ }, -\ 'prettier_standard': { -\ 'function': 'ale#fixers#prettier_standard#Fix', -\ 'suggested_filetypes': ['javascript'], -\ 'description': 'Apply prettier-standard to a file.', -\ 'aliases': ['prettier-standard'], -\ }, -\ 'elm-format': { -\ 'function': 'ale#fixers#elm_format#Fix', -\ 'suggested_filetypes': ['elm'], -\ 'description': 'Apply elm-format to a file.', -\ 'aliases': ['format'], -\ }, -\ 'nimpretty': { -\ 'function': 'ale#fixers#nimpretty#Fix', -\ 'suggested_filetypes': ['nim'], -\ 'description': 'Apply nimpretty to a file.', -\ }, -\ 'erblint': { -\ 'function': 'ale#fixers#erblint#Fix', -\ 'suggested_filetypes': ['eruby'], -\ 'description': 'Apply erblint --autocorrect to a file.', -\ }, -\ 'eslint': { -\ 'function': 'ale#fixers#eslint#Fix', -\ 'suggested_filetypes': ['javascript', 'typescript'], -\ 'description': 'Apply eslint --fix to a file.', -\ }, -\ 'mix_format': { -\ 'function': 'ale#fixers#mix_format#Fix', -\ 'suggested_filetypes': ['elixir'], -\ 'description': 'Apply mix format to a file.', -\ }, -\ 'isort': { -\ 'function': 'ale#fixers#isort#Fix', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Sort Python imports with isort.', -\ }, -\ 'prettier': { -\ 'function': 'ale#fixers#prettier#Fix', -\ 'suggested_filetypes': ['javascript', 'typescript', 'css', 'less', 'scss', 'json', 'json5', 'graphql', 'markdown', 'vue', 'svelte', 'html', 'yaml', 'openapi', 'ruby'], -\ 'description': 'Apply prettier to a file.', -\ }, -\ 'prettier_eslint': { -\ 'function': 'ale#fixers#prettier_eslint#Fix', -\ 'suggested_filetypes': ['javascript'], -\ 'description': 'Apply prettier-eslint to a file.', -\ 'aliases': ['prettier-eslint'], -\ }, -\ 'pyflyby': { -\ 'function': 'ale#fixers#pyflyby#Fix', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Tidy Python imports with pyflyby.', -\ }, -\ 'importjs': { -\ 'function': 'ale#fixers#importjs#Fix', -\ 'suggested_filetypes': ['javascript'], -\ 'description': 'automatic imports for javascript', -\ }, -\ 'puppetlint': { -\ 'function': 'ale#fixers#puppetlint#Fix', -\ 'suggested_filetypes': ['puppet'], -\ 'description': 'Run puppet-lint -f on a file.', -\ }, -\ 'remove_trailing_lines': { -\ 'function': 'ale#fixers#generic#RemoveTrailingBlankLines', -\ 'suggested_filetypes': [], -\ 'description': 'Remove all blank lines at the end of a file.', -\ }, -\ 'trim_whitespace': { -\ 'function': 'ale#fixers#generic#TrimWhitespace', -\ 'suggested_filetypes': [], -\ 'description': 'Remove all trailing whitespace characters at the end of every line.', -\ }, -\ 'yamlfix': { -\ 'function': 'ale#fixers#yamlfix#Fix', -\ 'suggested_filetypes': ['yaml'], -\ 'description': 'Fix yaml files with yamlfix.', -\ }, -\ 'yapf': { -\ 'function': 'ale#fixers#yapf#Fix', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Fix Python files with yapf.', -\ }, -\ 'rubocop': { -\ 'function': 'ale#fixers#rubocop#Fix', -\ 'suggested_filetypes': ['ruby'], -\ 'description': 'Fix ruby files with rubocop --auto-correct.', -\ }, -\ 'rufo': { -\ 'function': 'ale#fixers#rufo#Fix', -\ 'suggested_filetypes': ['ruby'], -\ 'description': 'Fix ruby files with rufo', -\ }, -\ 'scalafmt': { -\ 'function': 'ale#fixers#scalafmt#Fix', -\ 'suggested_filetypes': ['sbt', 'scala'], -\ 'description': 'Fix Scala files using scalafmt', -\ }, -\ 'sorbet': { -\ 'function': 'ale#fixers#sorbet#Fix', -\ 'suggested_filetypes': ['ruby'], -\ 'description': 'Fix ruby files with srb tc --autocorrect.', -\ }, -\ 'standard': { -\ 'function': 'ale#fixers#standard#Fix', -\ 'suggested_filetypes': ['javascript'], -\ 'description': 'Fix JavaScript files using standard --fix', -\ }, -\ 'standardrb': { -\ 'function': 'ale#fixers#standardrb#Fix', -\ 'suggested_filetypes': ['ruby'], -\ 'description': 'Fix ruby files with standardrb --fix', -\ }, -\ 'statix': { -\ 'function': 'ale#fixers#statix#Fix', -\ 'suggested_filetypes': ['nix'], -\ 'description': 'Fix common Nix antipatterns with statix fix', -\ }, -\ 'stylelint': { -\ 'function': 'ale#fixers#stylelint#Fix', -\ 'suggested_filetypes': ['css', 'sass', 'scss', 'sugarss', 'stylus'], -\ 'description': 'Fix stylesheet files using stylelint --fix.', -\ }, -\ 'swiftformat': { -\ 'function': 'ale#fixers#swiftformat#Fix', -\ 'suggested_filetypes': ['swift'], -\ 'description': 'Apply SwiftFormat to a file.', -\ }, -\ 'syntax_tree': { -\ 'function': 'ale#fixers#syntax_tree#Fix', -\ 'suggested_filetypes': ['ruby'], -\ 'description': 'Fix ruby files with stree write', -\ }, -\ 'apple-swift-format': { -\ 'function': 'ale#fixers#appleswiftformat#Fix', -\ 'suggested_filetypes': ['swift'], -\ 'description': 'Apply apple/swift-format to a file.', -\ }, -\ 'phpcbf': { -\ 'function': 'ale#fixers#phpcbf#Fix', -\ 'suggested_filetypes': ['php'], -\ 'description': 'Fix PHP files with phpcbf.', -\ }, -\ 'php_cs_fixer': { -\ 'function': 'ale#fixers#php_cs_fixer#Fix', -\ 'suggested_filetypes': ['php'], -\ 'description': 'Fix PHP files with php-cs-fixer.', -\ }, -\ 'pint': { -\ 'function': 'ale#fixers#pint#Fix', -\ 'suggested_filetypes': ['php'], -\ 'description': 'Fix PHP files with Laravel Pint.', -\ }, -\ 'astyle': { -\ 'function': 'ale#fixers#astyle#Fix', -\ 'suggested_filetypes': ['c', 'cpp'], -\ 'description': 'Fix C/C++ with astyle.', -\ }, -\ 'clangtidy': { -\ 'function': 'ale#fixers#clangtidy#Fix', -\ 'suggested_filetypes': ['c', 'cpp', 'objc'], -\ 'description': 'Fix C/C++ and ObjectiveC files with clang-tidy.', -\ }, -\ 'clang-format': { -\ 'function': 'ale#fixers#clangformat#Fix', -\ 'suggested_filetypes': ['c', 'cpp', 'cuda'], -\ 'description': 'Fix C/C++ and cuda files with clang-format.', -\ }, -\ 'cmakeformat': { -\ 'function': 'ale#fixers#cmakeformat#Fix', -\ 'suggested_filetypes': ['cmake'], -\ 'description': 'Fix CMake files with cmake-format.', -\ }, -\ 'fish_indent': { -\ 'function': 'ale#fixers#fish_indent#Fix', -\ 'suggested_filetypes': ['fish'], -\ 'description': 'Format fish scripts using fish_indent.', -\ }, -\ 'gofmt': { -\ 'function': 'ale#fixers#gofmt#Fix', -\ 'suggested_filetypes': ['go'], -\ 'description': 'Fix Go files with go fmt.', -\ }, -\ 'gofumpt': { -\ 'function': 'ale#fixers#gofumpt#Fix', -\ 'suggested_filetypes': ['go'], -\ 'description': 'Fix Go files with gofumpt, a stricter go fmt.', -\ }, -\ 'goimports': { -\ 'function': 'ale#fixers#goimports#Fix', -\ 'suggested_filetypes': ['go'], -\ 'description': 'Fix Go files imports with goimports.', -\ }, -\ 'golines': { -\ 'function': 'ale#fixers#golines#Fix', -\ 'suggested_filetypes': ['go'], -\ 'description': 'Fix Go file long lines with golines', -\ }, -\ 'gomod': { -\ 'function': 'ale#fixers#gomod#Fix', -\ 'suggested_filetypes': ['gomod'], -\ 'description': 'Fix Go module files with go mod edit -fmt.', -\ }, -\ 'tslint': { -\ 'function': 'ale#fixers#tslint#Fix', -\ 'suggested_filetypes': ['typescript'], -\ 'description': 'Fix typescript files with tslint --fix.', -\ }, -\ 'rustfmt': { -\ 'function': 'ale#fixers#rustfmt#Fix', -\ 'suggested_filetypes': ['rust'], -\ 'description': 'Fix Rust files with Rustfmt.', -\ }, -\ 'textlint': { -\ 'function': 'ale#fixers#textlint#Fix', -\ 'suggested_filetypes': ['text','markdown','asciidoc','tex'], -\ 'description': 'Fix text files with textlint --fix', -\ }, -\ 'hackfmt': { -\ 'function': 'ale#fixers#hackfmt#Fix', -\ 'suggested_filetypes': ['hack'], -\ 'description': 'Fix Hack files with hackfmt.', -\ }, -\ 'floskell': { -\ 'function': 'ale#fixers#floskell#Fix', -\ 'suggested_filetypes': ['haskell'], -\ 'description': 'Fix Haskell files with floskell.', -\ }, -\ 'hfmt': { -\ 'function': 'ale#fixers#hfmt#Fix', -\ 'suggested_filetypes': ['haskell'], -\ 'description': 'Fix Haskell files with hfmt.', -\ }, -\ 'brittany': { -\ 'function': 'ale#fixers#brittany#Fix', -\ 'suggested_filetypes': ['haskell'], -\ 'description': 'Fix Haskell files with brittany.', -\ }, -\ 'hindent': { -\ 'function': 'ale#fixers#hindent#Fix', -\ 'suggested_filetypes': ['haskell'], -\ 'description': 'Fix Haskell files with hindent.', -\ }, -\ 'hlint': { -\ 'function': 'ale#fixers#hlint#Fix', -\ 'suggested_filetypes': ['haskell'], -\ 'description': 'Refactor Haskell files with hlint.', -\ }, -\ 'stylish-haskell': { -\ 'function': 'ale#fixers#stylish_haskell#Fix', -\ 'suggested_filetypes': ['haskell'], -\ 'description': 'Refactor Haskell files with stylish-haskell.', -\ }, -\ 'purs-tidy': { -\ 'function': 'ale#fixers#purs_tidy#Fix', -\ 'suggested_filetypes': ['purescript'], -\ 'description': 'Format PureScript files with purs-tidy.', -\ }, -\ 'purty': { -\ 'function': 'ale#fixers#purty#Fix', -\ 'suggested_filetypes': ['purescript'], -\ 'description': 'Format PureScript files with purty.', -\ }, -\ 'ocamlformat': { -\ 'function': 'ale#fixers#ocamlformat#Fix', -\ 'suggested_filetypes': ['ocaml', 'ocamlinterface'], -\ 'description': 'Fix OCaml files with ocamlformat.', -\ }, -\ 'ocp-indent': { -\ 'function': 'ale#fixers#ocp_indent#Fix', -\ 'suggested_filetypes': ['ocaml', 'ocamlinterface'], -\ 'description': 'Fix OCaml files with ocp-indent.', -\ }, -\ 'refmt': { -\ 'function': 'ale#fixers#refmt#Fix', -\ 'suggested_filetypes': ['reason'], -\ 'description': 'Fix ReasonML files with refmt.', -\ }, -\ 'pandoc': { -\ 'function': 'ale#fixers#pandoc#Fix', -\ 'suggested_filetypes': ['markdown'], -\ 'description': 'Fix markdown files with pandoc.', -\ }, -\ 'shfmt': { -\ 'function': 'ale#fixers#shfmt#Fix', -\ 'suggested_filetypes': ['sh'], -\ 'description': 'Fix sh files with shfmt.', -\ }, -\ 'sqlfmt': { -\ 'function': 'ale#fixers#sqlfmt#Fix', -\ 'suggested_filetypes': ['sql'], -\ 'description': 'Fix SQL files with sqlfmt.', -\ }, -\ 'sqlformat': { -\ 'function': 'ale#fixers#sqlformat#Fix', -\ 'suggested_filetypes': ['sql'], -\ 'description': 'Fix SQL files with sqlformat.', -\ }, -\ 'google_java_format': { -\ 'function': 'ale#fixers#google_java_format#Fix', -\ 'suggested_filetypes': ['java'], -\ 'description': 'Fix Java files with google-java-format.', -\ }, -\ 'fixjson': { -\ 'function': 'ale#fixers#fixjson#Fix', -\ 'suggested_filetypes': ['json'], -\ 'description': 'Fix JSON files with fixjson.', -\ }, -\ 'jq': { -\ 'function': 'ale#fixers#jq#Fix', -\ 'suggested_filetypes': ['json'], -\ 'description': 'Fix JSON files with jq.', -\ }, -\ 'protolint': { -\ 'function': 'ale#fixers#protolint#Fix', -\ 'suggested_filetypes': ['proto'], -\ 'description': 'Fix Protocol Buffer files with protolint.', -\ }, -\ 'perltidy': { -\ 'function': 'ale#fixers#perltidy#Fix', -\ 'suggested_filetypes': ['perl'], -\ 'description': 'Fix Perl files with perltidy.', -\ }, -\ 'xo': { -\ 'function': 'ale#fixers#xo#Fix', -\ 'suggested_filetypes': ['javascript', 'typescript'], -\ 'description': 'Fix JavaScript/TypeScript files using xo --fix.', -\ }, -\ 'qmlfmt': { -\ 'function': 'ale#fixers#qmlfmt#Fix', -\ 'suggested_filetypes': ['qml'], -\ 'description': 'Fix QML files with qmlfmt.', -\ }, -\ 'dartfmt': { -\ 'function': 'ale#fixers#dartfmt#Fix', -\ 'suggested_filetypes': ['dart'], -\ 'description': 'Fix Dart files with dartfmt.', -\ }, -\ 'dart-format': { -\ 'function': 'ale#fixers#dart_format#Fix', -\ 'suggested_filetypes': ['dart'], -\ 'description': 'Fix Dart files with dart format.', -\ }, -\ 'dotnet-format': { -\ 'function': 'ale#fixers#dotnet_format#Fix', -\ 'suggested_filetypes': ['cs'], -\ 'description': 'Fix C# files with dotnet format.', -\ }, -\ 'xmllint': { -\ 'function': 'ale#fixers#xmllint#Fix', -\ 'suggested_filetypes': ['xml'], -\ 'description': 'Fix XML files with xmllint.', -\ }, -\ 'uncrustify': { -\ 'function': 'ale#fixers#uncrustify#Fix', -\ 'suggested_filetypes': ['c', 'cpp', 'cs', 'objc', 'objcpp', 'd', 'java', 'p', 'vala' ], -\ 'description': 'Fix C, C++, C#, ObjectiveC, ObjectiveC++, D, Java, Pawn, and VALA files with uncrustify.', -\ }, -\ 'terraform': { -\ 'function': 'ale#fixers#terraform#Fix', -\ 'suggested_filetypes': ['hcl', 'terraform'], -\ 'description': 'Fix tf and hcl files with terraform fmt.', -\ }, -\ 'packer': { -\ 'function': 'ale#fixers#packer#Fix', -\ 'suggested_filetypes': ['hcl', 'packer'], -\ 'description': 'Fix Packer HCL files with packer fmt.', -\ }, -\ 'crystal': { -\ 'function': 'ale#fixers#crystal#Fix', -\ 'suggested_filetypes': ['cr'], -\ 'description': 'Fix cr (crystal).', -\ }, -\ 'ktlint': { -\ 'function': 'ale#fixers#ktlint#Fix', -\ 'suggested_filetypes': ['kt', 'kotlin'], -\ 'description': 'Fix Kotlin files with ktlint.', -\ }, -\ 'styler': { -\ 'function': 'ale#fixers#styler#Fix', -\ 'suggested_filetypes': ['r', 'rmarkdown', 'rmd'], -\ 'description': 'Fix R files with styler.', -\ }, -\ 'latexindent': { -\ 'function': 'ale#fixers#latexindent#Fix', -\ 'suggested_filetypes': ['tex'], -\ 'description' : 'Indent code within environments, commands, after headings and within special code blocks.', -\ }, -\ 'pgformatter': { -\ 'function': 'ale#fixers#pgformatter#Fix', -\ 'suggested_filetypes': ['sql'], -\ 'description': 'A PostgreSQL SQL syntax beautifier', -\ }, -\ 'reorder-python-imports': { -\ 'function': 'ale#fixers#reorder_python_imports#Fix', -\ 'suggested_filetypes': ['python'], -\ 'description': 'Sort Python imports with reorder-python-imports.', -\ }, -\ 'gnatpp': { -\ 'function': 'ale#fixers#gnatpp#Fix', -\ 'suggested_filetypes': ['ada'], -\ 'description': 'Format Ada files with gnatpp.', -\ }, -\ 'nixfmt': { -\ 'function': 'ale#fixers#nixfmt#Fix', -\ 'suggested_filetypes': ['nix'], -\ 'description': 'A nix formatter written in Haskell.', -\ }, -\ 'nixpkgs-fmt': { -\ 'function': 'ale#fixers#nixpkgsfmt#Fix', -\ 'suggested_filetypes': ['nix'], -\ 'description': 'A formatter for Nix code', -\ }, -\ 'remark-lint': { -\ 'function': 'ale#fixers#remark_lint#Fix', -\ 'suggested_filetypes': ['markdown'], -\ 'description': 'Fix markdown files with remark-lint', -\ }, -\ 'html-beautify': { -\ 'function': 'ale#fixers#html_beautify#Fix', -\ 'suggested_filetypes': ['html', 'htmldjango'], -\ 'description': 'Fix HTML files with html-beautify from js-beautify.', -\ }, -\ 'lua-format': { -\ 'function': 'ale#fixers#lua_format#Fix', -\ 'suggested_filetypes': ['lua'], -\ 'description': 'Fix Lua files with lua-format.', -\ }, -\ 'luafmt': { -\ 'function': 'ale#fixers#luafmt#Fix', -\ 'suggested_filetypes': ['lua'], -\ 'description': 'Fix Lua files with luafmt.', -\ }, -\ 'dprint': { -\ 'function': 'ale#fixers#dprint#Fix', -\ 'suggested_filetypes': ['dockerfile', 'javascript', 'json', 'markdown', 'toml', 'typescript'], -\ 'description': 'Pluggable and configurable code formatting platform', -\ }, -\ 'stylua': { -\ 'function': 'ale#fixers#stylua#Fix', -\ 'suggested_filetypes': ['lua'], -\ 'description': 'Fix Lua files with stylua.', -\ }, -\ 'ormolu': { -\ 'function': 'ale#fixers#ormolu#Fix', -\ 'suggested_filetypes': ['haskell'], -\ 'description': 'A formatter for Haskell source code.', -\ }, -\ 'jsonnetfmt': { -\ 'function': 'ale#fixers#jsonnetfmt#Fix', -\ 'suggested_filetypes': ['jsonnet'], -\ 'description': 'Fix jsonnet files with jsonnetfmt', -\ }, -\ 'ptop': { -\ 'function': 'ale#fixers#ptop#Fix', -\ 'suggested_filetypes': ['pascal'], -\ 'description': 'Fix Pascal files with ptop.', -\ }, -\ 'opafmt': { -\ 'function': 'ale#fixers#opafmt#Fix', -\ 'suggested_filetypes': ['rego'], -\ 'description': 'Fix rego files with opa fmt.', -\ }, -\ 'vfmt': { -\ 'function': 'ale#fixers#vfmt#Fix', -\ 'suggested_filetypes': ['v'], -\ 'description': 'A formatter for V source code.', -\ }, -\ 'zigfmt': { -\ 'function': 'ale#fixers#zigfmt#Fix', -\ 'suggested_filetypes': ['zig'], -\ 'description': 'Official formatter for Zig', -\ } -\} - -" Reset the function registry to the default entries. -function! ale#fix#registry#ResetToDefaults() abort - let s:entries = deepcopy(s:default_registry) - let s:aliases = {} - - " Set up aliases for fixers too. - for [l:key, l:entry] in items(s:entries) - for l:alias in get(l:entry, 'aliases', []) - let s:aliases[l:alias] = l:key - endfor - endfor -endfunction - -" Set up entries now. -call ale#fix#registry#ResetToDefaults() - -" Remove everything from the registry, useful for tests. -function! ale#fix#registry#Clear() abort - let s:entries = {} - let s:aliases = {} -endfunction - -" Add a function for fixing problems to the registry. -" (name, func, filetypes, desc, aliases) -function! ale#fix#registry#Add(name, func, filetypes, desc, ...) abort - " This command will throw from the sandbox. - let &l:equalprg=&l:equalprg - - if type(a:name) isnot v:t_string - throw '''name'' must be a String' - endif - - if type(a:func) isnot v:t_string - throw '''func'' must be a String' - endif - - if type(a:filetypes) isnot v:t_list - throw '''filetypes'' must be a List' - endif - - for l:type in a:filetypes - if type(l:type) isnot v:t_string - throw 'Each entry of ''filetypes'' must be a String' - endif - endfor - - if type(a:desc) isnot v:t_string - throw '''desc'' must be a String' - endif - - let l:aliases = get(a:000, 0, []) - - if type(l:aliases) isnot v:t_list - \|| !empty(filter(copy(l:aliases), 'type(v:val) isnot v:t_string')) - throw '''aliases'' must be a List of String values' - endif - - let s:entries[a:name] = { - \ 'function': a:func, - \ 'suggested_filetypes': a:filetypes, - \ 'description': a:desc, - \} - - " Set up aliases for the fixer. - if !empty(l:aliases) - let s:entries[a:name].aliases = l:aliases - - for l:alias in l:aliases - let s:aliases[l:alias] = a:name - endfor - endif -endfunction - -" Get a function from the registry by its short name. -function! ale#fix#registry#GetFunc(name) abort - " Use the exact name, or an alias. - let l:resolved_name = !has_key(s:entries, a:name) - \ ? get(s:aliases, a:name, a:name) - \ : a:name - - return get(s:entries, l:resolved_name, {'function': ''}).function -endfunction - -function! s:ShouldSuggestForType(suggested_filetypes, type_list) abort - for l:type in a:type_list - if index(a:suggested_filetypes, l:type) >= 0 - return 1 - endif - endfor - - return 0 -endfunction - -function! s:IsGenericFixer(suggested_filetypes) abort - if empty(a:suggested_filetypes) - return 1 - endif - - return 0 -endfunction - -function! s:FormatEntry(key, entry) abort - let l:aliases_str = '' - - " Show aliases in :ALEFixSuggest if they are there. - if !empty(get(a:entry, 'aliases', [])) - let l:aliases_str = ', ' . join( - \ map(copy(a:entry.aliases), 'string(v:val)'), - \ ',' - \) - endif - - return printf( - \ '%s%s - %s', - \ string(a:key), - \ l:aliases_str, - \ a:entry.description, - \) -endfunction - -" Get list of applicable fixers for filetype, including generic fixers -function! ale#fix#registry#GetApplicableFixers(filetype) abort - let l:type_list = split(a:filetype, '\.') - let l:fixer_name_list = [] - - for l:key in sort(keys(s:entries)) - let l:suggested_filetypes = s:entries[l:key].suggested_filetypes - - if s:IsGenericFixer(l:suggested_filetypes) || s:ShouldSuggestForType(l:suggested_filetypes, l:type_list) - call add(l:fixer_name_list, l:key) - endif - endfor - - return l:fixer_name_list -endfunction - -" Function that returns autocomplete candidates for ALEFix command -function! ale#fix#registry#CompleteFixers(ArgLead, CmdLine, CursorPos) abort - return filter(ale#fix#registry#GetApplicableFixers(&filetype), 'v:val =~? a:ArgLead') -endfunction - -function! ale#fix#registry#SuggestedFixers(filetype) abort - let l:type_list = split(a:filetype, '\.') - let l:filetype_fixer_list = [] - - for l:key in sort(keys(s:entries)) - let l:suggested_filetypes = s:entries[l:key].suggested_filetypes - - if s:ShouldSuggestForType(l:suggested_filetypes, l:type_list) - call add( - \ l:filetype_fixer_list, - \ s:FormatEntry(l:key, s:entries[l:key]), - \) - endif - endfor - - let l:generic_fixer_list = [] - - for l:key in sort(keys(s:entries)) - if s:IsGenericFixer(s:entries[l:key].suggested_filetypes) - call add( - \ l:generic_fixer_list, - \ s:FormatEntry(l:key, s:entries[l:key]), - \) - endif - endfor - - return [l:filetype_fixer_list, l:generic_fixer_list] -endfunction - -" Suggest functions to use from the registry. -function! ale#fix#registry#Suggest(filetype) abort - let l:suggested = ale#fix#registry#SuggestedFixers(a:filetype) - let l:filetype_fixer_list = l:suggested[0] - let l:generic_fixer_list = l:suggested[1] - - let l:filetype_fixer_header = !empty(l:filetype_fixer_list) - \ ? ['Try the following fixers appropriate for the filetype:', ''] - \ : [] - let l:generic_fixer_header = !empty(l:generic_fixer_list) - \ ? ['Try the following generic fixers:', ''] - \ : [] - - let l:has_both_lists = !empty(l:filetype_fixer_list) && !empty(l:generic_fixer_list) - - let l:lines = - \ l:filetype_fixer_header - \ + l:filetype_fixer_list - \ + (l:has_both_lists ? [''] : []) - \ + l:generic_fixer_header - \ + l:generic_fixer_list - - if empty(l:lines) - let l:lines = ['There is nothing in the registry to suggest.'] - else - let l:lines += ['', 'See :help ale-fix-configuration'] - endif - - let l:lines += ['', 'Press q to close this window'] - - new +set\ filetype=ale-fix-suggest - call setline(1, l:lines) - setlocal nomodified - setlocal nomodifiable -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/appleswiftformat.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/appleswiftformat.vim deleted file mode 100644 index ca27e82c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/appleswiftformat.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: (bosr) -" Description: Integration of apple/swift-format formatter with ALE. - -function! ale#fixers#appleswiftformat#Fix(buffer) abort - let l:command_args = ale#swift#GetAppleSwiftFormatCommand(a:buffer) . ' format --in-place %t' - let l:config_args = ale#swift#GetAppleSwiftFormatConfigArgs(a:buffer) - - if l:config_args isnot# '' - let l:command_args = l:command_args . ' ' . l:config_args - endif - - return { - \ 'read_temporary_file': 1, - \ 'command': l:command_args, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/astyle.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/astyle.vim deleted file mode 100644 index 3a5a70a1..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/astyle.vim +++ /dev/null @@ -1,59 +0,0 @@ -" Author: James Kim -" Description: Fix C/C++ files with astyle. - -function! s:set_variables() abort - for l:ft in ['c', 'cpp'] - call ale#Set(l:ft . '_astyle_executable', 'astyle') - call ale#Set(l:ft . '_astyle_project_options', '') - endfor -endfunction - -call s:set_variables() - - -function! ale#fixers#astyle#Var(buffer, name) abort - let l:ft = getbufvar(str2nr(a:buffer), '&filetype') - let l:ft = l:ft =~# 'cpp' ? 'cpp' : 'c' - - return ale#Var(a:buffer, l:ft . '_astyle_' . a:name) -endfunction - -" Try to find a project options file. -function! ale#fixers#astyle#FindProjectOptions(buffer) abort - let l:proj_options = ale#fixers#astyle#Var(a:buffer, 'project_options') - - " If user has set project options variable then use it and skip any searching. - " This would allow users to use project files named differently than .astylerc. - if !empty(l:proj_options) - return l:proj_options - endif - - " Try to find nearest .astylerc file. - let l:proj_options = fnamemodify(ale#path#FindNearestFile(a:buffer, '.astylerc'), ':t') - - if !empty(l:proj_options) - return l:proj_options - endif - - " Try to find nearest _astylerc file. - let l:proj_options = fnamemodify(ale#path#FindNearestFile(a:buffer, '_astylerc'), ':t') - - if !empty(l:proj_options) - return l:proj_options - endif - - " If no project options file is found return an empty string. - return '' -endfunction - -function! ale#fixers#astyle#Fix(buffer) abort - let l:executable = ale#fixers#astyle#Var(a:buffer, 'executable') - let l:proj_options = ale#fixers#astyle#FindProjectOptions(a:buffer) - let l:command = ' --stdin=' . ale#Escape(expand('#' . a:buffer)) - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:proj_options) ? '' : ' --project=' . l:proj_options) - \ . l:command - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoflake.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoflake.vim deleted file mode 100644 index e2ad6536..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoflake.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: circld -" Description: Fixing files with autoflake. - -call ale#Set('python_autoflake_executable', 'autoflake') -call ale#Set('python_autoflake_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_autoflake_options', '') - -function! ale#fixers#autoflake#Fix(buffer) abort - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'python_autoflake', - \ ['autoflake'], - \) - - if !executable(l:executable) - return 0 - endif - - let l:options = ale#Var(a:buffer, 'python_autoflake_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --in-place ' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoimport.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoimport.vim deleted file mode 100644 index 700d36b5..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autoimport.vim +++ /dev/null @@ -1,27 +0,0 @@ -" Author: lyz-code -" Description: Fixing Python imports with autoimport. - -call ale#Set('python_autoimport_executable', 'autoimport') -call ale#Set('python_autoimport_options', '') -call ale#Set('python_autoimport_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#fixers#autoimport#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'python_autoimport_options') - - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'python_autoimport', - \ ['autoimport'], - \) - - if !executable(l:executable) - return 0 - endif - - return { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autopep8.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autopep8.vim deleted file mode 100644 index 5798d827..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/autopep8.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: w0rp -" Description: Fixing files with autopep8. - -call ale#Set('python_autopep8_executable', 'autopep8') -call ale#Set('python_autopep8_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_autopep8_options', '') - -function! ale#fixers#autopep8#Fix(buffer) abort - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'python_autopep8', - \ ['autopep8'], - \) - - if !executable(l:executable) - return 0 - endif - - let l:options = ale#Var(a:buffer, 'python_autopep8_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/bibclean.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/bibclean.vim deleted file mode 100644 index 89cb97ab..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/bibclean.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Horacio Sanson - https://github.com/hsanson -" Description: Support for bibclean fixer for BibTeX files. - -call ale#Set('bib_bibclean_executable', 'bibclean') -call ale#Set('bib_bibclean_options', '-align-equals') - -function! ale#fixers#bibclean#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'bib_bibclean_options') - let l:executable = ale#Var(a:buffer, 'bib_bibclean_executable') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' ' . (empty(l:options) ? '' : l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/black.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/black.vim deleted file mode 100644 index 4a88c5cd..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/black.vim +++ /dev/null @@ -1,52 +0,0 @@ -" Author: w0rp -" Description: Fixing Python files with black. -" -call ale#Set('python_black_executable', 'black') -call ale#Set('python_black_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_black_options', '') -call ale#Set('python_black_auto_pipenv', 0) -call ale#Set('python_black_auto_poetry', 0) -call ale#Set('python_black_change_directory', 1) - -function! ale#fixers#black#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_black_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_black_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_black', ['black']) -endfunction - -function! ale#fixers#black#Fix(buffer) abort - let l:executable = ale#fixers#black#GetExecutable(a:buffer) - let l:cmd = [ale#Escape(l:executable)] - - if l:executable =~? 'pipenv\|poetry$' - call extend(l:cmd, ['run', 'black']) - endif - - let l:options = ale#Var(a:buffer, 'python_black_options') - - if !empty(l:options) - call add(l:cmd, l:options) - endif - - if expand('#' . a:buffer . ':e') is? 'pyi' - call add(l:cmd, '--pyi') - endif - - call add(l:cmd, '-') - - let l:result = {'command': join(l:cmd, ' ')} - - if ale#Var(a:buffer, 'python_black_change_directory') - let l:result.cwd = '%s:h' - endif - - return l:result -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/brittany.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/brittany.vim deleted file mode 100644 index c2448348..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/brittany.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: eborden , ifyouseewendy , aspidiets -" Description: Integration of brittany with ALE. - -call ale#Set('haskell_brittany_executable', 'brittany') - -function! ale#fixers#brittany#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_brittany_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'brittany') -endfunction - -function! ale#fixers#brittany#Fix(buffer) abort - let l:executable = ale#fixers#brittany#GetExecutable(a:buffer) - - return { - \ 'command': l:executable - \ . ' --write-mode inplace' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/buf_format.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/buf_format.vim deleted file mode 100644 index c2c156b7..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/buf_format.vim +++ /dev/null @@ -1,12 +0,0 @@ -" Author: Alex McKinney -" Description: Run buf format. - -call ale#Set('proto_buf_format_executable', 'buf') - -function! ale#fixers#buf_format#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'proto_buf_format_executable') - - return { - \ 'command': ale#Escape(l:executable) . ' format %t', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/buildifier.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/buildifier.vim deleted file mode 100644 index 48103b2e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/buildifier.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Jon Parise -" Description: Format Bazel BUILD and .bzl files with buildifier. -" -call ale#Set('bazel_buildifier_executable', 'buildifier') -call ale#Set('bazel_buildifier_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('bazel_buildifier_options', '') - -function! ale#fixers#buildifier#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'bazel_buildifier', [ - \ 'buildifier', - \]) -endfunction - -function! ale#fixers#buildifier#Fix(buffer) abort - let l:executable = ale#Escape(ale#fixers#buildifier#GetExecutable(a:buffer)) - let l:options = ale#Var(a:buffer, 'bazel_buildifier_options') - let l:filename = ale#Escape(bufname(a:buffer)) - - let l:command = l:executable . ' -mode fix -lint fix -path ' . l:filename - - if l:options isnot# '' - let l:command .= ' ' . l:options - endif - - return {'command': l:command . ' -'} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangformat.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangformat.vim deleted file mode 100644 index 81498ebd..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangformat.vim +++ /dev/null @@ -1,47 +0,0 @@ -scriptencoding utf-8 -" Author: Peter Renström -" Description: Fixing C/C++ files with clang-format. - -call ale#Set('c_clangformat_executable', 'clang-format') -call ale#Set('c_clangformat_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('c_clangformat_options', '') -call ale#Set('c_clangformat_style_option', '') -call ale#Set('c_clangformat_use_local_file', 0) - -function! ale#fixers#clangformat#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'c_clangformat', [ - \ 'clang-format', - \]) -endfunction - -function! ale#fixers#clangformat#Fix(buffer) abort - let l:executable = ale#Escape(ale#fixers#clangformat#GetExecutable(a:buffer)) - let l:filename = ale#Escape(bufname(a:buffer)) - let l:options = ale#Var(a:buffer, 'c_clangformat_options') - let l:style_option = ale#Var(a:buffer, 'c_clangformat_style_option') - let l:use_local_file = ale#Var(a:buffer, 'c_clangformat_use_local_file') - - if l:style_option isnot# '' - let l:style_option = '-style=' . "'" . l:style_option . "'" - endif - - if l:use_local_file - let l:config = ale#path#FindNearestFile(a:buffer, '.clang-format') - - if !empty(l:config) - let l:style_option = '-style=file' - endif - endif - - if l:style_option isnot# '' - let l:options .= ' ' . l:style_option - endif - - let l:command = l:executable . ' --assume-filename=' . l:filename - - if l:options isnot# '' - let l:command .= ' ' . l:options - endif - - return {'command': l:command} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangtidy.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangtidy.vim deleted file mode 100644 index b37360a7..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/clangtidy.vim +++ /dev/null @@ -1,52 +0,0 @@ -scriptencoding utf-8 -" Author: ObserverOfTime -" Description: Fixing C/C++ files with clang-tidy. - -function! s:set_variables() abort - let l:use_global = get(g:, 'ale_use_global_executables', 0) - - for l:ft in ['c', 'cpp'] - call ale#Set(l:ft . '_clangtidy_executable', 'clang-tidy') - call ale#Set(l:ft . '_clangtidy_use_global', l:use_global) - call ale#Set(l:ft . '_clangtidy_checks', []) - call ale#Set(l:ft . '_clangtidy_options', '') - call ale#Set(l:ft . '_clangtidy_extra_options', '') - call ale#Set(l:ft . '_clangtidy_fix_errors', 1) - endfor - - call ale#Set('c_build_dir', '') -endfunction - -call s:set_variables() - -function! ale#fixers#clangtidy#Var(buffer, name) abort - let l:ft = getbufvar(str2nr(a:buffer), '&filetype') - let l:ft = l:ft =~# 'cpp' ? 'cpp' : 'c' - - return ale#Var(a:buffer, l:ft . '_clangtidy_' . a:name) -endfunction - -function! ale#fixers#clangtidy#GetCommand(buffer) abort - let l:checks = join(ale#fixers#clangtidy#Var(a:buffer, 'checks'), ',') - let l:extra_options = ale#fixers#clangtidy#Var(a:buffer, 'extra_options') - let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - let l:options = empty(l:build_dir) - \ ? ale#fixers#clangtidy#Var(a:buffer, 'options') : '' - let l:fix_errors = ale#fixers#clangtidy#Var(a:buffer, 'fix_errors') - - return ' -fix' . (l:fix_errors ? ' -fix-errors' : '') - \ . (empty(l:checks) ? '' : ' -checks=' . ale#Escape(l:checks)) - \ . (empty(l:extra_options) ? '' : ' ' . l:extra_options) - \ . (empty(l:build_dir) ? '' : ' -p ' . ale#Escape(l:build_dir)) - \ . ' %t' . (empty(l:options) ? '' : ' -- ' . l:options) -endfunction - -function! ale#fixers#clangtidy#Fix(buffer) abort - let l:executable = ale#fixers#clangtidy#Var(a:buffer, 'executable') - let l:command = ale#fixers#clangtidy#GetCommand(a:buffer) - - return { - \ 'command': ale#Escape(l:executable) . l:command, - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/cmakeformat.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/cmakeformat.vim deleted file mode 100644 index dcc29cf3..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/cmakeformat.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: Attila Maczak -" Description: Integration of cmakeformat with ALE. - -call ale#Set('cmake_cmakeformat_executable', 'cmake-format') -call ale#Set('cmake_cmakeformat_options', '') - -function! ale#fixers#cmakeformat#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'cmake_cmakeformat_executable') - let l:options = ale#Var(a:buffer, 'cmake_cmakeformat_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' -' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/crystal.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/crystal.vim deleted file mode 100644 index 4ba702ba..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/crystal.vim +++ /dev/null @@ -1,14 +0,0 @@ -call ale#Set('crystal_format_executable', 'crystal') -call ale#Set('crystal_format_options', '') - -function! ale#fixers#crystal#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'crystal_format_executable') - let l:options = ale#Var(a:buffer, 'crystal_format_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' tool format' - \ . ale#Pad(l:options) - \ . ' -' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/css_beautify.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/css_beautify.vim deleted file mode 100644 index 14a837c4..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/css_beautify.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: https://github.com/Spixmaster -" Description: Format CSS using css-beautify from js-beautify. - -call ale#Set('css_css_beautify_executable', 'css-beautify') -call ale#Set('css_css_beautify_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('css_css_beautify_options', '') - -function! ale#fixers#css_beautify#Fix(buffer) abort - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'css_css_beautify', - \ ['css-beautify'] - \) - - let l:options = ale#Var(a:buffer, 'css_css_beautify_options') - - return { - \ 'command': ale#Escape(l:executable) . ' ' . l:options . ' -', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dart_format.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dart_format.vim deleted file mode 100644 index 4b8f730b..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dart_format.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: ghsang -" Description: Integration of dart format with ALE. - -call ale#Set('dart_format_executable', 'dart') -call ale#Set('dart_format_options', '') - -function! ale#fixers#dart_format#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'dart_format_executable') - let l:options = ale#Var(a:buffer, 'dart_format_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' format' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dartfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dartfmt.vim deleted file mode 100644 index 0687d6d1..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dartfmt.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: reisub0 -" Description: Integration of dartfmt with ALE. - -call ale#Set('dart_dartfmt_executable', 'dartfmt') -call ale#Set('dart_dartfmt_options', '') - -function! ale#fixers#dartfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'dart_dartfmt_executable') - let l:options = ale#Var(a:buffer, 'dart_dartfmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -w' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/deno.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/deno.vim deleted file mode 100644 index 7154c6ee..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/deno.vim +++ /dev/null @@ -1,17 +0,0 @@ -function! ale#fixers#deno#Fix(buffer) abort - let l:executable = ale#handlers#deno#GetExecutable(a:buffer) - - if !executable(l:executable) - return 0 - endif - - let l:options = ' fmt -' - - if ale#Var(a:buffer, 'deno_unstable') - let l:options = l:options . ' --unstable' - endif - - return { - \ 'command': ale#Escape(l:executable) . l:options - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dfmt.vim deleted file mode 100644 index 0072e045..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dfmt.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: theoldmoon0602 -" Description: Integration of dfmt with ALE. - -call ale#Set('d_dfmt_executable', 'dfmt') -call ale#Set('d_dfmt_options', '') - -function! ale#fixers#dfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'd_dfmt_executable') - let l:options = ale#Var(a:buffer, 'd_dfmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -i' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_format.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_format.vim deleted file mode 100644 index 4f12abc8..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_format.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Author: toastal -" Description: Dhall’s built-in formatter -" -function! ale#fixers#dhall_format#Fix(buffer) abort - let l:executable = ale#dhall#GetExecutableWithOptions(a:buffer) - - return { - \ 'command': l:executable - \ . ' format' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_freeze.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_freeze.vim deleted file mode 100644 index ff54482d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_freeze.vim +++ /dev/null @@ -1,14 +0,0 @@ -" Author: toastal -" Description: Dhall’s package freezing - -call ale#Set('dhall_freeze_options', '') - -function! ale#fixers#dhall_freeze#Freeze(buffer) abort - let l:executable = ale#dhall#GetExecutableWithOptions(a:buffer) - - return { - \ 'command': l:executable - \ . ' freeze' - \ . ale#Pad(ale#Var(a:buffer, 'dhall_freeze_options')) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_lint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_lint.vim deleted file mode 100644 index 149a6581..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dhall_lint.vim +++ /dev/null @@ -1,11 +0,0 @@ -" Author: toastal -" Description: Dhall’s built-in linter/formatter - -function! ale#fixers#dhall_lint#Fix(buffer) abort - let l:executable = ale#dhall#GetExecutableWithOptions(a:buffer) - - return { - \ 'command': l:executable - \ . ' lint' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dotnet_format.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dotnet_format.vim deleted file mode 100644 index b44a28bd..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dotnet_format.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: ghsang -" Description: Integration of dotnet format with ALE. - -call ale#Set('cs_dotnet_format_executable', 'dotnet') -call ale#Set('cs_dotnet_format_options', '') - -function! ale#fixers#dotnet_format#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'cs_dotnet_format_executable') - let l:options = ale#Var(a:buffer, 'cs_dotnet_format_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' format' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' --folder --include %t "$(dirname %t)"', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dprint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dprint.vim deleted file mode 100644 index 99e590df..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dprint.vim +++ /dev/null @@ -1,29 +0,0 @@ -call ale#Set('dprint_executable', 'dprint') -call ale#Set('dprint_executable_override', 0) -call ale#Set('dprint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('dprint_options', '') -call ale#Set('dprint_config', 'dprint.json') - -function! ale#fixers#dprint#Fix(buffer) abort - let l:executable = ale#path#FindExecutable(a:buffer, 'dprint', ['dprint']) - let l:executable_override = ale#Var(a:buffer, 'dprint_executable_override') - - if !executable(l:executable) && !l:executable_override - return 0 - endif - - let l:options = ale#Var(a:buffer, 'dprint_options') - let l:config = ale#path#FindNearestFile(a:buffer, ale#Var(a:buffer, 'dprint_config')) - - if !empty(l:config) - let l:options = l:options . ' -c ' . ale#Escape(l:config) - endif - - let l:options = l:options . ' --stdin %s' - - return { - \ 'command': ale#Escape(l:executable) - \ . ' fmt ' - \ . l:options - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dune.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dune.vim deleted file mode 100644 index 6ef7ec9f..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/dune.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: Albert Peschar -" Description: Fix files with dune format. - -call ale#Set('ocaml_dune_executable', 'dune') -call ale#Set('ocaml_dune_options', '') - -function! ale#fixers#dune#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'ocaml_dune_executable') - let l:options = ale#Var(a:buffer, 'ocaml_dune_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' format' - \ . (empty(l:options) ? '' : ' ' . l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/elm_format.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/elm_format.vim deleted file mode 100644 index a4740db4..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/elm_format.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: soywod -" Description: Integration of elm-format with ALE. - -call ale#Set('elm_format_executable', 'elm-format') -call ale#Set('elm_format_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('elm_format_options', '--yes') - -function! ale#fixers#elm_format#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'elm_format', [ - \ 'node_modules/.bin/elm-format', - \]) -endfunction - -function! ale#fixers#elm_format#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'elm_format_options') - - return { - \ 'command': ale#Escape(ale#fixers#elm_format#GetExecutable(a:buffer)) - \ . ' %t' - \ . (empty(l:options) ? '' : ' ' . l:options), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/erblint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/erblint.vim deleted file mode 100644 index 41aca0c8..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/erblint.vim +++ /dev/null @@ -1,40 +0,0 @@ -" Author: Roeland Moors - https://github.com/roelandmoors -" Description: ERB Lint, support for https://github.com/Shopify/erb-lint - -call ale#Set('eruby_erblint_executable', 'erblint') -call ale#Set('eruby_erblint_options', '') - - -" Erblint fixer outputs diagnostics first and then the fixed -" output. These are delimited by something like this: -" ================ /path/to/demo.html.erb ================== -" We only need the output after this -function! ale#fixers#erblint#PostProcess(buffer, output) abort - let l:line = 0 - - for l:output in a:output - let l:line = l:line + 1 - - if l:output =~# "^=\\+.*=\\+$" - break - endif - endfor - - return a:output[l:line :] -endfunction - -function! ale#fixers#erblint#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'eruby_erblint_executable') - let l:options = ale#Var(a:buffer, 'eruby_erblint_options') - - return ale#ruby#EscapeExecutable(l:executable, 'erblint') - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --autocorrect --stdin %s' -endfunction - -function! ale#fixers#erblint#Fix(buffer) abort - return { - \ 'command': ale#fixers#erblint#GetCommand(a:buffer), - \ 'process_with': 'ale#fixers#erblint#PostProcess' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/erlfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/erlfmt.vim deleted file mode 100644 index f9951e9d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/erlfmt.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: AntoineGagne - https://github.com/AntoineGagne -" Description: Integration of erlfmt with ALE. - -call ale#Set('erlang_erlfmt_executable', 'erlfmt') -call ale#Set('erlang_erlfmt_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('erlang_erlfmt_options', '') - -function! ale#fixers#erlfmt#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'erlang_erlfmt', ['erlfmt']) -endfunction - -function! ale#fixers#erlfmt#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'erlang_erlfmt_options') - let l:executable = ale#fixers#erlfmt#GetExecutable(a:buffer) - - let l:command = ale#Escape(l:executable) . (empty(l:options) ? '' : ' ' . l:options) . ' %s' - - return { - \ 'command': l:command - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/eslint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/eslint.vim deleted file mode 100644 index c9535cb0..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/eslint.vim +++ /dev/null @@ -1,83 +0,0 @@ -" Author: w0rp -" Description: Fixing files with eslint. - -function! ale#fixers#eslint#Fix(buffer) abort - let l:executable = ale#handlers#eslint#GetExecutable(a:buffer) - let l:command = ale#node#Executable(a:buffer, l:executable) - \ . ' --version' - - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ l:executable, - \ l:command, - \ function('ale#fixers#eslint#ApplyFixForVersion'), - \) -endfunction - -function! ale#fixers#eslint#ProcessFixDryRunOutput(buffer, output) abort - for l:item in ale#util#FuzzyJSONDecode(a:output, []) - return split(get(l:item, 'output', ''), "\n") - endfor - - return [] -endfunction - -function! ale#fixers#eslint#ProcessEslintDOutput(buffer, output) abort - " If the output is an error message, don't use it. - for l:line in a:output[:10] - if l:line =~# '\v^Error:|^Could not connect' - return [] - endif - endfor - - return a:output -endfunction - -function! ale#fixers#eslint#ApplyFixForVersion(buffer, version) abort - let l:executable = ale#handlers#eslint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'javascript_eslint_options') - - " Use the configuration file from the options, if configured. - if l:options =~# '\v(^| )-c|(^| )--config' - let l:config = '' - let l:has_config = 1 - else - let l:config = ale#handlers#eslint#FindConfig(a:buffer) - let l:has_config = !empty(l:config) - endif - - if !l:has_config - return 0 - endif - - " Use --fix-to-stdout with eslint_d - if l:executable =~# 'eslint_d$' && ale#semver#GTE(a:version, [3, 19, 0]) - return { - \ 'cwd': ale#handlers#eslint#GetCwd(a:buffer), - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . ale#Pad(l:options) - \ . ' --stdin-filename %s --stdin --fix-to-stdout', - \ 'process_with': 'ale#fixers#eslint#ProcessEslintDOutput', - \} - endif - - " 4.9.0 is the first version with --fix-dry-run - if ale#semver#GTE(a:version, [4, 9, 0]) - return { - \ 'cwd': ale#handlers#eslint#GetCwd(a:buffer), - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . ale#Pad(l:options) - \ . ' --stdin-filename %s --stdin --fix-dry-run --format=json', - \ 'process_with': 'ale#fixers#eslint#ProcessFixDryRunOutput', - \} - endif - - return { - \ 'cwd': ale#handlers#eslint#GetCwd(a:buffer), - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . ale#Pad(l:options) - \ . (!empty(l:config) ? ' -c ' . ale#Escape(l:config) : '') - \ . ' --fix %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fecs.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fecs.vim deleted file mode 100644 index d692bc97..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fecs.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: harttle -" Description: Apply fecs format to a file. - -function! ale#fixers#fecs#Fix(buffer) abort - let l:executable = ale#handlers#fecs#GetExecutable(a:buffer) - - if !executable(l:executable) - return 0 - endif - - let l:config_options = ' format --replace=true %t' - - return { - \ 'command': ale#Escape(l:executable) . l:config_options, - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fish_indent.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fish_indent.vim deleted file mode 100644 index ebf17c5a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fish_indent.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Author: Chen YuanYuan -" Description: Integration of fish_indent with ALE. - -call ale#Set('fish_fish_indent_executable', 'fish_indent') -call ale#Set('fish_fish_indent_options', '') - -function! ale#fixers#fish_indent#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'fish_fish_indent_executable') - let l:options = ale#Var(a:buffer, 'fish_fish_indent_options') - let l:filename = ale#Escape(bufname(a:buffer)) - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -w ' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fixjson.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fixjson.vim deleted file mode 100644 index 4bad8f9b..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/fixjson.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: rhysd -" Description: Integration of fixjson with ALE. - -call ale#Set('json_fixjson_executable', 'fixjson') -call ale#Set('json_fixjson_options', '') -call ale#Set('json_fixjson_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#fixers#fixjson#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'json_fixjson', [ - \ 'node_modules/.bin/fixjson', - \]) -endfunction - -function! ale#fixers#fixjson#Fix(buffer) abort - let l:executable = ale#Escape(ale#fixers#fixjson#GetExecutable(a:buffer)) - let l:filename = ale#Escape(bufname(a:buffer)) - let l:command = l:executable . ' --stdin-filename ' . l:filename - - let l:options = ale#Var(a:buffer, 'json_fixjson_options') - - if l:options isnot# '' - let l:command .= ' ' . l:options - endif - - return { - \ 'command': l:command - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/floskell.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/floskell.vim deleted file mode 100644 index f0015db7..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/floskell.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: robertjlooby -" Description: Integration of floskell with ALE. - -call ale#Set('haskell_floskell_executable', 'floskell') - -function! ale#fixers#floskell#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_floskell_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'floskell') -endfunction - -function! ale#fixers#floskell#Fix(buffer) abort - let l:executable = ale#fixers#floskell#GetExecutable(a:buffer) - - return { - \ 'command': l:executable - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic.vim deleted file mode 100644 index cb8865b4..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: w0rp -" Description: Generic functions for fixing files with. - -function! ale#fixers#generic#RemoveTrailingBlankLines(buffer, lines) abort - let l:end_index = len(a:lines) - 1 - - while l:end_index > 0 && empty(a:lines[l:end_index]) - let l:end_index -= 1 - endwhile - - return a:lines[:l:end_index] -endfunction - -" Remove all whitespaces at the end of lines -function! ale#fixers#generic#TrimWhitespace(buffer, lines) abort - let l:index = 0 - let l:lines_new = range(len(a:lines)) - - for l:line in a:lines - let l:lines_new[l:index] = substitute(l:line, '\s\+$', '', 'g') - let l:index = l:index + 1 - endfor - - return l:lines_new -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic_python.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic_python.vim deleted file mode 100644 index d55a23c3..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/generic_python.vim +++ /dev/null @@ -1,75 +0,0 @@ -" Author: w0rp -" Description: Generic fixer functions for Python. - -" Add blank lines before control statements. -function! ale#fixers#generic_python#AddLinesBeforeControlStatements(buffer, lines) abort - let l:new_lines = [] - let l:last_indent_size = 0 - let l:last_line_is_blank = 0 - let l:in_docstring = 0 - - for l:line in a:lines - let l:indent_size = len(matchstr(l:line, '^ *')) - - if !l:in_docstring - " Make sure it is not just a single line docstring and then verify - " it's starting a new docstring - if match(l:line, '\v^ *("""|'''''').*("""|'''''')') == -1 - \&& match(l:line, '\v^ *("""|'''''')') >= 0 - let l:in_docstring = 1 - endif - else - if match(l:line, '\v^ *.*("""|'''''')') >= 0 - let l:in_docstring = 0 - endif - endif - - if !l:last_line_is_blank - \&& !l:in_docstring - \&& l:indent_size <= l:last_indent_size - \&& match(l:line, '\v^ *(return|if|for|while|break|continue)(\(| |$)') >= 0 - call add(l:new_lines, '') - endif - - call add(l:new_lines, l:line) - let l:last_indent_size = l:indent_size - let l:last_line_is_blank = empty(split(l:line)) - endfor - - return l:new_lines -endfunction - -" This function breaks up long lines so that autopep8 or other tools can -" fix the badly-indented code which is produced as a result. -function! ale#fixers#generic_python#BreakUpLongLines(buffer, lines) abort - " Default to a maximum line length of 79 - let l:max_line_length = 79 - let l:conf = ale#path#FindNearestFile(a:buffer, 'setup.cfg') - - " Read the maximum line length from setup.cfg - if !empty(l:conf) - for l:match in ale#util#GetMatches( - \ readfile(l:conf), - \ '\v^ *max-line-length *\= *(\d+)', - \) - let l:max_line_length = str2nr(l:match[1]) - endfor - endif - - let l:new_list = [] - - for l:line in a:lines - if len(l:line) > l:max_line_length && l:line !~# '# *noqa' - let l:line = substitute(l:line, '\v([(,])([^)])', '\1\n\2', 'g') - let l:line = substitute(l:line, '\v([^(])([)])', '\1,\n\2', 'g') - - for l:split_line in split(l:line, "\n") - call add(l:new_list, l:split_line) - endfor - else - call add(l:new_list, l:line) - endif - endfor - - return l:new_list -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gnatpp.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gnatpp.vim deleted file mode 100644 index bf3d484e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gnatpp.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: tim -" Description: Fix files with gnatpp. - -call ale#Set('ada_gnatpp_executable', 'gnatpp') -call ale#Set('ada_gnatpp_options', '') - -function! ale#fixers#gnatpp#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'ada_gnatpp_executable') - let l:options = ale#Var(a:buffer, 'ada_gnatpp_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofmt.vim deleted file mode 100644 index b9cfbb58..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofmt.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: aliou -" Description: Integration of gofmt with ALE. - -call ale#Set('go_gofmt_executable', 'gofmt') -call ale#Set('go_gofmt_options', '') - -function! ale#fixers#gofmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'go_gofmt_executable') - let l:options = ale#Var(a:buffer, 'go_gofmt_options') - let l:env = ale#go#EnvString(a:buffer) - - return { - \ 'command': l:env . ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofumpt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofumpt.vim deleted file mode 100644 index 99753209..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gofumpt.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: David Houston -" Description: A stricter gofmt implementation. - -call ale#Set('go_gofumpt_executable', 'gofumpt') -call ale#Set('go_gofumpt_options', '') - -function! ale#fixers#gofumpt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'go_gofumpt_executable') - let l:options = ale#Var(a:buffer, 'go_gofumpt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ale#Pad(l:options) - \ . ' -w -- %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/goimports.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/goimports.vim deleted file mode 100644 index 65f0fd98..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/goimports.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Jeff Willette -" Description: Integration of goimports with ALE. - -call ale#Set('go_goimports_executable', 'goimports') -call ale#Set('go_goimports_options', '') - -function! ale#fixers#goimports#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'go_goimports_executable') - let l:options = ale#Var(a:buffer, 'go_goimports_options') - let l:env = ale#go#EnvString(a:buffer) - - if !executable(l:executable) - return 0 - endif - - return { - \ 'command': l:env . ale#Escape(l:executable) - \ . ' -l -w -srcdir %s' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/golines.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/golines.vim deleted file mode 100644 index 9326f482..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/golines.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author Pig Frown -" Description: Fix Go files long lines with golines" - -call ale#Set('go_golines_executable', 'golines') - -call ale#Set('go_golines_options', '') - -function! ale#fixers#golines#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'go_golines_executable') - let l:options = ale#Var(a:buffer, 'go_golines_options') - let l:env = ale#go#EnvString(a:buffer) - - if !executable(l:executable) - return 0 - endif - - return { - \ 'command': l:env . ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gomod.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gomod.vim deleted file mode 100644 index ee8c46c9..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/gomod.vim +++ /dev/null @@ -1,11 +0,0 @@ -call ale#Set('go_go_executable', 'go') - -function! ale#fixers#gomod#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'go_go_executable') - let l:env = ale#go#EnvString(a:buffer) - - return { - \ 'command': l:env . ale#Escape(l:executable) . ' mod edit -fmt %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/google_java_format.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/google_java_format.vim deleted file mode 100644 index 20086c73..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/google_java_format.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: butlerx -" Description: Integration of Google-java-format with ALE. - -call ale#Set('java_google_java_format_executable', 'google-java-format') -call ale#Set('java_google_java_format_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('java_google_java_format_options', '') - -function! ale#fixers#google_java_format#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'java_google_java_format_options') - let l:executable = ale#Var(a:buffer, 'java_google_java_format_executable') - - if !executable(l:executable) - return 0 - endif - - return { - \ 'command': ale#Escape(l:executable) - \ . ' ' . (empty(l:options) ? '' : ' ' . l:options) - \ . ' --replace' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hackfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hackfmt.vim deleted file mode 100644 index bf2d4f71..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hackfmt.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: Sam Howie -" Description: Integration of hackfmt with ALE. - -call ale#Set('hack_hackfmt_executable', 'hackfmt') -call ale#Set('hack_hackfmt_options', '') - -function! ale#fixers#hackfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'hack_hackfmt_executable') - let l:options = ale#Var(a:buffer, 'hack_hackfmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -i' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/help.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/help.vim deleted file mode 100644 index b20740fe..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/help.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: w0rp -" Description: Generic fixer functions for Vim help documents. - -function! ale#fixers#help#AlignTags(buffer, lines) abort - let l:new_lines = [] - - for l:line in a:lines - if len(l:line) != 79 - let l:match = matchlist(l:line, '\v +(\*[^*]+\*)$') - - if !empty(l:match) - let l:start = l:line[:-len(l:match[0]) - 1] - let l:tag = l:match[1] - let l:spaces = repeat(' ', 79 - len(l:start) - len(l:tag)) - - let l:line = l:start . l:spaces . l:tag - endif - endif - - call add(l:new_lines, l:line) - endfor - - return l:new_lines -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hfmt.vim deleted file mode 100644 index 0407b713..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hfmt.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: zack -" Description: Integration of hfmt with ALE. - -call ale#Set('haskell_hfmt_executable', 'hfmt') - -function! ale#fixers#hfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_hfmt_executable') - - return { - \ 'command': ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'hfmt') - \ . ' -w' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hindent.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hindent.vim deleted file mode 100644 index b6009a2c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hindent.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: AlexeiDrake -" Description: Integration of hindent formatting with ALE. -" -call ale#Set('haskell_hindent_executable', 'hindent') - -function! ale#fixers#hindent#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_hindent_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'hindent') -endfunction - -function! ale#fixers#hindent#Fix(buffer) abort - let l:executable = ale#fixers#hindent#GetExecutable(a:buffer) - - return { - \ 'command': l:executable - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hlint.vim deleted file mode 100644 index 88779a55..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/hlint.vim +++ /dev/null @@ -1,13 +0,0 @@ -" Author: eborden -" Description: Integration of hlint refactor with ALE. -" - -function! ale#fixers#hlint#Fix(buffer) abort - return { - \ 'command': ale#handlers#hlint#GetExecutable(a:buffer) - \ . ' --refactor' - \ . ' --refactor-options="--inplace"' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/html_beautify.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/html_beautify.vim deleted file mode 100644 index 9817563e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/html_beautify.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: WhyNotHugo -" Description: Format HTML files with html-beautify. - -call ale#Set('html_beautify_executable', 'html-beautify') -call ale#Set('html_beautify_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('html_beautify_options', '') - -function! ale#fixers#html_beautify#Fix(buffer) abort - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'html_beautify', - \ ['html-beautify'] - \) - - let l:options = ale#Var(a:buffer, 'html_beautify_options') - - return { - \ 'command': ale#Escape(l:executable) . ' ' . l:options . ' -', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/importjs.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/importjs.vim deleted file mode 100644 index b5487b2c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/importjs.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: Jeff Willette -" Description: Integration of importjs with ALE. - -call ale#Set('javascript_importjs_executable', 'importjs') - -function! ale#fixers#importjs#ProcessOutput(buffer, output) abort - let l:result = ale#util#FuzzyJSONDecode(a:output, []) - - return split(get(l:result, 'fileContent', ''), "\n") -endfunction - -function! ale#fixers#importjs#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'javascript_importjs_executable') - - if !executable(l:executable) - return 0 - endif - - return { - \ 'command': ale#Escape(l:executable) - \ . ' fix' - \ . ' %s', - \ 'process_with': 'ale#fixers#importjs#ProcessOutput', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/isort.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/isort.vim deleted file mode 100644 index 6eb6a67c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/isort.vim +++ /dev/null @@ -1,71 +0,0 @@ -" Author: w0rp -" Description: Fixing Python imports with isort. - -call ale#Set('python_isort_executable', 'isort') -call ale#Set('python_isort_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_isort_options', '') -call ale#Set('python_isort_auto_pipenv', 0) -call ale#Set('python_isort_auto_poetry', 0) - -function! ale#fixers#isort#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_isort_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_isort_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_isort', ['isort']) -endfunction - -function! ale#fixers#isort#GetCmd(buffer) abort - let l:executable = ale#fixers#isort#GetExecutable(a:buffer) - let l:cmd = [ale#Escape(l:executable)] - - if l:executable =~? 'pipenv\|poetry$' - call extend(l:cmd, ['run', 'isort']) - endif - - return join(l:cmd, ' ') -endfunction - -function! ale#fixers#isort#FixForVersion(buffer, version) abort - let l:executable = ale#fixers#isort#GetExecutable(a:buffer) - let l:cmd = [ale#Escape(l:executable)] - - if l:executable =~? 'pipenv\|poetry$' - call extend(l:cmd, ['run', 'isort']) - endif - - if ale#semver#GTE(a:version, [5, 7, 0]) - call add(l:cmd, '--filename %s') - endif - - let l:options = ale#Var(a:buffer, 'python_isort_options') - - if !empty(l:options) - call add(l:cmd, l:options) - endif - - call add(l:cmd, '-') - - return { - \ 'cwd': '%s:h', - \ 'command': join(l:cmd, ' '), - \} -endfunction - -function! ale#fixers#isort#Fix(buffer) abort - let l:executable = ale#fixers#isort#GetExecutable(a:buffer) - let l:command = ale#fixers#isort#GetCmd(a:buffer) . ale#Pad('--version') - - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ l:executable, - \ l:command, - \ function('ale#fixers#isort#FixForVersion'), - \) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/jq.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/jq.vim deleted file mode 100644 index cd9b9138..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/jq.vim +++ /dev/null @@ -1,22 +0,0 @@ -call ale#Set('json_jq_executable', 'jq') -call ale#Set('json_jq_options', '') -call ale#Set('json_jq_filters', '.') - -function! ale#fixers#jq#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'json_jq_executable') -endfunction - -function! ale#fixers#jq#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'json_jq_options') - let l:filters = ale#Var(a:buffer, 'json_jq_filters') - - if empty(l:filters) - return 0 - endif - - return { - \ 'command': ale#Escape(ale#fixers#jq#GetExecutable(a:buffer)) - \ . ' ' . l:filters . ' ' - \ . l:options, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/jsonnetfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/jsonnetfmt.vim deleted file mode 100644 index f1e41cd5..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/jsonnetfmt.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Authors: Trevor Whitney and Takuya Kosugiyama -" Description: Integration of jsonnetfmt with ALE. - -call ale#Set('jsonnet_jsonnetfmt_executable', 'jsonnetfmt') -call ale#Set('jsonnet_jsonnetfmt_options', '') - -function! ale#fixers#jsonnetfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'jsonnet_jsonnetfmt_executable') - let l:options = ale#Var(a:buffer, 'jsonnet_jsonnetfmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -i' - \ . ale#Pad(l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ktlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ktlint.vim deleted file mode 100644 index 64d1340d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ktlint.vim +++ /dev/null @@ -1,8 +0,0 @@ -" Author: Michael Phillips -" Description: Fix Kotlin files with ktlint. - -function! ale#fixers#ktlint#Fix(buffer) abort - return { - \ 'command': ale#handlers#ktlint#GetCommand(a:buffer) . ' --format' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/latexindent.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/latexindent.vim deleted file mode 100644 index 54f1231e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/latexindent.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: riley-martine -" Description: Integration of latexindent with ALE. - -call ale#Set('tex_latexindent_executable', 'latexindent') -call ale#Set('tex_latexindent_options', '') - -function! ale#fixers#latexindent#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'tex_latexindent_executable') - let l:options = ale#Var(a:buffer, 'tex_latexindent_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -l' - \ . (empty(l:options) ? '' : ' ' . l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/lua_format.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/lua_format.vim deleted file mode 100644 index 98b155c0..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/lua_format.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: Mathias Jean Johansen -" Description: Integration of LuaFormatter with ALE. - -call ale#Set('lua_lua_format_executable', 'lua-format') -call ale#Set('lua_lua_format_options', '') - -function! ale#fixers#lua_format#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'lua_lua_format_executable') - let l:options = ale#Var(a:buffer, 'lua_lua_format_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ale#Pad(l:options) - \ . ' -i', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/luafmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/luafmt.vim deleted file mode 100644 index 6cb9ef4a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/luafmt.vim +++ /dev/null @@ -1,13 +0,0 @@ -call ale#Set('lua_luafmt_executable', 'luafmt') -call ale#Set('lua_luafmt_options', '') - -function! ale#fixers#luafmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'lua_luafmt_executable') - let l:options = ale#Var(a:buffer, 'lua_luafmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' --stdin', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/mix_format.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/mix_format.vim deleted file mode 100644 index 7a091701..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/mix_format.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: carakan , Fernando Mendes -" Description: Fixing files with elixir formatter 'mix format'. - -call ale#Set('elixir_mix_executable', 'mix') -call ale#Set('elixir_mix_format_options', '') - -function! ale#fixers#mix_format#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'elixir_mix_executable') -endfunction - -function! ale#fixers#mix_format#GetCommand(buffer) abort - let l:executable = ale#Escape(ale#fixers#mix_format#GetExecutable(a:buffer)) - let l:options = ale#Var(a:buffer, 'elixir_mix_format_options') - - return l:executable . ' format' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %t' -endfunction - -function! ale#fixers#mix_format#Fix(buffer) abort - return { - \ 'command': ale#fixers#mix_format#GetCommand(a:buffer), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nimpretty.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nimpretty.vim deleted file mode 100644 index fe2e7136..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nimpretty.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Nhan -" Description: Integration of nimpretty with ALE. - -call ale#Set('nim_nimpretty_executable', 'nimpretty') -call ale#Set('nim_nimpretty_options', '--maxLineLen:80') - -function! ale#fixers#nimpretty#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'nim_nimpretty_executable') - let l:options = ale#Var(a:buffer, 'nim_nimpretty_options') - - return { - \ 'command': ale#Escape(l:executable) . ' %t' . ale#Pad(l:options), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixfmt.vim deleted file mode 100644 index 4a548b23..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixfmt.vim +++ /dev/null @@ -1,15 +0,0 @@ -scriptencoding utf-8 -" Author: houstdav000 -" Description: Fix files with nixfmt - -call ale#Set('nix_nixfmt_executable', 'nixfmt') -call ale#Set('nix_nixfmt_options', '') - -function! ale#fixers#nixfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'nix_nixfmt_executable') - let l:options = ale#Var(a:buffer, 'nix_nixfmt_options') - - return { - \ 'command': ale#Escape(l:executable) . ale#Pad(l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixpkgsfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixpkgsfmt.vim deleted file mode 100644 index 403ce798..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/nixpkgsfmt.vim +++ /dev/null @@ -1,12 +0,0 @@ -call ale#Set('nix_nixpkgsfmt_executable', 'nixpkgs-fmt') -call ale#Set('nix_nixpkgsfmt_options', '') - -function! ale#fixers#nixpkgsfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'nix_nixpkgsfmt_executable') - let l:options = ale#Var(a:buffer, 'nix_nixpkgsfmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocamlformat.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocamlformat.vim deleted file mode 100644 index b12d2eb9..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocamlformat.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Stephen Lumenta <@sbl> -" Description: Integration of ocamlformat with ALE. - -call ale#Set('ocaml_ocamlformat_executable', 'ocamlformat') -call ale#Set('ocaml_ocamlformat_options', '') - -function! ale#fixers#ocamlformat#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'ocaml_ocamlformat_executable') - let l:options = ale#Var(a:buffer, 'ocaml_ocamlformat_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' --name=%s' - \ . ' -' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocp_indent.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocp_indent.vim deleted file mode 100644 index e1b047b3..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ocp_indent.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: Kanenobu Mitsuru -" Description: Integration of ocp-indent with ALE. - -call ale#Set('ocaml_ocp_indent_executable', 'ocp-indent') -call ale#Set('ocaml_ocp_indent_options', '') -call ale#Set('ocaml_ocp_indent_config', '') - -function! ale#fixers#ocp_indent#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'ocaml_ocp_indent_executable') - let l:config = ale#Var(a:buffer, 'ocaml_ocp_indent_config') - let l:options = ale#Var(a:buffer, 'ocaml_ocp_indent_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:config) ? '' : ' --config=' . ale#Escape(l:config)) - \ . (empty(l:options) ? '': ' ' . l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/opafmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/opafmt.vim deleted file mode 100644 index a0999b70..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/opafmt.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Description: Fixer for rego files - -call ale#Set('opa_fmt_executable', 'opa') -call ale#Set('opa_fmt_options', '') - -function! ale#fixers#opafmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'opa_fmt_executable') - let l:options = ale#Var(a:buffer, 'opa_fmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' fmt' - \ . (empty(l:options) ? '' : ' ' . l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ormolu.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ormolu.vim deleted file mode 100644 index 69b55c1f..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ormolu.vim +++ /dev/null @@ -1,12 +0,0 @@ -call ale#Set('haskell_ormolu_executable', 'ormolu') -call ale#Set('haskell_ormolu_options', '') - -function! ale#fixers#ormolu#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_ormolu_executable') - let l:options = ale#Var(a:buffer, 'haskell_ormolu_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/packer.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/packer.vim deleted file mode 100644 index 8770550d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/packer.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: Zhuoyun Wei -" Description: Fixer for Packer HCL files - -call ale#Set('packer_fmt_executable', 'packer') -call ale#Set('packer_fmt_options', '') - -function! ale#fixers#packer#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'packer_fmt_executable') - let l:options = ale#Var(a:buffer, 'packer_fmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' fmt' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' -' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pandoc.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pandoc.vim deleted file mode 100644 index d704c8a2..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pandoc.vim +++ /dev/null @@ -1,16 +0,0 @@ -scriptencoding utf-8 -" Author: Jesse Hathaway -" Description: Fix markdown files with pandoc. - -call ale#Set('markdown_pandoc_executable', 'pandoc') -call ale#Set('markdown_pandoc_options', '-f gfm -t gfm -s -') - -function! ale#fixers#pandoc#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'markdown_pandoc_executable') - let l:options = ale#Var(a:buffer, 'markdown_pandoc_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' ' . l:options, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/perltidy.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/perltidy.vim deleted file mode 100644 index a55a572b..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/perltidy.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: kfly8 -" Description: Integration of perltidy with ALE. - -call ale#Set('perl_perltidy_executable', 'perltidy') -call ale#Set('perl_perltidy_options', '') - -function! ale#fixers#perltidy#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'perl_perltidy_executable') - let l:options = ale#Var(a:buffer, 'perl_perltidy_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -b' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pgformatter.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pgformatter.vim deleted file mode 100644 index 9ea08ec6..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pgformatter.vim +++ /dev/null @@ -1,12 +0,0 @@ -call ale#Set('sql_pgformatter_executable', 'pg_format') -call ale#Set('sql_pgformatter_options', '') - -function! ale#fixers#pgformatter#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'sql_pgformatter_executable') - let l:options = ale#Var(a:buffer, 'sql_pgformatter_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/php_cs_fixer.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/php_cs_fixer.vim deleted file mode 100644 index c8f9c7b0..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/php_cs_fixer.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: Julien Deniau -" Description: Fixing files with php-cs-fixer. - -call ale#Set('php_cs_fixer_executable', 'php-cs-fixer') -call ale#Set('php_cs_fixer_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('php_cs_fixer_options', '') - -function! ale#fixers#php_cs_fixer#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'php_cs_fixer', [ - \ 'vendor/bin/php-cs-fixer', - \ 'php-cs-fixer' - \]) -endfunction - -function! ale#fixers#php_cs_fixer#Fix(buffer) abort - let l:executable = ale#fixers#php_cs_fixer#GetExecutable(a:buffer) - - return { - \ 'command': ale#Escape(l:executable) - \ . ' ' . ale#Var(a:buffer, 'php_cs_fixer_options') - \ . ' fix %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/phpcbf.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/phpcbf.vim deleted file mode 100644 index 494bf346..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/phpcbf.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: notomo -" Description: Fixing files with phpcbf. - -call ale#Set('php_phpcbf_standard', '') -call ale#Set('php_phpcbf_options', '') -call ale#Set('php_phpcbf_executable', 'phpcbf') -call ale#Set('php_phpcbf_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#fixers#phpcbf#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'php_phpcbf', [ - \ 'vendor/bin/phpcbf', - \ 'phpcbf' - \]) -endfunction - -function! ale#fixers#phpcbf#Fix(buffer) abort - let l:executable = ale#fixers#phpcbf#GetExecutable(a:buffer) - let l:standard = ale#Var(a:buffer, 'php_phpcbf_standard') - let l:standard_option = !empty(l:standard) - \ ? '--standard=' . l:standard - \ : '' - - return { - \ 'command': ale#Escape(l:executable) . ' --stdin-path=%s ' . l:standard_option . ale#Pad(ale#Var(a:buffer, 'php_phpcbf_options')) . ' -' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pint.vim deleted file mode 100644 index 274ddd9e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pint.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: Michael Dyrynda -" Description: Fixing files with Laravel Pint. - -call ale#Set('php_pint_executable', 'pint') -call ale#Set('php_pint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('php_pint_options', '') - -function! ale#fixers#pint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'php_pint', [ - \ 'vendor/bin/pint', - \ 'pint' - \]) -endfunction - -function! ale#fixers#pint#Fix(buffer) abort - let l:executable = ale#fixers#pint#GetExecutable(a:buffer) - - return { - \ 'command': ale#Escape(l:executable) - \ . ' ' . ale#Var(a:buffer, 'php_pint_options') - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier.vim deleted file mode 100644 index 8a67e2ff..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier.vim +++ /dev/null @@ -1,124 +0,0 @@ -" Author: tunnckoCore (Charlike Mike Reagent) , -" w0rp , morhetz (Pavel Pertsev) -" Description: Integration of Prettier with ALE. - -call ale#Set('javascript_prettier_executable', 'prettier') -call ale#Set('javascript_prettier_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('javascript_prettier_options', '') - -function! ale#fixers#prettier#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'javascript_prettier', [ - \ 'node_modules/.bin/prettier_d', - \ 'node_modules/prettier-cli/index.js', - \ 'node_modules/.bin/prettier', - \]) -endfunction - -function! ale#fixers#prettier#Fix(buffer) abort - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ ale#fixers#prettier#GetExecutable(a:buffer), - \ '%e --version', - \ function('ale#fixers#prettier#ApplyFixForVersion'), - \) -endfunction - -function! ale#fixers#prettier#ProcessPrettierDOutput(buffer, output) abort - " If the output is an error message, don't use it. - for l:line in a:output[:10] - if l:line =~# '^\w*Error:' - return [] - endif - endfor - - return a:output -endfunction - -function! ale#fixers#prettier#GetCwd(buffer) abort - let l:config = ale#path#FindNearestFile(a:buffer, '.prettierignore') - - " Fall back to the directory of the buffer - return !empty(l:config) ? fnamemodify(l:config, ':h') : '%s:h' -endfunction - -function! ale#fixers#prettier#ApplyFixForVersion(buffer, version) abort - let l:executable = ale#fixers#prettier#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'javascript_prettier_options') - let l:parser = '' - - let l:filetypes = split(getbufvar(a:buffer, '&filetype'), '\.') - - if index(l:filetypes, 'handlebars') > -1 - let l:parser = 'glimmer' - endif - - " Append the --parser flag depending on the current filetype (unless it's - " already set in g:javascript_prettier_options). - if empty(expand('#' . a:buffer . ':e')) && l:parser is# '' && match(l:options, '--parser') == -1 - " Mimic Prettier's defaults. In cases without a file extension or - " filetype (scratch buffer), Prettier needs `parser` set to know how - " to process the buffer. - if ale#semver#GTE(a:version, [1, 16, 0]) - let l:parser = 'babel' - else - let l:parser = 'babylon' - endif - - let l:prettier_parsers = { - \ 'typescript': 'typescript', - \ 'css': 'css', - \ 'less': 'less', - \ 'scss': 'scss', - \ 'json': 'json', - \ 'json5': 'json5', - \ 'graphql': 'graphql', - \ 'markdown': 'markdown', - \ 'vue': 'vue', - \ 'svelte': 'svelte', - \ 'yaml': 'yaml', - \ 'openapi': 'yaml', - \ 'html': 'html', - \ 'ruby': 'ruby', - \} - - for l:filetype in l:filetypes - if has_key(l:prettier_parsers, l:filetype) - let l:parser = l:prettier_parsers[l:filetype] - break - endif - endfor - endif - - if !empty(l:parser) - let l:options = (!empty(l:options) ? l:options . ' ' : '') . '--parser ' . l:parser - endif - - " Special error handling needed for prettier_d - if l:executable =~# 'prettier_d$' - return { - \ 'cwd': '%s:h', - \ 'command':ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --stdin-filepath %s --stdin', - \ 'process_with': 'ale#fixers#prettier#ProcessPrettierDOutput', - \} - endif - - " 1.4.0 is the first version with --stdin-filepath - if ale#semver#GTE(a:version, [1, 4, 0]) - return { - \ 'cwd': ale#fixers#prettier#GetCwd(a:buffer), - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --stdin-filepath %s --stdin', - \} - endif - - return { - \ 'command': ale#Escape(l:executable) - \ . ' %t' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --write', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_eslint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_eslint.vim deleted file mode 100644 index 0b9c88b7..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_eslint.vim +++ /dev/null @@ -1,56 +0,0 @@ -" Author: tunnckoCore (Charlike Mike Reagent) , -" w0rp , morhetz (Pavel Pertsev) -" Description: Integration between Prettier and ESLint. - -call ale#Set('javascript_prettier_eslint_executable', 'prettier-eslint') -call ale#Set('javascript_prettier_eslint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('javascript_prettier_eslint_options', '') - -function! ale#fixers#prettier_eslint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'javascript_prettier_eslint', [ - \ 'node_modules/prettier-eslint-cli/dist/index.js', - \ 'node_modules/.bin/prettier-eslint', - \]) -endfunction - -function! ale#fixers#prettier_eslint#Fix(buffer) abort - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ ale#fixers#prettier_eslint#GetExecutable(a:buffer), - \ '%e --version', - \ function('ale#fixers#prettier_eslint#ApplyFixForVersion'), - \) -endfunction - -function! ale#fixers#prettier_eslint#ApplyFixForVersion(buffer, version) abort - let l:options = ale#Var(a:buffer, 'javascript_prettier_eslint_options') - let l:executable = ale#fixers#prettier_eslint#GetExecutable(a:buffer) - - " 4.2.0 is the first version with --eslint-config-path - let l:config = ale#semver#GTE(a:version, [4, 2, 0]) - \ ? ale#handlers#eslint#FindConfig(a:buffer) - \ : '' - let l:eslint_config_option = !empty(l:config) - \ ? ' --eslint-config-path ' . ale#Escape(l:config) - \ : '' - - " 4.4.0 is the first version with --stdin-filepath - if ale#semver#GTE(a:version, [4, 4, 0]) - return { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(l:executable) - \ . l:eslint_config_option - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --stdin-filepath %s --stdin', - \} - endif - - return { - \ 'command': ale#Escape(l:executable) - \ . ' %t' - \ . l:eslint_config_option - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --write', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_standard.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_standard.vim deleted file mode 100644 index c8c09e31..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/prettier_standard.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: sheerun (Adam Stankiewicz) -" Description: Integration of Prettier Standard with ALE. - -call ale#Set('javascript_prettier_standard_executable', 'prettier-standard') -call ale#Set('javascript_prettier_standard_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('javascript_prettier_standard_options', '') - -function! ale#fixers#prettier_standard#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'javascript_prettier_standard', [ - \ 'node_modules/prettier-standard/lib/index.js', - \ 'node_modules/.bin/prettier-standard', - \]) -endfunction - -function! ale#fixers#prettier_standard#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'javascript_prettier_standard_options') - - return { - \ 'command': ale#Escape(ale#fixers#prettier_standard#GetExecutable(a:buffer)) - \ . ' --stdin' - \ . ' --stdin-filepath=%s' - \ . ' ' . l:options, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/protolint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/protolint.vim deleted file mode 100644 index 9b8e72f1..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/protolint.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Yohei Yoshimuta -" Description: Integration of protolint with ALE. - -call ale#Set('proto_protolint_executable', 'protolint') -call ale#Set('proto_protolint_config', '') - -function! ale#fixers#protolint#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'proto_protolint_executable') - - return ale#Escape(l:executable) -endfunction - -function! ale#fixers#protolint#Fix(buffer) abort - let l:executable = ale#fixers#protolint#GetExecutable(a:buffer) - let l:config = ale#Var(a:buffer, 'proto_protolint_config') - - return { - \ 'command': l:executable - \ . (!empty(l:config) ? ' -config_path=' . ale#Escape(l:config) : '') - \ . ' -fix' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction - - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ptop.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ptop.vim deleted file mode 100644 index 98345226..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/ptop.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: BarrOff https://github.com/BarrOff -" Description: Integration of ptop with ALE. - -call ale#Set('pascal_ptop_executable', 'ptop') -call ale#Set('pascal_ptop_options', '') - -function! ale#fixers#ptop#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'pascal_ptop_executable') - let l:options = ale#Var(a:buffer, 'pascal_ptop_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %s %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/puppetlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/puppetlint.vim deleted file mode 100644 index bf36e486..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/puppetlint.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: Alexander Olofsson -" Description: puppet-lint fixer - -if !exists('g:ale_puppet_puppetlint_executable') - let g:ale_puppet_puppetlint_executable = 'puppet-lint' -endif - -if !exists('g:ale_puppet_puppetlint_options') - let g:ale_puppet_puppetlint_options = '' -endif - -function! ale#fixers#puppetlint#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'puppet_puppetlint_executable') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' ' . ale#Var(a:buffer, 'puppet_puppetlint_options') - \ . ' --fix' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/purs_tidy.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/purs_tidy.vim deleted file mode 100644 index 09fa631b..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/purs_tidy.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: toastal -" Description: Integration of purs-tidy with ALE. - -call ale#Set('purescript_tidy_executable', 'purs-tidy') -call ale#Set('purescript_tidy_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('purescript_tidy_options', '') - -function! ale#fixers#purs_tidy#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'purescript_tidy', [ - \ 'node_modules/purescript-tidy/bin/index.js', - \ 'node_modules/.bin/purs-tidy', - \]) -endfunction - -function! ale#fixers#purs_tidy#Fix(buffer) abort - let l:executable = ale#fixers#purs_tidy#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'purescript_tidy_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' format' - \ . ale#Pad(l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/purty.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/purty.vim deleted file mode 100644 index 46d2cacd..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/purty.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: iclanzan -" Description: Integration of purty with ALE. - -call ale#Set('purescript_purty_executable', 'purty') - -function! ale#fixers#purty#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'purescript_purty_executable') - - return ale#Escape(l:executable) -endfunction - -function! ale#fixers#purty#Fix(buffer) abort - let l:executable = ale#fixers#purty#GetExecutable(a:buffer) - - return { - \ 'command': l:executable - \ . ' --write' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pyflyby.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pyflyby.vim deleted file mode 100644 index 81c0f05e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/pyflyby.vim +++ /dev/null @@ -1,41 +0,0 @@ -" Author: infokiller -" Description: Tidy imports using pyflyby's tidy-import script -" https://github.com/deshaw/pyflyby - -call ale#Set('python_pyflyby_executable', 'tidy-imports') -call ale#Set('python_pyflyby_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('python_pyflyby_options', '') -call ale#Set('python_pyflyby_auto_pipenv', 0) -call ale#Set('python_pyflyby_auto_poetry', 0) - -function! ale#fixers#pyflyby#GetExecutable(buffer) abort - if (ale#Var(a:buffer, 'python_auto_pipenv') || ale#Var(a:buffer, 'python_pyflyby_auto_pipenv')) - \ && ale#python#PipenvPresent(a:buffer) - return 'pipenv' - endif - - if (ale#Var(a:buffer, 'python_auto_poetry') || ale#Var(a:buffer, 'python_pyflyby_auto_poetry')) - \ && ale#python#PoetryPresent(a:buffer) - return 'poetry' - endif - - return ale#python#FindExecutable(a:buffer, 'python_pyflyby', ['tidy-imports']) -endfunction - -function! ale#fixers#pyflyby#Fix(buffer) abort - " let l:executable = ale#fixers#pyflyby#GetExecutable(a:buffer) - let l:executable = ale#fixers#pyflyby#GetExecutable(a:buffer) - let l:cmd = [ale#Escape(l:executable)] - - if l:executable =~? 'pipenv\|poetry$' - call extend(l:cmd, ['run', 'tidy-imports']) - endif - - let l:options = ale#Var(a:buffer, 'python_pyflyby_options') - - if !empty(l:options) - call add(l:cmd, l:options) - endif - - return {'command': join(l:cmd, ' ')} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/qmlfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/qmlfmt.vim deleted file mode 100644 index 90b25679..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/qmlfmt.vim +++ /dev/null @@ -1,11 +0,0 @@ -call ale#Set('qml_qmlfmt_executable', 'qmlfmt') - -function! ale#fixers#qmlfmt#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'qml_qmlfmt_executable') -endfunction - -function! ale#fixers#qmlfmt#Fix(buffer) abort - return { - \ 'command': ale#Escape(ale#fixers#qmlfmt#GetExecutable(a:buffer)), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/refmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/refmt.vim deleted file mode 100644 index 514f950a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/refmt.vim +++ /dev/null @@ -1,18 +0,0 @@ -" Author: Ahmed El Gabri <@ahmedelgabri> -" Description: Integration of refmt with ALE. - -call ale#Set('reasonml_refmt_executable', 'refmt') -call ale#Set('reasonml_refmt_options', '') - -function! ale#fixers#refmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'reasonml_refmt_executable') - let l:options = ale#Var(a:buffer, 'reasonml_refmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' --in-place' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/remark_lint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/remark_lint.vim deleted file mode 100644 index 85593b44..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/remark_lint.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: blyoa -" Description: Fixing files with remark-lint. - -call ale#Set('markdown_remark_lint_executable', 'remark') -call ale#Set('markdown_remark_lint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('markdown_remark_lint_options', '') - -function! ale#fixers#remark_lint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'markdown_remark_lint', [ - \ 'node_modules/remark-cli/cli.js', - \ 'node_modules/.bin/remark', - \]) -endfunction - -function! ale#fixers#remark_lint#Fix(buffer) abort - let l:executable = ale#fixers#remark_lint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'markdown_remark_lint_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : ''), - \} -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/reorder_python_imports.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/reorder_python_imports.vim deleted file mode 100644 index 42a0a6e2..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/reorder_python_imports.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: jake -" Description: Fixing Python imports with reorder-python-imports. - -call ale#Set('python_reorder_python_imports_executable', 'reorder-python-imports') -call ale#Set('python_reorder_python_imports_options', '') -call ale#Set('python_reorder_python_imports_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#fixers#reorder_python_imports#Fix(buffer) abort - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'python_reorder_python_imports', - \ ['reorder-python-imports'], - \) - - if !executable(l:executable) - return 0 - endif - - let l:options = ale#Var(a:buffer, 'python_reorder_python_imports_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') . ' -', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rubocop.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rubocop.vim deleted file mode 100644 index 5a1b7959..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rubocop.vim +++ /dev/null @@ -1,38 +0,0 @@ -call ale#Set('ruby_rubocop_options', '') -call ale#Set('ruby_rubocop_auto_correct_all', 0) -call ale#Set('ruby_rubocop_executable', 'rubocop') - -" Rubocop fixer outputs diagnostics first and then the fixed -" output. These are delimited by a "=======" string that we -" look for to remove everything before it. -function! ale#fixers#rubocop#PostProcess(buffer, output) abort - let l:line = 0 - - for l:output in a:output - let l:line = l:line + 1 - - if l:output =~# "^=\\+$" - break - endif - endfor - - return a:output[l:line :] -endfunction - -function! ale#fixers#rubocop#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_rubocop_executable') - let l:options = ale#Var(a:buffer, 'ruby_rubocop_options') - let l:auto_correct_all = ale#Var(a:buffer, 'ruby_rubocop_auto_correct_all') - - return ale#ruby#EscapeExecutable(l:executable, 'rubocop') - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . (l:auto_correct_all ? ' --auto-correct-all' : ' --auto-correct') - \ . ' --force-exclusion --stdin %s' -endfunction - -function! ale#fixers#rubocop#Fix(buffer) abort - return { - \ 'command': ale#fixers#rubocop#GetCommand(a:buffer), - \ 'process_with': 'ale#fixers#rubocop#PostProcess' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rufo.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rufo.vim deleted file mode 100644 index 01d537a9..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rufo.vim +++ /dev/null @@ -1,20 +0,0 @@ -" Author: Fohte (Hayato Kawai) https://github.com/fohte -" Description: Integration of Rufo with ALE. - -call ale#Set('ruby_rufo_executable', 'rufo') - -function! ale#fixers#rufo#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_rufo_executable') - let l:exec_args = l:executable =~? 'bundle$' - \ ? ' exec rufo' - \ : '' - - return ale#Escape(l:executable) . l:exec_args . ' %t' -endfunction - -function! ale#fixers#rufo#Fix(buffer) abort - return { - \ 'command': ale#fixers#rufo#GetCommand(a:buffer), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rustfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rustfmt.vim deleted file mode 100644 index 38882fbf..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/rustfmt.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: Kelly Fox -" Description: Integration of rustfmt with ALE. - -call ale#Set('rust_rustfmt_executable', 'rustfmt') -call ale#Set('rust_rustfmt_options', '') - -function! ale#fixers#rustfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'rust_rustfmt_executable') - let l:options = ale#Var(a:buffer, 'rust_rustfmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/scalafmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/scalafmt.vim deleted file mode 100644 index dd0e7745..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/scalafmt.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: Jeffrey Lau https://github.com/zoonfafer -" Description: Integration of Scalafmt with ALE. - -call ale#Set('scala_scalafmt_executable', 'scalafmt') -call ale#Set('scala_scalafmt_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('scala_scalafmt_options', '') - -function! ale#fixers#scalafmt#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'scala_scalafmt_executable') - let l:options = ale#Var(a:buffer, 'scala_scalafmt_options') - let l:exec_args = l:executable =~? 'ng$' - \ ? ' scalafmt' - \ : '' - - return ale#Escape(l:executable) . l:exec_args - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t' -endfunction - -function! ale#fixers#scalafmt#Fix(buffer) abort - return { - \ 'command': ale#fixers#scalafmt#GetCommand(a:buffer), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/shfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/shfmt.vim deleted file mode 100644 index 0eefc985..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/shfmt.vim +++ /dev/null @@ -1,17 +0,0 @@ -scriptencoding utf-8 -" Author: Simon Bugert -" Description: Fix sh files with shfmt. - -call ale#Set('sh_shfmt_executable', 'shfmt') -call ale#Set('sh_shfmt_options', '') - -function! ale#fixers#shfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'sh_shfmt_executable') - let l:options = ale#Var(a:buffer, 'sh_shfmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -filename=%s' - \ . (empty(l:options) ? '' : ' ' . l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sorbet.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sorbet.vim deleted file mode 100644 index 7c12fa1e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sorbet.vim +++ /dev/null @@ -1,19 +0,0 @@ -call ale#Set('ruby_sorbet_executable', 'srb') -call ale#Set('ruby_sorbet_options', '') - -function! ale#fixers#sorbet#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_sorbet_executable') - let l:options = ale#Var(a:buffer, 'ruby_sorbet_options') - - return ale#ruby#EscapeExecutable(l:executable, 'srb') - \ . ' tc' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --autocorrect --file %t' -endfunction - -function! ale#fixers#sorbet#Fix(buffer) abort - return { - \ 'command': ale#fixers#sorbet#GetCommand(a:buffer), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlfmt.vim deleted file mode 100644 index c88a8ec2..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlfmt.vim +++ /dev/null @@ -1,13 +0,0 @@ -call ale#Set('sql_sqlfmt_executable', 'sqlfmt') -call ale#Set('sql_sqlfmt_options', '') - -function! ale#fixers#sqlfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'sql_sqlfmt_executable') - let l:options = ale#Var(a:buffer, 'sql_sqlfmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' -w' - \ . (empty(l:options) ? '' : ' ' . l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlformat.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlformat.vim deleted file mode 100644 index 6319c1ac..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/sqlformat.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: Cluas -" Description: Fixing files with sqlformat. - -call ale#Set('sql_sqlformat_executable', 'sqlformat') -call ale#Set('sql_sqlformat_options', '') - -function! ale#fixers#sqlformat#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'sql_sqlformat_executable') - let l:options = ale#Var(a:buffer, 'sql_sqlformat_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/standard.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/standard.vim deleted file mode 100644 index b9d60ebb..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/standard.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Sumner Evans -" Description: Fixing files with Standard. - -call ale#Set('javascript_standard_executable', 'standard') -call ale#Set('javascript_standard_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('javascript_standard_options', '') - -function! ale#fixers#standard#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'javascript_standard', [ - \ 'node_modules/standardx/bin/cmd.js', - \ 'node_modules/standard/bin/cmd.js', - \ 'node_modules/.bin/standard', - \]) -endfunction - -function! ale#fixers#standard#Fix(buffer) abort - let l:executable = ale#fixers#standard#GetExecutable(a:buffer) - let l:filetype = getbufvar(a:buffer, '&filetype') - let l:options_type = 'javascript_standard_options' - - if l:filetype =~# 'typescript' - let l:options_type = 'typescript_standard_options' - endif - - let l:options = ale#Var(a:buffer, l:options_type) - - return { - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --fix --stdin < %s > %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/standardrb.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/standardrb.vim deleted file mode 100644 index acb310c6..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/standardrb.vim +++ /dev/null @@ -1,23 +0,0 @@ -" Author: Justin Searls - https://github.com/searls -" Description: Fix Ruby files with StandardRB. - -call ale#Set('ruby_standardrb_options', '') -call ale#Set('ruby_standardrb_executable', 'standardrb') - -function! ale#fixers#standardrb#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_standardrb_executable') - let l:config = ale#path#FindNearestFile(a:buffer, '.standard.yml') - let l:options = ale#Var(a:buffer, 'ruby_standardrb_options') - - return ale#ruby#EscapeExecutable(l:executable, 'standardrb') - \ . (!empty(l:config) ? ' --config ' . ale#Escape(l:config) : '') - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --fix --force-exclusion --stdin %s' -endfunction - -function! ale#fixers#standardrb#Fix(buffer) abort - return { - \ 'command': ale#fixers#standardrb#GetCommand(a:buffer), - \ 'process_with': 'ale#fixers#rubocop#PostProcess' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/statix.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/statix.vim deleted file mode 100644 index 5991c925..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/statix.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: David Houston -" Description: Provide statix fix as a fixer for simple Nix antipatterns. - -call ale#Set('nix_statix_fix_executable', 'statix') -call ale#Set('nix_statix_fix_options', '') - -function! ale#fixers#statix#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'nix_statix_fix_executable') - let l:options = ale#Var(a:buffer, 'nix_statix_fix_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ale#Pad('fix') - \ . ale#Pad('--stdin') - \ . ale#Pad(l:options), - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylelint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylelint.vim deleted file mode 100644 index 650b9c4a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylelint.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Mahmoud Mostafa -" Description: Fixing files with stylelint. - -call ale#Set('stylelint_executable', 'stylelint') -call ale#Set('stylelint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('stylelint_options', '') - -function! ale#fixers#stylelint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'stylelint', [ - \ 'node_modules/stylelint/bin/stylelint.js', - \ 'node_modules/.bin/stylelint', - \]) -endfunction - -function! ale#fixers#stylelint#Fix(buffer) abort - let l:executable = ale#fixers#stylelint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'stylelint_options') - - return { - \ 'cwd': '%s:h', - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . ale#Pad(l:options) - \ . ' --fix --stdin --stdin-filename %s', - \ 'read_temporary_file': 0, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/styler.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/styler.vim deleted file mode 100644 index 1c7607bd..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/styler.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Author: tvatter -" Description: Fixing R files with styler. - -call ale#Set('r_styler_executable', 'Rscript') -call ale#Set('r_styler_options', 'tidyverse_style()') - -function! ale#fixers#styler#Fix(buffer) abort - return { - \ 'command': 'Rscript --vanilla -e ' - \ . '"suppressPackageStartupMessages(library(styler));' - \ . 'style_file(commandArgs(TRUE), transformers = ' - \ . ale#Var(a:buffer, 'r_styler_options') . ')"' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylish_haskell.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylish_haskell.vim deleted file mode 100644 index ce71c1ce..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylish_haskell.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: eborden -" Description: Integration of stylish-haskell formatting with ALE. -" -call ale#Set('haskell_stylish_haskell_executable', 'stylish-haskell') - -function! ale#fixers#stylish_haskell#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_stylish_haskell_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'stylish-haskell') -endfunction - -function! ale#fixers#stylish_haskell#Fix(buffer) abort - let l:executable = ale#fixers#stylish_haskell#GetExecutable(a:buffer) - - return { - \ 'command': l:executable - \ . ' --inplace' - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylua.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylua.vim deleted file mode 100644 index 3521c935..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/stylua.vim +++ /dev/null @@ -1,14 +0,0 @@ -" Author: Robert Liebowitz -" Description: https://github.com/johnnymorganz/stylua - -call ale#Set('lua_stylua_executable', 'stylua') -call ale#Set('lua_stylua_options', '') - -function! ale#fixers#stylua#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'lua_stylua_executable') - let l:options = ale#Var(a:buffer, 'lua_stylua_options') - - return { - \ 'command': ale#Escape(l:executable) . ale#Pad(l:options) . ' -', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/swiftformat.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/swiftformat.vim deleted file mode 100644 index cc553b7d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/swiftformat.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: gfontenot (Gordon Fontenot) -" Description: Integration of SwiftFormat with ALE. - -call ale#Set('swift_swiftformat_executable', 'swiftformat') -call ale#Set('swift_swiftformat_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('swift_swiftformat_options', '') - -function! ale#fixers#swiftformat#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'swift_swiftformat', [ - \ 'Pods/SwiftFormat/CommandLineTool/swiftformat', - \ 'ios/Pods/SwiftFormat/CommandLineTool/swiftformat', - \ 'swiftformat', - \]) -endfunction - -function! ale#fixers#swiftformat#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'swift_swiftformat_options') - - return { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(ale#fixers#swiftformat#GetExecutable(a:buffer)) - \ . ' %t' - \ . ' ' . l:options, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/syntax_tree.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/syntax_tree.vim deleted file mode 100644 index 7ae03373..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/syntax_tree.vim +++ /dev/null @@ -1,19 +0,0 @@ -call ale#Set('ruby_syntax_tree_options', '') -call ale#Set('ruby_syntax_tree_executable', 'stree') - -function! ale#fixers#syntax_tree#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'ruby_syntax_tree_executable') - let l:options = ale#Var(a:buffer, 'ruby_syntax_tree_options') - - return ale#ruby#EscapeExecutable(l:executable, 'stree') - \ . ' write' - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %t' -endfunction - -function! ale#fixers#syntax_tree#Fix(buffer) abort - return { - \ 'command': ale#fixers#syntax_tree#GetCommand(a:buffer), - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/terraform.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/terraform.vim deleted file mode 100644 index bc05380a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/terraform.vim +++ /dev/null @@ -1,17 +0,0 @@ -" Author: dsifford -" Description: Fixer for terraform and .hcl files - -call ale#Set('terraform_fmt_executable', 'terraform') -call ale#Set('terraform_fmt_options', '') - -function! ale#fixers#terraform#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'terraform_fmt_executable') - let l:options = ale#Var(a:buffer, 'terraform_fmt_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' fmt' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' -' - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/textlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/textlint.vim deleted file mode 100644 index 38ab2bfd..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/textlint.vim +++ /dev/null @@ -1,15 +0,0 @@ -" Author: TANIGUCHI Masaya -" Description: Integration of textlint with ALE. - -function! ale#fixers#textlint#Fix(buffer) abort - let l:executable = ale#handlers#textlint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'textlint_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' --fix' - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . ' %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/tidy.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/tidy.vim deleted file mode 100644 index 2c79e73a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/tidy.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: meain -" Description: Fixing HTML files with tidy. - -call ale#Set('html_tidy_executable', 'tidy') -call ale#Set('html_tidy_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#fixers#tidy#Fix(buffer) abort - let l:executable = ale#path#FindExecutable( - \ a:buffer, - \ 'html_tidy', - \ ['tidy'], - \) - - if !executable(l:executable) - return 0 - endif - - let l:config = ale#path#FindNearestFile(a:buffer, '.tidyrc') - let l:config_options = !empty(l:config) - \ ? ' -q --tidy-mark no --show-errors 0 --show-warnings 0 -config ' . ale#Escape(l:config) - \ : ' -q --tidy-mark no --show-errors 0 --show-warnings 0' - - return { - \ 'command': ale#Escape(l:executable) . l:config_options, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/tslint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/tslint.vim deleted file mode 100644 index 15768fd5..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/tslint.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: carakan -" Description: Fixing files with tslint. - -function! ale#fixers#tslint#Fix(buffer) abort - let l:executable = ale#handlers#tslint#GetExecutable(a:buffer) - - let l:tslint_config_path = ale#path#ResolveLocalPath( - \ a:buffer, - \ 'tslint.json', - \ ale#Var(a:buffer, 'typescript_tslint_config_path') - \) - let l:tslint_config_option = !empty(l:tslint_config_path) - \ ? ' -c ' . ale#Escape(l:tslint_config_path) - \ : '' - - return { - \ 'command': ale#node#Executable(a:buffer, l:executable) - \ . l:tslint_config_option - \ . ' --outputAbsolutePaths --fix %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/uncrustify.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/uncrustify.vim deleted file mode 100644 index 0e8271ec..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/uncrustify.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Author: Derek P Sifford -" Description: Fixer for C, C++, C#, ObjectiveC, D, Java, Pawn, and VALA. - -call ale#Set('c_uncrustify_executable', 'uncrustify') -call ale#Set('c_uncrustify_options', '') - -let s:languages = { -\ 'c': 'C', -\ 'cpp': 'CPP', -\ 'cs': 'CS', -\ 'objc': 'OC', -\ 'objcpp': 'OC+', -\ 'd': 'D', -\ 'java': 'JAVA', -\ 'vala': 'VALA', -\ 'p': 'PAWN', -\} - -function! ale#fixers#uncrustify#Language(buffer) abort - return get(s:languages, &filetype, 'C') -endfunction - -function! ale#fixers#uncrustify#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'c_uncrustify_executable') - let l:options = ale#Var(a:buffer, 'c_uncrustify_options') - - return { - \ 'command': ale#Escape(l:executable) - \ . ' --no-backup ' - \ . '-l' . ale#Pad(ale#fixers#uncrustify#Language(a:buffer)) - \ . ale#Pad(l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/vfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/vfmt.vim deleted file mode 100644 index 2e780318..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/vfmt.vim +++ /dev/null @@ -1,13 +0,0 @@ -" Author: fiatjaf -" Description: Integration of `v fmt` with ALE. - -call ale#Set('v_vfmt_options', '') - -function! ale#fixers#vfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'v_v_executable') - let l:options = ale#Var(a:buffer, 'v_vfmt_options') - - return { - \ 'command': ale#Escape(l:executable) . ' fmt' . ale#Pad(l:options) - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/xmllint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/xmllint.vim deleted file mode 100644 index b14ffd36..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/xmllint.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: Cyril Roelandt -" Description: Integration of xmllint with ALE. - -call ale#Set('xml_xmllint_executable', 'xmllint') -call ale#Set('xml_xmllint_options', '') -call ale#Set('xml_xmllint_indentsize', 2) - -function! ale#fixers#xmllint#Fix(buffer) abort - let l:executable = ale#Escape(ale#Var(a:buffer, 'xml_xmllint_executable')) - let l:filename = ale#Escape(bufname(a:buffer)) - let l:command = l:executable . ' --format ' . l:filename - - let l:indent = ale#Var(a:buffer, 'xml_xmllint_indentsize') - - if l:indent isnot# '' - let l:env = ale#Env('XMLLINT_INDENT', repeat(' ', l:indent)) - let l:command = l:env . l:command - endif - - let l:options = ale#Var(a:buffer, 'xml_xmllint_options') - - if l:options isnot# '' - let l:command .= ' ' . l:options - endif - - return { - \ 'command': l:command - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/xo.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/xo.vim deleted file mode 100644 index dcf4c737..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/xo.vim +++ /dev/null @@ -1,36 +0,0 @@ -" Author: Albert Marquez - https://github.com/a-marquez -" Description: Fixing files with XO. - -function! ale#fixers#xo#Fix(buffer) abort - let l:executable = ale#handlers#xo#GetExecutable(a:buffer) - let l:options = ale#handlers#xo#GetOptions(a:buffer) - - return ale#semver#RunWithVersionCheck( - \ a:buffer, - \ l:executable, - \ '%e --version', - \ {b, v -> ale#fixers#xo#ApplyFixForVersion(b, v, l:executable, l:options)} - \) -endfunction - -function! ale#fixers#xo#ApplyFixForVersion(buffer, version, executable, options) abort - let l:executable = ale#node#Executable(a:buffer, a:executable) - let l:options = ale#Pad(a:options) - - " 0.30.0 is the first version with a working --stdin --fix - if ale#semver#GTE(a:version, [0, 30, 0]) - return { - \ 'command': l:executable - \ . ' --stdin --stdin-filename %s' - \ . ' --fix' - \ . l:options, - \} - endif - - return { - \ 'command': l:executable - \ . ' --fix %t' - \ . l:options, - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/yamlfix.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/yamlfix.vim deleted file mode 100644 index 6654a25c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/yamlfix.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Author: lyz-code -" Description: Fixing yaml files with yamlfix. - -call ale#Set('yaml_yamlfix_executable', 'yamlfix') -call ale#Set('yaml_yamlfix_options', '') -call ale#Set('yaml_yamlfix_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#fixers#yamlfix#Fix(buffer) abort - let l:options = ale#Var(a:buffer, 'yaml_yamlfix_options') - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'yaml_yamlfix', - \ ['yamlfix'], - \) - - if !executable(l:executable) - return 0 - endif - - return { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') . ' -', - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/yapf.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/yapf.vim deleted file mode 100644 index f04bb1f9..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/yapf.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: w0rp -" Description: Fixing Python files with yapf. - -call ale#Set('python_yapf_executable', 'yapf') -call ale#Set('python_yapf_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#fixers#yapf#Fix(buffer) abort - let l:executable = ale#python#FindExecutable( - \ a:buffer, - \ 'python_yapf', - \ ['yapf'], - \) - - if !executable(l:executable) - return 0 - endif - - let l:config = ale#path#FindNearestFile(a:buffer, '.style.yapf') - let l:config_options = !empty(l:config) - \ ? ' --no-local-style --style ' . ale#Escape(l:config) - \ : '' - - return { - \ 'command': ale#Escape(l:executable) . l:config_options, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/zigfmt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/fixers/zigfmt.vim deleted file mode 100644 index b22e5b83..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/fixers/zigfmt.vim +++ /dev/null @@ -1,14 +0,0 @@ -scriptencoding utf-8 -" Author: Arash Mousavi -" Description: Official formatter for Zig. - -call ale#Set('zig_zigfmt_executable', 'zig') - -function! ale#fixers#zigfmt#Fix(buffer) abort - let l:executable = ale#Var(a:buffer, 'zig_zigfmt_executable') - - return { - \ 'command': ale#Escape(l:executable) . ' fmt %t', - \ 'read_temporary_file': 1, - \} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/floating_preview.vim b/dotfiles/.vim/plugged/ale/autoload/ale/floating_preview.vim deleted file mode 100644 index b6deec4c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/floating_preview.vim +++ /dev/null @@ -1,231 +0,0 @@ -" Author: Jan-Grimo Sobez -" Author: Kevin Clark -" Author: D. Ben Knoble -" Author: Shaun Duncan -" Description: Floating preview window for showing whatever information in. - -" Precondition: exists('*nvim_open_win') || has('popupwin') - -function! ale#floating_preview#Show(lines, ...) abort - if !exists('*nvim_open_win') && !has('popupwin') - " no-custom-checks - echom 'Floating windows not supported in this vim instance.' - - return - endif - - let l:options = get(a:000, 0, {}) - - if has('nvim') - call s:NvimShow(a:lines, l:options) - else - call s:VimShow(a:lines, l:options) - endif -endfunction - -function! s:NvimShow(lines, options) abort - " Remove the close autocmd so it doesn't happen mid update - augroup ale_floating_preview_window - autocmd! - augroup END - - " Only create a new window if we need it - if !exists('w:preview') || index(nvim_list_wins(), w:preview['id']) is# -1 - call s:NvimCreate(a:options) - else - call nvim_buf_set_option(w:preview['buffer'], 'modifiable', v:true) - endif - - " Execute commands in window context - let l:parent_window = nvim_get_current_win() - - call nvim_set_current_win(w:preview['id']) - - for l:command in get(a:options, 'commands', []) - call execute(l:command) - endfor - - call nvim_set_current_win(l:parent_window) - - " Return to parent context on move - augroup ale_floating_preview_window - autocmd! - - if g:ale_close_preview_on_insert - autocmd CursorMoved,TabLeave,WinLeave,InsertEnter ++once call s:NvimClose() - else - autocmd CursorMoved,TabLeave,WinLeave ++once call s:NvimClose() - endif - augroup END - - let [l:lines, l:width, l:height] = s:NvimPrepareWindowContent(a:lines) - - call nvim_win_set_width(w:preview['id'], l:width) - call nvim_win_set_height(w:preview['id'], l:height) - call nvim_buf_set_lines(w:preview['buffer'], 0, -1, v:false, l:lines) - call nvim_buf_set_option(w:preview['buffer'], 'modified', v:false) - call nvim_buf_set_option(w:preview['buffer'], 'modifiable', v:false) -endfunction - -function! s:VimShow(lines, options) abort - if g:ale_close_preview_on_insert - " Remove the close autocmd so it doesn't happen mid update - silent! autocmd! ale_floating_preview_window - endif - - " Only create a new window if we need it - if !exists('w:preview') || index(popup_list(), w:preview['id']) is# -1 - call s:VimCreate(a:options) - endif - - " Execute commands in window context - for l:command in get(a:options, 'commands', []) - call win_execute(w:preview['id'], l:command) - endfor - - call popup_settext(w:preview['id'], a:lines) - - if g:ale_close_preview_on_insert - augroup ale_floating_preview_window - autocmd! - autocmd InsertEnter * ++once call s:VimClose() - augroup END - endif -endfunction - -function! s:NvimPrepareWindowContent(lines) abort - let l:max_height = 10 - - let l:width = max(map(copy(a:lines), 'strdisplaywidth(v:val)')) - let l:height = min([len(a:lines), l:max_height]) - - if empty(g:ale_floating_window_border) - return [a:lines, l:width, l:height] - endif - - " Add the size of borders - let l:width += 2 - let l:height += 2 - - let l:left = get(g:ale_floating_window_border, 0, '|') - let l:top = get(g:ale_floating_window_border, 1, '-') - let l:top_left = get(g:ale_floating_window_border, 2, '+') - let l:top_right = get(g:ale_floating_window_border, 3, '+') - let l:bottom_right = get(g:ale_floating_window_border, 4, '+') - let l:bottom_left = get(g:ale_floating_window_border, 5, '+') - let l:right = get(g:ale_floating_window_border, 6, l:left) - let l:bottom = get(g:ale_floating_window_border, 7, l:top) - - let l:lines = [l:top_left . repeat(l:top, l:width - 2) . l:top_right] - - for l:line in a:lines - let l:line_width = strchars(l:line) - let l:lines = add(l:lines, l:left . l:line . repeat(' ', l:width - l:line_width - 2). l:right) - endfor - - " Truncate the lines - if len(l:lines) > l:max_height + 1 - let l:lines = l:lines[0:l:max_height] - endif - - let l:lines = add(l:lines, l:bottom_left . repeat(l:bottom, l:width - 2) . l:bottom_right) - - return [l:lines, l:width, l:height] -endfunction - -function! s:NvimCreate(options) abort - let l:popup_opts = extend({ - \ 'relative': 'cursor', - \ 'row': 1, - \ 'col': 0, - \ 'width': 42, - \ 'height': 4, - \ 'style': 'minimal' - \ }, s:GetPopupOpts()) - - let l:buffer = nvim_create_buf(v:false, v:false) - let l:winid = nvim_open_win(l:buffer, v:false, l:popup_opts) - - call nvim_buf_set_option(l:buffer, 'buftype', 'acwrite') - call nvim_buf_set_option(l:buffer, 'bufhidden', 'delete') - call nvim_buf_set_option(l:buffer, 'swapfile', v:false) - call nvim_buf_set_option(l:buffer, 'filetype', get(a:options, 'filetype', 'ale-preview')) - - let w:preview = {'id': l:winid, 'buffer': l:buffer} -endfunction - -function! s:VimCreate(options) abort - " default options - let l:popup_opts = extend({ - \ 'line': 'cursor+1', - \ 'col': 'cursor', - \ 'drag': v:true, - \ 'resize': v:true, - \ 'close': 'button', - \ 'padding': [0, 1, 0, 1], - \ 'border': [], - \ 'borderchars': empty(g:ale_floating_window_border) ? [' '] : [ - \ get(g:ale_floating_window_border, 1, '-'), - \ get(g:ale_floating_window_border, 6, '|'), - \ get(g:ale_floating_window_border, 7, '-'), - \ get(g:ale_floating_window_border, 0, '|'), - \ get(g:ale_floating_window_border, 2, '+'), - \ get(g:ale_floating_window_border, 3, '+'), - \ get(g:ale_floating_window_border, 4, '+'), - \ get(g:ale_floating_window_border, 5, '+'), - \ ], - \ 'moved': 'any', - \ }, s:GetPopupOpts()) - - let l:popup_id = popup_create([], l:popup_opts) - call setbufvar(winbufnr(l:popup_id), '&filetype', get(a:options, 'filetype', 'ale-preview')) - let w:preview = {'id': l:popup_id} -endfunction - -function! s:NvimClose() abort - let l:mode = mode() - let l:restore_visual = l:mode is# 'v' || l:mode is# 'V' || l:mode is# "\" - - if !exists('w:preview') - return - endif - - call setbufvar(w:preview['buffer'], '&modified', 0) - - if win_id2win(w:preview['id']) > 0 - execute win_id2win(w:preview['id']).'wincmd c' - endif - - unlet w:preview - - if l:restore_visual - normal! gv - endif -endfunction - -function! s:VimClose() abort - if !exists('w:preview') - return - endif - - call popup_close(w:preview['id']) - unlet w:preview -endfunction - -" get either the results of a function callback or dictionary for popup overrides -function! s:GetPopupOpts() abort - if exists('g:ale_floating_preview_popup_opts') - let l:ref = g:ale_floating_preview_popup_opts - - if type(l:ref) is# v:t_dict - return l:ref - elseif type(l:ref) is# v:t_string - try - return function(l:ref)() - catch /E700/ - endtry - endif - endif - - return {} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/go.vim b/dotfiles/.vim/plugged/ale/autoload/ale/go.vim deleted file mode 100644 index bce85a87..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/go.vim +++ /dev/null @@ -1,58 +0,0 @@ -" Author: Horacio Sanson https://github.com/hsanson -" Description: Functions for integrating with Go tools - -" Find the nearest dir listed in GOPATH and assume it the root of the go -" project. -function! ale#go#FindProjectRoot(buffer) abort - let l:sep = has('win32') ? ';' : ':' - - let l:filename = ale#path#Simplify(expand('#' . a:buffer . ':p')) - - for l:name in split($GOPATH, l:sep) - let l:path_dir = ale#path#Simplify(l:name) - - " Use the directory from GOPATH if the current filename starts with it. - if l:filename[: len(l:path_dir) - 1] is? l:path_dir - return l:path_dir - endif - endfor - - let l:default_go_path = ale#path#Simplify(expand('~/go')) - - if isdirectory(l:default_go_path) - return l:default_go_path - endif - - return '' -endfunction - - -call ale#Set('go_go111module', '') - -" Return a string setting Go-specific environment variables -function! ale#go#EnvString(buffer) abort - let l:env = '' - - " GO111MODULE - turn go modules behavior on/off - let l:go111module = ale#Var(a:buffer, 'go_go111module') - - if !empty(l:go111module) - let l:env = ale#Env('GO111MODULE', l:go111module) . l:env - endif - - return l:env -endfunction - -function! ale#go#GetGoPathExecutable(suffix) abort - let l:prefix = $GOPATH - - if !empty($GOPATH) - let l:prefix = $GOPATH - elseif has('win32') - let l:prefix = $USERPROFILE . '/go' - else - let l:prefix = $HOME . '/go' - endif - - return ale#path#Simplify(l:prefix . '/' . a:suffix) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/gradle.vim b/dotfiles/.vim/plugged/ale/autoload/ale/gradle.vim deleted file mode 100644 index ba1add4d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/gradle.vim +++ /dev/null @@ -1,74 +0,0 @@ -" Author: Michael Pardo -" Description: Functions for working with Gradle projects. - -let s:script_path = fnamemodify(resolve(expand(':p')), ':h') -let s:init_path = has('win32') -\ ? s:script_path . '\gradle\init.gradle' -\ : s:script_path . '/gradle/init.gradle' - -function! ale#gradle#GetInitPath() abort - return s:init_path -endfunction - -" Given a buffer number, find a Gradle project root. -function! ale#gradle#FindProjectRoot(buffer) abort - let l:gradlew_path = ale#path#FindNearestFile(a:buffer, 'gradlew') - - if !empty(l:gradlew_path) - return fnamemodify(l:gradlew_path, ':h') - endif - - let l:settings_path = ale#path#FindNearestFile(a:buffer, 'settings.gradle') - - if !empty(l:settings_path) - return fnamemodify(l:settings_path, ':h') - endif - - let l:build_path = ale#path#FindNearestFile(a:buffer, 'build.gradle') - - if !empty(l:build_path) - return fnamemodify(l:build_path, ':h') - endif - - return '' -endfunction - -" Given a buffer number, find the path to the executable. -" First search on the path for 'gradlew', if nothing is found, try the global -" command. Returns an empty string if cannot find the executable. -function! ale#gradle#FindExecutable(buffer) abort - let l:gradlew_path = ale#path#FindNearestFile(a:buffer, 'gradlew') - - if !empty(l:gradlew_path) - return l:gradlew_path - endif - - if executable('gradle') - return 'gradle' - endif - - return '' -endfunction - -" Given a buffer number, get a working directory and command to print the -" classpath of the root project. -" -" Returns an empty string for the command if Gradle is not detected. -function! ale#gradle#BuildClasspathCommand(buffer) abort - let l:executable = ale#gradle#FindExecutable(a:buffer) - - if !empty(l:executable) - let l:project_root = ale#gradle#FindProjectRoot(a:buffer) - - if !empty(l:project_root) - return [ - \ l:project_root, - \ ale#Escape(l:executable) - \ . ' -I ' . ale#Escape(s:init_path) - \ . ' -q printClasspath' - \] - endif - endif - - return ['', ''] -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/gradle/init.gradle b/dotfiles/.vim/plugged/ale/autoload/ale/gradle/init.gradle deleted file mode 100644 index fb1db9ee..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/gradle/init.gradle +++ /dev/null @@ -1,23 +0,0 @@ -class ClasspathPlugin implements Plugin { - void apply(Project project) { - project.task('printClasspath') { - doLast { - project - .rootProject - .allprojects - .configurations - .flatten() - .findAll { it.name.endsWith('Classpath') } - .collect { it.resolve() } - .flatten() - .unique() - .findAll { it.exists() } - .each { println it } - } - } - } -} - -rootProject { - apply plugin: ClasspathPlugin -} diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/actionlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/actionlint.vim deleted file mode 100644 index 73843c08..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/actionlint.vim +++ /dev/null @@ -1,36 +0,0 @@ -function! ale#handlers#actionlint#GetCommand(buffer) abort - let l:options = ale#Var(a:buffer, 'yaml_actionlint_options') - - " automatically add --no-color option if not defined - if l:options !~# '--no-color' - let l:options .= ' --no-color' - endif - - " automatically add --oneline option if not defined - if l:options !~# '--oneline' - let l:options .= ' --oneline' - endif - - return '%e ' . l:options . ' %t' -endfunction - -function! ale#handlers#actionlint#Handle(buffer, lines) abort - " Matches patterns line the following: - ".github/workflows/main.yml:19:0: could not parse as YAML: yaml: line 19: mapping values are not allowed in this context [yaml-syntax] - let l:pattern = '\v^.*:(\d+):(\d+): (.+) \[(.+)\]$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[3], - \ 'code': l:match[4], - \ 'type': 'E', - \} - - call add(l:output, l:item) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/alex.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/alex.vim deleted file mode 100644 index 1a92bd14..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/alex.vim +++ /dev/null @@ -1,55 +0,0 @@ -scriptencoding utf-8 -" Author: Johannes Wienke -" Description: Error handling for errors in alex output format - -function! ale#handlers#alex#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'alex', [ - \ 'node_modules/.bin/alex', - \ 'node_modules/alex/cli.js', - \]) -endfunction - -function! ale#handlers#alex#CreateCommandCallback(flags) abort - return {b -> ale#node#Executable(b, ale#handlers#alex#GetExecutable(b)) - \ . ' --stdin ' - \ . a:flags - \} -endfunction - -function! ale#handlers#alex#Handle(buffer, lines) abort - " Example output: - " 6:256-6:262 warning Be careful with “killed”, it’s profane in some cases killed retext-profanities - let l:pattern = '\v^ *(\d+):(\d+)-(\d+):(\d+) +warning +(.{-}) +(.{-}) +(.{-})$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'end_lnum': l:match[3] + 0, - \ 'end_col': l:match[4] - 1, - \ 'text': l:match[5] . ' (' . (l:match[7]) . ')', - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -" Define a linter for a specific filetype. Accept flags to adapt to the filetype. -" no flags treat input as markdown -" --html treat input as HTML -" --mdx treat input as MDX -" --text treat input as plaintext -function! ale#handlers#alex#DefineLinter(filetype, flags) abort - call ale#Set('alex_executable', 'alex') - call ale#Set('alex_use_global', get(g:, 'ale_use_global_executables', 0)) - - call ale#linter#Define(a:filetype, { - \ 'name': 'alex', - \ 'executable': function('ale#handlers#alex#GetExecutable'), - \ 'command': ale#handlers#alex#CreateCommandCallback(a:flags), - \ 'output_stream': 'stderr', - \ 'callback': 'ale#handlers#alex#Handle', - \}) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/atools.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/atools.vim deleted file mode 100644 index c273fc40..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/atools.vim +++ /dev/null @@ -1,41 +0,0 @@ -" Author: Leo -" Description: Handlers for output expected from atools - -function! ale#handlers#atools#Handle(buffer, lines) abort - " Format: SEVERITY:[TAG]:PATH:LINENUM:MSG - " Example: MC:[AL5]:./APKBUILD:12:variable set to empty string: install= - let l:pattern = '\([^:]\+\):\([^:]\+\):\([^:]\+\):\(\d\+\):\(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - " We are expected to receive 2 characters, the first character - " can be 'S', 'I', 'M' 'T', which are respectively: - " Serious (Error) - " Important (Error) - " Minor (Warning) - " Style (Warning) - " - " The second character can be either 'C' or 'P', which are respectively: - " Certain (Error) - " Possible (Warning) - let l:severity = matchstr(l:match[1], '^.') - let l:certainty = matchstr(l:match[1], '.$') - - let l:type = 'E' - " If the tag returns 'Minor' or 'Style' or is 'Possible' - " then return a warning - - if l:severity is# 'M' || l:severity is# 'T' || l:certainty is# 'P' - let l:type = 'W' - endif - - call add(l:output, { - \ 'lnum': l:match[4] + 0, - \ 'text': l:match[5], - \ 'type': l:type, - \ 'code': matchstr(l:match[2], 'AL[0-9]*'), - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ccls.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ccls.vim deleted file mode 100644 index 290f5852..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ccls.vim +++ /dev/null @@ -1,26 +0,0 @@ -scriptencoding utf-8 -" Author: Ye Jingchen -" Description: Utilities for ccls - -function! ale#handlers#ccls#GetProjectRoot(buffer) abort - " Try to find ccls configuration files first. - let l:config = ale#path#FindNearestFile(a:buffer, '.ccls-root') - - if empty(l:config) - let l:config = ale#path#FindNearestFile(a:buffer, '.ccls') - endif - - if !empty(l:config) - return fnamemodify(l:config, ':h') - endif - - " Fall back on default project root detection. - return ale#c#FindProjectRoot(a:buffer) -endfunction - -function! ale#handlers#ccls#GetInitOpts(buffer, init_options_var) abort - let l:build_dir = ale#c#GetBuildDirectory(a:buffer) - let l:init_options = empty(l:build_dir) ? {} : {'compilationDatabaseDirectory': l:build_dir} - - return extend(l:init_options, ale#Var(a:buffer, a:init_options_var)) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cppcheck.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cppcheck.vim deleted file mode 100644 index 150bb007..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cppcheck.vim +++ /dev/null @@ -1,89 +0,0 @@ -" Description: Handle errors for cppcheck. - -function! ale#handlers#cppcheck#GetCwd(buffer) abort - let [l:dir, l:json_path] = ale#c#FindCompileCommands(a:buffer) - - return !empty(l:dir) ? l:dir : '' -endfunction - -function! ale#handlers#cppcheck#GetBufferPathIncludeOptions(buffer) abort - let l:buffer_path_include = '' - - " Get path to this buffer so we can include it into cppcheck with -I - " This could be expanded to get more -I directives from the compile - " command in compile_commands.json, if it's found. - let l:buffer_path = fnamemodify(bufname(a:buffer), ':p:h') - let l:buffer_path_include = ' -I' . ale#Escape(l:buffer_path) - - return l:buffer_path_include -endfunction - -function! ale#handlers#cppcheck#GetCompileCommandsOptions(buffer) abort - " The compile_commands.json doesn't apply to headers and cppheck will - " bail out if it cannot find a file matching the filter, below. Skip out - " now, for headers. Also, suppress FPs; cppcheck is not meant to - " process lone header files. - let b:buffer_name = bufname(a:buffer) - let b:file_extension = fnamemodify(b:buffer_name, ':e') - - if b:file_extension is# 'h' || b:file_extension is# 'hpp' - return ale#handlers#cppcheck#GetBufferPathIncludeOptions(a:buffer) - \ . ' --suppress=unusedStructMember' - endif - - " If the current buffer is modified, using compile_commands.json does no - " good, so include the file's directory instead. It's not quite as good as - " using --project, but is at least equivalent to running cppcheck on this - " file manually from the file's directory. - let l:modified = getbufvar(a:buffer, '&modified') - - if l:modified - return '' - endif - - " Search upwards from the file for compile_commands.json. - " - " If we find it, we'll `cd` to where the compile_commands.json file is, - " then use the file to set up import paths, etc. - let [l:dir, l:json_path] = ale#c#FindCompileCommands(a:buffer) - - " By default, cppcheck processes every config in compile_commands.json. - " Use --file-filter to limit to just the buffer file. - return !empty(l:json_path) - \ ? '--project=' . ale#Escape(l:json_path[len(l:dir) + 1: ]) . ' --file-filter=' . ale#Escape(bufname(a:buffer)) - \ : '' -endfunction - -function! ale#handlers#cppcheck#HandleCppCheckFormat(buffer, lines) abort - " Look for lines like the following. - " - "test.cpp:974:6: error:inconclusive Array 'n[3]' accessed at index 3, which is out of bounds. [arrayIndexOutOfBounds]\ - " n[3]=3; - " ^ - "" OR if cppcheck doesn't support {column} or {inconclusive:text}: - "test.cpp:974:{column}: error:{inconclusive:inconclusive} Array 'n[3]' accessed at index 3, which is out of bounds. [arrayIndexOutOfBounds]\ - " n[3]=3; - " ^ - " - "" OR if using the misra addon: - "test.c:1:16: style: misra violation (use --rule-texts= to get proper output) [misra-c2012-2.7]\' - "void test( int parm ) {} - " ^ - let l:pattern = '\v(\f+):(\d+):(\d+|\{column\}): (\w+):(\{inconclusive:inconclusive\})? ?(.*) \[(%(\w[-.]?)+)\]\' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if ale#path#IsBufferPath(a:buffer, l:match[1]) - call add(l:output, { - \ 'lnum': str2nr(l:match[2]), - \ 'col': match(l:match[3],'{column}') >= 0 ? 1 : str2nr(l:match[3]), - \ 'type': l:match[4] is# 'error' ? 'E' : 'W', - \ 'sub_type': l:match[4] is# 'style' ? 'style' : '', - \ 'text': l:match[6], - \ 'code': l:match[7] - \}) - endif - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cpplint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cpplint.vim deleted file mode 100644 index 5c475a5c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cpplint.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Dawid Kurek https://github.com/dawikur -" Description: Handle errors for cpplint. - -function! ale#handlers#cpplint#HandleCppLintFormat(buffer, lines) abort - " Look for lines like the following. - " test.cpp:5: Estra space after ( in function call [whitespace/parents] [4] - let l:pattern = '^.\{-}:\(\d\+\): *\(.\+\) *\[\(.*/.*\)\] ' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': 0, - \ 'text': join(split(l:match[2])), - \ 'code': l:match[3], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cspell.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cspell.vim deleted file mode 100644 index 2cd02d5c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/cspell.vim +++ /dev/null @@ -1,54 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: Define a handler function for cspell's output - -function! ale#handlers#cspell#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, - \ 'cspell', [ - \ 'node_modules/.bin/cspell', - \ 'node_modules/cspell/bin.js', - \ ] - \) -endfunction - -function! ale#handlers#cspell#GetCommand(buffer) abort - let l:executable = ale#handlers#cspell#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'cspell_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . ' lint --no-color --no-progress --no-summary' - \ . ale#Pad(l:options) - \ . ' -- stdin' -endfunction - -function! ale#handlers#cspell#Handle(buffer, lines) abort - " Look for lines like the following: - " - " /home/user/repos/ale/README.md:723:48 - Unknown word (stylelint) - let l:pattern = '\v^.*:(\d+):(\d+) - (.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[3], - \ 'type': 'W', - \}) - endfor - - return l:output -endfunction - -function! ale#handlers#cspell#DefineLinter(filetype) abort - call ale#Set('cspell_executable', 'cspell') - call ale#Set('cspell_options', '') - call ale#Set('cspell_use_global', get(g:, 'ale_use_global_executables', 0)) - - call ale#linter#Define(a:filetype, { - \ 'name': 'cspell', - \ 'executable': function('ale#handlers#cspell#GetExecutable'), - \ 'command': function('ale#handlers#cspell#GetCommand'), - \ 'callback': 'ale#handlers#cspell#Handle', - \}) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/css.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/css.vim deleted file mode 100644 index de9eadcc..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/css.vim +++ /dev/null @@ -1,70 +0,0 @@ -scriptencoding utf-8 -" Author: w0rp -" Description: Error handling for CSS linters. - -function! ale#handlers#css#HandleCSSLintFormat(buffer, lines) abort - " Matches patterns line the following: - " - " something.css: line 2, col 1, Error - Expected RBRACE at line 2, col 1. (errors) - " something.css: line 2, col 5, Warning - Expected (inline | block | list-item | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | grid | inline-grid | run-in | ruby | ruby-base | ruby-text | ruby-base-container | ruby-text-container | contents | none | -moz-box | -moz-inline-block | -moz-inline-box | -moz-inline-grid | -moz-inline-stack | -moz-inline-table | -moz-grid | -moz-grid-group | -moz-grid-line | -moz-groupbox | -moz-deck | -moz-popup | -moz-stack | -moz-marker | -webkit-box | -webkit-inline-box | -ms-flexbox | -ms-inline-flexbox | flex | -webkit-flex | inline-flex | -webkit-inline-flex) but found 'wat'. (known-properties) - " - " These errors can be very massive, so the type will be moved to the front - " so you can actually read the error type. - let l:pattern = '\v^.*: line (\d+), col (\d+), (Error|Warning) - (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[3] is# 'Warning' ? 'W' : 'E', - \ 'text': l:match[4], - \} - - let l:code_match = matchlist(l:match[4], '\v(.+) \(([^(]+)\)$') - - " Split up the error code and the text if we find one. - if !empty(l:code_match) - let l:item.text = l:code_match[1] - let l:item.code = l:code_match[2] - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -function! ale#handlers#css#HandleStyleLintFormat(buffer, lines) abort - let l:exception_pattern = '\v^Error:' - - for l:line in a:lines[:10] - if len(matchlist(l:line, l:exception_pattern)) > 0 - return [{ - \ 'lnum': 1, - \ 'text': 'stylelint exception thrown (type :ALEDetail for more information)', - \ 'detail': join(a:lines, "\n"), - \}] - endif - endfor - - " Matches patterns line the following: - " - " src/main.css - " 108:10 ✖ Unexpected leading zero number-leading-zero - " 116:20 ✖ Expected a trailing semicolon declaration-block-trailing-semicolon - let l:pattern = '\v^.* (\d+):(\d+) \s+(\S+)\s+ (.*[^ ])\s+([^ ]+)\s*$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[3] is# '✖' ? 'E' : 'W', - \ 'text': l:match[4], - \ 'code': l:match[5], - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/deno.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/deno.vim deleted file mode 100644 index b762f983..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/deno.vim +++ /dev/null @@ -1,76 +0,0 @@ -" Author: Mohammed Chelouti - https://github.com/motato1 -" Arnold Chand -" Description: Handler functions for Deno. - -call ale#Set('deno_executable', 'deno') -call ale#Set('deno_unstable', 0) -call ale#Set('deno_importMap', 'import_map.json') -call ale#Set('deno_lsp_project_root', '') - -function! ale#handlers#deno#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'deno_executable') -endfunction - -" Find project root for Deno's language server. -" -" Deno projects do not require a project or configuration file at the project root. -" This means the root directory has to be guessed, -" unless it is explicitly specified by the user. -" -" The project root is determined by ... -" 1. using a user-specified value from deno_lsp_project_root -" 2. looking for common top-level files/dirs -" 3. using the buffer's directory -function! ale#handlers#deno#GetProjectRoot(buffer) abort - let l:project_root = ale#Var(a:buffer, 'deno_lsp_project_root') - - if !empty(l:project_root) - return l:project_root - endif - - let l:possible_project_roots = [ - \ 'deno.json', - \ 'deno.jsonc', - \ 'tsconfig.json', - \ '.git', - \ bufname(a:buffer), - \] - - for l:possible_root in l:possible_project_roots - let l:project_root = ale#path#FindNearestFile(a:buffer, l:possible_root) - - if empty(l:project_root) - let l:project_root = ale#path#FindNearestDirectory(a:buffer, l:possible_root) - endif - - if !empty(l:project_root) - " dir:p expands to /full/path/to/dir/ whereas - " file:p expands to /full/path/to/file (no trailing slash) - " Appending '/' ensures that :h:h removes the path's last segment - " regardless of whether it is a directory or not. - return fnamemodify(l:project_root . '/', ':p:h:h') - endif - endfor - - return '' -endfunction - -" Initialization Options for deno, for javascript and typescript -function! ale#handlers#deno#GetInitializationOptions(buffer) abort - let l:options = { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:false, - \ 'importMap': ale#path#FindNearestFile(a:buffer, 'import_map.json'), - \ } - - if ale#Var(a:buffer, 'deno_unstable') - let l:options.unstable = v:true - endif - - if ale#Var(a:buffer, 'deno_importMap') isnot# '' - let l:options.importMap = ale#path#FindNearestFile(a:buffer, ale#Var(a:buffer, 'deno_importMap')) - endif - - return l:options -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/elixir.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/elixir.vim deleted file mode 100644 index 2fddf8e7..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/elixir.vim +++ /dev/null @@ -1,28 +0,0 @@ -" Author: Matteo Centenaro (bugant) - https://github.com/bugant -" Author: Jon Parise -" Description: Functions for working with Elixir projects - -" Find the root directory for an elixir project that uses mix. -function! ale#handlers#elixir#FindMixProjectRoot(buffer) abort - let l:mix_file = ale#path#FindNearestFile(a:buffer, 'mix.exs') - - if !empty(l:mix_file) - return fnamemodify(l:mix_file, ':p:h') - endif - - return '.' -endfunction - -" Similar to ale#handlers#elixir#FindMixProjectRoot but also continue the -" search upward for a potential umbrella project root. If an umbrella root -" does not exist, the initial project root will be returned. -function! ale#handlers#elixir#FindMixUmbrellaRoot(buffer) abort - let l:app_root = ale#handlers#elixir#FindMixProjectRoot(a:buffer) - let l:umbrella_root = fnamemodify(l:app_root, ':h:h') - - if filereadable(l:umbrella_root . '/mix.exs') - return l:umbrella_root - endif - - return l:app_root -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/eslint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/eslint.vim deleted file mode 100644 index 374460bc..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/eslint.vim +++ /dev/null @@ -1,280 +0,0 @@ -" Author: w0rp -" Description: Functions for working with eslint, for checking or fixing files. - -let s:executables = [ -\ '.yarn/sdks/eslint/bin/eslint.js', -\ 'node_modules/.bin/eslint_d', -\ 'node_modules/eslint/bin/eslint.js', -\ 'node_modules/.bin/eslint', -\] -let s:sep = has('win32') ? '\' : '/' - -call ale#Set('javascript_eslint_options', '') -call ale#Set('javascript_eslint_executable', 'eslint') -call ale#Set('javascript_eslint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('javascript_eslint_suppress_eslintignore', 0) -call ale#Set('javascript_eslint_suppress_missing_config', 0) - -function! ale#handlers#eslint#FindConfig(buffer) abort - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - for l:basename in [ - \ '.eslintrc.js', - \ '.eslintrc.yaml', - \ '.eslintrc.yml', - \ '.eslintrc.json', - \ '.eslintrc', - \] - let l:config = ale#path#Simplify(join([l:path, l:basename], s:sep)) - - if filereadable(l:config) - return l:config - endif - endfor - endfor - - return ale#path#FindNearestFile(a:buffer, 'package.json') -endfunction - -function! ale#handlers#eslint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'javascript_eslint', s:executables) -endfunction - -" Given a buffer, return an appropriate working directory for ESLint. -function! ale#handlers#eslint#GetCwd(buffer) abort - " ESLint 6 loads plugins/configs/parsers from the project root - " By default, the project root is simply the CWD of the running process. - " https://github.com/eslint/rfcs/blob/master/designs/2018-simplified-package-loading/README.md - " https://github.com/dense-analysis/ale/issues/2787 - " - " If eslint is installed in a directory which contains the buffer, assume - " it is the ESLint project root. Otherwise, use nearest node_modules. - " Note: If node_modules not present yet, can't load local deps anyway. - let l:executable = ale#path#FindNearestExecutable(a:buffer, s:executables) - - if !empty(l:executable) - let l:modules_index = strridx(l:executable, 'node_modules') - let l:modules_root = l:modules_index > -1 ? l:executable[0:l:modules_index - 2] : '' - - let l:sdks_index = strridx(l:executable, ale#path#Simplify('.yarn/sdks')) - let l:sdks_root = l:sdks_index > -1 ? l:executable[0:l:sdks_index - 2] : '' - else - let l:modules_dir = ale#path#FindNearestDirectory(a:buffer, 'node_modules') - let l:modules_root = !empty(l:modules_dir) ? fnamemodify(l:modules_dir, ':h:h') : '' - - let l:sdks_dir = ale#path#FindNearestDirectory(a:buffer, ale#path#Simplify('.yarn/sdks')) - let l:sdks_root = !empty(l:sdks_dir) ? fnamemodify(l:sdks_dir, ':h:h:h') : '' - endif - - return strlen(l:modules_root) > strlen(l:sdks_root) ? l:modules_root : l:sdks_root -endfunction - -function! ale#handlers#eslint#GetCommand(buffer) abort - let l:executable = ale#handlers#eslint#GetExecutable(a:buffer) - - let l:options = ale#Var(a:buffer, 'javascript_eslint_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -f json --stdin --stdin-filename %s' -endfunction - -function! s:AddHintsForTypeScriptParsingErrors(output) abort - for l:item in a:output - let l:item.text = substitute( - \ l:item.text, - \ '^\(Parsing error\)', - \ '\1 (You may need configure typescript-eslint-parser)', - \ '', - \) - endfor -endfunction - -function! s:CheckForBadConfig(buffer, lines) abort - let l:config_error_pattern = '\v^ESLint couldn''t find a configuration file' - \ . '|^Cannot read config file' - \ . '|^.*Configuration for rule .* is invalid' - \ . '|^ImportDeclaration should appear' - - " Look for a message in the first few lines which indicates that - " a configuration file couldn't be found. - for l:line in a:lines[:10] - let l:match = matchlist(l:line, l:config_error_pattern) - - if len(l:match) > 0 - " Don't show the missing config error if we've disabled it. - if ale#Var(a:buffer, 'javascript_eslint_suppress_missing_config') - \&& l:match[0] is# 'ESLint couldn''t find a configuration file' - return 0 - endif - - return 1 - endif - endfor - - return 0 -endfunction - -function! s:parseJSON(buffer, lines) abort - let l:parsed = [] - - for l:line in a:lines - try - let l:parsed = extend(l:parsed, json_decode(l:line)) - catch - endtry - endfor - - if type(l:parsed) != v:t_list || empty(l:parsed) - return [] - endif - - let l:errors = l:parsed[0]['messages'] - - if empty(l:errors) - return [] - endif - - let l:output = [] - - for l:error in l:errors - let l:obj = ({ - \ 'lnum': get(l:error, 'line', 0), - \ 'text': get(l:error, 'message', ''), - \ 'type': 'E', - \}) - - if get(l:error, 'severity', 0) is# 1 - let l:obj.type = 'W' - endif - - if has_key(l:error, 'ruleId') - let l:code = l:error['ruleId'] - - " Sometimes ESLint returns null here - if !empty(l:code) - let l:obj.code = l:code - endif - endif - - if has_key(l:error, 'column') - let l:obj.col = l:error['column'] - endif - - if has_key(l:error, 'endColumn') - let l:obj.end_col = l:error['endColumn'] - 1 - endif - - if has_key(l:error, 'endLine') - let l:obj.end_lnum = l:error['endLine'] - endif - - call add(l:output, l:obj) - endfor - - return l:output -endfunction - -let s:col_end_patterns = [ -\ '\vParsing error: Unexpected token (.+) ?', -\ '\v''(.+)'' is not defined.', -\ '\v%(Unexpected|Redundant use of) [''`](.+)[''`]', -\ '\vUnexpected (console) statement', -\] - -function! s:parseLines(buffer, lines) abort - " Matches patterns line the following: - " - " /path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle] - " /path/to/some-filename.js:56:41: Missing semicolon. [Error/semi] - let l:pattern = '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$' - " This second pattern matches lines like the following: - " - " /path/to/some-filename.js:13:3: Parsing error: Unexpected token - let l:parsing_pattern = '^.*:\(\d\+\):\(\d\+\): \(.\+\)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, [l:pattern, l:parsing_pattern]) - let l:text = l:match[3] - - let l:obj = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:text, - \ 'type': 'E', - \} - - " Take the error type from the output if available. - let l:split_code = split(l:match[4], '/') - - if get(l:split_code, 0, '') is# 'Warning' - let l:obj.type = 'W' - endif - - " The code can be something like 'Error/foo/bar', or just 'Error' - if !empty(get(l:split_code, 1)) - let l:obj.code = join(l:split_code[1:], '/') - endif - - for l:col_match in ale#util#GetMatches(l:text, s:col_end_patterns) - let l:obj.end_col = l:obj.col + len(l:col_match[1]) - 1 - endfor - - call add(l:output, l:obj) - endfor - - return l:output -endfunction - -function! s:FilterResult(buffer, obj) abort - if ale#Var(a:buffer, 'javascript_eslint_suppress_eslintignore') - if a:obj.text =~# '^File ignored' - return 0 - endif - endif - - if has_key(a:obj, 'code') && a:obj.code is# 'no-trailing-spaces' - \&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - return 0 - endif - - return 1 -endfunction - -function! s:HandleESLintOutput(buffer, lines, type) abort - if s:CheckForBadConfig(a:buffer, a:lines) - return [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(a:lines, "\n"), - \}] - endif - - if a:lines == ['Could not connect'] - return [{ - \ 'lnum': 1, - \ 'text': 'Could not connect to eslint_d. Try updating eslint_d or killing it.', - \}] - endif - - if a:type is# 'json' - let l:output = s:parseJSON(a:buffer, a:lines) - else - let l:output = s:parseLines(a:buffer, a:lines) - endif - - call filter(l:output, {idx, obj -> s:FilterResult(a:buffer, obj)}) - - if expand('#' . a:buffer . ':t') =~? '\.tsx\?$' - call s:AddHintsForTypeScriptParsingErrors(l:output) - endif - - return l:output -endfunction - -function! ale#handlers#eslint#HandleJSON(buffer, lines) abort - return s:HandleESLintOutput(a:buffer, a:lines, 'json') -endfunction - -function! ale#handlers#eslint#Handle(buffer, lines) abort - return s:HandleESLintOutput(a:buffer, a:lines, 'lines') -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/fecs.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/fecs.vim deleted file mode 100644 index 064b927e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/fecs.vim +++ /dev/null @@ -1,52 +0,0 @@ -" Author: harttle -" Description: fecs http://fecs.baidu.com/ - -call ale#Set('javascript_fecs_executable', 'fecs') -call ale#Set('javascript_fecs_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#handlers#fecs#GetCommand(buffer) abort - return '%e check --colors=false --rule=true %t' -endfunction - -function! ale#handlers#fecs#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'javascript_fecs', [ - \ 'node_modules/.bin/fecs', - \ 'node_modules/fecs/bin/fecs', - \]) -endfunction - -function! ale#handlers#fecs#Handle(buffer, lines) abort - " Matches patterns looking like the following - " - " fecs WARN → line 20, col 25: Unexpected console statement. (no-console) - " fecs ERROR → line 24, col 36: Missing radix parameter. (radix) - " - let l:pattern = '\v^.*(WARN|ERROR)\s+→\s+line (\d+),\s+col\s+(\d+):\s+(.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:obj = { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4] - \} - - let l:code_match = matchlist(l:match[4], '\v^(.{-})\s*\((.+)\)$') - - if !empty(l:code_match) - let l:obj.code = l:code_match[2] - let l:obj.text = l:code_match[1] - endif - - if l:match[1] is# 'WARN' - let l:obj.type = 'W' - elseif l:match[1] is# 'ERROR' - let l:obj.type = 'E' - endif - - call add(l:output, l:obj) - endfor - - return l:output -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/flawfinder.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/flawfinder.vim deleted file mode 100644 index b7d2bec3..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/flawfinder.vim +++ /dev/null @@ -1,48 +0,0 @@ -scriptencoding utf-8 -" Author: Christian Gibbons -" Description: This file defines a handler function that should work for the -" flawfinder format with the -CDQS flags. - -" Swiped this function from the GCC handler. Not sure if needed, but doesn't -" hurt to have it. -function! s:RemoveUnicodeQuotes(text) abort - let l:text = a:text - let l:text = substitute(l:text, '[`´‘’]', '''', 'g') - let l:text = substitute(l:text, '\v\\u2018([^\\]+)\\u2019', '''\1''', 'g') - let l:text = substitute(l:text, '[“”]', '"', 'g') - - return l:text -endfunction - -function! ale#handlers#flawfinder#HandleFlawfinderFormat(buffer, lines) abort - " Look for lines like the following. - " - " :12:4: [2] (buffer) char:Statically-sized arrays can be improperly restricted, leading to potential overflows or other issues (CWE-119!/CWE-120). Perform bounds checking, use functions that limit length, or ensure that the size is larger than the maximum possible length. - " :31:4: [1] (buffer) strncpy:Easily used incorrectly; doesn't always \0-terminate or check for invalid pointers [MS-banned] (CWE-120). - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+)?:? ( \[[0-5]\] [^:]+):(.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - " Use severity level to determine if it should be considered a warning - " or error. - let l:severity = str2nr(matchstr(split(l:match[4])[0], '[0-5]')) - - let l:item = { - \ 'lnum': str2nr(l:match[2]), - \ 'col': str2nr(l:match[3]), - \ 'type': (l:severity < ale#Var(a:buffer, 'c_flawfinder_error_severity')) - \ ? 'W' : 'E', - \ 'text': s:RemoveUnicodeQuotes(join(split(l:match[4])[1:]) . ': ' . l:match[5]), - \} - - " If the filename is something like , or -, then - " this is an error for the file we checked. - if l:match[1] isnot# '-' && l:match[1][0] isnot# '<' - let l:item['filename'] = l:match[1] - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/gawk.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/gawk.vim deleted file mode 100644 index 50bc4c45..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/gawk.vim +++ /dev/null @@ -1,27 +0,0 @@ -" Author: Anthony DeDominic -" Description: Handle output from gawk's --lint option - -function! ale#handlers#gawk#HandleGawkFormat(buffer, lines) abort - " Look for lines like the following: - " gawk: /tmp/v0fddXz/1/something.awk:1: ^ invalid char ''' in expression - let l:pattern = '^.\{-}:\(\d\+\):\s\+\(warning:\|\^\)\s*\(.*\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:ecode = 'E' - - if l:match[2] is? 'warning:' - let l:ecode = 'W' - endif - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': 0, - \ 'text': l:match[3], - \ 'code': 0, - \ 'type': l:ecode, - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/gcc.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/gcc.vim deleted file mode 100644 index 0b37c98a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/gcc.vim +++ /dev/null @@ -1,176 +0,0 @@ -scriptencoding utf-8 -" Author: w0rp -" Description: This file defines a handler function which ought to work for -" any program which outputs errors in the format that GCC uses. - -let s:pragma_error = '#pragma once in main file' - -" Look for lines like the following. -" -" :8:5: warning: conversion lacks type at end of format [-Wformat=] -" :10:27: error: invalid operands to binary - (have ‘int’ and ‘char *’) -" -:189:7: note: $/${} is unnecessary on arithmetic variables. [SC2004] -let s:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+)?:?(\d+)?:? ([^:]+): (.+)$' -let s:inline_pattern = '\v inlined from .* at \:(\d+):(\d+):$' - -function! s:IsHeaderFile(filename) abort - return a:filename =~? '\v\.(h|hpp)$' -endfunction - -function! s:RemoveUnicodeQuotes(text) abort - let l:text = a:text - let l:text = substitute(l:text, '[`´‘’]', '''', 'g') - let l:text = substitute(l:text, '\v\\u2018([^\\]+)\\u2019', '''\1''', 'g') - let l:text = substitute(l:text, '[“”]', '"', 'g') - - return l:text -endfunction - -function! s:ParseInlinedFunctionProblems(buffer, lines) abort - let l:output = [] - let l:pos_match = [] - - for l:line in a:lines - let l:match = matchlist(l:line, s:pattern) - - if !empty(l:match) && !empty(l:pos_match) - call add(l:output, { - \ 'lnum': str2nr(l:pos_match[1]), - \ 'col': str2nr(l:pos_match[2]), - \ 'type': (l:match[4] is# 'error' || l:match[4] is# 'fatal error') ? 'E' : 'W', - \ 'text': s:RemoveUnicodeQuotes(l:match[5]), - \}) - endif - - let l:pos_match = matchlist(l:line, s:inline_pattern) - endfor - - return l:output -endfunction - -" Report problems inside of header files just for gcc and clang -function! s:ParseProblemsInHeaders(buffer, lines) abort - let l:output = [] - let l:include_item = {} - - for l:line in a:lines[: -2] - let l:include_match = matchlist(l:line, '\v^In file included from') - - if !empty(l:include_item) - let l:pattern_match = matchlist(l:line, s:pattern) - - if !empty(l:pattern_match) && l:pattern_match[1] is# '' - if has_key(l:include_item, 'lnum') - call add(l:output, l:include_item) - endif - - let l:include_item = {} - - continue - endif - - let l:include_item.detail .= "\n" . l:line - endif - - if !empty(l:include_match) - if empty(l:include_item) - let l:include_item = { - \ 'text': 'Error found in header. See :ALEDetail', - \ 'detail': l:line, - \} - endif - endif - - if !empty(l:include_item) - let l:stdin_match = matchlist(l:line, '\vfrom \:(\d+):(\d*):?$') - - if !empty(l:stdin_match) - let l:include_item.lnum = str2nr(l:stdin_match[1]) - - if str2nr(l:stdin_match[2]) - let l:include_item.col = str2nr(l:stdin_match[2]) - endif - endif - endif - endfor - - if !empty(l:include_item) && has_key(l:include_item, 'lnum') - call add(l:output, l:include_item) - endif - - return l:output -endfunction - -function! ale#handlers#gcc#HandleGCCFormat(buffer, lines) abort - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, s:pattern) - " Filter out the pragma errors - if s:IsHeaderFile(bufname(bufnr(''))) - \&& l:match[5][:len(s:pragma_error) - 1] is# s:pragma_error - continue - endif - - " If the 'error type' is a note, make it detail related to - " the previous error parsed in output - if l:match[4] is# 'note' - if !empty(l:output) - if !has_key(l:output[-1], 'detail') - let l:output[-1].detail = l:output[-1].text - - " handle macro expansion errors/notes - if l:match[5] =~? '^in expansion of macro ‘\w*\w’$' - " if the macro expansion is in the file we're in, add - " the lnum and col keys to the previous error - if l:match[1] is# '' - \ && !has_key(l:output[-1], 'col') - let l:output[-1].lnum = str2nr(l:match[2]) - let l:output[-1].col = str2nr(l:match[3]) - else - " the error is not in the current file, and since - " macro expansion errors don't show the full path to - " the error from the current file, we have to just - " give out a generic error message - let l:output[-1].text = 'Error found in macro expansion. See :ALEDetail' - endif - endif - endif - - let l:output[-1].detail = l:output[-1].detail . "\n" - \ . s:RemoveUnicodeQuotes(l:match[0]) - endif - - continue - endif - - let l:item = { - \ 'lnum': str2nr(l:match[2]), - \ 'type': (l:match[4] is# 'error' || l:match[4] is# 'fatal error') ? 'E' : 'W', - \ 'text': s:RemoveUnicodeQuotes(l:match[5]), - \} - - if !empty(l:match[3]) - let l:item.col = str2nr(l:match[3]) - endif - - " If the filename is something like , or -, then - " this is an error for the file we checked. - if l:match[1] isnot# '-' && l:match[1][0] isnot# '<' - let l:item['filename'] = l:match[1] - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -" Handle problems with the GCC format, but report problems inside of headers. -function! ale#handlers#gcc#HandleGCCFormatWithIncludes(buffer, lines) abort - let l:output = ale#handlers#gcc#HandleGCCFormat(a:buffer, a:lines) - - call extend(l:output, s:ParseInlinedFunctionProblems(a:buffer, a:lines)) - call extend(l:output, s:ParseProblemsInHeaders(a:buffer, a:lines)) - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/go.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/go.vim deleted file mode 100644 index c969669d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/go.vim +++ /dev/null @@ -1,29 +0,0 @@ -" Author: neersighted -" Description: go vet for Go files -" -" Author: John Eikenberry -" Description: updated to work with go1.10 -" -" Author: Ben Paxton -" Description: moved to generic Golang file from govet -" -" Author: mostfunkyduck -" Description: updated to work with go 1.14 - -function! ale#handlers#go#Handler(buffer, lines) abort - let l:pattern = '\v^%(vet: )?([a-zA-Z]?:?[^:]+):(\d+):?(\d+)?:? ?(.+)$' - let l:output = [] - let l:dir = expand('#' . a:buffer . ':p:h') - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:match[1]), - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:match[4], - \ 'type': 'E', - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell.vim deleted file mode 100644 index 70a3a7ea..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell.vim +++ /dev/null @@ -1,119 +0,0 @@ -" Author: w0rp -" Description: Error handling for the format GHC outputs. -" -function! ale#handlers#haskell#GetStackExecutable(bufnr) abort - if ale#path#FindNearestFile(a:bufnr, 'stack.yaml') isnot# '' - return 'stack' - endif - - " if there is no stack.yaml file, we don't use stack even if it exists, - " so we return '', because executable('') apparently always fails - return '' -endfunction - -" Remember the directory used for temporary files for Vim. -let s:temp_dir = fnamemodify(ale#util#Tempname(), ':h') -" Build part of a regular expression for matching ALE temporary filenames. -let s:temp_regex_prefix = -\ '\M' -\ . substitute(s:temp_dir, '\\', '\\\\', 'g') -\ . '\.\{-}' - -function! s:PanicOutput(lines) abort - return [{ - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'ghc panic!', - \ 'type': 'E', - \ 'detail' : join(a:lines, "\n"), - \}] -endfunction - -function! ale#handlers#haskell#HandleGHCFormat(buffer, lines) abort - " Look for lines like the following. - " - "Appoint/Lib.hs:8:1: warning: - "Appoint/Lib.hs:8:1: - let l:basename = expand('#' . a:buffer . ':t') - " Build a complete regular expression for replacing temporary filenames - " in Haskell error messages with the basename for this file. - let l:temp_filename_regex = s:temp_regex_prefix . l:basename - - let l:pattern = '\v^\s*([a-zA-Z]?:?[^:]+):(\d+):(\d+):(.*)?$' - let l:output = [] - - let l:corrected_lines = [] - - " If ghc panic error, put the whole message in details and exit. - let l:panic_position = match(a:lines,'ghc: panic!') - let l:panic_end = match(a:lines,'Please report this as a GHC bug:') - - if l:panic_position >= 0 - return s:PanicOutput(a:lines[l:panic_position : l:panic_end]) - endif - - " Group the lines into smaller lists. - for l:line in a:lines - if len(matchlist(l:line, l:pattern)) > 0 - call add(l:corrected_lines, [l:line]) - elseif l:line is# '' - call add(l:corrected_lines, [l:line]) - elseif len(l:corrected_lines) > 0 - call add(l:corrected_lines[-1], l:line) - endif - endfor - - for l:line_list in l:corrected_lines - " Join the smaller lists into one large line to parse. - let l:line = l:line_list[0] - - for l:extra_line in l:line_list[1:] - let l:line .= substitute(l:extra_line, '\v^\s+', ' ', '') - endfor - - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) == 0 - continue - endif - - if !ale#path#IsBufferPath(a:buffer, l:match[1]) - continue - endif - - let l:errors = matchlist(l:match[4], '\v([wW]arning|[eE]rror): ?(.*)') - - if len(l:errors) > 0 - let l:ghc_type = l:errors[1] - let l:text = l:errors[2] - else - let l:ghc_type = '' - let l:text = l:match[4][:0] is# ' ' ? l:match[4][1:] : l:match[4] - endif - - if l:ghc_type is? 'Warning' - let l:type = 'W' - else - let l:type = 'E' - endif - - " Replace temporary filenames in problem messages with the basename - let l:text = substitute(l:text, l:temp_filename_regex, l:basename, 'g') - - let l:item = { - \ 'lnum': l:match[2] + 0, - \ 'col': l:match[3] + 0, - \ 'text': l:text, - \ 'type': l:type, - \} - - " Include extra lines as details if they are there. - if len(l:line_list) > 1 - let l:item.detail = join(l:line_list[1:], "\n") - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell_stack.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell_stack.vim deleted file mode 100644 index 108301a9..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/haskell_stack.vim +++ /dev/null @@ -1,7 +0,0 @@ -function! ale#handlers#haskell_stack#EscapeExecutable(executable, stack_exec) abort - let l:exec_args = a:executable =~? 'stack$' - \ ? ' exec ' . ale#Escape(a:stack_exec) . ' --' - \ : '' - - return ale#Escape(a:executable) . l:exec_args -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/hdl_checker.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/hdl_checker.vim deleted file mode 100644 index e11c5377..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/hdl_checker.vim +++ /dev/null @@ -1,73 +0,0 @@ -" Author: suoto -" Description: Adds support for HDL Code Checker, which wraps vcom/vlog, ghdl -" or xvhdl. More info on https://github.com/suoto/hdl_checker - -call ale#Set('hdl_checker_executable', 'hdl_checker') -call ale#Set('hdl_checker_config_file', has('unix') ? '.hdl_checker.config' : '_hdl_checker.config') -call ale#Set('hdl_checker_options', '') - -" Use this as a function so we can mock it on testing. Need to do this because -" test files are inside /testplugin (which refers to the ale repo), which will -" always have a .git folder -function! ale#handlers#hdl_checker#IsDotGit(path) abort - return ! empty(a:path) && isdirectory(a:path) -endfunction - -" Sould return (in order of preference) -" 1. Nearest config file -" 2. Nearest .git directory -" 3. The current path -function! ale#handlers#hdl_checker#GetProjectRoot(buffer) abort - let l:project_root = ale#path#FindNearestFile( - \ a:buffer, - \ ale#Var(a:buffer, 'hdl_checker_config_file')) - - if !empty(l:project_root) - return fnamemodify(l:project_root, ':h') - endif - - " Search for .git to use as root - let l:project_root = ale#path#FindNearestDirectory(a:buffer, '.git') - - if ale#handlers#hdl_checker#IsDotGit(l:project_root) - return fnamemodify(l:project_root, ':h:h') - endif - - return '' -endfunction - -function! ale#handlers#hdl_checker#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'hdl_checker_executable') -endfunction - -function! ale#handlers#hdl_checker#GetCommand(buffer) abort - let l:command = ale#Escape(ale#handlers#hdl_checker#GetExecutable(a:buffer)) . ' --lsp' - - " Add extra parameters only if config has been set - let l:options = ale#Var(a:buffer, 'hdl_checker_options') - - if ! empty(l:options) - let l:command = l:command . ' ' . l:options - endif - - return l:command -endfunction - -" To allow testing -function! ale#handlers#hdl_checker#GetInitOptions(buffer) abort - return {'project_file': ale#Var(a:buffer, 'hdl_checker_config_file')} -endfunction - -" Define the hdl_checker linter for a given filetype. -function! ale#handlers#hdl_checker#DefineLinter(filetype) abort - call ale#linter#Define(a:filetype, { - \ 'name': 'hdl-checker', - \ 'lsp': 'stdio', - \ 'language': a:filetype, - \ 'executable': function('ale#handlers#hdl_checker#GetExecutable'), - \ 'command': function('ale#handlers#hdl_checker#GetCommand'), - \ 'project_root': function('ale#handlers#hdl_checker#GetProjectRoot'), - \ 'initialization_options': function('ale#handlers#hdl_checker#GetInitOptions'), - \ }) -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/hlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/hlint.vim deleted file mode 100644 index b9a8c322..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/hlint.vim +++ /dev/null @@ -1,8 +0,0 @@ -call ale#Set('haskell_hlint_executable', 'hlint') -call ale#Set('haskell_hlint_options', get(g:, 'hlint_options', '')) - -function! ale#handlers#hlint#GetExecutable(buffer) abort - let l:executable = ale#Var(a:buffer, 'haskell_hlint_executable') - - return ale#handlers#haskell_stack#EscapeExecutable(l:executable, 'hlint') -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/inko.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/inko.vim deleted file mode 100644 index 73f06871..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/inko.vim +++ /dev/null @@ -1,37 +0,0 @@ -" Author: Yorick Peterse -" Description: output handlers for the Inko JSON format - -function! ale#handlers#inko#GetType(severity) abort - if a:severity is? 'warning' - return 'W' - endif - - return 'E' -endfunction - -function! ale#handlers#inko#Handle(buffer, lines) abort - try - let l:errors = json_decode(join(a:lines, '')) - catch - return [] - endtry - - if empty(l:errors) - return [] - endif - - let l:output = [] - let l:dir = expand('#' . a:buffer . ':p:h') - - for l:error in l:errors - call add(l:output, { - \ 'filename': ale#path#GetAbsPath(l:dir, l:error['file']), - \ 'lnum': l:error['line'], - \ 'col': l:error['column'], - \ 'text': l:error['message'], - \ 'type': ale#handlers#inko#GetType(l:error['level']), - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ktlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ktlint.vim deleted file mode 100644 index 77e7ab66..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ktlint.vim +++ /dev/null @@ -1,45 +0,0 @@ -" Author: Michael Phillips -" Description: Handler functions for ktlint. - -call ale#Set('kotlin_ktlint_executable', 'ktlint') -call ale#Set('kotlin_ktlint_rulesets', []) -call ale#Set('kotlin_ktlint_options', '') - -function! ale#handlers#ktlint#GetCommand(buffer) abort - let l:executable = ale#Var(a:buffer, 'kotlin_ktlint_executable') - let l:options = ale#Var(a:buffer, 'kotlin_ktlint_options') - let l:rulesets = ale#handlers#ktlint#GetRulesets(a:buffer) - - return ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) - \ . (empty(l:rulesets) ? '' : ' ' . l:rulesets) - \ . ' --stdin' -endfunction - -function! ale#handlers#ktlint#GetRulesets(buffer) abort - let l:rulesets = map(ale#Var(a:buffer, 'kotlin_ktlint_rulesets'), '''--ruleset '' . v:val') - - return join(l:rulesets, ' ') -endfunction - -function! ale#handlers#ktlint#Handle(buffer, lines) abort - let l:message_pattern = '^\(.*\):\([0-9]\+\):\([0-9]\+\):\s\+\(.*\)' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:message_pattern) - let l:line = l:match[2] + 0 - let l:column = l:match[3] + 0 - let l:text = l:match[4] - - let l:type = l:text =~? 'not a valid kotlin file' ? 'E' : 'W' - - call add(l:output, { - \ 'lnum': l:line, - \ 'col': l:column, - \ 'text': l:text, - \ 'type': l:type - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/languagetool.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/languagetool.vim deleted file mode 100644 index 73974ceb..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/languagetool.vim +++ /dev/null @@ -1,77 +0,0 @@ -" Author: Vincent (wahrwolf [at] wolfpit.net) -" Description: languagetool for markdown files -" -call ale#Set('languagetool_executable', 'languagetool') -call ale#Set('languagetool_options', '--autoDetect') - -function! ale#handlers#languagetool#GetExecutable(buffer) abort - return ale#Var(a:buffer, 'languagetool_executable') -endfunction - -function! ale#handlers#languagetool#GetCommand(buffer) abort - let l:executable = ale#handlers#languagetool#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'languagetool_options') - - return ale#Escape(l:executable) - \ . (empty(l:options) ? '' : ' ' . l:options) . ' %s' -endfunction - -function! ale#handlers#languagetool#HandleOutput(buffer, lines) abort - " Match lines like: - " 1.) Line 5, column 1, Rule ID: - let l:head_pattern = '^\v.+.\) Line (\d+), column (\d+), Rule ID. (.+)$' - let l:head_matches = ale#util#GetMatches(a:lines, l:head_pattern) - - " Match lines like: - " Message: Did you forget a comma after a conjunctive/linking adverb? - let l:message_pattern = '^\vMessage. (.+)$' - let l:message_matches = ale#util#GetMatches(a:lines, l:message_pattern) - - " Match lines like: - " ^^^^^ " - let l:markers_pattern = '^\v *(\^+) *$' - let l:markers_matches = ale#util#GetMatches(a:lines, l:markers_pattern) - - let l:output = [] - - - " Okay tbh I was to lazy to figure out a smarter solution here - " We just check that the arrays are same sized and merge everything - " together - let l:i = 0 - - while l:i < len(l:head_matches) - \ && ( - \ (len(l:head_matches) == len(l:markers_matches)) - \ && (len(l:head_matches) == len(l:message_matches)) - \ ) - let l:item = { - \ 'lnum' : str2nr(l:head_matches[l:i][1]), - \ 'col' : str2nr(l:head_matches[l:i][2]), - \ 'end_col' : str2nr(l:head_matches[l:i][2]) + len(l:markers_matches[l:i][1])-1, - \ 'type' : 'W', - \ 'code' : l:head_matches[l:i][3], - \ 'text' : l:message_matches[l:i][1] - \} - call add(l:output, l:item) - let l:i+=1 - endwhile - - return l:output -endfunction - -" Define the languagetool linter for a given filetype. -" TODO: -" - Add language detection settings based on user env (for mothertongue) -" - Add fixer -" - Add config options for rules -function! ale#handlers#languagetool#DefineLinter(filetype) abort - call ale#linter#Define(a:filetype, { - \ 'name': 'languagetool', - \ 'executable': function('ale#handlers#languagetool#GetExecutable'), - \ 'command': function('ale#handlers#languagetool#GetCommand'), - \ 'output_stream': 'stdout', - \ 'callback': 'ale#handlers#languagetool#HandleOutput', - \ 'lint_file': 1, - \}) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/markdownlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/markdownlint.vim deleted file mode 100644 index 6c273bd0..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/markdownlint.vim +++ /dev/null @@ -1,24 +0,0 @@ -" Author: Ty-Lucas Kelley -" Description: Adds support for markdownlint - -function! ale#handlers#markdownlint#Handle(buffer, lines) abort - let l:pattern=': \?\(\d\+\)\(:\(\d\+\)\?\)\? \(MD\d\{3}/[A-Za-z0-9-/]\+\) \(.*\)$' - let l:output=[] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:result = ({ - \ 'lnum': l:match[1] + 0, - \ 'code': l:match[4], - \ 'text': l:match[5], - \ 'type': 'W', - \}) - - if len(l:match[3]) > 0 - let l:result.col = (l:match[3] + 0) - endif - - call add(l:output, l:result) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/naga.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/naga.vim deleted file mode 100644 index 6480aba6..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/naga.vim +++ /dev/null @@ -1,30 +0,0 @@ -" Author: rhysd -" Description: Handle errors for naga-cli. - -function! ale#handlers#naga#Handle(buffer, lines) abort - let l:errors = [] - let l:current_error = v:null - - for l:line in a:lines - if l:line =~# '^error: ' - let l:text = l:line[7:] - let l:current_error = { 'text': l:text, 'type': 'E' } - continue - endif - - if l:current_error isnot v:null - let l:matches = matchlist(l:line, '\v:(\d+):(\d+)$') - - if !empty(l:matches) - let l:current_error.lnum = str2nr(l:matches[1]) - let l:current_error.col = str2nr(l:matches[2]) - call add(l:errors, l:current_error) - let l:current_error = v:null - continue - endif - endif - endfor - - return l:errors -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ocamllsp.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ocamllsp.vim deleted file mode 100644 index 2738ea2b..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ocamllsp.vim +++ /dev/null @@ -1,30 +0,0 @@ -" Author: Risto Stevcev -" Description: Handlers for the official OCaml language server - -let s:language_id_of_filetype = { -\ 'menhir': 'ocaml.menhir', -\ 'ocaml': 'ocaml', -\ 'ocamlinterface': 'ocaml.interface', -\ 'ocamllex': 'ocaml.lex' -\} - -function! ale#handlers#ocamllsp#GetExecutable(buffer) abort - return 'ocamllsp' -endfunction - -function! ale#handlers#ocamllsp#GetCommand(buffer) abort - let l:executable = ale#handlers#ocamllsp#GetExecutable(a:buffer) - let l:ocaml_ocamllsp_use_opam = ale#Var(a:buffer, 'ocaml_ocamllsp_use_opam') - - return l:ocaml_ocamllsp_use_opam ? 'opam config exec -- ' . l:executable : l:executable -endfunction - -function! ale#handlers#ocamllsp#GetLanguage(buffer) abort - return s:language_id_of_filetype[getbufvar(a:buffer, '&filetype')] -endfunction - -function! ale#handlers#ocamllsp#GetProjectRoot(buffer) abort - let l:dune_project_file = ale#path#FindNearestFile(a:buffer, 'dune-project') - - return !empty(l:dune_project_file) ? fnamemodify(l:dune_project_file, ':h') : '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ols.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ols.vim deleted file mode 100644 index c292c6d9..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ols.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Michael Jungo -" Description: Handlers for the OCaml language server - -function! ale#handlers#ols#GetExecutable(buffer) abort - let l:ols_setting = ale#handlers#ols#GetLanguage(a:buffer) . '_ols' - - return ale#path#FindExecutable(a:buffer, l:ols_setting, [ - \ 'node_modules/.bin/ocaml-language-server', - \]) -endfunction - -function! ale#handlers#ols#GetCommand(buffer) abort - let l:executable = ale#handlers#ols#GetExecutable(a:buffer) - - return ale#node#Executable(a:buffer, l:executable) . ' --stdio' -endfunction - -function! ale#handlers#ols#GetLanguage(buffer) abort - return getbufvar(a:buffer, '&filetype') -endfunction - -function! ale#handlers#ols#GetProjectRoot(buffer) abort - let l:merlin_file = ale#path#FindNearestFile(a:buffer, '.merlin') - - return !empty(l:merlin_file) ? fnamemodify(l:merlin_file, ':h') : '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/openscad.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/openscad.vim deleted file mode 100644 index 33eee31c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/openscad.vim +++ /dev/null @@ -1,73 +0,0 @@ -scriptencoding utf-8LE -" Description: This file defines a handler function for linting OpenSCAD files -" with SCA2D - -function! ale#handlers#openscad#SCA2D_callback(buffer, lines) abort - " Example output:: - " foo.scad:3:1: W2001: Variable `unused` overwritten within scope. - " foo.scad:1:1: F0001: Cannot read file due to syntax error: - " - No terminal matches '}' in the current parser context, at line 1 col 36 - let l:filename_re = '^\([^:]*\):' - let l:linenum_re = '\([0-9]*\):' - let l:colnum_re = '\([0-9]*\):' - let l:err_id = '\([IWEFU][0-9]\+\):' - let l:err_msg = '\(.*\)' - let l:pattern = filename_re . - \ linenum_re . - \ colnum_re . - \ ' ' . - \ err_id . - \ ' ' . - \ err_msg - - let l:result = [] - let l:idx = 0 - - for l:line in a:lines - let l:matches = matchlist(line, pattern) - - if len(matches) > 0 - " option: Info, Warning, Error, Fatal, Unknown - if index(['I', 'W'], matches[4][0]) >= 0 - let l:type = 'W' - else - let l:type = 'E' - endif - - let l:lnum = matches[2] - let l:col = matches[3] - let l:text = matches[5] - - " Better locations for some syntax errors - if matches[4][0] is# 'F' - let l:syntax_error_re = '^\(.*\), at line \([0-9]\+\) col \([0-9]\+\)$' - let l:next_line = a:lines[idx+1] - let l:syn_err_matches = matchlist(l:next_line, l:syntax_error_re) - - if len(syn_err_matches) > 0 - let l:text = l:text . l:syn_err_matches[1] - let l:lnum = l:syn_err_matches[2] - let l:col = l:syn_err_matches[3] - else - let l:text = l:next_line - endif - endif - - let l:element = { - \ 'lnum': str2nr(l:lnum), - \ 'col': str2nr(l:col), - \ 'text': l:text, - \ 'detail': l:matches[4] . ': ' . l:text, - \ 'filename': fnamemodify(matches[1], ':p'), - \ 'type': l:type - \ } - - call add(l:result, l:element) - endif - - let l:idx += 1 - endfor - - return result - -endfun diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/pony.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/pony.vim deleted file mode 100644 index ea84ac4b..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/pony.vim +++ /dev/null @@ -1,33 +0,0 @@ -scriptencoding utf-8 -" Description: This file defines a handler function which ought to work for -" any program which outputs errors in the format that ponyc uses. - -function! s:RemoveUnicodeQuotes(text) abort - let l:text = a:text - let l:text = substitute(l:text, '[`´‘’]', '''', 'g') - let l:text = substitute(l:text, '\v\\u2018([^\\]+)\\u2019', '''\1''', 'g') - let l:text = substitute(l:text, '[“”]', '"', 'g') - - return l:text -endfunction - -function! ale#handlers#pony#HandlePonycFormat(buffer, lines) abort - " Look for lines like the following. - " /home/code/pony/classes/Wombat.pony:22:30: can't lookup private fields from outside the type - let l:pattern = '\v^([^:]+):(\d+):(\d+)?:? (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'filename': l:match[1], - \ 'lnum': str2nr(l:match[2]), - \ 'col': str2nr(l:match[3]), - \ 'type': 'E', - \ 'text': s:RemoveUnicodeQuotes(l:match[4]), - \} - - call add(l:output, l:item) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/redpen.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/redpen.vim deleted file mode 100644 index 195057ca..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/redpen.vim +++ /dev/null @@ -1,65 +0,0 @@ -" Author: rhysd https://rhysd.github.io -" Description: Redpen, a proofreading tool (http://redpen.cc) - -function! ale#handlers#redpen#HandleRedpenOutput(buffer, lines) abort - " Only one file was passed to redpen. So response array has only one - " element. - let l:res = get(ale#util#FuzzyJSONDecode(a:lines, []), 0, {}) - let l:output = [] - - for l:err in get(l:res, 'errors', []) - let l:item = { - \ 'text': l:err.message, - \ 'type': 'W', - \ 'code': l:err.validator, - \} - - if has_key(l:err, 'startPosition') - let l:item.lnum = l:err.startPosition.lineNum - let l:item.col = l:err.startPosition.offset + 1 - - if has_key(l:err, 'endPosition') - let l:item.end_lnum = l:err.endPosition.lineNum - let l:item.end_col = l:err.endPosition.offset - endif - else - " Fallback to a whole sentence region when a region is not - " specified by the error. - let l:item.lnum = l:err.lineNum - let l:item.col = l:err.sentenceStartColumnNum + 1 - endif - - " Adjust column number for multibyte string - let l:line = getline(l:item.lnum) - - if l:line is# '' - let l:line = l:err.sentence - endif - - let l:line = split(l:line, '\zs') - - if l:item.col >= 2 - let l:col = 0 - - for l:strlen in map(l:line[0:(l:item.col - 2)], 'strlen(v:val)') - let l:col = l:col + l:strlen - endfor - - let l:item.col = l:col + 1 - endif - - if has_key(l:item, 'end_col') - let l:col = 0 - - for l:strlen in map(l:line[0:(l:item.end_col - 1)], 'strlen(v:val)') - let l:col = l:col + l:strlen - endfor - - let l:item.end_col = l:col - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ruby.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ruby.vim deleted file mode 100644 index 7a1c5765..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/ruby.vim +++ /dev/null @@ -1,38 +0,0 @@ -" Author: Brandon Roehl - https://github.com/BrandonRoehl, Matthias Guenther https://wikimatze.de -" -" Description: This file implements handlers specific to Ruby. - -function! s:HandleSyntaxError(buffer, lines) abort - " Matches patterns line the following: - " - " test.rb:3: warning: parentheses after method name is interpreted as an argument list, not a decomposed argument - " test.rb:8: syntax error, unexpected keyword_end, expecting end-of-input - let l:pattern = '\v^.+:(\d+): (warning: )?(.+)$' - let l:column = '\v^(\s+)\^$' - let l:output = [] - - for l:line in a:lines - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) == 0 - let l:match = matchlist(l:line, l:column) - - if len(l:match) != 0 - let l:output[len(l:output) - 1]['col'] = len(l:match[1]) - endif - else - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': 0, - \ 'text': l:match[2] . l:match[3], - \ 'type': empty(l:match[2]) ? 'E' : 'W', - \}) - endif - endfor - - return l:output -endfunction - -function! ale#handlers#ruby#HandleSyntaxErrors(buffer, lines) abort - return s:HandleSyntaxError(a:buffer, a:lines) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/rust.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/rust.vim deleted file mode 100644 index a7fac464..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/rust.vim +++ /dev/null @@ -1,78 +0,0 @@ -" Author: Daniel Schemala , -" w0rp -" -" Description: This file implements handlers specific to Rust. - -if !exists('g:ale_rust_ignore_error_codes') - let g:ale_rust_ignore_error_codes = [] -endif - -if !exists('g:ale_rust_ignore_secondary_spans') - let g:ale_rust_ignore_secondary_spans = 0 -endif - -function! s:FindSpan(buffer, span) abort - if ale#path#IsBufferPath(a:buffer, a:span.file_name) || a:span.file_name is# '' - return a:span - endif - - " Search inside the expansion of an error, as the problem for this buffer - " could lie inside a nested object. - if !empty(get(a:span, 'expansion', v:null)) - return s:FindSpan(a:buffer, a:span.expansion.span) - endif - - return {} -endfunction - -function! ale#handlers#rust#HandleRustErrors(buffer, lines) abort - let l:output = [] - - for l:errorline in a:lines - " ignore everything that is not JSON - if l:errorline !~# '^{' - continue - endif - - let l:error = json_decode(l:errorline) - - if has_key(l:error, 'message') && type(l:error.message) is v:t_dict - let l:error = l:error.message - endif - - if !has_key(l:error, 'code') - continue - endif - - if !empty(l:error.code) && index(g:ale_rust_ignore_error_codes, l:error.code.code) > -1 - continue - endif - - for l:root_span in l:error.spans - let l:span = s:FindSpan(a:buffer, l:root_span) - - if ale#Var(a:buffer, 'rust_ignore_secondary_spans') && !get(l:span, 'is_primary', 1) - continue - endif - - if !empty(l:span) - let l:output_line = { - \ 'lnum': l:span.line_start, - \ 'end_lnum': l:span.line_end, - \ 'col': l:span.column_start, - \ 'end_col': l:span.column_end-1, - \ 'text': empty(l:span.label) ? l:error.message : printf('%s: %s', l:error.message, l:span.label), - \ 'type': toupper(l:error.level[0]), - \} - - if has_key(l:error, 'rendered') && !empty(l:error.rendered) - let l:output_line.detail = l:error.rendered - endif - - call add(l:output, l:output_line) - endif - endfor - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/scala.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/scala.vim deleted file mode 100644 index 3fe7a12e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/scala.vim +++ /dev/null @@ -1,37 +0,0 @@ -" Author: Nils Leuzinger - https://github.com/PawkyPenguin -" Description: Scala linting handlers for scalac-like compilers. - -function! ale#handlers#scala#HandleScalacLintFormat(buffer, lines) abort - " Matches patterns line the following: - " - " /var/folders/5q/20rgxx3x1s34g3m14n5bq0x80000gn/T/vv6pSsy/0:26: error: expected class or object definition - let l:pattern = '^.\+:\(\d\+\): \(\w\+\): \(.\+\)' - let l:output = [] - let l:ln = 0 - - for l:line in a:lines - let l:ln = l:ln + 1 - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) == 0 - continue - endif - - let l:text = l:match[3] - let l:type = l:match[2] is# 'error' ? 'E' : 'W' - let l:col = 0 - - if l:ln + 1 < len(a:lines) - let l:col = stridx(a:lines[l:ln + 1], '^') - endif - - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:col + 1, - \ 'text': l:text, - \ 'type': l:type, - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/sh.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/sh.vim deleted file mode 100644 index 6ed9fea3..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/sh.vim +++ /dev/null @@ -1,37 +0,0 @@ -" Author: w0rp - -function! ale#handlers#sh#GetShellType(buffer) abort - let l:shebang = get(getbufline(a:buffer, 1), 0, '') - - let l:command = '' - - " Take the shell executable from the shebang, if we can. - if l:shebang[:1] is# '#!' - " Remove options like -e, etc. - let l:command = substitute(l:shebang, ' --\?[a-zA-Z0-9]\+', '', 'g') - endif - - " With no shebang line, attempt to use Vim's buffer-local variables. - if l:command is# '' - if getbufvar(a:buffer, 'is_bash', 0) - let l:command = 'bash' - elseif getbufvar(a:buffer, 'is_sh', 0) - let l:command = 'sh' - elseif getbufvar(a:buffer, 'is_kornshell', 0) - let l:command = 'ksh' - endif - endif - - " If we couldn't find a shebang, try the filetype - if l:command is# '' - let l:command = &filetype - endif - - for l:possible_shell in ['bash', 'dash', 'ash', 'tcsh', 'csh', 'zsh', 'ksh', 'sh'] - if l:command =~# l:possible_shell . '\s*$' - return l:possible_shell - endif - endfor - - return '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/shellcheck.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/shellcheck.vim deleted file mode 100644 index 17de2912..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/shellcheck.vim +++ /dev/null @@ -1,123 +0,0 @@ -" Author: w0rp -" Description: This file adds support for using the shellcheck linter - -" Shellcheck supports shell directives to define the shell dialect for scripts -" that do not have a shebang for some reason. -" https://github.com/koalaman/shellcheck/wiki/Directive#shell -function! ale#handlers#shellcheck#GetShellcheckDialectDirective(buffer) abort - let l:linenr = 0 - let l:pattern = '\s\{-}#\s\{-}shellcheck\s\{-}shell=\(.*\)' - let l:possible_shell = ['bash', 'dash', 'ash', 'tcsh', 'csh', 'zsh', 'ksh', 'sh'] - - while l:linenr < min([50, line('$')]) - let l:linenr += 1 - let l:match = matchlist(getline(l:linenr), l:pattern) - - if len(l:match) > 1 && index(l:possible_shell, l:match[1]) >= 0 - return l:match[1] - endif - endwhile - - return '' -endfunction - -function! ale#handlers#shellcheck#GetDialectArgument(buffer) abort - let l:shell_type = ale#handlers#shellcheck#GetShellcheckDialectDirective(a:buffer) - - if empty(l:shell_type) - let l:shell_type = ale#handlers#sh#GetShellType(a:buffer) - endif - - if !empty(l:shell_type) - " Use the dash dialect for /bin/ash, etc. - if l:shell_type is# 'ash' - return 'dash' - endif - - return l:shell_type - endif - - return '' -endfunction - -function! ale#handlers#shellcheck#GetCwd(buffer) abort - return ale#Var(a:buffer, 'sh_shellcheck_change_directory') ? '%s:h' : '' -endfunction - -function! ale#handlers#shellcheck#GetCommand(buffer, version) abort - let l:options = ale#Var(a:buffer, 'sh_shellcheck_options') - let l:exclude_option = ale#Var(a:buffer, 'sh_shellcheck_exclusions') - let l:dialect = ale#Var(a:buffer, 'sh_shellcheck_dialect') - let l:external_option = ale#semver#GTE(a:version, [0, 4, 0]) ? ' -x' : '' - - if l:dialect is# 'auto' - let l:dialect = ale#handlers#shellcheck#GetDialectArgument(a:buffer) - endif - - return '%e' - \ . (!empty(l:dialect) ? ' -s ' . l:dialect : '') - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . (!empty(l:exclude_option) ? ' -e ' . l:exclude_option : '') - \ . l:external_option - \ . ' -f gcc -' -endfunction - -function! ale#handlers#shellcheck#Handle(buffer, lines) abort - let l:pattern = '\v^([a-zA-Z]?:?[^:]+):(\d+):(\d+)?:? ([^:]+): (.+) \[([^\]]+)\]$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - if l:match[4] is# 'error' - let l:type = 'E' - elseif l:match[4] is# 'note' - let l:type = 'I' - else - let l:type = 'W' - endif - - let l:item = { - \ 'lnum': str2nr(l:match[2]), - \ 'type': l:type, - \ 'text': l:match[5], - \ 'code': l:match[6], - \} - - if !empty(l:match[3]) - let l:item.col = str2nr(l:match[3]) - endif - - " If the filename is something like , or -, then - " this is an error for the file we checked. - if l:match[1] isnot# '-' && l:match[1][0] isnot# '<' - let l:item['filename'] = l:match[1] - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - -function! ale#handlers#shellcheck#DefineLinter(filetype) abort - " This global variable can be set with a string of comma-separated error - " codes to exclude from shellcheck. For example: - " let g:ale_sh_shellcheck_exclusions = 'SC2002,SC2004' - call ale#Set('sh_shellcheck_exclusions', get(g:, 'ale_linters_sh_shellcheck_exclusions', '')) - call ale#Set('sh_shellcheck_executable', 'shellcheck') - call ale#Set('sh_shellcheck_dialect', 'auto') - call ale#Set('sh_shellcheck_options', '') - call ale#Set('sh_shellcheck_change_directory', 1) - - call ale#linter#Define(a:filetype, { - \ 'name': 'shellcheck', - \ 'executable': {buffer -> ale#Var(buffer, 'sh_shellcheck_executable')}, - \ 'cwd': function('ale#handlers#shellcheck#GetCwd'), - \ 'command': {buffer -> ale#semver#RunWithVersionCheck( - \ buffer, - \ ale#Var(buffer, 'sh_shellcheck_executable'), - \ '%e --version', - \ function('ale#handlers#shellcheck#GetCommand'), - \ )}, - \ 'callback': 'ale#handlers#shellcheck#Handle', - \}) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/sml.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/sml.vim deleted file mode 100644 index 403b25fa..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/sml.vim +++ /dev/null @@ -1,102 +0,0 @@ -" Author: Jake Zimmerman -" Description: Shared functions for SML linters - -" The glob to use for finding the .cm file. -" -" See :help ale-sml-smlnj for more information. -call ale#Set('sml_smlnj_cm_file', '*.cm') - -function! ale#handlers#sml#GetCmFile(buffer) abort - let l:pattern = ale#Var(a:buffer, 'sml_smlnj_cm_file') - let l:as_list = 1 - - let l:cmfile = '' - - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - let l:results = glob(l:path . '/' . l:pattern, 0, l:as_list) - - if len(l:results) > 0 - " If there is more than one CM file, we take the first one - " See :help ale-sml-smlnj for how to configure this. - let l:cmfile = l:results[0] - endif - endfor - - return l:cmfile -endfunction - -" Only one of smlnj or smlnj-cm can be enabled at a time. -function! s:GetExecutable(buffer, source) abort - if ale#handlers#sml#GetCmFile(a:buffer) is# '' - " No CM file found; only allow single-file mode to be enabled - if a:source is# 'smlnj-file' - return 'sml' - elseif a:source is# 'smlnj-cm' - return '' - endif - else - " Found a CM file; only allow cm-file mode to be enabled - if a:source is# 'smlnj-file' - return '' - elseif a:source is# 'smlnj-cm' - return 'sml' - endif - endif -endfunction - -function! ale#handlers#sml#GetExecutableSmlnjCm(buffer) abort - return s:GetExecutable(a:buffer, 'smlnj-cm') -endfunction - -function! ale#handlers#sml#GetExecutableSmlnjFile(buffer) abort - return s:GetExecutable(a:buffer, 'smlnj-file') -endfunction - -function! ale#handlers#sml#Handle(buffer, lines) abort - " Try to match basic sml errors - " TODO(jez) We can get better errorfmt strings from Syntastic - let l:out = [] - let l:pattern = '^\(.*\)\:\([0-9\.]\+\)\ \(\w\+\)\:\ \(.*\)' - let l:pattern2 = '^\(.*\)\:\([0-9]\+\)\.\?\([0-9]\+\).* \(\(Warning\|Error\): .*\)' - - for l:line in a:lines - let l:match2 = matchlist(l:line, l:pattern2) - - if len(l:match2) != 0 - if l:match2[1] =~# 'stdIn$' - let l:loc = {'bufnr': a:buffer} - else - let l:loc = {'filename': l:match2[1]} - endif - - call add(l:out, extend(l:loc, { - \ 'lnum': l:match2[2] + 0, - \ 'col' : l:match2[3] - 1, - \ 'text': l:match2[4], - \ 'type': l:match2[4] =~# '^Warning' ? 'W' : 'E', - \})) - continue - endif - - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) != 0 - if l:match[1] =~# 'stdIn$' - let l:loc = {'bufnr': a:buffer} - else - let l:loc = {'filename': l:match[1]} - endif - - call add(l:out, extend(l:loc, { - \ 'lnum': l:match[2] + 0, - \ 'text': l:match[3] . ': ' . l:match[4], - \ 'type': l:match[3] is# 'error' ? 'E' : 'W', - \})) - continue - endif - endfor - - return l:out -endfunction - -" vim:ts=4:sts=4:sw=4 diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/solhint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/solhint.vim deleted file mode 100644 index 611aa7bd..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/solhint.vim +++ /dev/null @@ -1,98 +0,0 @@ -" Author: Henrique Barcelos <@hbarcelos> -" Description: Functions for working with local solhint for checking *.sol files. - -let s:executables = [ -\ 'node_modules/.bin/solhint', -\ 'node_modules/solhint/solhint.js', -\ 'solhint', -\] - -let s:sep = has('win32') ? '\' : '/' - -call ale#Set('solidity_solhint_options', '') -call ale#Set('solidity_solhint_executable', 'solhint') -call ale#Set('solidity_solhint_use_global', get(g:, 'ale_use_global_executables', 0)) - -function! ale#handlers#solhint#Handle(buffer, lines) abort - " Matches patterns like the following: - " /path/to/file/file.sol: line 1, col 10, Error - 'addOne' is defined but never used. (no-unused-vars) - let l:output = [] - - let l:lint_pattern = '\v^[^:]+: line (\d+), col (\d+), (Error|Warning) - (.*) \((.*)\)$' - - for l:match in ale#util#GetMatches(a:lines, l:lint_pattern) - let l:isError = l:match[3] is? 'error' - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[4], - \ 'code': l:match[5], - \ 'type': l:isError ? 'E' : 'W', - \}) - endfor - - let l:syntax_pattern = '\v^[^:]+: line (\d+), col (\d+), (Error|Warning) - (Parse error): (.*)$' - - for l:match in ale#util#GetMatches(a:lines, l:syntax_pattern) - let l:isError = l:match[3] is? 'error' - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[5], - \ 'code': l:match[4], - \ 'type': l:isError ? 'E' : 'W', - \}) - endfor - - return l:output -endfunction - -function! ale#handlers#solhint#FindConfig(buffer) abort - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - for l:basename in [ - \ '.solhintrc.js', - \ '.solhintrc.json', - \ '.solhintrc', - \] - let l:config = ale#path#Simplify(join([l:path, l:basename], s:sep)) - - if filereadable(l:config) - return l:config - endif - endfor - endfor - - return ale#path#FindNearestFile(a:buffer, 'package.json') -endfunction - -function! ale#handlers#solhint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'solidity_solhint', s:executables) -endfunction - -" Given a buffer, return an appropriate working directory for solhint. -function! ale#handlers#solhint#GetCwd(buffer) abort - " If solhint is installed in a directory which contains the buffer, assume - " it is the solhint project root. Otherwise, use nearest node_modules. - " Note: If node_modules not present yet, can't load local deps anyway. - let l:executable = ale#path#FindNearestExecutable(a:buffer, s:executables) - - if !empty(l:executable) - let l:nmi = strridx(l:executable, 'node_modules') - let l:project_dir = l:executable[0:l:nmi - 2] - else - let l:modules_dir = ale#path#FindNearestDirectory(a:buffer, 'node_modules') - let l:project_dir = !empty(l:modules_dir) ? fnamemodify(l:modules_dir, ':h:h') : '' - endif - - return !empty(l:project_dir) ? l:project_dir : '' -endfunction - -function! ale#handlers#solhint#GetCommand(buffer) abort - let l:executable = ale#handlers#solhint#GetExecutable(a:buffer) - - let l:options = ale#Var(a:buffer, 'solidity_solhint_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' --formatter compact %s' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/spectral.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/spectral.vim deleted file mode 100644 index 1eb4a5de..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/spectral.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Author: t2h5 -" Description: Integration of Stoplight Spectral CLI with ALE. - -function! ale#handlers#spectral#HandleSpectralOutput(buffer, lines) abort - " Matches patterns like the following: - " openapi.yml:1:1 error oas3-schema "Object should have required property `info`." - " openapi.yml:1:1 warning oas3-api-servers "OpenAPI `servers` must be present and non-empty array." - let l:pattern = '\v^.*:(\d+):(\d+) (error|warning) (.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:obj = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[3] is# 'error' ? 'E' : 'W', - \ 'text': l:match[4], - \} - - let l:code_match = matchlist(l:obj.text, '\v^(.+) "(.+)"$') - - if !empty(l:code_match) - let l:obj.code = l:code_match[1] - let l:obj.text = l:code_match[2] - endif - - call add(l:output, l:obj) - endfor - - return l:output -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/statix.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/statix.vim deleted file mode 100644 index eeef4107..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/statix.vim +++ /dev/null @@ -1,24 +0,0 @@ -scriptencoding utf-8 -" Author: David Houston -" Description: This file defines a handler function for statix's errorformat -" output. - -function! ale#handlers#statix#Handle(buffer, lines) abort - " Look for lines like the following. - " - " flake.nix>46:13:W:3:This assignment is better written with `inherit` - let l:pattern = '\v^.*\>(\d+):(\d+):([A-Z]):(\d+):(.*)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'type': l:match[3], - \ 'code': l:match[4], - \ 'text': l:match[5], - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/textlint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/textlint.vim deleted file mode 100644 index 7a648617..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/textlint.vim +++ /dev/null @@ -1,39 +0,0 @@ -" Author: tokida https://rouger.info, Yasuhiro Kiyota -" Description: textlint, a proofreading tool (https://textlint.github.io/) - -call ale#Set('textlint_executable', 'textlint') -call ale#Set('textlint_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('textlint_options', '') - -function! ale#handlers#textlint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'textlint', [ - \ 'node_modules/.bin/textlint', - \ 'node_modules/textlint/bin/textlint.js', - \]) -endfunction - -function! ale#handlers#textlint#GetCommand(buffer) abort - let l:executable = ale#handlers#textlint#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'textlint_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' -f json --stdin --stdin-filename %s' -endfunction - -function! ale#handlers#textlint#HandleTextlintOutput(buffer, lines) abort - let l:res = get(ale#util#FuzzyJSONDecode(a:lines, []), 0, {'messages': []}) - let l:output = [] - - for l:err in l:res.messages - call add(l:output, { - \ 'text': l:err.message, - \ 'type': 'W', - \ 'code': l:err.ruleId, - \ 'lnum': l:err.line, - \ 'col' : l:err.column - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/tslint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/tslint.vim deleted file mode 100644 index ee091d24..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/tslint.vim +++ /dev/null @@ -1,13 +0,0 @@ -function! ale#handlers#tslint#InitVariables() abort - call ale#Set('typescript_tslint_executable', 'tslint') - call ale#Set('typescript_tslint_config_path', '') - call ale#Set('typescript_tslint_rules_dir', '') - call ale#Set('typescript_tslint_use_global', get(g:, 'ale_use_global_executables', 0)) - call ale#Set('typescript_tslint_ignore_empty_files', 0) -endfunction - -function! ale#handlers#tslint#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'typescript_tslint', [ - \ 'node_modules/.bin/tslint', - \]) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/tsserver.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/tsserver.vim deleted file mode 100644 index f78499ac..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/tsserver.vim +++ /dev/null @@ -1,8 +0,0 @@ -" Author: Derek Sifford -" Description: Handlers for tsserver - -function! ale#handlers#tsserver#GetProjectRoot(buffer) abort - let l:tsconfig_file = ale#path#FindNearestFile(a:buffer, 'tsconfig.json') - - return !empty(l:tsconfig_file) ? fnamemodify(l:tsconfig_file, ':h') : '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/unix.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/unix.vim deleted file mode 100644 index f90fd591..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/unix.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: w0rp -" Description: Error handling for errors in a Unix format. - -function! s:HandleUnixFormat(buffer, lines, type) abort - let l:pattern = '\v^[a-zA-Z]?:?[^:]+:(\d+):?(\d+)?:? ?(.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - call add(l:output, { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[3], - \ 'type': a:type, - \}) - endfor - - return l:output -endfunction - -function! ale#handlers#unix#HandleAsError(buffer, lines) abort - return s:HandleUnixFormat(a:buffer, a:lines, 'E') -endfunction - -function! ale#handlers#unix#HandleAsWarning(buffer, lines) abort - return s:HandleUnixFormat(a:buffer, a:lines, 'W') -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/vale.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/vale.vim deleted file mode 100644 index 2da72fc7..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/vale.vim +++ /dev/null @@ -1,39 +0,0 @@ -" Author: Johannes Wienke -" Description: output handler for the vale JSON format - -function! ale#handlers#vale#GetType(severity) abort - if a:severity is? 'warning' - return 'W' - elseif a:severity is? 'suggestion' - return 'I' - endif - - return 'E' -endfunction - -function! ale#handlers#vale#Handle(buffer, lines) abort - try - let l:errors = json_decode(join(a:lines, '')) - catch - return [] - endtry - - if empty(l:errors) - return [] - endif - - let l:output = [] - - for l:error in l:errors[keys(l:errors)[0]] - call add(l:output, { - \ 'lnum': l:error['Line'], - \ 'col': l:error['Span'][0], - \ 'end_col': l:error['Span'][1], - \ 'code': l:error['Check'], - \ 'text': l:error['Message'], - \ 'type': ale#handlers#vale#GetType(l:error['Severity']), - \}) - endfor - - return l:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/writegood.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/writegood.vim deleted file mode 100644 index b5b91b3f..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/writegood.vim +++ /dev/null @@ -1,72 +0,0 @@ -" Author: Sumner Evans -" Description: Error handling for errors in the write-good format. - -function! ale#handlers#writegood#ResetOptions() abort - call ale#Set('writegood_options', '') - call ale#Set('writegood_executable', 'write-good') - call ale#Set('writegood_use_global', get(g:, 'ale_use_global_executables', 0)) -endfunction - -" Reset the options so the tests can test how they are set. -call ale#handlers#writegood#ResetOptions() - -function! ale#handlers#writegood#GetExecutable(buffer) abort - return ale#path#FindExecutable(a:buffer, 'writegood', [ - \ 'node_modules/.bin/write-good', - \ 'node_modules/write-good/bin/write-good.js', - \]) -endfunction - -function! ale#handlers#writegood#GetCommand(buffer) abort - let l:executable = ale#handlers#writegood#GetExecutable(a:buffer) - let l:options = ale#Var(a:buffer, 'writegood_options') - - return ale#node#Executable(a:buffer, l:executable) - \ . (!empty(l:options) ? ' ' . l:options : '') - \ . ' %t' -endfunction - -function! ale#handlers#writegood#Handle(buffer, lines) abort - " Look for lines like the following. - " - " "it is" is wordy or unneeded on line 20 at column 53 - " "easily" can weaken meaning on line 154 at column 29 - let l:marks_pattern = '\v^ *(\^+) *$' - let l:pattern = '\v^(".*"\s.*)\son\sline\s(\d+)\sat\scolumn\s(\d+)$' - let l:output = [] - let l:last_len = 0 - - for l:match in ale#util#GetMatches(a:lines, [l:marks_pattern, l:pattern]) - if empty(l:match[2]) - let l:last_len = len(l:match[1]) - else - let l:col = l:match[3] + 1 - - " Add the linter error. Note that we need to add 1 to the col because - " write-good reports the column corresponding to the space before the - " offending word or phrase. - call add(l:output, { - \ 'text': l:match[1], - \ 'lnum': l:match[2] + 0, - \ 'col': l:col, - \ 'end_col': l:last_len ? (l:col + l:last_len - 1) : l:col, - \ 'type': 'W', - \}) - - let l:last_len = 0 - endif - endfor - - return l:output -endfunction - -" Define the writegood linter for a given filetype. -function! ale#handlers#writegood#DefineLinter(filetype) abort - call ale#linter#Define(a:filetype, { - \ 'name': 'writegood', - \ 'aliases': ['write-good'], - \ 'executable': function('ale#handlers#writegood#GetExecutable'), - \ 'command': function('ale#handlers#writegood#GetCommand'), - \ 'callback': 'ale#handlers#writegood#Handle', - \}) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/xo.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/xo.vim deleted file mode 100644 index a87c6d8f..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/xo.vim +++ /dev/null @@ -1,44 +0,0 @@ -call ale#Set('javascript_xo_executable', 'xo') -call ale#Set('javascript_xo_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('javascript_xo_options', '') - -call ale#Set('typescript_xo_executable', 'xo') -call ale#Set('typescript_xo_use_global', get(g:, 'ale_use_global_executables', 0)) -call ale#Set('typescript_xo_options', '') - -function! ale#handlers#xo#GetExecutable(buffer) abort - let l:type = ale#handlers#xo#GetType(a:buffer) - - return ale#path#FindExecutable(a:buffer, l:type . '_xo', [ - \ 'node_modules/xo/cli.js', - \ 'node_modules/.bin/xo', - \]) -endfunction - -function! ale#handlers#xo#GetLintCommand(buffer) abort - return ale#Escape(ale#handlers#xo#GetExecutable(a:buffer)) - \ . ale#Pad(ale#handlers#xo#GetOptions(a:buffer)) - \ . ' --reporter json --stdin --stdin-filename %s' -endfunction - -function! ale#handlers#xo#GetOptions(buffer) abort - let l:type = ale#handlers#xo#GetType(a:buffer) - - return ale#Var(a:buffer, l:type . '_xo_options') -endfunction - -" xo uses eslint and the output format is the same -function! ale#handlers#xo#HandleJSON(buffer, lines) abort - return ale#handlers#eslint#HandleJSON(a:buffer, a:lines) -endfunction - -function! ale#handlers#xo#GetType(buffer) abort - let l:filetype = getbufvar(a:buffer, '&filetype') - let l:type = 'javascript' - - if l:filetype =~# 'typescript' - let l:type = 'typescript' - endif - - return l:type -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/yamllint.vim b/dotfiles/.vim/plugged/ale/autoload/ale/handlers/yamllint.vim deleted file mode 100644 index 5e04577d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/handlers/yamllint.vim +++ /dev/null @@ -1,39 +0,0 @@ -function! ale#handlers#yamllint#GetCommand(buffer) abort - return '%e' . ale#Pad(ale#Var(a:buffer, 'yaml_yamllint_options')) - \ . ' -f parsable %t' -endfunction - -function! ale#handlers#yamllint#Handle(buffer, lines) abort - " Matches patterns line the following: - " something.yaml:1:1: [warning] missing document start "---" (document-start) - " something.yml:2:1: [error] syntax error: expected the node content, but found '' - let l:pattern = '\v^.*:(\d+):(\d+): \[(error|warning)\] (.+)$' - let l:output = [] - - for l:match in ale#util#GetMatches(a:lines, l:pattern) - let l:item = { - \ 'lnum': l:match[1] + 0, - \ 'col': l:match[2] + 0, - \ 'text': l:match[4], - \ 'type': l:match[3] is# 'error' ? 'E' : 'W', - \} - - let l:code_match = matchlist(l:item.text, '\v^(.+) \(([^)]+)\)$') - - if !empty(l:code_match) - if l:code_match[2] is# 'trailing-spaces' - \&& !ale#Var(a:buffer, 'warn_about_trailing_whitespace') - " Skip warnings for trailing whitespace if the option is off. - continue - endif - - let l:item.text = l:code_match[1] - let l:item.code = l:code_match[2] - endif - - call add(l:output, l:item) - endfor - - return l:output -endfunction - diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/highlight.vim b/dotfiles/.vim/plugged/ale/autoload/ale/highlight.vim deleted file mode 100644 index c284f5ca..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/highlight.vim +++ /dev/null @@ -1,242 +0,0 @@ -scriptencoding utf8 -" Author: w0rp -" Description: This module implements error/warning highlighting. - -if !hlexists('ALEError') - highlight link ALEError SpellBad -endif - -if !hlexists('ALEStyleError') - highlight link ALEStyleError ALEError -endif - -if !hlexists('ALEWarning') - highlight link ALEWarning SpellCap -endif - -if !hlexists('ALEStyleWarning') - highlight link ALEStyleWarning ALEWarning -endif - -if !hlexists('ALEInfo') - highlight link ALEInfo ALEWarning -endif - -if !hlexists('ALEVirtualTextError') - highlight link ALEVirtualTextError ALEError -endif - -if !hlexists('ALEVirtualTextStyleError') - highlight link ALEVirtualTextStyleError ALEVirtualTextError -endif - -if !hlexists('ALEVirtualTextWarning') - highlight link ALEVirtualTextWarning ALEWarning -endif - -if !hlexists('ALEVirtualTextStyleWarning') - highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning -endif - -if !hlexists('ALEVirtualTextInfo') - highlight link ALEVirtualTextInfo ALEVirtualTextWarning -endif - -" The maximum number of items for the second argument of matchaddpos() -let s:MAX_POS_VALUES = 8 -let s:MAX_COL_SIZE = 1073741824 " pow(2, 30) - -let s:has_nvim_highlight = exists('*nvim_buf_add_highlight') && exists('*nvim_buf_clear_namespace') - -if s:has_nvim_highlight - let s:ns_id = nvim_create_namespace('ale_highlight') -endif - -" Wrappers are necessary to test this functionality by faking the calls in tests. -function! ale#highlight#nvim_buf_add_highlight(buffer, ns_id, hl_group, line, col_start, col_end) abort - " Ignore all errors for adding highlights. - try - call nvim_buf_add_highlight(a:buffer, a:ns_id, a:hl_group, a:line, a:col_start, a:col_end) - catch - endtry -endfunction - -function! ale#highlight#nvim_buf_clear_namespace(buffer, ns_id, line_start, line_end) abort - call nvim_buf_clear_namespace(a:buffer, a:ns_id, a:line_start, a:line_end) -endfunction - -function! ale#highlight#CreatePositions(line, col, end_line, end_col) abort - if a:line >= a:end_line - " For single lines, just return the one position. - return [[[a:line, a:col, a:end_col - a:col + 1]]] - endif - - " Get positions from the first line at the first column, up to a large - " integer for highlighting up to the end of the line, followed by - " the lines in-between, for highlighting entire lines, and - " a highlight for the last line, up to the end column. - let l:all_positions = - \ [[a:line, a:col, s:MAX_COL_SIZE]] - \ + range(a:line + 1, a:end_line - 1) - \ + [[a:end_line, 1, a:end_col]] - - return map( - \ range(0, len(l:all_positions) - 1, s:MAX_POS_VALUES), - \ 'l:all_positions[v:val : v:val + s:MAX_POS_VALUES - 1]', - \) -endfunction - -" Given a loclist for current items to highlight, remove all highlights -" except these which have matching loclist item entries. - -function! ale#highlight#RemoveHighlights() abort - if s:has_nvim_highlight - call ale#highlight#nvim_buf_clear_namespace(bufnr(''), s:ns_id, 0, -1) - else - for l:match in getmatches() - if l:match.group =~? '\v^ALE(Style)?(Error|Warning|Info)(Line)?$' - call matchdelete(l:match.id) - endif - endfor - endif -endfunction - -" Same semantics of matchaddpos but will use nvim_buf_add_highlight if -" available. This involves iterating over the position list, switching from -" 1-based indexing to 0-based indexing, and translating the multiple ways -" that position can be specified for matchaddpos into line + col_start + -" col_end. -function! s:matchaddpos(group, pos_list) abort - if s:has_nvim_highlight - for l:pos in a:pos_list - let l:line = type(l:pos) == v:t_number - \ ? l:pos - 1 - \ : l:pos[0] - 1 - - if type(l:pos) == v:t_number || len(l:pos) == 1 - let l:col_start = 0 - let l:col_end = s:MAX_COL_SIZE - else - let l:col_start = l:pos[1] - 1 - let l:col_end = l:col_start + get(l:pos, 2, 1) - endif - - call ale#highlight#nvim_buf_add_highlight( - \ bufnr(''), - \ s:ns_id, - \ a:group, - \ l:line, - \ l:col_start, - \ l:col_end, - \) - endfor - else - call matchaddpos(a:group, a:pos_list) - endif -endfunction - -function! s:highlight_line(bufnr, lnum, group) abort - call s:matchaddpos(a:group, [a:lnum]) -endfunction - -function! s:highlight_range(bufnr, range, group) abort - " Set all of the positions, which are chunked into Lists which - " are as large as will be accepted by matchaddpos. - call map( - \ ale#highlight#CreatePositions( - \ a:range.lnum, - \ a:range.col, - \ a:range.end_lnum, - \ a:range.end_col - \ ), - \ 's:matchaddpos(a:group, v:val)' - \) -endfunction - -function! ale#highlight#UpdateHighlights() abort - let l:item_list = get(b:, 'ale_enabled', 1) && g:ale_enabled - \ ? get(b:, 'ale_highlight_items', []) - \ : [] - - call ale#highlight#RemoveHighlights() - - for l:item in l:item_list - if l:item.type is# 'W' - if get(l:item, 'sub_type', '') is# 'style' - let l:group = 'ALEStyleWarning' - else - let l:group = 'ALEWarning' - endif - elseif l:item.type is# 'I' - let l:group = 'ALEInfo' - elseif get(l:item, 'sub_type', '') is# 'style' - let l:group = 'ALEStyleError' - else - let l:group = 'ALEError' - endif - - let l:range = { - \ 'lnum': l:item.lnum, - \ 'col': l:item.col, - \ 'end_lnum': get(l:item, 'end_lnum', l:item.lnum), - \ 'end_col': get(l:item, 'end_col', l:item.col) - \} - - call s:highlight_range(l:item.bufnr, l:range, l:group) - endfor - - " If highlights are enabled and signs are not enabled, we should still - " offer line highlights by adding a separate set of highlights. - if !g:ale_set_signs - let l:available_groups = { - \ 'ALEWarningLine': hlexists('ALEWarningLine'), - \ 'ALEInfoLine': hlexists('ALEInfoLine'), - \ 'ALEErrorLine': hlexists('ALEErrorLine'), - \} - - for l:item in l:item_list - if l:item.type is# 'W' - let l:group = 'ALEWarningLine' - elseif l:item.type is# 'I' - let l:group = 'ALEInfoLine' - else - let l:group = 'ALEErrorLine' - endif - - if l:available_groups[l:group] - call s:highlight_line(l:item.bufnr, l:item.lnum, l:group) - endif - endfor - endif -endfunction - -function! ale#highlight#BufferHidden(buffer) abort - " Remove highlights right away when buffers are hidden. - " They will be restored later when buffers are entered. - call ale#highlight#RemoveHighlights() -endfunction - -augroup ALEHighlightBufferGroup - autocmd! - autocmd BufEnter * call ale#highlight#UpdateHighlights() - autocmd BufHidden * call ale#highlight#BufferHidden(expand('')) -augroup END - -function! ale#highlight#SetHighlights(buffer, loclist) abort - let l:new_list = getbufvar(a:buffer, 'ale_enabled', 1) && g:ale_enabled - \ ? filter(copy(a:loclist), 'v:val.bufnr == a:buffer && v:val.col > 0') - \ : [] - - " Set the list in the buffer variable. - call setbufvar(str2nr(a:buffer), 'ale_highlight_items', l:new_list) - - let l:exclude_list = ale#Var(a:buffer, 'exclude_highlights') - - if !empty(l:exclude_list) - call filter(l:new_list, 'empty(ale#util#GetMatches(v:val.text, l:exclude_list))') - endif - - " Update highlights for the current buffer, which may or may not - " be the buffer we just set highlights for. - call ale#highlight#UpdateHighlights() -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/history.vim b/dotfiles/.vim/plugged/ale/autoload/ale/history.vim deleted file mode 100644 index 27ae74c2..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/history.vim +++ /dev/null @@ -1,62 +0,0 @@ -" Author: w0rp -" Description: Tools for managing command history - -" A flag for controlling the maximum size of the command history to store. -let g:ale_max_buffer_history_size = get(g:, 'ale_max_buffer_history_size', 20) - -" Return a shallow copy of the command history for a given buffer number. -function! ale#history#Get(buffer) abort - return copy(getbufvar(a:buffer, 'ale_history', [])) -endfunction - -function! ale#history#Add(buffer, status, job_id, command) abort - if g:ale_max_buffer_history_size <= 0 - " Don't save anything if the history isn't a positive number. - call setbufvar(a:buffer, 'ale_history', []) - - return - endif - - let l:history = getbufvar(a:buffer, 'ale_history', []) - - " Remove the first item if we hit the max history size. - if len(l:history) >= g:ale_max_buffer_history_size - let l:history = l:history[1:] - endif - - call add(l:history, { - \ 'status': a:status, - \ 'job_id': a:job_id, - \ 'command': a:command, - \}) - - call setbufvar(a:buffer, 'ale_history', l:history) -endfunction - -function! s:FindHistoryItem(buffer, job_id) abort - " Search backwards to find a matching job ID. IDs might be recycled, - " so finding the last one should be good enough. - for l:obj in reverse(ale#history#Get(a:buffer)) - if l:obj.job_id == a:job_id - return l:obj - endif - endfor - - return {} -endfunction - -" Set an exit code for a command which finished. -function! ale#history#SetExitCode(buffer, job_id, exit_code) abort - let l:obj = s:FindHistoryItem(a:buffer, a:job_id) - - " If we find a match, then set the code and status. - let l:obj.exit_code = a:exit_code - let l:obj.status = 'finished' -endfunction - -" Set the output for a command which finished. -function! ale#history#RememberOutput(buffer, job_id, output) abort - let l:obj = s:FindHistoryItem(a:buffer, a:job_id) - - let l:obj.output = a:output -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/hover.vim b/dotfiles/.vim/plugged/ale/autoload/ale/hover.vim deleted file mode 100644 index 0954b802..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/hover.vim +++ /dev/null @@ -1,368 +0,0 @@ -" Author: w0rp -" Description: Hover support for LSP linters. - -let s:hover_map = {} - -" Used to get the hover map in tests. -function! ale#hover#GetMap() abort - return deepcopy(s:hover_map) -endfunction - -" Used to set the hover map in tests. -function! ale#hover#SetMap(map) abort - let s:hover_map = a:map -endfunction - -function! ale#hover#ClearLSPData() abort - let s:hover_map = {} -endfunction - -function! ale#hover#HandleTSServerResponse(conn_id, response) abort - if get(a:response, 'command', '') is# 'quickinfo' - \&& has_key(s:hover_map, a:response.request_seq) - let l:options = remove(s:hover_map, a:response.request_seq) - - if get(a:response, 'success', v:false) is v:true - \&& get(a:response, 'body', v:null) isnot v:null - let l:set_balloons = ale#Var(l:options.buffer, 'set_balloons') - - " If we pass the show_documentation flag, we should show the full - " documentation, and always in the preview window. - if get(l:options, 'show_documentation', 0) - let l:documentation = get(a:response.body, 'documentation', '') - - " displayString is not included here, because it can be very - " noisy and run on for many lines for complex types. A less - " verbose alternative may be nice in future. - if !empty(l:documentation) - call ale#preview#Show(split(l:documentation, "\n"), { - \ 'filetype': 'ale-preview.message', - \ 'stay_here': 1, - \}) - endif - elseif get(l:options, 'hover_from_balloonexpr', 0) - \&& exists('*balloon_show') - \&& (l:set_balloons is 1 || l:set_balloons is# 'hover') - call balloon_show(a:response.body.displayString) - elseif get(l:options, 'truncated_echo', 0) - if !empty(a:response.body.displayString) - call ale#cursor#TruncatedEcho(a:response.body.displayString) - endif - elseif g:ale_hover_to_floating_preview || g:ale_floating_preview - call ale#floating_preview#Show(split(a:response.body.displayString, "\n"), { - \ 'filetype': 'ale-preview.message', - \}) - elseif g:ale_hover_to_preview - call ale#preview#Show(split(a:response.body.displayString, "\n"), { - \ 'filetype': 'ale-preview.message', - \ 'stay_here': 1, - \}) - else - call ale#util#ShowMessage(a:response.body.displayString) - endif - endif - endif -endfunction - -" Convert a language name to another one. -" The language name could be an empty string or v:null -function! s:ConvertLanguageName(language) abort - return a:language -endfunction - -function! ale#hover#ParseLSPResult(contents) abort - let l:includes = {} - let l:highlights = [] - let l:lines = [] - let l:list = type(a:contents) is v:t_list ? a:contents : [a:contents] - let l:region_index = 0 - - for l:item in l:list - if !empty(l:lines) - call add(l:lines, '') - endif - - if type(l:item) is v:t_dict && has_key(l:item, 'kind') - if l:item.kind is# 'markdown' - " Handle markdown values as we handle strings below. - let l:item = get(l:item, 'value', '') - elseif l:item.kind is# 'plaintext' - " We shouldn't try to parse plaintext as markdown. - " Pass the lines on and skip parsing them. - call extend(l:lines, split(get(l:item, 'value', ''), "\n")) - - continue - endif - endif - - let l:marked_list = [] - - " If the item is a string, then we should parse it as Markdown text. - if type(l:item) is v:t_string - let l:fence_language = v:null - let l:fence_lines = [] - - for l:line in split(l:item, "\n") - if l:fence_language is v:null - " Look for the start of a code fence. (```python, etc.) - let l:match = matchlist(l:line, '^```\(.*\)$') - - if !empty(l:match) - let l:fence_language = l:match[1] - - if !empty(l:marked_list) - call add(l:fence_lines, '') - endif - else - if !empty(l:marked_list) - \&& l:marked_list[-1][0] isnot v:null - call add(l:marked_list, [v:null, ['']]) - endif - - call add(l:marked_list, [v:null, [l:line]]) - endif - elseif l:line =~# '^```$' - " When we hit the end of a code fence, pass the fenced - " lines on to the next steps below. - call add(l:marked_list, [l:fence_language, l:fence_lines]) - let l:fence_language = v:null - let l:fence_lines = [] - else - " Gather lines inside of a code fence. - call add(l:fence_lines, l:line) - endif - endfor - " If the result from the LSP server is a {language: ..., value: ...} - " Dictionary, then that should be interpreted as if it was: - " - " ```${language} - " ${value} - " ``` - elseif type(l:item) is v:t_dict - \&& has_key(l:item, 'language') - \&& type(l:item.language) is v:t_string - \&& has_key(l:item, 'value') - \&& type(l:item.value) is v:t_string - call add( - \ l:marked_list, - \ [l:item.language, split(l:item.value, "\n")], - \) - endif - - for [l:language, l:marked_lines] in l:marked_list - if l:language is v:null - " NOTE: We could handle other Markdown formatting here. - call map( - \ l:marked_lines, - \ 'substitute(v:val, ''\\_'', ''_'', ''g'')', - \) - else - let l:language = s:ConvertLanguageName(l:language) - - if !empty(l:language) - let l:includes[l:language] = printf( - \ 'syntax/%s.vim', - \ l:language, - \) - - let l:start = len(l:lines) + 1 - let l:end = l:start + len(l:marked_lines) - let l:region_index += 1 - - call add(l:highlights, 'syntax region' - \ . ' ALE_hover_' . l:region_index - \ . ' start=/\%' . l:start . 'l/' - \ . ' end=/\%' . l:end . 'l/' - \ . ' contains=@ALE_hover_' . l:language - \) - endif - endif - - call extend(l:lines, l:marked_lines) - endfor - endfor - - let l:include_commands = [] - - for [l:language, l:lang_path] in sort(items(l:includes)) - call add(l:include_commands, 'unlet! b:current_syntax') - call add( - \ l:include_commands, - \ printf('syntax include @ALE_hover_%s %s', l:language, l:lang_path), - \) - endfor - - return [l:include_commands + l:highlights, l:lines] -endfunction - -function! ale#hover#HandleLSPResponse(conn_id, response) abort - if has_key(a:response, 'id') - \&& has_key(s:hover_map, a:response.id) - let l:options = remove(s:hover_map, a:response.id) - - " If the call did __not__ come from balloonexpr... - if !get(l:options, 'hover_from_balloonexpr', 0) - let l:buffer = bufnr('') - let [l:line, l:column] = getpos('.')[1:2] - let l:end = len(getline(l:line)) - - if l:buffer isnot l:options.buffer - \|| l:line isnot l:options.line - \|| min([l:column, l:end]) isnot min([l:options.column, l:end]) - " ... Cancel display the message if the cursor has moved. - return - endif - endif - - " The result can be a Dictionary item, a List of the same, or null. - let l:result = get(a:response, 'result', v:null) - - if l:result is v:null - return - endif - - let [l:commands, l:lines] = ale#hover#ParseLSPResult(l:result.contents) - - if !empty(l:lines) - let l:set_balloons = ale#Var(l:options.buffer, 'set_balloons') - - if get(l:options, 'hover_from_balloonexpr', 0) - \&& exists('*balloon_show') - \&& (l:set_balloons is 1 || l:set_balloons is# 'hover') - call balloon_show(join(l:lines, "\n")) - elseif get(l:options, 'truncated_echo', 0) - if type(l:lines[0]) is# v:t_list - call ale#cursor#TruncatedEcho(join(l:lines[0], '\n')) - else - call ale#cursor#TruncatedEcho(l:lines[0]) - endif - elseif g:ale_hover_to_floating_preview || g:ale_floating_preview - call ale#floating_preview#Show(l:lines, { - \ 'filetype': 'ale-preview.message', - \ 'commands': l:commands, - \}) - elseif g:ale_hover_to_preview - call ale#preview#Show(l:lines, { - \ 'filetype': 'ale-preview.message', - \ 'stay_here': 1, - \ 'commands': l:commands, - \}) - else - call ale#util#ShowMessage(join(l:lines, "\n"), { - \ 'commands': l:commands, - \}) - endif - endif - endif -endfunction - -function! s:OnReady(line, column, opt, linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - - if !ale#lsp#HasCapability(l:id, 'hover') - return - endif - - let l:buffer = a:lsp_details.buffer - - let l:Callback = a:linter.lsp is# 'tsserver' - \ ? function('ale#hover#HandleTSServerResponse') - \ : function('ale#hover#HandleLSPResponse') - call ale#lsp#RegisterCallback(l:id, l:Callback) - - if a:linter.lsp is# 'tsserver' - let l:column = a:column - - let l:message = ale#lsp#tsserver_message#Quickinfo( - \ l:buffer, - \ a:line, - \ l:column - \) - else - " Send a message saying the buffer has changed first, or the - " hover position probably won't make sense. - call ale#lsp#NotifyForChanges(l:id, l:buffer) - - let l:column = max([ - \ min([a:column, len(getbufline(l:buffer, a:line)[0])]), - \ 1, - \]) - - let l:message = ale#lsp#message#Hover(l:buffer, a:line, l:column) - endif - - let l:request_id = ale#lsp#Send(l:id, l:message) - - let s:hover_map[l:request_id] = { - \ 'buffer': l:buffer, - \ 'line': a:line, - \ 'column': l:column, - \ 'hover_from_balloonexpr': get(a:opt, 'called_from_balloonexpr', 0), - \ 'show_documentation': get(a:opt, 'show_documentation', 0), - \ 'truncated_echo': get(a:opt, 'truncated_echo', 0), - \} -endfunction - -" Obtain Hover information for the specified position -" Pass optional arguments in the dictionary opt. -" Currently, only one key/value is useful: -" - called_from_balloonexpr, this flag marks if we want the result from this -" ale#hover#Show to display in a balloon if possible -" -" Currently, the callbacks displays the info from hover : -" - in the balloon if opt.called_from_balloonexpr and balloon_show is detected -" - as status message otherwise -function! ale#hover#Show(buffer, line, col, opt) abort - let l:show_documentation = get(a:opt, 'show_documentation', 0) - let l:Callback = function('s:OnReady', [a:line, a:col, a:opt]) - - for l:linter in ale#linter#Get(getbufvar(a:buffer, '&filetype')) - " Only tsserver supports documentation requests at the moment. - if !empty(l:linter.lsp) - \&& (!l:show_documentation || l:linter.lsp is# 'tsserver') - call ale#lsp_linter#StartLSP(a:buffer, l:linter, l:Callback) - endif - endfor -endfunction - -let s:last_pos = [0, 0, 0] - -" This function implements the :ALEHover command. -function! ale#hover#ShowAtCursor() abort - let l:buffer = bufnr('') - let l:pos = getpos('.') - - call ale#hover#Show(l:buffer, l:pos[1], l:pos[2], {}) -endfunction - -function! ale#hover#ShowTruncatedMessageAtCursor() abort - let l:buffer = bufnr('') - let l:pos = getpos('.')[0:2] - - if !getbufvar(l:buffer, 'ale_enabled', 1) - return - endif - - if l:pos != s:last_pos - let s:last_pos = l:pos - let [l:info, l:loc] = ale#util#FindItemAtCursor(l:buffer) - - if empty(l:loc) - call ale#hover#Show( - \ l:buffer, - \ l:pos[1], - \ l:pos[2], - \ {'truncated_echo': 1}, - \) - endif - endif -endfunction - -" This function implements the :ALEDocumentation command. -function! ale#hover#ShowDocumentationAtCursor() abort - let l:buffer = bufnr('') - let l:pos = getpos('.') - let l:options = {'show_documentation': 1} - - call ale#hover#Show(l:buffer, l:pos[1], l:pos[2], l:options) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/java.vim b/dotfiles/.vim/plugged/ale/autoload/ale/java.vim deleted file mode 100644 index e641ac6c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/java.vim +++ /dev/null @@ -1,26 +0,0 @@ -" Author: Horacio Sanson https://github.com/hsanson -" Description: Functions for integrating with Java tools - -" Find the nearest dir contining a gradle or pom file and asume it -" the root of a java app. -function! ale#java#FindProjectRoot(buffer) abort - let l:gradle_root = ale#gradle#FindProjectRoot(a:buffer) - - if !empty(l:gradle_root) - return l:gradle_root - endif - - let l:maven_pom_file = ale#path#FindNearestFile(a:buffer, 'pom.xml') - - if !empty(l:maven_pom_file) - return fnamemodify(l:maven_pom_file, ':h') - endif - - let l:ant_root = ale#ant#FindProjectRoot(a:buffer) - - if !empty(l:ant_root) - return l:ant_root - endif - - return '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/job.vim b/dotfiles/.vim/plugged/ale/autoload/ale/job.vim deleted file mode 100644 index 0fc43a8c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/job.vim +++ /dev/null @@ -1,385 +0,0 @@ -" Author: w0rp -" Description: APIs for working with Asynchronous jobs, with an API normalised -" between Vim 8 and NeoVim. -" -" Important functions are described below. They are: -" -" ale#job#Start(command, options) -> job_id -" ale#job#IsRunning(job_id) -> 1 if running, 0 otherwise. -" ale#job#Stop(job_id) - -" A setting for wrapping commands. -let g:ale_command_wrapper = get(g:, 'ale_command_wrapper', '') - -if !has_key(s:, 'job_map') - let s:job_map = {} -endif - -" A map from timer IDs to jobs, for tracking jobs that need to be killed -" with SIGKILL if they don't terminate right away. -if !has_key(s:, 'job_kill_timers') - let s:job_kill_timers = {} -endif - -function! s:KillHandler(timer) abort - let l:job = remove(s:job_kill_timers, a:timer) - call job_stop(l:job, 'kill') -endfunction - -function! s:NeoVimCallback(job, data, event) abort - let l:info = s:job_map[a:job] - - if a:event is# 'stdout' - let l:info.out_cb_line = ale#util#JoinNeovimOutput( - \ a:job, - \ l:info.out_cb_line, - \ a:data, - \ l:info.mode, - \ ale#util#GetFunction(l:info.out_cb), - \) - elseif a:event is# 'stderr' - let l:info.err_cb_line = ale#util#JoinNeovimOutput( - \ a:job, - \ l:info.err_cb_line, - \ a:data, - \ l:info.mode, - \ ale#util#GetFunction(l:info.err_cb), - \) - else - if has_key(l:info, 'out_cb') && !empty(l:info.out_cb_line) - call ale#util#GetFunction(l:info.out_cb)(a:job, l:info.out_cb_line) - endif - - if has_key(l:info, 'err_cb') && !empty(l:info.err_cb_line) - call ale#util#GetFunction(l:info.err_cb)(a:job, l:info.err_cb_line) - endif - - try - call ale#util#GetFunction(l:info.exit_cb)(a:job, a:data) - finally - " Automatically forget about the job after it's done. - if has_key(s:job_map, a:job) - call remove(s:job_map, a:job) - endif - endtry - endif -endfunction - -function! s:VimOutputCallback(channel, data) abort - let l:job = ch_getjob(a:channel) - let l:job_id = ale#job#ParseVim8ProcessID(string(l:job)) - - " Only call the callbacks for jobs which are valid. - if l:job_id > 0 && has_key(s:job_map, l:job_id) - call ale#util#GetFunction(s:job_map[l:job_id].out_cb)(l:job_id, a:data) - endif -endfunction - -function! s:VimErrorCallback(channel, data) abort - let l:job = ch_getjob(a:channel) - let l:job_id = ale#job#ParseVim8ProcessID(string(l:job)) - - " Only call the callbacks for jobs which are valid. - if l:job_id > 0 && has_key(s:job_map, l:job_id) - call ale#util#GetFunction(s:job_map[l:job_id].err_cb)(l:job_id, a:data) - endif -endfunction - -function! s:VimCloseCallback(channel) abort - let l:job = ch_getjob(a:channel) - let l:job_id = ale#job#ParseVim8ProcessID(string(l:job)) - let l:info = get(s:job_map, l:job_id, {}) - - if empty(l:info) - return - endif - - " job_status() can trigger the exit handler. - " The channel can close before the job has exited. - if job_status(l:job) is# 'dead' - try - if !empty(l:info) && has_key(l:info, 'exit_cb') - " We have to remove the callback, so we don't call it twice. - call ale#util#GetFunction(remove(l:info, 'exit_cb'))(l:job_id, get(l:info, 'exit_code', 1)) - endif - finally - " Automatically forget about the job after it's done. - if has_key(s:job_map, l:job_id) - call remove(s:job_map, l:job_id) - endif - endtry - endif -endfunction - -function! s:VimExitCallback(job, exit_code) abort - let l:job_id = ale#job#ParseVim8ProcessID(string(a:job)) - let l:info = get(s:job_map, l:job_id, {}) - - if empty(l:info) - return - endif - - let l:info.exit_code = a:exit_code - - " The program can exit before the data has finished being read. - if ch_status(job_getchannel(a:job)) is# 'closed' - try - if !empty(l:info) && has_key(l:info, 'exit_cb') - " We have to remove the callback, so we don't call it twice. - call ale#util#GetFunction(remove(l:info, 'exit_cb'))(l:job_id, a:exit_code) - endif - finally - " Automatically forget about the job after it's done. - if has_key(s:job_map, l:job_id) - call remove(s:job_map, l:job_id) - endif - endtry - endif -endfunction - -function! ale#job#ParseVim8ProcessID(job_string) abort - return matchstr(a:job_string, '\d\+') + 0 -endfunction - -function! ale#job#ValidateArguments(command, options) abort - if a:options.mode isnot# 'nl' && a:options.mode isnot# 'raw' - throw 'Invalid mode: ' . a:options.mode - endif -endfunction - -function! s:PrepareWrappedCommand(original_wrapper, command) abort - let l:match = matchlist(a:command, '\v^(.*(\&\&|;)) *(.*)$') - let l:prefix = '' - let l:command = a:command - - if !empty(l:match) - let l:prefix = l:match[1] . ' ' - let l:command = l:match[3] - endif - - let l:format = a:original_wrapper - - if l:format =~# '%@' - let l:wrapped = substitute(l:format, '%@', ale#Escape(l:command), '') - else - if l:format !~# '%\*' - let l:format .= ' %*' - endif - - let l:wrapped = substitute(l:format, '%\*', l:command, '') - endif - - return l:prefix . l:wrapped -endfunction - -function! ale#job#PrepareCommand(buffer, command) abort - let l:wrapper = ale#Var(a:buffer, 'command_wrapper') - - " The command will be executed in a subshell. This fixes a number of - " issues, including reading the PATH variables correctly, %PATHEXT% - " expansion on Windows, etc. - " - " NeoVim handles this issue automatically if the command is a String, - " but we'll do this explicitly, so we use the same exact command for both - " versions. - let l:command = !empty(l:wrapper) - \ ? s:PrepareWrappedCommand(l:wrapper, a:command) - \ : a:command - - " If a custom shell is specified, use that. - if exists('b:ale_shell') - let l:ale_shell = b:ale_shell - elseif exists('g:ale_shell') - let l:ale_shell = g:ale_shell - endif - - if exists('l:ale_shell') - let l:shell_arguments = get(b:, 'ale_shell_arguments', get(g:, 'ale_shell_arguments', &shellcmdflag)) - - return split(l:ale_shell) + split(l:shell_arguments) + [l:command] - endif - - if has('win32') - return 'cmd /s/c "' . l:command . '"' - endif - - if &shell =~? 'fish$\|pwsh$' - return ['/bin/sh', '-c', l:command] - endif - - return split(&shell) + split(&shellcmdflag) + [l:command] -endfunction - -" Start a job with options which are agnostic to Vim and NeoVim. -" -" The following options are accepted: -" -" out_cb - A callback for receiving stdin. Arguments: (job_id, data) -" err_cb - A callback for receiving stderr. Arguments: (job_id, data) -" exit_cb - A callback for program exit. Arguments: (job_id, status_code) -" mode - A mode for I/O. Can be 'nl' for split lines or 'raw'. -function! ale#job#Start(command, options) abort - call ale#job#ValidateArguments(a:command, a:options) - - let l:job_info = copy(a:options) - let l:job_options = {} - - if has('nvim') - if has_key(a:options, 'out_cb') - let l:job_options.on_stdout = function('s:NeoVimCallback') - let l:job_info.out_cb_line = '' - endif - - if has_key(a:options, 'err_cb') - let l:job_options.on_stderr = function('s:NeoVimCallback') - let l:job_info.err_cb_line = '' - endif - - if has_key(a:options, 'exit_cb') - let l:job_options.on_exit = function('s:NeoVimCallback') - endif - - let l:job_info.job = jobstart(a:command, l:job_options) - let l:job_id = l:job_info.job - else - let l:job_options = { - \ 'in_mode': l:job_info.mode, - \ 'out_mode': l:job_info.mode, - \ 'err_mode': l:job_info.mode, - \} - - if has_key(a:options, 'out_cb') - let l:job_options.out_cb = function('s:VimOutputCallback') - else - " prevent buffering of output and excessive polling in case close_cb is set - let l:job_options.out_cb = {->0} - endif - - if has_key(a:options, 'err_cb') - let l:job_options.err_cb = function('s:VimErrorCallback') - else - " prevent buffering of output and excessive polling in case close_cb is set - let l:job_options.err_cb = {->0} - endif - - if has_key(a:options, 'exit_cb') - " Set a close callback to which simply calls job_status() - " when the channel is closed, which can trigger the exit callback - " earlier on. - let l:job_options.close_cb = function('s:VimCloseCallback') - let l:job_options.exit_cb = function('s:VimExitCallback') - endif - - " Use non-blocking writes for Vim versions that support the option. - if has('patch-8.1.350') - let l:job_options.noblock = 1 - endif - - " Vim 8 will read the stdin from the file's buffer. - let l:job_info.job = job_start(a:command, l:job_options) - let l:job_id = ale#job#ParseVim8ProcessID(string(l:job_info.job)) - endif - - if l:job_id > 0 - " Store the job in the map for later only if we can get the ID. - let s:job_map[l:job_id] = l:job_info - endif - - return l:job_id -endfunction - -" Force running commands in a Windows CMD command line. -" This means the same command syntax works everywhere. -function! ale#job#StartWithCmd(command, options) abort - let l:shell = &l:shell - let l:shellcmdflag = &l:shellcmdflag - let &l:shell = 'cmd' - let &l:shellcmdflag = '/c' - - try - let l:job_id = ale#job#Start(a:command, a:options) - finally - let &l:shell = l:shell - let &l:shellcmdflag = l:shellcmdflag - endtry - - return l:job_id -endfunction - -" Send raw data to the job. -function! ale#job#SendRaw(job_id, string) abort - if has('nvim') - call jobsend(a:job_id, a:string) - else - let l:job = s:job_map[a:job_id].job - - if ch_status(l:job) is# 'open' - call ch_sendraw(job_getchannel(l:job), a:string) - endif - endif -endfunction - -" Given a job ID, return 1 if the job is currently running. -" Invalid job IDs will be ignored. -function! ale#job#IsRunning(job_id) abort - if has('nvim') - try - " In NeoVim, if the job isn't running, jobpid() will throw. - call jobpid(a:job_id) - - return 1 - catch - endtry - elseif has_key(s:job_map, a:job_id) - let l:job = s:job_map[a:job_id].job - - return job_status(l:job) is# 'run' - endif - - return 0 -endfunction - -function! ale#job#HasOpenChannel(job_id) abort - if ale#job#IsRunning(a:job_id) - if has('nvim') - " TODO: Implement a check for NeoVim. - return 1 - endif - - " Check if the Job's channel can be written to. - return ch_status(s:job_map[a:job_id].job) is# 'open' - endif - - return 0 -endfunction - -" Given a Job ID, stop that job. -" Invalid job IDs will be ignored. -function! ale#job#Stop(job_id) abort - if !has_key(s:job_map, a:job_id) - return - endif - - if has('nvim') - " FIXME: NeoVim kills jobs on a timer, but will not kill any processes - " which are child processes on Unix. Some work needs to be done to - " kill child processes to stop long-running processes like pylint. - silent! call jobstop(a:job_id) - else - let l:job = s:job_map[a:job_id].job - - " We must close the channel for reading the buffer if it is open - " when stopping a job. Otherwise, we will get errors in the status line. - if ch_status(job_getchannel(l:job)) is# 'open' - call ch_close_in(job_getchannel(l:job)) - endif - - " Ask nicely for the job to stop. - call job_stop(l:job) - - if ale#job#IsRunning(l:job) - " Set a 100ms delay for killing the job with SIGKILL. - let s:job_kill_timers[timer_start(100, function('s:KillHandler'))] = l:job - endif - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/julia.vim b/dotfiles/.vim/plugged/ale/autoload/ale/julia.vim deleted file mode 100644 index 18dd9ad7..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/julia.vim +++ /dev/null @@ -1,19 +0,0 @@ -" Author: Bartolomeo Stellato bartolomeo.stellato@gmail.com -" Description: Functions for integrating with Julia tools - -" Find the nearest dir containing a julia project -let s:__ale_julia_project_filenames = ['REQUIRE', 'Manifest.toml', 'Project.toml'] - -function! ale#julia#FindProjectRoot(buffer) abort - for l:project_filename in s:__ale_julia_project_filenames - let l:full_path = ale#path#FindNearestFile(a:buffer, l:project_filename) - - if !empty(l:full_path) - let l:path = fnamemodify(l:full_path, ':p:h') - - return l:path - endif - endfor - - return '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/linter.vim b/dotfiles/.vim/plugged/ale/autoload/ale/linter.vim deleted file mode 100644 index 99faa357..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/linter.vim +++ /dev/null @@ -1,462 +0,0 @@ -" Author: w0rp -" Description: Linter registration and lazy-loading -" Retrieves linters as requested by the engine, loading them if needed. - -let s:runtime_loaded_map = {} -let s:linters = {} - -" Default filetype aliases. -" The user defined aliases will be merged with this Dictionary. -" -" NOTE: Update the g:ale_linter_aliases documentation when modifying this. -let s:default_ale_linter_aliases = { -\ 'Dockerfile': 'dockerfile', -\ 'csh': 'sh', -\ 'javascriptreact': ['javascript', 'jsx'], -\ 'plaintex': 'tex', -\ 'ps1': 'powershell', -\ 'rmarkdown': 'r', -\ 'rmd': 'r', -\ 'systemverilog': 'verilog', -\ 'typescriptreact': ['typescript', 'tsx'], -\ 'vader': ['vim', 'vader'], -\ 'verilog_systemverilog': ['verilog_systemverilog', 'verilog'], -\ 'vimwiki': 'markdown', -\ 'vue': ['vue', 'javascript'], -\ 'xsd': ['xsd', 'xml'], -\ 'xslt': ['xslt', 'xml'], -\ 'zsh': 'sh', -\} - -" Default linters to run for particular filetypes. -" The user defined linter selections will be merged with this Dictionary. -" -" No linters are used for plaintext files by default. -" -" Only cargo and rls are enabled for Rust by default. -" rpmlint is disabled by default because it can result in code execution. -" hhast is disabled by default because it executes code in the project root. -" -" NOTE: Update the g:ale_linters documentation when modifying this. -let s:default_ale_linters = { -\ 'apkbuild': ['apkbuild_lint', 'secfixes_check'], -\ 'csh': ['shell'], -\ 'elixir': ['credo', 'dialyxir', 'dogma'], -\ 'go': ['gofmt', 'golint', 'gopls', 'govet'], -\ 'hack': ['hack'], -\ 'help': [], -\ 'inko': ['inko'], -\ 'json': ['jsonlint', 'spectral', 'vscodejson'], -\ 'json5': [], -\ 'jsonc': [], -\ 'perl': ['perlcritic'], -\ 'perl6': [], -\ 'python': ['flake8', 'mypy', 'pylint', 'pyright'], -\ 'rust': ['cargo', 'rls'], -\ 'spec': [], -\ 'text': [], -\ 'vader': ['vimls'], -\ 'vue': ['eslint', 'vls'], -\ 'zsh': ['shell'], -\ 'v': ['v'], -\ 'yaml': ['spectral', 'yaml-language-server', 'yamllint'], -\} - -" Testing/debugging helper to unload all linters. -function! ale#linter#Reset() abort - let s:runtime_loaded_map = {} - let s:linters = {} -endfunction - -" Return a reference to the linters loaded. -" This is only for tests. -" Do not call this function. -function! ale#linter#GetLintersLoaded() abort - " This command will throw from the sandbox. - let &l:equalprg=&l:equalprg - - return s:linters -endfunction - -function! s:IsCallback(value) abort - return type(a:value) is v:t_string || type(a:value) is v:t_func -endfunction - -function! s:IsBoolean(value) abort - return type(a:value) is v:t_number && (a:value == 0 || a:value == 1) -endfunction - -function! ale#linter#PreProcess(filetype, linter) abort - if type(a:linter) isnot v:t_dict - throw 'The linter object must be a Dictionary' - endif - - let l:obj = { - \ 'name': get(a:linter, 'name'), - \ 'lsp': get(a:linter, 'lsp', ''), - \} - - if type(l:obj.name) isnot v:t_string - throw '`name` must be defined to name the linter' - endif - - let l:needs_address = l:obj.lsp is# 'socket' - let l:needs_executable = l:obj.lsp isnot# 'socket' - let l:needs_command = l:obj.lsp isnot# 'socket' - let l:needs_lsp_details = !empty(l:obj.lsp) - - if empty(l:obj.lsp) - let l:obj.callback = get(a:linter, 'callback') - - if !s:IsCallback(l:obj.callback) - throw '`callback` must be defined with a callback to accept output' - endif - endif - - if index(['', 'socket', 'stdio', 'tsserver'], l:obj.lsp) < 0 - throw '`lsp` must be either `''lsp''`, `''stdio''`, `''socket''` or `''tsserver''` if defined' - endif - - if !l:needs_executable - if has_key(a:linter, 'executable') - throw '`executable` cannot be used when lsp == ''socket''' - endif - elseif has_key(a:linter, 'executable') - let l:obj.executable = a:linter.executable - - if type(l:obj.executable) isnot v:t_string - \&& type(l:obj.executable) isnot v:t_func - throw '`executable` must be a String or Function if defined' - endif - else - throw '`executable` must be defined' - endif - - if !l:needs_command - if has_key(a:linter, 'command') - throw '`command` cannot be used when lsp == ''socket''' - endif - elseif has_key(a:linter, 'command') - let l:obj.command = a:linter.command - - if type(l:obj.command) isnot v:t_string - \&& type(l:obj.command) isnot v:t_func - throw '`command` must be a String or Function if defined' - endif - else - throw '`command` must be defined' - endif - - if !l:needs_address - if has_key(a:linter, 'address') - throw '`address` cannot be used when lsp != ''socket''' - endif - elseif has_key(a:linter, 'address') - if type(a:linter.address) isnot v:t_string - \&& type(a:linter.address) isnot v:t_func - throw '`address` must be a String or Function if defined' - endif - - let l:obj.address = a:linter.address - - if has_key(a:linter, 'cwd') - throw '`cwd` makes no sense for socket LSP connections' - endif - else - throw '`address` must be defined for getting the LSP address' - endif - - if has_key(a:linter, 'cwd') - let l:obj.cwd = a:linter.cwd - - if type(l:obj.cwd) isnot v:t_string - \&& type(l:obj.cwd) isnot v:t_func - throw '`cwd` must be a String or Function if defined' - endif - endif - - if l:needs_lsp_details - " Default to using the filetype as the language. - let l:obj.language = get(a:linter, 'language', a:filetype) - - if type(l:obj.language) isnot v:t_string - \&& type(l:obj.language) isnot v:t_func - throw '`language` must be a String or Function if defined' - endif - - if has_key(a:linter, 'project_root') - let l:obj.project_root = a:linter.project_root - - if type(l:obj.project_root) isnot v:t_string - \&& type(l:obj.project_root) isnot v:t_func - throw '`project_root` must be a String or Function' - endif - else - throw '`project_root` must be defined for LSP linters' - endif - - if has_key(a:linter, 'completion_filter') - let l:obj.completion_filter = a:linter.completion_filter - - if !s:IsCallback(l:obj.completion_filter) - throw '`completion_filter` must be a callback' - endif - endif - - if has_key(a:linter, 'initialization_options') - let l:obj.initialization_options = a:linter.initialization_options - - if type(l:obj.initialization_options) isnot v:t_dict - \&& type(l:obj.initialization_options) isnot v:t_func - throw '`initialization_options` must be a Dictionary or Function if defined' - endif - endif - - if has_key(a:linter, 'lsp_config') - if type(a:linter.lsp_config) isnot v:t_dict - \&& type(a:linter.lsp_config) isnot v:t_func - throw '`lsp_config` must be a Dictionary or Function if defined' - endif - - let l:obj.lsp_config = a:linter.lsp_config - endif - endif - - let l:obj.output_stream = get(a:linter, 'output_stream', 'stdout') - - if type(l:obj.output_stream) isnot v:t_string - \|| index(['stdout', 'stderr', 'both'], l:obj.output_stream) < 0 - throw "`output_stream` must be 'stdout', 'stderr', or 'both'" - endif - - " An option indicating that this linter should only be run against the - " file on disk. - let l:obj.lint_file = get(a:linter, 'lint_file', 0) - - if !s:IsBoolean(l:obj.lint_file) && type(l:obj.lint_file) isnot v:t_func - throw '`lint_file` must be `0`, `1`, or a Function' - endif - - " An option indicating that the buffer should be read. - let l:obj.read_buffer = get(a:linter, 'read_buffer', 1) - - if !s:IsBoolean(l:obj.read_buffer) - throw '`read_buffer` must be `0` or `1`' - endif - - let l:obj.aliases = get(a:linter, 'aliases', []) - - if type(l:obj.aliases) isnot v:t_list - \|| len(filter(copy(l:obj.aliases), 'type(v:val) isnot v:t_string')) > 0 - throw '`aliases` must be a List of String values' - endif - - return l:obj -endfunction - -function! ale#linter#Define(filetype, linter) abort - " This command will throw from the sandbox. - let &l:equalprg=&l:equalprg - - let l:new_linter = ale#linter#PreProcess(a:filetype, a:linter) - - if !has_key(s:linters, a:filetype) - let s:linters[a:filetype] = [] - endif - - " Remove previously defined linters with the same name. - call filter(s:linters[a:filetype], 'v:val.name isnot# a:linter.name') - call add(s:linters[a:filetype], l:new_linter) -endfunction - -" Prevent any linters from being loaded for a given filetype. -function! ale#linter#PreventLoading(filetype) abort - let s:runtime_loaded_map[a:filetype] = 1 -endfunction - -function! ale#linter#GetAll(filetypes) abort - " Don't return linters in the sandbox. - " Otherwise a sandboxed script could modify them. - if ale#util#InSandbox() - return [] - endif - - let l:combined_linters = [] - - for l:filetype in a:filetypes - " Load linters from runtimepath if we haven't done that yet. - if !has_key(s:runtime_loaded_map, l:filetype) - execute 'silent! runtime! ale_linters/' . l:filetype . '/*.vim' - - let s:runtime_loaded_map[l:filetype] = 1 - endif - - call extend(l:combined_linters, get(s:linters, l:filetype, [])) - endfor - - return l:combined_linters -endfunction - -function! s:GetAliasedFiletype(original_filetype) abort - let l:buffer_aliases = get(b:, 'ale_linter_aliases', {}) - - " b:ale_linter_aliases can be set to a List or String. - if type(l:buffer_aliases) is v:t_list - \|| type(l:buffer_aliases) is v:t_string - return l:buffer_aliases - endif - - " Check for aliased filetypes first in a buffer variable, - " then the global variable, - " then in the default mapping, - " otherwise use the original filetype. - for l:dict in [ - \ l:buffer_aliases, - \ g:ale_linter_aliases, - \ s:default_ale_linter_aliases, - \] - if has_key(l:dict, a:original_filetype) - return l:dict[a:original_filetype] - endif - endfor - - return a:original_filetype -endfunction - -function! ale#linter#ResolveFiletype(original_filetype) abort - let l:filetype = s:GetAliasedFiletype(a:original_filetype) - - if type(l:filetype) isnot v:t_list - return [l:filetype] - endif - - return l:filetype -endfunction - -function! s:GetLinterNames(original_filetype) abort - let l:buffer_ale_linters = get(b:, 'ale_linters', {}) - - " b:ale_linters can be set to 'all' - if l:buffer_ale_linters is# 'all' - return 'all' - endif - - " b:ale_linters can be set to a List. - if type(l:buffer_ale_linters) is v:t_list - return l:buffer_ale_linters - endif - - " Try to get a buffer-local setting for the filetype - if has_key(l:buffer_ale_linters, a:original_filetype) - return l:buffer_ale_linters[a:original_filetype] - endif - - " Try to get a global setting for the filetype - if has_key(g:ale_linters, a:original_filetype) - return g:ale_linters[a:original_filetype] - endif - - " If the user has configured ALE to only enable linters explicitly, then - " don't enable any linters by default. - if g:ale_linters_explicit - return [] - endif - - " Try to get a default setting for the filetype - if has_key(s:default_ale_linters, a:original_filetype) - return s:default_ale_linters[a:original_filetype] - endif - - return 'all' -endfunction - -function! ale#linter#Get(original_filetypes) abort - let l:possibly_duplicated_linters = [] - - " Handle dot-separated filetypes. - for l:original_filetype in split(a:original_filetypes, '\.') - let l:filetype = ale#linter#ResolveFiletype(l:original_filetype) - let l:linter_names = s:GetLinterNames(l:original_filetype) - let l:all_linters = ale#linter#GetAll(l:filetype) - let l:filetype_linters = [] - - if type(l:linter_names) is v:t_string && l:linter_names is# 'all' - let l:filetype_linters = l:all_linters - elseif type(l:linter_names) is v:t_list - " Select only the linters we or the user has specified. - for l:linter in l:all_linters - let l:name_list = [l:linter.name] + l:linter.aliases - - for l:name in l:name_list - if index(l:linter_names, l:name) >= 0 - call add(l:filetype_linters, l:linter) - break - endif - endfor - endfor - endif - - call extend(l:possibly_duplicated_linters, l:filetype_linters) - endfor - - let l:name_list = [] - let l:combined_linters = [] - - " Make sure we override linters so we don't get two with the same name, - " like 'eslint' for both 'javascript' and 'typescript' - " - " Note that the reverse calls here modify the List variables. - for l:linter in reverse(l:possibly_duplicated_linters) - if index(l:name_list, l:linter.name) < 0 - call add(l:name_list, l:linter.name) - call add(l:combined_linters, l:linter) - endif - endfor - - return reverse(l:combined_linters) -endfunction - -function! ale#linter#RemoveIgnored(buffer, filetype, linters) abort - " Apply ignore lists for linters only if needed. - let l:ignore_config = ale#Var(a:buffer, 'linters_ignore') - let l:disable_lsp = ale#Var(a:buffer, 'disable_lsp') - - return !empty(l:ignore_config) || l:disable_lsp - \ ? ale#engine#ignore#Exclude(a:filetype, a:linters, l:ignore_config, l:disable_lsp) - \ : a:linters -endfunction - -" Given a buffer and linter, get the executable String for the linter. -function! ale#linter#GetExecutable(buffer, linter) abort - let l:Executable = a:linter.executable - - return type(l:Executable) is v:t_func - \ ? l:Executable(a:buffer) - \ : l:Executable -endfunction - -function! ale#linter#GetCwd(buffer, linter) abort - let l:Cwd = get(a:linter, 'cwd', v:null) - - return type(l:Cwd) is v:t_func ? l:Cwd(a:buffer) : l:Cwd -endfunction - -" Given a buffer and linter, get the command String for the linter. -function! ale#linter#GetCommand(buffer, linter) abort - let l:Command = a:linter.command - - return type(l:Command) is v:t_func ? l:Command(a:buffer) : l:Command -endfunction - -" Given a buffer and linter, get the address for connecting to the server. -function! ale#linter#GetAddress(buffer, linter) abort - let l:Address = a:linter.address - - return type(l:Address) is v:t_func ? l:Address(a:buffer) : l:Address -endfunction - -function! ale#linter#GetLanguage(buffer, linter) abort - let l:Language = a:linter.language - - return type(l:Language) is v:t_func ? l:Language(a:buffer) : l:Language -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/list.vim b/dotfiles/.vim/plugged/ale/autoload/ale/list.vim deleted file mode 100644 index f10d0910..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/list.vim +++ /dev/null @@ -1,274 +0,0 @@ -" Author: Bjorn Neergaard , modified by Yann fery -" Description: Manages the loclist and quickfix lists - -" This flag dictates if ale open the configured loclist -let g:ale_open_list = get(g:, 'ale_open_list', 0) -" This flag dictates if ale keeps open loclist even if there is no error in loclist -let g:ale_keep_list_window_open = get(g:, 'ale_keep_list_window_open', 0) -" This flag dictates that quickfix windows should be opened vertically -let g:ale_list_vertical = get(g:, 'ale_list_vertical', 0) -" The window size to set for the quickfix and loclist windows -let g:ale_list_window_size = get(g:, 'ale_list_window_size', 10) -" A string format for the loclist messages. -let g:ale_loclist_msg_format = get(g:, 'ale_loclist_msg_format', -\ get(g:, 'ale_echo_msg_format', '%code: %%s') -\) - -if !exists('s:timer_args') - let s:timer_args = {} -endif - -" Return 1 if there is a buffer with buftype == 'quickfix' in bufffer list -function! ale#list#IsQuickfixOpen() abort - let l:res = getqflist({ 'winid' : winnr() }) - - if has_key(l:res, 'winid') && l:res.winid > 0 - return 1 - endif - - let l:res = getloclist(0, { 'winid' : winnr() }) - - if has_key(l:res, 'winid') && l:res.winid > 0 - return 1 - endif - - return 0 -endfunction - -" Check if we should open the list, based on the save event being fired, and -" that setting being on, or that the error count is at least as high as the -" setting when set to an integer value. -function! s:ShouldOpen(buffer, loclist_len) abort - let l:val = ale#Var(a:buffer, 'open_list') - let l:saved = getbufvar(a:buffer, 'ale_save_event_fired', 0) - - return l:val > 0 ? a:loclist_len >= l:val : l:val is# 'on_save' && l:saved -endfunction - -" Check if we should close the list, based on the save event being fired, and -" that setting being on, or the setting just being set to an integer value. -function! s:ShouldClose(buffer) abort - let l:val = ale#Var(a:buffer, 'open_list') - let l:saved = getbufvar(a:buffer, 'ale_save_event_fired', 0) - - return !((l:val >= 1) || (l:val is# 'on_save' && l:saved)) -endfunction - -function! s:Deduplicate(list) abort - let l:list = a:list - - call sort(l:list, function('ale#util#LocItemCompareWithText')) - call uniq(l:list, function('ale#util#LocItemCompareWithText')) - - return l:list -endfunction - -function! ale#list#GetCombinedList() abort - let l:list = [] - - for l:info in values(g:ale_buffer_info) - call extend(l:list, l:info.loclist) - endfor - - return s:Deduplicate(l:list) -endfunction - -function! s:FixList(buffer, list) abort - let l:format = ale#Var(a:buffer, 'loclist_msg_format') - let l:new_list = [] - - for l:item in a:list - let l:fixed_item = copy(l:item) - - let l:fixed_item.text = ale#GetLocItemMessage(l:item, l:format) - - if l:item.bufnr == -1 - " If the buffer number is invalid, remove it. - call remove(l:fixed_item, 'bufnr') - endif - - call add(l:new_list, l:fixed_item) - endfor - - return l:new_list -endfunction - -function! s:WinFindBuf(buffer) abort - return exists('*win_findbuf') ? win_findbuf(str2nr(a:buffer)) : [0] -endfunction - -function! s:SetListsImpl(timer_id, buffer, loclist) abort - let l:title = expand('#' . a:buffer . ':p') - - if g:ale_set_quickfix - let l:quickfix_list = ale#list#GetCombinedList() - - if has('nvim') - call setqflist(s:FixList(a:buffer, l:quickfix_list), ' ', l:title) - else - call setqflist(s:FixList(a:buffer, l:quickfix_list)) - call setqflist([], 'r', {'title': l:title}) - endif - elseif g:ale_set_loclist - " If windows support is off, win_findbuf() may not exist. - " We'll set result in the current window, which might not be correct, - " but it's better than nothing. - let l:ids = s:WinFindBuf(a:buffer) - - let l:loclist = s:Deduplicate(a:loclist) - - for l:id in l:ids - if has('nvim') - call setloclist(l:id, s:FixList(a:buffer, l:loclist), ' ', l:title) - else - call setloclist(l:id, s:FixList(a:buffer, l:loclist)) - call setloclist(l:id, [], 'r', {'title': l:title}) - endif - endfor - endif - - " Save the current view before opening/closing any window - call setbufvar(a:buffer, 'ale_winview', winsaveview()) - - " Open a window to show the problems if we need to. - " - " ShouldOpen() checks if the current buffer has enough problems to be - " opened. - if s:ShouldOpen(a:buffer, len(a:loclist)) - let l:winnr = winnr() - let l:mode = mode() - - " open windows vertically instead of default horizontally - let l:open_type = '' - - if ale#Var(a:buffer, 'list_vertical') == 1 - let l:open_type = 'vert rightbelow ' - endif - - if g:ale_set_quickfix - if !ale#list#IsQuickfixOpen() - silent! execute l:open_type . 'copen ' . str2nr(ale#Var(a:buffer, 'list_window_size')) - endif - elseif g:ale_set_loclist - silent! execute l:open_type . 'lopen ' . str2nr(ale#Var(a:buffer, 'list_window_size')) - endif - - " If focus changed, restore it (jump to the last window). - if l:winnr isnot# winnr() - wincmd p - endif - - " Return to original mode when applicable - if mode() != l:mode - if l:mode is? 'v' || l:mode is# "\" - " Reset our last visual selection - normal! gv - elseif l:mode is? 's' || l:mode is# "\" - " Reset our last character selection - normal! "\" - endif - endif - - call s:RestoreViewIfNeeded(a:buffer) - endif - - " If ALE isn't currently checking for more problems, close the window if - " needed now. This check happens inside of this timer function, so - " the window can be closed reliably. - if !ale#engine#IsCheckingBuffer(a:buffer) - call s:CloseWindowIfNeeded(a:buffer) - endif -endfunction - -" Try to restore the window view after closing any of the lists to avoid making -" the it moving around, especially useful when on insert mode -function! s:RestoreViewIfNeeded(buffer) abort - let l:saved_view = getbufvar(a:buffer, 'ale_winview', {}) - - " Saved view is empty, can't do anything - if empty(l:saved_view) - return - endif - - " Check wether the cursor has moved since linting was actually requested. If - " the user has indeed moved lines, do nothing - let l:current_view = winsaveview() - - if l:current_view['lnum'] != l:saved_view['lnum'] - return - endif - - " Anchor view by topline if the list is set to open horizontally - if ale#Var(a:buffer, 'list_vertical') == 0 - call winrestview({'topline': l:saved_view['topline']}) - endif -endfunction - -function! ale#list#SetLists(buffer, loclist) abort - if get(g:, 'ale_set_lists_synchronously') == 1 - \|| getbufvar(a:buffer, 'ale_save_event_fired', 0) - " Update lists immediately if running a test synchronously, or if the - " buffer was saved. - " - " The lists need to be updated immediately when saving a buffer so - " that we can reliably close window automatically, if so configured. - call s:SetListsImpl(-1, a:buffer, a:loclist) - else - call ale#util#StartPartialTimer( - \ 0, - \ function('s:SetListsImpl'), - \ [a:buffer, a:loclist], - \) - endif -endfunction - -function! ale#list#ForcePopulateErrorList(populate_quickfix) abort - let l:quickfix_bak = g:ale_set_quickfix - let g:ale_set_quickfix = a:populate_quickfix - let l:loclist_bak = g:ale_set_loclist - let g:ale_set_loclist = !a:populate_quickfix - let l:open_list_bak = g:ale_open_list - let g:ale_open_list = 1 - - let l:buffer = bufnr('') - let l:loclist = get(g:ale_buffer_info, l:buffer, {'loclist': []}).loclist - call s:SetListsImpl(-1, l:buffer, l:loclist) - - let g:ale_open_list = l:open_list_bak - let g:ale_set_loclist = l:loclist_bak - let g:ale_set_quickfix = l:quickfix_bak -endfunction - -function! s:CloseWindowIfNeeded(buffer) abort - if ale#Var(a:buffer, 'keep_list_window_open') || s:ShouldClose(a:buffer) - return - endif - - let l:did_close_any_list = 0 - - try - " Only close windows if the quickfix list or loclist is completely empty, - " including errors set through other means. - if g:ale_set_quickfix - if empty(getqflist()) - cclose - let l:did_close_any_list = 1 - endif - else - let l:win_ids = s:WinFindBuf(a:buffer) - - for l:win_id in l:win_ids - if g:ale_set_loclist && empty(getloclist(l:win_id)) - lclose - let l:did_close_any_list = 1 - endif - endfor - endif - " Ignore 'Cannot close last window' errors. - catch /E444/ - endtry - - if l:did_close_any_list - call s:RestoreViewIfNeeded(a:buffer) - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/loclist_jumping.vim b/dotfiles/.vim/plugged/ale/autoload/ale/loclist_jumping.vim deleted file mode 100644 index 55097d12..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/loclist_jumping.vim +++ /dev/null @@ -1,163 +0,0 @@ -" Author: w0rp -" Description: This file implements functions for jumping around in a file -" based on ALE's internal loclist. - -" Search for the nearest line either before or after the current position -" in the loclist. The argument 'wrap' can be passed to enable wrapping -" around the end of the list. -" -" If there are no items or we have hit the end with wrapping off, an empty -" List will be returned, otherwise a pair of [line_number, column_number] will -" be returned. -function! ale#loclist_jumping#FindNearest(direction, wrap, ...) abort - let l:buffer = bufnr('') - let l:pos = getpos('.') - let l:info = get(g:ale_buffer_info, bufnr('%'), {'loclist': []}) - " Copy the list and filter to only the items in this buffer. - let l:loclist = filter(copy(l:info.loclist), 'v:val.bufnr == l:buffer') - let l:search_item = {'bufnr': l:buffer, 'lnum': l:pos[1], 'col': l:pos[2]} - - if a:0 > 0 - let l:filter = a:1 - else - let l:filter = 'any' - endif - - if a:0 > 1 - let l:subtype_filter = a:2 - else - let l:subtype_filter = 'any' - endif - - " When searching backwards, so we can find the next smallest match. - if a:direction is# 'before' - call reverse(l:loclist) - endif - - " Look for items before or after the current position. - for l:item in l:loclist - " Compare the cursor with a item where the column number is bounded, - " such that it's possible for the cursor to actually be on the given - " column number, without modifying the cursor number we return. This - " will allow us to move through matches, but still let us move the - " cursor to a line without changing the column, in some cases. - let l:cmp_value = ale#util#LocItemCompare( - \ { - \ 'bufnr': l:buffer, - \ 'lnum': l:item.lnum, - \ 'col': min([ - \ max([l:item.col, 1]), - \ max([len(getline(l:item.lnum)), 1]), - \ ]), - \ }, - \ l:search_item - \) - - if (l:filter is# 'any' || l:filter is# l:item.type) - \&& ( - \ l:subtype_filter is# 'any' - \ || l:subtype_filter is# get(l:item, 'sub_type', '') - \) - - if a:direction is# 'before' && l:cmp_value < 0 - return [l:item.lnum, l:item.col] - endif - - if a:direction is# 'after' && l:cmp_value > 0 - return [l:item.lnum, l:item.col] - endif - endif - endfor - - " If we found nothing, and the wrap option is set to 1, then we should - " wrap around the list of warnings/errors - if a:wrap - for l:item in l:loclist - if (l:filter is# 'any' || l:filter is# l:item.type) - \&& ( - \ l:subtype_filter is# 'any' - \ || l:subtype_filter is# get(l:item, 'sub_type', '') - \) - return [l:item.lnum, l:item.col] - endif - endfor - endif - - return [] -endfunction - -" As before, find the nearest match, but position the cursor at it. -function! ale#loclist_jumping#Jump(direction, ...) abort - if a:0 > 0 - let l:wrap = a:1 - else - let l:wrap = 0 - endif - - if a:0 > 1 - let l:filter = a:2 - else - let l:filter = 'any' - endif - - if a:0 > 2 - let l:subtype_filter = a:3 - else - let l:subtype_filter = 'any' - endif - - let l:nearest = ale#loclist_jumping#FindNearest(a:direction, - \ l:wrap, l:filter, l:subtype_filter) - - if !empty(l:nearest) - normal! m` - call cursor([l:nearest[0], max([l:nearest[1], 1])]) - endif -endfunction - -function! ale#loclist_jumping#WrapJump(direction, sargs) abort - let [l:args, l:rest] = ale#args#Parse(['error', 'warning', 'info', 'wrap', - \ 'style', 'nostyle'], a:sargs) - - let l:wrap = 0 - let l:type_filter = 'any' - let l:subtype_filter = 'any' - - if get(l:args, 'wrap', 'nil') is# '' - let l:wrap = 1 - endif - - if get(l:args, 'error', 'nil') is# '' - let l:type_filter = 'E' - elseif get(l:args, 'warning', 'nil') is# '' - let l:type_filter = 'W' - elseif get(l:args, 'info', 'nil') is# '' - let l:type_filter = 'I' - endif - - if get(l:args, 'nostyle', 'nil') is# '' - let l:subtype_filter = 'style' - elseif get(l:args, 'style', 'nil') is# '' - let l:subtype_filter = '' - endif - - call ale#loclist_jumping#Jump(a:direction, l:wrap, l:type_filter, - \ l:subtype_filter) -endfunction - -function! ale#loclist_jumping#JumpToIndex(index) abort - let l:buffer = bufnr('') - let l:info = get(g:ale_buffer_info, l:buffer, {'loclist': []}) - let l:loclist = filter(copy(l:info.loclist), 'v:val.bufnr == l:buffer') - - if empty(l:loclist) - return - endif - - let l:item = l:loclist[a:index] - - if !empty(l:item) - normal! m` - call cursor([l:item.lnum, l:item.col]) - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/lsp.vim b/dotfiles/.vim/plugged/ale/autoload/ale/lsp.vim deleted file mode 100644 index daaed6fa..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/lsp.vim +++ /dev/null @@ -1,718 +0,0 @@ -" Author: w0rp -" Description: Language Server Protocol client code - -" A Dictionary for tracking connections. -let s:connections = get(s:, 'connections', {}) -let g:ale_lsp_next_message_id = 1 - -" Given an id, which can be an executable or address, and a project path, -" create a new connection if needed. Return a unique ID for the connection. -function! ale#lsp#Register(executable_or_address, project, init_options) abort - let l:conn_id = a:executable_or_address . ':' . a:project - - if !has_key(s:connections, l:conn_id) - " is_tsserver: 1 if the connection is for tsserver. - " data: The message data received so far. - " root: The project root. - " open_documents: A Dictionary mapping buffers to b:changedtick, keeping - " track of when documents were opened, and when we last changed them. - " initialized: 0 if the connection is ready, 1 otherwise. - " init_request_id: The ID for the init request. - " init_options: Options to send to the server. - " config: Configuration settings to send to the server. - " callback_list: A list of callbacks for handling LSP responses. - " capabilities_queue: The list of callbacks to call with capabilities. - " capabilities: Features the server supports. - let s:connections[l:conn_id] = { - \ 'id': l:conn_id, - \ 'is_tsserver': 0, - \ 'data': '', - \ 'root': a:project, - \ 'open_documents': {}, - \ 'initialized': 0, - \ 'init_request_id': 0, - \ 'init_options': a:init_options, - \ 'config': {}, - \ 'callback_list': [], - \ 'init_queue': [], - \ 'capabilities': { - \ 'hover': 0, - \ 'rename': 0, - \ 'filerename': 0, - \ 'references': 0, - \ 'completion': 0, - \ 'completion_trigger_characters': [], - \ 'definition': 0, - \ 'typeDefinition': 0, - \ 'implementation': 0, - \ 'symbol_search': 0, - \ 'code_actions': 0, - \ 'did_save': 0, - \ 'includeText': 0, - \ }, - \} - endif - - return l:conn_id -endfunction - -" Remove an LSP connection with a given ID. This is only for tests. -function! ale#lsp#RemoveConnectionWithID(id) abort - if has_key(s:connections, a:id) - call remove(s:connections, a:id) - endif -endfunction - -function! ale#lsp#ResetConnections() abort - let s:connections = {} -endfunction - -" Used only in tests. -function! ale#lsp#GetConnections() abort - " This command will throw from the sandbox. - let &l:equalprg=&l:equalprg - - return s:connections -endfunction - -" This is only needed for tests -function! ale#lsp#MarkDocumentAsOpen(id, buffer) abort - let l:conn = get(s:connections, a:id, {}) - - if !empty(l:conn) - let l:conn.open_documents[a:buffer] = -1 - endif -endfunction - -function! ale#lsp#GetNextMessageID() abort - " Use the current ID - let l:id = g:ale_lsp_next_message_id - - " Increment the ID variable. - let g:ale_lsp_next_message_id += 1 - - " When the ID overflows, reset it to 1. By the time we hit the initial ID - " again, the messages will be long gone. - if g:ale_lsp_next_message_id < 1 - let g:ale_lsp_next_message_id = 1 - endif - - return l:id -endfunction - -" TypeScript messages use a different format. -function! s:CreateTSServerMessageData(message) abort - let l:is_notification = a:message[0] - - let l:obj = { - \ 'seq': v:null, - \ 'type': 'request', - \ 'command': a:message[1][3:], - \} - - if !l:is_notification - let l:obj.seq = ale#lsp#GetNextMessageID() - endif - - if len(a:message) > 2 - let l:obj.arguments = a:message[2] - endif - - let l:data = json_encode(l:obj) . "\n" - - return [l:is_notification ? 0 : l:obj.seq, l:data] -endfunction - -" Given a List of one or two items, [method_name] or [method_name, params], -" return a List containing [message_id, message_data] -function! ale#lsp#CreateMessageData(message) abort - if a:message[1][:2] is# 'ts@' - return s:CreateTSServerMessageData(a:message) - endif - - let l:is_notification = a:message[0] - - let l:obj = { - \ 'method': a:message[1], - \ 'jsonrpc': '2.0', - \} - - if !l:is_notification - let l:obj.id = ale#lsp#GetNextMessageID() - endif - - if len(a:message) > 2 - let l:obj.params = a:message[2] - endif - - let l:body = json_encode(l:obj) - let l:data = 'Content-Length: ' . strlen(l:body) . "\r\n\r\n" . l:body - - return [l:is_notification ? 0 : l:obj.id, l:data] -endfunction - -function! ale#lsp#ReadMessageData(data) abort - let l:response_list = [] - let l:remainder = a:data - - while 1 - " Look for the end of the HTTP headers - let l:body_start_index = matchend(l:remainder, "\r\n\r\n") - - if l:body_start_index < 0 - " No header end was found yet. - break - endif - - " Parse the Content-Length header. - let l:header_data = l:remainder[:l:body_start_index - 4] - let l:length_match = matchlist( - \ l:header_data, - \ '\vContent-Length: *(\d+)' - \) - - if empty(l:length_match) - throw "Invalid JSON-RPC header:\n" . l:header_data - endif - - " Split the body and the remainder of the text. - let l:remainder_start_index = l:body_start_index + str2nr(l:length_match[1]) - - if len(l:remainder) < l:remainder_start_index - " We don't have enough data yet. - break - endif - - let l:body = l:remainder[l:body_start_index : l:remainder_start_index - 1] - let l:remainder = l:remainder[l:remainder_start_index :] - - " Parse the JSON object and add it to the list. - call add(l:response_list, json_decode(l:body)) - endwhile - - return [l:remainder, l:response_list] -endfunction - -" Update capabilities from the server, so we know which features the server -" supports. -function! s:UpdateCapabilities(conn, capabilities) abort - if type(a:capabilities) isnot v:t_dict - return - endif - - if get(a:capabilities, 'hoverProvider') is v:true - let a:conn.capabilities.hover = 1 - endif - - if type(get(a:capabilities, 'hoverProvider')) is v:t_dict - let a:conn.capabilities.hover = 1 - endif - - if get(a:capabilities, 'referencesProvider') is v:true - let a:conn.capabilities.references = 1 - endif - - if type(get(a:capabilities, 'referencesProvider')) is v:t_dict - let a:conn.capabilities.references = 1 - endif - - if get(a:capabilities, 'renameProvider') is v:true - let a:conn.capabilities.rename = 1 - endif - - if type(get(a:capabilities, 'renameProvider')) is v:t_dict - let a:conn.capabilities.rename = 1 - endif - - if get(a:capabilities, 'codeActionProvider') is v:true - let a:conn.capabilities.code_actions = 1 - endif - - if type(get(a:capabilities, 'codeActionProvider')) is v:t_dict - let a:conn.capabilities.code_actions = 1 - endif - - if !empty(get(a:capabilities, 'completionProvider')) - let a:conn.capabilities.completion = 1 - endif - - if type(get(a:capabilities, 'completionProvider')) is v:t_dict - let l:chars = get(a:capabilities.completionProvider, 'triggerCharacters') - - if type(l:chars) is v:t_list - let a:conn.capabilities.completion_trigger_characters = l:chars - endif - endif - - if get(a:capabilities, 'definitionProvider') is v:true - let a:conn.capabilities.definition = 1 - endif - - if type(get(a:capabilities, 'definitionProvider')) is v:t_dict - let a:conn.capabilities.definition = 1 - endif - - if get(a:capabilities, 'typeDefinitionProvider') is v:true - let a:conn.capabilities.typeDefinition = 1 - endif - - if type(get(a:capabilities, 'typeDefinitionProvider')) is v:t_dict - let a:conn.capabilities.typeDefinition = 1 - endif - - if get(a:capabilities, 'implementationProvider') is v:true - let a:conn.capabilities.implementation = 1 - endif - - if type(get(a:capabilities, 'implementationProvider')) is v:t_dict - let a:conn.capabilities.implementation = 1 - endif - - if get(a:capabilities, 'workspaceSymbolProvider') is v:true - let a:conn.capabilities.symbol_search = 1 - endif - - if type(get(a:capabilities, 'workspaceSymbolProvider')) is v:t_dict - let a:conn.capabilities.symbol_search = 1 - endif - - if type(get(a:capabilities, 'textDocumentSync')) is v:t_dict - let l:syncOptions = get(a:capabilities, 'textDocumentSync') - - if get(l:syncOptions, 'save') is v:true - let a:conn.capabilities.did_save = 1 - endif - - if type(get(l:syncOptions, 'save')) is v:t_dict - let a:conn.capabilities.did_save = 1 - - let l:saveOptions = get(l:syncOptions, 'save') - - if get(l:saveOptions, 'includeText') is v:true - let a:conn.capabilities.includeText = 1 - endif - endif - endif -endfunction - -" Update a connection's configuration dictionary and notify LSP servers -" of any changes since the last update. Returns 1 if a configuration -" update was sent; otherwise 0 will be returned. -function! ale#lsp#UpdateConfig(conn_id, buffer, config) abort - let l:conn = get(s:connections, a:conn_id, {}) - - if empty(l:conn) || a:config ==# l:conn.config " no-custom-checks - return 0 - endif - - let l:conn.config = a:config - let l:message = ale#lsp#message#DidChangeConfiguration(a:buffer, a:config) - - call ale#lsp#Send(a:conn_id, l:message) - - return 1 -endfunction - - -function! ale#lsp#HandleInitResponse(conn, response) abort - if get(a:response, 'method', '') is# 'initialize' - let a:conn.initialized = 1 - elseif type(get(a:response, 'result')) is v:t_dict - \&& has_key(a:response.result, 'capabilities') - call s:UpdateCapabilities(a:conn, a:response.result.capabilities) - - let a:conn.initialized = 1 - endif - - if !a:conn.initialized - return - endif - - " The initialized message must be sent before everything else. - call ale#lsp#Send(a:conn.id, ale#lsp#message#Initialized()) - - " Call capabilities callbacks queued for the project. - for l:Callback in a:conn.init_queue - call l:Callback() - endfor - - let a:conn.init_queue = [] -endfunction - -function! ale#lsp#HandleMessage(conn_id, message) abort - let l:conn = get(s:connections, a:conn_id, {}) - - if empty(l:conn) - return - endif - - if type(a:message) isnot v:t_string - " Ignore messages that aren't strings. - return - endif - - let l:conn.data .= a:message - - " Parse the objects now if we can, and keep the remaining text. - let [l:conn.data, l:response_list] = ale#lsp#ReadMessageData(l:conn.data) - - " Look for initialize responses first. - if !l:conn.initialized - for l:response in l:response_list - call ale#lsp#HandleInitResponse(l:conn, l:response) - endfor - endif - - " If the connection is marked as initialized, call the callbacks with the - " responses. - if l:conn.initialized - for l:response in l:response_list - " Call all of the registered handlers with the response. - for l:Callback in l:conn.callback_list - call ale#util#GetFunction(l:Callback)(a:conn_id, l:response) - endfor - endfor - endif -endfunction - -" Given a connection ID, mark it as a tsserver connection, so it will be -" handled that way. -function! ale#lsp#MarkConnectionAsTsserver(conn_id) abort - let l:conn = s:connections[a:conn_id] - let l:conn.is_tsserver = 1 - let l:conn.initialized = 1 - " Set capabilities which are supported by tsserver. - let l:conn.capabilities.hover = 1 - let l:conn.capabilities.references = 1 - let l:conn.capabilities.completion = 1 - let l:conn.capabilities.completion_trigger_characters = ['.'] - let l:conn.capabilities.definition = 1 - let l:conn.capabilities.typeDefinition = 1 - let l:conn.capabilities.implementation = 1 - let l:conn.capabilities.symbol_search = 1 - let l:conn.capabilities.rename = 1 - let l:conn.capabilities.filerename = 1 - let l:conn.capabilities.code_actions = 1 -endfunction - -function! s:SendInitMessage(conn) abort - let [l:init_id, l:init_data] = ale#lsp#CreateMessageData( - \ ale#lsp#message#Initialize( - \ a:conn.root, - \ a:conn.init_options, - \ { - \ 'workspace': { - \ 'applyEdit': v:false, - \ 'didChangeConfiguration': { - \ 'dynamicRegistration': v:false, - \ }, - \ 'symbol': { - \ 'dynamicRegistration': v:false, - \ }, - \ 'workspaceFolders': v:false, - \ 'configuration': v:false, - \ }, - \ 'textDocument': { - \ 'synchronization': { - \ 'dynamicRegistration': v:false, - \ 'willSave': v:false, - \ 'willSaveWaitUntil': v:false, - \ 'didSave': v:true, - \ }, - \ 'completion': { - \ 'dynamicRegistration': v:false, - \ 'completionItem': { - \ 'snippetSupport': v:false, - \ 'commitCharactersSupport': v:false, - \ 'documentationFormat': ['plaintext'], - \ 'deprecatedSupport': v:false, - \ 'preselectSupport': v:false, - \ }, - \ 'contextSupport': v:false, - \ }, - \ 'hover': { - \ 'dynamicRegistration': v:false, - \ 'contentFormat': ['plaintext'], - \ }, - \ 'references': { - \ 'dynamicRegistration': v:false, - \ }, - \ 'documentSymbol': { - \ 'dynamicRegistration': v:false, - \ 'hierarchicalDocumentSymbolSupport': v:false, - \ }, - \ 'definition': { - \ 'dynamicRegistration': v:false, - \ 'linkSupport': v:false, - \ }, - \ 'typeDefinition': { - \ 'dynamicRegistration': v:false, - \ }, - \ 'implementation': { - \ 'dynamicRegistration': v:false, - \ 'linkSupport': v:false, - \ }, - \ 'publishDiagnostics': { - \ 'relatedInformation': v:true, - \ }, - \ 'codeAction': { - \ 'dynamicRegistration': v:false, - \ 'codeActionLiteralSupport': { - \ 'codeActionKind': { - \ 'valueSet': [] - \ } - \ } - \ }, - \ 'rename': { - \ 'dynamicRegistration': v:false, - \ }, - \ }, - \ }, - \ ), - \) - let a:conn.init_request_id = l:init_id - call s:SendMessageData(a:conn, l:init_data) -endfunction - -" Start a program for LSP servers. -" -" 1 will be returned if the program is running, or 0 if the program could -" not be started. -function! ale#lsp#StartProgram(conn_id, executable, command) abort - let l:conn = s:connections[a:conn_id] - let l:started = 0 - - if !has_key(l:conn, 'job_id') || !ale#job#HasOpenChannel(l:conn.job_id) - let l:options = { - \ 'mode': 'raw', - \ 'out_cb': {_, message -> ale#lsp#HandleMessage(a:conn_id, message)}, - \ 'exit_cb': { -> ale#lsp#Stop(a:conn_id) }, - \} - - if has('win32') - let l:job_id = ale#job#StartWithCmd(a:command, l:options) - else - let l:job_id = ale#job#Start(a:command, l:options) - endif - - let l:started = 1 - else - let l:job_id = l:conn.job_id - endif - - if l:job_id > 0 - let l:conn.job_id = l:job_id - endif - - if l:started && !l:conn.is_tsserver - let l:conn.initialized = 0 - call s:SendInitMessage(l:conn) - endif - - return l:job_id > 0 -endfunction - -" Connect to an LSP server via TCP. -" -" 1 will be returned if the connection is running, or 0 if the connection could -" not be opened. -function! ale#lsp#ConnectToAddress(conn_id, address) abort - let l:conn = s:connections[a:conn_id] - let l:started = 0 - - if !has_key(l:conn, 'channel_id') || !ale#socket#IsOpen(l:conn.channel_id) - let l:channel_id = ale#socket#Open(a:address, { - \ 'callback': {_, mess -> ale#lsp#HandleMessage(a:conn_id, mess)}, - \}) - - let l:started = 1 - else - let l:channel_id = l:conn.channel_id - endif - - if l:channel_id >= 0 - let l:conn.channel_id = l:channel_id - endif - - if l:started - call s:SendInitMessage(l:conn) - endif - - return l:channel_id >= 0 -endfunction - -" Given a connection ID and a callback, register that callback for handling -" messages if the connection exists. -function! ale#lsp#RegisterCallback(conn_id, callback) abort - let l:conn = get(s:connections, a:conn_id, {}) - - if !empty(l:conn) - " Add the callback to the List if it's not there already. - call uniq(sort(add(l:conn.callback_list, a:callback))) - endif -endfunction - -" Stop a single LSP connection. -function! ale#lsp#Stop(conn_id) abort - if has_key(s:connections, a:conn_id) - let l:conn = remove(s:connections, a:conn_id) - - if has_key(l:conn, 'channel_id') - call ale#socket#Close(l:conn.channel_id) - elseif has_key(l:conn, 'job_id') - call ale#job#Stop(l:conn.job_id) - endif - endif -endfunction - -function! ale#lsp#CloseDocument(conn_id) abort -endfunction - -" Stop all LSP connections, closing all jobs and channels, and removing any -" queued messages. -function! ale#lsp#StopAll() abort - for l:conn_id in keys(s:connections) - call ale#lsp#Stop(l:conn_id) - endfor -endfunction - -function! s:SendMessageData(conn, data) abort - if has_key(a:conn, 'job_id') - call ale#job#SendRaw(a:conn.job_id, a:data) - elseif has_key(a:conn, 'channel_id') && ale#socket#IsOpen(a:conn.channel_id) - " Send the message to the server - call ale#socket#Send(a:conn.channel_id, a:data) - else - return 0 - endif - - return 1 -endfunction - -" Send a message to an LSP server. -" Notifications do not need to be handled. -" -" Returns -1 when a message is sent, but no response is expected -" 0 when the message is not sent and -" >= 1 with the message ID when a response is expected. -function! ale#lsp#Send(conn_id, message) abort - let l:conn = get(s:connections, a:conn_id, {}) - - if empty(l:conn) - return 0 - endif - - if !l:conn.initialized - throw 'LSP server not initialized yet!' - endif - - let [l:id, l:data] = ale#lsp#CreateMessageData(a:message) - call s:SendMessageData(l:conn, l:data) - - return l:id == 0 ? -1 : l:id -endfunction - -" Notify LSP servers or tsserver if a document is opened, if needed. -" If a document is opened, 1 will be returned, otherwise 0 will be returned. -function! ale#lsp#OpenDocument(conn_id, buffer, language_id) abort - let l:conn = get(s:connections, a:conn_id, {}) - let l:opened = 0 - - if !empty(l:conn) && !has_key(l:conn.open_documents, a:buffer) - if l:conn.is_tsserver - let l:message = ale#lsp#tsserver_message#Open(a:buffer) - else - let l:message = ale#lsp#message#DidOpen(a:buffer, a:language_id) - endif - - call ale#lsp#Send(a:conn_id, l:message) - let l:conn.open_documents[a:buffer] = getbufvar(a:buffer, 'changedtick') - let l:opened = 1 - endif - - return l:opened -endfunction - -" Notify LSP servers or tsserver that a document is closed, if opened before. -" If a document is closed, 1 will be returned, otherwise 0 will be returned. -" -" Only the buffer number is required here. A message will be sent to every -" language server that was notified previously of the document being opened. -function! ale#lsp#CloseDocument(buffer) abort - let l:closed = 0 - - " The connection keys are sorted so the messages are easier to test, and - " so messages are sent in a consistent order. - for l:conn_id in sort(keys(s:connections)) - let l:conn = s:connections[l:conn_id] - - if l:conn.initialized && has_key(l:conn.open_documents, a:buffer) - if l:conn.is_tsserver - let l:message = ale#lsp#tsserver_message#Close(a:buffer) - else - let l:message = ale#lsp#message#DidClose(a:buffer) - endif - - call ale#lsp#Send(l:conn_id, l:message) - call remove(l:conn.open_documents, a:buffer) - let l:closed = 1 - endif - endfor - - return l:closed -endfunction - -" Notify LSP servers or tsserver that a document has changed, if needed. -" If a notification is sent, 1 will be returned, otherwise 0 will be returned. -function! ale#lsp#NotifyForChanges(conn_id, buffer) abort - let l:conn = get(s:connections, a:conn_id, {}) - let l:notified = 0 - - if !empty(l:conn) && has_key(l:conn.open_documents, a:buffer) - let l:new_tick = getbufvar(a:buffer, 'changedtick') - - if l:conn.open_documents[a:buffer] < l:new_tick - if l:conn.is_tsserver - let l:message = ale#lsp#tsserver_message#Change(a:buffer) - else - let l:message = ale#lsp#message#DidChange(a:buffer) - endif - - call ale#lsp#Send(a:conn_id, l:message) - let l:conn.open_documents[a:buffer] = l:new_tick - let l:notified = 1 - endif - endif - - return l:notified -endfunction - -" Wait for an LSP server to be initialized. -function! ale#lsp#OnInit(conn_id, Callback) abort - let l:conn = get(s:connections, a:conn_id, {}) - - if empty(l:conn) - return - endif - - if l:conn.initialized - call a:Callback() - else - call add(l:conn.init_queue, a:Callback) - endif -endfunction - -" Check if an LSP has a given capability. -function! ale#lsp#HasCapability(conn_id, capability) abort - let l:conn = get(s:connections, a:conn_id, {}) - - if empty(l:conn) - return 0 - endif - - if type(get(l:conn.capabilities, a:capability, v:null)) isnot v:t_number - throw 'Invalid capability ' . a:capability - endif - - return l:conn.capabilities[a:capability] -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/lsp/message.vim b/dotfiles/.vim/plugged/ale/autoload/ale/lsp/message.vim deleted file mode 100644 index c2238dec..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/lsp/message.vim +++ /dev/null @@ -1,212 +0,0 @@ -" Author: w0rp -" Description: Language Server Protocol message implementations -" -" Messages in this movie will be returned in the format -" [is_notification, method_name, params?] -" -" All functions which accept line and column arguments expect them to be 1-based -" (the same format as being returned by getpos() and friends), those then -" will be converted to 0-based as specified by LSP. -let g:ale_lsp_next_version_id = 1 - -" The LSP protocols demands that we send every change to a document, including -" undo, with incrementing version numbers, so we'll just use one incrementing -" ID for everything. -function! ale#lsp#message#GetNextVersionID() abort - " Use the current ID - let l:id = g:ale_lsp_next_version_id - - " Increment the ID variable. - let g:ale_lsp_next_version_id += 1 - - " When the ID overflows, reset it to 1. By the time we hit the initial ID - " again, the messages will be long gone. - if g:ale_lsp_next_version_id < 1 - let g:ale_lsp_next_version_id = 1 - endif - - return l:id -endfunction - -function! ale#lsp#message#Initialize(root_path, options, capabilities) abort - " NOTE: rootPath is deprecated in favour of rootUri - return [0, 'initialize', { - \ 'processId': getpid(), - \ 'rootPath': a:root_path, - \ 'capabilities': a:capabilities, - \ 'initializationOptions': a:options, - \ 'rootUri': ale#util#ToURI(a:root_path), - \}] -endfunction - -function! ale#lsp#message#Initialized() abort - return [1, 'initialized', {}] -endfunction - -function! ale#lsp#message#Shutdown() abort - return [0, 'shutdown'] -endfunction - -function! ale#lsp#message#Exit() abort - return [1, 'exit'] -endfunction - -function! ale#lsp#message#DidOpen(buffer, language_id) abort - let l:lines = getbufline(a:buffer, 1, '$') - - return [1, 'textDocument/didOpen', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ 'languageId': a:language_id, - \ 'version': ale#lsp#message#GetNextVersionID(), - \ 'text': join(l:lines, "\n") . "\n", - \ }, - \}] -endfunction - -function! ale#lsp#message#DidChange(buffer) abort - let l:lines = getbufline(a:buffer, 1, '$') - - " For changes, we simply send the full text of the document to the server. - return [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ 'version': ale#lsp#message#GetNextVersionID(), - \ }, - \ 'contentChanges': [{'text': join(l:lines, "\n") . "\n"}] - \}] -endfunction - -function! ale#lsp#message#DidSave(buffer, include_text) abort - let l:response = [1, 'textDocument/didSave', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \}] - - if a:include_text - let l:response[2].textDocument.version = ale#lsp#message#GetNextVersionID() - let l:response[2].text = ale#util#GetBufferContents(a:buffer) - endif - - return l:response -endfunction - -function! ale#lsp#message#DidClose(buffer) abort - return [1, 'textDocument/didClose', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \}] -endfunction - -let s:COMPLETION_TRIGGER_INVOKED = 1 -let s:COMPLETION_TRIGGER_CHARACTER = 2 - -function! ale#lsp#message#Completion(buffer, line, column, trigger_character) abort - let l:message = [0, 'textDocument/completion', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \ 'position': {'line': a:line - 1, 'character': a:column - 1}, - \}] - - if !empty(a:trigger_character) - let l:message[2].context = { - \ 'triggerKind': s:COMPLETION_TRIGGER_CHARACTER, - \ 'triggerCharacter': a:trigger_character, - \} - endif - - return l:message -endfunction - -function! ale#lsp#message#Definition(buffer, line, column) abort - return [0, 'textDocument/definition', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \ 'position': {'line': a:line - 1, 'character': a:column - 1}, - \}] -endfunction - -function! ale#lsp#message#TypeDefinition(buffer, line, column) abort - return [0, 'textDocument/typeDefinition', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \ 'position': {'line': a:line - 1, 'character': a:column - 1}, - \}] -endfunction - -function! ale#lsp#message#Implementation(buffer, line, column) abort - return [0, 'textDocument/implementation', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \ 'position': {'line': a:line - 1, 'character': a:column - 1}, - \}] -endfunction - -function! ale#lsp#message#References(buffer, line, column) abort - return [0, 'textDocument/references', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \ 'position': {'line': a:line - 1, 'character': a:column - 1}, - \ 'context': {'includeDeclaration': v:false}, - \}] -endfunction - -function! ale#lsp#message#Symbol(query) abort - return [0, 'workspace/symbol', { - \ 'query': a:query, - \}] -endfunction - -function! ale#lsp#message#Hover(buffer, line, column) abort - return [0, 'textDocument/hover', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \ 'position': {'line': a:line - 1, 'character': a:column - 1}, - \}] -endfunction - -function! ale#lsp#message#DidChangeConfiguration(buffer, config) abort - return [1, 'workspace/didChangeConfiguration', { - \ 'settings': a:config, - \}] -endfunction - -function! ale#lsp#message#Rename(buffer, line, column, new_name) abort - return [0, 'textDocument/rename', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \ 'position': {'line': a:line - 1, 'character': a:column - 1}, - \ 'newName': a:new_name, - \}] -endfunction - -function! ale#lsp#message#CodeAction(buffer, line, column, end_line, end_column, diagnostics) abort - return [0, 'textDocument/codeAction', { - \ 'textDocument': { - \ 'uri': ale#util#ToURI(expand('#' . a:buffer . ':p')), - \ }, - \ 'range': { - \ 'start': {'line': a:line - 1, 'character': a:column - 1}, - \ 'end': {'line': a:end_line - 1, 'character': a:end_column}, - \ }, - \ 'context': { - \ 'diagnostics': a:diagnostics - \ }, - \}] -endfunction - -function! ale#lsp#message#ExecuteCommand(command, arguments) abort - return [0, 'workspace/executeCommand', { - \ 'command': a:command, - \ 'arguments': a:arguments, - \}] -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/lsp/reset.vim b/dotfiles/.vim/plugged/ale/autoload/ale/lsp/reset.vim deleted file mode 100644 index 2fc7f0a2..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/lsp/reset.vim +++ /dev/null @@ -1,25 +0,0 @@ -" Stop all LSPs and remove all of the data for them. -function! ale#lsp#reset#StopAllLSPs() abort - call ale#lsp#StopAll() - - if exists('*ale#definition#ClearLSPData') - " Clear the mapping for connections, etc. - call ale#definition#ClearLSPData() - endif - - if exists('*ale#lsp_linter#ClearLSPData') - " Clear the mapping for connections, etc. - call ale#lsp_linter#ClearLSPData() - - " Remove the problems for all of the LSP linters in every buffer. - for l:buffer_string in keys(g:ale_buffer_info) - let l:buffer = str2nr(l:buffer_string) - - for l:linter in ale#linter#Get(getbufvar(l:buffer, '&filetype')) - if !empty(l:linter.lsp) - call ale#engine#HandleLoclist(l:linter.name, l:buffer, [], 0) - endif - endfor - endfor - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/lsp/response.vim b/dotfiles/.vim/plugged/ale/autoload/ale/lsp/response.vim deleted file mode 100644 index 498ec508..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/lsp/response.vim +++ /dev/null @@ -1,152 +0,0 @@ -" Author: w0rp -" Description: Parsing and transforming of LSP server responses. - -" Constants for error codes. -" Defined by JSON RPC -let s:PARSE_ERROR = -32700 -let s:INVALID_REQUEST = -32600 -let s:METHOD_NOT_FOUND = -32601 -let s:INVALID_PARAMS = -32602 -let s:INTERNAL_ERROR = -32603 -let s:SERVER_ERROR_START = -32099 -let s:SERVER_ERROR_END = -32000 -let s:SERVER_NOT_INITIALIZED = -32002 -let s:UNKNOWN_ERROR_CODE = -32001 -" Defined by the protocol. -let s:REQUEST_CANCELLED = -32800 - -" Constants for message severity codes. -let s:SEVERITY_ERROR = 1 -let s:SEVERITY_WARNING = 2 -let s:SEVERITY_INFORMATION = 3 -let s:SEVERITY_HINT = 4 - -" Parse the message for textDocument/publishDiagnostics -function! ale#lsp#response#ReadDiagnostics(response) abort - let l:loclist = [] - - for l:diagnostic in a:response.params.diagnostics - let l:severity = get(l:diagnostic, 'severity', 0) - let l:loclist_item = { - \ 'text': substitute(l:diagnostic.message, '\(\r\n\|\n\|\r\)', ' ', 'g'), - \ 'type': 'E', - \ 'lnum': l:diagnostic.range.start.line + 1, - \ 'col': l:diagnostic.range.start.character + 1, - \ 'end_lnum': l:diagnostic.range.end.line + 1, - \ 'end_col': l:diagnostic.range.end.character, - \} - - if l:severity == s:SEVERITY_WARNING - let l:loclist_item.type = 'W' - elseif l:severity == s:SEVERITY_INFORMATION - " TODO: Use 'I' here in future. - let l:loclist_item.type = 'W' - elseif l:severity == s:SEVERITY_HINT - " TODO: Use 'H' here in future - let l:loclist_item.type = 'W' - endif - - if has_key(l:diagnostic, 'code') - if type(l:diagnostic.code) == v:t_string - let l:loclist_item.code = l:diagnostic.code - elseif type(l:diagnostic.code) == v:t_number && l:diagnostic.code != -1 - let l:loclist_item.code = string(l:diagnostic.code) - let l:loclist_item.nr = l:diagnostic.code - endif - endif - - if has_key(l:diagnostic, 'relatedInformation') - \ && l:diagnostic.relatedInformation isnot v:null - let l:related = deepcopy(l:diagnostic.relatedInformation) - call map(l:related, {key, val -> - \ ale#util#ToResource(val.location.uri) . - \ ':' . (val.location.range.start.line + 1) . - \ ':' . (val.location.range.start.character + 1) . - \ ":\n\t" . val.message - \}) - let l:loclist_item.detail = l:diagnostic.message . "\n" . join(l:related, "\n") - endif - - if has_key(l:diagnostic, 'source') - let l:loclist_item.detail = printf( - \ '[%s] %s', - \ l:diagnostic.source, - \ l:diagnostic.message - \) - endif - - call add(l:loclist, l:loclist_item) - endfor - - return l:loclist -endfunction - -function! ale#lsp#response#ReadTSServerDiagnostics(response) abort - let l:loclist = [] - - for l:diagnostic in a:response.body.diagnostics - let l:loclist_item = { - \ 'text': l:diagnostic.text, - \ 'type': 'E', - \ 'lnum': l:diagnostic.start.line, - \ 'col': l:diagnostic.start.offset, - \ 'end_lnum': l:diagnostic.end.line, - \ 'end_col': l:diagnostic.end.offset - 1, - \} - - if has_key(l:diagnostic, 'code') - if type(l:diagnostic.code) == v:t_string - let l:loclist_item.code = l:diagnostic.code - elseif type(l:diagnostic.code) == v:t_number && l:diagnostic.code != -1 - let l:loclist_item.code = string(l:diagnostic.code) - let l:loclist_item.nr = l:diagnostic.code - endif - endif - - if get(l:diagnostic, 'category') is# 'warning' - let l:loclist_item.type = 'W' - endif - - if get(l:diagnostic, 'category') is# 'suggestion' - let l:loclist_item.type = 'I' - endif - - call add(l:loclist, l:loclist_item) - endfor - - return l:loclist -endfunction - -function! ale#lsp#response#GetErrorMessage(response) abort - if type(get(a:response, 'error', 0)) isnot v:t_dict - return '' - endif - - let l:code = get(a:response.error, 'code') - - " Only report things for these error codes. - if l:code isnot s:INVALID_PARAMS && l:code isnot s:INTERNAL_ERROR - return '' - endif - - let l:message = get(a:response.error, 'message', '') - - if empty(l:message) - return '' - endif - - " Include the traceback or error data as details, if present. - let l:error_data = get(a:response.error, 'data', {}) - - if type(l:error_data) is v:t_string - let l:message .= "\n" . l:error_data - elseif type(l:error_data) is v:t_dict - let l:traceback = get(l:error_data, 'traceback', []) - - if type(l:traceback) is v:t_list && !empty(l:traceback) - let l:message .= "\n" . join(l:traceback, "\n") - endif - endif - - return l:message -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/lsp/tsserver_message.vim b/dotfiles/.vim/plugged/ale/autoload/ale/lsp/tsserver_message.vim deleted file mode 100644 index 02e57899..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/lsp/tsserver_message.vim +++ /dev/null @@ -1,165 +0,0 @@ -" Author: w0rp -" Description: tsserver message implementations -" -" Messages in this movie will be returned in the format -" [is_notification, command_name, params?] -" -" Every command must begin with the string 'ts@', which will be used to -" detect the different message format for tsserver, and this string will -" be removed from the actual command name, - -function! ale#lsp#tsserver_message#Open(buffer) abort - return [1, 'ts@open', {'file': expand('#' . a:buffer . ':p')}] -endfunction - -function! ale#lsp#tsserver_message#Close(buffer) abort - return [1, 'ts@close', {'file': expand('#' . a:buffer . ':p')}] -endfunction - -function! ale#lsp#tsserver_message#Change(buffer) abort - let l:lines = getbufline(a:buffer, 1, '$') - - " We will always use a very high endLine number, so we can delete - " lines from files. tsserver will gladly accept line numbers beyond the - " end. - return [1, 'ts@change', { - \ 'file': expand('#' . a:buffer . ':p'), - \ 'line': 1, - \ 'offset': 1, - \ 'endLine': 1073741824, - \ 'endOffset': 1, - \ 'insertString': join(l:lines, "\n") . "\n", - \}] -endfunction - -function! ale#lsp#tsserver_message#Geterr(buffer) abort - return [1, 'ts@geterr', {'files': [expand('#' . a:buffer . ':p')]}] -endfunction - -function! ale#lsp#tsserver_message#Completions( -\ buffer, line, column, prefix, include_external) abort - return [0, 'ts@completions', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \ 'prefix': a:prefix, - \ 'includeExternalModuleExports': a:include_external, - \}] -endfunction - -function! ale#lsp#tsserver_message#CompletionEntryDetails(buffer, line, column, entry_names) abort - return [0, 'ts@completionEntryDetails', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \ 'entryNames': a:entry_names, - \}] -endfunction - -function! ale#lsp#tsserver_message#Definition(buffer, line, column) abort - return [0, 'ts@definition', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \}] -endfunction - -function! ale#lsp#tsserver_message#TypeDefinition(buffer, line, column) abort - return [0, 'ts@typeDefinition', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \}] -endfunction - -function! ale#lsp#tsserver_message#Implementation(buffer, line, column) abort - return [0, 'ts@implementation', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \}] -endfunction - -function! ale#lsp#tsserver_message#References(buffer, line, column) abort - return [0, 'ts@references', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \}] -endfunction - -function! ale#lsp#tsserver_message#Quickinfo(buffer, line, column) abort - return [0, 'ts@quickinfo', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \}] -endfunction - -function! ale#lsp#tsserver_message#Rename( -\ buffer, line, column, find_in_comments, find_in_strings) abort - return [0, 'ts@rename', { - \ 'line': a:line, - \ 'offset': a:column, - \ 'file': expand('#' . a:buffer . ':p'), - \ 'arguments': { - \ 'findInComments': a:find_in_comments, - \ 'findInStrings': a:find_in_strings, - \ } - \}] -endfunction - -function! ale#lsp#tsserver_message#GetEditsForFileRename( -\ oldFilePath, newFilePath) abort - return [0, 'ts@getEditsForFileRename', { - \ 'oldFilePath': a:oldFilePath, - \ 'newFilePath': a:newFilePath, - \}] -endfunction - -function! ale#lsp#tsserver_message#OrganizeImports(buffer) abort - return [0, 'ts@organizeImports', { - \ 'scope': { - \ 'type': 'file', - \ 'args': { - \ 'file': expand('#' . a:buffer . ':p'), - \ }, - \ }, - \}] -endfunction - -function! ale#lsp#tsserver_message#GetCodeFixes(buffer, line, column, end_line, end_column, error_codes) abort - " The lines and columns are 1-based. - " The errors codes must be a list of tsserver error codes to fix. - return [0, 'ts@getCodeFixes', { - \ 'startLine': a:line, - \ 'startOffset': a:column, - \ 'endLine': a:end_line, - \ 'endOffset': a:end_column + 1, - \ 'file': expand('#' . a:buffer . ':p'), - \ 'errorCodes': a:error_codes, - \}] -endfunction - -function! ale#lsp#tsserver_message#GetApplicableRefactors(buffer, line, column, end_line, end_column) abort - " The arguments for this request can also be just 'line' and 'offset' - return [0, 'ts@getApplicableRefactors', { - \ 'startLine': a:line, - \ 'startOffset': a:column, - \ 'endLine': a:end_line, - \ 'endOffset': a:end_column + 1, - \ 'file': expand('#' . a:buffer . ':p'), - \}] -endfunction - -function! ale#lsp#tsserver_message#GetEditsForRefactor(buffer, line, column, end_line, end_column, refactor, action) abort - return [0, 'ts@getEditsForRefactor', { - \ 'startLine': a:line, - \ 'startOffset': a:column, - \ 'endLine': a:end_line, - \ 'endOffset': a:end_column + 1, - \ 'file': expand('#' . a:buffer . ':p'), - \ 'refactor': a:refactor, - \ 'action': a:action, - \}] -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/lsp_linter.vim b/dotfiles/.vim/plugged/ale/autoload/ale/lsp_linter.vim deleted file mode 100644 index 1fb2e9b6..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/lsp_linter.vim +++ /dev/null @@ -1,547 +0,0 @@ -" Author: w0rp -" Description: Integration between linters and LSP/tsserver. - -" This code isn't loaded if a user never users LSP features or linters. - -" Associates LSP connection IDs with linter names. -if !has_key(s:, 'lsp_linter_map') - let s:lsp_linter_map = {} -endif - -" A Dictionary to track one-shot handlers for custom LSP requests -let s:custom_handlers_map = get(s:, 'custom_handlers_map', {}) - -" Clear LSP linter data for the linting engine. -function! ale#lsp_linter#ClearLSPData() abort - let s:lsp_linter_map = {} - let s:custom_handlers_map = {} -endfunction - -" Only for internal use. -function! ale#lsp_linter#GetLSPLinterMap() abort - return s:lsp_linter_map -endfunction - -" Just for tests. -function! ale#lsp_linter#SetLSPLinterMap(replacement_map) abort - let s:lsp_linter_map = a:replacement_map -endfunction - -" Check if diagnostics for a particular linter should be ignored. -function! s:ShouldIgnore(buffer, linter_name) abort - " Ignore all diagnostics if LSP integration is disabled. - if ale#Var(a:buffer, 'disable_lsp') - return 1 - endif - - let l:config = ale#Var(a:buffer, 'linters_ignore') - - " Don't load code for ignoring diagnostics if there's nothing to ignore. - if empty(l:config) - return 0 - endif - - let l:filetype = getbufvar(a:buffer, '&filetype') - let l:ignore_list = ale#engine#ignore#GetList(l:filetype, l:config) - - return index(l:ignore_list, a:linter_name) >= 0 -endfunction - -function! s:HandleLSPDiagnostics(conn_id, response) abort - let l:linter_name = s:lsp_linter_map[a:conn_id] - let l:filename = ale#util#ToResource(a:response.params.uri) - let l:escaped_name = escape( - \ fnameescape(l:filename), - \ has('win32') ? '^' : '^,}]' - \) - let l:buffer = bufnr('^' . l:escaped_name . '$') - let l:info = get(g:ale_buffer_info, l:buffer, {}) - - if empty(l:info) - return - endif - - if s:ShouldIgnore(l:buffer, l:linter_name) - return - endif - - let l:loclist = ale#lsp#response#ReadDiagnostics(a:response) - - call ale#engine#HandleLoclist(l:linter_name, l:buffer, l:loclist, 0) -endfunction - -function! s:HandleTSServerDiagnostics(response, error_type) abort - let l:linter_name = 'tsserver' - let l:escaped_name = escape( - \ fnameescape(a:response.body.file), - \ has('win32') ? '^' : '^,}]' - \) - let l:buffer = bufnr('^' . l:escaped_name . '$') - let l:info = get(g:ale_buffer_info, l:buffer, {}) - - if empty(l:info) - return - endif - - call ale#engine#MarkLinterInactive(l:info, l:linter_name) - - if s:ShouldIgnore(l:buffer, l:linter_name) - return - endif - - let l:thislist = ale#lsp#response#ReadTSServerDiagnostics(a:response) - let l:no_changes = 0 - - " tsserver sends syntax and semantic errors in separate messages, so we - " have to collect the messages separately for each buffer and join them - " back together again. - if a:error_type is# 'syntax' - if len(l:thislist) is 0 && len(get(l:info, 'syntax_loclist', [])) is 0 - let l:no_changes = 1 - endif - - let l:info.syntax_loclist = l:thislist - elseif a:error_type is# 'semantic' - if len(l:thislist) is 0 && len(get(l:info, 'semantic_loclist', [])) is 0 - let l:no_changes = 1 - endif - - let l:info.semantic_loclist = l:thislist - else - if len(l:thislist) is 0 && len(get(l:info, 'suggestion_loclist', [])) is 0 - let l:no_changes = 1 - endif - - let l:info.suggestion_loclist = l:thislist - endif - - if l:no_changes - return - endif - - let l:loclist = get(l:info, 'semantic_loclist', []) - \ + get(l:info, 'suggestion_loclist', []) - \ + get(l:info, 'syntax_loclist', []) - - call ale#engine#HandleLoclist(l:linter_name, l:buffer, l:loclist, 0) -endfunction - -function! s:HandleLSPErrorMessage(linter_name, response) abort - if !g:ale_history_enabled || !g:ale_history_log_output - return - endif - - if empty(a:linter_name) - return - endif - - let l:message = ale#lsp#response#GetErrorMessage(a:response) - - if empty(l:message) - return - endif - - call ale#lsp_linter#AddErrorMessage(a:linter_name, l:message) -endfunction - -function! ale#lsp_linter#AddErrorMessage(linter_name, message) abort - " This global variable is set here so we don't load the debugging.vim file - " until someone uses :ALEInfo. - let g:ale_lsp_error_messages = get(g:, 'ale_lsp_error_messages', {}) - - if !has_key(g:ale_lsp_error_messages, a:linter_name) - let g:ale_lsp_error_messages[a:linter_name] = [] - endif - - call add(g:ale_lsp_error_messages[a:linter_name], a:message) -endfunction - -function! ale#lsp_linter#HandleLSPResponse(conn_id, response) abort - let l:method = get(a:response, 'method', '') - - if get(a:response, 'jsonrpc', '') is# '2.0' && has_key(a:response, 'error') - let l:linter_name = get(s:lsp_linter_map, a:conn_id, '') - - call s:HandleLSPErrorMessage(l:linter_name, a:response) - elseif l:method is# 'textDocument/publishDiagnostics' - call s:HandleLSPDiagnostics(a:conn_id, a:response) - elseif l:method is# 'window/showMessage' - call ale#lsp_window#HandleShowMessage( - \ s:lsp_linter_map[a:conn_id], - \ g:ale_lsp_show_message_format, - \ a:response.params - \) - elseif get(a:response, 'type', '') is# 'event' - \&& get(a:response, 'event', '') is# 'semanticDiag' - call s:HandleTSServerDiagnostics(a:response, 'semantic') - elseif get(a:response, 'type', '') is# 'event' - \&& get(a:response, 'event', '') is# 'syntaxDiag' - call s:HandleTSServerDiagnostics(a:response, 'syntax') - elseif get(a:response, 'type', '') is# 'event' - \&& get(a:response, 'event', '') is# 'suggestionDiag' - \&& get(g:, 'ale_lsp_suggestions', '1') == 1 - call s:HandleTSServerDiagnostics(a:response, 'suggestion') - endif -endfunction - -function! ale#lsp_linter#GetOptions(buffer, linter) abort - if has_key(a:linter, 'initialization_options_callback') - return ale#util#GetFunction(a:linter.initialization_options_callback)(a:buffer) - endif - - if has_key(a:linter, 'initialization_options') - let l:Options = a:linter.initialization_options - - if type(l:Options) is v:t_func - let l:Options = l:Options(a:buffer) - endif - - return l:Options - endif - - return {} -endfunction - -function! ale#lsp_linter#GetConfig(buffer, linter) abort - if has_key(a:linter, 'lsp_config_callback') - return ale#util#GetFunction(a:linter.lsp_config_callback)(a:buffer) - endif - - if has_key(a:linter, 'lsp_config') - let l:Config = a:linter.lsp_config - - if type(l:Config) is v:t_func - let l:Config = l:Config(a:buffer) - endif - - return l:Config - endif - - return {} -endfunction - -function! ale#lsp_linter#FindProjectRoot(buffer, linter) abort - let l:buffer_ale_root = getbufvar( - \ a:buffer, - \ 'ale_root', - \ getbufvar(a:buffer, 'ale_lsp_root', {}) - \) - - if type(l:buffer_ale_root) is v:t_string - return l:buffer_ale_root - endif - - " Try to get a buffer-local setting for the root - if has_key(l:buffer_ale_root, a:linter.name) - let l:Root = l:buffer_ale_root[a:linter.name] - - if type(l:Root) is v:t_func - return l:Root(a:buffer) - else - return l:Root - endif - endif - - let l:global_root = g:ale_root - - if empty(g:ale_root) && exists('g:ale_lsp_root') - let l:global_root = g:ale_lsp_root - endif - - " Try to get a global setting for the root - if has_key(l:global_root, a:linter.name) - let l:Root = l:global_root[a:linter.name] - - if type(l:Root) is v:t_func - return l:Root(a:buffer) - else - return l:Root - endif - endif - - " Fall back to the linter-specific configuration - if has_key(a:linter, 'project_root') - let l:Root = a:linter.project_root - - return type(l:Root) is v:t_func ? l:Root(a:buffer) : l:Root - endif - - return ale#util#GetFunction(a:linter.project_root_callback)(a:buffer) -endfunction - -" This function is accessible so tests can call it. -function! ale#lsp_linter#OnInit(linter, details, Callback) abort - let l:buffer = a:details.buffer - let l:conn_id = a:details.connection_id - let l:command = a:details.command - - let l:config = ale#lsp_linter#GetConfig(l:buffer, a:linter) - let l:language_id = ale#linter#GetLanguage(l:buffer, a:linter) - - call ale#lsp#UpdateConfig(l:conn_id, l:buffer, l:config) - - if ale#lsp#OpenDocument(l:conn_id, l:buffer, l:language_id) - if g:ale_history_enabled && !empty(l:command) - call ale#history#Add(l:buffer, 'started', l:conn_id, l:command) - endif - endif - - " The change message needs to be sent for tsserver before doing anything. - if a:linter.lsp is# 'tsserver' - call ale#lsp#NotifyForChanges(l:conn_id, l:buffer) - endif - - " Tell the relevant buffer that the LSP has started via an autocmd. - if l:buffer > 0 - if l:buffer == bufnr('') - silent doautocmd User ALELSPStarted - else - execute 'augroup ALELSPStartedGroup' . l:buffer - autocmd! - - execute printf( - \ 'autocmd BufEnter ' - \ . ' doautocmd User ALELSPStarted', - \ l:buffer - \) - - " Replicate ++once behavior for backwards compatibility. - execute printf( - \ 'autocmd BufEnter ' - \ . ' autocmd! ALELSPStartedGroup%d', - \ l:buffer, l:buffer - \) - augroup END - endif - endif - - call a:Callback(a:linter, a:details) -endfunction - -function! s:StartLSP(options, address, executable, command) abort - let l:buffer = a:options.buffer - let l:linter = a:options.linter - let l:root = a:options.root - let l:Callback = a:options.callback - - let l:init_options = ale#lsp_linter#GetOptions(l:buffer, l:linter) - - if l:linter.lsp is# 'socket' - let l:conn_id = ale#lsp#Register(a:address, l:root, l:init_options) - let l:ready = ale#lsp#ConnectToAddress(l:conn_id, a:address) - let l:command = '' - else - let l:conn_id = ale#lsp#Register(a:executable, l:root, l:init_options) - - " tsserver behaves differently, so tell the LSP API that it is tsserver. - if l:linter.lsp is# 'tsserver' - call ale#lsp#MarkConnectionAsTsserver(l:conn_id) - endif - - let l:cwd = ale#linter#GetCwd(l:buffer, l:linter) - let l:command = ale#command#FormatCommand( - \ l:buffer, - \ a:executable, - \ a:command, - \ 0, - \ v:false, - \ l:cwd, - \ ale#GetFilenameMappings(l:buffer, l:linter.name), - \)[1] - let l:command = ale#job#PrepareCommand(l:buffer, l:command) - let l:ready = ale#lsp#StartProgram(l:conn_id, a:executable, l:command) - endif - - if !l:ready - if g:ale_history_enabled && !empty(a:command) - call ale#history#Add(l:buffer, 'failed', l:conn_id, a:command) - endif - - return 0 - endif - - let l:details = { - \ 'buffer': l:buffer, - \ 'connection_id': l:conn_id, - \ 'command': l:command, - \ 'project_root': l:root, - \} - - call ale#lsp#OnInit(l:conn_id, {-> - \ ale#lsp_linter#OnInit(l:linter, l:details, l:Callback) - \}) - - return 1 -endfunction - -function! s:StartWithAddress(options, address) abort - if ale#command#IsDeferred(a:address) - let a:address.result_callback = { - \ address -> s:StartWithAddress(a:options, address) - \} - - return 1 - endif - - if empty(a:address) - return 0 - endif - - return s:StartLSP(a:options, a:address, '', '') -endfunction - -function! s:StartWithCommand(options, executable, command) abort - if ale#command#IsDeferred(a:command) - let a:command.result_callback = { - \ command -> s:StartWithCommand(a:options, a:executable, command) - \} - - return 1 - endif - - if empty(a:command) - return 0 - endif - - return s:StartLSP(a:options, '', a:executable, a:command) -endfunction - -function! s:StartIfExecutable(options, executable) abort - if ale#command#IsDeferred(a:executable) - let a:executable.result_callback = { - \ executable -> s:StartIfExecutable(a:options, executable) - \} - - return 1 - endif - - if !ale#engine#IsExecutable(a:options.buffer, a:executable) - return 0 - endif - - let l:command = ale#linter#GetCommand(a:options.buffer, a:options.linter) - - return s:StartWithCommand(a:options, a:executable, l:command) -endfunction - -" Given a buffer, an LSP linter, start up an LSP linter and get ready to -" receive messages for the document. -function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let l:command = '' - let l:address = '' - let l:root = ale#lsp_linter#FindProjectRoot(a:buffer, a:linter) - - if empty(l:root) && a:linter.lsp isnot# 'tsserver' - " If there's no project root, then we can't check files with LSP, - " unless we are using tsserver, which doesn't use project roots. - call ale#lsp_linter#AddErrorMessage(a:linter.name, "Failed to find project root, language server wont't start.") - - return 0 - endif - - let l:options = { - \ 'buffer': a:buffer, - \ 'linter': a:linter, - \ 'callback': a:Callback, - \ 'root': l:root, - \} - - if a:linter.lsp is# 'socket' - let l:address = ale#linter#GetAddress(a:buffer, a:linter) - - return s:StartWithAddress(l:options, l:address) - endif - - let l:executable = ale#linter#GetExecutable(a:buffer, a:linter) - - return s:StartIfExecutable(l:options, l:executable) -endfunction - -function! s:CheckWithLSP(linter, details) abort - let l:buffer = a:details.buffer - let l:info = get(g:ale_buffer_info, l:buffer) - - if empty(l:info) - return - endif - - let l:id = a:details.connection_id - - " Register a callback now for handling errors now. - let l:Callback = function('ale#lsp_linter#HandleLSPResponse') - call ale#lsp#RegisterCallback(l:id, l:Callback) - - " Remember the linter this connection is for. - let s:lsp_linter_map[l:id] = a:linter.name - - if a:linter.lsp is# 'tsserver' - let l:message = ale#lsp#tsserver_message#Geterr(l:buffer) - let l:notified = ale#lsp#Send(l:id, l:message) != 0 - - if l:notified - call ale#engine#MarkLinterActive(l:info, a:linter) - endif - else - let l:notified = ale#lsp#NotifyForChanges(l:id, l:buffer) - endif - - " If this was a file save event, also notify the server of that. - if a:linter.lsp isnot# 'tsserver' - \&& getbufvar(l:buffer, 'ale_save_event_fired', 0) - \&& ale#lsp#HasCapability(l:id, 'did_save') - let l:include_text = ale#lsp#HasCapability(l:id, 'includeText') - let l:save_message = ale#lsp#message#DidSave(l:buffer, l:include_text) - let l:notified = ale#lsp#Send(l:id, l:save_message) != 0 - endif -endfunction - -function! ale#lsp_linter#CheckWithLSP(buffer, linter) abort - return ale#lsp_linter#StartLSP(a:buffer, a:linter, function('s:CheckWithLSP')) -endfunction - -function! s:HandleLSPResponseToCustomRequests(conn_id, response) abort - if has_key(a:response, 'id') - \&& has_key(s:custom_handlers_map, a:response.id) - let l:Handler = remove(s:custom_handlers_map, a:response.id) - call l:Handler(a:response) - endif -endfunction - -function! s:OnReadyForCustomRequests(args, linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - let l:request_id = ale#lsp#Send(l:id, a:args.message) - - if l:request_id > 0 && has_key(a:args, 'handler') - let l:Callback = function('s:HandleLSPResponseToCustomRequests') - call ale#lsp#RegisterCallback(l:id, l:Callback) - let s:custom_handlers_map[l:request_id] = a:args.handler - endif -endfunction - -" Send a custom request to an LSP linter. -function! ale#lsp_linter#SendRequest(buffer, linter_name, message, ...) abort - let l:filetype = ale#linter#ResolveFiletype(getbufvar(a:buffer, '&filetype')) - let l:linter_list = ale#linter#GetAll(l:filetype) - let l:linter_list = filter(l:linter_list, {_, v -> v.name is# a:linter_name}) - - if len(l:linter_list) < 1 - throw 'Linter "' . a:linter_name . '" not found!' - endif - - let l:linter = l:linter_list[0] - - if empty(l:linter.lsp) - throw 'Linter "' . a:linter_name . '" does not support LSP!' - endif - - let l:is_notification = a:message[0] - let l:callback_args = {'message': a:message} - - if !l:is_notification && a:0 - let l:callback_args.handler = a:1 - endif - - let l:Callback = function('s:OnReadyForCustomRequests', [l:callback_args]) - - return ale#lsp_linter#StartLSP(a:buffer, l:linter, l:Callback) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/lsp_window.vim b/dotfiles/.vim/plugged/ale/autoload/ale/lsp_window.vim deleted file mode 100644 index 9a27f2f1..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/lsp_window.vim +++ /dev/null @@ -1,58 +0,0 @@ -" Author: suoto -" Description: Handling of window/* LSP methods, although right now only -" handles window/showMessage - -" Constants for message type codes -let s:LSP_MESSAGE_TYPE_DISABLED = 0 -let s:LSP_MESSAGE_TYPE_ERROR = 1 -let s:LSP_MESSAGE_TYPE_WARNING = 2 -let s:LSP_MESSAGE_TYPE_INFORMATION = 3 -let s:LSP_MESSAGE_TYPE_LOG = 4 - -" Translate strings from the user config to a number so we can check -" severities -let s:CFG_TO_LSP_SEVERITY = { -\ 'disabled': s:LSP_MESSAGE_TYPE_DISABLED, -\ 'error': s:LSP_MESSAGE_TYPE_ERROR, -\ 'warning': s:LSP_MESSAGE_TYPE_WARNING, -\ 'information': s:LSP_MESSAGE_TYPE_INFORMATION, -\ 'info': s:LSP_MESSAGE_TYPE_INFORMATION, -\ 'log': s:LSP_MESSAGE_TYPE_LOG -\} - -" Handle window/showMessage response. -" - details: dict containing linter name and format (g:ale_lsp_show_message_format) -" - params: dict with the params for the call in the form of {type: number, message: string} -function! ale#lsp_window#HandleShowMessage(linter_name, format, params) abort - let l:message = a:params.message - let l:type = a:params.type - - " Get the configured severity level threshold and check if the message - " should be displayed or not - let l:configured_severity = tolower(get(g:, 'ale_lsp_show_message_severity', 'error')) - " If the user has configured with a value we can't find on the conversion - " dict, fall back to warning - let l:cfg_severity_threshold = get(s:CFG_TO_LSP_SEVERITY, l:configured_severity, s:LSP_MESSAGE_TYPE_WARNING) - - if l:type > l:cfg_severity_threshold - return - endif - - " Severity will depend on the message type - if l:type is# s:LSP_MESSAGE_TYPE_ERROR - let l:severity = g:ale_echo_msg_error_str - elseif l:type is# s:LSP_MESSAGE_TYPE_INFORMATION - let l:severity = g:ale_echo_msg_info_str - elseif l:type is# s:LSP_MESSAGE_TYPE_LOG - let l:severity = g:ale_echo_msg_log_str - else - " Default to warning just in case - let l:severity = g:ale_echo_msg_warning_str - endif - - let l:string = substitute(a:format, '\V%severity%', l:severity, 'g') - let l:string = substitute(l:string, '\V%linter%', a:linter_name, 'g') - let l:string = substitute(l:string, '\V%s\>', l:message, 'g') - - call ale#util#ShowMessage(l:string) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/maven.vim b/dotfiles/.vim/plugged/ale/autoload/ale/maven.vim deleted file mode 100644 index 4f87ebb7..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/maven.vim +++ /dev/null @@ -1,57 +0,0 @@ -" Description: Functions for working with Maven projects. -" -" Given a buffer number, find a Maven project root. -function! ale#maven#FindProjectRoot(buffer) abort - let l:wrapper_path = ale#path#FindNearestFile(a:buffer, 'mvnw') - - if !empty(l:wrapper_path) - return fnamemodify(l:wrapper_path, ':h') - endif - - let l:pom_path = ale#path#FindNearestFile(a:buffer, 'pom.xml') - - if !empty(l:pom_path) - return fnamemodify(l:pom_path, ':h') - endif - - return '' -endfunction - -" Given a buffer number, find the path to the executable. -" First search on the path for 'mvnw' (mvnw.cmd on Windows), if nothing is found, -" try the global command. Returns an empty string if cannot find the executable. -function! ale#maven#FindExecutable(buffer) abort - let l:wrapper_cmd = has('unix') ? 'mvnw' : 'mvnw.cmd' - let l:wrapper_path = ale#path#FindNearestFile(a:buffer, l:wrapper_cmd) - - if !empty(l:wrapper_path) && executable(l:wrapper_path) - return l:wrapper_path - endif - - if executable('mvn') - return 'mvn' - endif - - return '' -endfunction - -" Given a buffer number, get a working directory and command to print the -" classpath of the root project. -" -" Returns an empty string for the command if Maven is not detected. -function! ale#maven#BuildClasspathCommand(buffer) abort - let l:executable = ale#maven#FindExecutable(a:buffer) - - if !empty(l:executable) - let l:project_root = ale#maven#FindProjectRoot(a:buffer) - - if !empty(l:project_root) - return [ - \ l:project_root, - \ ale#Escape(l:executable) . ' dependency:build-classpath' - \] - endif - endif - - return ['', ''] -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/node.vim b/dotfiles/.vim/plugged/ale/autoload/ale/node.vim deleted file mode 100644 index 9e11ca7e..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/node.vim +++ /dev/null @@ -1,22 +0,0 @@ -" Author: w0rp -" Description: Functions for working with Node executables. - -call ale#Set('windows_node_executable_path', 'node.exe') - -" Create a executable string which executes a Node.js script command with a -" Node.js executable if needed. -" -" The executable string should not be escaped before passing it to this -" function, the executable string will be escaped when returned by this -" function. -" -" The executable is only prefixed for Windows machines -function! ale#node#Executable(buffer, executable) abort - if has('win32') && a:executable =~? '\.js$' - let l:node = ale#Var(a:buffer, 'windows_node_executable_path') - - return ale#Escape(l:node) . ' ' . ale#Escape(a:executable) - endif - - return ale#Escape(a:executable) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/organize_imports.vim b/dotfiles/.vim/plugged/ale/autoload/ale/organize_imports.vim deleted file mode 100644 index a6e77863..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/organize_imports.vim +++ /dev/null @@ -1,65 +0,0 @@ -" Author: Jerko Steiner -" Description: Organize imports support for tsserver - -function! ale#organize_imports#HandleTSServerResponse(conn_id, response) abort - if get(a:response, 'command', '') isnot# 'organizeImports' - return - endif - - if get(a:response, 'success', v:false) isnot v:true - return - endif - - let l:file_code_edits = a:response.body - - call ale#code_action#HandleCodeAction( - \ { - \ 'description': 'Organize Imports', - \ 'changes': l:file_code_edits, - \ }, - \ { - \ 'conn_id': a:conn_id, - \ 'should_save': !&hidden, - \ }, - \) -endfunction - -function! s:OnReady(linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - - if a:linter.lsp isnot# 'tsserver' - call ale#util#Execute('echom ''OrganizeImports currently only works with tsserver''') - - return - endif - - let l:buffer = a:lsp_details.buffer - - let l:Callback = function('ale#organize_imports#HandleTSServerResponse') - - call ale#lsp#RegisterCallback(l:id, l:Callback) - - let l:message = ale#lsp#tsserver_message#OrganizeImports(l:buffer) - - let l:request_id = ale#lsp#Send(l:id, l:message) -endfunction - -function! s:OrganizeImports(linter) abort - let l:buffer = bufnr('') - let [l:line, l:column] = getpos('.')[1:2] - - if a:linter.lsp isnot# 'tsserver' - let l:column = min([l:column, len(getline(l:line))]) - endif - - let l:Callback = function('s:OnReady') - call ale#lsp_linter#StartLSP(l:buffer, a:linter, l:Callback) -endfunction - -function! ale#organize_imports#Execute() abort - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - call s:OrganizeImports(l:linter) - endif - endfor -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/other_source.vim b/dotfiles/.vim/plugged/ale/autoload/ale/other_source.vim deleted file mode 100644 index 1a092034..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/other_source.vim +++ /dev/null @@ -1,21 +0,0 @@ -" Tell ALE that another source has started checking a buffer. -function! ale#other_source#StartChecking(buffer, linter_name) abort - call ale#engine#InitBufferInfo(a:buffer) - let l:list = g:ale_buffer_info[a:buffer].active_other_sources_list - - call add(l:list, a:linter_name) - call uniq(sort(l:list)) -endfunction - -" Show some results, and stop checking a buffer. -" To clear results or cancel checking a buffer, an empty List can be given. -function! ale#other_source#ShowResults(buffer, linter_name, loclist) abort - call ale#engine#InitBufferInfo(a:buffer) - let l:info = g:ale_buffer_info[a:buffer] - - " Remove this linter name from the active list. - let l:list = l:info.active_other_sources_list - call filter(l:list, 'v:val isnot# a:linter_name') - - call ale#engine#HandleLoclist(a:linter_name, a:buffer, a:loclist, 1) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/path.vim b/dotfiles/.vim/plugged/ale/autoload/ale/path.vim deleted file mode 100644 index cc5c6658..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/path.vim +++ /dev/null @@ -1,252 +0,0 @@ -" Author: w0rp -" Description: Functions for working with paths in the filesystem. - -" simplify a path, and fix annoying issues with paths on Windows. -" -" Forward slashes are changed to back slashes so path equality works better -" on Windows. Back slashes are changed to forward slashes on Unix. -" -" Unix paths can technically contain back slashes, but in practice no path -" should, and replacing back slashes with forward slashes makes linters work -" in environments like MSYS. -" -" Paths starting with more than one forward slash are changed to only one -" forward slash, to prevent the paths being treated as special MSYS paths. -function! ale#path#Simplify(path) abort - if has('unix') - let l:unix_path = substitute(a:path, '\\', '/', 'g') - - return substitute(simplify(l:unix_path), '^//\+', '/', 'g') " no-custom-checks - endif - - let l:win_path = substitute(a:path, '/', '\\', 'g') - - return substitute(simplify(l:win_path), '^\\\+', '\', 'g') " no-custom-checks -endfunction - -" Simplify a path without a Windows drive letter. -" This function can be used for checking if paths are equal. -function! ale#path#RemoveDriveLetter(path) abort - return has('win32') && a:path[1:2] is# ':\' - \ ? ale#path#Simplify(a:path[2:]) - \ : ale#path#Simplify(a:path) -endfunction - -" Given a buffer and a filename, find the nearest file by searching upwards -" through the paths relative to the given buffer. -function! ale#path#FindNearestFile(buffer, filename) abort - let l:buffer_filename = fnamemodify(bufname(a:buffer), ':p') - let l:buffer_filename = fnameescape(l:buffer_filename) - - let l:relative_path = findfile(a:filename, l:buffer_filename . ';') - - if !empty(l:relative_path) - return fnamemodify(l:relative_path, ':p') - endif - - return '' -endfunction - -" Given a buffer and a directory name, find the nearest directory by searching upwards -" through the paths relative to the given buffer. -function! ale#path#FindNearestDirectory(buffer, directory_name) abort - let l:buffer_filename = fnamemodify(bufname(a:buffer), ':p') - let l:buffer_filename = fnameescape(l:buffer_filename) - - let l:relative_path = finddir(a:directory_name, l:buffer_filename . ';') - - if !empty(l:relative_path) - return fnamemodify(l:relative_path, ':p') - endif - - return '' -endfunction - -" Given a buffer, a string to search for, and a global fallback for when -" the search fails, look for a file in parent paths, and if that fails, -" use the global fallback path instead. -function! ale#path#ResolveLocalPath(buffer, search_string, global_fallback) abort - " Search for a locally installed file first. - let l:path = ale#path#FindNearestFile(a:buffer, a:search_string) - - " If the search fails, try the global executable instead. - if empty(l:path) - let l:path = a:global_fallback - endif - - return l:path -endfunction - -" Given a buffer number, a base variable name, and a list of paths to search -" for in ancestor directories, detect the executable path for a program. -function! ale#path#FindNearestExecutable(buffer, path_list) abort - for l:path in a:path_list - if ale#path#IsAbsolute(l:path) - let l:executable = filereadable(l:path) ? l:path : '' - else - let l:executable = ale#path#FindNearestFile(a:buffer, l:path) - endif - - if !empty(l:executable) - return l:executable - endif - endfor - - return '' -endfunction - -" Given a buffer number, a base variable name, and a list of paths to search -" for in ancestor directories, detect the executable path for a program. -" -" The use_global and executable options for the relevant program will be used. -function! ale#path#FindExecutable(buffer, base_var_name, path_list) abort - if ale#Var(a:buffer, a:base_var_name . '_use_global') - return ale#Var(a:buffer, a:base_var_name . '_executable') - endif - - let l:nearest = ale#path#FindNearestExecutable(a:buffer, a:path_list) - - if !empty(l:nearest) - return l:nearest - endif - - return ale#Var(a:buffer, a:base_var_name . '_executable') -endfunction - -" Return 1 if a path is an absolute path. -function! ale#path#IsAbsolute(filename) abort - if has('win32') && a:filename[:0] is# '\' - return 1 - endif - - " Check for /foo and C:\foo, etc. - return a:filename[:0] is# '/' || a:filename[1:2] is# ':\' -endfunction - -let s:temp_dir = ale#path#Simplify(fnamemodify(ale#util#Tempname(), ':h:h')) - -" Given a filename, return 1 if the file represents some temporary file -" created by Vim. -function! ale#path#IsTempName(filename) abort - return ale#path#Simplify(a:filename)[:len(s:temp_dir) - 1] is# s:temp_dir -endfunction - -" Given a base directory, which must not have a trailing slash, and a -" filename, which may have an absolute path a path relative to the base -" directory, return the absolute path to the file. -function! ale#path#GetAbsPath(base_directory, filename) abort - if ale#path#IsAbsolute(a:filename) - return ale#path#Simplify(a:filename) - endif - - let l:sep = has('win32') ? '\' : '/' - - return ale#path#Simplify(a:base_directory . l:sep . a:filename) -endfunction - -" Given a path, return the directory name for that path, with no trailing -" slashes. If the argument is empty(), return an empty string. -function! ale#path#Dirname(path) abort - if empty(a:path) - return '' - endif - - " For /foo/bar/ we need :h:h to get /foo - if a:path[-1:] is# '/' || (has('win32') && a:path[-1:] is# '\') - return fnamemodify(a:path, ':h:h') - endif - - return fnamemodify(a:path, ':h') -endfunction - -" Given a buffer number and a relative or absolute path, return 1 if the -" two paths represent the same file on disk. -function! ale#path#IsBufferPath(buffer, complex_filename) abort - " If the path is one of many different names for stdin, we have a match. - if a:complex_filename is# '-' - \|| a:complex_filename is# 'stdin' - \|| a:complex_filename[:0] is# '<' - return 1 - endif - - let l:test_filename = ale#path#Simplify(a:complex_filename) - - if l:test_filename[:1] is# './' - let l:test_filename = l:test_filename[2:] - endif - - if l:test_filename[:1] is# '..' - " Remove ../../ etc. from the front of the path. - let l:test_filename = substitute(l:test_filename, '\v^(\.\.[/\\])+', '/', '') - endif - - " Use the basename for temporary files, as they are likely our files. - if ale#path#IsTempName(l:test_filename) - let l:test_filename = fnamemodify(l:test_filename, ':t') - endif - - let l:buffer_filename = expand('#' . a:buffer . ':p') - - return l:buffer_filename is# l:test_filename - \ || l:buffer_filename[-len(l:test_filename):] is# l:test_filename -endfunction - -" Given a path, return every component of the path, moving upwards. -function! ale#path#Upwards(path) abort - let l:pattern = has('win32') ? '\v/+|\\+' : '\v/+' - let l:sep = has('win32') ? '\' : '/' - let l:parts = split(ale#path#Simplify(a:path), l:pattern) - let l:path_list = [] - - while !empty(l:parts) - call add(l:path_list, join(l:parts, l:sep)) - let l:parts = l:parts[:-2] - endwhile - - if has('win32') && a:path =~# '^[a-zA-z]:\' - " Add \ to C: for C:\, etc. - let l:path_list[-1] .= '\' - elseif a:path[0] is# '/' - " If the path starts with /, even on Windows, add / and / to all paths. - call map(l:path_list, '''/'' . v:val') - call add(l:path_list, '/') - endif - - return l:path_list -endfunction - -" Convert a filesystem path to a file:// URI -" relatives paths will not be prefixed with the protocol. -" For Windows paths, the `:` in C:\ etc. will not be percent-encoded. -function! ale#path#ToFileURI(path) abort - let l:has_drive_letter = a:path[1:2] is# ':\' - - return substitute( - \ ((l:has_drive_letter || a:path[:0] is# '/') ? 'file://' : '') - \ . (l:has_drive_letter ? '/' . a:path[:2] : '') - \ . ale#uri#Encode(l:has_drive_letter ? a:path[3:] : a:path), - \ '\\', - \ '/', - \ 'g', - \) -endfunction - -function! ale#path#FromFileURI(uri) abort - if a:uri[:6] is? 'file://' - let l:encoded_path = a:uri[7:] - elseif a:uri[:4] is? 'file:' - let l:encoded_path = a:uri[5:] - else - let l:encoded_path = a:uri - endif - - let l:path = ale#uri#Decode(l:encoded_path) - - " If the path is like /C:/foo/bar, it should be C:\foo\bar instead. - if has('win32') && l:path =~# '^/[a-zA-Z][:|]' - let l:path = substitute(l:path[1:], '/', '\\', 'g') - let l:path = l:path[0] . ':' . l:path[2:] - endif - - return l:path -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/pattern_options.vim b/dotfiles/.vim/plugged/ale/autoload/ale/pattern_options.vim deleted file mode 100644 index 14e2142d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/pattern_options.vim +++ /dev/null @@ -1,47 +0,0 @@ -" Author: w0rp -" Description: Set options in files based on regex patterns. - -" These variables are used to cache the sorting of patterns below. -let s:last_pattern_options = {} -let s:sorted_items = [] - -function! s:CmpPatterns(left_item, right_item) abort - if a:left_item[0] < a:right_item[0] - return -1 - endif - - if a:left_item[0] > a:right_item[0] - return 1 - endif - - return 0 -endfunction - -function! ale#pattern_options#SetOptions(buffer) abort - let l:pattern_options = get(g:, 'ale_pattern_options', {}) - - if empty(l:pattern_options) - " Stop if no options are set. - return - endif - - " The items will only be sorted whenever the patterns change. - if l:pattern_options != s:last_pattern_options - let s:last_pattern_options = deepcopy(l:pattern_options) - " The patterns are sorted, so they are applied consistently. - let s:sorted_items = sort( - \ items(l:pattern_options), - \ function('s:CmpPatterns') - \) - endif - - let l:filename = expand('#' . a:buffer . ':p') - - for [l:pattern, l:options] in s:sorted_items - if match(l:filename, l:pattern) >= 0 - for [l:key, l:value] in items(l:options) - call setbufvar(a:buffer, l:key, l:value) - endfor - endif - endfor -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/powershell.vim b/dotfiles/.vim/plugged/ale/autoload/ale/powershell.vim deleted file mode 100644 index 8c163206..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/powershell.vim +++ /dev/null @@ -1,32 +0,0 @@ -" Author: zigford -" Description: Functions for integrating with Powershell linters. - -" Write a powershell script to a temp file for execution -" return the command used to execute it -function! s:TemporaryPSScript(buffer, input) abort - let l:filename = 'script.ps1' - " Create a temp dir to house our temp .ps1 script - " a temp dir is needed as powershell needs the .ps1 - " extension - let l:tempdir = ale#util#Tempname() . (has('win32') ? '\' : '/') - let l:tempscript = l:tempdir . l:filename - " Create the temporary directory for the file, unreadable by 'other' - " users. - call mkdir(l:tempdir, '', 0750) - " Automatically delete the directory later. - call ale#command#ManageDirectory(a:buffer, l:tempdir) - " Write the script input out to a file. - call ale#util#Writefile(a:buffer, a:input, l:tempscript) - - return l:tempscript -endfunction - -function! ale#powershell#RunPowerShell(buffer, base_var_name, command) abort - let l:executable = ale#Var(a:buffer, a:base_var_name . '_executable') - let l:tempscript = s:TemporaryPSScript(a:buffer, a:command) - - return ale#Escape(l:executable) - \ . ' -Exe Bypass -NoProfile -File ' - \ . ale#Escape(l:tempscript) - \ . ' %t' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/preview.vim b/dotfiles/.vim/plugged/ale/autoload/ale/preview.vim deleted file mode 100644 index 1aca03ea..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/preview.vim +++ /dev/null @@ -1,137 +0,0 @@ -" Author: w0rp -" Description: Preview windows for showing whatever information in. - -if !has_key(s:, 'last_list') - let s:last_list = [] -endif - -if !has_key(s:, 'last_options') - let s:last_options = {} -endif - -function! ale#preview#SetLastSelection(item_list, options) abort - let s:last_list = a:item_list - let s:last_options = { - \ 'open_in': get(a:options, 'open_in', 'current-buffer'), - \ 'use_relative_paths': get(a:options, 'use_relative_paths', 0), - \} -endfunction - -" Open a preview window and show some lines in it. -" A second argument can be passed as a Dictionary with options. They are... -" -" filetype - The filetype to use, defaulting to 'ale-preview' -" stay_here - If 1, stay in the window you came from. -function! ale#preview#Show(lines, ...) abort - let l:options = get(a:000, 0, {}) - - silent pedit ALEPreviewWindow - wincmd P - - setlocal modifiable - setlocal noreadonly - setlocal nobuflisted - setlocal buftype=nofile - setlocal bufhidden=wipe - :%d - call setline(1, a:lines) - setlocal nomodifiable - setlocal readonly - let &l:filetype = get(l:options, 'filetype', 'ale-preview') - - for l:command in get(l:options, 'commands', []) - call execute(l:command) - endfor - - if get(l:options, 'stay_here') - wincmd p - endif -endfunction - -" Close the preview window if the filetype matches the given one. -function! ale#preview#CloseIfTypeMatches(filetype) abort - for l:win in getwininfo() - let l:wintype = gettabwinvar(l:win.tabnr, l:win.winnr, '&filetype') - - if l:wintype is# a:filetype - silent! pclose! - endif - endfor -endfunction - -" Show a location selection preview window, given some items. -" Each item should have 'filename', 'line', and 'column' keys. -function! ale#preview#ShowSelection(item_list, ...) abort - let l:options = get(a:000, 0, {}) - let l:sep = has('win32') ? '\' : '/' - let l:lines = [] - - " Create lines to display to users. - for l:item in a:item_list - let l:match = get(l:item, 'match', '') - let l:filename = l:item.filename - - if get(l:options, 'use_relative_paths') - let l:cwd = getcwd() " no-custom-checks - let l:filename = substitute(l:filename, '^' . l:cwd . l:sep, '', '') - endif - - call add( - \ l:lines, - \ l:filename - \ . ':' . l:item.line - \ . ':' . l:item.column - \ . (!empty(l:match) ? ' ' . l:match : ''), - \) - endfor - - call ale#preview#Show(l:lines, {'filetype': 'ale-preview-selection'}) - let b:ale_preview_item_list = a:item_list - let b:ale_preview_item_open_in = get(l:options, 'open_in', 'current-buffer') - - " Jump to an index for a previous selection, if set. - if has_key(l:options, 'jump_to_index') - let l:pos = getpos('.') - let l:pos[1] = l:options.jump_to_index + 1 - call setpos('.', l:pos) - endif - - " Remember preview state, so we can repeat it later. - call ale#preview#SetLastSelection(a:item_list, l:options) -endfunction - -function! ale#preview#RepeatSelection() abort - if !empty(s:last_list) - call ale#preview#ShowSelection(s:last_list, s:last_options) - endif -endfunction - -function! s:Open(open_in) abort - let l:item_list = get(b:, 'ale_preview_item_list', []) - let l:index = getpos('.')[1] - 1 - let l:item = get(l:item_list, l:index, {}) - - if empty(l:item) - return - endif - - " Remember an index to jump to when repeating a selection. - let s:last_options.jump_to_index = l:index - - :q! - - call ale#util#Open( - \ l:item.filename, - \ l:item.line, - \ l:item.column, - \ {'open_in': a:open_in}, - \) -endfunction - -function! ale#preview#OpenSelection() abort - call s:Open(b:ale_preview_item_open_in) -endfunction - -function! ale#preview#OpenSelectionInTab() abort - call s:Open('tab') -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/python.vim b/dotfiles/.vim/plugged/ale/autoload/ale/python.vim deleted file mode 100644 index 7a998414..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/python.vim +++ /dev/null @@ -1,170 +0,0 @@ -" Author: w0rp -" Description: Functions for integrating with Python linters. - -call ale#Set('python_auto_pipenv', '0') -call ale#Set('python_auto_poetry', '0') - -let s:sep = has('win32') ? '\' : '/' -" bin is used for Unix virtualenv directories, and Scripts is for Windows. -let s:bin_dir = has('unix') ? 'bin' : 'Scripts' -let g:ale_virtualenv_dir_names = get(g:, 'ale_virtualenv_dir_names', [ -\ '.env', -\ '.venv', -\ 'env', -\ 've-py3', -\ 've', -\ 'virtualenv', -\ 'venv', -\]) - -function! ale#python#FindProjectRootIni(buffer) abort - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - " If you change this, update ale-python-root documentation. - if filereadable(l:path . '/MANIFEST.in') - \|| filereadable(l:path . '/setup.cfg') - \|| filereadable(l:path . '/pytest.ini') - \|| filereadable(l:path . '/tox.ini') - \|| filereadable(l:path . '/.pyre_configuration.local') - \|| filereadable(l:path . '/mypy.ini') - \|| filereadable(l:path . '/.mypy.ini') - \|| filereadable(l:path . '/pycodestyle.cfg') - \|| filereadable(l:path . '/.flake8') - \|| filereadable(l:path . '/.flake8rc') - \|| filereadable(l:path . '/pylama.ini') - \|| filereadable(l:path . '/pylintrc') - \|| filereadable(l:path . '/.pylintrc') - \|| filereadable(l:path . '/pyrightconfig.json') - \|| filereadable(l:path . '/pyrightconfig.toml') - \|| filereadable(l:path . '/Pipfile') - \|| filereadable(l:path . '/Pipfile.lock') - \|| filereadable(l:path . '/poetry.lock') - \|| filereadable(l:path . '/pyproject.toml') - \|| filereadable(l:path . '/.tool-versions') - return l:path - endif - endfor - - return '' -endfunction - -" Given a buffer number, find the project root directory for Python. -" The root directory is defined as the first directory found while searching -" upwards through paths, including the current directory, until a path -" containing an init file (one from MANIFEST.in, setup.cfg, pytest.ini, -" tox.ini) is found. If it is not possible to find the project root directory -" via init file, then it will be defined as the first directory found -" searching upwards through paths, including the current directory, until no -" __init__.py files is found. -function! ale#python#FindProjectRoot(buffer) abort - let l:ini_root = ale#python#FindProjectRootIni(a:buffer) - - if !empty(l:ini_root) - return l:ini_root - endif - - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - if !filereadable(l:path . '/__init__.py') - return l:path - endif - endfor - - return '' -endfunction - -" Given a buffer number, find a virtualenv path for Python. -function! ale#python#FindVirtualenv(buffer) abort - for l:path in ale#path#Upwards(expand('#' . a:buffer . ':p:h')) - " Skip empty path components returned in MSYS. - if empty(l:path) - continue - endif - - for l:dirname in ale#Var(a:buffer, 'virtualenv_dir_names') - let l:venv_dir = ale#path#Simplify( - \ join([l:path, l:dirname], s:sep) - \) - let l:script_filename = ale#path#Simplify( - \ join([l:venv_dir, s:bin_dir, 'activate'], s:sep) - \) - - if filereadable(l:script_filename) - return l:venv_dir - endif - endfor - endfor - - return $VIRTUAL_ENV -endfunction - -" Given a buffer number and a command name, find the path to the executable. -" First search on a virtualenv for Python, if nothing is found, try the global -" command. Returns an empty string if cannot find the executable -function! ale#python#FindExecutable(buffer, base_var_name, path_list) abort - if ale#Var(a:buffer, a:base_var_name . '_use_global') - return ale#Var(a:buffer, a:base_var_name . '_executable') - endif - - let l:virtualenv = ale#python#FindVirtualenv(a:buffer) - - if !empty(l:virtualenv) - for l:path in a:path_list - let l:ve_executable = ale#path#Simplify( - \ join([l:virtualenv, s:bin_dir, l:path], s:sep) - \) - - if executable(l:ve_executable) - return l:ve_executable - endif - endfor - endif - - return ale#Var(a:buffer, a:base_var_name . '_executable') -endfunction - -" Handle traceback.print_exception() output starting in the first a:limit lines. -function! ale#python#HandleTraceback(lines, limit) abort - let l:nlines = len(a:lines) - let l:limit = a:limit > l:nlines ? l:nlines : a:limit - let l:start = 0 - - while l:start < l:limit - if a:lines[l:start] is# 'Traceback (most recent call last):' - break - endif - - let l:start += 1 - endwhile - - if l:start >= l:limit - return [] - endif - - let l:end = l:start + 1 - - " Traceback entries are always prefixed with 2 spaces. - " SyntaxError marker (if present) is prefixed with at least 4 spaces. - " Final exc line starts with exception class name (never a space). - while l:end < l:nlines && a:lines[l:end][0] is# ' ' - let l:end += 1 - endwhile - - let l:exc_line = l:end < l:nlines - \ ? a:lines[l:end] - \ : 'An exception was thrown.' - - return [{ - \ 'lnum': 1, - \ 'text': l:exc_line . ' (See :ALEDetail)', - \ 'detail': join(a:lines[(l:start):(l:end)], "\n"), - \}] -endfunction - -" Detects whether a pipenv environment is present. -function! ale#python#PipenvPresent(buffer) abort - return findfile('Pipfile.lock', expand('#' . a:buffer . ':p:h') . ';') isnot# '' -endfunction - -" Detects whether a poetry environment is present. -function! ale#python#PoetryPresent(buffer) abort - return findfile('poetry.lock', expand('#' . a:buffer . ':p:h') . ';') isnot# '' -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/racket.vim b/dotfiles/.vim/plugged/ale/autoload/ale/racket.vim deleted file mode 100644 index ff896108..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/racket.vim +++ /dev/null @@ -1,12 +0,0 @@ -function! ale#racket#FindProjectRoot(buffer) abort - let l:cwd = expand('#' . a:buffer . ':p:h') - let l:highest_init = l:cwd - - for l:path in ale#path#Upwards(l:cwd) - if filereadable(l:path.'/init.rkt') - let l:highest_init = l:path - endif - endfor - - return l:highest_init -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/references.vim b/dotfiles/.vim/plugged/ale/autoload/ale/references.vim deleted file mode 100644 index c32663fe..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/references.vim +++ /dev/null @@ -1,187 +0,0 @@ -let g:ale_default_navigation = get(g:, 'ale_default_navigation', 'buffer') - -let s:references_map = {} - -" Used to get the references map in tests. -function! ale#references#GetMap() abort - return deepcopy(s:references_map) -endfunction - -" Used to set the references map in tests. -function! ale#references#SetMap(map) abort - let s:references_map = a:map -endfunction - -function! ale#references#ClearLSPData() abort - let s:references_map = {} -endfunction - -function! ale#references#FormatTSResponseItem(response_item, options) abort - if get(a:options, 'open_in') is# 'quickfix' - return { - \ 'filename': a:response_item.file, - \ 'lnum': a:response_item.start.line, - \ 'col': a:response_item.start.offset, - \} - else - return { - \ 'filename': a:response_item.file, - \ 'line': a:response_item.start.line, - \ 'column': a:response_item.start.offset, - \ 'match': substitute(a:response_item.lineText, '^\s*\(.\{-}\)\s*$', '\1', ''), - \} - endif -endfunction - -function! ale#references#HandleTSServerResponse(conn_id, response) abort - if get(a:response, 'command', '') is# 'references' - \&& has_key(s:references_map, a:response.request_seq) - let l:options = remove(s:references_map, a:response.request_seq) - - if get(a:response, 'success', v:false) is v:true - let l:item_list = [] - - for l:response_item in a:response.body.refs - call add( - \ l:item_list, - \ ale#references#FormatTSResponseItem(l:response_item, l:options) - \) - endfor - - if empty(l:item_list) - call ale#util#Execute('echom ''No references found.''') - else - if get(l:options, 'open_in') is# 'quickfix' - call setqflist([], 'r') - call setqflist(l:item_list, 'a') - call ale#util#Execute('cc 1') - else - call ale#preview#ShowSelection(l:item_list, l:options) - endif - endif - endif - endif -endfunction - -function! ale#references#FormatLSPResponseItem(response_item, options) abort - if get(a:options, 'open_in') is# 'quickfix' - return { - \ 'filename': ale#util#ToResource(a:response_item.uri), - \ 'lnum': a:response_item.range.start.line + 1, - \ 'col': a:response_item.range.start.character + 1, - \} - else - return { - \ 'filename': ale#util#ToResource(a:response_item.uri), - \ 'line': a:response_item.range.start.line + 1, - \ 'column': a:response_item.range.start.character + 1, - \} - endif -endfunction - -function! ale#references#HandleLSPResponse(conn_id, response) abort - if has_key(a:response, 'id') - \&& has_key(s:references_map, a:response.id) - let l:options = remove(s:references_map, a:response.id) - - " The result can be a Dictionary item, a List of the same, or null. - let l:result = get(a:response, 'result', []) - let l:item_list = [] - - if type(l:result) is v:t_list - for l:response_item in l:result - call add(l:item_list, - \ ale#references#FormatLSPResponseItem(l:response_item, l:options) - \) - endfor - endif - - if empty(l:item_list) - call ale#util#Execute('echom ''No references found.''') - else - if get(l:options, 'open_in') is# 'quickfix' - call setqflist([], 'r') - call setqflist(l:item_list, 'a') - call ale#util#Execute('cc 1') - else - call ale#preview#ShowSelection(l:item_list, l:options) - endif - endif - endif -endfunction - -function! s:OnReady(line, column, options, linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - - if !ale#lsp#HasCapability(l:id, 'references') - return - endif - - let l:buffer = a:lsp_details.buffer - - let l:Callback = a:linter.lsp is# 'tsserver' - \ ? function('ale#references#HandleTSServerResponse') - \ : function('ale#references#HandleLSPResponse') - - call ale#lsp#RegisterCallback(l:id, l:Callback) - - if a:linter.lsp is# 'tsserver' - let l:message = ale#lsp#tsserver_message#References( - \ l:buffer, - \ a:line, - \ a:column - \) - else - " Send a message saying the buffer has changed first, or the - " references position probably won't make sense. - call ale#lsp#NotifyForChanges(l:id, l:buffer) - - let l:message = ale#lsp#message#References(l:buffer, a:line, a:column) - endif - - let l:request_id = ale#lsp#Send(l:id, l:message) - - let s:references_map[l:request_id] = { - \ 'use_relative_paths': has_key(a:options, 'use_relative_paths') ? a:options.use_relative_paths : 0, - \ 'open_in': get(a:options, 'open_in', 'current-buffer'), - \} -endfunction - -function! ale#references#Find(...) abort - let l:options = {} - - if len(a:000) > 0 - for l:option in a:000 - if l:option is? '-relative' - let l:options.use_relative_paths = 1 - elseif l:option is? '-tab' - let l:options.open_in = 'tab' - elseif l:option is? '-split' - let l:options.open_in = 'split' - elseif l:option is? '-vsplit' - let l:options.open_in = 'vsplit' - elseif l:option is? '-quickfix' - let l:options.open_in = 'quickfix' - endif - endfor - endif - - if !has_key(l:options, 'open_in') - let l:default_navigation = ale#Var(bufnr(''), 'default_navigation') - - if index(['tab', 'split', 'vsplit'], l:default_navigation) >= 0 - let l:options.open_in = l:default_navigation - endif - endif - - let l:buffer = bufnr('') - let [l:line, l:column] = getpos('.')[1:2] - let l:column = min([l:column, len(getline(l:line))]) - let l:Callback = function('s:OnReady', [l:line, l:column, l:options]) - - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - call ale#lsp_linter#StartLSP(l:buffer, l:linter, l:Callback) - endif - endfor -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/rename.vim b/dotfiles/.vim/plugged/ale/autoload/ale/rename.vim deleted file mode 100644 index a722cc94..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/rename.vim +++ /dev/null @@ -1,210 +0,0 @@ -" Author: Jerko Steiner -" Description: Rename symbol support for LSP / tsserver - -let s:rename_map = {} - -" Used to get the rename map in tests. -function! ale#rename#GetMap() abort - return deepcopy(s:rename_map) -endfunction - -" Used to set the rename map in tests. -function! ale#rename#SetMap(map) abort - let s:rename_map = a:map -endfunction - -function! ale#rename#ClearLSPData() abort - let s:rename_map = {} -endfunction - -let g:ale_rename_tsserver_find_in_comments = get(g:, 'ale_rename_tsserver_find_in_comments') -let g:ale_rename_tsserver_find_in_strings = get(g:, 'ale_rename_tsserver_find_in_strings') - -function! s:message(message) abort - call ale#util#Execute('echom ' . string(a:message)) -endfunction - -function! ale#rename#HandleTSServerResponse(conn_id, response) abort - if get(a:response, 'command', '') isnot# 'rename' - return - endif - - if !has_key(s:rename_map, a:response.request_seq) - return - endif - - let l:options = remove(s:rename_map, a:response.request_seq) - - let l:old_name = l:options.old_name - let l:new_name = l:options.new_name - - if get(a:response, 'success', v:false) is v:false - let l:message = get(a:response, 'message', 'unknown') - call s:message('Error renaming "' . l:old_name . '" to: "' . l:new_name - \ . '". Reason: ' . l:message) - - return - endif - - let l:changes = [] - - for l:response_item in a:response.body.locs - let l:filename = l:response_item.file - let l:text_changes = [] - - for l:loc in l:response_item.locs - call add(l:text_changes, { - \ 'start': { - \ 'line': l:loc.start.line, - \ 'offset': l:loc.start.offset, - \ }, - \ 'end': { - \ 'line': l:loc.end.line, - \ 'offset': l:loc.end.offset, - \ }, - \ 'newText': l:new_name, - \}) - endfor - - call add(l:changes, { - \ 'fileName': l:filename, - \ 'textChanges': l:text_changes, - \}) - endfor - - if empty(l:changes) - call s:message('Error renaming "' . l:old_name . '" to: "' . l:new_name . '"') - - return - endif - - call ale#code_action#HandleCodeAction( - \ { - \ 'description': 'rename', - \ 'changes': l:changes, - \ }, - \ { - \ 'conn_id': a:conn_id, - \ 'should_save': !&hidden, - \ }, - \) -endfunction - -function! ale#rename#HandleLSPResponse(conn_id, response) abort - if has_key(a:response, 'id') - \&& has_key(s:rename_map, a:response.id) - let l:options = remove(s:rename_map, a:response.id) - - if !has_key(a:response, 'result') - call s:message('No rename result received from server') - - return - endif - - let l:changes_map = ale#code_action#GetChanges(a:response.result) - - if empty(l:changes_map) - call s:message('No changes received from server') - - return - endif - - let l:changes = ale#code_action#BuildChangesList(l:changes_map) - - call ale#code_action#HandleCodeAction( - \ { - \ 'description': 'rename', - \ 'changes': l:changes, - \ }, - \ { - \ 'conn_id': a:conn_id, - \ 'should_save': !&hidden, - \ }, - \) - endif -endfunction - -function! s:OnReady(line, column, options, linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - - if !ale#lsp#HasCapability(l:id, 'rename') - return - endif - - let l:buffer = a:lsp_details.buffer - - let l:Callback = a:linter.lsp is# 'tsserver' - \ ? function('ale#rename#HandleTSServerResponse') - \ : function('ale#rename#HandleLSPResponse') - - call ale#lsp#RegisterCallback(l:id, l:Callback) - - if a:linter.lsp is# 'tsserver' - let l:message = ale#lsp#tsserver_message#Rename( - \ l:buffer, - \ a:line, - \ a:column, - \ g:ale_rename_tsserver_find_in_comments, - \ g:ale_rename_tsserver_find_in_strings, - \) - else - " Send a message saying the buffer has changed first, or the - " rename position probably won't make sense. - call ale#lsp#NotifyForChanges(l:id, l:buffer) - - let l:message = ale#lsp#message#Rename( - \ l:buffer, - \ a:line, - \ a:column, - \ a:options.new_name - \) - endif - - let l:request_id = ale#lsp#Send(l:id, l:message) - - let s:rename_map[l:request_id] = a:options -endfunction - -function! s:ExecuteRename(linter, options) abort - let l:buffer = bufnr('') - let [l:line, l:column] = getpos('.')[1:2] - - if a:linter.lsp isnot# 'tsserver' - let l:column = min([l:column, len(getline(l:line))]) - endif - - let l:Callback = function('s:OnReady', [l:line, l:column, a:options]) - call ale#lsp_linter#StartLSP(l:buffer, a:linter, l:Callback) -endfunction - -function! ale#rename#Execute() abort - let l:lsp_linters = [] - - for l:linter in ale#linter#Get(&filetype) - if !empty(l:linter.lsp) - call add(l:lsp_linters, l:linter) - endif - endfor - - if empty(l:lsp_linters) - call s:message('No active LSPs') - - return - endif - - let l:old_name = expand('') - let l:new_name = ale#util#Input('New name: ', l:old_name) - - if empty(l:new_name) - call s:message('New name cannot be empty!') - - return - endif - - for l:lsp_linter in l:lsp_linters - call s:ExecuteRename(l:lsp_linter, { - \ 'old_name': l:old_name, - \ 'new_name': l:new_name, - \}) - endfor -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/ruby.vim b/dotfiles/.vim/plugged/ale/autoload/ale/ruby.vim deleted file mode 100644 index d941bb2c..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/ruby.vim +++ /dev/null @@ -1,83 +0,0 @@ -" Author: Eddie Lebow https://github.com/elebow -" Description: Functions for integrating with Ruby tools - -" Find the nearest dir containing "app", "db", and "config", and assume it is -" the root of a Rails app. -function! ale#ruby#FindRailsRoot(buffer) abort - for l:name in ['app', 'config', 'db'] - let l:dir = fnamemodify( - \ ale#path#FindNearestDirectory(a:buffer, l:name), - \ ':h:h' - \) - - if l:dir isnot# '.' - \&& isdirectory(l:dir . '/app') - \&& isdirectory(l:dir . '/config') - \&& isdirectory(l:dir . '/db') - return l:dir - endif - endfor - - return '' -endfunction - -" Find the nearest dir containing a potential ruby project. -function! ale#ruby#FindProjectRoot(buffer) abort - let l:dir = ale#ruby#FindRailsRoot(a:buffer) - - if isdirectory(l:dir) - return l:dir - endif - - for l:name in ['.solargraph.yml', 'Rakefile', 'Gemfile'] - let l:dir = fnamemodify( - \ ale#path#FindNearestFile(a:buffer, l:name), - \ ':h' - \) - - if l:dir isnot# '.' && isdirectory(l:dir) - return l:dir - endif - endfor - - return '' -endfunction - -" Handle output from rubocop and linters that depend on it (e.b. standardrb) -function! ale#ruby#HandleRubocopOutput(buffer, lines) abort - try - let l:errors = json_decode(a:lines[0]) - catch - return [] - endtry - - if !has_key(l:errors, 'summary') - \|| l:errors['summary']['offense_count'] == 0 - \|| empty(l:errors['files']) - return [] - endif - - let l:output = [] - - for l:error in l:errors['files'][0]['offenses'] - let l:start_col = l:error['location']['column'] + 0 - call add(l:output, { - \ 'lnum': l:error['location']['line'] + 0, - \ 'col': l:start_col, - \ 'end_col': l:start_col + l:error['location']['length'] - 1, - \ 'code': l:error['cop_name'], - \ 'text': l:error['message'], - \ 'type': ale_linters#ruby#rubocop#GetType(l:error['severity']), - \}) - endfor - - return l:output -endfunction - -function! ale#ruby#EscapeExecutable(executable, bundle_exec) abort - let l:exec_args = a:executable =~? 'bundle' - \ ? ' exec ' . a:bundle_exec - \ : '' - - return ale#Escape(a:executable) . l:exec_args -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/semver.vim b/dotfiles/.vim/plugged/ale/autoload/ale/semver.vim deleted file mode 100644 index e3eb49c0..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/semver.vim +++ /dev/null @@ -1,78 +0,0 @@ -let s:version_cache = {} - -" Reset the version cache used for parsing the version. -function! ale#semver#ResetVersionCache() abort - let s:version_cache = {} -endfunction - -function! ale#semver#ParseVersion(version_lines) abort - for l:line in a:version_lines - let l:match = matchlist(l:line, '\v(\d+)\.(\d+)(\.(\d+))?') - - if !empty(l:match) - return [l:match[1] + 0, l:match[2] + 0, l:match[4] + 0] - endif - endfor - - return [] -endfunction - -" Given an executable name and some lines of output, which can be empty, -" parse the version from the lines of output, or return the cached version -" triple [major, minor, patch] -" -" If the version cannot be found, an empty List will be returned instead. -function! s:GetVersion(executable, version_lines) abort - let l:version = get(s:version_cache, a:executable, []) - let l:parsed_version = ale#semver#ParseVersion(a:version_lines) - - if !empty(l:parsed_version) - let l:version = l:parsed_version - let s:version_cache[a:executable] = l:version - endif - - return l:version -endfunction - -function! ale#semver#RunWithVersionCheck(buffer, executable, command, Callback) abort - if empty(a:executable) - return '' - endif - - let l:cache = s:version_cache - - if has_key(s:version_cache, a:executable) - return a:Callback(a:buffer, s:version_cache[a:executable]) - endif - - return ale#command#Run( - \ a:buffer, - \ a:command, - \ {_, output -> a:Callback(a:buffer, s:GetVersion(a:executable, output))}, - \ {'output_stream': 'both', 'executable': a:executable} - \) -endfunction - -" Given two triples of integers [major, minor, patch], compare the triples -" and return 1 if the LHS is greater than or equal to the RHS. -" -" Pairs of [major, minor] can also be used for either argument. -" -" 0 will be returned if the LHS is an empty List. -function! ale#semver#GTE(lhs, rhs) abort - if empty(a:lhs) - return 0 - endif - - if a:lhs[0] > a:rhs[0] - return 1 - elseif a:lhs[0] == a:rhs[0] - if a:lhs[1] > a:rhs[1] - return 1 - elseif a:lhs[1] == a:rhs[1] - return get(a:lhs, 2) >= get(a:rhs, 2) - endif - endif - - return 0 -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/sign.vim b/dotfiles/.vim/plugged/ale/autoload/ale/sign.vim deleted file mode 100644 index 21e06313..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/sign.vim +++ /dev/null @@ -1,496 +0,0 @@ -scriptencoding utf8 -" Author: w0rp -" Description: Draws error and warning signs into signcolumn - -" This flag can be set to some integer to control the maximum number of signs -" that ALE will set. -let g:ale_max_signs = get(g:, 'ale_max_signs', -1) -" This flag can be set to 1 to enable changing the sign column colors when -" there are errors. -let g:ale_change_sign_column_color = get(g:, 'ale_change_sign_column_color', 0) -" These variables dictate what signs are used to indicate errors and warnings. -let g:ale_sign_error = get(g:, 'ale_sign_error', '>>') -let g:ale_sign_style_error = get(g:, 'ale_sign_style_error', g:ale_sign_error) -let g:ale_sign_warning = get(g:, 'ale_sign_warning', '--') -let g:ale_sign_style_warning = get(g:, 'ale_sign_style_warning', g:ale_sign_warning) -let g:ale_sign_info = get(g:, 'ale_sign_info', g:ale_sign_warning) -let g:ale_sign_priority = get(g:, 'ale_sign_priority', 30) -" This variable sets an offset which can be set for sign IDs. -" This ID can be changed depending on what IDs are set for other plugins. -" The dummy sign will use the ID exactly equal to the offset. -let g:ale_sign_offset = get(g:, 'ale_sign_offset', 1000000) -" This flag can be set to 1 to keep sign gutter always open -let g:ale_sign_column_always = get(g:, 'ale_sign_column_always', 0) -let g:ale_sign_highlight_linenrs = get(g:, 'ale_sign_highlight_linenrs', 0) - -let s:supports_sign_groups = has('nvim-0.4.2') || has('patch-8.1.614') - -if !hlexists('ALEErrorSign') - highlight link ALEErrorSign error -endif - -if !hlexists('ALEStyleErrorSign') - highlight link ALEStyleErrorSign ALEErrorSign -endif - -if !hlexists('ALEWarningSign') - highlight link ALEWarningSign todo -endif - -if !hlexists('ALEStyleWarningSign') - highlight link ALEStyleWarningSign ALEWarningSign -endif - -if !hlexists('ALEInfoSign') - highlight link ALEInfoSign ALEWarningSign -endif - -if !hlexists('ALESignColumnWithErrors') - highlight link ALESignColumnWithErrors error -endif - -function! ale#sign#SetUpDefaultColumnWithoutErrorsHighlight() abort - let l:verbose = &verbose - set verbose=0 - let l:output = execute('highlight SignColumn', 'silent') - let &verbose = l:verbose - - let l:highlight_syntax = join(split(l:output)[2:]) - let l:match = matchlist(l:highlight_syntax, '\vlinks to (.+)$') - - if !empty(l:match) - execute 'highlight link ALESignColumnWithoutErrors ' . l:match[1] - elseif l:highlight_syntax isnot# 'cleared' - execute 'highlight ALESignColumnWithoutErrors ' . l:highlight_syntax - endif -endfunction - -if !hlexists('ALESignColumnWithoutErrors') - call ale#sign#SetUpDefaultColumnWithoutErrorsHighlight() -endif - -" Spaces and backslashes need to be escaped for signs. -function! s:EscapeSignText(sign_text) abort - return substitute(substitute(a:sign_text, ' *$', '', ''), '\\\| ', '\\\0', 'g') -endfunction - -" Signs show up on the left for error markers. -execute 'sign define ALEErrorSign text=' . s:EscapeSignText(g:ale_sign_error) -\ . ' texthl=ALEErrorSign linehl=ALEErrorLine' -execute 'sign define ALEStyleErrorSign text=' . s:EscapeSignText(g:ale_sign_style_error) -\ . ' texthl=ALEStyleErrorSign linehl=ALEErrorLine' -execute 'sign define ALEWarningSign text=' . s:EscapeSignText(g:ale_sign_warning) -\ . ' texthl=ALEWarningSign linehl=ALEWarningLine' -execute 'sign define ALEStyleWarningSign text=' . s:EscapeSignText(g:ale_sign_style_warning) -\ . ' texthl=ALEStyleWarningSign linehl=ALEWarningLine' -execute 'sign define ALEInfoSign text=' . s:EscapeSignText(g:ale_sign_info) -\ . ' texthl=ALEInfoSign linehl=ALEInfoLine' -sign define ALEDummySign text=\ texthl=SignColumn - -if g:ale_sign_highlight_linenrs && has('nvim-0.3.2') - if !hlexists('ALEErrorSignLineNr') - highlight link ALEErrorSignLineNr CursorLineNr - endif - - if !hlexists('ALEStyleErrorSignLineNr') - highlight link ALEStyleErrorSignLineNr CursorLineNr - endif - - if !hlexists('ALEWarningSignLineNr') - highlight link ALEWarningSignLineNr CursorLineNr - endif - - if !hlexists('ALEStyleWarningSignLineNr') - highlight link ALEStyleWarningSignLineNr CursorLineNr - endif - - if !hlexists('ALEInfoSignLineNr') - highlight link ALEInfoSignLineNr CursorLineNr - endif - - sign define ALEErrorSign numhl=ALEErrorSignLineNr - sign define ALEStyleErrorSign numhl=ALEStyleErrorSignLineNr - sign define ALEWarningSign numhl=ALEWarningSignLineNr - sign define ALEStyleWarningSign numhl=ALEStyleWarningSignLineNr - sign define ALEInfoSign numhl=ALEInfoSignLineNr -endif - -function! ale#sign#GetSignName(sublist) abort - let l:priority = g:ale#util#style_warning_priority - - " Determine the highest priority item for the line. - for l:item in a:sublist - let l:item_priority = ale#util#GetItemPriority(l:item) - - if l:item_priority > l:priority - let l:priority = l:item_priority - endif - endfor - - if l:priority is# g:ale#util#error_priority - return 'ALEErrorSign' - endif - - if l:priority is# g:ale#util#warning_priority - return 'ALEWarningSign' - endif - - if l:priority is# g:ale#util#style_error_priority - return 'ALEStyleErrorSign' - endif - - if l:priority is# g:ale#util#style_warning_priority - return 'ALEStyleWarningSign' - endif - - if l:priority is# g:ale#util#info_priority - return 'ALEInfoSign' - endif - - " Use the error sign for invalid severities. - return 'ALEErrorSign' -endfunction - -function! s:PriorityCmd() abort - if s:supports_sign_groups - return ' priority=' . g:ale_sign_priority . ' ' - else - return '' - endif -endfunction - -function! s:GroupCmd() abort - if s:supports_sign_groups - return ' group=ale ' - else - return ' ' - endif -endfunction - -" Read sign data for a buffer to a list of lines. -function! ale#sign#ReadSigns(buffer) abort - let l:output = execute( - \ 'sign place ' . s:GroupCmd() . s:PriorityCmd() - \ . ' buffer=' . a:buffer - \ ) - - return split(l:output, "\n") -endfunction - -function! ale#sign#ParsePattern() abort - if s:supports_sign_groups - " Matches output like : - " line=4 id=1 group=ale name=ALEErrorSign - " строка=1 id=1000001 группа=ale имя=ALEErrorSign - " 行=1 識別子=1000001 グループ=ale 名前=ALEWarningSign - " línea=12 id=1000001 grupo=ale nombre=ALEWarningSign - " riga=1 id=1000001 gruppo=ale nome=ALEWarningSign - " Zeile=235 id=1000001 Gruppe=ale Name=ALEErrorSign - let l:pattern = '\v^.*\=(\d+).*\=(\d+).*\=ale>.*\=(ALE[a-zA-Z]+Sign)' - else - " Matches output like : - " line=4 id=1 name=ALEErrorSign - " строка=1 id=1000001 имя=ALEErrorSign - " 行=1 識別子=1000001 名前=ALEWarningSign - " línea=12 id=1000001 nombre=ALEWarningSign - " riga=1 id=1000001 nome=ALEWarningSign - " Zeile=235 id=1000001 Name=ALEErrorSign - let l:pattern = '\v^.*\=(\d+).*\=(\d+).*\=(ALE[a-zA-Z]+Sign)' - endif - - return l:pattern -endfunction - -" Given a buffer number, return a List of placed signs [line, id, group] -function! ale#sign#ParseSignsWithGetPlaced(buffer) abort - let l:signs = sign_getplaced(a:buffer, { 'group': s:supports_sign_groups ? 'ale' : '' })[0].signs - let l:result = [] - let l:is_dummy_sign_set = 0 - - for l:sign in l:signs - if l:sign['name'] is# 'ALEDummySign' - let l:is_dummy_sign_set = 1 - else - call add(l:result, [ - \ str2nr(l:sign['lnum']), - \ str2nr(l:sign['id']), - \ l:sign['name'], - \]) - endif - endfor - - return [l:is_dummy_sign_set, l:result] -endfunction - -" Given a list of lines for sign output, return a List of [line, id, group] -function! ale#sign#ParseSigns(line_list) abort - let l:pattern =ale#sign#ParsePattern() - let l:result = [] - let l:is_dummy_sign_set = 0 - - for l:line in a:line_list - let l:match = matchlist(l:line, l:pattern) - - if len(l:match) > 0 - if l:match[3] is# 'ALEDummySign' - let l:is_dummy_sign_set = 1 - else - call add(l:result, [ - \ str2nr(l:match[1]), - \ str2nr(l:match[2]), - \ l:match[3], - \]) - endif - endif - endfor - - return [l:is_dummy_sign_set, l:result] -endfunction - -function! ale#sign#FindCurrentSigns(buffer) abort - if exists('*sign_getplaced') - return ale#sign#ParseSignsWithGetPlaced(a:buffer) - else - let l:line_list = ale#sign#ReadSigns(a:buffer) - - return ale#sign#ParseSigns(l:line_list) - endif -endfunction - -" Given a loclist, group the List into with one List per line. -function! s:GroupLoclistItems(buffer, loclist) abort - let l:grouped_items = [] - let l:last_lnum = -1 - - for l:obj in a:loclist - if l:obj.bufnr != a:buffer - continue - endif - - " Create a new sub-List when we hit a new line. - if l:obj.lnum != l:last_lnum - call add(l:grouped_items, []) - endif - - call add(l:grouped_items[-1], l:obj) - let l:last_lnum = l:obj.lnum - endfor - - return l:grouped_items -endfunction - -function! s:UpdateLineNumbers(buffer, current_sign_list, loclist) abort - let l:line_map = {} - let l:line_numbers_changed = 0 - - for [l:line, l:sign_id, l:name] in a:current_sign_list - let l:line_map[l:sign_id] = l:line - endfor - - for l:item in a:loclist - if l:item.bufnr == a:buffer - let l:lnum = get(l:line_map, get(l:item, 'sign_id', 0), 0) - - if l:lnum && l:item.lnum != l:lnum - let l:item.lnum = l:lnum - let l:line_numbers_changed = 1 - endif - endif - endfor - - " When the line numbers change, sort the list again - if l:line_numbers_changed - call sort(a:loclist, 'ale#util#LocItemCompare') - endif -endfunction - -function! s:BuildSignMap(buffer, current_sign_list, grouped_items) abort - let l:max_signs = ale#Var(a:buffer, 'max_signs') - - if l:max_signs is 0 - let l:selected_grouped_items = [] - elseif type(l:max_signs) is v:t_number && l:max_signs > 0 - let l:selected_grouped_items = a:grouped_items[:l:max_signs - 1] - else - let l:selected_grouped_items = a:grouped_items - endif - - let l:sign_map = {} - let l:sign_offset = g:ale_sign_offset - - for [l:line, l:sign_id, l:name] in a:current_sign_list - let l:sign_info = get(l:sign_map, l:line, { - \ 'current_id_list': [], - \ 'current_name_list': [], - \ 'new_id': 0, - \ 'new_name': '', - \ 'items': [], - \}) - - " Increment the sign offset for new signs, by the maximum sign ID. - if l:sign_id > l:sign_offset - let l:sign_offset = l:sign_id - endif - - " Remember the sign names and IDs in separate Lists, so they are easy - " to work with. - call add(l:sign_info.current_id_list, l:sign_id) - call add(l:sign_info.current_name_list, l:name) - - let l:sign_map[l:line] = l:sign_info - endfor - - for l:group in l:selected_grouped_items - let l:line = l:group[0].lnum - let l:sign_info = get(l:sign_map, l:line, { - \ 'current_id_list': [], - \ 'current_name_list': [], - \ 'new_id': 0, - \ 'new_name': '', - \ 'items': [], - \}) - - let l:sign_info.new_name = ale#sign#GetSignName(l:group) - let l:sign_info.items = l:group - - let l:index = index( - \ l:sign_info.current_name_list, - \ l:sign_info.new_name - \) - - if l:index >= 0 - " We have a sign with this name already, so use the same ID. - let l:sign_info.new_id = l:sign_info.current_id_list[l:index] - else - " This sign name replaces the previous name, so use a new ID. - let l:sign_info.new_id = l:sign_offset + 1 - let l:sign_offset += 1 - endif - - let l:sign_map[l:line] = l:sign_info - endfor - - return l:sign_map -endfunction - -function! ale#sign#GetSignCommands(buffer, was_sign_set, sign_map) abort - let l:command_list = [] - let l:is_dummy_sign_set = a:was_sign_set - - " Set the dummy sign if we need to. - " The dummy sign is needed to keep the sign column open while we add - " and remove signs. - if !l:is_dummy_sign_set && (!empty(a:sign_map) || g:ale_sign_column_always) - call add(l:command_list, 'sign place ' - \ . g:ale_sign_offset - \ . s:GroupCmd() - \ . s:PriorityCmd() - \ . ' line=1 name=ALEDummySign ' - \ . ' buffer=' . a:buffer - \) - let l:is_dummy_sign_set = 1 - endif - - " Place new items first. - for [l:line_str, l:info] in items(a:sign_map) - if l:info.new_id - " Save the sign IDs we are setting back on our loclist objects. - " These IDs will be used to preserve items which are set many times. - for l:item in l:info.items - let l:item.sign_id = l:info.new_id - endfor - - if index(l:info.current_id_list, l:info.new_id) < 0 - call add(l:command_list, 'sign place ' - \ . (l:info.new_id) - \ . s:GroupCmd() - \ . s:PriorityCmd() - \ . ' line=' . l:line_str - \ . ' name=' . (l:info.new_name) - \ . ' buffer=' . a:buffer - \) - endif - endif - endfor - - " Remove signs without new IDs. - for l:info in values(a:sign_map) - for l:current_id in l:info.current_id_list - if l:current_id isnot l:info.new_id - call add(l:command_list, 'sign unplace ' - \ . l:current_id - \ . s:GroupCmd() - \ . ' buffer=' . a:buffer - \) - endif - endfor - endfor - - " Remove the dummy sign to close the sign column if we need to. - if l:is_dummy_sign_set && !g:ale_sign_column_always - call add(l:command_list, 'sign unplace ' - \ . g:ale_sign_offset - \ . s:GroupCmd() - \ . ' buffer=' . a:buffer - \) - endif - - return l:command_list -endfunction - -" This function will set the signs which show up on the left. -function! ale#sign#SetSigns(buffer, loclist) abort - if !bufexists(str2nr(a:buffer)) - " Stop immediately when attempting to set signs for a buffer which - " does not exist. - return - endif - - " Find the current markers - let [l:is_dummy_sign_set, l:current_sign_list] = - \ ale#sign#FindCurrentSigns(a:buffer) - - " Update the line numbers for items from before which may have moved. - call s:UpdateLineNumbers(a:buffer, l:current_sign_list, a:loclist) - - " Group items after updating the line numbers. - let l:grouped_items = s:GroupLoclistItems(a:buffer, a:loclist) - - " Build a map of current and new signs, with the lines as the keys. - let l:sign_map = s:BuildSignMap( - \ a:buffer, - \ l:current_sign_list, - \ l:grouped_items, - \) - - let l:command_list = ale#sign#GetSignCommands( - \ a:buffer, - \ l:is_dummy_sign_set, - \ l:sign_map, - \) - - " Change the sign column color if the option is on. - if g:ale_change_sign_column_color && !empty(a:loclist) - highlight clear SignColumn - highlight link SignColumn ALESignColumnWithErrors - endif - - for l:command in l:command_list - silent! execute l:command - endfor - - " Reset the sign column color when there are no more errors. - if g:ale_change_sign_column_color && empty(a:loclist) - highlight clear SignColumn - highlight link SignColumn ALESignColumnWithoutErrors - endif -endfunction - -" Remove all signs. -function! ale#sign#Clear() abort - if s:supports_sign_groups - sign unplace group=ale * - else - sign unplace * - endif -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/socket.vim b/dotfiles/.vim/plugged/ale/autoload/ale/socket.vim deleted file mode 100644 index 61f11e70..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/socket.vim +++ /dev/null @@ -1,151 +0,0 @@ -" Author: w0rp -" Description: APIs for working with asynchronous sockets, with an API -" normalised between Vim 8 and NeoVim. Socket connections only work in NeoVim -" 0.3+, and silently do nothing in earlier NeoVim versions. -" -" Important functions are described below. They are: -" -" ale#socket#Open(address, options) -> channel_id (>= 0 if successful) -" ale#socket#IsOpen(channel_id) -> 1 if open, 0 otherwise -" ale#socket#Close(channel_id) -" ale#socket#Send(channel_id, data) -" ale#socket#GetAddress(channel_id) -> Return the address for a job - -let s:channel_map = get(s:, 'channel_map', {}) - -function! s:VimOutputCallback(channel, data) abort - let l:channel_id = ch_info(a:channel).id - - " Only call the callbacks for jobs which are valid. - if l:channel_id >= 0 && has_key(s:channel_map, l:channel_id) - call ale#util#GetFunction(s:channel_map[l:channel_id].callback)(l:channel_id, a:data) - endif -endfunction - -function! s:NeoVimOutputCallback(channel_id, data, event) abort - let l:info = s:channel_map[a:channel_id] - - if a:event is# 'data' - let l:info.last_line = ale#util#JoinNeovimOutput( - \ a:channel_id, - \ l:info.last_line, - \ a:data, - \ l:info.mode, - \ ale#util#GetFunction(l:info.callback), - \) - endif -endfunction - -" Open a socket for a given address. The following options are accepted: -" -" callback - A callback for receiving input. (required) -" -" A non-negative number representing a channel ID will be returned is the -" connection was successful. 0 is a valid channel ID in Vim, so test if the -" connection ID is >= 0. -function! ale#socket#Open(address, options) abort - let l:mode = get(a:options, 'mode', 'raw') - let l:Callback = a:options.callback - - let l:channel_info = { - \ 'address': a:address, - \ 'mode': l:mode, - \ 'callback': a:options.callback, - \} - - if !has('nvim') - " Vim - let l:channel_options = { - \ 'mode': l:mode, - \ 'waittime': 0, - \ 'callback': function('s:VimOutputCallback'), - \} - - " Use non-blocking writes for Vim versions that support the option. - if has('patch-8.1.350') - let l:channel_options.noblock = 1 - endif - - let l:channel_info.channel = ch_open(a:address, l:channel_options) - let l:vim_info = ch_info(l:channel_info.channel) - let l:channel_id = !empty(l:vim_info) ? l:vim_info.id : -1 - elseif exists('*chansend') && exists('*sockconnect') - " NeoVim 0.3+ - try - let l:channel_id = sockconnect(stridx(a:address, ':') != -1 ? 'tcp' : 'pipe', - \ a:address, {'on_data': function('s:NeoVimOutputCallback')}) - let l:channel_info.last_line = '' - catch /connection failed/ - let l:channel_id = -1 - endtry - - " 0 means the connection failed some times in NeoVim, so make the ID - " invalid to match Vim. - if l:channel_id is 0 - let l:channel_id = -1 - endif - - let l:channel_info.channel = l:channel_id - else - " Other Vim versions. - let l:channel_id = -1 - endif - - if l:channel_id >= 0 - let s:channel_map[l:channel_id] = l:channel_info - endif - - return l:channel_id -endfunction - -" Return 1 is a channel is open, 0 otherwise. -function! ale#socket#IsOpen(channel_id) abort - if !has_key(s:channel_map, a:channel_id) - return 0 - endif - - if has('nvim') - " In NeoVim, we have to check if this channel is in the global list. - return index(map(nvim_list_chans(), 'v:val.id'), a:channel_id) >= 0 - endif - - let l:channel = s:channel_map[a:channel_id].channel - - return ch_status(l:channel) is# 'open' -endfunction - -" Close a socket, if it's still open. -function! ale#socket#Close(channel_id) abort - " IsRunning isn't called here, so we don't check nvim_list_chans() - if !has_key(s:channel_map, a:channel_id) - return 0 - endif - - let l:channel = remove(s:channel_map, a:channel_id).channel - - if has('nvim') - silent! call chanclose(l:channel) - elseif ch_status(l:channel) is# 'open' - call ch_close(l:channel) - endif -endfunction - -" Send some data to a socket. -function! ale#socket#Send(channel_id, data) abort - if !has_key(s:channel_map, a:channel_id) - return - endif - - let l:channel = s:channel_map[a:channel_id].channel - - if has('nvim') - call chansend(l:channel, a:data) - else - call ch_sendraw(l:channel, a:data) - endif -endfunction - -" Get an address for a channel, or an empty string. -function! ale#socket#GetAddress(channel_id) abort - return get(get(s:channel_map, a:channel_id, {}), 'address', '') -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/statusline.vim b/dotfiles/.vim/plugged/ale/autoload/ale/statusline.vim deleted file mode 100644 index 6b93ba51..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/statusline.vim +++ /dev/null @@ -1,135 +0,0 @@ -" Author: KabbAmine -" Additions by: petpetpetpet -" Description: Statusline related function(s) - -function! s:CreateCountDict() abort - " Keys 0 and 1 are for backwards compatibility. - " The count object used to be a List of [error_count, warning_count]. - return { - \ '0': 0, - \ '1': 0, - \ 'error': 0, - \ 'warning': 0, - \ 'info': 0, - \ 'style_error': 0, - \ 'style_warning': 0, - \ 'total': 0, - \} -endfunction - -" Update the buffer error/warning count with data from loclist. -function! ale#statusline#Update(buffer, loclist) abort - if !exists('g:ale_buffer_info') || !has_key(g:ale_buffer_info, a:buffer) - return - endif - - let l:loclist = filter(copy(a:loclist), 'v:val.bufnr == a:buffer') - let l:count = s:CreateCountDict() - let l:count.total = len(l:loclist) - - " Allows easy access to the first instance of each problem type. - let l:first_problems = {} - - for l:entry in l:loclist - if l:entry.type is# 'W' - if get(l:entry, 'sub_type', '') is# 'style' - let l:count.style_warning += 1 - - if l:count.style_warning == 1 - let l:first_problems.style_warning = l:entry - endif - else - let l:count.warning += 1 - - if l:count.warning == 1 - let l:first_problems.warning = l:entry - endif - endif - elseif l:entry.type is# 'I' - let l:count.info += 1 - - if l:count.info == 1 - let l:first_problems.info = l:entry - endif - elseif get(l:entry, 'sub_type', '') is# 'style' - let l:count.style_error += 1 - - if l:count.style_error == 1 - let l:first_problems.style_error = l:entry - endif - else - let l:count.error += 1 - - if l:count.error == 1 - let l:first_problems.error = l:entry - endif - endif - endfor - - " Set keys for backwards compatibility. - let l:count[0] = l:count.error + l:count.style_error - let l:count[1] = l:count.total - l:count[0] - - let g:ale_buffer_info[a:buffer].count = l:count - let g:ale_buffer_info[a:buffer].first_problems = l:first_problems -endfunction - -" Get the counts for the buffer, and update the counts if needed. -function! s:UpdateCacheIfNecessary(buffer) abort - " Cache is cold, so manually ask for an update. - if !has_key(g:ale_buffer_info[a:buffer], 'count') - call ale#statusline#Update( - \ a:buffer, - \ g:ale_buffer_info[a:buffer].loclist - \) - endif -endfunction - -function! s:BufferCacheExists(buffer) abort - if !exists('g:ale_buffer_info') || !has_key(g:ale_buffer_info, a:buffer) - return 0 - endif - - return 1 -endfunction - -" Get the counts for the buffer, and update the counts if needed. -function! s:GetCounts(buffer) abort - if !s:BufferCacheExists(a:buffer) - return s:CreateCountDict() - endif - - call s:UpdateCacheIfNecessary(a:buffer) - - return g:ale_buffer_info[a:buffer].count -endfunction - -" Get the dict of first_problems, update the buffer info cache if necessary. -function! s:GetFirstProblems(buffer) abort - if !s:BufferCacheExists(a:buffer) - return {} - endif - - call s:UpdateCacheIfNecessary(a:buffer) - - return g:ale_buffer_info[a:buffer].first_problems -endfunction - -" Returns a Dictionary with counts for use in third party integrations. -function! ale#statusline#Count(buffer) abort - " The Dictionary is copied here before exposing it to other plugins. - return copy(s:GetCounts(a:buffer)) -endfunction - -" Returns a copy of the *first* locline instance of the specified problem -" type. (so this would allow an external integration to know all the info -" about the first style warning in the file, for example.) -function! ale#statusline#FirstProblem(buffer, type) abort - let l:first_problems = s:GetFirstProblems(a:buffer) - - if !empty(l:first_problems) && has_key(l:first_problems, a:type) - return copy(l:first_problems[a:type]) - endif - - return {} -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/swift.vim b/dotfiles/.vim/plugged/ale/autoload/ale/swift.vim deleted file mode 100644 index 3232d42a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/swift.vim +++ /dev/null @@ -1,70 +0,0 @@ -" Author: Dan Loman -" Description: Functions for integrating with Swift tools - -" Find the nearest dir containing a Package.swift file and assume it is the root of the Swift project. -function! ale#swift#FindProjectRoot(buffer) abort - let l:swift_config = ale#path#FindNearestFile(a:buffer, 'Package.swift') - - if !empty(l:swift_config) - return fnamemodify(l:swift_config, ':h') - endif - - return '' -endfunction - -" Support Apple Swift Format {{{1 - -call ale#Set('swift_appleswiftformat_executable', 'swift-format') -call ale#Set('swift_appleswiftformat_use_swiftpm', 0) - -" Return the executable depending on whether or not to use Swift Package Manager. -" -" If not asked to use Swift Package Manager (use_swiftpm = 0), the returned -" value is the global executable, else the returned value is 'swift' because -" the final command line will be `swift run swift-format ...`. -" -" Failure is expected if use_swiftpm is `1` but no Package.swift can be located. -function! ale#swift#GetAppleSwiftFormatExecutable(buffer) abort - if !ale#Var(a:buffer, 'swift_appleswiftformat_use_swiftpm') - return ale#Var(a:buffer, 'swift_appleswiftformat_executable') - endif - - if ale#path#FindNearestFile(a:buffer, 'Package.swift') is# '' - " If there is no Package.swift file, we don't use swift-format even if it exists, - " so we return '' to indicate failure. - return '' - endif - - return 'swift' -endfunction - -" Return the command depending on whether or not to use Swift Package Manager. -" -" If asked to use Swift Package Manager (use_swiftpm = 1), the command -" arguments are prefixed with 'swift run'. -" -" In either case, the configuration file is located and added to the command. -function! ale#swift#GetAppleSwiftFormatCommand(buffer) abort - let l:executable = ale#swift#GetAppleSwiftFormatExecutable(a:buffer) - let l:command_args = '' - - if ale#Var(a:buffer, 'swift_appleswiftformat_use_swiftpm') - let l:command_args = ' ' . 'run swift-format' - endif - - return ale#Escape(l:executable) . l:command_args -endfunction - -" Locate the nearest '.swift-format' configuration file, and return the -" arguments, else return an empty string. -function! ale#swift#GetAppleSwiftFormatConfigArgs(buffer) abort - let l:config_filepath = ale#path#FindNearestFile(a:buffer, '.swift-format') - - if l:config_filepath isnot# '' - return '--configuration' . ' ' . l:config_filepath - endif - - return '' -endfunction - -" }}} diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/symbol.vim b/dotfiles/.vim/plugged/ale/autoload/ale/symbol.vim deleted file mode 100644 index 6c65f1b2..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/symbol.vim +++ /dev/null @@ -1,110 +0,0 @@ -let s:symbol_map = {} - -" Used to get the symbol map in tests. -function! ale#symbol#GetMap() abort - return deepcopy(s:symbol_map) -endfunction - -" Used to set the symbol map in tests. -function! ale#symbol#SetMap(map) abort - let s:symbol_map = a:map -endfunction - -function! ale#symbol#ClearLSPData() abort - let s:symbol_map = {} -endfunction - -function! ale#symbol#HandleLSPResponse(conn_id, response) abort - if has_key(a:response, 'id') - \&& has_key(s:symbol_map, a:response.id) - let l:options = remove(s:symbol_map, a:response.id) - - let l:result = get(a:response, 'result', v:null) - let l:item_list = [] - - if type(l:result) is v:t_list - " Each item looks like this: - " { - " 'name': 'foo', - " 'kind': 123, - " 'deprecated': v:false, - " 'location': { - " 'uri': 'file://...', - " 'range': { - " 'start': {'line': 0, 'character': 0}, - " 'end': {'line': 0, 'character': 0}, - " }, - " }, - " 'containerName': 'SomeContainer', - " } - for l:response_item in l:result - let l:location = l:response_item.location - - call add(l:item_list, { - \ 'filename': ale#util#ToResource(l:location.uri), - \ 'line': l:location.range.start.line + 1, - \ 'column': l:location.range.start.character + 1, - \ 'match': l:response_item.name, - \}) - endfor - endif - - if empty(l:item_list) - call ale#util#Execute('echom ''No symbols found.''') - else - call ale#preview#ShowSelection(l:item_list, l:options) - endif - endif -endfunction - -function! s:OnReady(query, options, linter, lsp_details) abort - let l:id = a:lsp_details.connection_id - - if !ale#lsp#HasCapability(l:id, 'symbol_search') - return - endif - - let l:buffer = a:lsp_details.buffer - - " If we already made a request, stop here. - if getbufvar(l:buffer, 'ale_symbol_request_made', 0) - return - endif - - let l:Callback = function('ale#symbol#HandleLSPResponse') - call ale#lsp#RegisterCallback(l:id, l:Callback) - - let l:message = ale#lsp#message#Symbol(a:query) - let l:request_id = ale#lsp#Send(l:id, l:message) - - call setbufvar(l:buffer, 'ale_symbol_request_made', 1) - let s:symbol_map[l:request_id] = { - \ 'buffer': l:buffer, - \ 'use_relative_paths': has_key(a:options, 'use_relative_paths') ? a:options.use_relative_paths : 0 - \} -endfunction - -function! ale#symbol#Search(args) abort - let [l:opts, l:query] = ale#args#Parse(['relative'], a:args) - - if empty(l:query) - throw 'A non-empty string must be provided!' - endif - - let l:buffer = bufnr('') - let l:options = {} - - if has_key(l:opts, 'relative') - let l:options.use_relative_paths = 1 - endif - - " Set a flag so we only make one request. - call setbufvar(l:buffer, 'ale_symbol_request_made', 0) - let l:Callback = function('s:OnReady', [l:query, l:options]) - - for l:linter in ale#linter#Get(getbufvar(l:buffer, '&filetype')) - if !empty(l:linter.lsp) && l:linter.lsp isnot# 'tsserver' - call ale#lsp_linter#StartLSP(l:buffer, l:linter, l:Callback) - endif - endfor -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/test.vim b/dotfiles/.vim/plugged/ale/autoload/ale/test.vim deleted file mode 100644 index e03ecb65..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/test.vim +++ /dev/null @@ -1,205 +0,0 @@ -" Author: w0rp -" Description: Functions for making testing ALE easier. -" -" This file should not typically be loaded during the normal execution of ALE. - -" Change the directory for checking things in particular test directories -" -" This function will set the g:dir variable, which represents the working -" directory after changing the path. This variable allows a test to change -" directories, and then switch back to a directory at the start of the test -" run. -" -" This function should be run in a Vader Before: block. -function! ale#test#SetDirectory(docker_path) abort - if a:docker_path[:len('/testplugin/') - 1] isnot# '/testplugin/' - throw 'docker_path must start with /testplugin/!' - endif - - " Try to switch directory, which will fail when running tests directly, - " and not through the Docker image. - silent! execute 'cd ' . fnameescape(a:docker_path) - let g:dir = getcwd() " no-custom-checks -endfunction - -" When g:dir is defined, switch back to the directory we saved, and then -" delete that variable. -" -" The filename will be reset to dummy.txt -" -" This function should be run in a Vader After: block. -function! ale#test#RestoreDirectory() abort - call ale#test#SetFilename('dummy.txt') - silent execute 'cd ' . fnameescape(g:dir) - unlet! g:dir -endfunction - -" Get a filename for the current buffer using a relative path to the script. -" -" If a g:dir variable is set, it will be used as the path to the directory -" containing the test file. -function! ale#test#GetFilename(path) abort - let l:dir = get(g:, 'dir', '') - - if empty(l:dir) - let l:dir = getcwd() " no-custom-checks - endif - - let l:full_path = ale#path#IsAbsolute(a:path) - \ ? a:path - \ : l:dir . '/' . a:path - - return ale#path#Simplify(l:full_path) -endfunction - -" Change the filename for the current buffer using a relative path to -" the script without running autocmd commands. -" -" If a g:dir variable is set, it will be used as the path to the directory -" containing the test file. -function! ale#test#SetFilename(path) abort - let l:full_path = ale#test#GetFilename(a:path) - silent! noautocmd execute 'file ' . fnameescape(l:full_path) -endfunction - -function! RemoveNewerKeys(results) abort - for l:item in a:results - if has_key(l:item, 'module') - call remove(l:item, 'module') - endif - - if has_key(l:item, 'end_col') - call remove(l:item, 'end_col') - endif - - if has_key(l:item, 'end_lnum') - call remove(l:item, 'end_lnum') - endif - endfor -endfunction - -" Return loclist data with only the keys supported by the lowest Vim versions. -function! ale#test#GetLoclistWithoutNewerKeys() abort - let l:results = getloclist(0) - call RemoveNewerKeys(l:results) - - return l:results -endfunction - -" Return quickfix data with only the keys supported by the lowest Vim versions. -function! ale#test#GetQflistWithoutNewerKeys() abort - let l:results = getqflist() - call RemoveNewerKeys(l:results) - - return l:results -endfunction - -function! ale#test#GetPreviewWindowText() abort - for l:window in range(1, winnr('$')) - if getwinvar(l:window, '&previewwindow', 0) - let l:buffer = winbufnr(l:window) - - return getbufline(l:buffer, 1, '$') - endif - endfor -endfunction - -" This function can be called with a timeout to wait for all jobs to finish. -" If the jobs to not finish in the given number of milliseconds, -" an exception will be thrown. -" -" The time taken will be a very rough approximation, and more time may be -" permitted than is specified. -function! ale#test#WaitForJobs(deadline) abort - let l:start_time = ale#events#ClockMilliseconds() - - if l:start_time == 0 - throw 'Failed to read milliseconds from the clock!' - endif - - let l:job_list = [] - - " Gather all of the jobs from every buffer. - for [l:buffer, l:data] in items(ale#command#GetData()) - call extend(l:job_list, map(keys(l:data.jobs), 'str2nr(v:val)')) - endfor - - " NeoVim has a built-in API for this, so use that. - if has('nvim') - let l:nvim_code_list = jobwait(l:job_list, a:deadline) - - if index(l:nvim_code_list, -1) >= 0 - throw 'Jobs did not complete on time!' - endif - - return - endif - - let l:should_wait_more = 1 - - while l:should_wait_more - let l:should_wait_more = 0 - - for l:job_id in l:job_list - if ale#job#IsRunning(l:job_id) - let l:now = ale#events#ClockMilliseconds() - - if l:now - l:start_time > a:deadline - " Stop waiting after a timeout, so we don't wait forever. - throw 'Jobs did not complete on time!' - endif - - " Wait another 10 milliseconds - let l:should_wait_more = 1 - sleep 10ms - break - endif - endfor - endwhile - - " Sleep for a small amount of time after all jobs finish. - " This seems to be enough to let handlers after jobs end run, and - " prevents the occasional failure where this function exits after jobs - " end, but before handlers are run. - sleep 10ms - - " We must check the buffer data again to see if new jobs started for - " linters with chained commands. - let l:has_new_jobs = 0 - - " Check again to see if any jobs are running. - for l:info in values(g:ale_buffer_info) - for [l:job_id, l:linter] in get(l:info, 'job_list', []) - if ale#job#IsRunning(l:job_id) - let l:has_new_jobs = 1 - break - endif - endfor - endfor - - if l:has_new_jobs - " We have to wait more. Offset the timeout by the time taken so far. - let l:now = ale#events#ClockMilliseconds() - let l:new_deadline = a:deadline - (l:now - l:start_time) - - if l:new_deadline <= 0 - " Enough time passed already, so stop immediately. - throw 'Jobs did not complete on time!' - endif - - call ale#test#WaitForJobs(l:new_deadline) - endif -endfunction - -function! ale#test#FlushJobs() abort - " The variable is checked for in a loop, as calling one series of - " callbacks can trigger a further series of callbacks. - while exists('g:ale_run_synchronously_callbacks') - let l:callbacks = g:ale_run_synchronously_callbacks - unlet g:ale_run_synchronously_callbacks - - for l:Callback in l:callbacks - call l:Callback() - endfor - endwhile -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/toggle.vim b/dotfiles/.vim/plugged/ale/autoload/ale/toggle.vim deleted file mode 100644 index 7f8957d4..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/toggle.vim +++ /dev/null @@ -1,101 +0,0 @@ -function! s:EnablePreamble() abort - " Set pattern options again, if enabled. - if get(g:, 'ale_pattern_options_enabled', 0) - call ale#pattern_options#SetOptions(bufnr('')) - endif - - " Lint immediately, including running linters against the file. - call ale#Queue(0, 'lint_file') -endfunction - -function! s:DisablePostamble() abort - " Remove highlights for the current buffer now. - if g:ale_set_highlights - call ale#highlight#UpdateHighlights() - endif - - if g:ale_virtualtext_cursor == 1 - call ale#virtualtext#Clear(bufnr('')) - endif -endfunction - -function! ale#toggle#Toggle() abort - let g:ale_enabled = !get(g:, 'ale_enabled') - - if g:ale_enabled - call s:EnablePreamble() - - if g:ale_set_balloons - call ale#balloon#Enable() - endif - else - call ale#engine#CleanupEveryBuffer() - call s:DisablePostamble() - - if exists('*ale#balloon#Disable') - call ale#balloon#Disable() - endif - endif - - call ale#events#Init() -endfunction - -function! ale#toggle#Enable() abort - if !g:ale_enabled - call ale#toggle#Toggle() - endif -endfunction - -function! ale#toggle#Disable() abort - if g:ale_enabled - call ale#toggle#Toggle() - endif -endfunction - -function! ale#toggle#Reset() abort - call ale#engine#CleanupEveryBuffer() - call ale#highlight#UpdateHighlights() -endfunction - -function! ale#toggle#ToggleBuffer(buffer) abort - " Get the new value for the toggle. - let l:enabled = !getbufvar(a:buffer, 'ale_enabled', 1) - - " Disabling ALE globally removes autocmd events, so we cannot enable - " linting locally when linting is disabled globally - if l:enabled && !g:ale_enabled - " no-custom-checks - echom 'ALE cannot be enabled locally when disabled globally' - - return - endif - - call setbufvar(a:buffer, 'ale_enabled', l:enabled) - - if l:enabled - call s:EnablePreamble() - else - " Stop all jobs and clear the results for everything, and delete - " all of the data we stored for the buffer. - call ale#engine#Cleanup(a:buffer) - call s:DisablePostamble() - endif -endfunction - -function! ale#toggle#EnableBuffer(buffer) abort - " ALE is enabled by default for all buffers. - if !getbufvar(a:buffer, 'ale_enabled', 1) - call ale#toggle#ToggleBuffer(a:buffer) - endif -endfunction - -function! ale#toggle#DisableBuffer(buffer) abort - if getbufvar(a:buffer, 'ale_enabled', 1) - call ale#toggle#ToggleBuffer(a:buffer) - endif -endfunction - -function! ale#toggle#ResetBuffer(buffer) abort - call ale#engine#Cleanup(a:buffer) - call ale#highlight#UpdateHighlights() -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/uri.vim b/dotfiles/.vim/plugged/ale/autoload/ale/uri.vim deleted file mode 100644 index d696f03d..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/uri.vim +++ /dev/null @@ -1,43 +0,0 @@ -function! s:EncodeChar(char) abort - let l:result = '' - - for l:index in range(strlen(a:char)) - let l:result .= printf('%%%02x', char2nr(a:char[l:index])) - endfor - - return l:result -endfunction - -function! ale#uri#Encode(value) abort - return substitute( - \ a:value, - \ '\([^a-zA-Z0-9\\/$\-_.!*''(),]\)', - \ '\=s:EncodeChar(submatch(1))', - \ 'g' - \) -endfunction - -function! ale#uri#Decode(value) abort - return substitute( - \ a:value, - \ '%\(\x\x\)', - \ '\=printf("%c", str2nr(submatch(1), 16))', - \ 'g' - \) -endfunction - -let s:uri_handlers = { -\ 'jdt': { -\ 'OpenURILink': function('ale#uri#jdt#OpenJDTLink'), -\ } -\} - -function! ale#uri#GetURIHandler(uri) abort - for l:scheme in keys(s:uri_handlers) - if a:uri =~# '^'.l:scheme.'://' - return s:uri_handlers[scheme] - endif - endfor - - return v:null -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/uri/jdt.vim b/dotfiles/.vim/plugged/ale/autoload/ale/uri/jdt.vim deleted file mode 100644 index 46cea268..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/uri/jdt.vim +++ /dev/null @@ -1,110 +0,0 @@ -" Author: yoshi1123 -" Description: Functions for working with jdt:// URIs. - -function! s:OpenJDTLink(root, uri, line, column, options, result) abort - if has_key(a:result, 'error') - " no-custom-checks - echoerr a:result.error.message - - return - endif - - let l:contents = a:result['result'] - - if type(l:contents) is# type(v:null) - " no-custom-checks - echoerr 'File content not found' - endif - - " disable autocmd when opening buffer - autocmd! AleURISchemes - call ale#util#Open(a:uri, a:line, a:column, a:options) - autocmd AleURISchemes BufNewFile,BufReadPre jdt://** call ale#uri#jdt#ReadJDTLink(expand('')) - - if !empty(getbufvar(bufnr(''), 'ale_lsp_root', '')) - return - endif - - let b:ale_lsp_root = a:root - set filetype=java - - call setline(1, split(l:contents, '\n')) - call cursor(a:line, a:column) - normal! zz - - setlocal buftype=nofile nomodified nomodifiable readonly -endfunction - -" Load new buffer with jdt:// contents and jump to line and column. -function! ale#uri#jdt#OpenJDTLink(encoded_uri, line, column, options, conn_id) abort - let l:found_eclipselsp = v:false - - for l:linter in ale#linter#Get('java') - if l:linter.name is# 'eclipselsp' - let l:found_eclipselsp = v:true - endif - endfor - - if !l:found_eclipselsp - throw 'eclipselsp not running' - endif - - let l:root = a:conn_id[stridx(a:conn_id, ':')+1:] - let l:uri = a:encoded_uri - call ale#lsp_linter#SendRequest( - \ bufnr(''), - \ 'eclipselsp', - \ [0, 'java/classFileContents', {'uri': ale#util#ToURI(l:uri)}], - \ function('s:OpenJDTLink', [l:root, l:uri, a:line, a:column, a:options]) - \) -endfunction - -function! s:ReadClassFileContents(uri, result) abort - if has_key(a:result, 'error') - " no-custom-checks - echoerr a:result.error.message - - return - endif - - let l:contents = a:result['result'] - - if type(l:contents) is# type(v:null) - " no-custom-checks - echoerr 'File content not found' - endif - - call setline(1, split(l:contents, '\n')) - - setlocal buftype=nofile nomodified nomodifiable readonly -endfunction - -" Read jdt:// contents, as part of current project, into current buffer. -function! ale#uri#jdt#ReadJDTLink(encoded_uri) abort - if !empty(getbufvar(bufnr(''), 'ale_lsp_root', '')) - return - endif - - let l:linter_map = ale#lsp_linter#GetLSPLinterMap() - - for l:conn_id in keys(l:linter_map) - if l:linter_map[l:conn_id] is# 'eclipselsp' - let l:root = l:conn_id[stridx(l:conn_id, ':')+1:] - endif - endfor - - if l:root is# v:null - throw 'eclipselsp not running' - endif - - let l:uri = a:encoded_uri - let b:ale_lsp_root = l:root - set filetype=java - - call ale#lsp_linter#SendRequest( - \ bufnr(''), - \ 'eclipselsp', - \ [0, 'java/classFileContents', {'uri': ale#util#ToURI(l:uri)}], - \ function('s:ReadClassFileContents', [l:uri]) - \) -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/util.vim b/dotfiles/.vim/plugged/ale/autoload/ale/util.vim deleted file mode 100644 index c884076a..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/util.vim +++ /dev/null @@ -1,574 +0,0 @@ -" Author: w0rp -" Description: Contains miscellaneous functions - -" A wrapper function for mode() so we can test calls for it. -function! ale#util#Mode(...) abort - return call('mode', a:000) -endfunction - -" A wrapper function for feedkeys so we can test calls for it. -function! ale#util#FeedKeys(...) abort - return call('feedkeys', a:000) -endfunction - -" Show a message in as small a window as possible. -" -" Vim 8 does not support echoing long messages from asynchronous callbacks, -" but NeoVim does. Small messages can be echoed in Vim 8, and larger messages -" have to be shown in preview windows. -function! ale#util#ShowMessage(string, ...) abort - let l:options = get(a:000, 0, {}) - - if !has('nvim') - call ale#preview#CloseIfTypeMatches('ale-preview.message') - endif - - " We have to assume the user is using a monospace font. - if has('nvim') || (a:string !~? "\n" && len(a:string) < &columns) - " no-custom-checks - echo a:string - else - call ale#preview#Show(split(a:string, "\n"), extend( - \ { - \ 'filetype': 'ale-preview.message', - \ 'stay_here': 1, - \ }, - \ l:options, - \)) - endif -endfunction - -" A wrapper function for execute, so we can test executing some commands. -function! ale#util#Execute(expr) abort - execute a:expr -endfunction - -if !exists('g:ale#util#nul_file') - " A null file for sending output to nothing. - let g:ale#util#nul_file = '/dev/null' - - if has('win32') - let g:ale#util#nul_file = 'nul' - endif -endif - -" Given a job, a buffered line of data, a list of parts of lines, a mode data -" is being read in, and a callback, join the lines of output for a NeoVim job -" or socket together, and call the callback with the joined output. -" -" Note that jobs and IDs are the same thing on NeoVim. -function! ale#util#JoinNeovimOutput(job, last_line, data, mode, callback) abort - if a:mode is# 'raw' - call a:callback(a:job, join(a:data, "\n")) - - return '' - endif - - let l:lines = a:data[:-2] - - if len(a:data) > 1 - let l:lines[0] = a:last_line . l:lines[0] - let l:new_last_line = a:data[-1] - else - let l:new_last_line = a:last_line . get(a:data, 0, '') - endif - - for l:line in l:lines - call a:callback(a:job, l:line) - endfor - - return l:new_last_line -endfunction - -" Return the number of lines for a given buffer. -function! ale#util#GetLineCount(buffer) abort - return len(getbufline(a:buffer, 1, '$')) -endfunction - -function! ale#util#GetFunction(string_or_ref) abort - if type(a:string_or_ref) is v:t_string - return function(a:string_or_ref) - endif - - return a:string_or_ref -endfunction - -" Open the file (at the given line). -" options['open_in'] can be: -" current-buffer (default) -" tab -" split -" vsplit -function! ale#util#Open(filename, line, column, options) abort - let l:open_in = get(a:options, 'open_in', 'current-buffer') - let l:args_to_open = '+' . a:line . ' ' . fnameescape(a:filename) - - if l:open_in is# 'tab' - call ale#util#Execute('tabedit ' . l:args_to_open) - elseif l:open_in is# 'split' - call ale#util#Execute('split ' . l:args_to_open) - elseif l:open_in is# 'vsplit' - call ale#util#Execute('vsplit ' . l:args_to_open) - elseif bufnr(a:filename) isnot bufnr('') - " Open another file only if we need to. - call ale#util#Execute('edit ' . l:args_to_open) - else - normal! m` - endif - - call cursor(a:line, a:column) - normal! zz -endfunction - -let g:ale#util#error_priority = 5 -let g:ale#util#warning_priority = 4 -let g:ale#util#info_priority = 3 -let g:ale#util#style_error_priority = 2 -let g:ale#util#style_warning_priority = 1 - -function! ale#util#GetItemPriority(item) abort - if a:item.type is# 'I' - return g:ale#util#info_priority - endif - - if a:item.type is# 'W' - if get(a:item, 'sub_type', '') is# 'style' - return g:ale#util#style_warning_priority - endif - - return g:ale#util#warning_priority - endif - - if get(a:item, 'sub_type', '') is# 'style' - return g:ale#util#style_error_priority - endif - - return g:ale#util#error_priority -endfunction - -" Compare two loclist items for ALE, sorted by their buffers, filenames, and -" line numbers and column numbers. -function! ale#util#LocItemCompare(left, right) abort - if a:left.bufnr < a:right.bufnr - return -1 - endif - - if a:left.bufnr > a:right.bufnr - return 1 - endif - - if a:left.bufnr == -1 - if a:left.filename < a:right.filename - return -1 - endif - - if a:left.filename > a:right.filename - return 1 - endif - endif - - if a:left.lnum < a:right.lnum - return -1 - endif - - if a:left.lnum > a:right.lnum - return 1 - endif - - if a:left.col < a:right.col - return -1 - endif - - if a:left.col > a:right.col - return 1 - endif - - " When either of the items lacks a problem type, then the two items should - " be considered equal. This is important for loclist jumping. - if !has_key(a:left, 'type') || !has_key(a:right, 'type') - return 0 - endif - - let l:left_priority = ale#util#GetItemPriority(a:left) - let l:right_priority = ale#util#GetItemPriority(a:right) - - if l:left_priority < l:right_priority - return -1 - endif - - if l:left_priority > l:right_priority - return 1 - endif - - return 0 -endfunction - -" Compare two loclist items, including the text for the items. -" -" This function can be used for de-duplicating lists. -function! ale#util#LocItemCompareWithText(left, right) abort - let l:cmp_value = ale#util#LocItemCompare(a:left, a:right) - - if l:cmp_value - return l:cmp_value - endif - - if a:left.text < a:right.text - return -1 - endif - - if a:left.text > a:right.text - return 1 - endif - - return 0 -endfunction - -" This function will perform a binary search and a small sequential search -" on the list to find the last problem in the buffer and line which is -" on or before the column. The index of the problem will be returned. -" -" -1 will be returned if nothing can be found. -function! ale#util#BinarySearch(loclist, buffer, line, column) abort - let l:min = 0 - let l:max = len(a:loclist) - 1 - - while 1 - if l:max < l:min - return -1 - endif - - let l:mid = (l:min + l:max) / 2 - let l:item = a:loclist[l:mid] - - " Binary search for equal buffers, equal lines, then near columns. - if l:item.bufnr < a:buffer - let l:min = l:mid + 1 - elseif l:item.bufnr > a:buffer - let l:max = l:mid - 1 - elseif l:item.lnum < a:line - let l:min = l:mid + 1 - elseif l:item.lnum > a:line - let l:max = l:mid - 1 - else - " This part is a small sequential search. - let l:index = l:mid - - " Search backwards to find the first problem on the line. - while l:index > 0 - \&& a:loclist[l:index - 1].bufnr == a:buffer - \&& a:loclist[l:index - 1].lnum == a:line - let l:index -= 1 - endwhile - - " Find the last problem on or before this column. - while l:index < l:max - \&& a:loclist[l:index + 1].bufnr == a:buffer - \&& a:loclist[l:index + 1].lnum == a:line - \&& a:loclist[l:index + 1].col <= a:column - let l:index += 1 - endwhile - - " Scan forwards to find the last item on the column for the item - " we found, which will have the most serious problem. - let l:item_column = a:loclist[l:index].col - - while l:index < l:max - \&& a:loclist[l:index + 1].bufnr == a:buffer - \&& a:loclist[l:index + 1].lnum == a:line - \&& a:loclist[l:index + 1].col == l:item_column - let l:index += 1 - endwhile - - return l:index - endif - endwhile -endfunction - -" A function for testing if a function is running inside a sandbox. -" See :help sandbox -function! ale#util#InSandbox() abort - try - let &l:equalprg=&l:equalprg - catch /E48/ - " E48 is the sandbox error. - return 1 - endtry - - return 0 -endfunction - -function! ale#util#Tempname() abort - let l:clear_tempdir = 0 - - if exists('$TMPDIR') && empty($TMPDIR) - let l:clear_tempdir = 1 - let $TMPDIR = '/tmp' - endif - - try - let l:name = tempname() " no-custom-checks - finally - if l:clear_tempdir - let $TMPDIR = '' - endif - endtry - - return l:name -endfunction - -" Given a single line, or a List of lines, and a single pattern, or a List -" of patterns, return all of the matches for the lines(s) from the given -" patterns, using matchlist(). -" -" Only the first pattern which matches a line will be returned. -function! ale#util#GetMatches(lines, patterns) abort - let l:matches = [] - let l:lines = type(a:lines) is v:t_list ? a:lines : [a:lines] - let l:patterns = type(a:patterns) is v:t_list ? a:patterns : [a:patterns] - - for l:line in l:lines - for l:pattern in l:patterns - let l:match = matchlist(l:line, l:pattern) - - if !empty(l:match) - call add(l:matches, l:match) - break - endif - endfor - endfor - - return l:matches -endfunction - -" Given a single line, or a List of lines, and a single pattern, or a List of -" patterns, and a callback function for mapping the items matches, return the -" result of mapping all of the matches for the lines from the given patterns, -" using matchlist() -" -" Only the first pattern which matches a line will be returned. -function! ale#util#MapMatches(lines, patterns, Callback) abort - return map(ale#util#GetMatches(a:lines, a:patterns), 'a:Callback(v:val)') -endfunction - -function! s:LoadArgCount(function) abort - try - let l:output = execute('function a:function') - catch /E123/ - return 0 - endtry - - let l:match = matchstr(split(l:output, "\n")[0], '\v\([^)]+\)')[1:-2] - let l:arg_list = filter(split(l:match, ', '), 'v:val isnot# ''...''') - - return len(l:arg_list) -endfunction - -" Given the name of a function, a Funcref, or a lambda, return the number -" of named arguments for a function. -function! ale#util#FunctionArgCount(function) abort - let l:Function = ale#util#GetFunction(a:function) - let l:count = s:LoadArgCount(l:Function) - - " If we failed to get the count, forcibly load the autoload file, if the - " function is an autoload function. autoload functions aren't normally - " defined until they are called. - if l:count == 0 - let l:function_name = matchlist(string(l:Function), 'function([''"]\(.\+\)[''"])')[1] - - if l:function_name =~# '#' - execute 'runtime autoload/' . join(split(l:function_name, '#')[:-2], '/') . '.vim' - let l:count = s:LoadArgCount(l:Function) - endif - endif - - return l:count -endfunction - -" Escape a string so the characters in it will be safe for use inside of PCRE -" or RE2 regular expressions without characters having special meanings. -function! ale#util#EscapePCRE(unsafe_string) abort - return substitute(a:unsafe_string, '\([\-\[\]{}()*+?.^$|]\)', '\\\1', 'g') -endfunction - -" Escape a string so that it can be used as a literal string inside an evaled -" vim command. -function! ale#util#EscapeVim(unsafe_string) abort - return "'" . substitute(a:unsafe_string, "'", "''", 'g') . "'" -endfunction - - -" Given a String or a List of String values, try and decode the string(s) -" as a JSON value which can be decoded with json_decode. If the JSON string -" is invalid, the default argument value will be returned instead. -" -" This function is useful in code where the data can't be trusted to be valid -" JSON, and where throwing exceptions is mostly just irritating. -function! ale#util#FuzzyJSONDecode(data, default) abort - if empty(a:data) - return a:default - endif - - let l:str = type(a:data) is v:t_string ? a:data : join(a:data, '') - - try - let l:result = json_decode(l:str) - - " Vim 8 only uses the value v:none for decoding blank strings. - if !has('nvim') && l:result is v:none - return a:default - endif - - return l:result - catch /E474\|E491/ - return a:default - endtry -endfunction - -" Write a file, including carriage return characters for DOS files. -" -" The buffer number is required for determining the fileformat setting for -" the buffer. -function! ale#util#Writefile(buffer, lines, filename) abort - let l:corrected_lines = getbufvar(a:buffer, '&fileformat') is# 'dos' - \ ? map(copy(a:lines), 'substitute(v:val, ''\r*$'', ''\r'', '''')') - \ : a:lines - - " Set binary flag if buffer doesn't have eol and nofixeol to avoid appending newline - let l:flags = !getbufvar(a:buffer, '&eol') && exists('+fixeol') && !&fixeol ? 'bS' : 'S' - - call writefile(l:corrected_lines, a:filename, l:flags) " no-custom-checks -endfunction - -if !exists('s:patial_timers') - let s:partial_timers = {} -endif - -function! s:ApplyPartialTimer(timer_id) abort - if has_key(s:partial_timers, a:timer_id) - let [l:Callback, l:args] = remove(s:partial_timers, a:timer_id) - call call(l:Callback, [a:timer_id] + l:args) - endif -endfunction - -" Given a delay, a callback, a List of arguments, start a timer with -" timer_start() and call the callback provided with [timer_id] + args. -" -" The timer must not be stopped with timer_stop(). -" Use ale#util#StopPartialTimer() instead, which can stop any timer, and will -" clear any arguments saved for executing callbacks later. -function! ale#util#StartPartialTimer(delay, callback, args) abort - let l:timer_id = timer_start(a:delay, function('s:ApplyPartialTimer')) - let s:partial_timers[l:timer_id] = [a:callback, a:args] - - return l:timer_id -endfunction - -function! ale#util#StopPartialTimer(timer_id) abort - call timer_stop(a:timer_id) - - if has_key(s:partial_timers, a:timer_id) - call remove(s:partial_timers, a:timer_id) - endif -endfunction - -" Given a possibly multi-byte string and a 1-based character position on a -" line, return the 1-based byte position on that line. -function! ale#util#Col(str, chr) abort - if a:chr < 2 - return a:chr - endif - - return strlen(join(split(a:str, '\zs')[0:a:chr - 2], '')) + 1 -endfunction - -function! ale#util#FindItemAtCursor(buffer) abort - let l:info = get(g:ale_buffer_info, a:buffer, {}) - let l:loclist = get(l:info, 'loclist', []) - let l:pos = getpos('.') - let l:index = ale#util#BinarySearch(l:loclist, a:buffer, l:pos[1], l:pos[2]) - let l:loc = l:index >= 0 ? l:loclist[l:index] : {} - - return [l:info, l:loc] -endfunction - -function! ale#util#Input(message, value, ...) abort - if a:0 > 0 - return input(a:message, a:value, a:1) - else - return input(a:message, a:value) - endif -endfunction - -function! ale#util#HasBuflineApi() abort - return exists('*deletebufline') && exists('*setbufline') -endfunction - -" Sets buffer contents to lines -function! ale#util#SetBufferContents(buffer, lines) abort - let l:has_bufline_api = ale#util#HasBuflineApi() - - if !l:has_bufline_api && a:buffer isnot bufnr('') - return - endif - - " If the file is in DOS mode, we have to remove carriage returns from - " the ends of lines before calling setline(), or we will see them - " twice. - let l:new_lines = getbufvar(a:buffer, '&fileformat') is# 'dos' - \ ? map(copy(a:lines), 'substitute(v:val, ''\r\+$'', '''', '''')') - \ : a:lines - let l:first_line_to_remove = len(l:new_lines) + 1 - - " Use a Vim API for setting lines in other buffers, if available. - if l:has_bufline_api - call setbufline(a:buffer, 1, l:new_lines) - call deletebufline(a:buffer, l:first_line_to_remove, '$') - " Fall back on setting lines the old way, for the current buffer. - else - let l:old_line_length = line('$') - - if l:old_line_length >= l:first_line_to_remove - let l:save = winsaveview() - silent execute - \ l:first_line_to_remove . ',' . l:old_line_length . 'd_' - call winrestview(l:save) - endif - - call setline(1, l:new_lines) - endif - - return l:new_lines -endfunction - -function! ale#util#GetBufferContents(buffer) abort - return join(getbufline(a:buffer, 1, '$'), '\n') . '\n' -endfunction - -function! ale#util#ToURI(resource) abort - let l:uri_handler = ale#uri#GetURIHandler(a:resource) - - if l:uri_handler is# v:null - " resource is a filesystem path - let l:uri = ale#path#ToFileURI(a:resource) - else - " resource is a URI - let l:uri = a:resource - endif - - return l:uri -endfunction - -function! ale#util#ToResource(uri) abort - let l:uri_handler = ale#uri#GetURIHandler(a:uri) - - if l:uri_handler is# v:null - " resource is a filesystem path - let l:resource = ale#path#FromFileURI(a:uri) - else - " resource is a URI - let l:resource = a:uri - endif - - return l:resource -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/ale/virtualtext.vim b/dotfiles/.vim/plugged/ale/autoload/ale/virtualtext.vim deleted file mode 100644 index 5fade39b..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/ale/virtualtext.vim +++ /dev/null @@ -1,187 +0,0 @@ -scriptencoding utf-8 -" Author: w0rp -" Author: Luan Santos -" Description: Shows lint message for the current line as virtualtext, if any - -" Controls the milliseconds delay before showing a message. -let g:ale_virtualtext_delay = get(g:, 'ale_virtualtext_delay', 10) -let s:cursor_timer = -1 -let s:last_pos = [0, 0, 0] -let s:has_virt_text = 0 -let s:emulate_virt = 0 - -if has('nvim-0.3.2') - let s:ns_id = nvim_create_namespace('ale') - let s:has_virt_text = 1 -elseif has('textprop') && has('popupwin') - let s:has_virt_text = 1 - let s:emulate_virt = !has('patch-9.0.0297') - let s:hl_list = [] - - if s:emulate_virt - call prop_type_add('ale', {}) - let s:last_virt = -1 - endif -endif - -function! ale#virtualtext#Clear(buf) abort - if !s:has_virt_text - return - endif - - if has('nvim') - call nvim_buf_clear_namespace(a:buf, s:ns_id, 0, -1) - else - if s:emulate_virt && s:last_virt != -1 - call prop_remove({'type': 'ale'}) - call popup_close(s:last_virt) - let s:last_virt = -1 - elseif !empty(s:hl_list) - call prop_remove({ - \ 'types': s:hl_list, - \ 'all': 1, - \ 'bufnr': a:buf}) - endif - endif -endfunction - -function! ale#virtualtext#ShowMessage(message, hl_group, buf, line) abort - if !s:has_virt_text || !bufexists(str2nr(a:buf)) - return - endif - - let l:prefix = get(g:, 'ale_virtualtext_prefix', '> ') - let l:msg = l:prefix.trim(substitute(a:message, '\n', ' ', 'g')) - - if has('nvim') - call nvim_buf_set_virtual_text(a:buf, s:ns_id, a:line-1, [[l:msg, a:hl_group]], {}) - elseif s:emulate_virt - let l:left_pad = col('$') - call prop_add(a:line, l:left_pad, { - \ 'type': 'ale', - \}) - let s:last_virt = popup_create(l:msg, { - \ 'line': -1, - \ 'padding': [0, 0, 0, 1], - \ 'mask': [[1, 1, 1, 1]], - \ 'textprop': 'ale', - \ 'highlight': a:hl_group, - \ 'fixed': 1, - \ 'wrap': 0, - \ 'zindex': 2 - \}) - else - let type = prop_type_get(a:hl_group) - - if type == {} - call add(s:hl_list, a:hl_group) - call prop_type_add(a:hl_group, {'highlight': a:hl_group}) - endif - - call prop_add(a:line, 0, { - \ 'type': a:hl_group, - \ 'text': ' ' . l:msg, - \ 'bufnr': a:buf - \}) - endif -endfunction - -function! s:StopCursorTimer() abort - if s:cursor_timer != -1 - call timer_stop(s:cursor_timer) - let s:cursor_timer = -1 - endif -endfunction - -function! ale#virtualtext#GetHlGroup(type, style) abort - if a:type is# 'E' - if a:style is# 'style' - return 'ALEVirtualTextStyleError' - else - return 'ALEVirtualTextError' - endif - elseif a:type is# 'W' - if a:style is# 'style' - return 'ALEVirtualTextStyleWarning' - else - return 'ALEVirtualTextWarning' - endif - else - return 'ALEVirtualTextInfo' - endif -endfunction - -function! ale#virtualtext#ShowCursorWarning(...) abort - if g:ale_virtualtext_cursor != 1 - return - endif - - let l:buffer = bufnr('') - - if mode(1) isnot# 'n' - return - endif - - if ale#ShouldDoNothing(l:buffer) - return - endif - - let [l:info, l:loc] = ale#util#FindItemAtCursor(l:buffer) - - call ale#virtualtext#Clear(l:buffer) - - if !empty(l:loc) - let l:msg = l:loc.text - let l:type = get(l:loc, 'type', 'E') - let l:style = get(l:loc, 'sub_type', '') - let l:hl_group = ale#virtualtext#GetHlGroup(l:type, l:style) - call ale#virtualtext#ShowMessage(l:msg, l:hl_group, l:buffer, line('.')) - endif -endfunction - -function! ale#virtualtext#ShowCursorWarningWithDelay() abort - let l:buffer = bufnr('') - - if g:ale_virtualtext_cursor != 1 - return - endif - - if mode(1) isnot# 'n' - return - endif - - call s:StopCursorTimer() - - let l:pos = getpos('.')[0:2] - - " Check the current buffer, line, and column number against the last - " recorded position. If the position has actually changed, *then* - " we should show something. Otherwise we can end up doing processing - " the show message far too frequently. - if l:pos != s:last_pos - let l:delay = ale#Var(l:buffer, 'virtualtext_delay') - - let s:last_pos = l:pos - let s:cursor_timer = timer_start( - \ l:delay, - \ function('ale#virtualtext#ShowCursorWarning') - \) - endif -endfunction - -function! ale#virtualtext#SetTexts(buf, loclist) abort - if !has('nvim') && s:emulate_virt - return - endif - - call ale#virtualtext#Clear(a:buf) - - for l in a:loclist - if l['bufnr'] != a:buf - continue - endif - - let hl = ale#virtualtext#GetHlGroup(l['type'], get(l, 'sub_type', '')) - call ale#virtualtext#ShowMessage(l['text'], hl, a:buf, l['lnum']) - endfor -endfunction diff --git a/dotfiles/.vim/plugged/ale/autoload/asyncomplete/sources/ale.vim b/dotfiles/.vim/plugged/ale/autoload/asyncomplete/sources/ale.vim deleted file mode 100644 index ce793773..00000000 --- a/dotfiles/.vim/plugged/ale/autoload/asyncomplete/sources/ale.vim +++ /dev/null @@ -1,26 +0,0 @@ -function! asyncomplete#sources#ale#get_source_options(...) abort - let l:default = extend({ - \ 'name': 'ale', - \ 'completor': function('asyncomplete#sources#ale#completor'), - \ 'whitelist': ['*'], - \ 'triggers': asyncomplete#sources#ale#get_triggers(), - \ }, a:0 >= 1 ? a:1 : {}) - - return extend(l:default, {'refresh_pattern': '\k\+$'}) -endfunction - -function! asyncomplete#sources#ale#get_triggers() abort - let l:triggers = ale#completion#GetAllTriggers() - let l:triggers['*'] = l:triggers[''] - - return l:triggers -endfunction - -function! asyncomplete#sources#ale#completor(options, context) abort - let l:keyword = matchstr(a:context.typed, '\w\+$') - let l:startcol = a:context.col - len(l:keyword) - - call ale#completion#GetCompletions('ale-callback', { 'callback': {completions -> - \ asyncomplete#complete(a:options.name, a:context, l:startcol, completions) - \ }}) -endfunction diff --git a/dotfiles/.vim/plugged/ale/doc/ale-ada.txt b/dotfiles/.vim/plugged/ale/doc/ale-ada.txt deleted file mode 100644 index 80321dbb..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-ada.txt +++ /dev/null @@ -1,71 +0,0 @@ -=============================================================================== -ALE Ada Integration *ale-ada-options* - - -=============================================================================== -cspell *ale-ada-cspell* - -See |ale-cspell-options| - -=============================================================================== -gcc *ale-ada-gcc* - -g:ale_ada_gcc_executable *g:ale_ada_gcc_executable* - *b:ale_ada_gcc_executable* - Type: |String| - Default: `'gcc'` - -This variable can be changed to use a different executable for gcc. - - -g:ale_ada_gcc_options *g:ale_ada_gcc_options* - *b:ale_ada_gcc_options* - Type: |String| - Default: `'-gnatwa -gnatq'` - - This variable can be set to pass additional options to gcc. - - -=============================================================================== -gnatpp *ale-ada-gnatpp* - -g:ale_ada_gnatpp_options *g:ale_ada_gnatpp_options* - *b:ale_ada_gnatpp_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to the gnatpp fixer. - - -=============================================================================== -ada-language-server *ale-ada-language-server* - -g:ale_ada_adals_executable *g:ale_ada_adals_executable* - *b:ale_ada_adals_executable* - Type: |String| - Default: `'ada_language_server'` - - This variable can be changed to use a different executable for Ada Language - Server. - - -g:ale_ada_adals_project *g:ale_ada_adals_project* - *b:ale_ada_adals_project* - Type: |String| - Default: `'default.gpr'` - -This variable can be changed to use a different GPR file for -Ada Language Server. - - -g:ale_ada_adals_encoding *g:ale_ada_adals_encoding* - *b:ale_ada_adals_encoding* - Type: |String| - Default: `'utf-8'` - -This variable can be changed to use a different file encoding for -Ada Language Server. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-ansible.txt b/dotfiles/.vim/plugged/ale/doc/ale-ansible.txt deleted file mode 100644 index 3a4efaa5..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-ansible.txt +++ /dev/null @@ -1,16 +0,0 @@ -=============================================================================== -ALE Ansible Integration *ale-ansible-options* - - -=============================================================================== -ansible-lint *ale-ansible-ansible-lint* - -g:ale_ansible_ansible_lint_executable *g:ale_ansible_ansible_lint_executable* - *b:ale_ansible_ansible_lint_executable* - Type: |String| - Default: `'ansible-lint'` - - This variable can be changed to modify the executable used for ansible-lint. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-apkbuild.txt b/dotfiles/.vim/plugged/ale/doc/ale-apkbuild.txt deleted file mode 100644 index 05261400..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-apkbuild.txt +++ /dev/null @@ -1,30 +0,0 @@ -=============================================================================== -ALE APKBUILD Integration *ale-apkbuild-options* - - -=============================================================================== -apkbuild-lint *ale-apkbuild-apkbuild-lint* - -g:ale_apkbuild_apkbuild_lint_executable - *g:ale_apkbuild_apkbuild_lint_executable* - *b:ale_apkbuild_apkbuild_lint_executable* - - Type: |String| - Default: `'apkbuild-lint'` - - This variable can be set to change the path to apkbuild-lint - -=============================================================================== -secfixes-check *ale-apkbuild-secfixes-check* - -g:ale_apkbuild_secfixes_check_executable - *g:ale_apkbuild_secfixes_check_executable* - *b:ale_apkbuild_secfixes_check_executable* - - Type: |String| - Default: `'secfixes-check'` - - This variable can be set to change the path to secfixes-check - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-asciidoc.txt b/dotfiles/.vim/plugged/ale/doc/ale-asciidoc.txt deleted file mode 100644 index dd8b12ff..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-asciidoc.txt +++ /dev/null @@ -1,24 +0,0 @@ -=============================================================================== -ALE AsciiDoc Integration *ale-asciidoc-options* - - -=============================================================================== -cspell *ale-asciidoc-cspell* - -See |ale-cspell-options| - - -=============================================================================== -write-good *ale-asciidoc-write-good* - -See |ale-write-good-options| - - -=============================================================================== -textlint *ale-asciidoc-textlint* - -See |ale-text-textlint| - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-asm.txt b/dotfiles/.vim/plugged/ale/doc/ale-asm.txt deleted file mode 100644 index a97c6d00..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-asm.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE ASM Integration *ale-asm-options* - - -=============================================================================== -gcc *ale-asm-gcc* - -g:ale_asm_gcc_executable *g:ale_asm_gcc_executable* - *b:ale_asm_gcc_executable* - Type: |String| - Default: `'gcc'` - -This variable can be changed to use a different executable for gcc. - - -g:ale_asm_gcc_options *g:ale_asm_gcc_options* - *b:ale_asm_gcc_options* - Type: |String| - Default: `'-Wall'` - - This variable can be set to pass additional options to gcc. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-avra.txt b/dotfiles/.vim/plugged/ale/doc/ale-avra.txt deleted file mode 100644 index a61913ad..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-avra.txt +++ /dev/null @@ -1,26 +0,0 @@ -=============================================================================== -ALE AVRA Integration *ale-avra-options* - - -=============================================================================== -avra *ale-avra-avra* - -g:ale_avra_avra_executable *g:ale_avra_avra_executable* - *b:ale_avra_avra_executable* - - Type: |String| - Default `'avra'` - - This variable can be changed to use different executable for AVRA. - - -g:ale_avra_avra_options *g:ale_avra_avra_options* - *b:ale_avra_avra_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to AVRA. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-awk.txt b/dotfiles/.vim/plugged/ale/doc/ale-awk.txt deleted file mode 100644 index b9c5c34e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-awk.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE Awk Integration *ale-awk-options* - - -=============================================================================== -gawk *ale-awk-gawk* - -g:ale_awk_gawk_executable *g:ale_awk_gawk_executable* - *b:ale_awk_gawk_executable* - Type: |String| - Default: `'gawk'` - - This variable sets executable used for gawk. - - -g:ale_awk_gawk_options *g:ale_awk_gawk_options* - *b:ale_awk_gawk_options* - Type: |String| - Default: `''` - - With this variable we are able to pass extra arguments for gawk - for invocation. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-bats.txt b/dotfiles/.vim/plugged/ale/doc/ale-bats.txt deleted file mode 100644 index cf2199ec..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-bats.txt +++ /dev/null @@ -1,13 +0,0 @@ -=============================================================================== -ALE Bats Integration *ale-bats-options* - - -=============================================================================== -shellcheck *ale-bats-shellcheck* - -The `shellcheck` linter for Bats uses the sh options for `shellcheck`; see: -|ale-sh-shellcheck|. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-bazel.txt b/dotfiles/.vim/plugged/ale/doc/ale-bazel.txt deleted file mode 100644 index e2922aaf..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-bazel.txt +++ /dev/null @@ -1,28 +0,0 @@ -=============================================================================== -ALE Bazel Integration *ale-bazel-options* - -=============================================================================== -buildifier *ale-bazel-buildifier* - -g:ale_bazel_buildifier_executable *g:ale_bazel_buildifier_executable* - *b:ale_bazel_buildifier_executable* - Type: |String| - Default: `'buildifier'` - - See |ale-integrations-local-executables| - - -g:ale_bazel_buildifier_options *g:ale_bazel_buildifier_options* - *b:ale_bazel_buildifier_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to buildifier. - - -g:ale_bazel_buildifier_use_global *g:ale_bazel_buildifier_use_global* - *b:ale_bazel_buildifier_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| diff --git a/dotfiles/.vim/plugged/ale/doc/ale-bib.txt b/dotfiles/.vim/plugged/ale/doc/ale-bib.txt deleted file mode 100644 index 35998c30..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-bib.txt +++ /dev/null @@ -1,19 +0,0 @@ -=============================================================================== -ALE BibTeX Integration *ale-bib-options* - - -=============================================================================== -bibclean *ale-bib-bibclean* - -g:ale_bib_bibclean_executable *g:ale_bib_bibclean_executable* - - Type: |String| - Default: `'bibclean'` - -g:ale_bib_bibclean_options *g:ale_bib_bibclean_options* - - Type: |String| - Default: `'-align-equals'` - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-bicep.txt b/dotfiles/.vim/plugged/ale/doc/ale-bicep.txt deleted file mode 100644 index d26d67bc..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-bicep.txt +++ /dev/null @@ -1,24 +0,0 @@ -=============================================================================== -ALE Bicep Integration *ale-bicep-options* - - -=============================================================================== -bicep *ale-bicep-bicep* - -g:ale_bicep_bicep_executable *g:ale_bicep_bicep_executable* - *b:ale_bicep_bicep_executable* - Type: |String| - Default: `'bicep'` - - This variable can be set to change the path to bicep. - - -g:ale_bicep_bicep_options *g:ale_bicep_bicep_options* - *b:ale_bicep_bicep_options* - Type: |String| - Default: `'build --outfile /dev/null'` - - This variable can be set to pass additional options to bicep. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-bitbake.txt b/dotfiles/.vim/plugged/ale/doc/ale-bitbake.txt deleted file mode 100644 index 4c480fd4..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-bitbake.txt +++ /dev/null @@ -1,31 +0,0 @@ -=============================================================================== -ALE BitBake Integration *ale-bitbake-options* - - -=============================================================================== -oelint-adv *ale-bitbake-oelint_adv* - -g:ale_bitbake_oelint_adv_executable *g:ale_bitbake_oelint_adv_executable* - - Type: |String| - Default: `'oelint-adv'` - - This variable can be changed to use a different executable for oelint-adv. - -g:ale_bitbake_oelint_adv_options *g:ale_bitbake_oelint_adv_options* - - Type: |String| - Default: `''` - - This variable can be set to pass additional options to oelint-adv. - - g:ale_bitbake_oelint_adv_config *g:ale_bitbake_oelint_adv_config* - - Type: |String| - Default: `'.oelint.cfg'` - - This variable can be set to use a different config file. - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-c.txt b/dotfiles/.vim/plugged/ale/doc/ale-c.txt deleted file mode 100644 index 29933861..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-c.txt +++ /dev/null @@ -1,451 +0,0 @@ -=============================================================================== -ALE C Integration *ale-c-options* - -For basic checking of problems with C files, ALE offers the `cc` linter, which -runs either `clang`, or `gcc`. See |ale-c-cc|. - - -=============================================================================== -Global Options - -g:ale_c_always_make *g:ale_c_always_make* - *b:ale_c_always_make* - Type: |Number| - Default: `has('unix') && !has('macunix')` - - If set to `1`, use `--always-make` for `make`, which means that output will - always be parsed from `make` dry runs with GNU make. BSD `make` does not - support this option, so you probably want to turn this option off when using - a BSD variant. - - -g:ale_c_build_dir_names *g:ale_c_build_dir_names* - *b:ale_c_build_dir_names* - - Type: |List| - Default: `['build', 'bin']` - - A list of directory names to be used when searching upwards from cpp files - to discover compilation databases with. For directory named `'foo'`, ALE - will search for `'foo/compile_commands.json'` in all directories on and - above the directory containing the cpp file to find path to compilation - database. This feature is useful for the clang tools wrapped around - LibTooling (namely here, clang-tidy) - - -g:ale_c_build_dir *g:ale_c_build_dir* - *b:ale_c_build_dir* - - Type: |String| - Default: `''` - - For programs that can read `compile_commands.json` files, this option can be - set to the directory containing the file for the project. ALE will try to - determine the location of `compile_commands.json` automatically, but if your - file exists in some other directory, you can set this option so ALE will - know where it is. - - This directory will be searched instead of |g:ale_c_build_dir_names|. - - -g:ale_c_parse_compile_commands *g:ale_c_parse_compile_commands* - *b:ale_c_parse_compile_commands* - Type: |Number| - Default: `1` - - If set to `1`, ALE will parse `compile_commands.json` files to automatically - determine flags for C or C++ compilers. ALE will first search for the - nearest `compile_commands.json` file, and then look for - `compile_commands.json` files in the directories for - |g:ale_c_build_dir_names|. - - -g:ale_c_parse_makefile *g:ale_c_parse_makefile* - *b:ale_c_parse_makefile* - Type: |Number| - Default: `0` - - If set to `1`, ALE will run `make -n` to automatically determine flags to - set for C or C++ compilers. This can make it easier to determine the correct - build flags to use for different files. - - NOTE: When using this option on BSD, you may need to set - |g:ale_c_always_make| to `0`, and `make -n` will not provide consistent - results if binaries have already been built, so use `make clean` when - editing your files. - - WARNING: Running `make -n` automatically can execute arbitrary code, even - though it's supposed to be a dry run, so enable this option with care. You - might prefer to use the buffer-local version of the option instead with - |g:ale_pattern_options|, or you own code for checking which project you're - in. - - You might want to disable this option if `make -n` takes too long to run for - projects you work on. - - If |g:ale_c_parse_compile_commands| or |b:ale_c_parse_compile_commands| is - set to `1`, flags taken from `compile_commands.json` will be preferred over - `make -n` output. - - -=============================================================================== -astyle *ale-c-astyle* - -g:ale_c_astyle_executable *g:ale_c_astyle_executable* - *b:ale_c_astyle_executable* - Type: |String| - Default: `'astyle'` - - This variable can be changed to use a different executable for astyle. - - -g:ale_c_astyle_project_options *g:ale_c_astyle_project_options* - *b:ale_c_astyle_project_options* - Type: |String| - Default: `''` - - This variable can be changed to use an option file for project level - configurations. Provide only the filename of the option file that should be - present at the project's root directory. - - For example, if .astylrc is specified, the file is searched in the parent - directories of the source file's directory. - - -=============================================================================== -cc *ale-c-cc* - *ale-c-gcc* - *ale-c-clang* - -g:ale_c_cc_executable *g:ale_c_cc_executable* - *b:ale_c_cc_executable* - Type: |String| - Default: `''` - - This variable can be changed to use a different executable for a C compiler. - - ALE will try to use `clang` if Clang is available, otherwise ALE will - default to checking C code with `gcc`. - - -g:ale_c_cc_options *g:ale_c_cc_options* - *b:ale_c_cc_options* - Type: |String| - Default: `'-std=c11 -Wall'` - - This variable can be changed to modify flags given to the C compiler. - - -g:ale_c_cc_use_header_lang_flag *g:ale_c_cc_use_header_lang_flag* - *b:ale_c_cc_use_header_lang_flag* - Type: |Number| - Default: `-1` - - By default, ALE will use `'-x c-header'` instead of `'-x c'` for header files - when using Clang. - - This variable can be changed to manually activate or deactivate this flag - for header files. - - - When set to `-1`, the default beviour is used, `'-x c-header'` is used with - Clang and `'-x c'` is used with other compilers. - - When set to `0`, the flag is deactivated, `'-x c'` is always used - independently of the compiler. - - When set to `1`, the flag is activated, `'-x c-header'` is always used - independently of the compiler. - - Gcc does not support `'-x c-header'` when using `'-'` as input filename, - which is what ALE does. This why, by default, ALE only uses `'-x c-header'` - with Clang. - - -g:ale_c_cc_header_exts *g:ale_c_cc_header_exts* - *b:ale_c_cc_header_exts* - Type: |List| - Default: `['h']` - - This variable can be changed to modify the list of extensions of the files - considered as header files. - - This variable is only used when `'-x c-header'` is used instead of `'-x c'`, - see |ale_c_cc_use_header_lang_flag|. - - -=============================================================================== -ccls *ale-c-ccls* - -g:ale_c_ccls_executable *g:ale_c_ccls_executable* - *b:ale_c_ccls_executable* - Type: |String| - Default: `'ccls'` - - This variable can be changed to use a different executable for ccls. - - -g:ale_c_ccls_init_options *g:ale_c_ccls_init_options* - *b:ale_c_ccls_init_options* - Type: |Dictionary| - Default: `{}` - - This variable can be changed to customize ccls initialization options. - Example: > - { - \ 'cacheDirectory': '/tmp/ccls', - \ 'cacheFormat': 'binary', - \ 'diagnostics': { - \ 'onOpen': 0, - \ 'opChange': 1000, - \ }, - \ } -< - Visit https://github.com/MaskRay/ccls/wiki/Initialization-options for all - available options and explanations. - - -=============================================================================== -clangd *ale-c-clangd* - -g:ale_c_clangd_executable *g:ale_c_clangd_executable* - *b:ale_c_clangd_executable* - Type: |String| - Default: `'clangd'` - - This variable can be changed to use a different executable for clangd. - - -g:ale_c_clangd_options *g:ale_c_clangd_options* - *b:ale_c_clangd_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clangd. - - -=============================================================================== -clang-format *ale-c-clangformat* - -g:ale_c_clangformat_executable *g:ale_c_clangformat_executable* - *b:ale_c_clangformat_executable* - Type: |String| - Default: `'clang-format'` - - This variable can be changed to use a different executable for clang-format. - - -g:ale_c_clangformat_options *g:ale_c_clangformat_options* - *b:ale_c_clangformat_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clang-format. - - -g:ale_c_clangformat_style_option *g:ale_c_clangformat_style_option* - *b:ale_c_clangformat_style_option* - Type: |String| - Default: `''` - - This variable can be changed to modify only the style flag given to - clang-format. The contents of the variable are passed directly to the -style - flag of clang-format. - - Example: > - { - \ BasedOnStyle: Microsoft, - \ ColumnLimit: 80, - \ AllowShortBlocksOnASingleLine: Always, - \ AllowShortFunctionsOnASingleLine: Inline, - \ } -< - If you set this variable, ensure you don't modify -style in - |g:ale_c_clangformat_options|, as this will cause clang-format to error. - - -g:ale_c_clangformat_use_local_file *g:ale_c_clangformat_use_local_file* - *b:ale_c_clangformat_use_local_file* - Type: |Number| - Default: `0` - - This variable can be changed to modify whether to use a local .clang-format - file. If the file is found, the flag '-style=file' is passed to clang-format - and any options configured via |g:ale_c_clangformat_style_option| are not - passed. - - If this option is enabled but no .clang-format file is found, default back to - |g:ale_c_clangformat_style_option|, if it set. - - If you set this variable, ensure you don't modify -style in - |g:ale_c_clangformat_options|, as this will cause clang-format to error. - - -=============================================================================== -clangtidy *ale-c-clangtidy* - -`clang-tidy` will be run only when files are saved to disk, so that -`compile_commands.json` files can be used. It is recommended to use this -linter in combination with `compile_commands.json` files. -Therefore, `clang-tidy` linter reads the options |g:ale_c_build_dir| and -|g:ale_c_build_dir_names|. Also, setting |g:ale_c_build_dir| actually -overrides |g:ale_c_build_dir_names|. - - -g:ale_c_clangtidy_checks *g:ale_c_clangtidy_checks* - *b:ale_c_clangtidy_checks* - Type: |List| - Default: `[]` - - The checks to enable for clang-tidy with the `-checks` argument. - - All options will be joined with commas, and escaped appropriately for - the shell. The `-checks` flag can be removed entirely by setting this - option to an empty List. - - Not all of clangtidy checks are applicable for C. You should consult the - clang documentation for an up-to-date list of compatible checks: - http://clang.llvm.org/extra/clang-tidy/checks/list.html - - -g:ale_c_clangtidy_executable *g:ale_c_clangtidy_executable* - *b:ale_c_clangtidy_executable* - Type: |String| - Default: `'clang-tidy'` - - This variable can be changed to use a different executable for clangtidy. - - -g:ale_c_clangtidy_options *g:ale_c_clangtidy_options* - *b:ale_c_clangtidy_options* - Type: |String| - Default: `''` - - This variable can be changed to modify compiler flags given to clang-tidy. - - - Setting this variable to a non-empty string, - - and working in a buffer where no compilation database is found using - |g:ale_c_build_dir_names| or |g:ale_c_build_dir|, - will cause the `--` argument to be passed to `clang-tidy`, which will mean - that detection of `compile_commands.json` files for compile command - databases will be disabled. - Only set this option if you want to control compiler flags - entirely manually, and no `compile_commands.json` file is in one - of the |g:ale_c_build_dir_names| directories of the project tree. - - -g:ale_c_clangtidy_extra_options *g:ale_c_clangtidy_extra_options* - *b:ale_c_clangtidy_extra_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clang-tidy. - - -g:ale_c_clangtidy_fix_errors *g:ale_c_clangtidy_fix_errors* - *b:ale_c_clangtidy_fix_errors* - Type: |Number| - Default: `1` - - This variable can be changed to disable the `-fix-errors` option for the - |clangtidy| fixer. - - -=============================================================================== -cppcheck *ale-c-cppcheck* - -g:ale_c_cppcheck_executable *g:ale_c_cppcheck_executable* - *b:ale_c_cppcheck_executable* - Type: |String| - Default: `'cppcheck'` - - This variable can be changed to use a different executable for cppcheck. - - -g:ale_c_cppcheck_options *g:ale_c_cppcheck_options* - *b:ale_c_cppcheck_options* - Type: |String| - Default: `'--enable=style'` - - This variable can be changed to modify flags given to cppcheck. - - -=============================================================================== -cquery *ale-c-cquery* - -g:ale_c_cquery_executable *g:ale_c_cquery_executable* - *b:ale_c_cquery_executable* - Type: |String| - Default: `'cquery'` - - This variable can be changed to use a different executable for cquery. - - -g:ale_cpp_cquery_cache_directory *g:ale_c_cquery_cache_directory* - *b:ale_c_cquery_cache_directory* - Type: |String| - Default: `'~/.cache/cquery'` - - This variable can be changed to decide which directory cquery uses for its -cache. - - -=============================================================================== -cspell *ale-c-cspell* - -See |ale-cspell-options| - - -=============================================================================== -flawfinder *ale-c-flawfinder* - -g:ale_c_flawfinder_executable *g:ale_c_flawfinder_executable* - *b:ale_c_flawfinder_executable* - Type: |String| - Default: `'flawfinder'` - - This variable can be changed to use a different executable for flawfinder. - - -g:ale_c_flawfinder_minlevel *g:ale_c_flawfinder_minlevel* - *b:ale_c_flawfinder_minlevel* - Type: |Number| - Default: `1` - - This variable can be changed to ignore risks under the given risk threshold. - - -g:ale_c_flawfinder_options *g:ale-c-flawfinder* - *b:ale-c-flawfinder* - Type: |String| - Default: `''` - - This variable can be used to pass extra options into the flawfinder command. - -g:ale_c_flawfinder_error_severity *g:ale_c_flawfinder_error_severity* - *b:ale_c_flawfinder_error_severity* - Type: |Number| - Default: `6` - - This variable can be changed to set the minimum severity to be treated as an - error. This setting also applies to flawfinder for c++. - - -=============================================================================== -uncrustify *ale-c-uncrustify* - -g:ale_c_uncrustify_executable *g:ale_c_uncrustify_executable* - *b:ale_c_uncrustify_executable* - Type: |String| - Default: `'uncrustify'` - - This variable can be changed to use a different executable for uncrustify. - - -g:ale_c_uncrustify_options *g:ale_c_uncrustify_options* - *b:ale_c_uncrustify_options* - Type: |String| - Default: `''` - - This variable can be change to modify flags given to uncrustify. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-cairo.txt b/dotfiles/.vim/plugged/ale/doc/ale-cairo.txt deleted file mode 100644 index 0a78e68a..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-cairo.txt +++ /dev/null @@ -1,15 +0,0 @@ -=============================================================================== -ALE Cairo Integration *ale-cairo-options* - - -=============================================================================== -starknet *ale-cairo-starknet* - -g:ale_cairo_starknet_executable *g:ale_cairo_starknet_executable* - *b:ale_cairo_starknet_executable* - - Default: `'starknet-compile'` - - Overrides the starknet-compile binary after installing the cairo-language. - - For more information read 'https://starknet.io/docs/quickstart.html' diff --git a/dotfiles/.vim/plugged/ale/doc/ale-chef.txt b/dotfiles/.vim/plugged/ale/doc/ale-chef.txt deleted file mode 100644 index 75e144ec..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-chef.txt +++ /dev/null @@ -1,46 +0,0 @@ -=============================================================================== -ALE Chef Integration *ale-chef-options* - - -=============================================================================== -cookstyle *ale-chef-cookstyle* - -g:ale_chef_cookstyle_options *g:ale_chef_cookstyle_options* - *b:ale_chef_cookstyle_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to cookstyle. - - -g:ale_chef_cookstyle_executable *g:ale_chef_cookstyle_executable* - *b:ale_chef_cookstyle_executable* - Type: |String| - Default: `'cookstyle'` - - This variable can be changed to point to the cookstyle binary in case it's - not on the $PATH or a specific version/path must be used. - - -=============================================================================== -foodcritic *ale-chef-foodcritic* - -g:ale_chef_foodcritic_options *g:ale_chef_foodcritic_options* - *b:ale_chef_foodcritic_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to foodcritic. - - -g:ale_chef_foodcritic_executable *g:ale_chef_foodcritic_executable* - *b:ale_chef_foodcritic_executable* - Type: |String| - Default: `'foodcritic'` - - This variable can be changed to point to the foodcritic binary in case it's - not on the $PATH or a specific version/path must be used. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-clojure.txt b/dotfiles/.vim/plugged/ale/doc/ale-clojure.txt deleted file mode 100644 index 3ff367f6..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-clojure.txt +++ /dev/null @@ -1,36 +0,0 @@ -=============================================================================== -ALE Clojure Integration *ale-clojure-options* - - -=============================================================================== -clj-kondo *ale-clojure-clj-kondo* - -A minimal and opinionated linter for code that sparks joy. - -https://github.com/borkdude/clj-kondo - -g:ale_clojure_clj_kondo_options *g:ale_clojure_clj_kondo_options* - *b:ale_clojure_clj_kondo_options* - Type: |String| - Default: `'--cache'` - - This variable can be changed to modify options passed to clj-kondo. - - -=============================================================================== -joker *ale-clojure-joker* - -Joker is a small Clojure interpreter and linter written in Go. - -https://github.com/candid82/joker - -Linting options are not configurable by ale, but instead are controlled by a -`.joker` file in same directory as the file (or current working directory if -linting stdin), a parent directory relative to the file, or the users home -directory. - -see https://github.com/candid82/joker#linter-mode for more information. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/dotfiles/.vim/plugged/ale/doc/ale-cloudformation.txt b/dotfiles/.vim/plugged/ale/doc/ale-cloudformation.txt deleted file mode 100644 index 9724403b..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-cloudformation.txt +++ /dev/null @@ -1,46 +0,0 @@ -=============================================================================== -ALE CloudFormation Integration *ale-cloudformation-options* - - -=============================================================================== -cfn-python-lint *ale-cloudformation-cfn-python-lint* - -cfn-python-lint is a linter for AWS CloudFormation template file. - -Website: https://github.com/awslabs/cfn-python-lint - -Installation -------------------------------------------------------------------------------- - - -Install cfn-python-lint using either pip or brew: > - -`pip install cfn-lint`. If pip is not available, run -`python setup.py clean --all` then `python setup.py install`. - - Homebrew (macOS): - -`brew install cfn-lint` - -< -Configuration -------------------------------------------------------------------------------- - -To get cloudformation linter to work on only CloudFormation files we must set -the buffer |filetype| to yaml.cloudformation. -This causes ALE to lint the file with linters configured for cloudformation and -yaml files. - -Just put: - -> - - au BufRead,BufNewFile *.template.yaml set filetype=yaml.cloudformation - -< - -on `ftdetect/cloudformation.vim` - -This will get both cloudformation and yaml linters to work on any file with `.template.yaml` ext. -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-cmake.txt b/dotfiles/.vim/plugged/ale/doc/ale-cmake.txt deleted file mode 100644 index e44c328e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-cmake.txt +++ /dev/null @@ -1,62 +0,0 @@ -=============================================================================== -ALE CMake Integration *ale-cmake-options* - - -=============================================================================== -cmakelint *ale-cmake-cmakelint* - -g:ale_cmake_cmakelint_executable *g:ale_cmake_cmakelint_executable* - *b:ale_cmake_cmakelint_executable* - Type: |String| - Default: `'cmakelint'` - - This variable can be set to change the path the cmakelint. - - -g:ale_cmake_cmakelint_options *g:ale_cmake_cmakelint_options* - *b:ale_cmake_cmakelint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to cmakelint. - - -=============================================================================== -cmake-lint *ale-cmake-cmake-lint* - -g:ale_cmake_cmake_lint_executable *g:ale_cmake_cmake_lint_executable* - *b:ale_cmake_cmake_lint_executable* - Type: |String| - Default: `'cmake-lint'` - - This variable can be set to change the path the cmake-lint. - - -g:ale_cmake_cmake_lint_options *g:ale_cmake_cmake_lint_options* - *b:ale_cmake_cmake_lint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to cmake-lint. - - -=============================================================================== -cmake-format *ale-cmake-cmakeformat* - -g:ale_cmake_cmakeformat_executable *g:ale_cmake_cmakeformat_executable* - *b:ale_cmake_cmakeformat_executable* - Type: |String| - Default: `'cmakeformat'` - - This variable can be set to change the path the cmake-format. - - -g:ale_cmake_cmakeformat_options *g:ale_cmake_cmakeformat_options* - *b:ale_cmake_cmakeformat_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to cmake-format. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-cpp.txt b/dotfiles/.vim/plugged/ale/doc/ale-cpp.txt deleted file mode 100644 index 1ed6d371..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-cpp.txt +++ /dev/null @@ -1,401 +0,0 @@ -=============================================================================== -ALE C++ Integration *ale-cpp-options* - -For basic checking of problems with C++ files, ALE offers the `cc` linter, -which runs either `clang++`, or `gcc`. See |ale-cpp-cc|. - - -=============================================================================== -Global Options - -The following C options also apply to some C++ linters too. - -* |g:ale_c_always_make| -* |g:ale_c_build_dir_names| -* |g:ale_c_build_dir| -* |g:ale_c_parse_makefile| -* |g:ale_c_parse_compile_commands| - - -=============================================================================== -astyle *ale-cpp-astyle* - -g:ale_cpp_astyle_executable *g:ale_cpp_astyle_executable* - *b:ale_cpp_astyle_executable* - Type: |String| - Default: `'astyle'` - - This variable can be changed to use a different executable for astyle. - - -g:ale_cpp_astyle_project_options *g:ale_cpp_astyle_project_options* - *b:ale_cpp_astyle_project_options* - Type: |String| - Default: `''` - - This variable can be changed to use an option file for project level - configurations. Provide only the filename of the option file that should be - present at the project's root directory. - - For example, if .astylrc is specified, the file is searched in the parent - directories of the source file's directory. - - -=============================================================================== -cc *ale-cpp-cc* - *ale-cpp-gcc* - *ale-cpp-clang* - -g:ale_cpp_cc_executable *g:ale_cpp_cc_executable* - *b:ale_cpp_cc_executable* - Type: |String| - Default: `''` - - This variable can be changed to use a different executable for a C++ compiler. - - ALE will try to use `clang++` if Clang is available, otherwise ALE will - default to checking C++ code with `gcc`. - - -g:ale_cpp_cc_options *g:ale_cpp_cc_options* - *b:ale_cpp_cc_options* - Type: |String| - Default: `'-std=c++14 -Wall'` - - This variable can be changed to modify flags given to the C++ compiler. - - -g:ale_cpp_cc_use_header_lang_flag *g:ale_cpp_cc_use_header_lang_flag* - *b:ale_cpp_cc_use_header_lang_flag* - Type: |Number| - Default: `-1` - - By default, ALE will use `'-x c++-header'` instead of `'-x c++'` for header - files when using Clang. - - This variable can be changed to manually activate or deactivate this flag - for header files. - - - When set to `-1`, the default beviour is used, `'-x c++-header'` is used with - Clang and `'-x c++'` is used with other compilers. - - When set to `0`, the flag is deactivated, `'-x c++'` is always used - independently of the compiler. - - When set to `1`, the flag is activated, `'-x c++-header'` is always used - independently of the compiler. - - Gcc does not support `'-x c++-header'` when using `'-'` as input filename, - which is what ALE does. This why, by default, ALE only uses `'-x c++-header'` - with Clang. - - -g:ale_cpp_cc_header_exts *g:ale_cpp_cc_header_exts* - *b:ale_cpp_cc_header_exts* - Type: |List| - Default: `['h', 'hpp']` - - This variable can be changed to modify the list of extensions of the files - considered as header files. - - This variable is only used when `'-x c++-header'` is used instead of `'-x c++'`, - see |ale_cpp_cc_use_header_lang_flag|. - - -=============================================================================== -ccls *ale-cpp-ccls* - -g:ale_cpp_ccls_executable *g:ale_cpp_ccls_executable* - *b:ale_cpp_ccls_executable* - Type: |String| - Default: `'ccls'` - - This variable can be changed to use a different executable for ccls. - - -g:ale_cpp_ccls_init_options *g:ale_cpp_ccls_init_options* - *b:ale_cpp_ccls_init_options* - Type: |Dictionary| - Default: `{}` - - This variable can be changed to customize ccls initialization options. - Example: > - { - \ 'cacheDirectory': '/tmp/ccls', - \ 'cacheFormat': 'binary', - \ 'diagnostics': { - \ 'onOpen': 0, - \ 'opChange': 1000, - \ }, - \ } -< - Visit https://github.com/MaskRay/ccls/wiki/Initialization-options for all - available options and explanations. - - -=============================================================================== -clangcheck *ale-cpp-clangcheck* - -`clang-check` will be run only when files are saved to disk, so that -`compile_commands.json` files can be used. It is recommended to use this -linter in combination with `compile_commands.json` files. -Therefore, `clang-check` linter reads the options |g:ale_c_build_dir| and -|g:ale_c_build_dir_names|. Also, setting |g:ale_c_build_dir| actually -overrides |g:ale_c_build_dir_names|. - - -g:ale_cpp_clangcheck_executable *g:ale_cpp_clangcheck_executable* - *b:ale_cpp_clangcheck_executable* - Type: |String| - Default: `'clang-check'` - - This variable can be changed to use a different executable for clangcheck. - - -g:ale_cpp_clangcheck_options *g:ale_cpp_clangcheck_options* - *b:ale_cpp_clangcheck_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clang-check. - - This variable should not be set to point to build subdirectory with - `-p path/to/build` option, as it is handled by the |g:ale_c_build_dir| - option. - - -=============================================================================== -clangd *ale-cpp-clangd* - -g:ale_cpp_clangd_executable *g:ale_cpp_clangd_executable* - *b:ale_cpp_clangd_executable* - Type: |String| - Default: `'clangd'` - - This variable can be changed to use a different executable for clangd. - - -g:ale_cpp_clangd_options *g:ale_cpp_clangd_options* - *b:ale_cpp_clangd_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clangd. - - -=============================================================================== -clang-format *ale-cpp-clangformat* - -See |ale-c-clangformat| for information about the available options. -Note that the C options are also used for C++. - - -=============================================================================== -clangtidy *ale-cpp-clangtidy* - -`clang-tidy` will be run only when files are saved to disk, so that -`compile_commands.json` files can be used. It is recommended to use this -linter in combination with `compile_commands.json` files. -Therefore, `clang-tidy` linter reads the options |g:ale_c_build_dir| and -|g:ale_c_build_dir_names|. Also, setting |g:ale_c_build_dir| actually -overrides |g:ale_c_build_dir_names|. - - -g:ale_cpp_clangtidy_checks *g:ale_cpp_clangtidy_checks* - *b:ale_cpp_clangtidy_checks* - Type: |List| - Default: `[]` - - The checks to enable for clang-tidy with the `-checks` argument. - - All options will be joined with commas, and escaped appropriately for - the shell. The `-checks` flag can be removed entirely by setting this - option to an empty List. - - -g:ale_cpp_clangtidy_executable *g:ale_cpp_clangtidy_executable* - *b:ale_cpp_clangtidy_executable* - Type: |String| - Default: `'clang-tidy'` - - This variable can be changed to use a different executable for clangtidy. - - -g:ale_cpp_clangtidy_options *g:ale_cpp_clangtidy_options* - *b:ale_cpp_clangtidy_options* - Type: |String| - Default: `''` - - This variable can be changed to modify compiler flags given to clang-tidy. - - - Setting this variable to a non-empty string, - - and working in a buffer where no compilation database is found using - |g:ale_c_build_dir_names| or |g:ale_c_build_dir|, - will cause the `--` argument to be passed to `clang-tidy`, which will mean - that detection of `compile_commands.json` files for compile command - databases will be disabled. - Only set this option if you want to control compiler flags - entirely manually, and no `compile_commands.json` file is in one - of the |g:ale_c_build_dir_names| directories of the project tree. - - -g:ale_cpp_clangtidy_extra_options *g:ale_cpp_clangtidy_extra_options* - *b:ale_cpp_clangtidy_extra_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clang-tidy. - - -g:ale_cpp_clangtidy_fix_errors *g:ale_cpp_clangtidy_fix_errors* - *b:ale_cpp_clangtidy_fix_errors* - Type: |Number| - Default: `1` - - This variable can be changed to disable the `-fix-errors` option for the - |clangtidy| fixer. - - -=============================================================================== -clazy *ale-cpp-clazy* - -g:ale_cpp_clazy_executable *g:ale_cpp_clazy_executable* - *b:ale_cpp_clazy_executable* - Type: |String| - Default: `'clazy-standalone'` - - This variable can be changed to use a different executable for clazy. - - -g:ale_cpp_clazy_checks *g:ale_cpp_clazy_checks* - *b:ale_cpp_clazy_checks* - Type: |List| - Default: `['level1']` - - The checks to enable for clazy with the `-checks` argument. - - All options will be joined with commas, and escaped appropriately for - the shell. The `-checks` flag can be removed entirely by setting this - option to an empty List. - - -g:ale_cpp_clazy_options *g:ale_cpp_clazy_options* - *b:ale_cpp_clazy_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clazy. - - -=============================================================================== -cppcheck *ale-cpp-cppcheck* - -g:ale_cpp_cppcheck_executable *g:ale_cpp_cppcheck_executable* - *b:ale_cpp_cppcheck_executable* - Type: |String| - Default: `'cppcheck'` - - This variable can be changed to use a different executable for cppcheck. - - -g:ale_cpp_cppcheck_options *g:ale_cpp_cppcheck_options* - *b:ale_cpp_cppcheck_options* - Type: |String| - Default: `'--enable=style'` - - This variable can be changed to modify flags given to cppcheck. - - -=============================================================================== -cpplint *ale-cpp-cpplint* - -g:ale_cpp_cpplint_executable *g:ale_cpp_cpplint_executable* - *b:ale_cpp_cpplint_executable* - Type: |String| - Default: `'cpplint'` - - This variable can be changed to use a different executable for cpplint. - - -g:ale_cpp_cpplint_options *g:ale_cpp_cpplint_options* - *b:ale_cpp_cpplint_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to cpplint. - -g:ale_c_cpplint_executable *g:ale_c_cpplint_executable* - *b:ale_c_cpplint_executable* - Type: |String| - Default: `'cpplint'` - - This variable can be changed to use a different executable for cpplint. - - -g:ale_c_cpplint_options *g:ale_c_cpplint_options* - *b:ale_c_cpplint_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to cpplint. - - -=============================================================================== -cquery *ale-cpp-cquery* - -g:ale_cpp_cquery_executable *g:ale_cpp_cquery_executable* - *b:ale_cpp_cquery_executable* - Type: |String| - Default: `'cquery'` - - This variable can be changed to use a different executable for cquery. - - -g:ale_cpp_cquery_cache_directory *g:ale_cpp_cquery_cache_directory* - *b:ale_cpp_cquery_cache_directory* - Type: |String| - Default: `'~/.cache/cquery'` - - This variable can be changed to decide which directory cquery uses for its - cache. - - -=============================================================================== -cspell *ale-cpp-cspell* - -See |ale-cspell-options| - - -=============================================================================== -flawfinder *ale-cpp-flawfinder* - -g:ale_cpp_flawfinder_executable *g:ale_cpp_flawfinder_executable* - *b:ale_cpp_flawfinder_executable* - Type: |String| - Default: `'flawfinder'` - - This variable can be changed to use a different executable for flawfinder. - - -g:ale_cpp_flawfinder_minlevel *g:ale_cpp_flawfinder_minlevel* - *b:ale_cpp_flawfinder_minlevel* - Type: |Number| - Default: `1` - - This variable can be changed to ignore risks under the given risk threshold. - - -g:ale_cpp_flawfinder_options *g:ale-cpp-flawfinder* - *b:ale-cpp-flawfinder* - Type: |String| - Default: `''` - - This variable can be used to pass extra options into the flawfinder command. - - -=============================================================================== -uncrustify *ale-cpp-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-cs.txt b/dotfiles/.vim/plugged/ale/doc/ale-cs.txt deleted file mode 100644 index 26e2b023..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-cs.txt +++ /dev/null @@ -1,236 +0,0 @@ -=============================================================================== -ALE C# Integration *ale-cs-options* - - -In addition to the linters that are provided with ALE, C# code can be checked -with the OmniSharp plugin. See here: https://github.com/OmniSharp/omnisharp-vim - - -=============================================================================== -csc *ale-cs-csc* - - The |ale-cs-csc| linter checks for semantic errors when files are opened or - saved. - - See |ale-lint-file-linters| for more information on linters which do not - check for problems while you type. - - The csc linter uses the mono csc compiler, providing full C# 7 and newer - support, to generate a temporary module target file (/t:module). The module - includes all '*.cs' files contained in the directory tree rooted at the path - defined by the |g:ale_cs_csc_source| or |b:ale_cs_csc_source| variable and - all sub directories. - - It will in future replace the |ale-cs-mcs| and |ale-cs-mcsc| linters as both - utilize the mcsc compiler which, according to the mono project, is no longer - actively developed, and only receives maintenance updates. However, because - the csc compiler does not support the -syntax option, this linter does not - offer any as-you-type syntax checking, similar to the |ale-cs-mcsc| linter. - - The paths to search for additional assembly files can be specified using the - |g:ale_cs_csc_assembly_path| or |b:ale_cs_csc_assembly_path| variables. - - NOTE: ALE will not find any errors in files apart from syntax errors if any - one of the source files contains a syntax error. Syntax errors must be fixed - first before other errors will be shown. - - -g:ale_cs_csc_options *g:ale_cs_csc_options* - *b:ale_cs_csc_options* - Type: |String| - Default: `''` - - This option can be set to pass additional arguments to the `csc` compiler. - - For example, to add the dotnet package which is not added per default: > - - let g:ale_cs_mcs_options = ' /warn:4 /langversion:7.2' -< - NOTE: the `/unsafe` option is always passed to `csc`. - - -g:ale_cs_csc_source *g:ale_cs_csc_source* - *b:ale_cs_csc_source* - Type: |String| - Default: `''` - - This variable defines the root path of the directory tree searched for the - '*.cs' files to be linted. If this option is empty, the source file's - directory will be used. - - NOTE: Currently it is not possible to specify sub directories and - directory sub trees which shall not be searched for *.cs files. - - -g:ale_cs_csc_assembly_path *g:ale_cs_csc_assembly_path* - *b:ale_cs_csc_assembly_path* - Type: |List| - Default: `[]` - - This variable defines a list of path strings to be searched for external - assembly files. The list is passed to the csc compiler using the `/lib:` - flag. - - -g:ale_cs_csc_assemblies *g:ale_cs_csc_assemblies* - *b:ale_cs_csc_assemblies* - Type: |List| - Default: `[]` - - This variable defines a list of external assembly (*.dll) files required - by the mono mcs compiler to generate a valid module target. The list is - passed the csc compiler using the `/r:` flag. - - For example: > - - " Compile C# programs with the Unity engine DLL file on Mac. - let g:ale_cs_mcsc_assemblies = [ - \ '/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll', - \ 'path-to-unityproject/obj/Debug', - \] -< - -=============================================================================== -cspell *ale-cs-cspell* - -See |ale-cspell-options| - - -=============================================================================== -dotnet-format *ale-cs-dotnet-format* - -Installation -------------------------------------------------------------------------------- - -Installing .NET SDK should probably ensure that `dotnet` is in your `$PATH`. -For .NET 6 the `dotnet format` tool is already included in the .NET SDK. For -.NET 5 or below you will have to manually install it using the instructions -from listed in this repository: https://github.com/dotnet/format - - -Options -------------------------------------------------------------------------------- - -g:ale_cs_dotnet_format_executable *g:ale_cs_dotnet_format_executable* - *b:ale_cs_dotnet_format_executable* - Type: |String| - Default: `'dotnet'` - - This variable can be set to specify an absolute path to the - `dotnet` executable (or to specify an alternate executable). - - -g:ale_cs_dotnet_format_options *g:ale_cs_dotnet_format_options* - *b:ale_cs_dotnet_format_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the `dotnet format` - fixer. - - -=============================================================================== -mcs *ale-cs-mcs* - - The `mcs` linter looks only for syntax errors while you type. See - |ale-cs-mcsc| for the separately configured linter for checking for semantic - errors. - - -g:ale_cs_mcs_options *g:ale_cs_mcs_options* - *b:ale_cs_mcs_options* - - Type: String - Default: `''` - - This variable can be changed to pass additional flags given to mcs. - - NOTE: The -unsafe flag is selected implicitly and thus does not need to be - explicitly included in the |g:ale_cs_mcs_options| or |b:ale_cs_mcs_options| - parameter. - - -=============================================================================== -mcsc *ale-cs-mcsc* - - The mcsc linter checks for semantic errors when files are opened or saved - See |ale-lint-file-linters| for more information on linters which do not - check for problems while you type. - - The mcsc linter uses the mono mcs compiler to generate a temporary module - target file (-t:module). The module includes including all '*.cs' files - contained in the directory tree rooted at the path defined by the - |g:ale_cs_mcsc_source| or |b:ale_cs_mcsc_source| variable. - variable and all sub directories. - - The paths to search for additional assembly files can be specified using the - |g:ale_cs_mcsc_assembly_path| or |b:ale_cs_mcsc_assembly_path| variables. - - NOTE: ALE will not find any errors in files apart from syntax errors if any - one of the source files contains a syntax error. Syntax errors must be fixed - first before other errors will be shown. - - -g:ale_cs_mcsc_options *g:ale_cs_mcsc_options* - *b:ale_cs_mcsc_options* - Type: |String| - Default: `''` - - This option can be set to pass additional arguments to the `mcs` compiler. - - For example, to add the dotnet package which is not added per default: > - - let g:ale_cs_mcs_options = '-pkg:dotnet' -< - NOTE: the `-unsafe` option is always passed to `mcs`. - - -g:ale_cs_mcsc_source *g:ale_cs_mcsc_source* - *b:ale_cs_mcsc_source* - Type: |String| - Default: `''` - - This variable defines the root path of the directory tree searched for the - '*.cs' files to be linted. If this option is empty, the source file's - directory will be used. - - NOTE: Currently it is not possible to specify sub directories and - directory sub trees which shall not be searched for *.cs files. - - -g:ale_cs_mcsc_assembly_path *g:ale_cs_mcsc_assembly_path* - *b:ale_cs_mcsc_assembly_path* - Type: |List| - Default: `[]` - - This variable defines a list of path strings to be searched for external - assembly files. The list is passed to the mcs compiler using the `-lib:` - flag. - - -g:ale_cs_mcsc_assemblies *g:ale_cs_mcsc_assemblies* - *b:ale_cs_mcsc_assemblies* - Type: |List| - Default: `[]` - - This variable defines a list of external assembly (*.dll) files required - by the mono mcs compiler to generate a valid module target. The list is - passed the mcs compiler using the `-r:` flag. - - For example: > - - " Compile C# programs with the Unity engine DLL file on Mac. - let g:ale_cs_mcsc_assemblies = [ - \ '/Applications/Unity/Unity.app/Contents/Frameworks/Managed/UnityEngine.dll', - \ 'path-to-unityproject/obj/Debug', - \] -< - -=============================================================================== -uncrustify *ale-cs-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-css.txt b/dotfiles/.vim/plugged/ale/doc/ale-css.txt deleted file mode 100644 index 74ca16dd..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-css.txt +++ /dev/null @@ -1,93 +0,0 @@ -=============================================================================== -ALE CSS Integration *ale-css-options* - - -=============================================================================== -cspell *ale-css-cspell* - -See |ale-cspell-options| - - -=============================================================================== -css-beautify *ale-css-css-beautify* - -g:ale_css_css_beautify_executable *g:ale_css_css_beautify_executable* - *b:ale_css_css_beautify_executable* - Type: |String| - Default: `'css-beautify'` - - See |ale-integrations-local-executables| - - -g:ale_css_css_beautify_options *g:ale_css_css_beautify_options* - *b:ale_css_css_beautify_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to css-beautify. - - -g:ale_css_css_beautify_use_global *g:ale_css_css_beautify_use_global* - *b:ale_css_css_beautify_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -fecs *ale-css-fecs* - -`fecs` options for CSS is the same as the options for JavaScript, and both of -them reads `./.fecsrc` as the default configuration file. See: -|ale-javascript-fecs|. - - -=============================================================================== -prettier *ale-css-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -stylelint *ale-css-stylelint* - -g:ale_css_stylelint_executable *g:ale_css_stylelint_executable* - *b:ale_css_stylelint_executable* - Type: |String| - Default: `'stylelint'` - - See |ale-integrations-local-executables| - - -g:ale_css_stylelint_options *g:ale_css_stylelint_options* - *b:ale_css_stylelint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to stylelint. - - -g:ale_css_stylelint_use_global *g:ale_css_stylelint_use_global* - *b:ale_css_stylelint_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -vscodecss *ale-css-vscode* - -Website: https://github.com/hrsh7th/vscode-langservers-extracted - -Installation -------------------------------------------------------------------------------- - -Install VSCode css language server either globally or locally: > - - npm install -g vscode-langservers-extracted -< - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-cuda.txt b/dotfiles/.vim/plugged/ale/doc/ale-cuda.txt deleted file mode 100644 index 06aa48ce..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-cuda.txt +++ /dev/null @@ -1,50 +0,0 @@ -=============================================================================== -ALE CUDA Integration *ale-cuda-options* - - -=============================================================================== -nvcc *ale-cuda-nvcc* - -g:ale_cuda_nvcc_executable *g:ale_cuda_nvcc_executable* - *b:ale_cuda_nvcc_executable* - Type: |String| - Default: `'nvcc'` - - This variable can be changed to use a different executable for nvcc. - Currently only nvcc 8.0 is supported. - - -g:ale_cuda_nvcc_options *g:ale_cuda_nvcc_options* - *b:ale_cuda_nvcc_options* - Type: |String| - Default: `'-std=c++11'` - - This variable can be changed to modify flags given to nvcc. - -=============================================================================== -clangd *ale-cuda-clangd* - -g:ale_cuda_clangd_executable *g:ale_cuda_clangd_executable* - *b:ale_cuda_clangd_executable* - Type: |String| - Default: `'clangd'` - - This variable can be changed to use a different executable for clangd. - - -g:ale_cuda_clangd_options *g:ale_cuda_clangd_options* - *b:ale_cuda_clangd_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clangd. - -=============================================================================== -clang-format *ale-cuda-clangformat* - -See |ale-c-clangformat| for information about the available options. -Note that the C options are also used for cuda. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-d.txt b/dotfiles/.vim/plugged/ale/doc/ale-d.txt deleted file mode 100644 index 72349a20..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-d.txt +++ /dev/null @@ -1,32 +0,0 @@ -=============================================================================== -ALE D Integration *ale-d-options* - -=============================================================================== -dfmt *ale-d-dfmt* - -g:ale_d_dfmt_options *g:ale_d_dfmt_options* - *b:ale_d_dfmt_options* - Type: |String| - Default: `''` - -This variable can be set to pass additional options to the dfmt fixer. - -=============================================================================== -dls *ale-d-dls* - -g:ale_d_dls_executable *g:ale_d_dls_executable* - *b:ale_d_dls_executable* - Type: |String| - Default: `dls` - -See |ale-integrations-local-executables| - - -=============================================================================== -uncrustify *ale-d-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-dafny.txt b/dotfiles/.vim/plugged/ale/doc/ale-dafny.txt deleted file mode 100644 index 005170ad..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-dafny.txt +++ /dev/null @@ -1,16 +0,0 @@ -=============================================================================== -ALE Dafny Integration *ale-dafny-options* - - -=============================================================================== -dafny *ale-dafny-dafny* - -g:ale_dafny_dafny_timelimit *g:ale_dafny_dafny_timelimit* - *b:ale_dafny_dafny_timelimit* - Type: |Number| - Default: `10` - - This variable sets the `/timeLimit` used for dafny. - - - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-dart.txt b/dotfiles/.vim/plugged/ale/doc/ale-dart.txt deleted file mode 100644 index 4824e82e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-dart.txt +++ /dev/null @@ -1,124 +0,0 @@ -=============================================================================== -ALE Dart Integration *ale-dart-options* - - -=============================================================================== -analysis_server *ale-dart-analysis_server* - -Installation -------------------------------------------------------------------------------- - -Install Dart via whatever means. `analysis_server` will be included in the SDK. - -In case that `dart` is not in your path, try to set the executable option to -its absolute path. : > - " Set the executable path for dart to the absolute path to it. - let g:ale_dart_analysis_server_executable = '/usr/local/bin/dart' -< - -Options -------------------------------------------------------------------------------- - -g:ale_dart_analysis_server_executable *g:ale_dart_analysis_server_executable* - *b:ale_dart_analysis_server_executable* - Type: |String| - Default: `'dart'` - - This variable can be set to change the path of dart. - - -=============================================================================== -dart-analyze *ale-dart-analyze* - -Installation -------------------------------------------------------------------------------- - -Installing Dart should probably ensure that `dart` is in your `$PATH`. - -In case it is not, try to set the executable option to its absolute path. : > - " Set the executable path for dart to the absolute path to it. - let g:ale_dart_format_executable = '/usr/lib/dart/bin/dart' - > - -Install Dart via whatever means. `dart analyze` will be included in the SDK. - -Options -------------------------------------------------------------------------------- - -g:ale_dart_analyze_executable *g:ale_dart_analyze_executable* - *b:ale_dart_analyze_executable* - Type: |String| - Default: `'dart'` - - This variable can be set to specify an absolute path to the - format executable (or to specify an alternate executable). - - -=============================================================================== -dart-format *ale-dart-format* - -Installation -------------------------------------------------------------------------------- - -Installing Dart should probably ensure that `dart` is in your `$PATH`. - -In case it is not, try to set the executable option to its absolute path. : > - " Set the executable path for dart to the absolute path to it. - let g:ale_dart_format_executable = '/usr/lib/dart/bin/dart' - > - -Options -------------------------------------------------------------------------------- - -g:ale_dart_format_executable *g:ale_dart_format_executable* - *b:ale_dart_format_executable* - Type: |String| - Default: `'dart'` - - This variable can be set to specify an absolute path to the - format executable (or to specify an alternate executable). - - -g:ale_dart_format_options *g:ale_dart_format_options* - *b:ale_dart_format_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the dart format fixer. - - -=============================================================================== -dartfmt *ale-dart-dartfmt* - -Installation -------------------------------------------------------------------------------- - -Installing Dart should probably ensure that `dartfmt` is in your `$PATH`. - -In case it is not, try to set the executable option to its absolute path. : > - " Set the executable path for dartfmt to the absolute path to it. - let g:ale_dart_dartfmt_executable = '/usr/lib/dart/bin/dartfmt' - > - -Options -------------------------------------------------------------------------------- - -g:ale_dart_dartfmt_executable *g:ale_dart_dartfmt_executable* - *b:ale_dart_dartfmt_executable* - Type: |String| - Default: `''` - - This variable can be set to specify an absolute path to the - dartfmt executable (or to specify an alternate executable). - - -g:ale_dart_dartfmt_options *g:ale_dart_dartfmt_options* - *b:ale_dart_dartfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the dartfmt fixer. - -=============================================================================== - - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-desktop.txt b/dotfiles/.vim/plugged/ale/doc/ale-desktop.txt deleted file mode 100644 index 62269e9c..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-desktop.txt +++ /dev/null @@ -1,21 +0,0 @@ -=============================================================================== -ALE desktop Integration *ale-desktop-options* - - -=============================================================================== -desktop-file-validate *ale-desktop-desktop-file-validate* - -ALE supports checking .desktop files with `desktop-file-validate.` - - -g:ale_desktop_desktop_file_validate_options - *g:ale_desktop_desktop_file_validate_options* - *b:ale_desktop_desktop_file_validate_options* - Type: |String| - Default: `''` - - This variable can be changed to set options for `desktop-file-validate`, - such as `'--warn-kde'`. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-development.txt b/dotfiles/.vim/plugged/ale/doc/ale-development.txt deleted file mode 100644 index a0bba468..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-development.txt +++ /dev/null @@ -1,466 +0,0 @@ -*ale-development.txt* For Vim version 8.0. -*ale-dev* -*ale-development* - -ALE Development Documentation - -=============================================================================== -CONTENTS *ale-development-contents* - - 1. Introduction.........................|ale-development-introduction| - 2. Design Goals.........................|ale-design-goals| - 3. Coding Standards.....................|ale-coding-standards| - 4. Testing ALE..........................|ale-development-tests| - 4.1. Writing Linter Tests.............|ale-development-linter-tests| - 4.2. Writing Fixer Tests..............|ale-development-fixer-tests| - 4.3. Running Tests in a Windows VM....|ale-development-windows-tests| - 5. Contributing.........................|ale-development-contributing| - -=============================================================================== -1. Introduction *ale-development-introduction* - -This document contains helpful information for ALE developers, including -design goals, information on how to run the tests, coding standards, and so -on. You should read this document if you want to get involved with ALE -development. - -=============================================================================== -2. Design Goals *ale-design-goals* - -This section lists design goals for ALE, in no particular order. They are as -follows. - -ALE code should be almost 100% VimL. This makes the plugin as portable as -possible. - -ALE should run without needing any other plugins to be installed, to make -installation simple. ALE can integrate with other plugins for more advanced -functionality, non-essential functionality, or improving on basic first party -functionality. - -ALE should check files with as many tools as possible by default, except where -they cause security issues or make excessive use of resources on modern -machines. - -ALE should be free of breaking changes to the public API, which is comprised of -documented functions and options, until a major version is planned. Breaking -changes should be preceded by a deprecation phase complete with warnings. -Changes required for security may be an exception. - -ALE supports Vim 8 and above, and NeoVim 0.2.0 or newer. These are the -earliest versions of Vim and NeoVim which support |job|, |timer|, |closure|, -and |lambda| features. All ALE code should be written so it is compatible with -these versions of Vim, or with version checks so particular features can -degrade or fail gracefully. - -Just about everything should be documented and covered with tests. - -By and large, people shouldn't pay for the functionality they don't use. Care -should be taken when adding new features, so supporting new features doesn't -degrade the general performance of anything ALE does. - -LSP support will become more important as time goes on. ALE should provide -better support for LSP features as time goes on. - -When merging pull requests, you should respond with `Cheers! :beers:`, purely -for comedy value. - -=============================================================================== -3. Coding Standards *ale-coding-standards* - -The following general coding standards should be adhered to for Vim code. - -* Check your Vim code with `Vint` and do everything it says. ALE will check - your Vim code with Vint automatically. See: https://github.com/Kuniwak/vint - Read ALE's `Dockerfile` to see which version of `Vint` it uses. -* Try to write descriptive and concise names for variables and functions. - Names shouldn't be too short or too long. Think about others reading your - code later on. -* Use `snake_case` names for variables and arguments, and `PascalCase` names - for functions. Prefix every variable name with its scope. (`l:`, `g:`, etc.) -* Try to keep lines no longer than 80 characters, but this isn't an absolute - requirement. -* Use 4 spaces for every level of indentation in Vim code. -* Add a blank line before every `function`, `if`, `for`, `while`, or `return`, - which doesn't start a new level of indentation. This makes the logic in - your code easier to follow. -* End every file with a trailing newline character, but not with extra blank - lines. Remove trailing whitespace from the ends of lines. -* Write the full names of commands instead of abbreviations. For example, write - `function` instead of `func`, and `endif` instead of `end`. -* Write functions with `!`, so files can be reloaded. Use the |abort| keyword - for all functions, so functions exit on the first error. -* Make sure to credit yourself in files you have authored with `Author:` - and `Description:` comments. - -In addition to the above general guidelines for the style of your code, you -should also follow some additional rules designed to prevent mistakes. Some of -these are reported with ALE's `custom-linting-rules` script. See -|ale-development-tests|. - -* Don't leave stray `:echo` lines in code. Write `" no-custom-checks` above - the line if you must echo something. -* For strings use |is#| instead of |==#|, `is?` instead of `==?`, `isnot#` - instead of `!=#`, and `isnot?` instead of `!=?`. This is because `'x' ==# 0` - returns 1, while `'x' is# 0` returns 0, so you will experience fewer issues - when numbers are compared with strings. `is` and `isnot` also do not throw - errors when other objects like List or Dictionaries are compared with - strings. -* Don't use the `getcwd()` function in the ALE codebase. Most of ALE's code - runs from asynchronous callback functions, and these functions can execute - from essentially random buffers. Therefore, the `getcwd()` output is - useless. Use `expand('#' . a:buffer . ':p:h')` instead. Don't use - `expand('%...')` for the same reason. -* Don't use the `simplify()` function. It doesn't simplify paths enough. Use - `ale#path#Simplify()` instead. -* Don't use the `shellescape()` function. It doesn't escape arguments properly - on Windows. Use `ale#Escape()` instead, which will avoid escaping where it - isn't needed, and generally escape arguments better on Windows. -* Don't use the `tempname()` function. It doesn't work when `$TMPDIR` isn't - set. Use `ale#util#Tempname()` instead, which temporarily sets `$TMPDIR` - appropriately where needed. -* Use `snake_case` names for linter names, so they can be used as part of - variable names. You can define `aliases` for linters, for other names people - might try to configure linters with. -* Use |v:t_TYPE| variables instead of `type()`, which are more readable. - -Apply the following guidelines when writing Vader test files. - -* Use 2 spaces for Vader test files, instead of the 4 spaces for Vim files. -* If you write `Before` and `After` blocks, you should typically write them at - the top of the file, so they run for all tests. There may be some tests - where it make sense to modify the `Before` and `After` code part of the way - through the file. -* If you modify any settings or global variables, reset them in `After` - blocks. The Vader `Save` and `Restore` commands can be useful for this - purpose. -* If you load or define linters in tests, write `call ale#linter#Reset()` in - an `After` block. -* Just write `Execute` blocks for Vader tests, and don't bother writing `Then` - blocks. `Then` blocks execute after `After` blocks in older versions, and - that can be confusing. - -Apply the following rules when writing Bash scripts. - -* Run `shellcheck`, and do everything it says. - See: https://github.com/koalaman/shellcheck -* Try to write scripts so they will run on Linux, BSD, or Mac OSX. - -=============================================================================== -4. Testing ALE *ale-development-tests* *ale-dev-tests* *ale-tests* - -ALE is tested with a suite of tests executed via GitHub Actions and AppVeyor. -ALE runs tests with the following versions of Vim in the following -environments. - -1. Vim 8.0.0027 on Linux via GitHub Actions. -2. Vim 8.2.4693 on Linux via GitHub Actions. -3. NeoVim 0.2.0 on Linux via GitHub Actions. -4. NeoVim 0.7.0 on Linux via GitHub Actions. -6. Vim 8 (stable builds) on Windows via AppVeyor. - -If you are developing ALE code on Linux, Mac OSX, or BSD, you can run ALEs -tests by installing Docker and running the `run-tests` script. Follow the -instructions on the Docker site for installing Docker. -See: https://docs.docker.com/install/ - -NOTE: Don't forget to add your user to the `docker` group on Linux, or Docker -just won't work. See: https://docs.docker.com/install/linux/linux-postinstall/ - -If you run simply `./run-tests` from the ALE repository root directory, the -latest Docker image for tests will be downloaded if needed, and the script -will run all of the tests in Vader, Vint checks, and several Bash scripts for -finding extra issues. Run `./run-tests --help` to see all of the options the -script supports. Note that the script supports selecting particular test files. - -Once you get used to dealing with Vim and NeoVim compatibility issues, you -probably want to use `./run-tests --fast -q` for running tests with only the -fastest available Vim version, and with success messages from tests -suppressed. - -Generally write tests for any changes you make. The following types of tests -are recommended for the following types of code. - -* New/edited error handler callbacks -> Write tests in `test/handler` -* New/edited linter definition -> Write tests in `test/linter` -* New/edited fixer functions -> Write tests in `test/fixers` - -Look at existing tests in the codebase for examples of how to write tests. -Refer to the Vader documentation for general information on how to write Vader -tests: https://github.com/junegunn/vader.vim - -If you need to add any supporting files for tests, such as empty files present -to test searching upwards through paths for configuration files, they can be -added to the `test/test-files` directory. - -See |ale-development-linter-tests| for more information on how to write linter -tests. - -When you add new linters or fixers, make sure to add them into the tables in -supported-tools.md and |ale-supported-languages-and-tools.txt|. If you forget to -keep them both in sync, you should see an error like the following in the -builds run for GitHub Actions. -> - ======================================== - diff supported-tools.md and doc/ale-supported-languages-and-tools.txt tables - ======================================== - Differences follow: - - --- /tmp/readme.qLjNhJdB 2018-07-01 16:29:55.590331972 +0100 - +++ /tmp/doc.dAi8zfVE 2018-07-01 16:29:55.582331877 +0100 - @@ -1 +1 @@ - - ASM: gcc, foobar - + ASM: gcc -< -Make sure to list documentation entries for linters and fixers in individual -help files in the table of contents, and to align help tags to the right -margin. For example, if you add a heading for an `aardvark` tool to -`ale-python.txt` with a badly aligned doc tag, you will see errors like so. > - - ======================================== - Look for badly aligned doc tags - ======================================== - Badly aligned tags follow: - - doc/ale-python.txt:aardvark ... - ======================================== - Look for table of contents issues - ======================================== - - Check for bad ToC sorting: - - Check for mismatched ToC and headings: - - --- /tmp/table-of-contents.mwCFOgSI 2018-07-01 16:33:25.068811878 +0100 - +++ /tmp/headings.L4WU0hsO 2018-07-01 16:33:25.076811973 +0100 - @@ -168,6 +168,7 @@ - pyrex (cython), ale-pyrex-options - cython, ale-pyrex-cython - python, ale-python-options - + aardvark, ale-python-aardvark - autopep8, ale-python-autopep8 - black, ale-python-black - flake8, ale-python-flake8 -< -Make sure to make the table of contents match the headings, and to keep the -doc tags on the right margin. - -=============================================================================== -4.1 Writing Linter Tests *ale-development-linter-tests* - -Tests for ALE linters take two forms. - -1. Tests for handling the output of commands. -2. Tests for checking which commands are run, or connections are made. - -Tests of the first form should go in the `test/handler` directory, and should -be written like so. > - - Before: - " Load the file which defines the linter. - runtime ale_linters/filetype/linter_name_here.vim - - After: - " Unload all linters again. - call ale#linter#Reset() - - Execute(The output should be correct): - - " Test that the right loclist items are parsed from the handler. - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': 'Something went wrong', - \ }, - \ ], - \ ale_linters#filetype#linter_name#Handle(bufnr(''), [ - \ '1:Something went wrong', - \ ] -< -Tests for what ALE runs should go in the `test/linter` directory, and should -be written like so. > - - Before: - " Load the linter and set up a series of commands, reset linter variables, - " clear caches, etc. - " - " Vader's 'Save' command will be called here for linter variables. - call ale#assert#SetUpLinterTest('filetype', 'linter_name') - - After: - " Reset linters, variables, etc. - " - " Vader's 'Restore' command will be called here. - call ale#assert#TearDownLinterTest() - - Execute(The default command should be correct): - " AssertLinter checks the executable and command. - " Pass expected_executable, expected_command - AssertLinter 'some-command', ale#Escape('some-command') . ' --foo' - - Execute(Check chained commands): - " GivenCommandOutput can be called with 1 or more list for passing output - " to chained commands. The output for each callback defaults to an empty - " list. - GivenCommandOutput ['v2.1.2'] - " Given a List of commands, check all of them. - " Given a String, only the last command in the chain will be checked. - AssertLinter 'some-command', [ - \ ale#Escape('some-command') . ' --version', - \ ale#Escape('some-command') . ' --foo', - \] -< -The full list of commands that will be temporarily defined for linter tests -given the above setup are as follows. - -`GivenCommandOutput [...]` - Define output for ale#command#Run. -`AssertLinterCwd cwd` - Check the `cwd` for the linter. -`AssertLinter executable, command` - Check the executable and command. -`AssertLinterNotExecuted` - Check that linters will not be executed. -`AssertLSPLanguage language` - Check the language given to an LSP server. -`AssertLSPOptions options_dict` - Check the options given to an LSP server. -`AssertLSPConfig config_dict` - Check the config given to an LSP server. -`AssertLSPProject project_root` - Check the root given to an LSP server. -`AssertLSPAddress address` - Check the address to an LSP server. - - -=============================================================================== -4.2 Writing Fixer Tests *ale-development-fixer-tests* - -Tests for ALE fixers should go in the `test/fixers` directory, and should -be written like so. > - - Before: - " Load the fixer and set up a series of commands, reset fixer variables, - " clear caches, etc. - " - " Vader's 'Save' command will be called here for fixer variables. - call ale#assert#SetUpFixerTest('filetype', 'fixer_name') - - After: - " Reset fixers, variables, etc. - " - " Vader's 'Restore' command will be called here. - call ale#assert#TearDownFixerTest() - - Execute(The default command should be correct): - " AssertFixer checks the result of the loaded fixer function. - AssertFixer {'command': ale#Escape('some-command') . ' --foo'} - - Execute(Check chained commands): - " Same as above for linter tests. - GivenCommandOutput ['v2.1.2'] - " Given a List of commands, check all of them. - " Given anything else, only the last result will be checked. - AssertFixer [ - \ ale#Escape('some-command') . ' --version', - \ {'command': ale#Escape('some-command') . ' --foo'} - \] -< -The full list of commands that will be temporarily defined for fixer tests -given the above setup are as follows. - -`GivenCommandOutput [...]` - Define output for ale#command#Run. -`AssertFixerCwd cwd` - Check the `cwd` for the fixer. -`AssertFixer results` - Check the fixer results -`AssertFixerNotExecuted` - Check that fixers will not be executed. - - -=============================================================================== -4.3 Running Tests in a Windows VM *ale-development-windows-tests* - -Tests are run for ALE in a build of Vim 8 for Windows via AppVeyor. These -tests can frequently break due to minor differences in paths and how escaping -is done for commands on Windows. If you are a Linux or Mac user, running these -tests locally can be difficult. Here is a process that will make that easier. - -First, you want to install a Windows image with VirtualBox. Install VirtualBox -and grab a VirtualBox image for Windows such as from here: -https://developer.microsoft.com/en-us/microsoft-edge/tools/vms/ - -NOTE: If you need to enter a password for the virtual machine at any point, -the password is "Passw0rd!" without the double quotes. - -NOTE: If your trial period for Windows runs out, run the commands like the -wallpaper tells you to. - -Your virtual machine will need to have PowerShell installed. Before you go any -further, confirm that PowerShell is installed in your Windows virtual machine. - -Consult the VirtualBox documentation on how to install "Guest Additions." -You probably want to install "Guest Additions" for most things to work -properly. - -After you've loaded your virtual machine image, go into "Settings" for your -virtual machine, and "Shared Folders." Add a shared folder with the name -"ale", and set the "Folder Path" to the path to your ALE repository, for -example: "/home/w0rp/ale" - -Find out which drive letter "ale" has been mounted as in Windows. We'll use -"E:" as the drive letter, for example. Open the command prompt as an -administrator by typing in `cmd` in the start menu, right clicking on the -command prompt application, and clicking "Run as administrator." Click "Yes" -when prompted to ask if you're sure you want to run the command prompt. You -should type in the following command to mount the "ale" directory for testing, -where "E:" is replaced with your drive letter. > - - mklink /D C:\testplugin E: -< -Close the administrator Command Prompt, and try running the command -`type C:\testplugin\LICENSE` in a new Command Prompt which you are NOT running -as administrator. You should see the license for ALE in your terminal. After -you have confirmed that you have mounted ALE on your machine, search in the -Start Menu for "power shell," run PowerShell as an administrator, and issue -the following commands to install the correct Vim and Vader versions for -running tests. > - - Add-Type -A System.IO.Compression.FileSystem - - Invoke-WebRequest ftp://ftp.vim.org/pub/vim/pc/vim80-586w32.zip -OutFile C:\vim.zip - [IO.Compression.ZipFile]::ExtractToDirectory('C:\vim.zip', 'C:\vim') - rm C:\vim.zip - - Invoke-WebRequest ftp://ftp.vim.org/pub/vim/pc/vim80-586rt.zip -OutFile C:\rt.zip - [IO.Compression.ZipFile]::ExtractToDirectory('C:\rt.zip', 'C:\vim') - rm C:\rt.zip - - Invoke-WebRequest https://github.com/junegunn/vader.vim/archive/c6243dd81c98350df4dec608fa972df98fa2a3af.zip -OutFile C:\vader.zip - [IO.Compression.ZipFile]::ExtractToDirectory('C:\vader.zip', 'C:\') - mv C:\vader.vim-c6243dd81c98350df4dec608fa972df98fa2a3af C:\vader - rm C:\vader.zip -< -After you have finished installing everything, you can run all of the tests -in Windows by opening a Command Prompt NOT as an administrator by navigating -to the directory where you've mounted the ALE code, which must be named -`C:\testplugin`, and by running the `run-tests.bat` batch file. > - - cd C:\testplugin - run-tests -< -It will probably take several minutes for all of the tests to run. Be patient. -You can run a specific test by passing the filename as an argument to the -batch file, for example: `run-tests test/test_c_flag_parsing.vader` . This will -give you results much more quickly. - -=============================================================================== -5. Contributing *ale-development-contributing* - -All integration of new code into ALE is done through GitHub pull requests. -Using that tool streamlines the process and minimizes the time and effort -required to e.g. ensure test suites are run for every change. - -As for any project hosted by GitHub, the choice of platform demands every -contributor to take care to setup an account and configure it accordingly. - -Due to details of our process, a difference to many other GitHub hosted -projects is that contributors who wish to keep the author fields for their -commits unaltered need to configure a public email address in their account -and profile settings. See: https://docs.github.com/en/account-and-profile/ - -Unless configuring GitHub to expose contact details, commits will be rewritten -to appear by `USERNAME ` . - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-dhall.txt b/dotfiles/.vim/plugged/ale/doc/ale-dhall.txt deleted file mode 100644 index 9b997b9e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-dhall.txt +++ /dev/null @@ -1,52 +0,0 @@ -=============================================================================== -ALE Dhall Integration *ale-dhall-options* - -g:ale_dhall_executable *g:ale_dhall_executable* - *b:ale_dhall_executable* - Type: |String| - Default: `'dhall'` - -g:ale_dhall_options *g:ale_dhall_options* - *b:ale_dhall_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the 'dhall` executable. - This is shared with `dhall-freeze` and `dhall-lint`. -> - let g:ale_dhall_options = '--ascii' -< - -=============================================================================== -dhall-format *ale-dhall-format* - -Dhall - (https://dhall-lang.org/) - - -=============================================================================== -dhall-freeze *ale-dhall-freeze* - -Dhall - (https://dhall-lang.org/) - -g:ale_dhall_freeze_options *g:ale_dhall_freeze_options* - *b:ale_dhall_freeze_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the 'dhall freeze` - executable. -> - let g:ale_dhall_freeze_options = '--all' -< - -=============================================================================== -dhall-lint *ale-dhall-lint* - -Dhall - (https://dhall-lang.org/) - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-dockerfile.txt b/dotfiles/.vim/plugged/ale/doc/ale-dockerfile.txt deleted file mode 100644 index b6e87623..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-dockerfile.txt +++ /dev/null @@ -1,66 +0,0 @@ -=============================================================================== -ALE Dockerfile Integration *ale-dockerfile-options* - - -=============================================================================== -dockerfile_lint *ale-dockerfile-dockerfile_lint* - -g:ale_dockerfile_dockerfile_lint_executable - *g:ale_dockerfile_dockerfile_lint_executable* - *b:ale_dockerfile_dockerfile_lint_executable* - Type: |String| - Default: `'dockerfile_lint'` - - This variable can be changed to specify the executable used to run - dockerfile_lint. - - -g:ale_dockerfile_dockerfile_lint_options - *g:ale_dockerfile_dockerfile_lint_options* - *b:ale_dockerfile_dockerfile_lint_options* - Type: |String| - Default: `''` - - This variable can be changed to add additional command-line arguments to - the dockerfile lint invocation - like custom rule file definitions. - - -=============================================================================== -dprint *ale-dockerfile-dprint* - -See |ale-dprint-options| and https://dprint.dev/plugins/dockerfile - - -=============================================================================== -hadolint *ale-dockerfile-hadolint* - - hadolint can be found at: https://github.com/hadolint/hadolint - - -g:ale_dockerfile_hadolint_use_docker *g:ale_dockerfile_hadolint_use_docker* - *b:ale_dockerfile_hadolint_use_docker* - Type: |String| - Default: `'never'` - - This variable controls if docker and the hadolint image are used to run this - linter: if 'never', docker will never be used; 'always' means docker will - always be used; 'yes' and docker will be used if the hadolint executable - cannot be found. - - For now, the default is 'never'. This may change as ale's support for using - docker to lint evolves. - - -g:ale_dockerfile_hadolint_image *g:ale_dockerfile_hadolint_image* - *b:ale_dockerfile_hadolint_image* - Type: |String| - Default: `'hadolint/hadolint'` - - This variable controls the docker image used to run hadolint. The default - is hadolint's author's build, and can be found at: - - https://hub.docker.com/r/hadolint/hadolint/ - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-elixir.txt b/dotfiles/.vim/plugged/ale/doc/ale-elixir.txt deleted file mode 100644 index 693db5aa..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-elixir.txt +++ /dev/null @@ -1,108 +0,0 @@ -=============================================================================== -ALE Elixir Integration *ale-elixir-options* - - -=============================================================================== -mix *ale-elixir-mix* - -The `mix` linter is disabled by default, as it can be too expensive to run. -See `:help g:ale_linters` - - -g:ale_elixir_mix_options *g:ale_elixir_mix_options* - *b:ale_elixir_mix_options* - Type: |String| - Default: `'mix'` - - - This variable can be changed to specify the mix executable. - - -=============================================================================== -mix_format *ale-elixir-mix-format* - -g:ale_elixir_mix_format_options *g:ale_elixir_mix_format_options* - *b:ale_elixir_mix_format_options* - Type: |String| - Default: `''` - - - This variable can be changed to specify the mix options passed to the - mix_format fixer - - -=============================================================================== -dialyxir *ale-elixir-dialyxir* - -Dialyzer, a DIscrepancy AnaLYZer for ERlang programs. -http://erlang.org/doc/man/dialyzer.html - -It can be used with elixir through dialyxir -https://github.com/jeremyjh/dialyxir - -Options for dialyzer are not configurable by ale, but they are instead -configured on your project's `mix.exs`. - -See https://github.com/jeremyjh/dialyxir#with-explaining-stuff for more -information. - - -=============================================================================== -elixir-ls *ale-elixir-elixir-ls* - -Elixir Language Server (https://github.com/JakeBecker/elixir-ls) - -g:ale_elixir_elixir_ls_release *g:ale_elixir_elixir_ls_release* - *b:ale_elixir_elixir_ls_release* - Type: |String| - Default: `'elixir-ls'` - - Location of the elixir-ls release directory. This directory must contain - the language server scripts (language_server.sh and language_server.bat). - -g:ale_elixir_elixir_ls_config *g:ale_elixir_elixir_ls_config* - *b:ale_elixir_elixir_ls_config* - Type: |Dictionary| - Default: `{}` - - Dictionary containing configuration settings that will be passed to the - language server. For example, to disable Dialyzer: > - { - \ 'elixirLS': { - \ 'dialyzerEnabled': v:false, - \ }, - \ } -< - Consult the ElixirLS documentation for more information about settings. - - -=============================================================================== -credo *ale-elixir-credo* - -Credo (https://github.com/rrrene/credo) - -g:ale_elixir_credo_strict *g:ale_elixir_credo_strict* - - Type: |Integer| - Default: `0` - - Tells credo to run in strict mode or suggest mode. Set variable to 1 to - enable --strict mode. - - -g:ale_elixir_credo_config_file *g:ale_elixir_credo_config_file* - - Type: |String| - Default: `''` - - Tells credo to use a custom configuration file. - - -=============================================================================== -cspell *ale-elixir-cspell* - -See |ale-cspell-options| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-elm.txt b/dotfiles/.vim/plugged/ale/doc/ale-elm.txt deleted file mode 100644 index b1510241..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-elm.txt +++ /dev/null @@ -1,100 +0,0 @@ -=============================================================================== -ALE Elm Integration *ale-elm-options* - - -=============================================================================== -elm-format *ale-elm-elm-format* - -g:ale_elm_format_executable *g:ale_elm_format_executable* - *b:ale_elm_format_executable* - Type: |String| - Default: `'elm-format'` - - See |ale-integrations-local-executables| - - -g:ale_elm_format_use_global *g:ale_elm_format_use_global* - *b:ale_elm_format_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_elm_format_options *g:ale_elm_format_options* - *b:ale_elm_format_options* - Type: |String| - Default: `'--yes'` - - This variable can be set to pass additional options to elm-format. - -=============================================================================== -elm-ls *ale-elm-elm-ls* - -g:ale_elm_ls_executable *g:ale_elm_ls_executable* - *b:ale_elm_ls_executable* - Type: |String| - Default: `'elm-language-server'` - - See |ale-integrations-local-executables| - - -g:ale_elm_ls_use_global *g:ale_elm_ls_use_global* - *b:ale_elm_ls_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 1)` - - See |ale-integrations-local-executables| - - -g:ale_elm_ls_elm_path *g:ale_elm_ls_elm_path* - *b:ale_elm_ls_elm_path* - Type: |String| - Default: `''` - - See |ale-integrations-local-executables| - - -g:ale_elm_ls_elm_format_path *g:ale_elm_ls_elm_format_path* - *b:ale_elm_ls_elm_format_path* - Type: |String| - Default: `''` - - See |ale-integrations-local-executables| - - -g:ale_elm_ls_elm_test_path *g:ale_elm_ls_elm_test_path* - *b:ale_elm_ls_elm_test_path* - Type: |String| - Default: `''` - - See |ale-integrations-local-executables| - - -g:ale_elm_ls_elm_analyse_trigger *g:ale_elm_ls_elm_analyse_trigger* - *b:ale_elm_ls_elm_analyse_trigger* - Type: |String| - Default: `'change'` - - One of 'change', 'save' or 'never' - -=============================================================================== -elm-make *ale-elm-elm-make* - -g:ale_elm_make_executable *g:ale_elm_make_executable* - *b:ale_elm_make_executable* - Type: |String| - Default: `'elm'` - - See |ale-integrations-local-executables| - - -g:ale_elm_make_use_global *g:ale_elm_make_use_global* - *b:ale_elm_make_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-erlang.txt b/dotfiles/.vim/plugged/ale/doc/ale-erlang.txt deleted file mode 100644 index ede179d1..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-erlang.txt +++ /dev/null @@ -1,106 +0,0 @@ -=============================================================================== -ALE Erlang Integration *ale-erlang-options* - - -=============================================================================== -dialyzer *ale-erlang-dialyzer* - -g:ale_erlang_dialyzer_executable *g:ale_erlang_dialyzer_executable* - *b:ale_erlang_dialyzer_executable* - Type: |String| - Default: `'dialyzer'` - - This variable can be changed to specify the dialyzer executable. - - -g:ale_erlang_dialyzer_options *g:ale_erlang_dialyzer_options* - *b:ale_erlang_dialyzer_options* - Type: |String| - Default: `'-Wunmatched_returns -Werror_handling -Wrace_conditions -Wunderspec'` - - This variable can be changed to specify the options to pass to the dialyzer - executable. - -g:ale_erlang_dialyzer_plt_file *g:ale_erlang_dialyzer_plt_file* - *b:ale_erlang_dialyzer_plt_file* - Type: |String| - - This variable can be changed to specify the path to the PLT file. By - default, it will search for the PLT file inside the `_build` directory. If - there isn't one, it will fallback to the path `$REBAR_PLT_DIR/dialyzer/plt`. - Otherwise, it will default to `$HOME/.dialyzer_plt`. - - -g:ale_erlang_dialyzer_rebar3_profile *g:ale_erlang_dialyzer_rebar3_profile* - *b:ale_erlang_dialyzer_rebar3_profile* - Type: |String| - Default: `'default'` - - This variable can be changed to specify the profile that is used to - run dialyzer with rebar3. - - -------------------------------------------------------------------------------- -elvis *ale-erlang-elvis* - -g:ale_erlang_elvis_executable *g:ale_erlang_elvis_executable* - *b:ale_erlang_elvis_executable* - Type: |String| - Default: `'elvis'` - - This variable can be changed to specify the elvis executable. - - -------------------------------------------------------------------------------- -erlc *ale-erlang-erlc* - -g:ale_erlang_erlc_executable *g:ale_erlang_erlc_executable* - *b:ale_erlang_erlc_executable* - Type: |String| - Default: `'erlc'` - - This variable can be changed to specify the erlc executable. - - -g:ale_erlang_erlc_options *g:ale_erlang_erlc_options* - *b:ale_erlang_erlc_options* - Type: |String| - Default: `''` - - This variable controls additional parameters passed to `erlc`, such as `-I` - or `-pa`. - - -------------------------------------------------------------------------------- -erlfmt *ale-erlang-erlfmt* - -g:ale_erlang_erlfmt_executable *g:ale_erlang_erlfmt_executable* - *b:ale_erlang_erlfmt_executable* - Type: |String| - Default: `'erlfmt'` - - This variable can be changed to specify the erlfmt executable. - - -g:ale_erlang_erlfmt_options *g:ale_erlang_erlfmt_options* - *b:ale_erlang_erlfmt_options* - Type: |String| - Default: `''` - - This variable controls additional parameters passed to `erlfmt`, such as - `--insert-pragma` or `--print-width`. - - -------------------------------------------------------------------------------- -syntaxerl *ale-erlang-syntaxerl* - -g:ale_erlang_syntaxerl_executable *g:ale_erlang_syntaxerl_executable* - *b:ale_erlang_syntaxerl_executable* - Type: |String| - Default: `'syntaxerl'` - - This variable can be changed to specify the syntaxerl executable. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-eruby.txt b/dotfiles/.vim/plugged/ale/doc/ale-eruby.txt deleted file mode 100644 index 48a34895..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-eruby.txt +++ /dev/null @@ -1,58 +0,0 @@ -=============================================================================== -ALE Eruby Integration *ale-eruby-options* - -There are four linters for `eruby` files: - -- `erb` -- `erblint` -- `erubis` -- `erubi` -- `ruumba` - -`erb` is in the Ruby standard library and is mostly universal. `erubis` is the -default parser in Rails between 3.0 and 5.1. `erubi` is the default in Rails -5.1 and later. `ruumba` can extract Ruby from eruby files and run rubocop on -the result. To selectively enable a subset, see |g:ale_linters|. - -=============================================================================== -erblint *ale-eruby-erblint* - -g:ale_eruby_erblint_executable *g:ale_eruby_erblint_executable* - *b:ale_eruby_erblint_executable* - Type: |String| - Default: `'erblint'` - - Override the invoked erblint binary. This is useful for running erblint - from binstubs or a bundle. - - -g:ale_eruby_erblint_options *g:ale_ruby_erblint_options* - *b:ale_ruby_erblint_options* - Type: |String| - Default: `''` - - This variable can be change to modify flags given to erblint. - - -=============================================================================== -ruumba *ale-eruby-ruumba* - -g:ale_eruby_ruumba_executable *g:ale_eruby_ruumba_executable* - *b:ale_eruby_ruumba_executable* - Type: String - Default: `'ruumba` - - Override the invoked ruumba binary. This is useful for running ruumba - from binstubs or a bundle. - - -g:ale_eruby_ruumba_options *g:ale_ruby_ruumba_options* - *b:ale_ruby_ruumba_options* - Type: |String| - Default: `''` - - This variable can be change to modify flags given to ruumba. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-fish.txt b/dotfiles/.vim/plugged/ale/doc/ale-fish.txt deleted file mode 100644 index 7dbbc10c..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-fish.txt +++ /dev/null @@ -1,31 +0,0 @@ -=============================================================================== -ALE Fish Integration *ale-fish-options* - -Lints fish files using `fish -n`. - -Note that `fish -n` is not foolproof: it sometimes gives false positives or -errors that are difficult to parse without more context. This integration skips -displaying errors if an error message is not found. - -If ALE is not showing any errors but your file does not run as expected, run -`fish -n ` from the command line. - -=============================================================================== -fish_indent *ale-fish-fish_indent* - -g:ale_fish_fish_indent_executable *g:ale_fish_fish_indent_executable* - *b:ale_fish_fish_indent_executable* - Type: |String| - Default: `'fish_indent'` - - This variable can be changed to use a different executable for fish_indent. - -g:ale_fish_fish_indent_options *g:ale_fish_fish_indent_options* - *b:ale_fish_fish_indent_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to fish_indent. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-fortran.txt b/dotfiles/.vim/plugged/ale/doc/ale-fortran.txt deleted file mode 100644 index c9b7e8e2..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-fortran.txt +++ /dev/null @@ -1,55 +0,0 @@ -=============================================================================== -ALE Fortran Integration *ale-fortran-options* - - -=============================================================================== -gcc *ale-fortran-gcc* - -g:ale_fortran_gcc_executable *g:ale_fortran_gcc_executable* - *b:ale_fortran_gcc_executable* - Type: |String| - Default: `'gcc'` - - This variable can be changed to modify the executable used for checking - Fortran code with GCC. - - -g:ale_fortran_gcc_options *g:ale_fortran_gcc_options* - *b:ale_fortran_gcc_options* - Type: |String| - Default: `'-Wall'` - - This variable can be changed to modify flags given to gcc. - - -g:ale_fortran_gcc_use_free_form *g:ale_fortran_gcc_use_free_form* - *b:ale_fortran_gcc_use_free_form* - Type: |Number| - Default: `1` - - When set to `1`, the `-ffree-form` flag will be used for GCC, to check files - with the free form layout. When set to `0`, `-ffixed-form` will be used - instead, for checking files with fixed form layouts. - - -=============================================================================== -language_server *ale-fortran-language-server* - -g:ale_fortran_language_server_executable *g:ale_fortran_language_server_executable* - *b:ale_fortran_language_server_executable* - Type: |String| - Default: `'fortls'` - - This variable can be changed to modify the executable used for the Fortran - Language Server. - -g:ale_fortran_language_server_use_global *g:ale_fortran_language_server_use_global* - *b:ale_fortran_language_server_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-fountain.txt b/dotfiles/.vim/plugged/ale/doc/ale-fountain.txt deleted file mode 100644 index ac0870cf..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-fountain.txt +++ /dev/null @@ -1,6 +0,0 @@ -=============================================================================== -ALE Fountain Integration *ale-fountain-options* - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-fuse.txt b/dotfiles/.vim/plugged/ale/doc/ale-fuse.txt deleted file mode 100644 index 0849c371..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-fuse.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE FusionScript Integration *ale-fuse-options* - - -=============================================================================== -fusion-lint *ale-fuse-fusionlint* - -g:ale_fusion_fusionlint_executable *g:ale_fuse_fusionlint_executable* - *b:ale_fuse_fusionlint_executable* - Type: |String| - Default: `'fusion-lint'` - - This variable can be changed to change the path to fusion-lint. - - -g:ale_fuse_fusionlint_options *g:ale_fuse_fusionlint_options* - *b:ale_fuse_fusionlint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to fusion-lint. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-gitcommit.txt b/dotfiles/.vim/plugged/ale/doc/ale-gitcommit.txt deleted file mode 100644 index 38f3fd90..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-gitcommit.txt +++ /dev/null @@ -1,44 +0,0 @@ -=============================================================================== -ALE Git Commit Integration *ale-gitcommit-options* - - -=============================================================================== -gitlint *ale-gitcommit-gitlint* - -g:ale_gitcommit_gitlint_executable *g:ale_gitcommit_gitlint_executable* - *b:ale_gitcommit_gitlint_executable* - Type: |String| - Default: `'gitlint'` - - This variable can be changed to modify the executable used for gitlint. - - -g:ale_gitcommit_gitlint_options *g:ale_gitcommit_gitlint_options* - *b:ale_gitcommit_gitlint_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the gitlint - invocation. For example, you can specify the path to a configuration file. > - - let g:ale_gitcommit_gitlint_options = '-C /home/user/.config/gitlint.ini' -< - You can also disable particular error codes using this option. For example, - you can ignore errors for git commits with a missing body. > - - let g:ale_gitcommit_gitlint_options = '--ignore B6' -< - -g:ale_gitcommit_gitlint_use_global *g:ale_gitcommit_gitlint_use_global* - *b:ale_gitcommit_gitlint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable controls whether or not ALE will search for gitlint in a - virtualenv directory first. If this variable is set to `1`, then ALE will - always use |g:ale_gitcommit_gitlint_executable| for the executable path. - - Both variables can be set with `b:` buffer variables instead. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-glsl.txt b/dotfiles/.vim/plugged/ale/doc/ale-glsl.txt deleted file mode 100644 index 257de751..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-glsl.txt +++ /dev/null @@ -1,56 +0,0 @@ -=============================================================================== -ALE GLSL Integration *ale-glsl-options* - *ale-integration-glsl* - -=============================================================================== -Integration Information - - Since Vim does not detect the glsl file types out-of-the-box, you need the - runtime files for glsl from here: https://github.com/tikhomirov/vim-glsl - - Note that the current glslang-based linter expects glslangValidator in - standard paths. If it's not installed system-wide you can set - |g:ale_glsl_glslang_executable| to a specific path. - - -=============================================================================== -glslang *ale-glsl-glslang* - -g:ale_glsl_glslang_executable *g:ale_glsl_glslang_executable* - *b:ale_glsl_glslang_executable* - Type: |String| - Default: `'glslangValidator'` - - This variable can be changed to change the path to glslangValidator. - - -g:ale_glsl_glslang_options *g:ale_glsl_glslang_options* - *b:ale_glsl_glslang_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to glslangValidator. - - -=============================================================================== -glslls *ale-glsl-glslls* - -g:ale_glsl_glslls_executable *g:ale_glsl_glslls_executable* - *b:ale_glsl_glslls_executable* - Type: |String| - Default: `'glslls'` - - This variable can be changed to change the path to glslls. - See |ale-integrations-local-executables| - -g:ale_glsl_glslls_logfile *g:ale_glsl_glslls_logfile* - *b:ale_glsl_glslls_logfile* - Type: |String| - Default: `''` - - Setting this variable to a writeable file path will enable logging to that - file. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-go.txt b/dotfiles/.vim/plugged/ale/doc/ale-go.txt deleted file mode 100644 index bce85470..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-go.txt +++ /dev/null @@ -1,372 +0,0 @@ -=============================================================================== -ALE Go Integration *ale-go-options* - - -=============================================================================== -Integration Information - -The `gometalinter` linter is disabled by default. ALE enables `gofmt`, -`golint` and `go vet` by default. It also supports `staticcheck`, `go -build`, `gosimple`, `golangserver`. - -To enable `gometalinter`, update |g:ale_linters| as appropriate: -> - " Enable all of the linters you want for Go. - let g:ale_linters = {'go': ['gometalinter', 'gofmt']} -< -A possible configuration is to enable `gometalinter` and `gofmt` but paired -with the `--fast` option, set by |g:ale_go_gometalinter_options|. This gets you -the benefit of running a number of linters, more than ALE would by default, -while ensuring it doesn't run any linters known to be slow or resource -intensive. - -g:ale_go_go_executable *g:ale_go_go_executable* - *b:ale_go_go_executable* - - Type: |String| - Default: `'go'` - - The executable that will be run for the `gobuild` and `govet` linters, and - the `gomod` fixer. - - -g:ale_go_go111module *g:ale_go_go111module* - *b:ale_go_go111module* - Type: |String| - Default: `''` - - Override the value of the `$GO111MODULE` environment variable for - golang tools. - - -=============================================================================== -bingo *ale-go-bingo* - -g:ale_go_bingo_executable *g:ale_go_bingo_executable* - *b:ale_go_bingo_executable* - Type: |String| - Default: `'bingo'` - - Location of the bingo binary file. - - -g:ale_go_bingo_options *g:ale_go_bingo_options* - *b:ale_go_bingo_options* - Type: |String| - Default: `''` - - -=============================================================================== -cspell *ale-go-cspell* - -See |ale-cspell-options| - -=============================================================================== -gobuild *ale-go-gobuild* - -g:ale_go_gobuild_options *g:ale_go_gobuild_options* - *b:ale_go_gobuild_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the gobuild linter. - They are injected directly after "go test". - - -=============================================================================== -gofmt *ale-go-gofmt* - -g:ale_go_gofmt_options *g:ale_go_gofmt_options* - *b:ale_go_gofmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the gofmt fixer. - - -=============================================================================== -gofumpt *ale-go-gofumpt* - -g:ale_go_gofumpt_executable *g:ale_go_gofumpt_executable* - *b:ale_go_gofumpt_executable* - Type: |String| - Default: `'gofumpt'` - - Executable to run to use as the gofumpt fixer. - -g:ale_go_gofumpt_options *g:ale_go_gofumpt_options* - *b:ale_go_gofumpt_options* - Type: |String| - Default: `''` - - Options to pass to the gofumpt fixer. - - -=============================================================================== -golangci-lint *ale-go-golangci-lint* - -`golangci-lint` is a `lint_file` linter, which only lints files that are -written to disk. This differs from the default behavior of linting the buffer. -See: |ale-lint-file| - -g:ale_go_golangci_lint_executable *g:ale_go_golangci_lint_executable* - *b:ale_go_golangci_lint_executable* - Type: |String| - Default: `'golangci-lint'` - - The executable that will be run for golangci-lint. - - -g:ale_go_golangci_lint_options *g:ale_go_golangci_lint_options* - *b:ale_go_golangci_lint_options* - Type: |String| - Default: `'--enable-all'` - - This variable can be changed to alter the command-line arguments to the - golangci-lint invocation. - - -g:ale_go_golangci_lint_package *g:ale_go_golangci_lint_package* - *b:ale_go_golangci_lint_package* - Type: |Number| - Default: `0` - - When set to `1`, the whole Go package will be checked instead of only the - current file. - - -=============================================================================== -golangserver *ale-go-golangserver* - -g:ale_go_langserver_executable *g:ale_go_langserver_executable* - *b:ale_go_langserver_executable* - Type: |String| - Default: `'go-langserver'` - - Location of the go-langserver binary file. - - -g:ale_go_langserver_options *g:ale_go_langserver_options* - *b:ale_go_langserver_options* - Type: |String| - Default: `''` - - Additional options passed to the go-langserver command. Note that the - `-gocodecompletion` option is ignored because it is handled automatically - by the |g:ale_completion_enabled| variable. - - -=============================================================================== -golines *ale-go-golines* - -g:ale_go_golines_executable *g:ale_go_lines_executable* - *b:ale_go_lines_executable* - Type: |String| - Default: `'golines'` - - Location of the golines binary file - -g:ale_go_golines_options *g:ale_go_golines_options* - *b:ale_go_golines_options* - Type: |String| - Default: '' - - Additional options passed to the golines command. By default golines has - --max-length=100 (lines above 100 characters will be wrapped) - - -=============================================================================== -golint *ale-go-golint* - -g:ale_go_golint_executable *g:ale_go_golint_executable* - *b:ale_go_golint_executable* - Type: |String| - Default: `'golint'` - - This variable can be set to change the golint executable path. - - -g:ale_go_golint_options *g:ale_go_golint_options* - *b:ale_go_golint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the golint linter. - - -=============================================================================== -gometalinter *ale-go-gometalinter* - -`gometalinter` is a `lint_file` linter, which only lints files that are -written to disk. This differs from the default behavior of linting the buffer. -See: |ale-lint-file| - -g:ale_go_gometalinter_executable *g:ale_go_gometalinter_executable* - *b:ale_go_gometalinter_executable* - Type: |String| - Default: `'gometalinter'` - - The executable that will be run for gometalinter. - - -g:ale_go_gometalinter_options *g:ale_go_gometalinter_options* - *b:ale_go_gometalinter_options* - Type: |String| - Default: `''` - - This variable can be changed to alter the command-line arguments to the - gometalinter invocation. - - Since `gometalinter` runs a number of linters that can consume a lot of - resources it's recommended to set this option to a value of `--fast` if you - use `gometalinter` as one of the linters in |g:ale_linters|. This disables a - number of linters known to be slow or consume a lot of resources. - - -g:ale_go_gometalinter_lint_package *g:ale_go_gometalinter_lint_package* - *b:ale_go_gometalinter_lint_package* - Type: |Number| - Default: `0` - - When set to `1`, the whole Go package will be checked instead of only the - current file. - - -=============================================================================== -gopls *ale-go-gopls* - -gopls is the official Go language server, and is enabled for use with ALE by -default. - -To install the latest stable version of `gopls` to your `$GOPATH`, try the -following command: > - - GO111MODULE=on go get golang.org/x/tools/gopls@latest -< -If `$GOPATH` is readable by ALE, it should probably work without you having to -do anything else. See the `gopls` README file for more information: - -https://github.com/golang/tools/blob/master/gopls/README.md - - -g:ale_go_gopls_executable *g:ale_go_gopls_executable* - *b:ale_go_gopls_executable* - Type: |String| - Default: `'gopls'` - - See |ale-integrations-local-executables| - - ALE will search for `gopls` in locally installed directories first by - default, and fall back on a globally installed `gopls` if it can't be found - otherwise. - - -g:ale_go_gopls_options *g:ale_go_gopls_options* - *b:ale_go_gopls_options* - Type: |String| - Default: `''` - - Command-line options passed to the gopls executable. See `gopls -h`. - - -g:ale_go_gopls_init_options *g:ale_go_gopls_init_options* - *b:ale_go_gopls_init_options* - Type: |Dictionary| - Default: `{}` - - LSP initialization options passed to gopls. This can be used to configure - the behaviour of gopls. - - Example: > - let g:ale_go_gopls_init_options = {'ui.diagnostic.analyses': { - \ 'composites': v:false, - \ 'unusedparams': v:true, - \ 'unusedresult': v:true, - \ }} -< - - For a full list of supported analyzers, see: - https://github.com/golang/tools/blob/master/gopls/doc/analyzers.md - - -g:ale_go_gopls_use_global *g:ale_go_gopls_use_global* - *b:ale_go_gopls_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -govet *ale-go-govet* - -g:ale_go_govet_options *g:ale_go_govet_options* - *b:ale_go_govet_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the go vet linter. - - -=============================================================================== -revive *ale-go-revive* - -g:ale_go_revive_executable *g:ale_go_revive_executable* - *b:ale_go_revive_executable* - Type: |String| - Default: `'revive'` - - This variable can be set to change the revive executable path. - - -g:ale_go_revive_options *g:ale_go_revive_options* - *b:ale_go_revive_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the revive - - -=============================================================================== -staticcheck *ale-go-staticcheck* - -g:ale_go_staticcheck_executable *g:ale_go_staticcheck_executable* - *b:ale_go_staticcheck_executable* - Type: |String| - Default: `'staticcheck'` - - See |ale-integrations-local-executables| - - ALE will search for `staticcheck` in locally installed directories first by - default, and fall back on a globally installed `staticcheck` if it can't be - found otherwise. - - -g:ale_go_staticcheck_options *g:ale_go_staticcheck_options* - *b:ale_go_staticcheck_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the staticcheck - linter. - - -g:ale_go_staticcheck_lint_package *g:ale_go_staticcheck_lint_package* - *b:ale_go_staticcheck_lint_package* - Type: |Number| - Default: `1` - - When set to `1`, the whole Go package will be checked instead of only the - current file. - - -g:ale_go_staticcheck_use_global *g:ale_go_staticcheck_use_global* - *b:ale_go_staticcheck_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-graphql.txt b/dotfiles/.vim/plugged/ale/doc/ale-graphql.txt deleted file mode 100644 index 603694bb..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-graphql.txt +++ /dev/null @@ -1,22 +0,0 @@ -=============================================================================== -ALE GraphQL Integration *ale-graphql-options* - - -=============================================================================== -eslint *ale-graphql-eslint* - -The `eslint` linter for GraphQL uses the JavaScript options for `eslint`; see: -|ale-javascript-eslint|. - -You will need the GraphQL ESLint plugin installed for this to work. - -=============================================================================== -gqlint *ale-graphql-gqlint* - -=============================================================================== -prettier *ale-graphql-prettier* - -See |ale-javascript-prettier| for information about the available options. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-hack.txt b/dotfiles/.vim/plugged/ale/doc/ale-hack.txt deleted file mode 100644 index 4776b8cf..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-hack.txt +++ /dev/null @@ -1,51 +0,0 @@ -=============================================================================== -ALE Hack Integration *ale-hack-options* - *ale-integration-hack* - - HHAST is disabled by default, as it executes code in the project root. - - Currently linters must be enabled globally. HHAST can be enabled with: - -> - let g:ale_linters = {'hack': ['hack', 'hhast']} -< - -=============================================================================== -hack *ale-hack-hack* - -g:ale_hack_hack_executable *g:ale_hack_hack_executable* - *b:ale_hack_hack_executable* - - Type: |String| - Default: `'hh_client'` - - This variable can be set to use a specific executable to interact with the - Hack typechecker. - - -=============================================================================== -hackfmt *ale-hack-hackfmt* - -g:ale_hack_hackfmt_options *g:ale_hack_hackfmt_options* - *b:ale_hack_hackfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the hackfmt fixer. - - -=============================================================================== -hhast *ale-hack-hhast* - -g:ale_hack_hhast_executable *g:ale_hack_hhast_executable* - *b:ale_hack_hhast_executable* - - Type: |String| - Default: `'vendor/bin/hhast-lint'` - - This variable can be set to use a specific executable to interact with the - Hack typechecker. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-handlebars.txt b/dotfiles/.vim/plugged/ale/doc/ale-handlebars.txt deleted file mode 100644 index 4a5a3870..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-handlebars.txt +++ /dev/null @@ -1,34 +0,0 @@ -=============================================================================== -ALE Handlebars Integration *ale-handlebars-options* - - -=============================================================================== -prettier *ale-handlebars-prettier* - -See |ale-javascript-prettier| for information about the available options. -Uses glimmer parser by default. - - -=============================================================================== -ember-template-lint *ale-handlebars-embertemplatelint* - -g:ale_handlebars_embertemplatelint_executable - *g:ale_handlebars_embertemplatelint_executable* - *b:ale_handlebars_embertemplatelint_executable* - Type: |String| - Default: `'ember-template-lint'` - - See |ale-integrations-local-executables| - - -g:ale_handlebars_embertemplatelint_use_global - *g:ale_handlebars_embertemplatelint_use_global* - *b:ale_handlebars_embertemplatelint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-haskell.txt b/dotfiles/.vim/plugged/ale/doc/ale-haskell.txt deleted file mode 100644 index 10b676d7..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-haskell.txt +++ /dev/null @@ -1,228 +0,0 @@ -=============================================================================== -ALE Haskell Integration *ale-haskell-options* - - -=============================================================================== -brittany *ale-haskell-brittany* - -g:ale_haskell_brittany_executable *g:ale_haskell_brittany_executable* - *b:ale_haskell_brittany_executable* - Type: |String| - Default: `'brittany'` - - This variable can be changed to use a different executable for brittany. - - -=============================================================================== -cspell *ale-haskell-cspell* - -See |ale-cspell-options| - - -=============================================================================== -floskell *ale-haskell-floskell* - -g:ale_haskell_floskell_executable *g:ale_haskell_floskell_executable* - *b:ale_haskell_floskell_executable* - Type: |String| - Default: `'floskell'` - - This variable can be changed to use a different executable for floskell. - - -=============================================================================== -ghc *ale-haskell-ghc* - -g:ale_haskell_ghc_options *g:ale_haskell_ghc_options* - *b:ale_haskell_ghc_options* - Type: |String| - Default: `'-fno-code -v0'` - - This variable can be changed to modify flags given to ghc. - - -=============================================================================== -ghc-mod *ale-haskell-ghc-mod* - -g:ale_haskell_ghc_mod_executable *g:ale_haskell_ghc_mod_executable* - *b:ale_haskell_ghc_mod_executable* - Type: |String| - Default: `'ghc-mod'` - - This variable can be changed to use a different executable for ghc-mod. - - -=============================================================================== -cabal-ghc *ale-haskell-cabal-ghc* - -g:ale_haskell_cabal_ghc_options *g:ale_haskell_cabal_ghc_options* - *b:ale_haskell_cabal_ghc_options* - Type: |String| - Default: `'-fno-code -v0'` - - This variable can be changed to modify flags given to ghc through cabal - exec. - - -=============================================================================== -hdevtools *ale-haskell-hdevtools* - -g:ale_haskell_hdevtools_executable *g:ale_haskell_hdevtools_executable* - *b:ale_haskell_hdevtools_executable* - Type: |String| - Default: `'hdevtools'` - - This variable can be changed to use a different executable for hdevtools. - - -g:ale_haskell_hdevtools_options *g:ale_haskell_hdevtools_options* - *b:ale_haskell_hdevtools_options* - Type: |String| - Default: `get(g:, 'hdevtools_options', '-g -Wall')` - - This variable can be changed to modify flags given to hdevtools. - - The hdevtools documentation recommends setting GHC options for `hdevtools` - with `g:hdevtools_options`. ALE will use the value of `g:hdevtools_options` - for the value of `g:ale_haskell_hdevtools_options` by default, so this - option can be respected and overridden specifically for ALE. - - -=============================================================================== -hfmt *ale-haskell-hfmt* - -g:ale_haskell_hfmt_executable *g:ale_haskell_hfmt_executable* - *b:ale_haskell_hfmt_executable* - Type: |String| - Default: `'hfmt'` - - This variable can be changed to use a different executable for hfmt. - - -=============================================================================== -hindent *ale-haskell-hindent* - -g:ale_haskell_hindent_executable *g:ale_haskell_hindent_executable* - *b:ale_haskell_hindent_executable* - Type: |String| - Default: `'hindent'` - - This variable can be changed to use a different executable for hindent. - - -=============================================================================== -hlint *ale-haskell-hlint* - -g:ale_haskell_hlint_executable *g:ale_haskell_hlint_executable* - *b:ale_haskell_hlint_executable* - Type: |String| - Default: `'hlint'` - - This variable can be changed to use a different executable for hlint. - - -g:ale_haskell_hlint_options g:ale_haskell_hlint_options - b:ale_haskell_hlint_options - Type: String - Default: '' - - This variable can be used to pass extra options to the underlying hlint - executable. - - -=============================================================================== -hls *ale-haskell-hls* - -g:ale_haskell_hls_executable *g:ale_haskell_hls_executable* - *b:ale_haskell_hls_executable* - Type: |String| - Default: `'haskell-language-server-wrapper'` - - This variable can be changed to use a different executable for the haskell - language server. - - -g:ale_haskell_hls_config *g:ale_haskell_hls_config* - *b:ale_haskell_hls_config* - Type: |Dictionary| - Default: `{}` - - Dictionary with configuration settings for HLS. For example, to see more - completions: -> - let g:ale_haskell_hls_config = {'haskell': {'maxCompletions': 250}} -< - Refer to HLS documentation for possible settings: - https://haskell-language-server.readthedocs.io/en/latest/configuration.html#language-specific-server-options - - -=============================================================================== -stack-build *ale-haskell-stack-build* - -g:ale_haskell_stack_build_options *g:ale_haskell_stack_build_options* - *b:ale_haskell_stack_build_options* - Type: |String| - Default: `'--fast'` - - We default to using `'--fast'`. Since Stack generates binaries, your - programs will be slower unless you separately rebuild them outside of ALE. - - -=============================================================================== -stack-ghc *ale-haskell-stack-ghc* - -g:ale_haskell_stack_ghc_options *g:ale_haskell_stack_ghc_options* - *b:ale_haskell_stack_ghc_options* - Type: |String| - Default: `'-fno-code -v0'` - - This variable can be changed to modify flags given to ghc through `stack - ghc` - - -=============================================================================== -stylish-haskell *ale-haskell-stylish-haskell* - -g:ale_haskell_stylish_haskell_executable - *g:ale_haskell_stylish_haskell_executable* - *b:ale_haskell_stylish_haskell_executable* - Type: |String| - Default: `'stylish-haskell'` - - This variable can be changed to use a different executable for stylish-haskell. - - -=============================================================================== -hie *ale-haskell-hie* - -g:ale_haskell_hie_executable *g:ale_haskell_hie_executable* - *b:ale_haskell_hie_executable* - Type: |String| - Default: `'hie'` - - This variable can be changed to use a different executable for the haskell - ide engine. i.e. `'hie-wrapper'` - - -=============================================================================== -ormolu *ale-haskell-ormolu* - -g:ale_haskell_ormolu_executable *g:ale_haskell_ormolu_executable* - *b:ale_haskell_ormolu_executable* - Type: |String| - Default: `'ormolu'` - - This variable can be changed to use a different executable for ormolu. - - -g:ale_haskell_ormolu_options *g:ale_haskell_ormolu_options* - *b:ale_haskell_ormolu_options* - Type: String - Default: '' - - This variable can be used to pass extra options to the underlying ormolu - executable. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-hcl.txt b/dotfiles/.vim/plugged/ale/doc/ale-hcl.txt deleted file mode 100644 index 71e1114e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-hcl.txt +++ /dev/null @@ -1,16 +0,0 @@ -=============================================================================== -ALE HCL Integration *ale-hcl-options* - - -=============================================================================== -packer-fmt *ale-hcl-packer-fmt* - -See |ale-packer-fmt-fixer| for information about the available options. - -=============================================================================== -terraform-fmt *ale-hcl-terraform-fmt* - -See |ale-terraform-fmt-fixer| for information about the available options. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-help.txt b/dotfiles/.vim/plugged/ale/doc/ale-help.txt deleted file mode 100644 index 89872545..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-help.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE Help Integration *ale-help-options* - - -=============================================================================== -cspell *ale-help-cspell* - -See |ale-cspell-options| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-html.txt b/dotfiles/.vim/plugged/ale/doc/ale-html.txt deleted file mode 100644 index 6d18afd1..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-html.txt +++ /dev/null @@ -1,202 +0,0 @@ -=============================================================================== -ALE HTML Integration *ale-html-options* - - -=============================================================================== -angular *ale-html-angular* - -ALE supports language server features for Angular. You can install it via `npm`: > - - $ npm install --save-dev @angular/language-server -< -Angular 11 and up are supported. - - -g:ale_html_angular_executable *g:ale_html_angular_executable* - *b:ale_html_angular_executable* - Type: |String| - Default: `'ngserver'` - - See |ale-integrations-local-executables| - - -g:ale_html_angular_use_global *g:ale_html_angular_use_global* - *b:ale_html_angular_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -cspell *ale-html-cspell* - -See |ale-cspell-options| - -=============================================================================== -fecs *ale-html-fecs* - -`fecs` options for HTML are the same as the options for JavaScript, and both -of them read `./.fecsrc` as the default configuration file. - -See: |ale-javascript-fecs|. - - -=============================================================================== -html-beautify *ale-html-beautify* - -g:ale_html_beautify_executable *g:ale_html_beautify_executable* - *b:ale_html_beautify_executable* - Type: |String| - Default: `'html-beautify'` - - See |ale-integrations-local-executables| - - -g:ale_html_beautify_options *g:ale_html_beautify_options* - *b:ale_html_beautify_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to html-beautify. - - -g:ale_html_beautify_use_global *g:ale_html_beautify_use_global* - *b:ale_html_beautify_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -htmlhint *ale-html-htmlhint* - -g:ale_html_htmlhint_executable *g:ale_html_htmlhint_executable* - *b:ale_html_htmlhint_executable* - Type: |String| - Default: `'htmlhint'` - - See |ale-integrations-local-executables| - - -g:ale_html_htmlhint_options *g:ale_html_htmlhint_options* - *b:ale_html_htmlhint_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to HTMLHint. - - -g:ale_html_htmlhint_use_global *g:ale_html_htmlhint_use_global* - *b:ale_html_htmlhint_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -prettier *ale-html-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -stylelint *ale-html-stylelint* - -g:ale_html_stylelint_executable *g:ale_html_stylelint_executable* - *b:ale_html_stylelint_executable* - Type: |String| - Default: `'stylelint'` - - See |ale-integrations-local-executables| - - -g:ale_html_stylelint_options *g:ale_html_stylelint_options* - *b:ale_html_stylelint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to stylelint. - - -g:ale_html_stylelint_use_global *g:ale_html_stylelint_use_global* - *b:ale_html_stylelint_use_global* - Type: |String| - Default: `0` - - See |ale-integrations-local-executables| - - -=============================================================================== -tidy *ale-html-tidy* - -`tidy` is a console application which corrects and cleans up HTML and XML -documents by fixing markup errors and upgrading legacy code to modern -standards. - -Note: -`/usr/bin/tidy` on macOS (installed by default) is too old. It was released -on 31 Oct 2006. It does not consider modern HTML specs (HTML5) and shows -outdated warnings. So |ale| ignores `/usr/bin/tidy` on macOS. - -To use `tidy` on macOS, please install the latest version with Homebrew: -> - $ brew install tidy-html5 -< -`/usr/local/bin/tidy` is installed. - -g:ale_html_tidy_executable *g:ale_html_tidy_executable* - *b:ale_html_tidy_executable* - Type: |String| - Default: `'tidy'` - - This variable can be changed to change the path to tidy. - - -g:ale_html_tidy_options *g:ale_html_tidy_options* - *b:ale_html_tidy_options* - Type: |String| - Default: `'-q -e -language en'` - - This variable can be changed to change the arguments provided to the - executable. - - ALE will attempt to automatically detect the appropriate file encoding to - provide to html-tidy, and fall back to UTF-8 when encoding detection fails. - - The recognized file encodings are as follows: ascii, big5, cp1252 (win1252), - cp850 (ibm858), cp932 (shiftjis), iso-2022-jp (iso-2022), latin1, macroman - (mac), sjis (shiftjis), utf-16le, utf-16, utf-8 - - -g:ale_html_tidy_use_global *g:html_tidy_use_global* - - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -vscodehtml *ale-html-vscode* - -Website: https://github.com/hrsh7th/vscode-langservers-extracted - -Installation -------------------------------------------------------------------------------- - -Install VSCode html language server either globally or locally: > - - npm install -g vscode-langservers-extracted -< - -=============================================================================== -write-good *ale-html-write-good* - -See |ale-write-good-options| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-idris.txt b/dotfiles/.vim/plugged/ale/doc/ale-idris.txt deleted file mode 100644 index c7500b0d..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-idris.txt +++ /dev/null @@ -1,23 +0,0 @@ -=============================================================================== -ALE Idris Integration *ale-idris-options* - -=============================================================================== -idris *ale-idris-idris* - -g:ale_idris_idris_executable *g:ale_idris_idris_executable* - *b:ale_idris_idris_executable* - Type: |String| - Default: `'idris'` - - This variable can be changed to change the path to idris. - - -g:ale_idris_idris_options *g:ale_idris_idris_options* - *b:ale_idris_idris_options* - Type: |String| - Default: `'--total --warnpartial --warnreach --warnipkg'` - - This variable can be changed to modify flags given to idris. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-ink.txt b/dotfiles/.vim/plugged/ale/doc/ale-ink.txt deleted file mode 100644 index 9412a09f..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-ink.txt +++ /dev/null @@ -1,40 +0,0 @@ -=============================================================================== -ALE Ink Integration *ale-ink-options* - - -=============================================================================== -ink-language-server *ale-ink-language-server* - -Ink Language Server - (https://github.com/ephraim/ink-language-server) - -g:ale_ink_ls_executable g:ale_ink_ls_executable - b:ale_ink_ls_executable - Type: |String| - Default: `'ink-language-server'` - - Ink language server executable. - -g:ale_ink_ls_initialization_options - g:ale_ink_ls_initialization_options - b:ale_ink_ls_initialization_options - Type: |Dictionary| - Default: `{}` - - Dictionary containing configuration settings that will be passed to the - language server at startup. For certain platforms and certain story - structures, the defaults will suffice. However, many projects will need to - change these settings - see the ink-language-server website for more - information. - - An example of setting non-default options: - { - \ 'ink': { - \ 'mainStoryPath': 'init.ink', - \ 'inklecateExecutablePath': '/usr/local/bin/inklecate', - \ 'runThroughMono': v:false - \ } - \} - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-inko.txt b/dotfiles/.vim/plugged/ale/doc/ale-inko.txt deleted file mode 100644 index 5ca14af6..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-inko.txt +++ /dev/null @@ -1,22 +0,0 @@ -=============================================================================== -ALE Inko Integration *ale-inko-options* - *ale-integration-inko* - -=============================================================================== -Integration Information - - Currently, the only supported linter for Inko is the Inko compiler itself. - -=============================================================================== -inko *ale-inko-inko* - -g:ale_inko_inko_executable *g:ale_inko_inko_executable* - *b:ale_inko_inko_executable* - Type: |String| - Default: `'inko'` - - This variable can be modified to change the executable path for `inko`. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-ispc.txt b/dotfiles/.vim/plugged/ale/doc/ale-ispc.txt deleted file mode 100644 index bf30e8e3..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-ispc.txt +++ /dev/null @@ -1,24 +0,0 @@ -=============================================================================== -ALE ISPC Integration *ale-ispc-options* - - -=============================================================================== -ispc *ale-ispc-ispc* - -g:ale_ispc_ispc_executable *g:ale_ispc_ispc_executable* - *b:ale_ispc_ispc_executable* - Type: |String| - Default: `'ispc'` - - This variable can be changed to use a different executable for ispc. - - -g:ale_ispc_ispc_options *g:ale_ispc_ispc_options* - *b:ale_ispc_ispc_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to ispc. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-java.txt b/dotfiles/.vim/plugged/ale/doc/ale-java.txt deleted file mode 100644 index fa38fd3a..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-java.txt +++ /dev/null @@ -1,284 +0,0 @@ -=============================================================================== -ALE Java Integration *ale-java-options* - - -=============================================================================== -checkstyle *ale-java-checkstyle* - -g:ale_java_checkstyle_config *g:ale_java_checkstyle_config* - *b:ale_java_checkstyle_config* - - Type: |String| - Default: `'/google_checks.xml'` - - A path to a checkstyle configuration file. - - If a configuration file is specified with |g:ale_java_checkstyle_options|, - it will be preferred over this setting. - - The path to the configuration file can be an absolute path or a relative - path. ALE will search for the relative path in parent directories. - - -g:ale_java_checkstyle_executable *g:ale_java_checkstyle_executable* - *b:ale_java_checkstyle_executable* - - Type: |String| - Default: 'checkstyle' - - This variable can be changed to modify the executable used for checkstyle. - - -g:ale_java_checkstyle_options *g:ale_java_checkstyle_options* - *b:ale_java_checkstyle_options* - - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to checkstyle. - - If a configuration file is specified with `-c`, it will be used instead of - configuration files set with |g:ale_java_checkstyle_config|. - - -=============================================================================== -cspell *ale-java-cspell* - -See |ale-cspell-options| - - -=============================================================================== -javac *ale-java-javac* - -g:ale_java_javac_classpath *g:ale_java_javac_classpath* - *b:ale_java_javac_classpath* - Type: |String| or |List| - Default: `''` - - This variable can be set to change the global classpath for Java. - - -g:ale_java_javac_executable *g:ale_java_javac_executable* - *b:ale_java_javac_executable* - Type: |String| - Default: `'javac'` - - This variable can be set to change the executable path used for javac. - - -g:ale_java_javac_options *g:ale_java_javac_options* - *b:ale_java_javac_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to javac. - -g:ale_java_javac_sourcepath *g:ale_java_javac_sourcepath* - *b:ale_java_javac_sourcepath* - Type: |String| or |List| - Default: `''` - -This variable can set multiple source code paths, the source code path is a -relative path (relative to the project root directory). - -Example: - -String type: -Note that the unix system separator is a colon(`:`) window system -is a semicolon(`;`). -> - let g:ale_java_javac_sourcepath = 'build/gen/source/xx/main:build/gen/source' -< -List type: -> - let g:ale_java_javac_sourcepath = [ - \ 'build/generated/source/querydsl/main', - \ 'target/generated-sources/source/querydsl/main' - \ ] -< - -=============================================================================== -google-java-format *ale-java-google-java-format* - - -g:ale_java_google_java_format_executable - *g:ale_java_google_java_format_executable* - *b:ale_java_google_java_format_executable* - Type: |String| - Default: `'google-java-format'` - - See |ale-integrations-local-executables| - - -g:ale_java_google_java_format_options *g:ale_java_google_java_format_options* - *b:ale_java_google_java_format_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options - - -=============================================================================== -pmd *ale-java-pmd* - -g:ale_java_pmd_options *g:ale_java_pmd_options* - *b:ale_java_pmd_options* - - Type: String - Default: '-R category/java/bestpractices' - - This variable can be changed to modify flags given to PMD. Do not specify -f - and -d. They are added automatically. - - -=============================================================================== -javalsp *ale-java-javalsp* - -To enable Java LSP linter you need to download and build the vscode-javac -language server from https://github.com/georgewfraser/java-language-server. - -Before building the language server you need to install pre-requisites: npm, -maven, and protobuf. You also need to have Java 13 and JAVA_HOME properly -set. - -After downloading the source code and installing all pre-requisites you can -build the language server with the included build.sh script: - - scripts/build.sh - -This will create launch scripts for Linux, Mac, and Windows in the dist folder -within the repo: - - - lang_server_linux.sh - - lang_server_mac.sh - - lang_server_windows.sh - -To let ALE use this language server you need to set the -g:ale_java_javalsp_executable variable to the absolute path of the launcher -executable for your platform. - -g:ale_java_javalsp_executable *g:ale_java_javalsp_executable* - *b:ale_java_javalsp_executable* - Type: |String| - Default: `''` - -This variable must be set to the absolute path of the language server launcher -executable. For example: -> - let g:ale_java_javalsp_executable=/java-language-server/dist/lang_server_linux.sh -< - -g:ale_java_javalsp_config *g:ale_java_javalsp_config* - *b:ale_java_javalsp_config* - Type: |Dictionary| - Default: `{}` - -The javalsp linter automatically detects external depenencies for Maven and -Gradle projects. In case the javalsp fails to detect some of them, you can -specify them setting a dictionary to |g:ale_java_javalsp_config| variable. -> - let g:ale_java_javalsp_config = - \ { - \ 'java': { - \ 'externalDependencies': [ - \ 'junit:junit:jar:4.12:test', " Maven format - \ 'junit:junit:4.1' " Gradle format - \ ], - \ 'classPath': [ - \ 'lib/some-dependency.jar', - \ '/android-sdk/platforms/android-28.jar' - \ ] - \ } - \ } - -The Java language server will look for the dependencies you specify in -`externalDependencies` array in your Maven and Gradle caches ~/.m2 and -~/.gradle. - - -=============================================================================== -eclipselsp *ale-java-eclipselsp* - -To enable Eclipse JDT LSP linter you need to clone and build the eclipse.jdt.ls -language server from https://github.com/eclipse/eclipse.jdt.ls. Simply -clone the source code repo and then build the plugin: - - ./mvnw clean verify - -Note: currently, the build can only run when launched with JDK 11. More -recent versions can be used to run the server though. - -After build completes the files required to run the language server will be -located inside the repository folder `eclipse.jdt.ls`. Please ensure to set -|g:ale_java_eclipselsp_path| to the absolute path of that folder. - -You could customize compiler options and code assists of the server. -Under your project folder, modify the file `.settings/org.eclipse.jdt.core.prefs` -with options presented at -https://help.eclipse.org/neon/topic/org.eclipse.jdt.doc.isv/reference/api/org/eclipse/jdt/core/JavaCore.html. - -g:ale_java_eclipselsp_path *g:ale_java_eclipselsp_path* - *b:ale_java_eclipselsp_path* - - Type: |String| - Default: `'$HOME/eclipse.jdt.ls'` - - Absolute path to the location of the eclipse.jdt.ls repository folder. Or if - you have VSCode extension installed the absolute path to the VSCode - extensions folder (e.g. $HOME/.vscode/extensions/redhat.java-0.4x.0 in - Linux). - - -g:ale_java_eclipselsp_executable *g:ale_java_eclipse_executable* - *b:ale_java_eclipse_executable* - Type: |String| - Default: `'java'` - - This variable can be set to change the executable path used for java. - - -g:ale_java_eclipselsp_config_path *g:ale_java_eclipse_config_path* - *b:ale_java_eclipse_config_path* - Type: |String| - Default: `''` - - Set this variable to change the configuration directory path used by - eclipselsp (e.g. `$HOME/.jdtls` in Linux). - By default ALE will attempt to use the configuration within the installation - directory. - This setting is particularly useful when eclipselsp is installed in a - non-writable directory like `/usr/share/java/jdtls`, as is the case when - installed via system package. - - -g:ale_java_eclipselsp_workspace_path *g:ale_java_eclipselsp_workspace_path* - *b:ale_java_eclipselsp_workspace_path* - - Type: |String| - Default: `''` - - If you have Eclipse installed is good idea to set this variable to the - absolute path of the Eclipse workspace. If not set this value will be set to - the parent folder of the project root. - -g:ale_java_eclipselsp_javaagent *g:ale_java_eclipselsp_javaagent* - *b:ale_java_eclipselsp_javaagent* - - Type: |String| - Default: `''` - - A variable to add java agent for annotation processing such as Lombok. - If you have multiple java agent files, use space to separate them. - For example: -> - let g:ale_java_eclipselsp_javaagent='/eclipse/lombok.jar /eclipse/jacoco.jar' -< - -=============================================================================== -uncrustify *ale-java-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-javascript.txt b/dotfiles/.vim/plugged/ale/doc/ale-javascript.txt deleted file mode 100644 index 7d626efe..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-javascript.txt +++ /dev/null @@ -1,354 +0,0 @@ -=============================================================================== -ALE JavaScript Integration *ale-javascript-options* - - *ale-eslint-nested-configuration-files* - -For fixing files with ESLint, nested configuration files with `root: false` -are not supported. This is because ALE fixes files by writing the contents of -buffers to temporary files, and then explicitly sets the configuration file. -Configuration files which are set explicitly must be root configuration files. -If you are using nested configuration files, you should restructure your -project so your configuration files use `extends` instead. - -See the ESLint documentation here: -http://eslint.org/docs/user-guide/configuring#extending-configuration-files - -You should change the structure of your project from this: > - /path/foo/.eslintrc.js # root: true - /path/foo/bar/.eslintrc.js # root: false -< -To this: > - /path/foo/.base-eslintrc.js # Base configuration here - /path/foo/.eslintrc.js # extends: ["/path/foo/.base-eslintrc.js"] - /path/foo/bar/.eslintrc.js # extends: ["/path/foo/.base-eslintrc.js"] -< - -=============================================================================== -cspell *ale-javascript-cspell* - -See |ale-cspell-options| - - -=============================================================================== -deno *ale-javascript-deno* - -Check the docs over at |ale-typescript-deno|. - - -=============================================================================== -dprint *ale-javascript-dprint* - -See |ale-dprint-options| and https://dprint.dev/plugins/typescript - - -=============================================================================== -eslint *ale-javascript-eslint* - -g:ale_javascript_eslint_executable *g:ale_javascript_eslint_executable* - *b:ale_javascript_eslint_executable* - Type: |String| - Default: `'eslint'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_eslint_options *g:ale_javascript_eslint_options* - *b:ale_javascript_eslint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to eslint. - - -g:ale_javascript_eslint_use_global *g:ale_javascript_eslint_use_global* - *b:ale_javascript_eslint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_javascript_eslint_suppress_eslintignore - *g:ale_javascript_eslint_suppress_eslintignore* - *b:ale_javascript_eslint_suppress_eslintignore* - Type: |Number| - Default: `0` - - This variable can be set to `1` to disable warnings for files being ignored - by eslint. - - -g:ale_javascript_eslint_suppress_missing_config - *g:ale_javascript_eslint_suppress_missing_config* - *b:ale_javascript_eslint_suppress_missing_config* - Type: |Number| - Default: `0` - - This variable can be set to `1` to disable errors for missing eslint - configuration files. - - When turning this option on, eslint will not report any problems when no - configuration files are found. - - -=============================================================================== -fecs *ale-javascript-fecs* - -`fecs` is a lint tool for HTML/CSS/JavaScript, can be installed via: - - `$ npm install --save-dev fecs` - -And the configuration file is located at `./fecsrc`, see http://fecs.baidu.com -for more options. - - -g:ale_javascript_fecs_executable *g:ale_javascript_fecs_executable* - *b:ale_javascript_fecs_executable* - Type: |String| - Default: `'fecs'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_fecs_use_global *g:ale_javascript_fecs_use_global* - *b:ale_javascript_fecs_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -flow *ale-javascript-flow* - -g:ale_javascript_flow_executable *g:ale_javascript_flow_executable* - *b:ale_javascript_flow_executable* - Type: |String| - Default: `'flow'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_flow_use_home_config *g:ale_javascript_flow_use_home_config* - *b:ale_javascript_flow_use_home_config* - Type: |Number| - Default: `0` - - When set to `1`, ALE will allow Flow to be executed with configuration files - from your home directory. ALE will not run Flow with home directory - configuration files by default, as doing so can lead to Vim consuming all of - your RAM and CPU power. - - -g:ale_javascript_flow_use_global *g:ale_javascript_flow_use_global* - *b:ale_javascript_flow_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_javascript_flow_use_respect_pragma - *g:ale_javascript_flow_use_respect_pragma* - *b:ale_javascript_flow_use_respect_pragma* - Type: |Number| - Default: `1` - - By default, ALE will use the `--respect-pragma` option for `flow`, so only - files with the `@flow` pragma are checked by ALE. This option can be set to - `0` to disable that behavior, so all files can be checked by `flow`. - - -=============================================================================== -importjs *ale-javascript-importjs* - -g:ale_javascript_importjs_executable *g:ale_javascript_importjs_executable* - *b:ale_javascript_importjs_executable* - Type: |String| - Default: `'importjs'` - - -=============================================================================== -jscs *ale-javascript-jscs* - -g:ale_javascript_jscs_executable *g:ale_javascript_jscs_executable* - *b:ale_javascript_jscs_executable* - Type: |String| - Default: `'jscs'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_jscs_use_global *g:ale_javascript_jscs_use_global* - *b:ale_javascript_jscs_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -jshint *ale-javascript-jshint* - -g:ale_javascript_jshint_executable *g:ale_javascript_jshint_executable* - *b:ale_javascript_jshint_executable* - Type: |String| - Default: `'jshint'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_jshint_use_global *g:ale_javascript_jshint_use_global* - *b:ale_javascript_jshint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -prettier *ale-javascript-prettier* - -g:ale_javascript_prettier_executable *g:ale_javascript_prettier_executable* - *b:ale_javascript_prettier_executable* - Type: |String| - Default: `'prettier'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_prettier_options *g:ale_javascript_prettier_options* - *b:ale_javascript_prettier_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to prettier. - - -g:ale_javascript_prettier_use_global *g:ale_javascript_prettier_use_global* - *b:ale_javascript_prettier_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -prettier-eslint *ale-javascript-prettier-eslint* - -g:ale_javascript_prettier_eslint_executable - *g:ale_javascript_prettier_eslint_executable* - *b:ale_javascript_prettier_eslint_executable* - Type: |String| - Default: `'prettier-eslint'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_prettier_eslint_options - *g:ale_javascript_prettier_eslint_options* - *b:ale_javascript_prettier_eslint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to prettier-eslint. - - -g:ale_javascript_prettier_eslint_use_global - *g:ale_javascript_prettier_eslint_use_global* - *b:ale_javascript_prettier_eslint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -prettier-standard *ale-javascript-prettier-standard* - - -g:ale_javascript_prettier_standard_executable - *g:ale_javascript_prettier_standard_executable* - *b:ale_javascript_prettier_standard_executable* - Type: |String| - Default: `'prettier-standard'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_prettier_standard_options - *g:ale_javascript_prettier_standard_options* - *b:ale_javascript_prettier_standard_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to prettier-standard. - - -g:ale_javascript_prettier_standard_use_global - *g:ale_javascript_prettier_standard_use_global* - *b:ale_javascript_prettier_standard_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - - - -=============================================================================== -standard *ale-javascript-standard* - -g:ale_javascript_standard_executable *g:ale_javascript_standard_executable* - *b:ale_javascript_standard_executable* - Type: |String| - Default: `'standard'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_standard_options *g:ale_javascript_standard_options* - *b:ale_javascript_standard_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to standard. - - -g:ale_javascript_standard_use_global *g:ale_javascript_standard_use_global* - *b:ale_javascript_standard_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -xo *ale-javascript-xo* - -g:ale_javascript_xo_executable *g:ale_javascript_xo_executable* - *b:ale_javascript_xo_executable* - Type: |String| - Default: `'xo'` - - See |ale-integrations-local-executables| - - -g:ale_javascript_xo_options *g:ale_javascript_xo_options* - *b:ale_javascript_xo_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to xo. - - -g:ale_javascript_xo_use_global *g:ale_javascript_xo_use_global* - *b:ale_javascript_xo_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-json.txt b/dotfiles/.vim/plugged/ale/doc/ale-json.txt deleted file mode 100644 index 154aee62..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-json.txt +++ /dev/null @@ -1,170 +0,0 @@ -=============================================================================== -ALE JSON Integration *ale-json-options* - - -=============================================================================== -cspell *ale-json-cspell* - -See |ale-cspell-options| - - -=============================================================================== -dprint *ale-json-dprint* - -See |ale-dprint-options| and https://dprint.dev/plugins/json - - -=============================================================================== -eslint *ale-json-eslint* - -The `eslint` linter for JSON uses the JavaScript options for `eslint`; see: -|ale-javascript-eslint|. - -You will need a JSON ESLint plugin installed for this to work. - - -=============================================================================== -fixjson *ale-json-fixjson* - -fixjson is a JSON file fixer/formatter for humans using (relaxed) JSON5. -It provides: - -- Pretty-prints JSON input -- Fixes various failures while humans writing JSON - - Fixes trailing commas objects or arrays - - Fixes missing commas for elements of objects or arrays - - Adds quotes to keys in objects - - Newlines in strings - - Hex numbers - - Fixes single quotes to double quotes - -You can install it using npm: -> - $ npm install -g fixjson -< -ALE provides fixjson integration as a fixer. See |ale-fix|. - -g:ale_json_fixjson_executable *g:ale_json_fixjson_executable* - *b:ale_json_fixjson_executable* - - Type: |String| - Default: `'fixjson'` - - The executable that will be run for fixjson. - -g:ale_json_fixjson_options *g:ale_json_fixjson_options* - *b:ale_json_fixjson_options* - - Type: |String| - Default: `''` - - This variable can add extra options to the command executed for running - fixjson. - -g:ale_json_fixjson_use_global *g:ale_json_fixjson_use_global* - *b:ale_json_fixjson_use_global* - - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -jsonlint *ale-json-jsonlint* - -g:ale_json_jsonlint_executable *g:ale_json_jsonlint_executable* - *b:ale_json_jsonlint_executable* - - Type: |String| - Default: `'jsonlint'` - - The executable that will be run for jsonlint. - -g:ale_json_jsonlint_use_global *g:ale_json_jsonlint_use_global* - *b:ale_json_jsonlint_use_global* - - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -jq *ale-json-jq* - -g:ale_json_jq_executable *g:ale_json_jq_executable* - *b:ale_json_jq_executable* - Type: |String| - Default: `'jq'` - - This option can be changed to change the path for `jq`. - - -g:ale_json_jq_options *g:ale_json_jq_options* - *b:ale_json_jq_options* - Type: |String| - Default: `''` - - This option can be changed to pass extra options to `jq`. - -g:ale_json_jq_filters *g:ale_json_jq_filters* - *b:ale_json_jq_filters* - Type: |String| - Default: `'.'` - - This option can be changed to pass custom filters to `jq`. - - -=============================================================================== -prettier *ale-json-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -spectral *ale-json-spectral* - -Website: https://github.com/stoplightio/spectral - -Installation -------------------------------------------------------------------------------- - -Install spectral either globally or locally: > - - npm install @stoplight/spectral -g # global - npm install @stoplight/spectral # local -< - -Options -------------------------------------------------------------------------------- - -g:ale_json_spectral_executable *g:ale_json_spectral_executable* - *b:ale_json_spectral_executable* - Type: |String| - Default: `'spectral'` - - This variable can be set to change the path to spectral. - -g:ale_json_spectral_use_global *g:ale_json_spectral_use_global* - *b:ale_json_spectral_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - -=============================================================================== -vscodejson *ale-json-vscode* - -Website: https://github.com/hrsh7th/vscode-langservers-extracted - -Installation -------------------------------------------------------------------------------- - -Install VSCode json language server either globally or locally: > - - npm install -g vscode-langservers-extracted -< - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-json5.txt b/dotfiles/.vim/plugged/ale/doc/ale-json5.txt deleted file mode 100644 index bafa60d1..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-json5.txt +++ /dev/null @@ -1,15 +0,0 @@ -=============================================================================== -ALE JSON5 Integration *ale-json5-options* - - -=============================================================================== -eslint *ale-json5-eslint* - -The `eslint` linter for JSON uses the JavaScript options for `eslint`; see: -|ale-javascript-eslint|. - -You will need a JSON5 ESLint plugin installed for this to work. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-jsonc.txt b/dotfiles/.vim/plugged/ale/doc/ale-jsonc.txt deleted file mode 100644 index 92247cd4..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-jsonc.txt +++ /dev/null @@ -1,15 +0,0 @@ -=============================================================================== -ALE JSONC Integration *ale-jsonc-options* - - -=============================================================================== -eslint *ale-jsonc-eslint* - -The `eslint` linter for JSON uses the JavaScript options for `eslint`; see: -|ale-javascript-eslint|. - -You will need a JSONC ESLint plugin installed for this to work. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-jsonnet.txt b/dotfiles/.vim/plugged/ale/doc/ale-jsonnet.txt deleted file mode 100644 index f99d415f..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-jsonnet.txt +++ /dev/null @@ -1,43 +0,0 @@ -=============================================================================== -ALE Jsonnet Integration *ale-jsonnet-options* - - -=============================================================================== -jsonnetfmt *ale-jsonnet-jsonnetfmt* - -g:ale_jsonnet_jsonnetfmt_executable *g:ale_jsonnet_jsonnetfmt_executable* - *b:ale_jsonnet_jsonnetfmt_executable* - Type: |String| - Default: `'jsonnetfmt'` - - This option can be changed to change the path for `jsonnetfmt`. - - -g:ale_jsonnet_jsonnetfmt_options *g:ale_jsonnet_jsonnetfmt_options* - *b:ale_jsonnet_jsonnetfmt_options* - Type: |String| - Default: `''` - - This option can be changed to pass extra options to `jsonnetfmt`. - - -=============================================================================== -jsonnet-lint *ale-jsonnet-jsonnet-lint* - -g:ale_jsonnet_jsonnet_lint_executable *g:ale_jsonnet_jsonnet_lint_executable* - *b:ale_jsonnet_jsonnet_lint_executable* - Type: |String| - Default: `'jsonnet-lint'` - - This option can be changed to change the path for `jsonnet-lint`. - - -g:ale_jsonnet_jsonnet_lint_options *g:ale_jsonnet_jsonnet_lint_options* - *b:ale_jsonnet_jsonnet_lint_options* - Type: |String| - Default: `''` - - This option can be changed to pass extra options to `jsonnet-lint`. - - - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-julia.txt b/dotfiles/.vim/plugged/ale/doc/ale-julia.txt deleted file mode 100644 index 51532419..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-julia.txt +++ /dev/null @@ -1,20 +0,0 @@ -=============================================================================== -ALE Julia Integration *ale-julia-options* - -=============================================================================== -languageserver *ale-julia-languageserver* - -To enable Julia LSP linter you need to install the LanguageServer.jl package -within julia. - -g:ale_julia_executable *g:ale_julia_executable* - *b:ale_julia_executable* - - Type: |String| - Default: 'julia' - - Path to the julia exetuable. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/dotfiles/.vim/plugged/ale/doc/ale-kotlin.txt b/dotfiles/.vim/plugged/ale/doc/ale-kotlin.txt deleted file mode 100644 index 4028531f..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-kotlin.txt +++ /dev/null @@ -1,113 +0,0 @@ -=============================================================================== -ALE Kotlin Integration *ale-kotlin-options* - *ale-integration-kotlin* - -=============================================================================== -Integration Information - - Make sure your setup has support for the kotlin file type. A filetype plugin - can be found here: https://github.com/udalov/kotlin-vim - - - Note: Make sure you have a working kotlin compiler - - -=============================================================================== -kotlinc *ale-kotlin-kotlinc* - -g:ale_kotlin_kotlinc_options *g:ale_kotlin_kotlinc_options* - Type: |String| - Default: `''` - - Additional options to pass to the kotlin compiler - -g:ale_kotlin_kotlinc_enable_config *g:ale_kotlin_kotlinc_enable_config* - Type: |Number| - Default: `0` - - Setting this variable to `1` tells the linter to load a configuration file. - This should be set in your vimrc - -g:ale_kotlin_kotlinc_config_file *g:ale_kotlin_kotlinc_config_file* - Type: |String| - Default: `'.ale_kotlin_kotlinc_config'` - - Filename of the configuration file. This should be set in your vimrc - -g:ale_kotlin_kotlinc_classpath *g:ale_kotlin_kotlinc_classpath* - Type: |String| - Default: `''` - - A string containing the paths (separated by the appropriate path separator) - of the source directories. - -g:ale_kotlin_kotlinc_sourcepath *g:ale_kotlin_kotlinc_sourcepath* - Type: |String| - Default: `''` - - A string containing the paths (separated by space) of the source - directories. - -g:ale_kotlin_kotlinc_use_module_file *g:ale_kotlin_kotlinc_use_module_file* - Type: |Number| - Default: `0` - - This option indicates whether the linter should use a module file. It is off - by default. - -g:ale_kotlin_kotlinc_module_filename *g:ale_kotlin_kotlinc_module_filename* - Type: |String| - Default: `'module.xml'` - - The filename of the module file that the linter should pass to the kotlin - compiler. - - -=============================================================================== -ktlint *ale-kotlin-ktlint* - -g:ale_kotlin_ktlint_executable *g:ale_kotlin_ktlint_executable* - Type: |String| - Default: `''` - - The Ktlint executable. - - Posix-compliant shell scripts are the only executables that can be found on - Ktlint's github release page. If you are not on such a system, your best - bet will be to download the ktlint jar and set this option to something - similar to `'java -jar /path/to/ktlint.jar'` - -g:ale_kotlin_ktlint_rulesets *g:ale_kotlin_ktlint_rulesets* - Type: |List| of |String|s - Default: [] - - This list should contain paths to ruleset jars and/or strings of maven - artifact triples. Example: - > - let g:ale_kotlin_ktlint_rulesets = ['/path/to/custom-ruleset.jar', - 'com.ktlint.rulesets:mycustomrule:1.0.0'] - -g:ale_kotlin_ktlint_options *g:ale_kotlin_ktlint_options* - Type: |String| - Default: `''` - - Additional options to pass to ktlint for both linting and fixing. Example: - > - let g:ale_kotlin_ktlint_options = '--android' - - -=============================================================================== -languageserver *ale-kotlin-languageserver* - -g:ale_kotlin_languageserver_executable *g:ale_kotlin_languageserver_executable* - Type: |String| - Default: `''` - - The kotlin-language-server executable. - - Executables are located inside the bin/ folder of the language server - release. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-latex.txt b/dotfiles/.vim/plugged/ale/doc/ale-latex.txt deleted file mode 100644 index b3029a5b..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-latex.txt +++ /dev/null @@ -1,21 +0,0 @@ -=============================================================================== -ALE LaTeX Integration *ale-latex-options* - - -=============================================================================== -cspell *ale-latex-cspell* - -=============================================================================== -write-good *ale-latex-write-good* - -See |ale-write-good-options| - - -=============================================================================== -textlint *ale-latex-textlint* - -See |ale-text-textlint| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-less.txt b/dotfiles/.vim/plugged/ale/doc/ale-less.txt deleted file mode 100644 index 040e511e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-less.txt +++ /dev/null @@ -1,66 +0,0 @@ -=============================================================================== -ALE Less Integration *ale-less-options* - - -=============================================================================== -lessc *ale-less-lessc* - -g:ale_less_lessc_executable *g:ale_less_lessc_executable* - *b:ale_less_lessc_executable* - Type: |String| - Default: `'lessc'` - - See |ale-integrations-local-executables| - - -g:ale_less_lessc_options *g:ale_less_lessc_options* - *b:ale_less_lessc_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to lessc. - - -g:ale_less_lessc_use_global *g:ale_less_lessc_use_global* - *b:ale_less_lessc_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -prettier *ale-less-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -stylelint *ale-less-stylelint* - -g:ale_less_stylelint_executable *g:ale_less_stylelint_executable* - *b:ale_less_stylelint_executable* - Type: |String| - Default: `'stylelint'` - - See |ale-integrations-local-executables| - - -g:ale_less_stylelint_options *g:ale_less_stylelint_options* - *b:ale_less_stylelint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to stylelint. - - -g:ale_less_stylelint_use_global *g:ale_less_stylelint_use_global* - *b:ale_less_stylelint_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-llvm.txt b/dotfiles/.vim/plugged/ale/doc/ale-llvm.txt deleted file mode 100644 index 2f4a46bd..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-llvm.txt +++ /dev/null @@ -1,19 +0,0 @@ -=============================================================================== -ALE LLVM Integration *ale-llvm-options* - - -=============================================================================== -llc *ale-llvm-llc* - -g:ale_llvm_llc_executable *g:ale_llvm_llc_executable* - *b:ale_llvm_llc_executable* - - Type: |String| - Default: "llc" - - The command to use for checking. This variable is useful when llc command - has suffix like "llc-5.0". - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-lua.txt b/dotfiles/.vim/plugged/ale/doc/ale-lua.txt deleted file mode 100644 index 7ee60d0e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-lua.txt +++ /dev/null @@ -1,118 +0,0 @@ -=============================================================================== -ALE Lua Integration *ale-lua-options* - - -=============================================================================== -cspell *ale-lua-cspell* - -See |ale-cspell-options| - - -=============================================================================== -lua-format *ale-lua-lua-format* - -g:ale_lua_lua_format_executable *g:ale_lua_lua_format_executable* - *b:ale_lua_lua_format_executable* - Type: |String| - Default: `'lua-format'` - - This variable can be changed to change the path to lua-format. - - -g:ale_lua_lua_format_options *g:ale_lua_lua_format_options* - *b:ale_lua_lua_format_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to lua-format. - - -=============================================================================== -luac *ale-lua-luac* - -g:ale_lua_luac_executable *g:ale_lua_luac_executable* - *b:ale_lua_luac_executable* - Type: |String| - Default: `'luac'` - - This variable can be changed to change the path to luac. - - -=============================================================================== -luacheck *ale-lua-luacheck* - -g:ale_lua_luacheck_executable *g:ale_lua_luacheck_executable* - *b:ale_lua_luacheck_executable* - Type: |String| - Default: `'luacheck'` - - This variable can be changed to change the path to luacheck. - - -g:ale_lua_luacheck_options *g:ale_lua_luacheck_options* - *b:ale_lua_luacheck_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to luacheck. - - -=============================================================================== -luafmt *ale-lua-luafmt* - -g:ale_lua_luafmt_executable *g:ale_lua_luafmt_executable* - *b:ale_lua_luafmt_executable* - Type: |String| - Default: `'luafmt'` - - This variable can be set to use a different executable for luafmt. - - -g:ale_lua_luafmt_options *g:ale_lua_luafmt_options* - *b:ale_lua_luafmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the luafmt fixer. - - -=============================================================================== -selene *ale-lua-selene* - -g:ale_lua_selene_executable *g:ale_lua_selene_executable* - *b:ale_lua_selene_executable* - Type: |String| - Default: `'selene'` - - This variable can be set to use a different executable for selene. - - -g:ale_lua_selene_options *g:ale_lua_selene_options* - *b:ale_lua_selene_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to selene. - - -=============================================================================== -stylua *ale-lua-stylua* - -g:ale_lua_stylua_executable *g:ale_lua_stylua_executable* - *b:ale_lua_stylua_executable* - Type: |String| - Default: `'stylua'` - - This variable can be set to use a different executable for stylua. - - -g:ale_lua_stylua_options *g:ale_lua_stylua_options* - *b:ale_lua_stylua_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the stylua fixer. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-markdown.txt b/dotfiles/.vim/plugged/ale/doc/ale-markdown.txt deleted file mode 100644 index 6ba78ff0..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-markdown.txt +++ /dev/null @@ -1,113 +0,0 @@ -=============================================================================== -ALE Markdown Integration *ale-markdown-options* - - -=============================================================================== -cspell *ale-markdown-cspell* - -See |ale-cspell-options| - - -=============================================================================== -dprint *ale-markdown-dprint* - -See |ale-dprint-options| and https://dprint.dev/plugins/markdown - - -=============================================================================== -markdownlint *ale-markdown-markdownlint* - -g:ale_markdown_markdownlint_options *g:ale_markdown_markdownlint_options* - *b:ale_markdown_markdownlint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to markdownlint. - - -=============================================================================== -mdl *ale-markdown-mdl* - -g:ale_markdown_mdl_executable *g:ale_markdown_mdl_executable* - *b:ale_markdown_mdl_executable* - Type: |String| - Default: `'mdl'` - - Override the invoked mdl binary. This is useful for running mdl from - binstubs or a bundle. - - -g:ale_markdown_mdl_options *g:ale_markdown_mdl_options* - *b:ale_markdown_mdl_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to mdl. - - -=============================================================================== -pandoc *ale-markdown-pandoc* - -g:ale_markdown_pandoc_executable *g:ale_markdown_pandoc_executable* - *b:ale_markdown_pandoc_executable* - Type: |String| - Default: `'pandoc'` - - This variable can be set to specify where to find the pandoc executable - - -g:ale_markdown_pandoc_options *g:ale_markdown_pandoc_options* - *b:ale_markdown_pandoc_options* - Type: |String| - Default: `'-f gfm -t gfm -s -'` - - This variable can be set to change the default options passed to pandoc - - -=============================================================================== -prettier *ale-markdown-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -remark-lint *ale-markdown-remark-lint* - -g:ale_markdown_remark_lint_executable *g:ale_markdown_remark_lint_executable* - *b:ale_markdown_remark_lint_executable* - Type: |String| - Default: `'remark'` - - See |ale-integrations-local-executables| - - -g:ale_markdown_remark_lint_options *g:ale_markdown_remark_lint_options* - *b:ale_markdown_remark_lint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to remark-lint. - - -g:ale_markdown_remark_lint_use_global *g:ale_markdown_remark_lint_use_global* - *b:ale_markdown_remark_lint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -textlint *ale-markdown-textlint* - -See |ale-text-textlint| - - -=============================================================================== -write-good *ale-markdown-write-good* - -See |ale-write-good-options| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-mercury.txt b/dotfiles/.vim/plugged/ale/doc/ale-mercury.txt deleted file mode 100644 index ca06a0a7..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-mercury.txt +++ /dev/null @@ -1,26 +0,0 @@ -=============================================================================== -ALE Mercury Integration *ale-mercury-options* - - -=============================================================================== -mmc *ale-mercury-mmc* - - -g:ale_mercury_mmc_executable *g:ale_mercury_mmc_executable* - *b:ale_mercury_mmc_executable* - Type: |String| - Default: `'mmc'` - - This variable can be changed to use a different executable for mmc. - - -g:ale_mercury_mmc_options *g:ale_mercury_mmc_options* - *b:ale_mercury_mmc_options* - Type: |String| - Default: `'--make --output-compile-error-lines 100'` - - This variable can be set to pass additional options to mmc. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-nasm.txt b/dotfiles/.vim/plugged/ale/doc/ale-nasm.txt deleted file mode 100644 index 16c024a1..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-nasm.txt +++ /dev/null @@ -1,26 +0,0 @@ -=============================================================================== -ALE NASM Integration *ale-nasm-options* - - -=============================================================================== -nasm *ale-nasm-nasm* - -g:ale_nasm_nasm_executable *g:ale_nasm_nasm_executable* - *b:ale_nasm_nasm_executable* - - Type: |String| - Default `'nasm'` - - This variable can be changed to use different executable for NASM. - - -g:ale_nasm_nasm_options *g:ale_nasm_nasm_options* - *b:ale_nasm_nasm_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to NASM. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-nim.txt b/dotfiles/.vim/plugged/ale/doc/ale-nim.txt deleted file mode 100644 index 8985aeb8..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-nim.txt +++ /dev/null @@ -1,45 +0,0 @@ -=============================================================================== -ALE Nim Integration *ale-nim-options* - - -=============================================================================== -nimcheck *ale-nim-nimcheck* - - ALE does not provide additional configuration options for `nimcheck` at this - point. - - -=============================================================================== -nimlsp *ale-nim-nimlsp* - -g:nim_nimlsp_nim_sources *g:nim_nimlsp_nim_sources* - - Type: |String| - Default: `''` - - Sets the path to Nim source repository as the first argument to `nimlsp` - command. - - -=============================================================================== -nimpretty *ale-nim-nimpretty* - - -g:ale_nim_nimpretty_executable *g:ale_nim_nimpretty_executable* - *b:ale_nim_nimpretty_executable* - Type: |String| - Default: `'nimpretty'` - - This variable can be changed to use a different executable for nimpretty. - - -g:ale_nim_nimpretty_options *g:ale_nim_nimpretty_options* - *b:ale_nim_nimpretty_options* - Type: |String| - Default: `'--maxLineLen:80'` - - This variable can be changed to modify flags given to nimpretty. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-nix.txt b/dotfiles/.vim/plugged/ale/doc/ale-nix.txt deleted file mode 100644 index 1df7caff..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-nix.txt +++ /dev/null @@ -1,79 +0,0 @@ -=============================================================================== -ALE Nix Integration *ale-nix-options* - - -=============================================================================== -nixfmt *ale-nix-nixfmt* - -g:ale_nix_nixfmt_executable *g:ale_nix_nixfmt_executable* - *b:ale_nix_nixfmt_executable* - Type: |String| - Default: `'nixfmt'` - - This variable sets the executable used for nixfmt. - -g:ale_nix_nixfmt_options *g:ale_nix_nixfmt_options* - *b:ale_nix_nixfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the nixfmt fixer. - - -=============================================================================== -nixpkgs-fmt *ale-nix-nixpkgs-fmt* - -g:ale_nix_nixpkgsfmt_executable *g:ale_nix_nixpkgsfmt_executable* - *b:ale_nix_nixpkgsfmt_executable* - Type: |String| - Default: `'nixpkgs-fmt'` - - This variable sets executable used for nixpkgs-fmt. - -g:ale_nix_nixpkgsfmt_options *g:ale_nix_nixpkgsfmt_options* - *b:ale_nix_nixpkgsfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the nixpkgs-fmt - fixer. - - -=============================================================================== -statix *ale-nix-statix* - -g:ale_nix_statix_check_executable *g:ale_nix_statix_check_executable* - *b:ale_nix_statix_check_executable* - Type: |String| - Default: `'statix'` - - This variable sets the executable used for statix when running it as a - linter. - -g:ale_nix_statix_check_options *g:ale_nix_statix_check_options* - *b:ale_nix_statix_check_options* - Type: |String| - Default: `''` - - This variable can be used to pass additional options to statix when running - it as a linter. - -g:ale_nix_statix_fix_executable *g:ale_nix_fix_check_executable* - *b:ale_nix_fix_check_executable* - Type: |String| - Default: `'statix'` - - This variable sets the executable used for statix when running it as a - fixer. - -g:ale_nix_statix_fix_options *g:ale_nix_statix_fix_options* - *b:ale_nix_statix_fix_options* - Type: |String| - Default: `''` - - This variable can be used to pass additional options to statix when running - it as a fixer. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-nroff.txt b/dotfiles/.vim/plugged/ale/doc/ale-nroff.txt deleted file mode 100644 index 62ec7896..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-nroff.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE nroff Integration *ale-nroff-options* - - -=============================================================================== -write-good *ale-nroff-write-good* - -See |ale-write-good-options| - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-objc.txt b/dotfiles/.vim/plugged/ale/doc/ale-objc.txt deleted file mode 100644 index 0163175a..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-objc.txt +++ /dev/null @@ -1,73 +0,0 @@ -=============================================================================== -ALE Objective-C Integration *ale-objc-options* - - -=============================================================================== -clang *ale-objc-clang* - -g:ale_objc_clang_options *g:ale_objc_clang_options* - *b:ale_objc_clang_options* - Type: |String| - Default: `'-std=c11 -Wall'` - - This variable can be changed to modify flags given to clang. - - -=============================================================================== -clangd *ale-objc-clangd* - -g:ale_objc_clangd_executable *g:ale_objc_clangd_executable* - *b:ale_objc_clangd_executable* - Type: |String| - Default: `'clangd'` - - This variable can be changed to use a different executable for clangd. - - -g:ale_objc_clangd_options *g:ale_objc_clangd_options* - *b:ale_objc_clangd_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clangd. - - -=============================================================================== -uncrustify *ale-objc-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== -ccls *ale-objc-ccls* - -g:ale_objc_ccls_executable *g:ale_objc_ccls_executable* - *b:ale_objc_ccls_executable* - Type: |String| - Default: `'ccls'` - - This variable can be changed to use a different executable for ccls. - - -g:ale_objc_ccls_init_options *g:ale_objc_ccls_init_options* - *b:ale_objc_ccls_init_options* - Type: |Dictionary| - Default: `{}` - - This variable can be changed to customize ccls initialization options. - Example: > - { - \ 'cacheDirectory': '/tmp/ccls', - \ 'cacheFormat': 'binary', - \ 'diagnostics': { - \ 'onOpen': 0, - \ 'opChange': 1000, - \ }, - \ } -< - Visit https://github.com/MaskRay/ccls/wiki/Initialization-options for all - available options and explanations. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-objcpp.txt b/dotfiles/.vim/plugged/ale/doc/ale-objcpp.txt deleted file mode 100644 index cd65ab73..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-objcpp.txt +++ /dev/null @@ -1,42 +0,0 @@ -=============================================================================== -ALE Objective-C++ Integration *ale-objcpp-options* - - -=============================================================================== -clang *ale-objcpp-clang* - -g:ale_objcpp_clang_options *g:ale_objcpp_clang_options* - *b:ale_objcpp_clang_options* - Type: |String| - Default: `'-std=c++14 -Wall'` - - This variable can be changed to modify flags given to clang. - - -=============================================================================== -clangd *ale-objcpp-clangd* - -g:ale_objcpp_clangd_executable *g:ale_objcpp_clangd_executable* - *b:ale_objcpp_clangd_executable* - Type: |String| - Default: `'clangd'` - - This variable can be changed to use a different executable for clangd. - - -g:ale_objcpp_clangd_options *g:ale_objcpp_clangd_options* - *b:ale_objcpp_clangd_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to clangd. - - -=============================================================================== -uncrustify *ale-objcpp-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-ocaml.txt b/dotfiles/.vim/plugged/ale/doc/ale-ocaml.txt deleted file mode 100644 index a361a7b4..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-ocaml.txt +++ /dev/null @@ -1,117 +0,0 @@ -=============================================================================== -ALE OCaml Integration *ale-ocaml-options* - - -=============================================================================== -dune *ale-ocaml-dune* - - Dune is a build system for OCaml projects. The `dune format` command is - supported for automatically formatting `dune` and `dune-project` files. - -g:ale_ocaml_dune_executable *g:ale_ocaml_dune_executable* - *b:ale_ocaml_dune_executable* - Type: |String| - Default: `'dune'` - - This variable can be set to pass the path to dune. - -g:ale_ocaml_dune_options *g:ale_ocaml_dune_options* - *b:ale_ocaml_dune_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the dune fixer. - -=============================================================================== -merlin *ale-ocaml-merlin* - - To use merlin linter for OCaml source code you need to make sure Merlin for - Vim is correctly configured. See the corresponding Merlin wiki page for - detailed instructions - (https://github.com/the-lambda-church/merlin/wiki/vim-from-scratch). - -=============================================================================== -ocamllsp *ale-ocaml-ocamllsp* - - The `ocaml-lsp-server` is the official OCaml implementation of the Language - Server Protocol. See the installation instructions: - https://github.com/ocaml/ocaml-lsp#installation - -g:ale_ocaml_ocamllsp_use_opam *g:ale_ocaml_ocamllsp_use_opam* - *b:ale_ocaml_ocamllsp_use_opam* - Type: |Number| - Default: `get(g:, 'ale_ocaml_ocamllsp_use_opam', 1)` - - This variable can be set to change whether or not opam is used to execute - the language server. - -=============================================================================== -ols *ale-ocaml-ols* - - The `ocaml-language-server` is the engine that powers OCaml and ReasonML - editor support using the Language Server Protocol. See the installation - instructions: - https://github.com/freebroccolo/ocaml-language-server#installation - -g:ale_ocaml_ols_executable *g:ale_ocaml_ols_executable* - *b:ale_ocaml_ols_executable* - Type: |String| - Default: `'ocaml-language-server'` - - This variable can be set to change the executable path for `ols`. - -g:ale_ocaml_ols_use_global *g:ale_ocaml_ols_use_global* - *b:ale_ocaml_ols_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable can be set to `1` to always use the globally installed - executable. See also |ale-integrations-local-executables|. - -=============================================================================== -ocamlformat *ale-ocaml-ocamlformat* - -g:ale_ocaml_ocamlformat_executable *g:ale_ocaml_ocamlformat_executable* - *b:ale_ocaml_ocamlformat_executable* - Type: |String| - Default: `'ocamlformat'` - - This variable can be set to pass the path of the ocamlformat fixer. - -g:ale_ocaml_ocamlformat_options *g:ale_ocaml_ocamlformat_options* - *b:ale_ocaml_ocamlformat_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the ocamlformat fixer. - -=============================================================================== -ocp-indent *ale-ocaml-ocp-indent* - -g:ale_ocaml_ocp_indent_executable *g:ale_ocaml_ocp_indent_executable* - *b:ale_ocaml_ocp_indent_executable* - Type: |String| - Default: `ocp-indent` - - This variable can be set to pass the path of the ocp-indent. - -g:ale_ocaml_ocp_indent_options *g:ale_ocaml_ocp_indent_options* - *b:ale_ocaml_ocp_indent_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the ocp-indent. - -g:ale_ocaml_ocp_indent_config *g:ale_ocaml_ocp_indent_config* - *b:ale_ocaml_ocp_indent_config* - Type: |String| - Default: `''` - - This variable can be set to pass additional config to the ocp-indent. - Expand after "--config=". - - "ocp-indent" can also be enabled from ocamlformat config. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-openapi.txt b/dotfiles/.vim/plugged/ale/doc/ale-openapi.txt deleted file mode 100644 index 1fc41add..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-openapi.txt +++ /dev/null @@ -1,74 +0,0 @@ -=============================================================================== -ALE OpenApi Integration *ale-openapi-options* - -=============================================================================== -ibm_validator *ale-openapi-ibm-validator* - -Website: https://github.com/IBM/openapi-validator - - -Installation -------------------------------------------------------------------------------- - -Install ibm-openapi-validator either globally or locally: > - - npm install ibm-openapi-validator -g # global - npm install ibm-openapi-validator # local -< -Configuration -------------------------------------------------------------------------------- - -OpenAPI files can be written in YAML or JSON so in order for ALE plugins to -work with these files we must set the buffer |filetype| to either |openapi.yaml| -or |openapi.json| respectively. This causes ALE to lint the file with linters -configured for openapi and yaml files or openapi and json files respectively. - -For example setting filetype to |openapi.yaml| on a buffer and the following -|g:ale_linters| configuration will enable linting of openapi files using both -|ibm_validator| and |yamlint|: - -> - let g:ale_linters = { - \ 'yaml': ['yamllint'], - \ 'openapi': ['ibm_validator'] - \} -< - -The following plugin will detect openapi files automatically and set the -filetype to |openapi.yaml| or |openapi.json|: - - https://github.com/hsanson/vim-openapi - -Options -------------------------------------------------------------------------------- - -g:ale_openapi_ibm_validator_executable *g:ale_openapi_ibm_validator_executable* - *b:ale_openapi_ibm_validator_executable* - Type: |String| - Default: `'lint-openapi'` - - This variable can be set to change the path to lint-openapi. - - -g:ale_openapi_ibm_validator_options *g:ale_openapi_ibm_validator_options* - *b:ale_openapi_ibm_validator_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to lint-openapi. - - -=============================================================================== -prettier *ale-openapi-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -yamllint *ale-openapi-yamllint* - -See |ale-yaml-yamllint| for information about the available options. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-openscad.txt b/dotfiles/.vim/plugged/ale/doc/ale-openscad.txt deleted file mode 100644 index ac416bc3..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-openscad.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE OpenSCAD Integration *ale-openscad-options* - - -=============================================================================== -sca2d *ale-openscad-sca2d* - -g:ale_openscad_sca2d_executable *g:ale_openscad_sca2d_executable* - *b:ale_openscad_sca2d_executable* - Type: |String| - Default: `'sca2d'` - - See |ale-integrations-local-executables| - - -g:ale_openscad_sca2d_options *g:ale_openscad_sca2d_options* - *b:ale_openscad_sca2d_options* - Type: |String| - Default: `''` - - This variable can be set to pass options to sca2d. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-packer.txt b/dotfiles/.vim/plugged/ale/doc/ale-packer.txt deleted file mode 100644 index 11b7cc22..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-packer.txt +++ /dev/null @@ -1,24 +0,0 @@ -=============================================================================== -ALE Packer Integration *ale-packer-options* - - -=============================================================================== -packer-fmt-fixer *ale-packer-fmt-fixer* - -g:ale_packer_fmt_executable *g:ale_packer_fmt_executable* - *b:ale_packer_fmt_executable* - - Type: |String| - Default: `'packer'` - - This variable can be changed to use a different executable for packer. - - -g:ale_packer_fmt_options *g:ale_packer_fmt_options* - *b:ale_packer_fmt_options* - Type: |String| - Default: `''` - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-pascal.txt b/dotfiles/.vim/plugged/ale/doc/ale-pascal.txt deleted file mode 100644 index 03d9a004..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-pascal.txt +++ /dev/null @@ -1,24 +0,0 @@ -=============================================================================== -ALE Pascal Integration *ale-pascal-options* - -=============================================================================== -ptop *ale-pascal-ptop* - -g:ale_pascal_ptop_executable *g:ale_pascal_ptop_executable* - *b:ale_pascal_ptop_executable* - Type: |String| - Default: `'ptop'` - - This variable can be changed to specify the ptop executable. - - -g:ale_pascal_ptop_options *g:ale_pascal_ptop_options* - *b:ale_pascal_ptop_options* - Type: |String| - Default: `''` - -This variable can be set to pass additional options to the ptop fixer. - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-pawn.txt b/dotfiles/.vim/plugged/ale/doc/ale-pawn.txt deleted file mode 100644 index f836df97..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-pawn.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE Pawn Integration *ale-pawn-options* - - -=============================================================================== -uncrustify *ale-pawn-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-perl.txt b/dotfiles/.vim/plugged/ale/doc/ale-perl.txt deleted file mode 100644 index 761c2735..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-perl.txt +++ /dev/null @@ -1,91 +0,0 @@ -=============================================================================== -ALE Perl Integration *ale-perl-options* - -ALE offers a few ways to check Perl code. Checking code with `perl` is -disabled by default, as `perl` code cannot be checked without executing it. -Specifically, we use the `-c` flag to see if `perl` code compiles. This does -not execute all of the code in a file, but it does run `BEGIN` and `CHECK` -blocks. See `perl --help` and https://stackoverflow.com/a/12908487/406224 - -See |g:ale_linters|. - - -=============================================================================== -perl *ale-perl-perl* - -g:ale_perl_perl_executable *g:ale_perl_perl_executable* - *b:ale_perl_perl_executable* - Type: |String| - Default: `'perl'` - - This variable can be changed to modify the executable used for linting perl. - - -g:ale_perl_perl_options *g:ale_perl_perl_options* - *b:ale_perl_perl_options* - Type: |String| - Default: `'-c -Mwarnings -Ilib'` - - This variable can be changed to alter the command-line arguments to the perl - invocation. - - -=============================================================================== -perlcritic *ale-perl-perlcritic* - -g:ale_perl_perlcritic_executable *g:ale_perl_perlcritic_executable* - *b:ale_perl_perlcritic_executable* - Type: |String| - Default: `'perlcritic'` - - This variable can be changed to modify the perlcritic executable used for - linting perl. - - -g:ale_perl_perlcritic_profile *g:ale_perl_perlcritic_profile* - *b:ale_perl_perlcritic_profile* - Type: |String| - Default: `'.perlcriticrc'` - - This variable can be changed to modify the perlcritic profile used for - linting perl. The current directory is checked for the file, then the - parent directory, etc, until it finds one. If no matching file is found, no - profile is passed to perlcritic. - - Set to an empty string to disable passing a specific profile to perlcritic - with the `'--profile'` option. - - To prevent perlcritic from using any profile, set this variable to an empty - string and pass `'--no-profile'`to perlcritic via the - |g:ale_perl_perlcritic_options| variable. - - -g:ale_perl_perlcritic_options *g:ale_perl_perlcritic_options* - *b:ale_perl_perlcritic_options* - Type: |String| - Default: `''` - - This variable can be changed to supply additional command-line arguments to - the perlcritic invocation. - - -g:ale_perl_perlcritic_showrules *g:ale_perl_perlcritic_showrules* - - Type: |Number| - Default: 0 - - Controls whether perlcritic rule names are shown after the error message. - Defaults to off to reduce length of message. -=============================================================================== -perltidy *ale-perl-perltidy* - -g:ale_perl_perltidy_options *g:ale_perl_perltidy_options* - *b:ale_perl_perltidy_options* - Type: |String| - Default: `''` - - This variable can be changed to alter the command-line arguments to - the perltidy invocation. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-perl6.txt b/dotfiles/.vim/plugged/ale/doc/ale-perl6.txt deleted file mode 100644 index 94953db5..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-perl6.txt +++ /dev/null @@ -1,43 +0,0 @@ -=============================================================================== -ALE Perl6 Integration *ale-perl6-options* - -Checking code with `perl6` is disabled by default, as `perl6` code cannot be -checked without executing it. Specifically, we use the `-c` flag to see if -`perl6` code compiles. This does not execute all of the code in a file, but it -does run `BEGIN` and `CHECK` blocks. See `perl6 --help` - -Full support requires a perl6 implementation that supports the -PERL6_EXCEPTIONS_HANDLER environment variable and JSON error output, -which was specified in 6.d. Rakudo version 2018.08 is the first rakudo release -that supports this. See `perl6 --version` and -https://docs.perl6.org/programs/03-environment-variables. - -Without this variable, errors and warnings will appear at line 1, and can be -viewed with ALEDetail. This also serves as a fallback for errors and warnings -that do not trigger JSON output. - -See |g:ale_linters|. - - -=============================================================================== -perl6 *ale-perl6-perl6* - -g:ale_perl6_perl6_executable *g:ale_perl6_perl6_executable* - *b:ale_perl6_perl6_executable* - Type: |String| - Default: `'perl6'` - - This variable can be changed to modify the executable used for linting - perl6. - - -g:ale_perl6_perl6_options *g:ale_perl6_perl6_options* - *b:ale_perl6_perl6_options* - Type: |String| - Default: `'-c -Ilib'` - - This variable can be changed to alter the command-line arguments to the - perl6 invocation. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-php.txt b/dotfiles/.vim/plugged/ale/doc/ale-php.txt deleted file mode 100644 index 2750a319..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-php.txt +++ /dev/null @@ -1,367 +0,0 @@ -=============================================================================== -ALE PHP Integration *ale-php-options* - - -=============================================================================== -cspell *ale-php-cspell* - -See |ale-cspell-options| - - -=============================================================================== -langserver *ale-php-langserver* - -g:ale_php_langserver_executable *g:ale_php_langserver_executable* - *b:ale_php_langserver_executable* - Type: |String| - Default: `'php-language-server.php'` - - The variable can be set to configure the executable that will be used for - running the PHP language server. `vendor` directory executables will be - preferred instead of this setting if |g:ale_php_langserver_use_global| is `0`. - - See: |ale-integrations-local-executables| - - -g:ale_php_langserver_use_global *g:ale_php_langserver_use_global* - *b:ale_php_langserver_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable can be set to `1` to force the language server to be run with - the executable set for |g:ale_php_langserver_executable|. - - See: |ale-integrations-local-executables| - - -=============================================================================== -phan *ale-php-phan* - -WARNING: please use the phan_client linter if you have an configuration file -for your project because the phan will look into your entirely project and -ale will display in the current buffer warnings that may belong to other file. - -g:ale_php_phan_minimum_severity *g:ale_php_phan_minimum_severity* - *b:ale_php_phan_minimum_severity* - Type: |Number| - Default: `0` - - This variable defines the minimum severity level. - - -g:ale_php_phan_executable *g:ale_php_phan_executable* - *b:ale_php_phan_executable* - Type: |String| - Default: `'phan'` - - This variable sets executable used for phan or phan_client. - - -g:ale_php_phan_use_client *g:ale_php_phan_use_client* - *b:ale_php_phan_use_client* - Type: |Number| - Default: `get(g:, 'ale_php_phan_use_client', 0)` - - This variable can be set to 1 to use the phan_client with phan daemon mode - instead of the phan standalone. - - -=============================================================================== -phpcbf *ale-php-phpcbf* - -g:ale_php_phpcbf_executable *g:ale_php_phpcbf_executable* - *b:ale_php_phpcbf_executable* - Type: |String| - Default: `'phpcbf'` - - See |ale-integrations-local-executables| - - -g:ale_php_phpcbf_standard *g:ale_php_phpcbf_standard* - *b:ale_php_phpcbf_standard* - Type: |String| - Default: `''` - - This variable can be set to specify the coding standard used by phpcbf. If no - coding standard is specified, phpcbf will default to fixing against the - PEAR coding standard, or the standard you have set as the default. - - -g:ale_php_phpcbf_use_global *g:ale_php_phpcbf_use_global* - *b:ale_php_phpcbf_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_php_phpcbf_options *g:ale_php_phpcbf_options* - *b:ale_php_phpcbf_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to php-cbf - - -=============================================================================== -phpcs *ale-php-phpcs* - -g:ale_php_phpcs_executable *g:ale_php_phpcs_executable* - *b:ale_php_phpcs_executable* - Type: |String| - Default: `'phpcs'` - - See |ale-integrations-local-executables| - - -g:ale_php_phpcs_standard *g:ale_php_phpcs_standard* - *b:ale_php_phpcs_standard* - Type: |String| - Default: `''` - - This variable can be set to specify the coding standard used by phpcs. If no - coding standard is specified, phpcs will default to checking against the - PEAR coding standard, or the standard you have set as the default. - - -g:ale_php_phpcs_use_global *g:ale_php_phpcs_use_global* - *b:ale_php_phpcs_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_php_phpcs_options *g:ale_php_phpcs_options* - *b:ale_php_phpcs_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to php-cs - - -=============================================================================== -phpmd *ale-php-phpmd* - -g:ale_php_phpmd_executable *g:ale_php_phpmd_executable* - *b:ale_php_phpmd_executable* - Type: |String| - Default: `'phpmd'` - - This variable sets executable used for phpmd. - - -g:ale_php_phpmd_ruleset *g:ale_php_phpmd_ruleset* - *b:ale_php_phpmd_ruleset* - Type: |String| - Default: `'cleancode,codesize,controversial,design,naming,unusedcode'` - - This variable controls the ruleset used by phpmd. Default is to use all of - the available phpmd rulesets - - -=============================================================================== -phpstan *ale-php-phpstan* - -g:ale_php_phpstan_executable *g:ale_php_phpstan_executable* - *b:ale_php_phpstan_executable* - Type: |String| - Default: `'phpstan'` - - This variable sets executable used for phpstan. - - -g:ale_php_phpstan_level *g:ale_php_phpstan_level* - *b:ale_php_phpstan_level* - Type: |String| - Default: `''` - - This variable controls the rule levels. 0 is the loosest and 7 is the - strictest. If this option isn't set, the rule level will be controlled by - the configuration file. If no configuration file can be detected, `'7'` will - be used instead. - - -g:ale_php_phpstan_configuration *g:ale_php_phpstan_configuration* - *b:ale_php_phpstan_configuration* - Type: |String| - Default: `''` - - This variable sets path to phpstan configuration file. - - -g:ale_php_phpstan_autoload *g:ale_php_phpstan_autoload* - *b:ale_php_phpstan_autoload* - Type: |String| - Default: `''` - - This variable sets path to phpstan autoload file. - - -g:ale_php_phpstan_memory_limit *g:ale_php_phpstan_memory-limit* - *b:ale_php_phpstan_memory-limit* - Type: |String| - Default: `''` - - This variable sets the memory limit for phpstan analysis. This is a string - in the same format as `php.ini` accepts, e.g. `128M`, `1G`. - - -=============================================================================== -psalm *ale-php-psalm* - -g:ale_php_psalm_executable *g:ale_php_psalm_executable* - *b:ale_php_psalm_executable* - Type: |String| - Default: `'psalm'` - - This variable sets the executable used for psalm. - - -g:ale_php_psalm_options *g:ale_php_psalm_options* - *b:ale_php_psalm_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to psalm. - - -g:ale_php_psalm_use_global *g:ale_php_psalm_use_global* - *b:ale_php_psalm_use_global* - Type: |Boolean| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -php-cs-fixer *ale-php-php-cs-fixer* - -g:ale_php_cs_fixer_executable *g:ale_php_cs_fixer_executable* - *b:ale_php_cs_fixer_executable* - Type: |String| - Default: `'php-cs-fixer'` - - This variable sets executable used for php-cs-fixer. - - -g:ale_php_cs_fixer_options *g:ale_php_cs_fixer_options* - *b:ale_php_cs_fixer_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to php-cs-fixer. - - -g:ale_php_cs_fixer_use_global *g:ale_php_cs_fixer_use_global* - *b:ale_php_cs_fixer_use_global* - Type: |Boolean| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -php *ale-php-php* - -g:ale_php_php_executable *g:ale_php_php_executable* - *b:ale_php_php_executable* - Type: |String| - Default: `'php'` - - This variable sets the executable used for php. - - -=============================================================================== -pint *ale-php-pint* - -g:ale_php_pint_executable *g:ale_php_pint_executable* - *b:ale_php_pint_executable* - Type: |String| - Default: `'pint'` - - This variable sets the executable used for pint. - - -g:ale_php_pint_options *g:ale_php_pint_options* - *b:ale_php_pint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to pint. - - -g:ale_php_pint_use_global *g:ale_php_pint_use_global* - *b:ale_php_pint_use_global* - Type: |Boolean| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -tlint *ale-php-tlint* - -g:ale_php_tlint_executable *g:ale_php_tlint_executable* - *b:ale_php_tlint_executable* - Type: |String| - Default: `'tlint'` - - See |ale-integrations-local-executables| - - -g:ale_php_tlint_use_global *g:ale_php_tlint_use_global* - *b:ale_php_tlint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_php_tlint_options *g:ale_php_tlint_options* - *b:ale_php_tlint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to tlint - - -=============================================================================== -intelephense *ale-php-intelephense* - -g:ale_php_intelephense_executable *g:ale_php_intelephense_executable* - *b:ale_php_intelephense_executable* - Type: |String| - Default: `'intelephense'` - - The variable can be set to configure the executable that will be used for - running the intelephense language server. `node_modules` directory - executable will be preferred instead of this setting if - |g:ale_php_intelephense_use_global| is `0`. - - See: |ale-integrations-local-executables| - - -g:ale_php_intelephense_use_global *g:ale_php_intelephense_use_global* - *b:ale_php_intelephense_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable can be set to `1` to force the language server to be run with - the executable set for |g:ale_php_intelephense_executable|. - - See: |ale-integrations-local-executables| - - -g:ale_php_intelephense_config *g:ale_php_intelephense_config* - *b:ale_php_intelephense_config* - Type: |Dictionary| - Default: `{}` - - The initialization options config specified by Intelephense. Refer to the - installation docs provided by intelephense (github.com/bmewburn/intelephense - -docs). - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-po.txt b/dotfiles/.vim/plugged/ale/doc/ale-po.txt deleted file mode 100644 index 1e03b7bb..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-po.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE PO Integration *ale-po-options* - - -=============================================================================== -write-good *ale-po-write-good* - -See |ale-write-good-options| - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-pod.txt b/dotfiles/.vim/plugged/ale/doc/ale-pod.txt deleted file mode 100644 index c7cc0bbc..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-pod.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE Pod Integration *ale-pod-options* - - -=============================================================================== -write-good *ale-pod-write-good* - -See |ale-write-good-options| - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-pony.txt b/dotfiles/.vim/plugged/ale/doc/ale-pony.txt deleted file mode 100644 index 3b32168e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-pony.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE Pony Integration *ale-pony-options* - - -=============================================================================== -ponyc *ale-pony-ponyc* - -g:ale_pony_ponyc_executable *g:ale_pony_ponyc_executable* - *b:ale_pony_ponyc_executable* - Type: |String| - Default: `'ponyc'` - - See |ale-integrations-local-executables| - - -g:ale_pony_ponyc_options *g:ale_pony_ponyc_options* - *b:ale_pony_ponyc_options* - Type: |String| - Default: `'--pass paint'` - - This variable can be set to pass options to ponyc. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-powershell.txt b/dotfiles/.vim/plugged/ale/doc/ale-powershell.txt deleted file mode 100644 index 46bc6cfb..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-powershell.txt +++ /dev/null @@ -1,75 +0,0 @@ -=============================================================================== -ALE PowerShell Integration *ale-powershell-options* - - -=============================================================================== -cspell *ale-powershell-cspell* - -See |ale-cspell-options| - - -=============================================================================== -powershell *ale-powershell-powershell* - -g:ale_powershell_powershell_executable *g:ale_powershell_powershell_executable* - *b:ale_powershell_powershell_executable* - Type: String - Default: `'pwsh'` - - This variable can be changed to use a different executable for powershell. - -> - " Use powershell.exe rather than the default pwsh - let g:ale_powershell_powershell_executable = 'powershell.exe' -> - -=============================================================================== -psscriptanalyzer *ale-powershell-psscriptanalyzer* - -Installation -------------------------------------------------------------------------------- - -Install PSScriptAnalyzer by any means, so long as it can be automatically -imported in PowerShell. - -g:ale_powershell_psscriptanalyzer_executable -*g:ale_powershell_psscriptanalyzer_executable* - *b:ale_powershell_psscriptanalyzer_executable* - Type: |String| - Default: `'pwsh'` - - This variable sets executable used for powershell. - - For example, on Windows you could set powershell to be Windows Powershell: -> - let g:ale_powershell_psscriptanalyzer_executable = 'powershell.exe' -< - -g:ale_powershell_psscriptanalyzer_module -*g:ale_powershell_psscriptanalyzer_module* - *b:ale_powershell_psscriptanalyzer_module* - Type: |String - Default: `'psscriptanalyzer'` - - This variable sets the name of the psscriptanalyzer module. - for psscriptanalyzer invocation. - - -g:ale_powershell_psscriptanalyzer_exclusions -*g:ale_powershell_psscriptanalyzer_exclusions* - *b:ale_powershell_psscriptanalyzer_exclusions* - Type: |String| - Default: `''` - - Set this variable to exclude test(s) for psscriptanalyzer - (-ExcludeRule option). To exclude more than one option, separate them with - commas. - -> - " Suppress Write-Host and Global vars warnings - let g:ale_powershell_psscriptanalyzer_exclusions = - \ 'PSAvoidUsingWriteHost,PSAvoidGlobalVars' -< - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-prolog.txt b/dotfiles/.vim/plugged/ale/doc/ale-prolog.txt deleted file mode 100644 index 14062a5a..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-prolog.txt +++ /dev/null @@ -1,56 +0,0 @@ -=============================================================================== -ALE Prolog Integration *ale-prolog-options* - - -=============================================================================== -swipl *ale-prolog-swipl* - -g:ale_prolog_swipl_executable *g:ale_prolog_swipl_executable* - *b:ale_prolog_swipl_executable* - Type: |String| - Default: `'swipl'` - - The executable that will be run for the `swipl` linter. - -g:ale_prolog_swipl_load *g:ale_prolog_swipl_load* - *b:ale_prolog_swipl_load* - Type: |String| - Default: `'current_prolog_flag(argv, [File]), load_files(File, [sandboxed(true)]), halt.'` - - The prolog goals that will be passed to |g:ale_prolog_swipl_executable| with `-g` option. - - It does: - 1. Takes the first command argument (current file path) - 2. Checks (syntactic / semantic) problems and output to stderr - - NOTE: `sandboxed(true)` prohibits executing some directives such as 'initialization main'. - -g:ale_prolog_swipl_timeout *g:ale_prolog_swipl_timeout* - *b:ale_prolog_swipl_timeout* - Type: |Number| - Default: `3` - - Timeout seconds to detect long-running linter. - It is done by setting SIGALRM. - See |g:ale_prolog_swipl_alarm| and |g:ale_prolog_swipl_alarm_handler|. - -g:ale_prolog_swipl_alarm *g:ale_prolog_swipl_alarm* - *b:ale_prolog_swipl_alarm* - Type: |String| - Default: `'alarm(%t, (%h), _, [])'` - - The prolog goals to be expected to set SIGALRM. - `%t` is replaced by |g:ale_prolog_swipl_timeout|. - `%h` is replaced by |g:ale_prolog_swipl_alarm_handler|. - -g:ale_prolog_swipl_alarm_handler *g:ale_prolog_swipl_alarm_handler* - *b:ale_prolog_swipl_alarm_handler* - Type: |String| - Default: `'writeln(user_error, "ERROR: Exceeded %t seconds, Please change g:prolog_swipl_timeout to modify the limit."), halt(1)'` - - The prolog goals to be expected that will be run on SIGALRM. - `%t` is replaced by |g:ale_prolog_swipl_timeout|. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-proto.txt b/dotfiles/.vim/plugged/ale/doc/ale-proto.txt deleted file mode 100644 index a1bf1303..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-proto.txt +++ /dev/null @@ -1,98 +0,0 @@ -=============================================================================== -ALE Proto Integration *ale-proto-options* - - -=============================================================================== -Integration Information - -To enable `.proto` file linting, update |g:ale_linters| as appropriate: -> - " Enable linter for .proto files - let g:ale_linters = {'proto': ['buf-lint', 'protoc-gen-lint', 'protolint']} - -To enable `.proto` file fixing, update |g:ale_fixers| as appropriate: -> - " Enable linter for .proto files - let b:ale_fixers = {'proto': ['buf-format', 'protolint']} -< -=============================================================================== -buf-format *ale-proto-buf-format* - - The formatter uses `buf`, a fully-featured Protobuf compiler that doesn't depend - on `protoc`. Make sure the `buf` binary is available in the system path, or - set ale_proto_buf_format_executable. - -g:ale_proto_buf_format_executable *g:ale_proto_buf_format_executable* - - Type: |String| - Default: 'buf' - - This variable can be changed to modify the executable used for buf. - -=============================================================================== -buf-lint *ale-proto-buf-lint* - - The linter uses `buf`, a fully-featured Protobuf compiler that doesn't depend - on `protoc`. Make sure the `buf` binary is available in the system path, or - set ale_proto_buf_lint_executable. - -g:ale_proto_buf_lint_executable *g:ale_proto_buf_lint_executable* - - Type: |String| - Default: 'buf' - - This variable can be changed to modify the executable used for buf. - -g:ale_proto_buf_lint_config *g:ale_proto_buf_lint_config* - - Type: |String| - Default: `''` - - A path to a buf configuration file. - - The path to the configuration file can be an absolute path or a relative - path. ALE will search for the relative path in parent directories. - -=============================================================================== -protoc-gen-lint *ale-proto-protoc-gen-lint* - - The linter is a plugin for the `protoc` binary. As long as the binary resides - in the system path, `protoc` will find it. - -g:ale_proto_protoc_gen_lint_options *g:ale_proto_protoc_gen_lint_options* - - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to protoc. Note that the - directory of the linted file is always passed as an include path with '-I' - before any user-supplied options. - -=============================================================================== -protolint *ale-proto-protolint* - - The linter is a pluggable tool that doesn't depend on the `protoc` binary. - This supports both linting and fixing. - Make sure the binary is available in the system path, or set - ale_proto_protolint_executable. - Note that the binary with v0.22.0 or above is supported. - -g:ale_proto_protolint_executable *g:ale_proto_protolint_executable* - - Type: |String| - Default: 'protolint' - - This variable can be changed to modify the executable used for protolint. - -g:ale_proto_protolint_config *g:ale_proto_protolint_config* - - Type: |String| - Default: `''` - - A path to a protolint configuration file. - - The path to the configuration file can be an absolute path or a relative - path. ALE will search for the relative path in parent directories. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-pug.txt b/dotfiles/.vim/plugged/ale/doc/ale-pug.txt deleted file mode 100644 index e2836f85..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-pug.txt +++ /dev/null @@ -1,44 +0,0 @@ -=============================================================================== -ALE Pug Integration *ale-pug-options* - - -=============================================================================== -puglint *ale-pug-puglint* - -The puglint linter will detect configuration files based on the path to the -filename automatically. Configuration files will be loaded in this order: - -1. `.pug-lintrc` -2. `.pug-lintrc.js` -3. `.pug-lintrc.json` -4. `package.json` - -You might need to create a configuration file for your project to get -meaningful results. - -g:ale_pug_puglint_executable *g:ale_pug_puglint_executable* - *b:ale_pug_puglint_executable* - Type: |String| - Default: `'pug-lint'` - - See |ale-integrations-local-executables| - - -g:ale_pug_puglint_options *g:ale_pug_puglint_options* - *b:ale_pug_puglint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to pug-lint. - - -g:ale_pug_puglint_use_global *g:ale_pug_puglint_use_global* - *b:ale_pug_puglint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-puppet.txt b/dotfiles/.vim/plugged/ale/doc/ale-puppet.txt deleted file mode 100644 index daa8c10f..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-puppet.txt +++ /dev/null @@ -1,57 +0,0 @@ -=============================================================================== -ALE Puppet Integration *ale-puppet-options* - - -=============================================================================== -puppet *ale-puppet-puppet* - -g:ale_puppet_puppet_executable *g:ale_puppet_puppet_executable* - *b:ale_puppet_puppet_executable* - Type: |String| - Default: `'puppet'` - - This variable can be changed to specify the executable used for puppet. - - -g:ale_puppet_puppet_options *g:ale_puppet_puppet_options* - *b:ale_puppet_puppet_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the - puppet parser validate invocation. - - -=============================================================================== -puppetlint *ale-puppet-puppetlint* - -g:ale_puppet_puppetlint_executable *g:ale_puppet_puppetlint_executable* - *b:ale_puppet_puppetlint_executable* - Type: |String| - Default: `'puppet-lint'` - - This variable can be changed to specify the executable used for puppet-lint. - - -g:ale_puppet_puppetlint_options *g:ale_puppet_puppetlint_options* - *b:ale_puppet_puppetlint_options* - Type: |String| - Default: `'--no-autoloader_layout-check'` - - This variable can be changed to add command-line arguments to the - puppet-lint invocation. - - -=============================================================================== -puppet-languageserver *ale-puppet-languageserver* - -g:ale_puppet_languageserver_executable *g:ale_puppet_languageserver_executable* - *b:ale_puppet_languageserver_executable* - type: |String| - Default: `'puppet-languageserver'` - - This variable can be used to specify the executable used for - puppet-languageserver. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-purescript.txt b/dotfiles/.vim/plugged/ale/doc/ale-purescript.txt deleted file mode 100644 index 91bef558..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-purescript.txt +++ /dev/null @@ -1,69 +0,0 @@ -=============================================================================== -ALE PureScript Integration *ale-purescript-options* - - -=============================================================================== -purescript-language-server *ale-purescript-language-server* - -PureScript Language Server - (https://github.com/nwolverson/purescript-language-server) - -g:ale_purescript_ls_executable g:ale_purescript_ls_executable - b:ale_purescript_ls_executable - Type: |String| - Default: `'purescript-language-server'` - - PureScript language server executable. - -g:ale_purescript_ls_config g:ale_purescript_ls_config - b:ale_purescript_ls_config - Type: |Dictionary| - Default: `{}` - - Dictionary containing configuration settings that will be passed to the - language server. For example, with a spago project: - { - \ 'purescript': { - \ 'addSpagoSources': v:true, - \ 'addNpmPath': v:true, - \ 'buildCommand': 'spago --quiet build --purs-args --json-errors' - \ } - \} -=============================================================================== -purs-tidy *ale-purescript-tidy* - -g:ale_purescript_tidy_executable *g:ale_purescript_tidy_executable* - *b:ale_purescript_tidy_executable* - Type: |String| - Default: `'purs-tidy'` - - This variable can be changed to use a different executable for purs-tidy. - -g:ale_purescript_tidy_use_global *g:ale_purescript_tidy_use_global* - *b:ale_purescript_tidy_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - -g:ale_purescript_tidy_options *g:ale_purescript_tidy_options* - *b:ale_purescript_tidy_options* - Type: String - Default: `''` - - This variable can be set to pass in additional option to the 'purs-tidy' - executable. -> - let g:ale_purescript_options = '--indent 3' -< -=============================================================================== -purty *ale-purescript-purty* - -g:ale_purescript_purty_executable *g:ale_purescript_purty_executable* - *b:ale_purescript_purty_executable* - Type: |String| - Default: `'purty'` - - This variable can be changed to use a different executable for purty. -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-pyrex.txt b/dotfiles/.vim/plugged/ale/doc/ale-pyrex.txt deleted file mode 100644 index 245e611f..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-pyrex.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE Pyrex (Cython) Integration *ale-pyrex-options* - - -=============================================================================== -cython *ale-pyrex-cython* - -g:ale_pyrex_cython_executable *g:ale_pyrex_cython_executable* - *b:ale_pyrex_cython_executable* - Type: |String| - Default: `'cython'` - - This variable can be changed to use a different executable for cython. - - -g:ale_pyrex_cython_options *g:ale_pyrex_cython_options* - *b:ale_pyrex_cython_options* - Type: |String| - Default: `'--warning-extra --warning-errors'` - - This variable can be changed to modify flags given to cython. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-python.txt b/dotfiles/.vim/plugged/ale/doc/ale-python.txt deleted file mode 100644 index d5d01dc5..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-python.txt +++ /dev/null @@ -1,1229 +0,0 @@ -=============================================================================== -ALE Python Integration *ale-python-options* - - -g:ale_python_auto_pipenv *g:ale_python_auto_pipenv* - *b:ale_python_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_auto_poetry *g:ale_python_auto_poetry* - *b:ale_python_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -ALE Python Project Root Behavior *ale-python-root* - -For some linters, ALE will search for a Python project root by looking at the -files in directories on or above where a file being checked is. ALE applies -the following methods, in order: - -1. Find the first directory containing a common Python configuration file. -2. If no configuration file can be found, use the first directory which does - not contain a readable file named `__init__.py`. - -ALE will look for configuration files with the following filenames. > - - MANIFEST.in - setup.cfg - pytest.ini - tox.ini - .pyre_configuration.local - mypy.ini - .mypy.ini - pycodestyle.cfg - .flake8 - .flake8rc - pylama.ini - pylintrc - .pylintrc - pyrightconfig.json - pyrightconfig.toml - Pipfile - Pipfile.lock - poetry.lock - pyproject.toml - .tool-versions -< - -The first directory containing any of the files named above will be used. - - -=============================================================================== -autoflake *ale-python-autoflake* - -g:ale_python_autoflake_executable *g:ale_python_autoflake_executable* - *b:ale_python_autoflake_executable* - Type: |String| - Default: `'autoflake'` - - See |ale-integrations-local-executables| - - -g:ale_python_autoflake_options *g:ale_python_autoflake_options* - *b:ale_python_autoflake_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to autoflake. - - -g:ale_python_autoflake_use_global *g:ale_python_autoflake_use_global* - *b:ale_python_autoflake_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -autoimport *ale-python-autoimport* - -g:ale_python_autoimport_executable *g:ale_python_autoimport_executable* - *b:ale_python_autoimport_executable* - Type: |String| - Default: `'autoimport'` - - See |ale-integrations-local-executables| - - -g:ale_python_autoimport_options *g:ale_python_autoimport_options* - *b:ale_python_autoimport_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to autoimport. - - -g:ale_python_autoimport_use_global *g:ale_python_autoimport_use_global* - *b:ale_python_autoimport_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -autopep8 *ale-python-autopep8* - -g:ale_python_autopep8_executable *g:ale_python_autopep8_executable* - *b:ale_python_autopep8_executable* - Type: |String| - Default: `'autopep8'` - - See |ale-integrations-local-executables| - - -g:ale_python_autopep8_options *g:ale_python_autopep8_options* - *b:ale_python_autopep8_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to autopep8. - - -g:ale_python_autopep8_use_global *g:ale_python_autopep8_use_global* - *b:ale_python_autopep8_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -bandit *ale-python-bandit* - -g:ale_python_bandit_executable *g:ale_python_bandit_executable* - *b:ale_python_bandit_executable* - Type: |String| - Default: `'bandit'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `bandit'`. - Set this to `'poetry'` to invoke `'poetry` `run` `bandit'`. - - -g:ale_python_bandit_options *g:ale_python_bandit_options* - *b:ale_python_bandit_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the - bandit invocation. - - -g:ale_python_bandit_use_config *g:ale_python_bandit_use_config* - *b:ale_python_bandit_use_config* - Type: |Number| - Default: `1` - - If this variable is true and a `.bandit` file exists in the directory of the - file being checked or a parent directory, an `--ini` option is added to the - `bandit` command for the nearest `.bandit` file. Set this variable false to - disable adding the `--ini` option automatically. - - -g:ale_python_bandit_use_global *g:ale_python_bandit_use_global* - *b:ale_python_bandit_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_bandit_auto_pipenv *g:ale_python_bandit_auto_pipenv* - *b:ale_python_bandit_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_bandit_auto_poetry *g:ale_python_bandit_auto_poetry* - *b:ale_python_bandit_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -black *ale-python-black* - -g:ale_python_black_executable *g:ale_python_black_executable* - *b:ale_python_black_executable* - Type: |String| - Default: `'black'` - - See |ale-integrations-local-executables| - - -g:ale_python_black_options *g:ale_python_black_options* - *b:ale_python_black_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to black. - - -g:ale_python_black_use_global *g:ale_python_black_use_global* - *b:ale_python_black_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_black_auto_pipenv *g:ale_python_black_auto_pipenv* - *b:ale_python_black_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_black_auto_poetry *g:ale_python_black_auto_poetry* - *b:ale_python_black_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -g:ale_python_black_change_directory *g:ale_python_black_change_directory* - *b:ale_python_black_change_directory* - Type: |Number| - Default: `1` - - If set to `1`, ALE will switch to the directory the Python file being - checked with `black` is in before checking it. This helps `black` find - configuration files more easily. This option can be turned off if you want - to control the directory Python is executed from yourself. - - -=============================================================================== -cspell *ale-python-cspell* - -See |ale-cspell-options| - - -=============================================================================== -flake8 *ale-python-flake8* - -g:ale_python_flake8_change_directory *g:ale_python_flake8_change_directory* - *b:ale_python_flake8_change_directory* - Type: |String| - Default: `'project'` - - If set to `project`, ALE will switch to the project root before checking file. - If set to `file`, ALE will first switch to the directory containing the - Python file being checked with `flake8` before checking it. - You can turn it off with `off` option if you want to control the directory - Python is executed from yourself. - - -g:ale_python_flake8_executable *g:ale_python_flake8_executable* - *b:ale_python_flake8_executable* - Type: |String| - Default: `'flake8'` - - This variable can be changed to modify the executable used for flake8. Set - this to `'pipenv'` to invoke `'pipenv` `run` `flake8'`. Set this to - `'poetry'` to invoke `'poetry` `run` `flake8'`. - - -g:ale_python_flake8_options *g:ale_python_flake8_options* - *b:ale_python_flake8_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the flake8 - invocation. - - For example, to dynamically switch between programs targeting Python 2 and - Python 3, you may want to set > - - let g:ale_python_flake8_executable = 'python3' " or 'python' for Python 2 - let g:ale_python_flake8_options = '-m flake8' -< - after making sure it's installed for the appropriate Python versions (e.g. - `python3 -m pip install --user flake8`). - - -g:ale_python_flake8_use_global *g:ale_python_flake8_use_global* - *b:ale_python_flake8_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable controls whether or not ALE will search for flake8 in a - virtualenv directory first. If this variable is set to `1`, then ALE will - always use |g:ale_python_flake8_executable| for the executable path. - - Both variables can be set with `b:` buffer variables instead. - - -g:ale_python_flake8_auto_pipenv *g:ale_python_flake8_auto_pipenv* - *b:ale_python_flake8_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_flake8_auto_poetry *g:ale_python_flake8_auto_poetry* - *b:ale_python_flake8_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -flakehell *ale-python-flakehell* - -g:ale_python_flakehell_change_directory*g:ale_python_flakehell_change_directory* - *b:ale_python_flakehell_change_directory* - Type: |String| - Default: `project` - - If set to `project`, ALE will switch to the project root before checking file. - If set to `file`, ALE will switch to directory the Python file being - checked with `flakehell` is in before checking it. - You can turn it off with `off` option if you want to control the directory - Python is executed from yourself. - - -g:ale_python_flakehell_executable *g:ale_python_flakehell_executable* - *b:ale_python_flakehell_executable* - Type: |String| - Default: `'flakehell'` - - This variable can be changed to modify the executable used for flakehell. Set - this to `'pipenv'` to invoke `'pipenv` `run` `flakehell'`. Set this to - `'poetry'` to invoke `'poetry` `run` `flakehell'`. Set this to `'python'` to - invoke `'python` `-m` `flakehell'`. - - -g:ale_python_flakehell_options *g:ale_python_flakehell_options* - *b:ale_python_flakehell_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the flakehell - lint invocation. - - -g:ale_python_flakehell_use_global *g:ale_python_flakehell_use_global* - *b:ale_python_flakehell_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable controls whether or not ALE will search for flakehell in a - virtualenv directory first. If this variable is set to `1`, then ALE will - always use |g:ale_python_flakehell_executable| for the executable path. - - Both variables can be set with `b:` buffer variables instead. - - -g:ale_python_flakehell_auto_pipenv *g:ale_python_flakehell_auto_pipenv* - *b:ale_python_flakehell_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_flakehell_auto_poetry *g:ale_python_flakehell_auto_poetry* - *b:ale_python_flakehell_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -isort *ale-python-isort* - -g:ale_python_isort_executable *g:ale_python_isort_executable* - *b:ale_python_isort_executable* - Type: |String| - Default: `'isort'` - - See |ale-integrations-local-executables| - - -g:ale_python_isort_options *g:ale_python_isort_options* - *b:ale_python_isort_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to isort. - - -g:ale_python_isort_use_global *g:ale_python_isort_use_global* - *b:ale_python_isort_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_isort_auto_pipenv *g:ale_python_isort_auto_pipenv* - *b:ale_python_isort_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_isort_auto_poetry *g:ale_python_isort_auto_poetry* - *b:ale_python_isort_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -mypy *ale-python-mypy* - -The minimum supported version of mypy that ALE supports is v0.4.4. This is -the first version containing the `--shadow-file` option ALE needs to be able -to check for errors while you type. - -`mypy` will be run from a detected project root, per |ale-python-root|. - - -g:ale_python_mypy_auto_pipenv *g:ale_python_mypy_auto_pipenv* - *b:ale_python_mypy_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_mypy_auto_poetry *g:ale_python_mypy_auto_poetry* - *b:ale_python_mypy_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -g:ale_python_mypy_executable *g:ale_python_mypy_executable* - *b:ale_python_mypy_executable* - Type: |String| - Default: `'mypy'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `mypy'`. - Set this to `'poetry'` to invoke `'poetry` `run` `mypy'`. - - -g:ale_python_mypy_ignore_invalid_syntax - *g:ale_python_mypy_ignore_invalid_syntax* - *b:ale_python_mypy_ignore_invalid_syntax* - Type: |Number| - Default: `0` - - When set to `1`, syntax error messages for mypy will be ignored. This option - can be used when running other Python linters which check for syntax errors, - as mypy can take a while to finish executing. - - -g:ale_python_mypy_options *g:ale_python_mypy_options* - *b:ale_python_mypy_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the mypy - invocation. - - -g:ale_python_mypy_show_notes *g:ale_python_mypy_show_notes* - *b:ale_python_mypy_show_notes* - Type: |Number| - Default: `1` - - If enabled, notes on lines will be displayed as 'I' (info) messages. - - -g:ale_python_mypy_use_global *g:ale_python_mypy_use_global* - *b:ale_python_mypy_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -prospector *ale-python-prospector* - -g:ale_python_prospector_executable *g:ale_python_prospector_executable* - *b:ale_python_prospector_executable* - Type: |String| - Default: `'prospector'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `prospector'`. - Set this to `'poetry'` to invoke `'poetry` `run` `prospector'`. - - -g:ale_python_prospector_options *g:ale_python_prospector_options* - *b:ale_python_prospector_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the prospector - invocation. - - For example, to dynamically switch between programs targeting Python 2 and - Python 3, you may want to set > - - let g:ale_python_prospector_executable = 'python3' - " or 'python' for Python 2 - let g:ale_python_prospector_options = '--rcfile /path/to/.prospector.yaml' - " The virtualenv detection needs to be disabled. - let g:ale_python_prospector_use_global = 0 - - after making sure it's installed for the appropriate Python versions (e.g. - `python3 -m pip install --user prospector`). - - -g:ale_python_prospector_use_global *g:ale_python_prospector_use_global* - *b:ale_python_prospector_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_prospector_auto_pipenv *g:ale_python_prospector_auto_pipenv* - *b:ale_python_prospector_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_prospector_auto_poetry *g:ale_python_prospector_auto_poetry* - *b:ale_python_prospector_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -pycodestyle *ale-python-pycodestyle* - -g:ale_python_pycodestyle_executable *g:ale_python_pycodestyle_executable* - *b:ale_python_pycodestyle_executable* - Type: |String| - Default: `'pycodestyle'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `pycodestyle'`. - Set this to `'poetry'` to invoke `'poetry` `run` `pycodestyle'`. - - -g:ale_python_pycodestyle_options *g:ale_python_pycodestyle_options* - *b:ale_python_pycodestyle_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the - pycodestyle invocation. - - -g:ale_python_pycodestyle_use_global *g:ale_python_pycodestyle_use_global* - *b:ale_python_pycodestyle_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_pycodestyle_auto_pipenv *g:ale_python_pycodestyle_auto_pipenv* - *b:ale_python_pycodestyle_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pycodestyle_auto_poetry *g:ale_python_pycodestyle_auto_poetry* - *b:ale_python_pycodestyle_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -pydocstyle *ale-python-pydocstyle* - -g:ale_python_pydocstyle_executable *g:ale_python_pydocstyle_executable* - *b:ale_python_pydocstyle_executable* - Type: |String| - Default: `'pydocstyle'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `pydocstyle'`. - Set this to `'poetry'` to invoke `'poetry` `run` `pydocstyle'`. - - -g:ale_python_pydocstyle_options *g:ale_python_pydocstyle_options* - *b:ale_python_pydocstyle_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the - pydocstyle invocation. - - -g:ale_python_pydocstyle_use_global *g:ale_python_pydocstyle_use_global* - *b:ale_python_pydocstyle_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_pydocstyle_auto_pipenv *g:ale_python_pydocstyle_auto_pipenv* - *b:ale_python_pydocstyle_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pydocstyle_auto_poetry *g:ale_python_pydocstyle_auto_poetry* - *b:ale_python_pydocstyle_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -pyflakes *ale-python-pyflakes* - -g:ale_python_pyflakes_executable *g:ale_python_pyflakes_executable* - *b:ale_python_pyflakes_executable* - Type: |String| - Default: `'pyflakes'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `pyflakes'`. - Set this to `'poetry'` to invoke `'poetry` `run` `pyflakes'`. - - -g:ale_python_pyflakes_auto_pipenv *g:ale_python_pyflakes_auto_pipenv* - *b:ale_python_pyflakes_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pyflakes_auto_poetry *g:ale_python_pyflakes_auto_poetry* - *b:ale_python_pyflakes_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -pyflyby *ale-python-pyflyby* - -g:ale_python_pyflyby_executable *g:ale_python_pyflyby_executable* - *b:ale_python_pyflyby_executable* - Type: |String| - Default: `'tidy-imports'` - - See |ale-integrations-local-executables| - - -g:ale_python_pyflyby_options *g:ale_python_pyflyby_options* - *b:ale_python_pyflyby_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the pyflyby - tidy-imports invocation. - - -g:ale_python_pyflyby_use_global *g:ale_python_pyflyby_use_global* - *b:ale_python_pyflyby_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_pyflyby_auto_pipenv *g:ale_python_pyflyby_auto_pipenv* - *b:ale_python_pyflyby_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pyflyby_auto_poetry *g:ale_python_pyflyby_auto_poetry* - *b:ale_python_pyflyby_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -pylama *ale-python-pylama* - -g:ale_python_pylama_change_directory *g:ale_python_pylama_change_directory* - *b:ale_python_pylama_change_directory* - Type: |Number| - Default: `1` - - If set to `1`, `pylama` will be run from a detected project root, per - |ale-python-root|. This is useful because `pylama` only searches for - configuration files in its current directory and applies file masks using - paths relative to its current directory. This option can be turned off if - you want to control the directory in which `pylama` is executed. - - -g:ale_python_pylama_executable *g:ale_python_pylama_executable* - *b:ale_python_pylama_executable* - Type: |String| - Default: `'pylama'` - - This variable can be changed to modify the executable used for pylama. Set - this to `'pipenv'` to invoke `'pipenv` `run` `pylama'`. Set this to - `'poetry'` to invoke `'poetry` `run` `pylama'`. - - -g:ale_python_pylama_options *g:ale_python_pylama_options* - *b:ale_python_pylama_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the pylama - invocation. - - -g:ale_python_pylama_use_global *g:ale_python_pylama_use_global* - *b:ale_python_pylama_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable controls whether or not ALE will search for pylama in a - virtualenv directory first. If this variable is set to `1`, then ALE will - always use |g:ale_python_pylama_executable| for the executable path. - - Both variables can be set with `b:` buffer variables instead. - - -g:ale_python_pylama_auto_pipenv *g:ale_python_pylama_auto_pipenv* - *b:ale_python_pylama_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pylama_auto_poetry *g:ale_python_pylama_auto_poetry* - *b:ale_python_pylama_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -pylint *ale-python-pylint* - -g:ale_python_pylint_change_directory *g:ale_python_pylint_change_directory* - *b:ale_python_pylint_change_directory* - Type: |Number| - Default: `1` - - If set to `1`, `pylint` will be run from a detected project root, per - |ale-python-root|. Since `pylint` only checks for `pylintrc` in the packages - above its current directory before falling back to user and global `pylintrc` - files, this is necessary for `pylint` to use a project `pylintrc` file, if - present. This option can be turned off if you want to control the directory - Python is executed from yourself. - - -g:ale_python_pylint_executable *g:ale_python_pylint_executable* - *b:ale_python_pylint_executable* - Type: |String| - Default: `'pylint'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `pylint'`. - Set this to `'poetry'` to invoke `'poetry` `run` `pylint'`. - - -g:ale_python_pylint_options *g:ale_python_pylint_options* - *b:ale_python_pylint_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the pylint - invocation. - - For example, to dynamically switch between programs targeting Python 2 and - Python 3, you may want to set > - - let g:ale_python_pylint_executable = 'python3' " or 'python' for Python 2 - let g:ale_python_pylint_options = '--rcfile /path/to/pylint.rc' - " The virtualenv detection needs to be disabled. - let g:ale_python_pylint_use_global = 0 - - after making sure it's installed for the appropriate Python versions (e.g. - `python3 -m pip install --user pylint`). - - -g:ale_python_pylint_use_global *g:ale_python_pylint_use_global* - *b:ale_python_pylint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_pylint_auto_pipenv *g:ale_python_pylint_auto_pipenv* - *b:ale_python_pylint_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pylint_auto_poetry *g:ale_python_pylint_auto_poetry* - *b:ale_python_pylint_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pylint_use_msg_id *g:ale_python_pylint_use_msg_id* - *b:ale_python_pylint_use_msg_id* - Type: |Number| - Default: `0` - - Use message for output (e.g. I0011) instead of symbolic name of the message - (e.g. locally-disabled). - - -=============================================================================== -pylsp *ale-python-pylsp* - -`pylsp` will be run from a detected project root, per |ale-python-root|. - - -g:ale_python_pylsp_executable *g:ale_python_pylsp_executable* - *b:ale_python_pylsp_executable* - Type: |String| - Default: `'pylsp'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `pylsp'`. - Set this to `'poetry'` to invoke `'poetry` `run` `pyls'`. - - -g:ale_python_pylsp_use_global *g:ale_python_pylsp_use_global* - *b:ale_python_pylsp_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_pylsp_auto_pipenv *g:ale_python_pylsp_auto_pipenv* - *b:ale_python_pylsp_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pylsp_auto_poetry *g:ale_python_pylsp_auto_poetry* - *b:ale_python_pylsp_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pylsp_config *g:ale_python_pylsp_config* - *b:ale_python_pylsp_config* - Type: |Dictionary| - Default: `{}` - - Dictionary with configuration settings for pylsp. For example, to disable - the pycodestyle linter: > - { - \ 'pylsp': { - \ 'plugins': { - \ 'pycodestyle': { - \ 'enabled': v:false - \ } - \ } - \ }, - \ } -< - -g:ale_python_pylsp_options *g:ale_python_pylsp_options* - *b:ale_python_pylsp_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the pylsp - invocation. Note that this is not the same thing as ale_python_pylsp_config, - which allows configuration of how pylsp functions; this is intended to - provide flexibility in how the pylsp command is invoked. - - For example, if you had installed `pylsp` but your `pylsp` executable was not - on your `PATH` for some reason, an alternative way to run the pylsp server - would be: - let g:ale_python_pylsp_executable = 'python3' - let g:ale_python_pylsp_options = '-m pylsp' - - An example stragety for installing `pylsp`: - `python3 -m pip install --user pylsp` - - -=============================================================================== -pyre *ale-python-pyre* - -`pyre` will be run from a detected project root, per |ale-python-root|. - - -g:ale_python_pyre_executable *g:ale_python_pyre_executable* - *b:ale_python_pyre_executable* - Type: |String| - Default: `'pyre'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `pyre'`. - Set this to `'poetry'` to invoke `'poetry` `run` `pyre'`. - - -g:ale_python_pyre_use_global *g:ale_python_pyre_use_global* - *b:ale_python_pyre_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:ale_python_pyre_auto_pipenv *g:ale_python_pyre_auto_pipenv* - *b:ale_python_pyre_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_pyre_auto_poetry *g:ale_python_pyre_auto_poetry* - *b:ale_python_pyre_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -=============================================================================== -pyright *ale-python-pyright* - -The `pyright` linter requires a recent version of `pyright` which includes -the `pyright-langserver` executable. You can install `pyright` on your system -through `npm` with `sudo npm install -g pyright` or similar. - -Refer to their README for installation instructions: -https://github.com/Microsoft/pyright - -`pyright` needs to know the path to your Python executable and probably a -virtualenv to run. ALE will try to detect these automatically. -See |g:ale_python_pyright_config|. - - -g:ale_python_pyright_executable *g:ale_python_pyright_executable* - *b:ale_python_pyright_executable* - Type: |String| - Default: `'pyright-langserver'` - - The executable for running `pyright`, which is typically installed globally. - - -g:ale_python_pyright_config *g:ale_python_pyright_config* - *b:ale_python_pyright_config* - Type: |Dictionary| - Default: `{}` - - Settings for configuring the `pyright` language server. - - See pyright's documentation for a full list of options: - https://github.com/microsoft/pyright/blob/master/docs/settings.md - - ALE will automatically try to set defaults for `venvPath` and `pythonPath` - so your project can automatically be checked with the right libraries. - You can override these settings with whatever you want in your ftplugin - file like so: > - - let b:ale_python_pyright_config = { - \ 'python': { - \ 'pythonPath': '/bin/python', - \ 'venvPath': '/other/dir', - \ }, - \} -< - If `venvPath` is set, but `pythonPath` is not, - ALE will use `venvPath . '/bin/python'` or similar as `pythonPath`. - - A commonly used setting for `pyright` is disabling language services - apart from type checking and "hover" (|ale-hover|), you can set this - setting like so, or use whatever other settings you want: > - - let b:ale_python_pyright_config = { - \ 'pyright': { - \ 'disableLanguageServices': v:true, - \ }, - \} -< - -=============================================================================== -reorder-python-imports *ale-python-reorder_python_imports* - -g:ale_python_reorder_python_imports_executable - *g:ale_python_reorder_python_imports_executable* - *b:ale_python_reorder_python_imports_executable* - Type: |String| - Default: `'reorder-python-imports'` - - See |ale-integrations-local-executables| - - -g:ale_python_reorder_python_imports_options - *g:ale_python_reorder_python_imports_options* - *b:ale_python_reorder_python_imports_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to reorder-python-imports. - - -g:ale_python_reorder_python_imports_use_global - *g:ale_python_reorder_python_imports_use_global* - *b:ale_python_reorder_python_imports_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -unimport *ale-python-unimport* - -`unimport` will be run from a detected project root, per |ale-python-root|. - - -g:ale_python_unimport_auto_pipenv *g:ale_python_unimport_auto_pipenv* - *b:ale_python_unimport_auto_pipenv* - Type: |Number| - Default: `0` - - Detect whether the file is inside a pipenv, and set the executable to `pipenv` - if true. This is overridden by a manually-set executable. - - -g:ale_python_unimport_auto_poetry *g:ale_python_unimport_auto_poetry* - *b:ale_python_unimport_auto_poetry* - Type: |Number| - Default: `0` - - Detect whether the file is inside a poetry, and set the executable to `poetry` - if true. This is overridden by a manually-set executable. - - -g:ale_python_unimport_executable *g:ale_python_unimport_executable* - *b:ale_python_unimport_executable* - Type: |String| - Default: `'unimport'` - - See |ale-integrations-local-executables| - - Set this to `'pipenv'` to invoke `'pipenv` `run` `unimport'`. - Set this to `'poetry'` to invoke `'poetry` `run` `unimport'`. - - -g:ale_python_unimport_options *g:ale_python_unimport_options* - *b:ale_python_unimport_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the unimport - invocation. - - -g:ale_python_unimport_use_global *g:ale_python_unimport_use_global* - *b:ale_python_unimport_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -vulture *ale-python-vulture* - -g:ale_python_vulture_change_directory *g:ale_python_vulture_change_directory* - *b:ale_python_vulture_change_directory* - Type: |Number| - Default: `1` - - If set to `1`, ALE will switch to the directory the Python file being - checked with `vulture` is in before checking it and check the whole project - directory instead of checking only the file opened in the current buffer. - This helps `vulture` to know the context and avoid false-negative results. - - -g:ale_python_vulture_executable *g:ale_python_vulture_executable* - *b:ale_python_vulture_executable* - Type: |String| - Default: `'vulture'` - - See |ale-integrations-local-executables| - - -g:ale_python_vulture_options *g:ale_python_vulture_options* - *b:ale_python_vulture_options* - Type: |String| - Default: `''` - - This variable can be changed to add command-line arguments to the vulture - invocation. - - -g:ale_python_vulture_use_global *g:ale_python_vulture_use_global* - *b:ale_python_vulture_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -yapf *ale-python-yapf* - -g:ale_python_yapf_executable *g:ale_python_yapf_executable* - *b:ale_python_yapf_executable* - Type: |String| - Default: `'yapf'` - - See |ale-integrations-local-executables| - - -g:ale_python_yapf_use_global *g:ale_python_yapf_use_global* - *b:ale_python_yapf_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-qml.txt b/dotfiles/.vim/plugged/ale/doc/ale-qml.txt deleted file mode 100644 index f6d715a1..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-qml.txt +++ /dev/null @@ -1,18 +0,0 @@ -=============================================================================== -ALE QML Integration *ale-qml-options* - - -=============================================================================== -qmlfmt *ale-qml-qmlfmt* - -g:ale_qml_qmlfmt_executable *g:ale_qml_qmlfmt_executable* - *b:ale_qml_qmlfmt_executable* - Type: |String| - Default: `'qmlfmt'` - - This variable can be set to change the path to qmlfmt. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/dotfiles/.vim/plugged/ale/doc/ale-r.txt b/dotfiles/.vim/plugged/ale/doc/ale-r.txt deleted file mode 100644 index 3fabf702..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-r.txt +++ /dev/null @@ -1,68 +0,0 @@ -=============================================================================== -ALE R Integration *ale-r-options* - - -=============================================================================== -languageserver *ale-r-languageserver* - -g:ale_r_languageserver_cmd *g:ale_r_languageserver_cmd* - *b:ale_r_languageserver_cmd* - Type: |String| - Default: `'languageserver::run()'` - - This option can be configured to change the execution command for - languageserver. - - See the languageserver documentation for more options. - - -g:ale_r_languageserver_config *g:ale_r_languageserver_config* - *b:ale_r_languageserver_config* - Type: |Dictionary| - Default: `{}` - - This option can be configured to change settings for languageserver. See the - languageserver documentation for more information. - - -=============================================================================== -lintr *ale-r-lintr* - -g:ale_r_lintr_options *g:ale_r_lintr_options* - *b:ale_r_lintr_options* - Type: |String| - Default: `'lintr::with_defaults()'` - - This option can be configured to change the options for lintr. - - The value of this option will be run with `eval` for the `lintr::lint` - options. Consult the lintr documentation for more information. - - -g:ale_r_lintr_lint_package *g:ale_r_lintr_lint_package* - *b:ale_r_lintr_lint_package* - Type: |Number| - Default: `0` - - When set to `1`, the file will be checked with `lintr::lint_package` instead - of `lintr::lint`. This prevents erroneous namespace warnings when linting - package files. - - -=============================================================================== -styler *ale-r-styler* - -g:ale_r_styler_options *g:ale_r_styler_options* - *b:ale_r_styler_options* - Type: |String| - Default: `'styler::tidyverse_style'` - - This option can be configured to change the options for styler. - - The value of this option will be used as the `style` argument for the - `styler::style_file` options. Consult the styler documentation - for more information. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-reasonml.txt b/dotfiles/.vim/plugged/ale/doc/ale-reasonml.txt deleted file mode 100644 index b8729a55..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-reasonml.txt +++ /dev/null @@ -1,76 +0,0 @@ -=============================================================================== -ALE ReasonML Integration *ale-reasonml-options* - - -=============================================================================== -merlin *ale-reasonml-merlin* - -To use merlin linter for ReasonML source code you need to make sure Merlin for -Vim is correctly configured. See the corresponding Merlin wiki page for -detailed instructions: -https://github.com/the-lambda-church/merlin/wiki/vim-from-scratch - -=============================================================================== -ols *ale-reasonml-ols* - -The `ocaml-language-server` is the engine that powers OCaml and ReasonML -editor support using the Language Server Protocol. See the installation -instructions: -https://github.com/freebroccolo/ocaml-language-server#installation - - -g:ale_reason_ols_executable *g:ale_reason_ols_executable* - *b:ale_reason_ols_executable* - Type: |String| - Default: `'ocaml-language-server'` - - This variable can be set to change the executable path for `ols`. - - -g:ale_reason_ols_use_global *g:ale_reason_ols_use_global* - *b:ale_reason_ols_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable can be set to `1` to always use the globally installed - executable. See also |ale-integrations-local-executables|. - - -=============================================================================== -reason-language-server *ale-reasonml-language-server* - -Note: You must set an executable - there is no 'default' install location. -Go to https://github.com/jaredly/reason-language-server and download the -latest release. You can place it anywhere, but ensure you set the executable -path. - - -g:ale_reason_ls_executable *g:ale_reason_ls_executable* - *b:ale_reason_ls_executable* - Type: |String| - - This variable defines the standard location of the language server - executable. This must be set. - - -=============================================================================== -refmt *ale-reasonml-refmt* - -g:ale_reasonml_refmt_executable *g:ale_reasonml_refmt_executable* - *b:ale_reasonml_refmt_executable* - Type: |String| - Default: `'refmt'` - - This variable can be set to pass the path of the refmt fixer. - - -g:ale_reasonml_refmt_options *g:ale_reasonml_refmt_options* - *b:ale_reasonml_refmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the refmt fixer. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-rego.txt b/dotfiles/.vim/plugged/ale/doc/ale-rego.txt deleted file mode 100644 index 9a39dbf0..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-rego.txt +++ /dev/null @@ -1,50 +0,0 @@ -=============================================================================== -ALE Rego Integration *ale-rego-options* - - -=============================================================================== -cspell *ale-rego-cspell* - -See |ale-cspell-options| - - -=============================================================================== -opacheck *ale-rego-opa-check* - -g:ale_rego_opacheck_executable *g:rego_opacheck_executable* - *b:rego_opacheck_executable* - - Type: |String| - Default: `'opa'` - - This variable can be changed to use a different executable for opa. - - -g:rego_opacheck_options *g:rego_opacheck_options* - *b:rego_opacheck_options* - Type: |String| - Default: `''` - - This variable can be changed to pass custom CLI flags to opa check. - - -=============================================================================== -opafmt *ale-rego-opa-fmt-fixer* - -g:ale_opa_fmt_executable *g:ale_opa_fmt_executable* - *b:ale_opa_fmt_executable* - - Type: |String| - Default: `'opa'` - - This variable can be changed to use a different executable for opa. - - -g:ale_opa_fmt_options *g:ale_opa_fmt_options* - *b:ale_opa_fmt_options* - Type: |String| - Default: `''` - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-restructuredtext.txt b/dotfiles/.vim/plugged/ale/doc/ale-restructuredtext.txt deleted file mode 100644 index 7af62133..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-restructuredtext.txt +++ /dev/null @@ -1,33 +0,0 @@ -=============================================================================== -ALE reStructuredText Integration *ale-restructuredtext-options* - - -=============================================================================== -cspell *ale-restructuredtext-cspell* - -See |ale-cspell-options| - - -=============================================================================== -textlint *ale-restructuredtext-textlint* - -To use textlint at reStructuredText, please install `textlint-plugin-rst`. -https://github.com/jimo1001/textlint-plugin-rst -> - $ npm install textlint-plugin-rst - -To install `textlint-plugin-rst`, `docutils-ast-writer` python package -must be installed. -See: https://github.com/jimo1001/docutils-ast-writer - -See |ale-text-textlint| - - -=============================================================================== -write-good *ale-restructuredtext-write-good* - -See |ale-write-good-options| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-robot.txt b/dotfiles/.vim/plugged/ale/doc/ale-robot.txt deleted file mode 100644 index 405ae277..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-robot.txt +++ /dev/null @@ -1,16 +0,0 @@ -=============================================================================== -ALE Robot Integration *ale-robot-options* - - -=============================================================================== -rflint *ale-robot-rflint* - -g:ale_robot_rflint_executable *g:ale_robot_rflint_executable* - *b:ale_robot_rflint_executable* - Type: |String| - Default: `'rflint'` - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/dotfiles/.vim/plugged/ale/doc/ale-ruby.txt b/dotfiles/.vim/plugged/ale/doc/ale-ruby.txt deleted file mode 100644 index bd7bd57d..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-ruby.txt +++ /dev/null @@ -1,243 +0,0 @@ -=============================================================================== -ALE Ruby Integration *ale-ruby-options* - - -=============================================================================== -brakeman *ale-ruby-brakeman* - -g:ale_ruby_brakeman_executable *g:ale_ruby_brakeman_executable* - *b:ale_ruby_brakeman_executable* - Type: String - Default: `'brakeman'` - - Override the invoked brakeman binary. Set this to `'bundle'` to invoke - `'bundle` `exec` brakeman'. - - -g:ale_ruby_brakeman_options *g:ale_ruby_brakeman_options* - *b:ale_ruby_brakeman_options* - Type: |String| - Default: `''` - - The contents of this variable will be passed through to brakeman. - - -=============================================================================== -cspell *ale-ruby-cspell* - -See |ale-cspell-options| - - -=============================================================================== -debride *ale-ruby-debride* - -g:ale_ruby_debride_executable *g:ale_ruby_debride_executable* - *b:ale_ruby_debride_executable* - Type: String - Default: `'debride'` - - Override the invoked debride binary. Set this to `'bundle'` to invoke - `'bundle` `exec` debride'. - - -g:ale_ruby_debride_options *g:ale_ruby_debride_options* - *b:ale_ruby_debride_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to debride. - - -=============================================================================== -prettier *ale-ruby-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -rails_best_practices *ale-ruby-rails_best_practices* - -g:ale_ruby_rails_best_practices_executable - *g:ale_ruby_rails_best_practices_executable* - *b:ale_ruby_rails_best_practices_executable* - Type: String - Default: `'rails_best_practices'` - - Override the invoked rails_best_practices binary. Set this to `'bundle'` to - invoke `'bundle` `exec` rails_best_practices'. - - -g:ale_ruby_rails_best_practices_options - *g:ale_ruby_rails_best_practices_options* - *b:ale_ruby_rails_best_practices_options* - Type: |String| - Default: `''` - - The contents of this variable will be passed through to rails_best_practices. - - -=============================================================================== -reek *ale-ruby-reek* - -g:ale_ruby_reek_executable *g:ale_ruby_reek_executable* - *b:ale_ruby_reek_executable* - Type: String - Default: `'reek'` - - Override the invoked reek binary. Set this to `'bundle'` to invoke - `'bundle` `exec` reek'. - - -g:ale_ruby_reek_show_context *g:ale_ruby_reek_show_context* - *b:ale_ruby_reek_show_context* - Type: |Number| - Default: 0 - - Controls whether context is included in the linter message. Defaults to off - because context is usually obvious while viewing a file. - - -g:ale_ruby_reek_show_wiki_link *g:ale_ruby_reek_show_wiki_link* - *b:ale_ruby_reek_show_wiki_link* - Type: |Number| - Default: 0 - - Controls whether linter messages contain a link to an explanatory wiki page - for the type of code smell. Defaults to off to improve readability. - - -=============================================================================== -rubocop *ale-ruby-rubocop* - -g:ale_ruby_rubocop_executable *g:ale_ruby_rubocop_executable* - *b:ale_ruby_rubocop_executable* - Type: String - Default: `'rubocop'` - - Override the invoked rubocop binary. Set this to `'bundle'` to invoke - `'bundle` `exec` rubocop'. - - -g:ale_ruby_rubocop_options *g:ale_ruby_rubocop_options* - *b:ale_ruby_rubocop_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to rubocop. - - -g:ale_ruby_rubocop_auto_correct_all *g:ale_ruby_rubocop_auto_correct_all* - *b:ale_ruby_rubocop_auto_correct_all* - Type: Number - Default: `0` - - This variable can be changed to make rubocop to correct all offenses (unsafe). - - -=============================================================================== -ruby *ale-ruby-ruby* - -g:ale_ruby_ruby_executable *g:ale_ruby_ruby_executable* - *b:ale_ruby_ruby_executable* - Type: String - Default: `'ruby'` - - This variable can be changed to use a different executable for ruby. - - -=============================================================================== -rufo *ale-ruby-rufo* - -g:ale_ruby_rufo_executable *g:ale_ruby_rufo_executable* - *b:ale_ruby_rufo_executable* - Type: String - Default: `'rufo'` - - Override the invoked rufo binary. This is useful for running rufo from - binstubs or a bundle. - - -=============================================================================== -solargraph *ale-ruby-solargraph* - -g:ale_ruby_solargraph_executable *g:ale_ruby_solargraph_executable* - *b:ale_ruby_solargraph_executable* - Type: String - Default: `'solargraph'` - - Override the invoked solargraph binary. This is useful for running solargraph - from binstubs or a bundle. - - -=============================================================================== -sorbet *ale-ruby-sorbet* - -g:ale_ruby_sorbet_executable *g:ale_ruby_sorbet_executable* - *b:ale_ruby_sorbet_executable* - Type: String - Default: `'srb'` - - Override the invoked sorbet binary. Set this to `'bundle'` to invoke - `'bundle` `exec` srb'. - - -g:ale_ruby_sorbet_options *g:ale_ruby_sorbet_options* - *b:ale_ruby_sorbet_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to sorbet. - - -g:ale_ruby_sorbet_enable_watchman *g:ale_ruby_sorbet_enable_watchman* - *b:ale_ruby_sorbet_enable_watchman* - Type: |Number| - Default: `0` - - Whether or not to use watchman to let the LSP server to know about changes - to files from outside of vim. Defaults to disable watchman because it - requires watchman to be installed separately from sorbet. - - -=============================================================================== -standardrb *ale-ruby-standardrb* - -g:ale_ruby_standardrb_executable *g:ale_ruby_standardrb_executable* - *b:ale_ruby_standardrb_executable* - Type: String - Default: `'standardrb'` - - Override the invoked standardrb binary. Set this to `'bundle'` to invoke - `'bundle` `exec` standardrb'. - - -g:ale_ruby_standardrb_options *g:ale_ruby_standardrb_options* - *b:ale_ruby_standardrb_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to standardrb. - - -=============================================================================== -syntax_tree *ale-ruby-syntax_tree* - -g:ale_ruby_syntax_tree_executable *g:ale_ruby_syntax_tree_executable* - *b:ale_ruby_syntax_tree_executable* - Type: String - Default: `'stree'` - - Override the invoked SyntaxTree binary. Set this to `'bundle'` to invoke - `'bundle` `exec` stree'. - - -g:ale_ruby_syntax_tree_options *g:ale_ruby_syntax_tree_options* - *b:ale_ruby_syntax_tree_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to SyntaxTree. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-rust.txt b/dotfiles/.vim/plugged/ale/doc/ale-rust.txt deleted file mode 100644 index c8ec9b13..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-rust.txt +++ /dev/null @@ -1,292 +0,0 @@ -=============================================================================== -ALE Rust Integration *ale-rust-options* - *ale-integration-rust* - -=============================================================================== -Integration Information - - If Vim does not detect the Rust file type out-of-the-box, you need the runtime - files for Rust distributed in Vim >=8.0.0501 or upstream: - https://github.com/rust-lang/rust.vim - - Note that there are several possible linters and fixers for Rust files: - - 1. rustc -- The Rust compiler is used to check the currently edited file. - So, if your project consists of multiple files, you will get some errors - when you use e.g. a struct which is defined in another file. You can use - |g:ale_rust_ignore_error_codes| to ignore some of these errors. - 2. cargo -- If your project is managed by Cargo, the whole project is - checked. That means that all errors are properly shown, but cargo can - only operate on the files written on disk, so errors will not be reported - while you type. - 3. rls -- If you have `rls` installed, you might prefer using this linter - over cargo. rls implements the Language Server Protocol for incremental - compilation of Rust code, and can check Rust files while you type. `rls` - requires Rust files to be contained in Cargo projects. - 4. analyzer -- If you have rust-analyzer installed, you might prefer using - this linter over cargo and rls. rust-analyzer also implements the - Language Server Protocol for incremental compilation of Rust code, and is - the next iteration of rls. rust-analyzer either requires Rust files to be - contained in Cargo projects or requires the project to be described in - the rust-project.json format: - https://rust-analyzer.github.io/manual.html#non-cargo-based-projects - 5. rustfmt -- If you have `rustfmt` installed, you can use it as a fixer to - consistently reformat your Rust code. - - Only cargo and rls are enabled by default. To switch to using rustc instead - of cargo, configure |g:ale_linters| appropriately: > - - " See the help text for the option for more information. - let g:ale_linters = {'rust': ['rustc', 'rls']} -< - - Also note that rustc 1.18. or later is needed. - - -=============================================================================== -analyzer *ale-rust-analyzer* - -g:ale_rust_analyzer_executable *g:ale_rust_analyzer_executable* - *b:ale_rust_analyzer_executable* - Type: |String| - Default: `'rust-analyzer'` - - This variable can be modified to change the executable path for - `rust-analyzer`. - - -g:ale_rust_analyzer_config *g:ale_rust_analyzer_config* - *b:ale_rust_analyzer_config* - Type: |Dictionary| - Default: `{}` - - Dictionary with configuration settings for rust-analyzer. - - -=============================================================================== -cargo *ale-rust-cargo* - -g:ale_rust_cargo_use_check *g:ale_rust_cargo_use_check* - *b:ale_rust_cargo_use_check* - Type: |Number| - Default: `1` - - When set to `1`, this option will cause ALE to use `cargo check` instead of - `cargo build` . `cargo check` is supported since version 1.16.0 of Rust. - - ALE will never use `cargo check` when the version of `cargo` is less than - 0.17.0. - - -g:ale_rust_cargo_check_all_targets *g:ale_rust_cargo_check_all_targets* - *b:ale_rust_cargo_check_all_targets* - Type: |Number| - Default: `0` - - When set to `1`, ALE will set the `--all-targets` option when `cargo check` - is used. See |g:ale_rust_cargo_use_check|, - - -g:ale_rust_cargo_check_tests *g:ale_rust_cargo_check_tests* - *b:ale_rust_cargo_check_tests* - Type: |Number| - Default: `0` - - When set to `1`, ALE will set the `--tests` option when `cargo check` - is used. This allows for linting of tests which are normally excluded. - See |g:ale_rust_cargo_use_check|, - - -g:ale_rust_cargo_check_examples *g:ale_rust_cargo_check_examples* - *b:ale_rust_cargo_check_examples* - Type: |Number| - Default: `0` - - When set to `1`, ALE will set the `--examples` option when `cargo check` - is used. This allows for linting of examples which are normally excluded. - See |g:ale_rust_cargo_use_check|, - - -g:ale_rust_cargo_default_feature_behavior - *g:ale_rust_cargo_default_feature_behavior* - *b:ale_rust_cargo_default_feature_behavior* - Type: |String| - Default: `default` - - When set to `none`, ALE will set the `--no-default-features` option when - invoking `cargo`. Only the features specified in - |g:ale_rust_cargo_include_features| will be included when performing the - lint check. - - When set to `default`, ALE will instruct `cargo` to build all default - features specified in the project's `Cargo.toml` file, in addition to - including any additional features defined in - |g:ale_rust_cargo_include_features|. - - When set to `all`, ALE will set the `--all-features` option when - invoking `cargo`, which will include all features defined in the project's - `Cargo.toml` file when performing the lint check. - - -g:ale_rust_cargo_include_features *g:ale_rust_cargo_include_features* - *b:ale_rust_cargo_include_features* - Type: |String| - Default: `''` - - When defined, ALE will set the `--features` option when invoking `cargo` to - perform the lint check. See |g:ale_rust_cargo_default_feature_behavior|. - - -g:ale_rust_cargo_avoid_whole_workspace *g:ale_rust_cargo_avoid_whole_workspace* - *b:ale_rust_cargo_avoid_whole_workspace* - Type: |Number| - Default: `1` - - When set to 1, and ALE is used to edit a crate that is part of a Cargo - workspace, avoid building the entire workspace by invoking `cargo` directly - in the crate's directory. Otherwise, behave as usual. - - -g:ale_rust_cargo_use_clippy *g:ale_rust_cargo_use_clippy* - *b:ale_rust_cargo_use_clippy* - Type: |Number| - Default: `0` - - When set to 1, `cargo clippy` will be used instead of `cargo check` or - `cargo build` as linter. - For details of `cargo clippy`, please visit the following link: - - https://github.com/rust-lang-nursery/rust-clippy - - Since `cargo clippy` is optional toolchain, it's safer to check whether - `cargo-clippy` is executable as follows: -> - let g:ale_rust_cargo_use_clippy = executable('cargo-clippy') -< - -g:ale_rust_cargo_clippy_options *g:ale_rust_cargo_clippy_options* - *b:ale_rust_cargo_clippy_options* - - Type: |String| - Default: `''` - - When `cargo clippy` is used, this value will be added to a command line to run - it. This variable is useful when you want to add some extra options which - only `cargo clippy` supports (e.g. `--deny`). - - -g:ale_rust_cargo_target_dir *g:ale_rust_cargo_target_dir* - *b:ale_rust_cargo_target_dir* - - Type: |String| - Default: `''` - - Use a custom target directory when running the commands for ALE. This can - help to avoid "waiting for file lock on build directory" messages when - running `cargo` commands manually while ALE is performing its checks. - - -=============================================================================== -cspell *ale-rust-cspell* - -See |ale-cspell-options| - - -=============================================================================== -rls *ale-rust-rls* - -g:ale_rust_rls_executable *g:ale_rust_rls_executable* - *b:ale_rust_rls_executable* - Type: |String| - Default: `'rls'` - - This variable can be modified to change the executable path for `rls`. - - -g:ale_rust_rls_toolchain *g:ale_rust_rls_toolchain* - *b:ale_rust_rls_toolchain* - Type: |String| - Default: `''` - - This option can be set to change the toolchain used for `rls`. Possible - values include `'nightly'`, `'beta'`, `'stable'`, and `''`. When using - option `''`, rls will automatically find the default toolchain set by - rustup. If you want to use `rls` from a specific toolchain version, you may - also use values like `'channel-yyyy-mm-dd-arch-target'` as long as - `'rls +{toolchain_name} -V'` runs correctly in your command line. - - The `rls` server will only be started once per executable. - - -g:ale_rust_rls_config *g:ale_rust_rls_config* - *b:ale_rust_rls_config* - Type: |Dictionary| - Default: `{}` - - Dictionary with configuration settings for rls. For example, to force - using clippy as linter: > - { - \ 'rust': { - \ 'clippy_preference': 'on' - \ } - \ } - - -=============================================================================== -rustc *ale-rust-rustc* - - -g:ale_rust_rustc_options *g:ale_rust_rustc_options* - *b:ale_rust_rustc_options* - Type: |String| - Default: `'--emit=mir -o /dev/null'` - - The variable can be used to change the options passed to `rustc`. - - Users of nightly builds of Rust might want to use `-Z no-codegen` instead. - Be careful when setting the options, as running `rustc` could execute code - or generate binary files. - - -g:ale_rust_ignore_error_codes *g:ale_rust_ignore_error_codes* - *b:ale_rust_ignore_error_codes* - Type: |List| of |String|s - Default: `[]` - - This variable can contain error codes which will be ignored. For example, to - ignore most errors regarding failed imports, put this in your .vimrc - > - let g:ale_rust_ignore_error_codes = ['E0432', 'E0433'] - - -g:ale_rust_ignore_secondary_spans *g:ale_rust_ignore_secondary_spans* - *b:ale_rust_ignore_secondary_spans* - Type: Number - Default: 0 - - When set to 1, instructs the Rust error reporting to ignore secondary spans. - The problem with secondary spans is that they sometimes appear in error - messages before the main cause of the error, for example: > - - 1 src/main.rs|98 col 5 error| this function takes 4 parameters but 5 - parameters were supplied: defined here - 2 src/main.rs|430 col 32 error| this function takes 4 parameters but 5 - parameters were supplied: expected 4 parameters -< - This is due to the sorting by line numbers. With this option set to 1, - the 'defined here' span will not be presented. - - -=============================================================================== -rustfmt *ale-rust-rustfmt* - -g:ale_rust_rustfmt_options *g:ale_rust_rustfmt_options* - *b:ale_rust_rustfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the rustfmt fixer. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-salt.tmt b/dotfiles/.vim/plugged/ale/doc/ale-salt.tmt deleted file mode 100644 index ac500d37..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-salt.tmt +++ /dev/null @@ -1,43 +0,0 @@ -=============================================================================== -ALE SALT Integration *ale-salt-options* - -=============================================================================== -salt-lint *ale-salt-salt-lint* - -Website: https://github.com/warpnet/salt-lint - - -Installation -------------------------------------------------------------------------------- - -Install salt-lint in your a virtualenv directory, locally, or globally: > - - pip install salt-lint # After activating virtualenv - pip install --user salt-lint # Install to ~/.local/bin - sudo pip install salt-lint # Install globally - -See |g:ale_virtualenv_dir_names| for configuring how ALE searches for -virtualenv directories. - - -Options -------------------------------------------------------------------------------- - -g:ale_salt_salt-lint_executable *g:ale_salt_salt_lint_executable* - *b:ale_salt_salt_lint_executable* - Type: |String| - Default: `'salt-lint'` - - This variable can be set to change the path to salt-lint. - - -g:ale_salt_salt-lint_options *g:ale_salt_salt-lint_options* - *b:ale_salt_salt-lint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to salt-lint. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-sass.txt b/dotfiles/.vim/plugged/ale/doc/ale-sass.txt deleted file mode 100644 index 22d7c472..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-sass.txt +++ /dev/null @@ -1,31 +0,0 @@ -=============================================================================== -ALE Sass Integration *ale-sass-options* - - -=============================================================================== -sasslint *ale-sass-sasslint* - -See |ale-scss-sasslint| for information about the available options. - - -=============================================================================== -stylelint *ale-sass-stylelint* - -g:ale_sass_stylelint_executable *g:ale_sass_stylelint_executable* - *b:ale_sass_stylelint_executable* - Type: |String| - Default: `'stylelint'` - - See |ale-integrations-local-executables| - - -g:ale_sass_stylelint_use_global *g:ale_sass_stylelint_use_global* - *b:ale_sass_stylelint_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-scala.txt b/dotfiles/.vim/plugged/ale/doc/ale-scala.txt deleted file mode 100644 index 0b0f1a9a..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-scala.txt +++ /dev/null @@ -1,130 +0,0 @@ -=============================================================================== -ALE Scala Integration *ale-scala-options* - - -=============================================================================== -cspell *ale-scala-cspell* - -See |ale-cspell-options| - - -=============================================================================== -metals *ale-scala-metals* - -`metals` requires either an SBT project, a Mill project, or a running Bloop -server. - - -g:ale_scala_metals_executable *g:ale_scala_metals_executable* - *b:ale_scala_metals_executable* - Type: |String| - Default: `'metals-vim'` - - Override the invoked `metals` binary. - - -g:ale_scala_metals_project_root *g:ale_scala_metals_project_root* - *b:ale_scala_metals_project_root* - Type: |String| - Default: `''` - - By default the project root is found by searching upwards for `build.sbt`, - `build.sc`, `.bloop` or `.metals`. - If the project root is elsewhere, you can override the project root - directory. - - -=============================================================================== -sbtserver *ale-scala-sbtserver* - -`sbtserver` requires a running ^1.1.x sbt shell to connect to. It will attempt -to connect via TCP to the address defined in `g:ale_scala_sbtserver_address`. -As `sbt` defaults to listening via unix sockets, place these settings into -your `~/.sbt/1.0/global.sbt` to ensure that ale will always attempt to connect -to the right socket: - -`serverConnectionType := ConnectionType.Tcp` and `serverPort := 4273` - - -g:ale_scala_sbtserver_address *g:ale_scala_sbtserver_address* - *b:ale_scala_sbtserver_address* - Type: |String| - Default: `'127.0.0.1:4273'` - - By default the address is found by parsing `active.json`, however, reading a - file is a blocking operation which should be avoided in ale. The easy way - around this is to configure sbt to always connect to the same port, which - the instructions above describe. - - -g:ale_scala_sbtserver_project_root *g:ale_scala_sbtserver_project_root* - *b:ale_scala_sbtserver_project_root* - Type: |String| - Default: `''` - - By default the project root is found by searching upwards for `build.sbt`. - If the project root is elsewhere, you can override the project root - directory. - - -=============================================================================== -scalafmt *ale-scala-scalafmt* - -If Nailgun is used, override `g:ale_scala_scalafmt_executable` like so: > - let g:ale_scala_scalafmt_executable = 'ng' - - -g:ale_scala_scalafmt_executable *g:ale_scala_scalafmt_executable* - *b:ale_scala_scalafmt_executable* - Type: |String| - Default: `'scalafmt'` - - Override the invoked `scalafmt` binary. This is useful for running `scalafmt` - with Nailgun. - - -g:ale_scala_scalafmt_options *g:ale_scala_scalafmt_options* - *b:ale_scala_scalafmt_options* - Type: |String| - Default: `''` - - A string containing additional options to pass to `'scalafmt'`, or - `'ng scalafmt'` if Nailgun is used. - - -=============================================================================== -scalastyle *ale-scala-scalastyle* - -`scalastyle` requires a configuration file for a project to run. When no -configuration file can be found, ALE will report a problem saying that a -configuration file is required at line 1. - -To disable `scalastyle` globally, use |g:ale_linters| like so: > - let g:ale_linters = {'scala': ['scalac']} " Enable only scalac instead -< - -See |g:ale_linters| for more information on disabling linters. - - -g:ale_scala_scalastyle_config *g:ale_scala_scalastyle_config* - *b:ale_scala_scalastyle_config* - Type: |String| - Default: `''` - - A string containing the location of a global fallback configuration file. - - By default, ALE will look for a configuration file named - `scalastyle_config.xml` or `scalastyle-config.xml` in the current file's - directory or parent directories. - - -g:ale_scala_scalastyle_options *g:ale_scala_scalastyle_options* - *b:ale_scala_scalastyle_options* - Type: |String| - Default: `''` - - A string containing additional options to pass to scalastyle. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-scss.txt b/dotfiles/.vim/plugged/ale/doc/ale-scss.txt deleted file mode 100644 index 07a94fe1..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-scss.txt +++ /dev/null @@ -1,64 +0,0 @@ -=============================================================================== -ALE SCSS Integration *ale-scss-options* - - -=============================================================================== -prettier *ale-scss-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -sasslint *ale-scss-sasslint* - -g:ale_scss_sasslint_executable *g:ale_scss_sasslint_executable* - *b:ale_scss_sasslint_executable* - Type: |String| - Default: `'sass-lint'` - - See |ale-integrations-local-executables| - - -g:ale_scss_sasslint_options *g:ale_scss_sasslint_options* - *b:ale_scss_sasslint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to sass-lint. - - -g:ale_scss_sasslint_use_global *g:ale_scss_sasslint_use_global* - *b:ale_scss_sasslint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -stylelint *ale-scss-stylelint* - -g:ale_scss_stylelint_executable *g:ale_scss_stylelint_executable* - *b:ale_scss_stylelint_executable* - Type: |String| - Default: `'stylelint'` - - See |ale-integrations-local-executables| - -g:ale_scss_stylelint_options *g:ale_scss_stylelint_options* - *b:ale_scss_stylelint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to stylelint. - -g:ale_scss_stylelint_use_global *g:ale_scss_stylelint_use_global* - *b:ale_scss_stylelint_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-sh.txt b/dotfiles/.vim/plugged/ale/doc/ale-sh.txt deleted file mode 100644 index 9a1928c4..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-sh.txt +++ /dev/null @@ -1,144 +0,0 @@ -=============================================================================== -ALE Shell Integration *ale-sh-options* - - -=============================================================================== -bashate *ale-sh-bashate* - -g:ale_sh_bashate_executable *g:ale_sh_bashate_executable* - *b:ale_sh_bashate_executable* - Type: |String| - Default: `'bashate'` - - This variable sets executable used for bashate. - - -g:ale_sh_bashate_options *g:ale_sh_bashate_options* - *b:ale_sh_bashate_options* - Type: |String| - Default: `''` - - With this variable we are able to pass extra arguments for bashate. For - example to ignore the indentation rule: - -> - let g:ale_sh_bashate_options = '-i E003' -< - -=============================================================================== -cspell *ale-sh-cspell* - -See |ale-cspell-options| - - -=============================================================================== -sh-language-server *ale-sh-language-server* - -g:ale_sh_language_server_executable *g:ale_sh_language_server_executable* - *b:ale_sh_language_server_executable* - Type: |String| - Default: `'bash-language-server'` - - See |ale-integrations-local-executables| - - -g:ale_sh_language_server_use_global *g:ale_sh_language_server_use_global* - *b:ale_sh_language_server_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -shell *ale-sh-shell* - -g:ale_sh_shell_default_shell *g:ale_sh_shell_default_shell* - *b:ale_sh_shell_default_shell* - Type: |String| - Default: The current shell (`$SHELL`). Falls back to `'bash'` if that cannot be - read or if the current shell is `'fish'`. - - When ALE runs the linter for shells with the `-n` flag, it will attempt to - read the shell from the shebang (`#!`) line from the shell script to - determine the shell program to run. When this detection fails, this variable - will be used instead. - - -=============================================================================== -shellcheck *ale-sh-shellcheck* - -g:ale_sh_shellcheck_executable *g:ale_sh_shellcheck_executable* - *b:ale_sh_shellcheck_executable* - Type: |String| - Default: `'shellcheck'` - - This variable sets executable used for shellcheck. - - -g:ale_sh_shellcheck_options *g:ale_sh_shellcheck_options* - *b:ale_sh_shellcheck_options* - Type: |String| - Default: `''` - - With this variable we are able to pass extra arguments for shellcheck - for shellcheck invocation. - - For example, if we want shellcheck to follow external sources (`see SC1091`) - we can set the variable as such: -> - let g:ale_sh_shellcheck_options = '-x' -< - - -g:ale_sh_shellcheck_change_directory *g:ale_sh_shellcheck_change_directory* - *b:ale_sh_shellcheck_change_directory* - Type: |Number| - Default: `1` - - If set to `1`, ALE will switch to the directory the shell file being - checked with `shellcheck` is in before checking it. This helps `shellcheck` - determine the path to sourced files more easily. This option can be turned - off if you want to control the directory `shellcheck` is executed from - yourself. - - -g:ale_sh_shellcheck_dialect *g:ale_sh_shellcheck_dialect* - *b:ale_sh_shellcheck_dialect* - Type: |String| - Default: `'auto'` - - This variable specifies the shellcheck dialect (`-s` option). The value - `'auto'` causes ALE to detect the dialect automatically, based on the shebang - line (if present) or the value of `b:is_bash`, `b:is_sh`, or `b:is_kornshell` - (set and used by |sh.vim|). - - -g:ale_sh_shellcheck_exclusions *g:ale_sh_shellcheck_exclusions* - *b:ale_sh_shellcheck_exclusions* - Type: |String| - Default: `''` - - Set this variable to exclude test(s) for shellcheck (-e/--exclude option). - To exclude more than one option, separate them with commas. - - For example, to ignore some warnings that aren't applicable to files that - will be sourced by other scripts, use the buffer-local variant: -> - autocmd BufEnter PKGBUILD,.env - \ let b:ale_sh_shellcheck_exclusions = 'SC2034,SC2154,SC2164' -< - -=============================================================================== -shfmt *ale-sh-shfmt* - -g:ale_sh_shfmt_options *g:ale_sh_shfmt_options* - *b:ale_sh_shfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the shfmt fixer. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-sml.txt b/dotfiles/.vim/plugged/ale/doc/ale-sml.txt deleted file mode 100644 index cc8d6794..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-sml.txt +++ /dev/null @@ -1,36 +0,0 @@ -=============================================================================== -ALE SML Integration *ale-sml-options* - -=============================================================================== -smlnj *ale-sml-smlnj* - *ale-sml-smlnj-cm* - -There are two SML/NJ powered checkers: - -- one using Compilation Manager that works on whole projects, but requires you - to save before errors show up -- one using the SML/NJ REPL that works as you change the text, but might fail - if your project can only be built with CM. - -We dynamically select which one to use based whether we find a `*.cm` file at -or above the directory of the file being checked. Only one checker (`smlnj`, -`smlnj-cm`) will be enabled at a time. - -------------------------------------------------------------------------------- - -g:ale_sml_smlnj_cm_file *g:ale_sml_smlnj_cm_file* - *b:ale_sml_smlnj_cm_file* - Type: |String| - Default: `'*.cm'` - - By default, ALE will look for a `*.cm` file in your current directory, - searching upwards. It stops when it finds at least one `*.cm` file (taking - the first file if there are more than one). - - Change this option (in the buffer or global scope) to control how ALE finds - CM files. For example, to always search for a CM file named `sandbox.cm`: -> - let g:ale_sml_smlnj_cm_file = 'sandbox.cm' - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-solidity.txt b/dotfiles/.vim/plugged/ale/doc/ale-solidity.txt deleted file mode 100644 index c4d2f02f..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-solidity.txt +++ /dev/null @@ -1,41 +0,0 @@ -=============================================================================== -ALE Solidity Integration *ale-solidity-options* - - -=============================================================================== -solc *ale-solidity-solc* - -g:ale_solidity_solc_executable *g:ale_solidity_solc_executable* - *b:ale_solidity_solc_executable* - Type: |String| - Default: `'solc'` - - Override the invoked solc binary. For truffle/hardhat binaries. - -g:ale_solidity_solc_options *g:ale_solidity_solc_options* - *b:ale_solidity_solc_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to solc. - - -=============================================================================== -solhint *ale-solidity-solhint* - - Solhint should work out-of-the-box. You can further configure it using a - `.solihint.json` file. See https://github.com/protofire/solhint for more - information. - - -=============================================================================== -solium *ale-solidity-solium* - - Use of Solium linter for Solidity source code requires a .soliumrc.json - file in project root. This file can be generated by running `solium --init`. - See the corresponding solium usage for detailed instructions - (https://github.com/duaraghav8/Solium#usage). - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-spec.txt b/dotfiles/.vim/plugged/ale/doc/ale-spec.txt deleted file mode 100644 index 3da950c8..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-spec.txt +++ /dev/null @@ -1,43 +0,0 @@ -=============================================================================== -ALE Spec Integration *ale-spec-options* - *ale-integration-spec* - -=============================================================================== -Integration Information - - The rpmlint linter is disabled by default, because running rpmlint can - result in the execution of code embedded in the spec file and rpmlint makes - no distinction between checks which are safe to run on untrusted files and - those which are not. - - Currently linters must be enabled globally. The rpmlint linter can be - enabled with: -> - let g:ale_linters = {'spec': ['rpmlint']} -< - -=============================================================================== -rpmlint *ale-spec-rpmlint* - -g:ale_spec_rpmlint_executable *g:ale_spec_rpmlint_executable* - *b:ale_spec_rpmlint_executable* - Type: |String| - Default: `'rpmlint'` - - This variable sets executable used for rpmlint. - - -g:ale_spec_rpmlint_options *g:ale_spec_rpmlint_options* - *b:ale_spec_rpmlint_options* - Type: |String| - Default: `''` - - Set this to pass extra arguments to rpmlint. - - For example, to instruct rpmlint to use a specific configuration file: -> - let g:ale_spec_rpmlint_options = '-f custom.cf' -< - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-sql.txt b/dotfiles/.vim/plugged/ale/doc/ale-sql.txt deleted file mode 100644 index 80929264..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-sql.txt +++ /dev/null @@ -1,68 +0,0 @@ -=============================================================================== -ALE SQL Integration *ale-sql-options* - - -=============================================================================== -dprint *ale-sql-dprint* - -See |ale-dprint-options| -and https://github.com/dprint/dprint-plugin-sql/releases - - -=============================================================================== -pgformatter *ale-sql-pgformatter* - -g:ale_sql_pgformatter_executable *g:ale_sql_pgformatter_executable* - *b:ale_sql_pgformatter_executable* - Type: |String| - Default: `'pg_format'` - - This variable sets executable used for pgformatter. - -g:ale_sql_pgformatter_options *g:ale_sql_pgformatter_options* - *b:ale_sql_pgformatter_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the pgformatter fixer. - - -=============================================================================== -sqlfmt *ale-sql-sqlfmt* - -g:ale_sql_sqlfmt_executable *g:ale_sql_sqlfmt_executable* - *b:ale_sql_sqlfmt_executable* - Type: |String| - Default: `'sqlfmt'` - - This variable sets executable used for sqlfmt. - -g:ale_sql_sqlfmt_options *g:ale_sql_sqlfmt_options* - *b:ale_sql_sqlfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the sqlfmt fixer. - At this time only the -u flag is available to format with upper-case. - - -=============================================================================== -sqlformat *ale-sql-sqlformat* - -g:ale_sql_sqlformat_executable *g:ale_sql_sqlformat_executable* - *b:ale_sql_sqlformat_executable* - Type: |String| - Default: `'sqlformat'` - - This variable sets executable used for sqlformat. - -g:ale_sql_sqlformat_options *g:ale_sql_sqlformat_options* - *b:ale_sql_sqlformat_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the sqlformat fixer. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-stylus.txt b/dotfiles/.vim/plugged/ale/doc/ale-stylus.txt deleted file mode 100644 index 3e6ba906..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-stylus.txt +++ /dev/null @@ -1,33 +0,0 @@ -=============================================================================== -ALE Stylus Integration *ale-stylus-options* - - -=============================================================================== -stylelint *ale-stylus-stylelint* - -g:ale_stylus_stylelint_executable *g:ale_stylus_stylelint_executable* - *b:ale_stylus_stylelint_executable* - Type: |String| - Default: `'stylelint'` - - See |ale-integrations-local-executables| - - -g:ale_stylus_stylelint_options *g:ale_stylus_stylelint_options* - *b:ale_stylus_stylelint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to stylelint. - - -g:ale_stylus_stylelint_use_global *g:ale_stylus_stylelint_use_global* - *b:ale_stylus_stylelint_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-sugarss.txt b/dotfiles/.vim/plugged/ale/doc/ale-sugarss.txt deleted file mode 100644 index 8e991e54..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-sugarss.txt +++ /dev/null @@ -1,31 +0,0 @@ -=============================================================================== -ALE SugarSS Integration *ale-sugarss-options* - - -=============================================================================== -stylelint *ale-sugarss-stylelint* - -g:ale_sugarss_stylelint_executable *g:ale_sugarss_stylelint_executable* - *b:ale_sugarss_stylelint_executable* - Type: |String| - Default: `'stylelint'` - - See |ale-integrations-local-executables| - -g:ale_sugarss_stylelint_options *g:ale_sugarss_stylelint_options* - *b:ale_sugarss_stylelint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to stylelint. - -g:ale_sugarss_stylelint_use_global *g:ale_sugarss_stylelint_use_global* - *b:ale_sugarss_stylelint_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-supported-languages-and-tools.txt b/dotfiles/.vim/plugged/ale/doc/ale-supported-languages-and-tools.txt deleted file mode 100644 index 476b57f6..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-supported-languages-and-tools.txt +++ /dev/null @@ -1,688 +0,0 @@ -*ale-supported-languages-and-tools.txt* For Vim version 8.0. -*ale-supported-list* - -ALE Supported Languages and Tools - -=============================================================================== - -The following languages and tools are supported by ALE. - -Notes: - -`^` No linters for text or Vim help filetypes are enabled by default. -`!!` These linters check only files on disk. See |ale-lint-file-linters| - -* Ada - * `ada_language_server` - * `cspell` - * `gcc` - * `gnatpp` -* Ansible - * `ansible-lint`!! -* API Blueprint - * `drafter` -* APKBUILD - * `apkbuild-lint` - * `secfixes-check` -* AsciiDoc - * `alex` - * `cspell` - * `languagetool`!! - * `proselint` - * `redpen` - * `textlint` - * `vale` - * `write-good` -* ASM - * `gcc` -* AVRA - * `avra` -* Awk - * `gawk` -* Bash - * `bashate` - * `cspell` - * `language-server` - * `shell` (-n flag) - * `shellcheck` - * `shfmt` -* Bats - * `shellcheck` -* Bazel - * `buildifier` -* BibTeX - * `bibclean` -* Bicep - * `bicep` -* BitBake - * `oelint-adv` -* Bourne Shell - * `shell` (-n flag) - * `shellcheck` - * `shfmt` -* C - * `astyle` - * `ccls` - * `clang` (`cc`) - * `clang-format` - * `clangd` - * `clangtidy`!! - * `cppcheck` - * `cpplint`!! - * `cquery` - * `cspell` - * `flawfinder` - * `gcc` (`cc`) - * `uncrustify` -* C# - * `csc`!! - * `cspell` - * `dotnet-format` - * `mcs` - * `mcsc`!! - * `uncrustify` -* C++ (filetype cpp) - * `astyle` - * `ccls` - * `clang` (`cc`) - * `clang-format` - * `clangcheck`!! - * `clangd` - * `clangtidy`!! - * `clazy`!! - * `cppcheck` - * `cpplint`!! - * `cquery` - * `cspell` - * `flawfinder` - * `gcc` (`cc`) - * `uncrustify` -* Cairo - * `starknet` -* Chef - * `cookstyle` - * `foodcritic`!! -* Clojure - * `clj-kondo` - * `joker` -* CloudFormation - * `cfn-python-lint` -* CMake - * `cmake-format` - * `cmake-lint` - * `cmakelint` -* CoffeeScript - * `coffee` - * `coffeelint` -* Crystal - * `ameba`!! - * `crystal`!! -* CSS - * `VSCode CSS language server` - * `cspell` - * `css-beautify` - * `csslint` - * `fecs` - * `prettier` - * `stylelint` -* Cucumber - * `cucumber` -* CUDA - * `clangd` - * `nvcc`!! -* Cypher - * `cypher-lint` -* Cython (pyrex filetype) - * `cython` -* D - * `dfmt` - * `dls` - * `dmd` - * `uncrustify` -* Dafny - * `dafny`!! -* Dart - * `analysis_server` - * `dart-analyze`!! - * `dart-format`!! - * `dartfmt`!! - * `language_server` -* desktop - * `desktop-file-validate` -* Dhall - * `dhall-format` - * `dhall-freeze` - * `dhall-lint` -* Dockerfile - * `dockerfile_lint` - * `dprint` - * `hadolint` -* Elixir - * `credo` - * `cspell` - * `dialyxir` - * `dogma`!! - * `elixir-ls` - * `mix`!! -* Elm - * `elm-format` - * `elm-ls` - * `elm-make` -* Erb - * `erb` - * `erblint` - * `erubi` - * `erubis` - * `ruumba` -* Erlang - * `SyntaxErl` - * `dialyzer`!! - * `elvis`!! - * `erlc` - * `erlfmt` -* Fish - * `fish` (-n flag) - * `fish_indent` -* Fortran - * `gcc` - * `language_server` -* Fountain - * `proselint` -* FusionScript - * `fusion-lint` -* Git Commit Messages - * `gitlint` -* GLSL - * `glslang` - * `glslls` -* Go - * `bingo` - * `cspell` - * `go build`!! - * `go mod`!! - * `go vet`!! - * `gofmt` - * `gofumpt` - * `goimports` - * `golangci-lint`!! - * `golangserver` - * `golines` - * `golint` - * `gometalinter`!! - * `gopls` - * `gosimple`!! - * `gotype`!! - * `revive`!! - * `staticcheck`!! -* GraphQL - * `eslint` - * `gqlint` - * `prettier` -* Hack - * `hack` - * `hackfmt` - * `hhast` -* Haml - * `haml-lint` -* Handlebars - * `ember-template-lint` -* Haskell - * `brittany` - * `cabal-ghc` - * `cspell` - * `floskell` - * `ghc` - * `ghc-mod` - * `hdevtools` - * `hfmt` - * `hie` - * `hindent` - * `hlint` - * `hls` - * `ormolu` - * `stack-build`!! - * `stack-ghc` - * `stylish-haskell` -* HCL - * `packer-fmt` - * `terraform-fmt` -* HTML - * `VSCode HTML language server` - * `alex` - * `angular` - * `cspell` - * `fecs` - * `html-beautify` - * `htmlhint` - * `prettier` - * `proselint` - * `tidy` - * `write-good` -* Idris - * `idris` -* Ink - * `ink-language-server` -* Inko - * `inko` !! -* ISPC - * `ispc`!! -* Java - * `PMD` - * `checkstyle`!! - * `cspell` - * `eclipselsp` - * `google-java-format` - * `javac` - * `javalsp` - * `uncrustify` -* JavaScript - * `cspell` - * `deno` - * `dprint` - * `eslint` - * `fecs` - * `flow` - * `jscs` - * `jshint` - * `prettier` - * `prettier-eslint` - * `prettier-standard` - * `standard` - * `tsserver` - * `xo` -* JSON - * `VSCode JSON language server` - * `cspell` - * `dprint` - * `eslint` - * `fixjson` - * `jq` - * `jsonlint` - * `prettier` - * `spectral` -* JSON5 - * `eslint` -* JSONC - * `eslint` -* Jsonnet - * `jsonnet-lint` - * `jsonnetfmt` -* Julia - * `languageserver` -* Kotlin - * `kotlinc`!! - * `ktlint` - * `languageserver` -* LaTeX (tex) - * `alex` - * `chktex` - * `cspell` - * `lacheck` - * `proselint` - * `redpen` - * `texlab` - * `textlint` - * `vale` - * `write-good` -* Less - * `lessc` - * `prettier` - * `stylelint` -* LLVM - * `llc` -* Lua - * `cspell` - * `lua-format` - * `luac` - * `luacheck` - * `luafmt` - * `selene` - * `stylua` -* Mail - * `alex` - * `languagetool`!! - * `proselint` - * `vale` -* Make - * `checkmake` -* Markdown - * `alex` - * `cspell` - * `languagetool`!! - * `markdownlint`!! - * `mdl` - * `pandoc` - * `prettier` - * `proselint` - * `redpen` - * `remark-lint` - * `textlint` - * `vale` - * `write-good` -* MATLAB - * `mlint` -* Mercury - * `mmc`!! -* NASM - * `nasm`!! -* Nim - * `nim check`!! - * `nimlsp` - * `nimpretty` -* nix - * `nix-instantiate` - * `nixfmt` - * `nixpkgs-fmt` - * `rnix-lsp` - * `statix` -* nroff - * `alex` - * `proselint` - * `write-good` -* Objective-C - * `ccls` - * `clang` - * `clangd` - * `uncrustify` -* Objective-C++ - * `clang` - * `clangd` - * `uncrustify` -* OCaml - * `dune` - * `merlin` (see |ale-ocaml-merlin|) - * `ocamlformat` - * `ocamllsp` - * `ocp-indent` - * `ols` -* OpenApi - * `ibm_validator` - * `prettier` - * `yamllint` -* OpenSCAD - * `SCA2D` -* Packer - * `packer-fmt-fixer` -* Pascal - * `ptop` -* Pawn - * `uncrustify` -* Perl - * `perl -c` - * `perl-critic` - * `perltidy` -* Perl6 - * `perl6 -c` -* PHP - * `cspell` - * `intelephense` - * `langserver` - * `phan` - * `php -l` - * `php-cs-fixer` - * `phpactor` - * `phpcbf` - * `phpcs` - * `phpmd` - * `phpstan` - * `pint` - * `psalm`!! - * `tlint` -* PO - * `alex` - * `msgfmt` - * `proselint` - * `write-good` -* Pod - * `alex` - * `proselint` - * `write-good` -* Pony - * `ponyc` -* PowerShell - * `cspell` - * `powershell` - * `psscriptanalyzer` -* Prolog - * `swipl` -* proto - * `buf-format`!! - * `buf-lint`!! - * `protoc-gen-lint`!! - * `protolint`!! -* Pug - * `pug-lint` -* Puppet - * `languageserver` - * `puppet` - * `puppet-lint` -* PureScript - * `purescript-language-server` - * `purs-tidy` - * `purty` -* Python - * `autoflake`!! - * `autoimport` - * `autopep8` - * `bandit` - * `black` - * `cspell` - * `flake8` - * `flakehell` - * `isort` - * `mypy` - * `prospector`!! - * `pycodestyle` - * `pydocstyle` - * `pyflakes` - * `pyflyby` - * `pylama`!! - * `pylint`!! - * `pylsp` - * `pyre` - * `pyright` - * `reorder-python-imports` - * `unimport` - * `vulture`!! - * `yapf` -* QML - * `qmlfmt` - * `qmllint` -* R - * `languageserver` - * `lintr` - * `styler` -* Racket - * `racket-langserver` - * `raco` -* Re:VIEW - * `redpen` -* ReasonML - * `merlin` - * `ols` - * `reason-language-server` - * `refmt` -* Rego - * `cspell` - * `opacheck` - * `opafmt` -* reStructuredText - * `alex` - * `cspell` - * `proselint` - * `redpen` - * `rstcheck` - * `textlint` - * `vale` - * `write-good` -* Robot - * `rflint` -* RPM spec - * `rpmlint` -* Ruby - * `brakeman`!! - * `cspell` - * `debride` - * `prettier` - * `rails_best_practices`!! - * `reek` - * `rubocop` - * `ruby` - * `rufo` - * `solargraph` - * `sorbet` - * `standardrb` - * `syntax_tree` -* Rust - * `cargo`!! - * `cspell` - * `rls` - * `rust-analyzer` - * `rustc` (see |ale-integration-rust|) - * `rustfmt` -* Salt - * `salt-lint` -* Sass - * `sass-lint` - * `stylelint` -* Scala - * `cspell` - * `fsc` - * `metals` - * `sbtserver` - * `scalac` - * `scalafmt` - * `scalastyle` -* SCSS - * `prettier` - * `sass-lint` - * `scss-lint` - * `stylelint` -* Slim - * `slim-lint` -* SML - * `smlnj` -* Solidity - * `solc` - * `solhint` - * `solium` -* SQL - * `dprint` - * `pgformatter` - * `sql-lint` - * `sqlfmt` - * `sqlformat` - * `sqlint` -* Stylus - * `stylelint` -* SugarSS - * `stylelint` -* Svelte - * `prettier` - * `svelteserver` -* Swift - * Apple `swift-format` - * `cspell` - * `sourcekit-lsp` - * `swiftformat` - * `swiftlint` -* systemd - * `systemd-analyze`!! -* Tcl - * `nagelfar`!! -* Terraform - * `checkov` - * `terraform` - * `terraform-fmt-fixer` - * `terraform-ls` - * `terraform-lsp` - * `tflint` - * `tfsec` -* Texinfo - * `alex` - * `cspell` - * `proselint` - * `write-good` -* Text^ - * `alex` - * `cspell` - * `languagetool`!! - * `proselint` - * `redpen` - * `textlint` - * `vale` - * `write-good` -* Thrift - * `thrift` - * `thriftcheck` -* TOML - * `dprint` -* TypeScript - * `cspell` - * `deno` - * `dprint` - * `eslint` - * `fecs` - * `prettier` - * `standard` - * `tslint` - * `tsserver` - * `typecheck` -* V - * `v`!! - * `vfmt` -* VALA - * `uncrustify` - * `vala_lint`!! -* Verilog - * `hdl-checker` - * `iverilog` - * `verilator` - * `vlog` - * `xvlog` - * `yosys`!! -* VHDL - * `ghdl` - * `vcom` - * `xvhdl` -* Vim - * `vimls` - * `vint` -* Vim help^ - * `alex` - * `proselint` - * `write-good` -* Vue - * `cspell` - * `prettier` - * `vls` - * `volar` -* WGSL - * `naga` -* XHTML - * `alex` - * `cspell` - * `proselint` - * `write-good` -* XML - * `xmllint` -* YAML - * `actionlint` - * `circleci`!! - * `gitlablint` - * `prettier` - * `spectral` - * `swaglint` - * `yaml-language-server` - * `yamlfix` - * `yamllint` -* YANG - * `yang-lsp` -* Zeek - * `zeek`!! -* Zig - * `zigfmt` - * `zls` - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-svelte.txt b/dotfiles/.vim/plugged/ale/doc/ale-svelte.txt deleted file mode 100644 index 92f109f7..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-svelte.txt +++ /dev/null @@ -1,31 +0,0 @@ -=============================================================================== -ALE Svelte Integration *ale-svelte-options* - - -=============================================================================== -prettier *ale-svelte-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -svelteserver *ale-svelte-svelteserver* - -g:ale_svelte_svelteserver_executable *g:ale_svelte_svelteserver_executable* - *b:ale_svelte_svelteserver_executable* - Type: |String| - Default: `'svelteserver'` - - See |ale-integrations-local-executables| - - -g:ale_svelte_svelteserver_use_global *g:ale_svelte_svelteserver_use_global* - *b:ale_svelte_svelteserver_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-swift.txt b/dotfiles/.vim/plugged/ale/doc/ale-swift.txt deleted file mode 100644 index a443eab8..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-swift.txt +++ /dev/null @@ -1,67 +0,0 @@ -=============================================================================== -ALE Swift Integration *ale-swift-options* - - -=============================================================================== -apple-swift-format *ale-swift-apple-swift-format* - -There are 3 options to enable linting and fixing with Apple's swift-format: - -1. Install the local executable in your path, as described here: - https://github.com/apple/swift-format -2. Install the executable via your OS package manager, for instance via - Homebrew with `brew install swift-format` -3. Your Swift project has a dependency on the swift-format package, so it can - be run with `swift run swift-format lint ...` In this case, you need to set - a variable, see |g:ale_swift_appleswiftformat_use_swiftpm|. - -Additionally, ALE tries to locate and use the nearest existing `.swift-format` -configuration file. - - -g:ale_swift_appleswiftformat_executable - *g:ale_swift_appleswiftformat_executable* - *b:ale_swift_appleswiftformat_executable* - Type: |String| - Default: `'swift-format'` - - This variable can be modified to change the executable path for - `swift-format`. - - -g:ale_swift_appleswiftformat_use_swiftpm - *g:ale_swift_appleswiftformat_use_swiftpm* - *b:ale_swift_appleswiftformat_use_swiftpm* - Type: |Number| - Default: `0` - - When set to `1`, this option will cause ALE to use - `swift run swift-format lint ...` instead of the global executable. Use this - option if your Swift project has a dependency on the swift-format package. - - See |ale-integrations-local-executables| - - -=============================================================================== -cspell *ale-swift-cspell* - -See |ale-cspell-options| - - -=============================================================================== -sourcekitlsp *ale-swift-sourcekitlsp* - -To enable the SourceKit-LSP you need to install and build the executable as -described here: https://github.com/apple/sourcekit-lsp#building-sourcekit-lsp - - -g:ale_sourcekit_lsp_executable *g:ale_sourcekit_lsp_executable* - *b:ale_sourcekit_lsp_executable* - Type: |String| - Default: `'sourcekit-lsp'` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-systemd.txt b/dotfiles/.vim/plugged/ale/doc/ale-systemd.txt deleted file mode 100644 index 13c7037f..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-systemd.txt +++ /dev/null @@ -1,14 +0,0 @@ -=============================================================================== -ALE systemd Integration *ale-systemd-options* - - -=============================================================================== -systemd-analyze *ale-systemd-analyze* - -ALE supports checking user systemd units with `systemd-analyze --user verify` -Checks will only work with user unit files in their proper location. There -aren't any options, and checks can only run after saving the file. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-tcl.txt b/dotfiles/.vim/plugged/ale/doc/ale-tcl.txt deleted file mode 100644 index 497c9fd4..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-tcl.txt +++ /dev/null @@ -1,25 +0,0 @@ -=============================================================================== -ALE Tcl Integration *ale-tcl-options* - - -=============================================================================== -nagelfar *ale-tcl-nagelfar* - -g:ale_tcl_nagelfar_executable *g:ale_tcl_nagelfar_executable* - *b:ale_tcl_nagelfar_executable* - Type: |String| - Default: `'nagelfar.tcl'` - - This variable can be changed to change the path to nagelfar. - - -g:ale_tcl_nagelfar_options *g:ale_tcl_nagelfar_options* - *b:ale_tcl_nagelfar_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to nagelfar. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-terraform.txt b/dotfiles/.vim/plugged/ale/doc/ale-terraform.txt deleted file mode 100644 index 91a7dd16..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-terraform.txt +++ /dev/null @@ -1,138 +0,0 @@ -=============================================================================== -ALE Terraform Integration *ale-terraform-options* - - -=============================================================================== -checkov *ale-terraform-checkov* - -g:ale_terraform_checkov_executable *g:ale_terraform_checkov_executable* - *b:ale_terraform_checkov_executable* - - Type: |String| - Default: `'checkov'` - - This variable can be changed to use a different executable for checkov. - - -g:ale_terraform_checkov_options *g:ale_terraform_checkov_options* - *b:ale_terraform_checkov_options* - Type: |String| - Default: `''` - - This variable can be changed to set additional options for checkov. - -=============================================================================== -terraform-fmt-fixer *ale-terraform-fmt-fixer* - -g:ale_terraform_fmt_executable *g:ale_terraform_fmt_executable* - *b:ale_terraform_fmt_executable* - - Type: |String| - Default: `'terraform'` - - This variable can be changed to use a different executable for terraform. - - -g:ale_terraform_fmt_options *g:ale_terraform_fmt_options* - *b:ale_terraform_fmt_options* - Type: |String| - Default: `''` - - -=============================================================================== -terraform *ale-terraform-terraform* - -g:ale_terraform_terraform_executable *g:ale_terraform_terraform_executable* - *b:ale_terraform_terraform_executable* - - Type: |String| - Default: `'terraform'` - - This variable can be changed to use a different executable for terraform. - - -=============================================================================== -terraform-ls *ale-terraform-terraform-ls* - -Official terraform language server. More stable than *terraform-lsp* but -currently has less features. - -g:ale_terraform_ls_executable *g:ale_terraform_ls_executable* - *b:ale_terraform_ls_executable* - Type: |String| - Default: `'terraform-ls'` - - This variable can be changed to use a different executable for terraform-ls. - - -g:ale_terraform_ls_options *g:ale_terraform_ls_options* - *b:ale_terraform_ls_options* - Type: |String| - Default: `''` - - This variable can be changed to pass custom CLI flags to terraform-ls. - - -=============================================================================== -terraform-lsp *ale-terraform-terraform-lsp* - -g:ale_terraform_langserver_executable *g:ale_terraform_langserver_executable* - *b:ale_terraform_langserver_executable* - Type: |String| - Default: `'terraform-lsp'` - - This variable can be changed to use a different executable for terraform-lsp. - - -g:ale_terraform_langserver_options *g:ale_terraform_langserver_options* - *b:ale_terraform_langserver_options* - Type: |String| - Default: `''` - - This variable can be changed to pass custom CLI flags to terraform-lsp. - - -=============================================================================== -tflint *ale-terraform-tflint* - -g:ale_terraform_tflint_executable *g:ale_terraform_tflint_executable* - *b:ale_terraform_tflint_executable* - - Type: |String| - Default: `'tflint'` - - This variable can be changed to use a different executable for tflint. - - -g:ale_terraform_tflint_options *g:ale_terraform_tflint_options* - *b:ale_terraform_tflint_options* - Type: |String| - Default: `'-f json'` - - This variable can be changed to pass different options to tflint. Ale does - expect json output from tflint, so if you change this, you'll probably want - to include '-f json' in your new value. - - -=============================================================================== -tfsec *ale-terraform-tfsec* - -g:ale_terraform_tfsec_executable *g:ale_terraform_tfsec_executable* - *b:ale_terraform_tfsec_executable* - - Type: |String| - Default: `'tfsec'` - - This variable can be changed to use a different executable for tfsec. - -g:ale_terraform_tfsec_options *g:ale_terraform_tfsec_options* - *b:ale_terraform_tfsec_options* - - Type: |String| - Default: `''` - - This variable can be changed to pass custom CLI flags to tfsec. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/dotfiles/.vim/plugged/ale/doc/ale-tex.txt b/dotfiles/.vim/plugged/ale/doc/ale-tex.txt deleted file mode 100644 index 147aacc4..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-tex.txt +++ /dev/null @@ -1,95 +0,0 @@ -=============================================================================== -ALE TeX Integration *ale-tex-options* - - -=============================================================================== -chktex *ale-tex-chktex* - -g:ale_tex_chktex_executable *g:ale_tex_chktex_executable* - *b:ale_tex_chktex_executable* - Type: |String| - Default: `'chktex'` - - This variable can be changed to change the path to chktex. - - -g:ale_tex_chktex_options *g:ale_tex_chktex_options* - *b:ale_tex_chktex_options* - Type: |String| - Default: `'-I'` - - This variable can be changed to modify flags given to chktex. - - -=============================================================================== -cspell *ale-tex-cspell* - -See |ale-cspell-options| - - -=============================================================================== -lacheck *ale-tex-lacheck* - -g:ale_lacheck_executable *g:ale_lacheck_executable* - *b:ale_lacheck_executable* - Type: |String| - Default: '`lacheck`' - - This variable can be changed to change the path to lacheck. - - -=============================================================================== -latexindent *ale-tex-latexindent* - -g:ale_tex_latexindent_executable *g:ale_tex_latexindent_executable* - *b:ale_tex_latexindent_executable* - Type: |String| - Default: `'latexindent'` - - This variable can be changed to change the path to latexindent. - - -g:ale_tex_latexindent_options *g:ale_tex_latexindent_options* - *b:ale_tex_latexindent_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to latexindent. - - -=============================================================================== -texlab *ale-tex-texlab* - -g:ale_tex_texlab_executable *g:ale_tex_texlab_executable* - *b:ale_tex_texlab_executable* - Type: |String| - Default: `'texlab'` - - This variable can be changed to change the path to texlab. - - -g:ale_tex_texlab_options *g:ale_tex_texlab_options* - *b:ale_tex_texlab_options* - Type: |String| - Default: `''` - - This variable can be changed to modify flags given to texlab command. - -g:ale_tex_texlab_config *g:ale_tex_texlab_config* - *b:ale_tex_texlab_config* - Type: |Dictionary| - Default: `{}` - - Dictionary containing LSP configuration settings used to initialize texlab - language server. Refer to texlab documentation for possible settings: - - https://github.com/latex-lsp/texlab/blob/master/docs/options.md - - For example to set build onSave initialization setting: - -> - let g:ale_tex_texlab_config = {"build":{"onSave":v:true}} -< - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-texinfo.txt b/dotfiles/.vim/plugged/ale/doc/ale-texinfo.txt deleted file mode 100644 index 53d42b69..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-texinfo.txt +++ /dev/null @@ -1,18 +0,0 @@ -=============================================================================== -ALE Texinfo Integration *ale-texinfo-options* - - -=============================================================================== -cspell *ale-texinfo-cspell* - -See |ale-cspell-options| - - -=============================================================================== -write-good *ale-texinfo-write-good* - -See |ale-write-good-options| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-text.txt b/dotfiles/.vim/plugged/ale/doc/ale-text.txt deleted file mode 100644 index 4e4d0b2e..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-text.txt +++ /dev/null @@ -1,48 +0,0 @@ -=============================================================================== -ALE Text Integration *ale-text-options* - - -============================================================================== -cspell *ale-text-cspell* - -See |ale-cspell-options| - - -=============================================================================== -textlint *ale-text-textlint* - -The options for the textlint linter are global because it does not make -sense to have them specified on a per-language basis. - -g:ale_textlint_executable *g:ale_textlint_executable* - *b:ale_textlint_executable* - Type: |String| - Default: `'textlint'` - - See |ale-integrations-local-executables| - - -g:ale_textlint_options *g:ale_textlint_options* - *b:ale_textlint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to textlint. - - -g:ale_textlint_use_global *g:ale_textlint_use_global* - *b:ale_textlint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -write-good *ale-text-write-good* - -See |ale-write-good-options| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-thrift.txt b/dotfiles/.vim/plugged/ale/doc/ale-thrift.txt deleted file mode 100644 index 810127b4..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-thrift.txt +++ /dev/null @@ -1,65 +0,0 @@ -=============================================================================== -ALE Thrift Integration *ale-thrift-options* - - -=============================================================================== -thrift *ale-thrift-thrift* - -The `thrift` linter works by compiling the buffer's contents and reporting any -errors reported by the parser and the configured code generator(s). - -g:ale_thrift_thrift_executable *g:ale_thrift_thrift_executable* - *b:ale_thrift_thrift_executable* - Type: |String| - Default: `'thrift'` - - See |ale-integrations-local-executables| - - -g:ale_thrift_thrift_generators *g:ale_thrift_thrift_generators* - *b:ale_thrift_thrift_generators* - Type: |List| of |String|s - Default: `['cpp']` - - This list must contain one or more named code generators. Generator options - can be included as part of each string, e.g. `['py:dynamic']`. - - -g:ale_thrift_thrift_includes *g:ale_thrift_thrift_includes* - *b:ale_thrift_thrift_includes* - Type: |List| of |String|s - Default: `['.']` - - This list contains paths that will be searched for thrift `include` - directives. - - -g:ale_thrift_thrift_options *g:ale_thrift_thrift_options* - *b:ale_thrift_thrift_options* - Type: |String| - Default: `'-strict'` - - This variable can be changed to customize the additional command-line - arguments that are passed to the thrift compiler. - -=============================================================================== -thriftcheck *ale-thrift-thriftcheck* - -g:ale_thrift_thriftcheck_executable *g:ale_thrift_thriftcheck_executable* - *b:ale_thrift_thriftcheck_executable* - Type: |String| - Default: `'thriftcheck'` - - See |ale-integrations-local-executables| - - -g:ale_thrift_thriftcheck_options *g:ale_thrift_thriftcheck_options* - *b:ale_thrift_thriftcheck_options* - Type: |String| - Default: `''` - - This variable can be changed to customize the additional command-line - arguments that are passed to thriftcheck. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-toml.txt b/dotfiles/.vim/plugged/ale/doc/ale-toml.txt deleted file mode 100644 index 222a91f4..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-toml.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE TOML Integration *ale-toml-options* - - -=============================================================================== -dprint *ale-toml-dprint* - -See |ale-dprint-options| and https://dprint.dev/plugins/toml - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-typescript.txt b/dotfiles/.vim/plugged/ale/doc/ale-typescript.txt deleted file mode 100644 index 788a7a5c..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-typescript.txt +++ /dev/null @@ -1,223 +0,0 @@ -=============================================================================== -ALE TypeScript Integration *ale-typescript-options* - - -=============================================================================== -cspell *ale-typescript-cspell* - -See |ale-cspell-options| - - -=============================================================================== -deno *ale-typescript-deno* - -Starting from version 1.6.0, Deno comes with its own language server. Earlier -versions are not supported. - -g:ale_deno_executable *g:ale_deno_executable* - *b:ale_deno_executable* - Type: |String| - Default: `'deno'` - - -g:ale_deno_lsp_project_root *g:ale_deno_lsp_project_root* - *b:ale_deno_lsp_project_root* - Type: |String| - Default: `''` - - If this variable is left unset, ALE will try to find the project root by - executing the following steps in the given order: - - 1. Find an ancestor directory containing a tsconfig.json. - 2. Find an ancestory directory containing a .git folder. - 3. Use the directory of the current buffer (if the buffer was opened from - a file). - - -g:ale_deno_unstable *g:ale_deno_unstable* - *b:ale_deno_unstable* - Type: |Number| - Default: `0` - - Enable or disable unstable Deno features and APIs. - - -g:ale_deno_importMap *g:ale_deno_importMap* - *b:ale_deno_importMap* - Type: |String| - Default: `'import_map.json'` - - Specify the import map filename to load url maps in a deno project. - - -=============================================================================== -dprint *ale-typescript-dprint* - -See |ale-dprint-options| and https://dprint.dev/plugins/typescript - - -=============================================================================== -eslint *ale-typescript-eslint* - -Because of how TypeScript compiles code to JavaScript and how interrelated -the two languages are, the `eslint` linter for TypeScript uses the JavaScript -options for `eslint` too. See: |ale-javascript-eslint|. - - -=============================================================================== -prettier *ale-typescript-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -standard *ale-typescript-standard* - -g:ale_typescript_standard_executable *g:ale_typescript_standard_executable* - *b:ale_typescript_standard_executable* - Type: |String| - Default: `'standard'` - - See |ale-integrations-local-executables| - - -g:ale_typescript_standard_options *g:ale_typescript_standard_options* - *b:ale_typescript_standard_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to standard. - - -g:ale_typescript_standard_use_global *g:ale_typescript_standard_use_global* - *b:ale_typescript_standard_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -tslint *ale-typescript-tslint* - -This linter isn't recommended, because TSLint can't be used for checking for -problems while you type. You should probably use the tsserver plugin instead. -tsserver plugins are described here: -https://github.com/Microsoft/TypeScript/wiki/Writing-a-Language-Service-Plugin - -Follow the instructions on the plugin website for installing it: -https://github.com/Microsoft/typescript-tslint-plugin - -Then disable TSLint in vimrc or any other Vim configuration file. > - let g:ale_linters_ignore = {'typescript': ['tslint']} -< - -g:ale_typescript_tslint_executable *g:ale_typescript_tslint_executable* - *b:ale_typescript_tslint_executable* - Type: |String| - Default: `'tslint'` - - See |ale-integrations-local-executables| - - -g:ale_typescript_tslint_config_path *g:ale_typescript_tslint_config_path* - *b:ale_typescript_tslint_config_path* - Type: |String| - Default: `''` - - ALE will first discover the tslint.json path in an ancestor directory. If no - such path exists, this variable will be used instead. - - -g:ale_typescript_tslint_ignore_empty_files - *g:ale_typescript_tslint_ignore_empty_files* - *b:ale_typescript_tslint_ignore_empty_files* - Type: |Number| - Default: `0` - - When set to `1`, ALE will not report any problems for empty files with - TSLint. ALE will still execute TSLint for the files, but ignore any problems - reported. This stops ALE from complaining about newly created files, - and files where lines have been added and then removed. - - -g:ale_typescript_tslint_rules_dir *g:ale_typescript_tslint_rules_dir* - *b:ale_typescript_tslint_rules_dir* - Type: |String| - Default: `''` - - If this variable is set, ALE will use it as the rules directory for tslint. - - -g:ale_typescript_tslint_use_global *g:ale_typescript_tslint_use_global* - *b:ale_typescript_tslint_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -tsserver *ale-typescript-tsserver* - -g:ale_typescript_tsserver_executable *g:ale_typescript_tsserver_executable* - *b:ale_typescript_tsserver_executable* - Type: |String| - Default: `'tsserver'` - - ALE will first discover the tsserver path in an ancestor node_modules - directory. If no such path exists, this variable will be used instead. - - If you wish to use only a globally installed version of tsserver, set - |g:ale_typescript_tsserver_use_global| to `1`. - - -g:ale_typescript_tsserver_config_path *g:ale_typescript_tsserver_config_path* - *b:ale_typescript_tsserver_config_path* - Type: |String| - Default: `''` - - ALE will first discover the tsserver.json path in an ancestor directory. If - no such path exists, this variable will be used instead. - - -g:ale_typescript_tsserver_use_global *g:ale_typescript_tsserver_use_global* - *b:ale_typescript_tsserver_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - This variable controls whether or not ALE will search for a local path for - tsserver first. If this variable is set to `1`, then ALE will always use the - global version of tsserver, in preference to locally installed versions of - tsserver in node_modules. - - -=============================================================================== -xo *ale-typescript-xo* - -g:ale_typescript_xo_executable *g:ale_typescript_xo_executable* - *b:ale_typescript_xo_executable* - Type: |String| - Default: `'xo'` - - See |ale-integrations-local-executables| - - -g:ale_typescript_xo_options *g:ale_typescript_xo_options* - *b:ale_typescript_xo_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to xo. - - -g:ale_typescript_xo_use_global *g:ale_typescript_xo_use_global* - *b:ale_typescript_xo_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-v.txt b/dotfiles/.vim/plugged/ale/doc/ale-v.txt deleted file mode 100644 index 8c641447..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-v.txt +++ /dev/null @@ -1,45 +0,0 @@ -=============================================================================== -ALE V Integration *ale-v-options* - - -=============================================================================== -Integration Information - -`v` is V's build tool. `vfmt` (called as `v fmt` from the same -executable that does the builds) is the autoformatter/fixer. - -g:ale_v_v_executable *g:ale_v_v_executable* - *b:ale_v_v_executable* - - Type: |String| - Default: `'v'` - - The executable that will be run for the `v` linter and the `vfmt` fixer. - - -=============================================================================== -v *ale-v-v* - -g:ale_v_v_options *g:ale_v_v_options* - *b:ale_v_v_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the v linter. - They are injected directly after "v .". - - -=============================================================================== -vfmt *ale-v-vfmt* - -g:ale_v_vfmt_options *g:ale_v_vfmt_options* - *b:ale_v_vfmt_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to the vfmt fixer. - They are injected directly after "v fmt". - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-vala.txt b/dotfiles/.vim/plugged/ale/doc/ale-vala.txt deleted file mode 100644 index d48f68bb..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-vala.txt +++ /dev/null @@ -1,33 +0,0 @@ -=============================================================================== -ALE VALA Integration *ale-vala-options* - - -=============================================================================== -uncrustify *ale-vala-uncrustify* - -See |ale-c-uncrustify| for information about the available options. - - -=============================================================================== -Vala-Lint *ale-vala-vala-lint* - -g:vala_vala_lint_executable *g:vala_vala_lint_executable* - *b:vala_vala_lint_executable* - Type: |String| - Default: `'io.elementary.vala-lint'` - - This variable can be set to specify a Vala-Lint executable file. - - -g:vala_vala_lint_config_filename *g:vala_vala_lint_config_filename* - *b:vala_vala_lint_config_filename* - Type: |String| - Default: `'vala-lint.conf'` - - This variable can be set to specify a Vala-Lint config filename. When a file - with the specified name was not found or this variable was set to empty, - Vala-Lint will be executed without specifying a config filename. - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-verilog.txt b/dotfiles/.vim/plugged/ale/doc/ale-verilog.txt deleted file mode 100644 index 11e988bb..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-verilog.txt +++ /dev/null @@ -1,142 +0,0 @@ -=============================================================================== -ALE Verilog/SystemVerilog Integration *ale-verilog-options* - - -=============================================================================== -ALE can use six different linters for Verilog HDL: - - HDL Checker - Using `hdl_checker --lsp` - - iverilog: - Using `iverilog -t null -Wall` - - verilator - Using `verilator --lint-only -Wall` - - ModelSim/Questa - Using `vlog -quiet -lint` - - Vivado - Using `xvlog` - - Yosys - Using `ysoys -Q -T -p 'read_verilog'` - -By default, both 'verilog' and 'systemverilog' filetypes are checked. - -You can limit 'systemverilog' files to be checked using only 'verilator' by -defining 'g:ale_linters' variable: -> - au FileType systemverilog - \ let g:ale_linters = {'systemverilog' : ['verilator'],} -< - -=============================================================================== -General notes - -Linters/compilers that utilize a "work" directory for analyzing designs- such -as ModelSim and Vivado- can be passed the location of these directories as -part of their respective option strings listed below. This is useful for -holistic analysis of a file (e.g. a design with components, packages, or other -code defined external to the current file as part of a larger project) or -when wanting to simply pass an alternative location for the auto-generated -work directories (such as '/tmp') so as to not muddle the current directory. -Since these type of linters often use this work directory for holding compiled -design data as part of a single build process, they sometimes cannot handle -the frequent, asynchronous application launches when linting while text is -changing. This can happen in the form of hangs or crashes. To help prevent -this when using these linters, it may help to run linting less frequently; for -example, only when a file is saved. - -HDL Checker is an alternative for some of the issues described above. It wraps -around ghdl, Vivado and ModelSim/Questa and, when using the latter, it can -handle mixed language (VHDL, Verilog, SystemVerilog) designs. - -=============================================================================== -hdl-checker *ale-verilog-hdl-checker* - -See |ale-vhdl-hdl-checker| - - -=============================================================================== -iverilog *ale-verilog-iverilog* - - No additional options - - -=============================================================================== -verilator *ale-verilog-verilator* - -g:ale_verilog_verilator_options *g:ale_verilog_verilator_options* - *b:ale_verilog_verilator_options* - Type: |String| - Default: `''` - - This variable can be changed to modify 'verilator' command arguments - - For example `'-sv --default-language "1800-2012"'` if you want to enable - SystemVerilog parsing and select the 2012 version of the language. - - -=============================================================================== -vlog *ale-verilog-vlog* - -g:ale_verilog_vlog_executable *g:ale_verilog_vlog_executable* - *b:ale_verilog_vlog_executable* - Type: |String| - Default: `'vlog'` - - This variable can be changed to the path to the 'vlog' executable. - - -g:ale_verilog_vlog_options *g:ale_verilog_vlog_options* - *b:ale_verilog_vlog_options* - Type: |String| - Default: `'-quiet -lint'` - - This variable can be changed to modify the flags/options passed to 'vlog'. - - -=============================================================================== -xvlog *ale-verilog-xvlog* - -g:ale_verilog_xvlog_executable *g:ale_verilog_xvlog_executable* - *b:ale_verilog_xvlog_executable* - Type: |String| - Default: `'xvlog'` - - This variable can be changed to the path to the 'xvlog' executable. - - -g:ale_verilog_xvlog_options *g:ale_verilog_xvlog_options* - *b:ale_verilog_xvlog_options* - Type: |String| - Default: `''` - - This variable can be changed to modify the flags/options passed to 'xvlog'. - - -=============================================================================== -yosys *ale-verilog-yosys* - -g:ale_verilog_yosys_executable *g:ale_verilog_yosys_executable* - *b:ale_verilog_yosys_executable* - Type: |String| - Default: `'yosys'` - - This variable can be changed to the path to the 'yosys' executable. - - -g:ale_verilog_yosys_options *g:ale_verilog_yosys_options* - *b:ale_verilog_yosys_options* - Type: |String| - Default: `'-Q -T -p ''read_verilog %s'''` - - This variable can be changed to modify the flags/options passed to 'yosys'. - By default, Yosys is an interative program. To obtain linting functionality, - the `'read_verilog'` command is used. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-vhdl.txt b/dotfiles/.vim/plugged/ale/doc/ale-vhdl.txt deleted file mode 100644 index c2870240..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-vhdl.txt +++ /dev/null @@ -1,157 +0,0 @@ -=============================================================================== -ALE VHDL Integration *ale-vhdl-options* - - -=============================================================================== -ALE can use four different linters for VHDL: - - ghdl: - Using `ghdl --std=08` - - ModelSim/Questa - Using `vcom -2008 -quiet -lint` - - Vivado - Using `xvhdl --2008` - - HDL Checker - Using `hdl_checker --lsp` - -=============================================================================== -General notes - -ghdl, ModelSim/Questa and Vivado linters default to VHDL-2008 support. This, -and other options, can be changed with each linter's respective option -variable. - -Linters/compilers that utilize a "work" directory for analyzing designs- such -as ModelSim and Vivado- can be passed the location of these directories as -part of their respective option strings listed below. This is useful for -holistic analysis of a file (e.g. a design with components, packages, or other -code defined external to the current file as part of a larger project) or -when wanting to simply pass an alternative location for the auto-generated -work directories (such as '/tmp') so as to not muddle the current directory. -Since these type of linters often use this work directory for holding compiled -design data as part of a single build process, they sometimes cannot handle -the frequent, asynchronous application launches when linting while text is -changing. This can happen in the form of hangs or crashes. To help prevent -this when using these linters, it may help to run linting less frequently; for -example, only when a file is saved. - -HDL Checker is an alternative for some of the issues described above. It wraps -around ghdl, Vivado and ModelSim/Questa and, when using the latter, it can -handle mixed language (VHDL, Verilog, SystemVerilog) designs. - -=============================================================================== -ghdl *ale-vhdl-ghdl* - -g:ale_vhdl_ghdl_executable *g:ale_vhdl_ghdl_executable* - *b:ale_vhdl_ghdl_executable* - Type: |String| - Default: `'ghdl'` - - This variable can be changed to the path to the 'ghdl' executable. - - -g:ale_vhdl_ghdl_options *g:ale_vhdl_ghdl_options* - *b:ale_vhdl_ghdl_options* - Type: |String| - Default: `'--std=08'` - - This variable can be changed to modify the flags/options passed to 'ghdl'. - - -=============================================================================== -hdl-checker *ale-vhdl-hdl-checker* - -HDL Checker is a wrapper for VHDL/Verilg/SystemVerilog tools that aims to -reduce the boilerplate code needed to set things up. It can automatically -infer libraries for VHDL sources, determine the compilation order and provide -some static checks. - -You can install it using pip: -> - $ pip install hdl-checker - -`hdl-checker` will be run from a detected project root, determined by the -following methods, in order: - -1. Find the first directory containing a configuration file (see - |g:ale_hdl_checker_config_file|) -2. If no configuration file can be found, find the first directory containing - a folder named `'.git' -3. If no such folder is found, use the directory of the current buffer - - -g:ale_hdl_checker_executable - *g:ale_hdl_checker_executable* - *b:ale_hdl_checker_executable* - Type: |String| - Default: `'hdl_checker'` - - This variable can be changed to the path to the 'hdl_checker' executable. - - -g:ale_hdl_checker_options *g:ale_hdl_checker_options* - *b:ale_hdl_checker_options* - Type: |String| - Default: `''` - - This variable can be changed to modify the flags/options passed to the - 'hdl_checker' server startup command. - - -g:ale_hdl_checker_config_file *g:ale_hdl_checker_config_file* - *b:ale_hdl_checker_config_file* - Type: |String| - Default: `'.hdl_checker.config'` (Unix), - `'_hdl_checker.config'` (Windows) - - This variable can be changed to modify the config file HDL Checker will try - to look for. It will also affect how the project's root directory is - determined (see |ale-vhdl-hdl-checker|). - - More info on the configuration file format can be found at: - https://github.com/suoto/hdl_checker/wiki/Setting-up-a-project - - -=============================================================================== -vcom *ale-vhdl-vcom* - -g:ale_vhdl_vcom_executable *g:ale_vhdl_vcom_executable* - *b:ale_vhdl_vcom_executable* - Type: |String| - Default: `'vcom'` - - This variable can be changed to the path to the 'vcom' executable. - - -g:ale_vhdl_vcom_options *g:ale_vhdl_vcom_options* - *b:ale_vhdl_vcom_options* - Type: |String| - Default: `'-2008 -quiet -lint'` - - This variable can be changed to modify the flags/options passed to 'vcom'. - - -=============================================================================== -xvhdl *ale-vhdl-xvhdl* - -g:ale_vhdl_xvhdl_executable *g:ale_vhdl_xvhdl_executable* - *b:ale_vhdl_xvhdl_executable* - Type: |String| - Default: `'xvhdl'` - - This variable can be changed to the path to the 'xvhdl' executable. - - -g:ale_vhdl_xvhdl_options *g:ale_vhdl_xvhdl_options* - *b:ale_vhdl_xvhdl_options* - Type: |String| - Default: `'--2008'` - - This variable can be changed to modify the flags/options passed to 'xvhdl'. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-vim-help.txt b/dotfiles/.vim/plugged/ale/doc/ale-vim-help.txt deleted file mode 100644 index 3cbe20d5..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-vim-help.txt +++ /dev/null @@ -1,12 +0,0 @@ -=============================================================================== -ALE Vim help Integration *ale-vim-help-options* - - -=============================================================================== -write-good *ale-vim-help-write-good* - -See |ale-write-good-options| - - -=============================================================================== -vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-vim.txt b/dotfiles/.vim/plugged/ale/doc/ale-vim.txt deleted file mode 100644 index f85b43eb..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-vim.txt +++ /dev/null @@ -1,82 +0,0 @@ -=============================================================================== -ALE Vim Integration *ale-vim-options* - - -=============================================================================== -vimls *ale-vim-vimls* - - The `vim-language-server` is the engine that powers VimL editor support - using the Language Server Protocol. See the installation instructions: - https://github.com/iamcco/vim-language-server#install - -g:ale_vim_vimls_executable *g:ale_vim_vimls_executable* - *b:ale_vim_vimls_executable* - Type: |String| - Default: `'vim-language-server'` - - This option can be set to change the executable path for vimls. - - -g:ale_vim_vimls_config *g:ale_vim_vimls_config* - *b:ale_vim_vimls_config* - Type: |Dictionary| - Default: `{}` - - Dictionary containing configuration settings that will be passed to the - language server. For example: > - { - \ 'vim': { - \ 'iskeyword': '@,48-57,_,192-255,-#', - \ 'vimruntime': '', - \ 'runtimepath': '', - \ 'diagnostic': { - \ 'enable': v:true - \ }, - \ 'indexes': { - \ 'runtimepath': v:true, - \ 'gap': 100, - \ 'count': 3, - \ 'projectRootPatterns' : ['.git', 'autoload', 'plugin'] - \ }, - \ 'suggest': { - \ 'fromVimruntime': v:true, - \ 'fromRuntimepath': v:false - \ }, - \ } - \} -< - Consult the vim-language-server documentation for more information about - settings. - - -g:ale_vim_vimls_use_global *g:ale_vim_vimls_use_global* - *b:ale_vim_vimls_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -vint *ale-vim-vint* - -g:ale_vim_vint_executable *g:ale_vim_vint_executable* - *b:ale_vim_vint_executable* - Type: |String| - Default: `'vint'` - - This option can be set to change the executable path for Vint. - - -g:ale_vim_vint_show_style_issues *g:ale_vim_vint_show_style_issues* - *b:ale_vim_vint_show_style_issues* - Type: |Number| - Default: `1` - - This variable will enable/disable style issues for Vint. When this option - is disabled, only warnings and errors which are not purely style issues - will be reported. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-vue.txt b/dotfiles/.vim/plugged/ale/doc/ale-vue.txt deleted file mode 100644 index 40106b2b..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-vue.txt +++ /dev/null @@ -1,68 +0,0 @@ -=============================================================================== -ALE Vue Integration *ale-vue-options* - - -=============================================================================== -cspell *ale-vue-cspell* - -See |ale-cspell-options| - - -=============================================================================== -prettier *ale-vue-prettier* - -See |ale-javascript-prettier| for information about the available options. - - -=============================================================================== -vls *ale-vue-vls* - -g:ale_vue_vls_executable *g:ale_vue_vls_executable* - *b:ale_vue_vls_executable* - Type: |String| - Default: `'vls'` - - See |ale-integrations-local-executables| - - -g:ale_vue_vls_use_global *g:ale_vue_vls_use_global* - *b:ale_vue_vls_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -volar *ale-vue-volar* - - It is required to have typescript installed in your project as your dev - dependency: `npm i -D typescript` - -g:ale_vue_volar_executable *g:ale_vue_volar_executable* - *b:ale_vue_volar_executable* - Type: |String| - Default: `'vue-language-server'` - - See |ale-integrations-local-executables| - - -g:ale_vue_volar_use_global *g:ale_vue_volar_use_global* - *b:ale_vue_volar_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -g:vue_volar_init_options *g:ale_vue_volar_init_options* - *b:ale_vue_volar_init_options* - Type: |Dictionary| - Default: `{ ... }` - - Default is too long to show here, take a look at it over - `ale_linters/vue/volar.vim` - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-wgsl.txt b/dotfiles/.vim/plugged/ale/doc/ale-wgsl.txt deleted file mode 100644 index 5254f43b..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-wgsl.txt +++ /dev/null @@ -1,17 +0,0 @@ -=============================================================================== -ALE WGSL Integration *ale-wgsl-options* - - -=============================================================================== -naga *ale-wgsl-naga* - -g:ale_wgsl_naga_executable *g:ale_wgsl_naga_executable* - *b:ale_wgsl_naga_executable* - Type: |String| - Default: `'naga'` - - The executable that will be run for the `naga` linter. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-xhtml.txt b/dotfiles/.vim/plugged/ale/doc/ale-xhtml.txt deleted file mode 100644 index 10ca5b82..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-xhtml.txt +++ /dev/null @@ -1,18 +0,0 @@ -=============================================================================== -ALE XHTML Integration *ale-xhtml-options* - - -=============================================================================== -cspell *ale-xhtml-cspell* - -See |ale-cspell-options| - - -=============================================================================== -write-good *ale-xhtml-write-good* - -See |ale-write-good-options| - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-xml.txt b/dotfiles/.vim/plugged/ale/doc/ale-xml.txt deleted file mode 100644 index e43fdefd..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-xml.txt +++ /dev/null @@ -1,34 +0,0 @@ -=============================================================================== -ALE XML Integration *ale-xml-options* - - -=============================================================================== -xmllint *ale-xml-xmllint* - -g:ale_xml_xmllint_executable *g:ale_xml_xmllint_executable* - *b:ale_xml_xmllint_executable* - Type: |String| - Default: `'xmllint'` - - This variable can be set to change the path to xmllint. - - -g:ale_xml_xmllint_options *g:ale_xml_xmllint_options* - *b:ale_xml_xmllint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to xmllint. - - -g:ale_xml_xmllint_indentsize *g:ale_xml_xmllint_indentsize* - *b:ale_xml_xmllint_indentsize* - Type: |Number| - Default: 2 - - This variable can be sent to specify the amount of spaces used for - indentation. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/dotfiles/.vim/plugged/ale/doc/ale-yaml.txt b/dotfiles/.vim/plugged/ale/doc/ale-yaml.txt deleted file mode 100644 index b3450b87..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-yaml.txt +++ /dev/null @@ -1,331 +0,0 @@ -=============================================================================== -ALE YAML Integration *ale-yaml-options* - - -=============================================================================== -actionlint *ale-yaml-actionlint* - -Website: https://github.com/rhysd/actionlint - - -Installation -------------------------------------------------------------------------------- - -See installation guide: https://github.com/rhysd/actionlint#quick-start - -This linter is disabled by default and must be enabled by setting `g:ale_linters`. -To enable it only for Github Action YAML files a configuration like this is -better: - -> - au BufRead,BufNewFile */.github/*/*.y{,a}ml - \ let b:ale_linters = {'yaml': ['actionlint']} -< - -Options -------------------------------------------------------------------------------- - -g:ale_yaml_actionlint_executable *g:ale_yaml_actionlint_executable* - *b:ale_yaml_actionlint_executable* - Type: |String| - Default: `'actionlint'` - - This variable can be set to change the path to actionlint. - -g:ale_yaml_actionlint_options *g:ale_yaml_actionlint_options* - *b:ale_yaml_actionlint_options* - - Type: |String| - Default: `''` - - This variable can be set to add extra options to actionlint executable. - - For example, to disable running `shellcheck` and `pyflakes` external commands, - you may want to set: -> - let g:ale_yaml_actionlint_options = '-shellcheck= -pyflakes=' -< - Please note that passing `-format` as option is not supported at the moment. - -=============================================================================== -circleci *ale-yaml-circleci* - -Website: https://circleci.com/docs/2.0/local-cli - - -Installation -------------------------------------------------------------------------------- - -Follow the instructions on the website, and make sure to test that you can -validate configuration files with: > - - circleci config validate - < .circleci/config.yml -< - -As long as the validator runs correctly, you should be able to see errors when -you save the configuration file. The validator doesn't run as you type because -it sends network requests, and running too often would overload the circleci -servers. - - -=============================================================================== -prettier *ale-yaml-prettier* - -Website: https://github.com/prettier/prettier - - -Installation -------------------------------------------------------------------------------- - -Install prettier either globally or locally: > - - npm install prettier -g # global - npm install prettier # local -< - -=============================================================================== -spectral *ale-yaml-spectral* - -Website: https://github.com/stoplightio/spectral - - -Installation -------------------------------------------------------------------------------- - -Install spectral either globally or locally: > - - npm install @stoplight/spectral -g # global - npm install @stoplight/spectral # local -< - -Options -------------------------------------------------------------------------------- - -g:ale_yaml_spectral_executable *g:ale_yaml_spectral_executable* - *b:ale_yaml_spectral_executable* - Type: |String| - Default: `'spectral'` - - This variable can be set to change the path to spectral. - -g:ale_yaml_spectral_use_global *g:ale_yaml_spectral_use_global* - *b:ale_yaml_spectral_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -swaglint *ale-yaml-swaglint* - -Website: https://github.com/byCedric/swaglint - - -Installation -------------------------------------------------------------------------------- - -Install swaglint either globally or locally: > - - npm install swaglint -g # global - npm install swaglint # local -< - -Options -------------------------------------------------------------------------------- - -g:ale_yaml_swaglint_executable *g:ale_yaml_swaglint_executable* - *b:ale_yaml_swaglint_executable* - Type: |String| - Default: `'swaglint'` - - This variable can be set to change the path to swaglint. - - -g:ale_yaml_swaglint_use_global *g:ale_yaml_swaglint_use_global* - *b:ale_yaml_swaglint_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -yaml-language-server *ale-yaml-language-server* - -Website: https://github.com/redhat-developer/yaml-language-server - - -Installation -------------------------------------------------------------------------------- - -Install yaml-language-server either globally or locally: > - - npm install yaml-language-server -g # global - npm install yaml-language-server # local - - -Options -------------------------------------------------------------------------------- - -g:ale_yaml_ls_executable *g:ale_yaml_ls_executable* - *b:ale_yaml_ls_executable* - Type: |String| - Default: `'yaml-language-server'` - - This variable can be set to change the path to yaml-language-server. - - -g:ale_yaml_ls_config *g:ale_yaml_ls_config* - *b:ale_yaml_ls_config* - Type: |Dictionary| - Default: `{}` - - Dictionary containing configuration settings that will be passed to the - language server. For example, to enable schema store: > - { - \ 'yaml': { - \ 'schemaStore': { - \ 'enable': v:true, - \ }, - \ }, - \ } -< - Consult the yaml-language-server documentation for more information about - settings. - - -g:ale_yaml_ls_use_global *g:ale_yaml_ls_use_global* - *b:ale_yaml_ls_use_global* - Type: |String| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -yamlfix *ale-yaml-yamlfix* - -Website: https://lyz-code.github.io/yamlfix - - -Installation -------------------------------------------------------------------------------- - -Install yamlfix: > - - pip install yamlfix -< - -Options -------------------------------------------------------------------------------- -g:ale_yaml_yamlfix_executable *g:ale_yaml_yamlfix_executable* - *b:ale_yaml_yamlfix_executable* - Type: |String| - Default: `'yamlfix'` - - See |ale-integrations-local-executables| - - -g:ale_yaml_yamlfix_options *g:ale_yaml_yamlfix_options* - *b:ale_yaml_yamlfix_options* - Type: |String| - Default: `''` - - This variable can be set to pass extra options to yamlfix. - -g:ale_yaml_yamlfix_use_global *g:ale_yaml_yamlfix_use_global* - *b:ale_yaml_yamlfix_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -=============================================================================== -yamllint *ale-yaml-yamllint* - -Website: https://github.com/adrienverge/yamllint - - -Installation -------------------------------------------------------------------------------- - -Install yamllint in your a virtualenv directory, locally, or globally: > - - pip install yamllint # After activating virtualenv - pip install --user yamllint # Install to ~/.local/bin - sudo pip install yamllint # Install globally - -See |g:ale_virtualenv_dir_names| for configuring how ALE searches for -virtualenv directories. - - -Options -------------------------------------------------------------------------------- - -g:ale_yaml_yamllint_executable *g:ale_yaml_yamllint_executable* - *b:ale_yaml_yamllint_executable* - Type: |String| - Default: `'yamllint'` - - This variable can be set to change the path to yamllint. - - -g:ale_yaml_yamllint_options *g:ale_yaml_yamllint_options* - *b:ale_yaml_yamllint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to yamllint. - - -=============================================================================== -gitlablint *ale-yaml-gitlablint* - -Website: https://github.com/elijah-roberts/gitlab-lint - - -Installation -------------------------------------------------------------------------------- - -Install yamllint in your a virtualenv directory, locally, or globally: > - - pip3 install gitlab_lint # After activating virtualenv - pip3 install --user gitlab_lint # Install to ~/.local/bin - sudo pip3 install gitlab_lint # Install globally - -See |g:ale_virtualenv_dir_names| for configuring how ALE searches for -virtualenv directories. - -Is recommended to use |g:ale_pattern_options| to enable this linter so it only -applies to 'gitlab-ci.yml' files and not all yaml files: -> - let g:ale_pattern_options = { - \ '.gitlab-ci\.yml$': { - \ 'ale_linters': ['gitlablint'], - \ }, - \} -< - -Options -------------------------------------------------------------------------------- - -g:ale_yaml_gitlablint_executable *g:ale_yaml_gitlablint_executable* - *b:ale_yaml_gitlablint_executable* - Type: |String| - Default: `'gll'` - - This variable can be set to change the path to gll. - - -g:ale_yaml_gitlablint_options *g:ale_yaml_gitlablint_options* - *b:ale_yaml_gitlablint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to gll. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-yang.txt b/dotfiles/.vim/plugged/ale/doc/ale-yang.txt deleted file mode 100644 index ad619733..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-yang.txt +++ /dev/null @@ -1,17 +0,0 @@ -=============================================================================== -ALE YANG Integration *ale-yang-options* - - -=============================================================================== -yang-lsp *ale-yang-lsp* - -g:ale_yang_lsp_executable *g:ale_yang_lsp_executable* - *b:ale_yang_lsp_executable* - Type: |String| - Default: `'yang-language-server'` - - This variable can be changed to use a different executable for yang-lsp. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale-zeek.txt b/dotfiles/.vim/plugged/ale/doc/ale-zeek.txt deleted file mode 100644 index 910bc060..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-zeek.txt +++ /dev/null @@ -1,23 +0,0 @@ -=============================================================================== -ALE Zeek Integration *ale-zeek-options* - *ale-integration-zeek* - -=============================================================================== -Integration Information - - Currently, the only supported linter for Zeek is zeek. - -=============================================================================== -zeek *ale-zeek-zeek* - -g:ale_zeek_zeek_executable *g:ale_zeek_zeek_executable* - *b:ale_zeek_zeek_executable* - Type: |String| - Default: `'zeek'` - - This variable can be modified to change the executable path for `zeek`. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: - diff --git a/dotfiles/.vim/plugged/ale/doc/ale-zig.txt b/dotfiles/.vim/plugged/ale/doc/ale-zig.txt deleted file mode 100644 index cafa12a1..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale-zig.txt +++ /dev/null @@ -1,45 +0,0 @@ -=============================================================================== -ALE Zig Integration *ale-zig-options* - *ale-integration-zig* - -=============================================================================== -Integration Information - - Currently, the only supported linter for zig is zls. - - -=============================================================================== -zigfmt *ale-zig-zigfmt* - -g:ale_zig_zigfmt_executable *g:ale_zig_zigfmt_executable* - *b:ale_zig_zigfmt_executable* - Type: |String| - Default: `'zig'` - - The executable that will be run for the `zig fmt` fixer. - - -=============================================================================== -zls *ale-zig-zls* - -g:ale_zig_zls_executable *g:ale_zig_zls_executable* - *b:ale_zig_zls_executable* - Type: |String| - Default: `'zls'` - - This variable can be modified to change the executable path for `zls`. - - -g:ale_zig_zls_config *g:ale_zig_zls_config* - *b:ale_zig_zls_config* - Type: |Dictionary| - Default: `{}` - - WARNING: As of writing, zls does not support receiving configuration - from the client. This variable is a PLACEHOLDER until it does. - - Dictionary with configuration settings for zls. - - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/doc/ale.txt b/dotfiles/.vim/plugged/ale/doc/ale.txt deleted file mode 100644 index b17e2e42..00000000 --- a/dotfiles/.vim/plugged/ale/doc/ale.txt +++ /dev/null @@ -1,4634 +0,0 @@ -*ale.txt* Plugin to lint and fix files asynchronously -*ale* - -ALE - Asynchronous Lint Engine - -=============================================================================== -CONTENTS *ale-contents* - - 1. Introduction.........................|ale-introduction| - 2. Supported Languages & Tools..........|ale-support| - 3. Linting..............................|ale-lint| - 3.1 Linting On Other Machines.........|ale-lint-other-machines| - 3.2 Adding Language Servers...........|ale-lint-language-servers| - 3.3 Other Sources.....................|ale-lint-other-sources| - 4. Fixing Problems......................|ale-fix| - 5. Language Server Protocol Support.....|ale-lsp| - 5.1 Completion........................|ale-completion| - 5.2 Go To Definition..................|ale-go-to-definition| - 5.3 Go To Type Definition.............|ale-go-to-type-definition| - 5.4 Go To Implementation..............|ale-go-to-type-implementation| - 5.5 Find References...................|ale-find-references| - 5.6 Hovering..........................|ale-hover| - 5.7 Symbol Search.....................|ale-symbol-search| - 5.8 Refactoring: Rename, Actions......|ale-refactor| - 6. Global Options.......................|ale-options| - 6.1 Highlights........................|ale-highlights| - 7. Linter/Fixer Options.................|ale-integration-options| - 7.1 Options for alex..................|ale-alex-options| - 7.2 Options for cspell................|ale-cspell-options| - 7.3 Options for languagetool..........|ale-languagetool-options| - 7.4 Options for write-good............|ale-write-good-options| - 7.5 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. - -ALE can fix problems with files with the |ALEFix| command, using the same job -control functionality used for checking for problems. Try using the -|ALEFixSuggest| command for browsing tools that can be used to fix problems -for the current buffer. - -If you are interested in contributing to the development of ALE, read the -developer documentation. See |ale-development| - -=============================================================================== -2. Supported Languages & Tools *ale-support* - -ALE supports a wide variety of languages and tools. See |ale-supported-list| -for the full list. - -=============================================================================== -3. Linting *ale-lint* - -ALE's primary focus is on checking for problems with your code with various -programs via some Vim code for integrating with those programs, referred to -as 'linters.' ALE supports a wide array of programs for linting by default, -but additional programs can be added easily by defining files in |runtimepath| -with the filename pattern `ale_linters//.vim`. For more -information on defining new linters, see the extensive documentation -for |ale#linter#Define()|. - -Without any configuration, ALE will attempt to check all of the code for every -file you open in Vim with all available tools by default. To see what ALE -is doing, and what options have been set, try using the |:ALEInfo| command. - -Most of the linters ALE runs will check the Vim buffer you are editing instead -of the file on disk. This allows you to check your code for errors before you -have even saved your changes. ALE will check your code in the following -circumstances, which can be configured with the associated options. - -* When you modify a buffer. - |g:ale_lint_on_text_changed| -* On leaving insert mode. - |g:ale_lint_on_insert_leave| -* When you open a new or modified buffer. - |g:ale_lint_on_enter| -* When you save a buffer. - |g:ale_lint_on_save| -* When the filetype changes for a buffer. - |g:ale_lint_on_filetype_changed| -* If ALE is used to check code manually. - |:ALELint| - - *ale-lint-settings-on-startup* - -It is worth reading the documentation for every option. You should configure -which events ALE will use before ALE is loaded, so it can optimize which -autocmd commands to run. You can force autocmd commands to be reloaded with -`:ALEDisable | ALEEnable` - -This also applies to the autocmd commands used for |g:ale_echo_cursor|. - - *ale-lint-file-linters* - -Some programs must be run against files which have been saved to disk, and -simply do not support reading temporary files or stdin, either of which are -required for ALE to be able to check for errors as you type. The programs -which behave this way are documented in the lists and tables of supported -programs. ALE will only lint files with these programs in the following -circumstances. - -* When you open a new or modified buffer. - |g:ale_lint_on_enter| -* When you save a buffer. - |g:ale_lint_on_save| -* When the filetype changes for a buffer. - |g:ale_lint_on_filetype_changed| -* If ALE is used to check code manually. - |:ALELint| - -ALE will report problems with your code in the following ways, listed with -their relevant options. - -* By updating loclist. (On by default) - |g:ale_set_loclist| -* By updating quickfix. (Off by default) - |g:ale_set_quickfix| -* By setting error highlights. - |g:ale_set_highlights| -* By creating signs in the sign column. - |g:ale_set_signs| -* By echoing messages based on your cursor. - |g:ale_echo_cursor| -* By inline text based on your cursor. - |g:ale_virtualtext_cursor| -* By displaying the preview based on your cursor. - |g:ale_cursor_detail| -* By showing balloons for your mouse cursor - |g:ale_set_balloons| - -Please consult the documentation for each option, which can reveal some other -ways of tweaking the behavior of each way of displaying problems. You can -disable or enable whichever options you prefer. - -Most settings can be configured for each buffer. (|b:| instead of |g:|), -including disabling ALE for certain buffers with |b:ale_enabled|. The -|g:ale_pattern_options| setting can be used to configure files differently -based on regular expressions for filenames. For configuring entire projects, -the buffer-local options can be used with external plugins for reading Vim -project configuration files. Buffer-local settings can also be used in -ftplugin files for different filetypes. - -ALE offers several options for controlling which linters are run. - -* Selecting linters to run. - |g:ale_linters| -* Aliasing filetypes for linters - |g:ale_linter_aliases| -* Only running linters you asked for. - |g:ale_linters_explicit| -* Disabling only a subset of linters. - |g:ale_linters_ignore| -* Disabling LSP linters and `tsserver`. - |g:ale_disable_lsp| - -You can stop ALE any currently running linters with the |ALELintStop| command. -Any existing problems will be kept. - -------------------------------------------------------------------------------- -3.1 Linting On Other Machines *ale-lint-other-machines* - -ALE offers support for running linters or fixers on files you are editing -locally on other machines, so long as the other machine has access to the file -you are editing. This could be a linter or fixer run inside of a Docker image, -running in a virtual machine, running on a remote server, etc. - -In order to run tools on other machines, you will need to configure your tools -to run via scripts that execute commands on those machines, such as by setting -the ALE `_executable` options for those tools to a path for a script to run, -or by using |g:ale_command_wrapper| to specify a script to wrap all commands -that are run by ALE, before they are executed. For tools that ALE runs where -ALE looks for locally installed executables first, you may need to set the -`_use_global` options for those tools to `1`, or you can set -|g:ale_use_global_executables| to `1` before ALE is loaded to only use global -executables for all tools. - -In order for ALE to properly lint or fix files which are running on another -file system, you must provide ALE with |List|s of strings for mapping paths to -and from your local file system and the remote file system, such as the file -system of your Docker container. See |g:ale_filename_mappings| for all of the -different ways these filename mappings can be configured. - -For example, you might configure `pylint` to run via Docker by creating a -script like so. > - - #!/usr/bin/env bash - - exec docker run -i --rm -v "$(pwd):/data" cytopia/pylint "$@" -< - -You will run to run Docker commands with `-i` in order to read from stdin. - -With the above script in mind, you might configure ALE to lint your Python -project with `pylint` by providing the path to the script to execute, and -mappings which describe how to between the two file systems in your -`python.vim` |ftplugin| file, like so: > - - if expand('%:p') =~# '^/home/w0rp/git/test-pylint/' - let b:ale_linters = ['pylint'] - let b:ale_python_pylint_use_global = 1 - " This is the path to the script above. - let b:ale_python_pylint_executable = '/home/w0rp/git/test-pylint/pylint.sh' - " /data matches the path in Docker. - let b:ale_filename_mappings = { - \ 'pylint': [ - \ ['/home/w0rp/git/test-pylint', '/data'], - \ ], - \} - endif -< - -You might consider using a Vim plugin for loading Vim configuration files -specific to each project, if you have a lot of projects to manage. - - -------------------------------------------------------------------------------- -3.2 Adding Language Servers *ale-lint-language-servers* - -ALE comes with many default configurations for language servers, so they can -be detected and run automatically. ALE can connect to other language servers -by defining a new linter for a filetype. New linters can be defined in |vimrc|, -in plugin files, or `ale_linters` directories in |runtimepath|. - -See |ale-linter-loading-behavior| for more information on loading linters. - -A minimal configuration for a language server linter might look so. > - - call ale#linter#Define('filetype_here', { - \ 'name': 'any_name_you_want', - \ 'lsp': 'stdio', - \ 'executable': '/path/to/executable', - \ 'command': '%e run', - \ 'project_root': '/path/to/root_of_project', - \}) -< -For language servers that use a TCP or named pipe socket connection, you -should define the address to connect to instead. > - - call ale#linter#Define('filetype_here', { - \ 'name': 'any_name_you_want', - \ 'lsp': 'socket', - \ 'address': 'servername:1234', - \ 'project_root': '/path/to/root_of_project', - \}) -< - Most of the options for a language server can be replaced with a |Funcref| - for a function accepting a buffer number for dynamically computing values - such as the executable path, the project path, the server address, etc, - most of which can also be determined based on executing some other - asynchronous task. See |ale#command#Run()| for computing linter options - based on asynchronous results. - - See |ale#linter#Define()| for a detailed explanation of all of the options - for configuring linters. - - -------------------------------------------------------------------------------- -3.3 Other Sources *ale-lint-other-sources* - -Problems for a buffer can be taken from other sources and rendered by ALE. -This allows ALE to be used in combination with other plugins which also want -to display any problems they might find with a buffer. ALE's API includes the -following components for making this possible. - -* |ale#other_source#StartChecking()| - Tell ALE that a buffer is being checked. -* |ale#other_source#ShowResults()| - Show results from another source. -* |ALEWantResults| - A signal for when ALE wants results. - -Other resources can provide results for ALE to display at any time, following -ALE's loclist format. (See |ale-loclist-format|) For example: > - - " Tell ALE to show some results. - " This function can be called at any time. - call ale#other_source#ShowResults(bufnr(''), 'some-linter-name', [ - \ {'text': 'Something went wrong', 'lnum': 13}, - \]) -< - -Other sources should use a unique name for identifying themselves. A single -linter name can be used for all problems from another source, or a series of -unique linter names can be used. Results can be cleared for that source by -providing an empty List. - -|ale#other_source#StartChecking()| should be called whenever another source -starts checking a buffer, so other tools can know that a buffer is being -checked by some plugin. The |ALEWantResults| autocmd event can be used to -start checking a buffer for problems every time that ALE does. When -|ALEWantResults| is signaled, |g:ale_want_results_buffer| will be set to the -number of the buffer that ALE wants to check. -|ale#other_source#StartChecking()| should be called synchronously, and other -sources should perform their checks on a buffer in the background -asynchronously, so they don't interrupt editing. - -|ale#other_source#ShowResults()| must not be called synchronously before -ALE's engine executes its code after the |ALEWantResults| event runs. If -there are immediate results to provide to ALE, a 0 millisecond timer with -|timer_start()| can be set instead up to call |ale#other_source#ShowResults()| -after ALE has first executed its engine code for its own sources. - -A plugin might integrate its own checks with ALE like so: > - - augroup SomeGroupName - autocmd! - autocmd User ALEWantResults call Hook(g:ale_want_results_buffer) - augroup END - - function! DoBackgroundWork(buffer) abort - " Start some work in the background here. - " ... - " Then call WorkDone(a:buffer, results) - endfunction - - function! Hook(buffer) abort - " Tell ALE we're going to check this buffer. - call ale#other_source#StartChecking(a:buffer, 'some-name') - call DoBackgroundWork(a:buffer) - endfunction - - function! WorkDone(buffer, results) abort - " Send results to ALE after they have been collected. - call ale#other_source#ShowResults(a:buffer, 'some-name', a:results) - endfunction -< - -=============================================================================== -4. Fixing Problems *ale-fix* - -ALE can fix problems with files with the |ALEFix| command. |ALEFix| -accepts names of fixers to be applied as arguments. Alternatively, -when no arguments are provided, the variable |g:ale_fixers| will be -read for getting a |List| of commands for filetypes, split on `.`, and -the functions named in |g:ale_fixers| will be executed for fixing the -errors. - -The |ALEFixSuggest| command can be used to suggest tools that be used to -fix problems for the current buffer. - -The values for `g:ale_fixers` can be a list of |String|, |Funcref|, or -|lambda| values. String values must either name a function, or a short name -for a function set in the ALE fixer registry. - -Each function for fixing errors must accept either one argument `(buffer)` or -two arguments `(buffer, lines)`, representing the buffer being fixed and the -lines to fix. The functions must return either `0`, for changing nothing, a -|List| for new lines to set, a |Dictionary| for describing a command to be -run in the background, or the result of |ale#command#Run()|. - -Functions receiving a variable number of arguments will not receive the second -argument `lines`. Functions should name two arguments if the `lines` argument -is desired. This is required to avoid unnecessary copying of the lines of -the buffers being checked. - -When a |Dictionary| is returned for an |ALEFix| callback, the following keys -are supported for running the commands. - - `cwd` An optional |String| for setting the working directory - for the command. - - If not set, or `v:null`, the `cwd` of the last command - that spawn this one will be used. - - `command` A |String| for the command to run. This key is required. - - When `%t` is included in a command string, a temporary - file will be created, containing the lines from the file - after previous adjustment have been done. - - See |ale-command-format-strings| for formatting options. - - `read_temporary_file` When set to `1`, ALE will read the contents of the - temporary file created for `%t`. This option can be used - for commands which need to modify some file on disk in - order to fix files. - - `process_with` An optional callback for post-processing. - - The callback must accept arguments `(bufnr, output)`: - the buffer number undergoing fixing and the fixer's - output as a |List| of |String|s. It must return a |List| - of |String|s that will be the new contents of the - buffer. - - This callback is useful to remove excess lines from the - command's output or apply additional changes to the - output. - - - `read_buffer` An optional key for disabling reading the buffer. - - When set to `0`, ALE will not pipe the buffer's data - into the command via stdin. This option is ignored and - the buffer is not read when `read_temporary_file` is - `1`. - - This option defaults to `1`. - - *ale-fix-configuration* - -Synchronous functions and asynchronous jobs will be run in a sequence for -fixing files, and can be combined. For example: -> - let g:ale_fixers = { - \ 'javascript': [ - \ 'DoSomething', - \ 'eslint', - \ {buffer, lines -> filter(lines, 'v:val !=~ ''^\s*//''')}, - \ ], - \} - - ALEFix -< -The above example will call a function called `DoSomething` which could act -upon some lines immediately, then run `eslint` from the ALE registry, and -then call a lambda function which will remove every single line comment -from the file. - -For buffer-local settings, such as in |g:ale_pattern_options| or in ftplugin -files, a |List| may be used for configuring the fixers instead. -> - " Same as the above, only a List can be used instead of a Dictionary. - let b:ale_fixers = [ - \ 'DoSomething', - \ 'eslint', - \ {buffer, lines -> filter(lines, 'v:val !=~ ''^\s*//''')}, - \] - - ALEFix -< -For convenience, a plug mapping is defined for |ALEFix|, so you can set up a -keybind easily for fixing files. > - - " Bind F8 to fixing problems with ALE - nmap (ale_fix) -< -Files can be fixed automatically with the following options, which are all off -by default. - -|g:ale_fix_on_save| - Fix files when they are saved. - -Fixers can be disabled on save with |g:ale_fix_on_save_ignore|. They will -still be run when you manually run |ALEFix|. - -Fixers can be run on another machines, just like linters, such as fixers run -from a Docker container, running in a virtual machine, running a remote -server, etc. See |ale-lint-other-machines|. - - -=============================================================================== -5. Language Server Protocol Support *ale-lsp* - -ALE offers some support for integrating with Language Server Protocol (LSP) -servers. LSP linters can be used in combination with any other linter, and -will automatically connect to LSP servers when needed. ALE also supports -`tsserver` for TypeScript, which uses a different but very similar protocol. - -If you want to use another plugin for LSP features and tsserver, you can use -the |g:ale_disable_lsp| setting to disable ALE's own LSP integrations, or -ignore particular linters with |g:ale_linters_ignore|. - -------------------------------------------------------------------------------- -5.1 Completion *ale-completion* - -ALE offers support for automatic completion of code while you type. -Completion is only supported while at least one LSP linter is enabled. ALE -will only suggest symbols provided by the LSP servers. - - *ale-deoplete-integration* - -ALE integrates with Deoplete for offering automatic completion data. ALE's -completion source for Deoplete is named `'ale'`, and should enabled -automatically if Deoplete is enabled and configured correctly. Deoplete -integration should not be combined with ALE's own implementation. - - *ale-asyncomplete-integration* - -ALE additionally integrates with asyncomplete.vim for offering automatic -completion data. ALE's asyncomplete source requires registration and should -use the defaults provided by the |asyncomplete#sources#ale#get_source_options| function > - - " Use ALE's function for asyncomplete defaults - au User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#ale#get_source_options({ - \ 'priority': 10, " Provide your own overrides here - \ })) -> -ALE also offers its own completion implementation, which does not require any -other plugins. Suggestions will be made while you type after completion is -enabled. ALE's own completion implementation can be enabled by setting -|g:ale_completion_enabled| to `1`. This setting must be set to `1` before ALE -is loaded. The delay for completion can be configured with -|g:ale_completion_delay|. This setting should not be enabled if you wish to -use ALE as a completion source for other plugins. - -ALE automatic completion will not work when 'paste' is active. Only set -'paste' when you are copy and pasting text into your buffers. - -ALE automatic completion will interfere with default insert completion with -`CTRL-N` and so on (|compl-vim|). You can write your own keybinds and a -function in your |vimrc| file to force insert completion instead, like so: > - - function! SmartInsertCompletion() abort - " Use the default CTRL-N in completion menus - if pumvisible() - return "\" - endif - - " Exit and re-enter insert mode, and use insert completion - return "\a\" - endfunction - - inoremap =SmartInsertCompletion() -< -ALE provides an 'omnifunc' function |ale#completion#OmniFunc| for triggering -completion manually with CTRL-X CTRL-O. |i_CTRL-X_CTRL-O| > - - " Use ALE's function for omnicompletion. - set omnifunc=ale#completion#OmniFunc -< - *ale-completion-fallback* - -You can write your own completion function and fallback on other methods of -completion by checking if there are no results that ALE can determine. For -example, for Python code, you could fall back on the `python3complete` -function. > - - function! TestCompletionFunc(findstart, base) abort - let l:result = ale#completion#OmniFunc(a:findstart, a:base) - - " Check if ALE couldn't find anything. - if (a:findstart && l:result is -3) - \|| (!a:findstart && empty(l:result)) - " Defer to another omnifunc if ALE couldn't find anything. - return python3complete#Complete(a:findstart, a:base) - endif - - return l:result - endfunction - - set omnifunc=TestCompletionFunc -< -See |complete-functions| for documentation on how to write completion -functions. - -ALE will only suggest so many possible matches for completion. The maximum -number of items can be controlled with |g:ale_completion_max_suggestions|. - -If you don't like some of the suggestions you see, you can filter them out -with |g:ale_completion_excluded_words| or |b:ale_completion_excluded_words|. - -The |ALEComplete| command can be used to show completion suggestions manually, -even when |g:ale_completion_enabled| is set to `0`. For manually requesting -completion information with Deoplete, consult Deoplete's documentation. - -ALE supports automatic imports from external modules. This behavior can be -disabled by setting the |g:ale_completion_autoimport| variable to `0`. -Disabling automatic imports can drop some or all completion items from -some LSP servers (e.g. eclipselsp). - -You can manually request imports for symbols at the cursor with the -|ALEImport| command. The word at the cursor must be an exact match for some -potential completion result which includes additional text to insert into the -current buffer, which ALE will assume is code for an import line. This command -can be useful when your code already contains something you need to import. - -You can execute other commands whenever ALE inserts some completion text with -the |ALECompletePost| event. - -When working with TypeScript files, ALE can remove warnings from your -completions by setting the |g:ale_completion_tsserver_remove_warnings| -variable to 1. - - *ale-completion-completeopt-bug* - -ALE Automatic completion implementation replaces |completeopt| before opening -the omnicomplete menu with . In some versions of Vim, the value set -for the option will not be respected. If you experience issues with Vim -automatically inserting text while you type, set the following option in -vimrc, and your issues should go away. > - - set completeopt=menu,menuone,preview,noselect,noinsert -< -Or alternatively, if you want to show documentation in popups: > - - set completeopt=menu,menuone,popup,noselect,noinsert -< - *ale-symbols* - -ALE provides a set of basic completion symbols. If you want to replace those -symbols with others, you can set the variable |g:ale_completion_symbols| with -a mapping of the type of completion to the symbol or other string that you -would like to use. An example here shows the available options for symbols > - - let g:ale_completion_symbols = { - \ 'text': '', - \ 'method': '', - \ 'function': '', - \ 'constructor': '', - \ 'field': '', - \ 'variable': '', - \ 'class': '', - \ 'interface': '', - \ 'module': '', - \ 'property': '', - \ 'unit': 'unit', - \ 'value': 'val', - \ 'enum': '', - \ 'keyword': 'keyword', - \ 'snippet': '', - \ 'color': 'color', - \ 'file': '', - \ 'reference': 'ref', - \ 'folder': '', - \ 'enum member': '', - \ 'constant': '', - \ 'struct': '', - \ 'event': 'event', - \ 'operator': '', - \ 'type_parameter': 'type param', - \ '': 'v' - \ } -< -------------------------------------------------------------------------------- -5.2 Go To Definition *ale-go-to-definition* - -ALE supports jumping to the files and locations where symbols are defined -through any enabled LSP linters. The locations ALE will jump to depend on the -information returned by LSP servers. The |ALEGoToDefinition| command will jump -to the definition of symbols under the cursor. See the documentation for the -command for configuring how the location will be displayed. - -ALE will update Vim's |tagstack| automatically unless |g:ale_update_tagstack| is -set to `0`. - -------------------------------------------------------------------------------- -5.3 Go To Type Definition *ale-go-to-type-definition* - -ALE supports jumping to the files and locations where symbols' types are -defined through any enabled LSP linters. The locations ALE will jump to depend -on the information returned by LSP servers. The |ALEGoToTypeDefinition| -command will jump to the definition of symbols under the cursor. See the -documentation for the command for configuring how the location will be -displayed. - -------------------------------------------------------------------------------- -5.4 Go To Implementation *ale-go-to-implementation* - -ALE supports jumping to the files and locations where symbols are implemented -through any enabled LSP linters. The locations ALE will jump to depend on the -information returned by LSP servers. The |ALEGoToImplementation| command will -jump to the implementation of symbols under the cursor. See the documentation -for the command for configuring how the location will be displayed. - -------------------------------------------------------------------------------- -5.5 Find References *ale-find-references* - -ALE supports finding references for symbols though any enabled LSP linters -with the |ALEFindReferences| command. See the documentation for the command -for a full list of options. - -------------------------------------------------------------------------------- -5.6 Hovering *ale-hover* - -ALE supports "hover" information for printing brief information about symbols -at the cursor taken from LSP linters. The following commands are supported: - -|ALEHover| - Print information about the symbol at the cursor. - -Truncated information will be displayed when the cursor rests on a symbol by -default, as long as there are no problems on the same line. You can disable -this behavior by setting |g:ale_hover_cursor| to `0`. - -If |g:ale_set_balloons| is set to `1` and your version of Vim supports the -|balloon_show()| function, then "hover" information also show up when you move -the mouse over a symbol in a buffer. Diagnostic information will take priority -over hover information for balloons. If a line contains a problem, that -problem will be displayed in a balloon instead of hover information. - -Hover information can be displayed in the preview window instead by setting -|g:ale_hover_to_preview| to `1`. - -When using Neovim or Vim with |popupwin|, if |g:ale_hover_to_floating_preview| -or |g:ale_floating_preview| is set to 1, the hover information will show in a -floating window. The borders of the floating preview window can be customized -by setting |g:ale_floating_window_border|. - -For Vim 8.1+ terminals, mouse hovering is disabled by default. Enabling -|balloonexpr| commands in terminals can cause scrolling issues in terminals, -so ALE will not attempt to show balloons unless |g:ale_set_balloons| is set to -`1` before ALE is loaded. - -For enabling mouse support in terminals, you may have to change your mouse -settings. For example: > - - " Example mouse settings. - " You will need to try different settings, depending on your terminal. - set mouse=a - set ttymouse=xterm -< - -Documentation for symbols at the cursor can be retrieved using the -|ALEDocumentation| command. This command is only available for `tsserver`. - -------------------------------------------------------------------------------- -5.7 Symbol Search *ale-symbol-search* - -ALE supports searching for workspace symbols via LSP linters with the -|ALESymbolSearch| command. See the documentation for the command -for a full list of options. - -------------------------------------------------------------------------------- -5.8 Refactoring: Rename, Actions *ale-refactor* - -ALE supports renaming symbols in code such as variables or class names with -the |ALERename| command. - -`ALEFileRename` will rename file and fix import paths (tsserver only). - -|ALECodeAction| will execute actions on the cursor or applied to a visual -range selection, such as automatically fixing errors. - -Actions will appear in the right click mouse menu by default for GUI versions -of Vim, unless disabled by setting |g:ale_popup_menu_enabled| to `0`. - -Make sure to set your Vim to move the cursor position whenever you right -click, and enable the mouse menu: > - - set mouse=a - set mousemodel=popup_setpos -< -You may wish to remove some other menu items you don't want to see: > - - silent! aunmenu PopUp.Select\ Word - silent! aunmenu PopUp.Select\ Sentence - silent! aunmenu PopUp.Select\ Paragraph - silent! aunmenu PopUp.Select\ Line - silent! aunmenu PopUp.Select\ Block - silent! aunmenu PopUp.Select\ Blockwise - silent! aunmenu PopUp.Select\ All -< -=============================================================================== -6. Global Options *ale-options* - -g:airline#extensions#ale#enabled *g:airline#extensions#ale#enabled* - - Type: |Number| - Default: `1` - - Enables or disables the |airline|'s native extension for ale, which displays - warnings and errors in the status line, prefixed by - |airline#extensions#ale#error_symbol| and - |airline#extensions#ale#warning_symbol|. - - -g:ale_cache_executable_check_failures *g:ale_cache_executable_check_failures* - - Type: |Number| - Default: undefined - - When set to `1`, ALE will cache failing executable checks for linters. By - default, only executable checks which succeed will be cached. - - When this option is set to `1`, Vim will have to be restarted after new - executables are installed for ALE to be able to run linters for those - executables. - - -g:ale_change_sign_column_color *g:ale_change_sign_column_color* - - Type: |Number| - Default: `0` - - When set to `1`, this option will set different highlights for the sign - column itself when ALE reports problems with a file. This option can be - combined with |g:ale_sign_column_always|. - - ALE uses the following highlight groups for highlighting the sign column: - - `ALESignColumnWithErrors` - Links to `error` by default. - `ALESignColumnWithoutErrors` - Uses the value for `SignColumn` by default. - - The sign column color can only be changed globally in Vim. The sign column - might produce unexpected results if editing different files in split - windows. - - -g:ale_close_preview_on_insert *g:ale_close_preview_on_insert* - - Type: |Number| - Default: `0` - - When this option is set to `1`, ALE's |preview-window| will be automatically - closed upon entering Insert Mode. This option can be used in combination - with |g:ale_cursor_detail| for automatically displaying the preview window - on problem lines, and automatically closing it again when editing text. - - This setting must be set to `1` before ALE is loaded for this behavior - to be enabled. See |ale-lint-settings-on-startup|. - - -g:ale_command_wrapper *g:ale_command_wrapper* - *b:ale_command_wrapper* - Type: |String| - Default: `''` - - An option for wrapping all commands that ALE runs, for linters, fixers, - and LSP commands. This option can be set globally, or for specific buffers. - - This option can be used to apply nice to all commands. For example: > - - " Prefix all commands with nice. - let g:ale_command_wrapper = 'nice -n5' -< - Use the |ALEInfo| command to view the commands that are run. All of the - arguments for commands will be put on the end of the wrapped command by - default. A `%*` marker can be used to spread the arguments in the wrapped - command. > - - " Has the same effect as the above. - let g:ale_command_wrapper = 'nice -n5 %*' -< - - For passing all of the arguments for a command as one argument to a wrapper, - `%@` can be used instead. > - - " Will result in say: /bin/bash -c 'other-wrapper -c "some command" -x' - let g:ale_command_wrapper = 'other-wrapper -c %@ -x' -< - For commands including `&&` or `;`, only the last command in the list will - be passed to the wrapper. `&&` is most commonly used in ALE to change the - working directory before running a command. - - -g:ale_completion_delay *g:ale_completion_delay* - - Type: |Number| - Default: `100` - - The number of milliseconds before ALE will send a request to a language - server for completions after you have finished typing. - - See |ale-completion| - - -g:ale_completion_enabled *g:ale_completion_enabled* - *b:ale_completion_enabled* - - Type: |Number| - Default: `0` - - When this option is set to `1`, completion support will be enabled. - - This setting must be set to `1` before ALE is loaded for this behavior - to be enabled. - - This setting should not be enabled if you wish to use ALE as a completion - source for other completion plugins. - - ALE automatic completion will not work when 'paste' is active. Only set - 'paste' when you are copy and pasting text into your buffers. - - A buffer-local version of this setting `b:ale_completion_enabled` can be set - to `0` to disable ALE's automatic completion support for a single buffer. - ALE's completion support must be enabled globally to be enabled locally. - - See |ale-completion| - - - *g:ale_completion_tsserver_remove_warnings* -g:ale_completion_tsserver_remove_warnings - - Type: Number - Default: `0` - - When this option is set to `0`, ALE will return all completion items, - including those that are a warning. Warnings can be excluded from completed - items by setting it to `1`. - - -g:ale_completion_autoimport *g:ale_completion_autoimport* - - Type: Number - Default: `1` - - When this option is set to `1`, ALE will try to automatically import - completion results from external modules. It can be disabled by setting it - to `0`. Some LSP servers include auto imports on every completion item so - disabling automatic imports may drop some or all completion items returnend - by it (e.g. eclipselsp). - - -g:ale_completion_excluded_words *g:ale_completion_excluded_words* - *b:ale_completion_excluded_words* - Type: |List| - Default: `[]` - - This option can be set to a list of |String| values for "words" to exclude - from completion results, as in the words for |complete-items|. The strings - will be matched exactly in a case-sensitive manner. (|==#|) - - This setting can be configured in ftplugin files with buffer variables, so - that different lists can be used for different filetypes. For example: > - - " In ~/.vim/ftplugin/typescript.vim - - " Don't suggest `it` or `describe` so we can use snippets for those words. - let b:ale_completion_excluded_words = ['it', 'describe'] -< - -g:ale_completion_symbols *g:ale_completion_symbols* - - Type: |Dictionary| - - - A mapping from completion types to symbols for completions. See - |ale-symbols| for more information. - - By default, this mapping only uses built in Vim completion kinds, but it can - be updated to use any unicode character for the completion kind. For - example: > - let g:ale_completion_symbols = { - \ 'text': '', - \ 'method': '', - \ 'function': '', - \ 'constructor': '', - \ 'field': '', - \ 'variable': '', - \ 'class': '', - \ 'interface': '', - \ 'module': '', - \ 'property': '', - \ 'unit': 'v', - \ 'value': 'v', - \ 'enum': 't', - \ 'keyword': 'v', - \ 'snippet': 'v', - \ 'color': 'v', - \ 'file': 'v', - \ 'reference': 'v', - \ 'folder': 'v', - \ 'enum_member': 'm', - \ 'constant': 'm', - \ 'struct': 't', - \ 'event': 'v', - \ 'operator': 'f', - \ 'type_parameter': 'p', - \ '': 'v' - \ }) -< - -g:ale_completion_max_suggestions *g:ale_completion_max_suggestions* - - Type: |Number| - Default: `50` - - The maximum number of items ALE will suggest in completion menus for - automatic completion. - - Setting this number higher will require more processing time, and may - suggest too much noise. Setting this number lower will require less - processing time, but some suggestions will not be included, so you might not - be able to see the suggestions you want. - - Adjust this option as needed, depending on the complexity of your codebase - and your available processing power. - -g:ale_cursor_detail *g:ale_cursor_detail* - - Type: |Number| - Default: `0` - - When this option is set to `1`, ALE's |preview-window| will be automatically - opened when the cursor moves onto lines with problems. ALE will search for - problems using the same logic that |g:ale_echo_cursor| uses. The preview - window will be closed automatically when you move away from the line. - - Messages are only displayed after a short delay. See |g:ale_echo_delay|. - - The preview window is opened without stealing focus, which means your cursor - will stay in the same buffer as it currently is. - - The preview window can be closed automatically upon entering Insert mode - by setting |g:ale_close_preview_on_insert| to `1`. - - Either this setting or |g:ale_echo_cursor| must be set to `1` before ALE is - loaded for messages to be displayed. See |ale-lint-settings-on-startup|. - - -g:ale_default_navigation *g:ale_default_navigation* - *b:ale_default_navigation* - - Type: |String| - Default: `'buffer'` - - The default method for navigating away from the current buffer to another - buffer, such as for |ALEFindReferences|, or |ALEGoToDefinition|. - - -g:ale_detail_to_floating_preview *g:ale_detail_to_floating_preview* - *b:ale_detail_to_floating_preview* - Type: |Number| - Default: `0` - - When this option is set to `1`, Neovim or Vim with |popupwin| will use a - floating window for ALEDetail output. - - -g:ale_disable_lsp *g:ale_disable_lsp* - *b:ale_disable_lsp* - - Type: |Number| - Default: `0` - - When this option is set to `1`, ALE ignores all linters powered by LSP, - and also `tsserver`. - - Please see also |ale-lsp|. - - -g:ale_echo_cursor *g:ale_echo_cursor* - - Type: |Number| - Default: `1` - - When this option is set to `1`, a truncated message will be echoed when a - cursor is near a warning or error. ALE will attempt to find the warning or - error at a column nearest to the cursor when the cursor is resting on a line - which contains a warning or error. This option can be set to `0` to disable - this behavior. - - Messages are only displayed after a short delay. See |g:ale_echo_delay|. - - The format of the message can be customized with |g:ale_echo_msg_format|. - - Either this setting or |g:ale_cursor_detail| must be set to `1` before ALE - is loaded for messages to be displayed. See |ale-lint-settings-on-startup|. - - -g:ale_echo_delay *g:ale_echo_delay* - *b:ale_echo_delay* - Type: |Number| - Default: `10` - - Given any integer, this option controls the number of milliseconds before - ALE will echo or preview a message for a problem near the cursor. - - The value can be increased to decrease the amount of processing ALE will do - for files displaying a large number of problems. - - -g:ale_echo_msg_error_str *g:ale_echo_msg_error_str* - - Type: |String| - Default: `'Error'` - - The string used for `%severity%` for errors. See |g:ale_echo_msg_format| - - -g:ale_echo_msg_format *g:ale_echo_msg_format* - *b:ale_echo_msg_format* - - Type: |String| - Default: `'%code: %%s'` - - This variable defines a message format for echoed messages. The following - sequences of characters will be replaced. - - `%s` - replaced with the text for the problem - `%...code...% `- replaced with the error code - `%linter%` - replaced with the name of the linter - `%severity%` - replaced with the severity of the problem - - The strings for `%severity%` can be configured with the following options. - - |g:ale_echo_msg_error_str| - Defaults to `'Error'` - |g:ale_echo_msg_info_str| - Defaults to `'Info'` - |g:ale_echo_msg_warning_str| - Defaults to `'Warning'` - - `%code%` is replaced with the error code, and replaced with an empty string - when there is no error code. Any extra characters between the percent signs - will be printed when an error code is present. For example, a message like - `(error code): message` will be printed for `'%(code): %%s'` and simply the - message will be printed when there is no code. - - |g:ale_echo_cursor| needs to be set to 1 for messages to be displayed. - - The echo message format can also be configured separately for each buffer, - so different formats can be used for different languages. (Say in ftplugin - files.) - - -g:ale_echo_msg_info_str *g:ale_echo_msg_info_str* - - Type: |String| - Default: `'Info'` - - The string used for `%severity%` for info. See |g:ale_echo_msg_format| - - -g:ale_echo_msg_log_str *g:ale_echo_msg_log_str* - - Type: |String| - Default: `'Log'` - - The string used for `%severity%` for log, used only for handling LSP show - message requests. See |g:ale_lsp_show_message_format| - - -g:ale_echo_msg_warning_str *g:ale_echo_msg_warning_str* - - Type: |String| - Default: `'Warning'` - - The string used for `%severity%` for warnings. See |g:ale_echo_msg_format| - - -g:ale_enabled *g:ale_enabled* - *b:ale_enabled* - - Type: |Number| - Default: `1` - - When set to `0`, this option will completely disable ALE, such that no - error checking will be performed, etc. ALE can be toggled on and off with - the |ALEToggle| command, which changes this option. - - ALE can be disabled in each buffer by setting `let b:ale_enabled = 0` - Disabling ALE based on filename patterns can be accomplished by setting - a regular expression for |g:ale_pattern_options|. For example: > - - " Disable linting for all minified JS files. - let g:ale_pattern_options = {'\.min.js$': {'ale_enabled': 0}} -< - - See |g:ale_pattern_options| for more information on that option. - - -g:ale_exclude_highlights *g:ale_exclude_highlights* - *b:ale_exclude_highlights* - - Type: |List| - Default: `[]` - - A list of regular expressions for matching against highlight messages to - remove. For example: > - - " Do not highlight messages matching strings like these. - let b:ale_exclude_highlights = ['line too long', 'foo.*bar'] -< - See also: |g:ale_set_highlights| - - -g:ale_fixers *g:ale_fixers* - *b:ale_fixers* - - Type: |Dictionary| - Default: `{}` - - A mapping from filetypes to |List| values for functions for fixing errors. - See |ale-fix| for more information. - - This variable can be overridden with variables in each buffer. - `b:ale_fixers` can be set to a |List| of callbacks instead, which can be - more convenient. - - A special `'*'` key be used as a wildcard filetype for configuring fixers - for every other type of file. For example: > - - " Fix Python files with 'bar'. - " Don't fix 'html' files. - " Fix everything else with 'foo'. - let g:ale_fixers = {'python': ['bar'], 'html': [], '*': ['foo']} -< - -g:ale_fix_on_save *g:ale_fix_on_save* - *b:ale_fix_on_save* - - Type: |Number| - Default: `0` - - When set to 1, ALE will fix files when they are saved. - - If |g:ale_lint_on_save| is set to 1, files will be checked with linters - after files are fixed, only when the buffer is open, or re-opened. Changes - to the file will be saved to the file on disk. - - Files will not be fixed on `:wq`, so you should check your code before - closing a buffer. - - Fixing files can be disabled or enabled for individual buffers by setting - `b:ale_fix_on_save` to `0` or `1`. - - Some fixers can be excluded from being run automatically when you save files - with the |g:ale_fix_on_save_ignore| setting. - - -g:ale_fix_on_save_ignore *g:ale_fix_on_save_ignore* - *b:ale_fix_on_save_ignore* - - Type: |Dictionary| or |List| - Default: `{}` - - Given a |Dictionary| mapping filetypes to |Lists| of fixers to ignore, or - just a |List| of fixers to ignore, exclude those fixers from being run - automatically when files are saved. - - You can disable some fixers in your ftplugin file: > - - " Disable fixers 'b' and 'c' when fixing on safe for this buffer. - let b:ale_fix_on_save_ignore = ['b', 'c'] - " Alternatively, define ignore lists for different filetypes. - let b:ale_fix_on_save_ignore = {'foo': ['b'], 'bar': ['c']} -< - You can disable some fixers globally per filetype like so: > - - let g:ale_fixers = {'foo': ['a', 'b'], 'bar': ['c', 'd']} - let g:ale_fix_on_save = 1 - " For filetype `foo.bar`, only fixers 'b' and 'd' will be run on save. - let g:ale_fix_on_save_ignore = {'foo': ['a'], 'bar': ['c']} - " Alternatively, disable these fixers on save for all filetypes. - let g:ale_fix_on_save_ignore = ['a', 'c'] -< - You can ignore fixers based on matching |Funcref| values too: > - - let g:AddBar = {buffer, lines -> lines + ['bar']} - let g:ale_fixers = {'foo': g:AddBar} - " The lambda fixer will be ignored, as it will be found in the ignore list. - let g:ale_fix_on_save_ignore = [g:AddBar] -< - -g:ale_floating_preview *g:ale_floating_preview* - - Type: |Number| - Default: `0` - - When set to `1`, Neovim or Vim with |popupwin| will use a floating window - for ale's preview window. - This is equivalent to setting |g:ale_hover_to_floating_preview| and - |g:ale_detail_to_floating_preview| to `1`. - - -g:ale_floating_preview_popup_opts *g:ale_floating_preview_popup_opts* - - Type: |String| or |Dictionary| - Default: `''` - - Either a dictionary of options or the string name of a function that returns a - dictionary of options. This will be used as an argument to |popup_create| for - Vim users or |nvim_open_win| for NeoVim users. Note that in either case, the - resulting dictionary is merged with ALE defaults rather than expliciting overriding - them. This only takes effect if |g:ale_floating_preview| is enabled. - - NOTE: for Vim users see |popup_create-arguments|, for NeoVim users see - |nvim_open_win| for argument details - - For example, to enhance popups with a title: > - - function! CustomOpts() abort { - let [l:info, l:loc] = ale#util#FindItemAtCursor(bufnr('')) - return {'title': ' ALE: ' . (l:loc.linter_name) . ' '} - endfunction -< - - -g:ale_floating_window_border *g:ale_floating_window_border* - - Type: |List| - Default: `['|', '-', '+', '+', '+', '+', '|', '-']` - - When set to `[]`, window borders are disabled. The elements in the list set - the the characters for the left side, top, top-left corner, top-right - corner, bottom-right corner, bottom-left corner, right side, and bottom of - the floating window, respectively. - - If the terminal supports Unicode, you might try setting the value to - ` ['│', '─', '╭', '╮', '╯', '╰', '│', '─']`, to make it look nicer. - - NOTE: For compatibility with previous versions, if the list does not have - elements for the right side and bottom, the left side and top will be used - instead. - - -g:ale_history_enabled *g:ale_history_enabled* - - Type: |Number| - Default: `1` - - When set to `1`, ALE will remember the last few commands which were run - for every buffer which is open. This information can be viewed with the - |ALEInfo| command. The size of the buffer can be controlled with the - |g:ale_max_buffer_history_size| option. - - This option can be disabled if storing a command history is not desired. - - -g:ale_history_log_output *g:ale_history_log_output* - - Type: |Number| - Default: `1` - - When set to `1`, ALE will store the output of commands which have completed - successfully in the command history, and the output will be displayed when - using |ALEInfo|. - - |g:ale_history_enabled| must be set to `1` for this output to be stored or - printed. - - Some memory will be consumed by this option. It is very useful for figuring - out what went wrong with linters, and for bug reports. Turn this option off - if you want to save on some memory usage. - - -g:ale_hover_cursor *g:ale_hover_cursor* - - Type: |Number| - Default: `1` - - If set to `1`, ALE will show truncated information in the echo line about - the symbol at the cursor automatically when the |CursorHold| event is fired. - The delay before requesting hover information is based on 'updatetime', as - with all |CursorHold| events. - - If there's a problem on the line where the cursor is resting, ALE will not - show any hover information. - - See |ale-hover| for more information on hover information. - - This setting must be set to `1` before ALE is loaded for this behavior - to be enabled. See |ale-lint-settings-on-startup|. - - -g:ale_hover_to_preview *g:ale_hover_to_preview* - *b:ale_hover_to_preview* - Type: |Number| - Default: `0` - - If set to `1`, hover messages will be displayed in the preview window, - instead of in balloons or the message line. - - -g:ale_hover_to_floating_preview *g:ale_hover_to_floating_preview* - *b:ale_hover_to_floating_preview* - Type: |Number| - Default: `0` - - If set to `1`, Neovim or Vim with |popupwin| will use floating windows for - hover messages. - - -g:ale_keep_list_window_open *g:ale_keep_list_window_open* - *b:ale_keep_list_window_open* - Type: |Number| - Default: `0` - - When set to `1`, this option will keep the loclist or quickfix windows event - after all warnings/errors have been removed for files. By default the - loclist or quickfix windows will be closed automatically when there are no - warnings or errors. - - See |g:ale_open_list| - - -g:ale_list_window_size *g:ale_list_window_size* - *b:ale_list_window_size* - Type: |Number| - Default: `10` - - This number configures the number of lines to set for the height of windows - opened automatically for ALE problems. The default of `10` matches the Vim - default height. - - See |g:ale_open_list| for information on automatically opening windows - for quickfix or the loclist. - - -g:ale_lint_delay *g:ale_lint_delay* - *b:ale_lint_delay* - Type: |Number| - Default: `200` - - This variable controls the milliseconds delay after which the linters will - be run after text is changed. This option is only meaningful with the - |g:ale_lint_on_text_changed| variable set to `always`, `insert`, or `normal`. - - A buffer-local option, `b:ale_lint_delay`, can be set to change the delay - for different buffers, such as in |ftplugin| files. - - -g:ale_lint_on_enter *g:ale_lint_on_enter* - - Type: |Number| - Default: `1` - - When this option is set to `1`, the |BufWinEnter| event will be used to - apply linters when buffers are first opened. If this is not desired, this - variable can be set to `0` in your vimrc file to disable this behavior. - - The |FileChangedShellPost| and |BufEnter| events will be used to check if - files have been changed outside of Vim. If a file is changed outside of - Vim, it will be checked when it is next opened. - - You should set this setting once before ALE is loaded, and restart Vim if - you want to change your preferences. See |ale-lint-settings-on-startup|. - - -g:ale_lint_on_filetype_changed *g:ale_lint_on_filetype_changed* - - Type: |Number| - Default: `1` - - This option will cause ALE to run when the filetype for a file is changed - after a buffer has first been loaded. A short delay will be used before - linting will be done, so the filetype can be changed quickly several times - in a row, but resulting in only one lint cycle. - - You should set this setting once before ALE is loaded, and restart Vim if - you want to change your preferences. See |ale-lint-settings-on-startup|. - - -g:ale_lint_on_save *g:ale_lint_on_save* - - Type: |Number| - Default: `1` - - This option will make ALE run the linters whenever a file is saved when it - it set to `1` in your vimrc file. This option can be used in combination - with the |g:ale_lint_on_enter| and |g:ale_lint_on_text_changed| options to - make ALE only check files after that have been saved, if that is what is - desired. - - -g:ale_lint_on_text_changed *g:ale_lint_on_text_changed* - - Type: |String| - Default: `'normal'` - - This option controls how ALE will check your files as you make changes. - The following values can be used. - - `'always'`, `'1'`, or `1` - Check buffers on |TextChanged| or |TextChangedI|. - `'normal'` - Check buffers only on |TextChanged|. - `'insert'` - Check buffers only on |TextChangedI|. - `'never'`, `'0'`, or `0` - Never check buffers on changes. - - ALE will check buffers after a short delay, with a timer which resets on - each change. The delay can be configured by adjusting the |g:ale_lint_delay| - variable. - *ale-linting-interrupts-mapping* - - Due to a bug in Vim, ALE can interrupt mappings with pending key presses, - per |timeoutlen|. If this happens, follow the advice for enabling - |g:ale_lint_on_insert_leave| below, and set this option to `'normal'`, or - disable it entirely. - - You should set this setting once before ALE is loaded, and restart Vim if - you want to change your preferences. See |ale-lint-settings-on-startup|. - - -g:ale_lint_on_insert_leave *g:ale_lint_on_insert_leave* - *b:ale_lint_on_insert_leave* - - Type: |Number| - Default: `1` - - When set to `1` in your vimrc file, this option will cause ALE to run - linters when you leave insert mode. - - ALE will not lint files when you escape insert mode with |CTRL-C| by - default. You can make ALE lint files with this option when you use |CTRL-C| - with the following mapping. > - - " Make using Ctrl+C do the same as Escape, to trigger autocmd commands - inoremap -< - A buffer-local version of this setting `b:ale_lint_on_insert_leave` can be - set to `0` to disable linting when leaving insert mode. The setting must - be enabled globally to be enabled locally. - - You should set this setting once before ALE is loaded, and restart Vim if - you want to change your preferences. See |ale-lint-settings-on-startup|. - - -g:ale_linter_aliases *g:ale_linter_aliases* - *b:ale_linter_aliases* - Type: |Dictionary| - Default: `{}` - - The |g:ale_linter_aliases| option can be used to set aliases from one - filetype to another. A given filetype can be mapped to use the linters - run for another given filetype. - - This |Dictionary| will be merged with a default dictionary containing the - following values: > - - { - \ 'Dockerfile': 'dockerfile', - \ 'csh': 'sh', - \ 'javascriptreact': ['javascript', 'jsx'], - \ 'plaintex': 'tex', - \ 'ps1': 'powershell', - \ 'rmarkdown': 'r', - \ 'rmd': 'r', - \ 'systemverilog': 'verilog', - \ 'typescriptreact': ['typescript', 'tsx'], - \ 'vader': ['vim', 'vader'], - \ 'verilog_systemverilog': ['verilog_systemverilog', 'verilog'], - \ 'vimwiki': 'markdown', - \ 'vue': ['vue', 'javascript'], - \ 'xsd': ['xsd', 'xml'], - \ 'xslt': ['xslt', 'xml'], - \ 'zsh': 'sh', - \} -< - For example, if you wish to map a new filetype `'foobar'` to run the `'php'` - linters, you could set the following: > - - let g:ale_linter_aliases = {'foobar': 'php'} -< - When combined with the |g:ale_linters| option, the original filetype - (`'foobar'`) will be used for determining which linters to run, - not the aliased type (`'php'`). This allows an aliased type to run a - different set of linters from the type it is being mapped to. - - Passing a list of filetypes is also supported. Say you want to lint - javascript and css embedded in HTML (using linters that support that). - You could alias `html` like so: - - `let g:ale_linter_aliases = {'html': ['html', 'javascript', 'css']}` - - Note that `html` itself was included as an alias. That is because aliases - will override the original linters for the aliased filetype. - - Linter aliases can be configured in each buffer with buffer-local variables. - ALE will first look for aliases for filetypes in the `b:ale_linter_aliases` - variable, then `g:ale_linter_aliases`, and then a default Dictionary. - - `b:ale_linter_aliases` can be set to a |List| or a |String|, to tell ALE to - load the linters for specific filetypes for a given buffer. > - - let b:ale_linter_aliases = ['html', 'javascript', 'css'] - " OR, Alias a filetype to only a single filetype with a String. - let b:ale_linter_aliases = 'javascript' -< - No linters will be loaded when the buffer's filetype is empty. - - -g:ale_filename_mappings *g:ale_filename_mappings* - *b:ale_filename_mappings* - - Type: |Dictionary| or |List| - Default: `{}` - - Either a |Dictionary| mapping a linter or fixer name, as displayed in - |:ALEInfo|, to a |List| of two-item |List|s for filename mappings, or just a - |List| of two-item |List|s. When given some paths to files, the value of - this setting will be used to convert filenames on a local file system to - filenames on some remote file system, such as paths in a Docker image, - virtual machine, or network drive. - - For example: > - - let g:ale_filename_mappings = { - \ 'pylint': [ - \ ['/home/john/proj', '/data'], - \ ], - \} -< - With the above configuration, a filename such as `/home/john/proj/foo.py` - will be provided to the linter/fixer as `/data/foo.py`, and paths parsed - from linter results such as `/data/foo.py` will be converted back to - `/home/john/proj/foo.py`. - - You can use `*` as to apply a |List| of filename mappings to all other - linters or fixers not otherwise matched. > - - " Use one List of paths for pylint. - " Use another List of paths for everything else. - let g:ale_filename_mappings = { - \ 'pylint': [ - \ ['/home/john/proj', '/data'], - \ ], - \ '*': [ - \ ['/home/john/proj', '/other-data'], - \ ], - \} -< - If you just want every single linter or fixer to use the same filename - mapping, you can just use a |List|. > - - " Same as above, but for ALL linters and fixers. - let g:ale_filename_mappings = [ - \ ['/home/john/proj', '/data'], - \] -< - You can provide many such filename paths for multiple projects. Paths are - matched by checking if the start of a file path matches the given strings, - in a case-sensitive manner. Earlier entries in the |List| will be tried - before later entries when mapping to a given file system. - - Buffer-local options can be set to the same values to override the global - options, such as in |ftplugin| files. - - NOTE: Only fixers registered with a short name can support filename mapping - by their fixer names. See |ale-fix|. Filename mappings set for all tools by - using only a |List| for the setting will also be applied to fixers not in - the registry. - - NOTE: In order for this filename mapping to work correctly, linters and - fixers must exclusively determine paths to files to lint or fix via ALE - command formatting as per |ale-command-format-strings|, and paths parsed - from linter files must be provided in `filename` keys if a linter returns - results for more than one file at a time, as per |ale-loclist-format|. If - you discover a linter or fixer which does not behave properly, please report - it as an issue. - - If you are running a linter or fixer through Docker or another remote file - system, you may have to mount your temporary directory, which you can - discover with the following command: > - - :echo fnamemodify(tempname(), ':h:h') -< - You should provide a mapping from this temporary directory to whatever you - mount this directory to in Docker, or whatever remote file system you are - working with. - - You can inspect the filename mappings ALE will use with the - |ale#GetFilenameMappings()| function. - - -g:ale_linters *g:ale_linters* - *b:ale_linters* - Type: |Dictionary| - Default: `{}` - - The |g:ale_linters| option sets a |Dictionary| mapping a filetype to a - |List| of linter programs to be run when checking particular filetypes. - - This |Dictionary| will be merged with a default dictionary containing the - following values: > - - { - \ 'apkbuild': ['apkbuild_lint', 'secfixes_check'], - \ 'csh': ['shell'], - \ 'elixir': ['credo', 'dialyxir', 'dogma'], - \ 'go': ['gofmt', 'golint', 'gopls', 'govet'], - \ 'hack': ['hack'], - \ 'help': [], - \ 'inko': ['inko'], - \ 'json': ['jsonlint', 'spectral'], - \ 'json': ['jsonlint', 'spectral', 'vscodejson'], - \ 'json5': [], - \ 'jsonc': [], - \ 'perl': ['perlcritic'], - \ 'perl6': [], - \ 'python': ['flake8', 'mypy', 'pylint', 'pyright'], - \ 'rust': ['cargo', 'rls'], - \ 'spec': [], - \ 'text': [], - \ 'vader': ['vimls'], - \ 'vue': ['eslint', 'vls'], - \ 'zsh': ['shell'], - \ 'v': ['v'], - \ 'yaml': ['spectral', 'yaml-language-server', 'yamllint'], - \} -< - This option can be used to enable only a particular set of linters for a - file. For example, you can enable only `eslint` for JavaScript files: > - - let g:ale_linters = {'javascript': ['eslint']} -< - If you want to disable all linters for a particular filetype, you can pass - an empty list of linters as the value: > - - let g:ale_linters = {'javascript': []} -< - All linters will be run for unspecified filetypes. All available linters can - be enabled explicitly for a given filetype by passing the string `'all'`, - instead of a List. > - - let g:ale_linters = {'c': 'all'} -< - Linters can be configured in each buffer with buffer-local variables. ALE - will first look for linters for filetypes in the `b:ale_linters` variable, - then `g:ale_linters`, and then the default Dictionary mentioned above. - - `b:ale_linters` can be set to a List, or the string `'all'`. When linters - for two different filetypes share the same name, the first linter loaded - will be used. Any ambiguity can be resolved by using a Dictionary specifying - which linter to run for which filetype instead. > - - " Use ESLint for the buffer if the filetype includes 'javascript'. - let b:ale_linters = {'javascript': ['eslint'], 'html': ['tidy']} - " Use a List for the same setting. This will work in most cases. - let b:ale_linters = ['eslint', 'tidy'] - " Disable all linters for the buffer. - let b:ale_linters = [] - " Explicitly enable all available linters for the filetype. - let b:ale_linters = 'all' -< - ALE can be configured to disable all linters unless otherwise specified with - `g:ale_enabled` or `b:ale_enabled` with the option |g:ale_linters_explicit|. - - -g:ale_linters_explicit *g:ale_linters_explicit* - - Type: |Number| - Default: `0` - - When set to `1`, only the linters from |g:ale_linters| and |b:ale_linters| - will be enabled. The default behavior for ALE is to enable as many linters - as possible, unless otherwise specified. - - -g:ale_linters_ignore *g:ale_linters_ignore* - *b:ale_linters_ignore* - - Type: |Dictionary| or |List| - Default: `{}` - - Linters to ignore. Commands for ignored linters will not be run, and - diagnostics for LSP linters will be ignored. (See |ale-lsp|) - - This setting can be set to a |Dictionary| mapping filetypes to linter names, - just like |g:ale_linters|, to list linters to ignore. Ignore lists will be - applied after everything else. > - - " Select flake8 and pylint, and ignore pylint, so only flake8 is run. - let g:ale_linters = {'python': ['flake8', 'pylint']} - let g:ale_linters_ignore = {'python': ['pylint']} -< - This setting can be set to simply a |List| of linter names, which is - especially more convenient when using the setting in ftplugin files for - particular buffers. > - - " The same as above, in a ftplugin/python.vim. - let b:ale_linters = ['flake8', 'pylint'] - let b:ale_linters_ignore = ['pylint'] -< - -g:ale_list_vertical *g:ale_list_vertical* - *b:ale_list_vertical* - Type: |Number| - Default: `0` - - When set to `1`, this will cause ALE to open any windows (loclist or - quickfix) vertically instead of horizontally (|vert| |lopen|) or (|vert| - |copen|) - - -g:ale_loclist_msg_format *g:ale_loclist_msg_format* - *b:ale_loclist_msg_format* - - Type: |String| - Default: `g:ale_echo_msg_format` - - This option is the same as |g:ale_echo_msg_format|, but for formatting the - message used for the loclist and the quickfix list. - - The strings for configuring `%severity%` are also used for this option. - - -g:ale_lsp_show_message_format *g:ale_lsp_show_message_format* - - Type: |String| - Default: `'%severity%:%linter%: %s'` - - This variable defines the format that messages received from an LSP will - have when echoed. The following sequences of characters will be replaced. - - `%s` - replaced with the message text - `%linter%` - replaced with the name of the linter - `%severity%` - replaced with the severity of the message - - The strings for `%severity%` levels "error", "info" and "warning" are shared - with |g:ale_echo_msg_format|. Severity "log" is unique to - |g:ale_lsp_show_message_format| and it can be configured via - - |g:ale_echo_msg_log_str| - Defaults to `'Log'` - - Please note that |g:ale_lsp_show_message_format| *can not* be configured - separately for each buffer like |g:ale_echo_msg_format| can. - - -g:ale_lsp_show_message_severity *g:ale_lsp_show_message_severity* - - Type: |String| - Default: `'error'` - - This variable defines the minimum severity level an LSP message needs to be - displayed. Messages below this level are discarded; please note that - messages with `Log` severity level are always discarded. - - Possible values follow the LSP spec `MessageType` definition: - - `'error'` - Displays only errors. - `'warning'` - Displays errors and warnings. - `'information'` - Displays errors, warnings and infos - `'log'` - Same as `'information'` - `'disabled'` - Doesn't display any information at all. - - -g:ale_lsp_suggestions *g:ale_lsp_suggestions* - - Type: |Number| - Default: `0` - - If set to `1`, show hints/suggestions from LSP servers or tsserver, in - addition to warnings and errors. - - -g:ale_max_buffer_history_size *g:ale_max_buffer_history_size* - - Type: |Number| - Default: `20` - - This setting controls the maximum number of commands which will be stored in - the command history used for |ALEInfo|. Command history will be rotated in - a FIFO manner. If set to a number <= 0, then the history will be - continuously set to an empty |List|. - - History can be disabled completely with |g:ale_history_enabled|. - - -g:ale_max_signs *g:ale_max_signs* - *b:ale_max_signs* - Type: |Number| - Default: `-1` - - When set to any positive integer, ALE will not render any more than the - given number of signs for any one buffer. - - When set to `0`, no signs will be set, but sign processing will still be - done, so existing signs can be removed. - - When set to any other value, no limit will be imposed on the number of signs - set. - - For disabling sign processing, see |g:ale_set_signs|. - - -g:ale_maximum_file_size *g:ale_maximum_file_size* - *b:ale_maximum_file_size* - Type: |Number| - Default: undefined - - A maximum file size in bytes for ALE to check. If set to any positive - number, ALE will skip checking files larger than the given size. - - -g:ale_open_list *g:ale_open_list* - *b:ale_open_list* - Type: |Number| or |String| - Default: `0` - - When set to `1`, this will cause ALE to automatically open a window for the - loclist (|lopen|) or for the quickfix list instead if |g:ale_set_quickfix| - is `1`. (|copen|) - - When set to any higher numberical value, ALE will only open the window when - the number of warnings or errors are at least that many. - - When set to `'on_save'`, ALE will only open the loclist after buffers have - been saved. The list will be opened some time after buffers are saved and - any linter for a buffer returns results. - - The window will be kept open until all warnings or errors are cleared, - including those not set by ALE, unless |g:ale_keep_list_window_open| is set - to `1`, in which case the window will be kept open when no problems are - found. - - The window size can be configured with |g:ale_list_window_size|. - - Windows can be opened vertically with |g:ale_list_vertical|. - - If you want to close the loclist window automatically when the buffer is - closed, you can set up the following |autocmd| command: > - - augroup CloseLoclistWindowGroup - autocmd! - autocmd QuitPre * if empty(&buftype) | lclose | endif - augroup END - -< -g:ale_pattern_options *g:ale_pattern_options* - - Type: |Dictionary| - Default: undefined - - This option maps regular expression patterns to |Dictionary| values for - buffer variables. This option can be set to automatically configure - different settings for different files. For example: > - - " Use just ESLint for linting and fixing files which end in '.foo.js' - let g:ale_pattern_options = { - \ '\.foo\.js$': { - \ 'ale_linters': ['eslint'], - \ 'ale_fixers': ['eslint'], - \ }, - \} -< - See |b:ale_linters| and |b:ale_fixers| for information for those options. - - Filenames are matched with |match()|, and patterns depend on the |magic| - setting, unless prefixed with the special escape sequences like `'\v'`, etc. - The patterns can match any part of a filename. The absolute path of the - filename will be used for matching, taken from `expand('%:p')`. - - The options for every match for the filename will be applied, with the - pattern keys sorted in alphabetical order. Options for `'zebra'` will - override the options for `'alpha'` for a filename `alpha-zebra`. - - -g:ale_pattern_options_enabled *g:ale_pattern_options_enabled* - - Type: |Number| - Default: undefined - - This option can be used for disabling pattern options. If set to `0`, ALE - will not set buffer variables per |g:ale_pattern_options|. - - -g:ale_popup_menu_enabled *g:ale_popup_menu_enabled* - - Type: |Number| - Default: `has('gui_running')` - - When this option is set to `1`, ALE will show code actions and rename - capabilities in the right click mouse menu when there's a LSP server or - tsserver available. See |ale-refactor|. - - This feature is only supported in GUI versions of Vim. - - This setting must be set to `1` before ALE is loaded for this behavior - to be enabled. See |ale-lint-settings-on-startup|. - - -g:ale_rename_tsserver_find_in_comments *g:ale_rename_tsserver_find_in_comments* - - Type: |Number| - Default: `0` - - If enabled, this option will tell tsserver to find and replace text in - comments when calling |ALERename|. It can be enabled by settings the value - to `1`. - - -g:ale_rename_tsserver_find_in_strings *g:ale_rename_tsserver_find_in_strings* - - - Type: |Number| - Default: `0` - - If enabled, this option will tell tsserver to find and replace text in - strings when calling |ALERename|. It can be enabled by settings the value to - `1`. - - -g:ale_root *g:ale_root* - *b:ale_root* - - Type: |Dictionary| or |String| - Default: {} - - This option is used to determine the project root for a linter. If the value - is a |Dictionary|, it maps a linter to either a |String| containing the - project root or a |Funcref| to call to look up the root. The |Funcref| is - provided the buffer number as its argument. - - The buffer-specific variable may additionally be a string containing the - project root itself. - - If neither variable yields a result, a linter-specific function is invoked to - detect a project root. If this, too, yields no result, and the linter is an - LSP linter, it will not run. - - -g:ale_set_balloons *g:ale_set_balloons* - *b:ale_set_balloons* - - Type: |Number| or |String| - Default: `has('balloon_eval') && has('gui_running')` - - When this option is set to `1`, balloon messages will be displayed for - problems or hover information if available. - - Problems nearest to the line the mouse cursor is over will be displayed. If - there are no problems to show, and one of the linters is an LSP linter - supporting "Hover" information, per |ale-hover|, then brief information - about the symbol under the cursor will be displayed in a balloon. - - This option can be set to `'hover'` to only enable balloons for hover - message, so diagnostics are never shown in balloons. You may wish to - configure use this setting only in GUI Vim like so: > - - let g:ale_set_balloons = has('gui_running') ? 'hover' : 0 -< - - Balloons can be enabled for terminal versions of Vim that support balloons, - but some versions of Vim will produce strange mouse behavior when balloons - are enabled. To configure balloons for your terminal, you should first - configure your |ttymouse| setting, and then consider setting - `g:ale_set_balloons` to `1` before ALE is loaded. - - `b:ale_set_balloons` can be set to `0` to disable balloons for a buffer. - Balloons cannot be enabled for a specific buffer when not initially enabled - globally. - - Balloons will not be shown when |g:ale_enabled| or |b:ale_enabled| is `0`. - - -g:ale_set_balloons_legacy_echo *g:ale_set_balloons_legacy_echo* - *b:ale_set_balloons_legacy_echo* - Type: |Number| - Default: undefined - - If set to `1`, moving your mouse over documents in Vim will make ALE ask - `tsserver` or `LSP` servers for information about the symbol where the mouse - cursor is, and print that information into Vim's echo line. This is an - option for supporting older versions of Vim which do not properly support - balloons in an asynchronous manner. - - If your version of Vim supports the |balloon_show| function, then this - option does nothing meaningful. - - -g:ale_set_highlights *g:ale_set_highlights* - - Type: |Number| - Default: `has('syntax')` - - When this option is set to `1`, highlights will be set for problems. - - ALE will use the following highlight groups for problems: - - |ALEError| - Items with `'type': 'E'` - |ALEWarning| - Items with `'type': 'W'` - |ALEInfo.| - Items with `'type': 'I'` - |ALEStyleError| - Items with `'type': 'E'` and `'sub_type': 'style'` - |ALEStyleWarning| - Items with `'type': 'W'` and `'sub_type': 'style'` - - When |g:ale_set_signs| is set to `0`, the following highlights for entire - lines will be set. - - |ALEErrorLine| - All items with `'type': 'E'` - |ALEWarningLine| - All items with `'type': 'W'` - |ALEInfoLine| - All items with `'type': 'I'` - - Vim can only highlight the characters up to the last column in a buffer for - match highlights, whereas the line highlights when signs are enabled will - run to the edge of the screen. - - Highlights can be excluded with the |g:ale_exclude_highlights| option. - - -g:ale_set_loclist *g:ale_set_loclist* - - Type: |Number| - Default: `1` - - When this option is set to `1`, the |loclist| will be populated with any - warnings and errors which are found by ALE. This feature can be used to - implement jumping between errors through typical use of |lnext| and |lprev|. - - -g:ale_set_quickfix *g:ale_set_quickfix* - - Type: |Number| - Default: `0` - - When this option is set to `1`, the |quickfix| list will be populated with - any problems which are found by ALE, instead of the |loclist|. The loclist - will never be populated when this option is on. - - Problems from every buffer ALE has checked will be included in the quickfix - list, which can be checked with |:copen|. Problems will be de-duplicated. - - This feature should not be used in combination with tools for searching for - matches and commands like |:cfdo|, as ALE will replace the quickfix list - pretty frequently. If you wish to use such tools, you should populate the - loclist or use |ALEPopulateQuickfix| instead. - - -g:ale_set_signs *g:ale_set_signs* - - Type: |Number| - Default: `has('signs')` - - When this option is set to `1`, the |sign| column will be populated with - signs marking where problems appear in the file. - - ALE will use the following highlight groups for problems: - - |ALEErrorSign| - Items with `'type': 'E'` - |ALEWarningSign| - Items with `'type': 'W'` - |ALEInfoSign| - Items with `'type': 'I'` - |ALEStyleErrorSign| - Items with `'type': 'E'` and `'sub_type': 'style'` - |ALEStyleWarningSign| - Items with `'type': 'W'` and `'sub_type': 'style'` - - In addition to the style of the signs, the style of lines where signs appear - can be configured with the following highlights: - - |ALEErrorLine| - All items with `'type': 'E'` - |ALEWarningLine| - All items with `'type': 'W'` - |ALEInfoLine| - All items with `'type': 'I'` - - With Neovim 0.3.2 or higher, ALE can use the `numhl` option to highlight the - 'number' column. It uses the following highlight groups. - - |ALEErrorSignLineNr| - Items with `'type': 'E'` - |ALEWarningSignLineNr| - Items with `'type': 'W'` - |ALEInfoSignLineNr| - Items with `'type': 'I'` - |ALEStyleErrorSignLineNr| - Items with `'type': 'E'` and `'sub_type': 'style'` - |ALEStyleWarningSignLineNr| - Items with `'type': 'W'` and `'sub_type': 'style'` - - To enable line number highlighting |g:ale_sign_highlight_linenrs| must be - set to `1` before ALE is loaded. - - The markers for the highlights can be customized with the following options: - - |g:ale_sign_error| - |g:ale_sign_warning| - |g:ale_sign_info| - |g:ale_sign_style_error| - |g:ale_sign_style_warning| - - When multiple problems exist on the same line, the signs will take - precedence in the order above, from highest to lowest. - - To limit the number of signs ALE will set, see |g:ale_max_signs|. - - -g:ale_sign_priority *g:ale_sign_priority* - - Type: |Number| - Default: `30` - - From Neovim 0.4.0 and Vim 8.1, ALE can set sign priority to all signs. The - larger this value is, the higher priority ALE signs have over other plugin - signs. See |sign-priority| for further details on how priority works. - - -g:ale_shell *g:ale_shell* - *b:ale_shell* - - Type: |String| - Default: not set - - Override the shell used by ALE for executing commands. ALE uses 'shell' by - default, but falls back in `/bin/sh` if the default shell looks like `fish` - or `pwsh`, which are not compatible with all of the commands run by ALE. The - shell specified with this option will be used even if it might not work in - all cases. - - For Windows, ALE uses `cmd` when this option isn't set. Setting this option - will apply shell escaping to the command string, even on Windows. - - NOTE: Consider setting |g:ale_shell_arguments| if this option is defined. - - -g:ale_shell_arguments *g:ale_shell_arguments* - *b:ale_shell_arguments* - - Type: |String| - Default: not set - - This option specifies the arguments to use for executing a command with a - custom shell, per |g:ale_shell|. If this option is not set, 'shellcmdflag' - will be used instead. - - -g:ale_sign_column_always *g:ale_sign_column_always* - - Type: |Number| - Default: `0` - - By default, the sign gutter will disappear when all warnings and errors have - been fixed for a file. When this option is set to `1`, the sign column will - remain open. This can be preferable if you don't want the text in your file - to move around as you edit a file. - - -g:ale_sign_error *g:ale_sign_error* - - Type: |String| - Default: `'>>'` - - The sign for errors in the sign gutter. - - -g:ale_sign_info *g:ale_sign_info* - - Type: |String| - Default: `g:ale_sign_warning` - - The sign for "info" markers in the sign gutter. - - -g:ale_sign_style_error *g:ale_sign_style_error* - - Type: |String| - Default: `g:ale_sign_error` - - The sign for style errors in the sign gutter. - - -g:ale_sign_style_warning *g:ale_sign_style_warning* - - Type: |String| - Default: `g:ale_sign_warning` - - The sign for style warnings in the sign gutter. - - -g:ale_sign_offset *g:ale_sign_offset* - - Type: |Number| - Default: `1000000` - - This variable controls offset from which numeric IDs will be generated for - new signs. Signs cannot share the same ID values, so when two Vim plugins - set signs at the same time, the IDs have to be configured such that they do - not conflict with one another. If the IDs used by ALE are found to conflict - with some other plugin, this offset value can be changed, and hopefully both - plugins will work together. See |sign-place| for more information on how - signs are set. - - -g:ale_sign_warning *g:ale_sign_warning* - - Type: |String| - Default: `'--'` - - The sign for warnings in the sign gutter. - - -g:ale_sign_highlight_linenrs *g:ale_sign_highlight_linenrs* - - Type: |Number| - Default: `0` - - When set to `1`, this option enables highlighting problems on the 'number' - column in Vim versions that support `numhl` highlights. This option must be - configured before ALE is loaded. - - -g:ale_update_tagstack *g:ale_update_tagstack* - *b:ale_update_tagstack* - Type: |Number| - Default: `1` - - This option can be set to disable updating Vim's |tagstack| automatically. - - -g:ale_type_map *g:ale_type_map* - *b:ale_type_map* - Type: |Dictionary| - Default: `{}` - - This option can be set re-map problem types for linters. Each key in the - |Dictionary| should be the name of a linter, and each value must be a - |Dictionary| mapping problem types from one type to another. The following - types are supported: - - `'E'` - `{'type': 'E'}` - `'ES'` - `{'type': 'E', 'sub_type': 'style'}` - `'W'` - `{'type': 'W'}` - `'WS'` - `{'type': 'W', 'sub_type': 'style'}` - `'I'` - `{'type': 'I'}` - - For example, if you want to turn flake8 errors into warnings, you can write - the following: > - - let g:ale_type_map = {'flake8': {'ES': 'WS', 'E': 'W'}} -< - If you wanted to turn style errors and warnings into regular errors and - warnings, you can write the following: > - - let g:ale_type_map = {'flake8': {'ES': 'E', 'WS': 'W'}} -< - Type maps can be set per-buffer with `b:ale_type_map`. - - -g:ale_use_global_executables *g:ale_use_global_executables* - - Type: |Number| - Default: not set - - This option can be set to change the default for all `_use_global` options. - This option must be set before ALE is loaded, preferably in a vimrc file. - - See |ale-integrations-local-executables| for more information on those - options. - - -g:ale_virtualtext_cursor *g:ale_virtualtext_cursor* - - Type: |Number| - Default: `0` - - When this option is set to `1`, a message will be shown when a cursor is - near a warning or error. ALE will attempt to find the warning or error at a - column nearest to the cursor when the cursor is resting on a line which - contains a warning or error. This option can be set to `0` to disable this - behavior. - When this option is set to `2`, then all warnings will be shown for the - whole buffer, regardless of if the cursor is currently positioned in that - line. - - Messages are only displayed after a short delay. See |g:ale_virtualtext_delay|. - - Messages can be prefixed prefixed with a string. See |g:ale_virtualtext_prefix|. - - ALE will use the following highlight groups for problems: - - |ALEVirtualTextError| - Items with `'type': 'E'` - |ALEVirtualTextWarning| - Items with `'type': 'W'` - |ALEVirtualTextInfo| - Items with `'type': 'I'` - |ALEVirtualTextStyleError| - Items with `'type': 'E'` and `'sub_type': 'style'` - |ALEVirtualTextStyleWarning| - Items with `'type': 'W'` and `'sub_type': 'style'` - - -g:ale_virtualtext_delay *g:ale_virtualtext_delay* - *b:ale_virtualtext_delay* - - Type: |Number| - Default: `10` - - Given any integer, this option controls the number of milliseconds before - ALE will show a message for a problem near the cursor. - - The value can be increased to decrease the amount of processing ALE will do - for files displaying a large number of problems. - - -g:ale_virtualtext_prefix *g:ale_virtualtext_prefix* - - Type: |String| - Default: `'> '` - - Prefix to be used with |g:ale_virtualtext_cursor|. - -g:ale_virtualenv_dir_names *g:ale_virtualenv_dir_names* - *b:ale_virtualenv_dir_names* - - Type: |List| - Default: `['.env', '.venv', 'env', 've-py3', 've', 'virtualenv', 'venv']` - - A list of directory names to be used when searching upwards from Python - files to discover virtulenv directories with. - - For directory named `'foo'`, ALE will search for `'foo/bin/activate'` - (`foo\Scripts\activate\` on Windows) in all directories on and above the - directory containing the Python file to find virtualenv paths. - - -g:ale_warn_about_trailing_blank_lines *g:ale_warn_about_trailing_blank_lines* - *b:ale_warn_about_trailing_blank_lines* - - Type: |Number| - Default: `1` - - When this option is set to `1`, warnings about trailing blank lines will be - shown. - - This option behaves similarly to |g:ale_warn_about_trailing_whitespace|. - - -g:ale_warn_about_trailing_whitespace *g:ale_warn_about_trailing_whitespace* - *b:ale_warn_about_trailing_whitespace* - - Type: |Number| - Default: `1` - - When this option is set to `1`, warnings relating to trailing whitespace on - lines will be shown. If warnings are too irritating while editing buffers, - and you have configured Vim to automatically remove trailing whitespace, - you can disable these warnings by setting this option to `0`. - - Not all linters may respect this option. If a linter does not, please file a - bug report, and it may be possible to add such support. - - This option may be configured on a per buffer basis. - - -g:ale_windows_node_executable_path *g:ale_windows_node_executable_path* - *b:ale_windows_node_executable_path* - - Type: |String| - Default: `'node.exe'` - - This variable is used as the path to the executable to use for executing - scripts with Node.js on Windows. - - For Windows, any file with a `.js` file extension needs to be executed with - the node executable explicitly. Otherwise, Windows could try and open the - scripts with other applications, like a text editor. Therefore, these - scripts are executed with whatever executable is configured with this - setting. - - -------------------------------------------------------------------------------- -6.1. Highlights *ale-highlights* - -ALEError *ALEError* - - Default: `highlight link ALEError SpellBad` - - The highlight for highlighted errors. See |g:ale_set_highlights|. - - -ALEErrorLine *ALEErrorLine* - - Default: Undefined - - The highlight for an entire line where errors appear. Only the first - line for a problem will be highlighted. - - See |g:ale_set_signs| and |g:ale_set_highlights|. - - -ALEErrorSign *ALEErrorSign* - - Default: `highlight link ALEErrorSign error` - - The highlight for error signs. See |g:ale_set_signs|. - - -ALEErrorSignLineNr *ALEErrorSignLineNr* - - Default: `highlight link ALEErrorSignLineNr CursorLineNr` - - The highlight for error signs. See |g:ale_set_signs|. - - NOTE: This highlight is only available on Neovim 0.3.2 or higher. - - -ALEInfo *ALEInfo.* - *ALEInfo-highlight* - Default: `highlight link ALEInfo ALEWarning` - - The highlight for highlighted info messages. See |g:ale_set_highlights|. - - -ALEInfoSign *ALEInfoSign* - - Default: `highlight link ALEInfoSign ALEWarningSign` - - The highlight for info message signs. See |g:ale_set_signs|. - - -ALEInfoLine *ALEInfoLine* - - Default: Undefined - - The highlight for entire lines where info messages appear. Only the first - line for a problem will be highlighted. - - See |g:ale_set_signs| and |g:ale_set_highlights|. - - -ALEInfoSignLineNr *ALEInfoSignLineNr* - - Default: `highlight link ALEInfoSignLineNr CursorLineNr` - - The highlight for error signs. See |g:ale_set_signs|. - - NOTE: This highlight is only available on Neovim 0.3.2 or higher. - - -ALEStyleError *ALEStyleError* - - Default: `highlight link ALEStyleError ALEError` - - The highlight for highlighted style errors. See |g:ale_set_highlights|. - - -ALEStyleErrorSign *ALEStyleErrorSign* - - Default: `highlight link ALEStyleErrorSign ALEErrorSign` - - The highlight for style error signs. See |g:ale_set_signs|. - - -ALEStyleErrorSignLineNr *ALEStyleErrorSignLineNr* - - Default: `highlight link ALEStyleErrorSignLineNr CursorLineNr` - - The highlight for error signs. See |g:ale_set_signs|. - - NOTE: This highlight is only available on Neovim 0.3.2 or higher. - - -ALEStyleWarning *ALEStyleWarning* - - Default: `highlight link ALEStyleWarning ALEError` - - The highlight for highlighted style warnings. See |g:ale_set_highlights|. - - -ALEStyleWarningSign *ALEStyleWarningSign* - - Default: `highlight link ALEStyleWarningSign ALEWarningSign` - - The highlight for style warning signs. See |g:ale_set_signs|. - - -ALEStyleWarningSignLineNr *ALEStyleWarningSignLineNr* - - Default: `highlight link ALEStyleWarningSignLineNr CursorLineNr` - - The highlight for error signs. See |g:ale_set_signs|. - - NOTE: This highlight is only available on Neovim 0.3.2 or higher. - - -ALEVirtualTextError *ALEVirtualTextError* - - Default: `highlight link ALEVirtualTextError ALEError` - - The highlight for virtualtext errors. See |g:ale_virtualtext_cursor|. - - -ALEVirtualTextInfo *ALEVirtualTextInfo* - - Default: `highlight link ALEVirtualTextInfo ALEVirtualTextWarning` - - The highlight for virtualtext info. See |g:ale_virtualtext_cursor|. - - -ALEVirtualTextStyleError *ALEVirtualTextStyleError* - - Default: `highlight link ALEVirtualTextStyleError ALEVirtualTextError` - - The highlight for virtualtext style errors. See |g:ale_virtualtext_cursor|. - - -ALEVirtualTextStyleWarning *ALEVirtualTextStyleWarning* - - Default: `highlight link ALEVirtualTextStyleWarning ALEVirtualTextWarning` - - The highlight for virtualtext style warnings. See |g:ale_virtualtext_cursor|. - - -ALEVirtualTextWarning *ALEVirtualTextWarning* - - Default: `highlight link ALEVirtualTextWarning ALEWarning` - - The highlight for virtualtext errors. See |g:ale_virtualtext_cursor|. - - -ALEWarning *ALEWarning* - - Default: `highlight link ALEWarning SpellCap` - - The highlight for highlighted warnings. See |g:ale_set_highlights|. - - -ALEWarningLine *ALEWarningLine* - - Default: Undefined - - The highlight for entire lines where warnings appear. Only the first line - for a problem will be highlighted. - - See |g:ale_set_signs| and |g:ale_set_highlights|. - - -ALEWarningSign *ALEWarningSign* - - Default: `highlight link ALEWarningSign todo` - - The highlight for warning signs. See |g:ale_set_signs|. - - -ALEWarningSignLineNr *ALEWarningSignLineNr* - - Default: `highlight link ALEWarningSignLineNr CursorLineNr` - - The highlight for error signs. See |g:ale_set_signs|. - - NOTE: This highlight is only available on Neovim 0.3.2 or higher. - - -=============================================================================== -7. Linter/Fixer Options *ale-integration-options* - -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* - Type: |String| - Default: `'alex'` - - See |ale-integrations-local-executables| - - -g:ale_alex_use_global *g:ale_alex_use_global* - *b:ale_alex_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -------------------------------------------------------------------------------- -7.2. Options for cspell *ale-cspell-options* - -The options for `cspell` are shared between all filetypes, so options can be -configured only once. - -g:ale_cspell_executable *g:ale_cspell_executable* - *b:ale_cspell_executable* - Type: |String| - Default: `'cspell'` - - See |ale-integrations-local-executables| - - -g:ale_cspell_options *g:ale_cspell_options* - *b:ale_cspell_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to `cspell`. - - -g:ale_cspell_use_global *g:ale_cspell_use_global* - *b:ale_cspell_use_global* - Type: |Number| - Default: `get(g: 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -------------------------------------------------------------------------------- -7.3. Options for dprint *ale-dprint-options* - -`dprint` is a fixer for many file types, including: (java|type)script, -json(c?), markdown, and more. See https://dprint.dev/plugins for an up-to-date -list of supported plugins and their configuration options. - -g:ale_dprint_executable *g:ale_dprint_executable* - *b:ale_dprint_executable* - Type: |String| - Default: `'dprint'` - - See |ale-integrations-local-executables| - - -g:ale_dprint_config *g:ale_dprint_config* - *b:ale_dprint_config* - Type: |String| - Default: `'dprint.json'` - - This variable can be changed to provide a config file to `dprint`. The - default is the nearest `dprint.json` searching upward from the current - buffer. - - See https://dprint.dev/config and https://plugins.dprint.dev - - -g:ale_dprint_options *g:ale_dprint_options* - *b:ale_dprint_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to `dprint`. - - -g:ale_dprint_use_global *g:ale_dprint_use_global* - *b:ale_dprint_use_global* - Type: |Number| - Default: `get(g: 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -------------------------------------------------------------------------------- -7.4. Options for languagetool *ale-languagetool-options* - -g:ale_languagetool_executable *g:ale_languagetool_executable* - *b:ale_languagetool_executable* - - Type: |String| - Default: `'languagetool'` - - The executable to run for languagetool. - - -g:ale_languagetool_options *g:ale_languagetool_options* - *b:ale_languagetool_options* - Type: |String| - Default: `'--autoDetect'` - - This variable can be set to pass additional options to languagetool. - - -------------------------------------------------------------------------------- -7.5. Options for write-good *ale-write-good-options* - -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* - Type: |String| - Default: `'writegood'` - - See |ale-integrations-local-executables| - - -g:ale_writegood_options *g:ale_writegood_options* - *b:ale_writegood_options* - Type: |String| - Default: `''` - - This variable can be set to pass additional options to writegood. - - -g:ale_writegood_use_global *g:ale_writegood_use_global* - *b:ale_writegood_use_global* - Type: |Number| - Default: `get(g:, 'ale_use_global_executables', 0)` - - See |ale-integrations-local-executables| - - -------------------------------------------------------------------------------- -7.6. Other Linter/Fixer Options *ale-other-integration-options* - -ALE supports a very wide variety of tools. Other linter or fixer options are -documented in additional help files. - - ada.....................................|ale-ada-options| - cspell................................|ale-ada-cspell| - gcc...................................|ale-ada-gcc| - gnatpp................................|ale-ada-gnatpp| - ada-language-server...................|ale-ada-language-server| - ansible.................................|ale-ansible-options| - ansible-lint..........................|ale-ansible-ansible-lint| - apkbuild................................|ale-apkbuild-options| - apkbuild-lint.........................|ale-apkbuild-apkbuild-lint| - secfixes-check........................|ale-apkbuild-secfixes-check| - asciidoc................................|ale-asciidoc-options| - cspell................................|ale-asciidoc-cspell| - write-good............................|ale-asciidoc-write-good| - textlint..............................|ale-asciidoc-textlint| - asm.....................................|ale-asm-options| - gcc...................................|ale-asm-gcc| - avra....................................|ale-avra-options| - avra..................................|ale-avra-avra| - awk.....................................|ale-awk-options| - gawk..................................|ale-awk-gawk| - bats....................................|ale-bats-options| - shellcheck............................|ale-bats-shellcheck| - bazel...................................|ale-bazel-options| - buildifier............................|ale-bazel-buildifier| - bib.....................................|ale-bib-options| - bibclean..............................|ale-bib-bibclean| - bicep...................................|ale-bicep-options| - bicep.................................|ale-bicep-bicep| - bitbake.................................|ale-bitbake-options| - oelint-adv............................|ale-bitbake-oelint_adv| - c.......................................|ale-c-options| - astyle................................|ale-c-astyle| - cc....................................|ale-c-cc| - ccls..................................|ale-c-ccls| - clangd................................|ale-c-clangd| - clang-format..........................|ale-c-clangformat| - clangtidy.............................|ale-c-clangtidy| - cppcheck..............................|ale-c-cppcheck| - cquery................................|ale-c-cquery| - cspell................................|ale-c-cspell| - flawfinder............................|ale-c-flawfinder| - uncrustify............................|ale-c-uncrustify| - cairo...................................|ale-cairo-options| - starknet..............................|ale-cairo-starknet| - chef....................................|ale-chef-options| - cookstyle.............................|ale-chef-cookstyle| - foodcritic............................|ale-chef-foodcritic| - clojure.................................|ale-clojure-options| - clj-kondo.............................|ale-clojure-clj-kondo| - 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-lint............................|ale-cmake-cmake-lint| - cmake-format..........................|ale-cmake-cmakeformat| - cpp.....................................|ale-cpp-options| - astyle................................|ale-cpp-astyle| - cc....................................|ale-cpp-cc| - ccls..................................|ale-cpp-ccls| - clangcheck............................|ale-cpp-clangcheck| - clangd................................|ale-cpp-clangd| - 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| - cspell................................|ale-cpp-cspell| - flawfinder............................|ale-cpp-flawfinder| - uncrustify............................|ale-cpp-uncrustify| - c#......................................|ale-cs-options| - csc...................................|ale-cs-csc| - cspell................................|ale-cs-cspell| - dotnet-format.........................|ale-cs-dotnet-format| - mcs...................................|ale-cs-mcs| - mcsc..................................|ale-cs-mcsc| - uncrustify............................|ale-cs-uncrustify| - css.....................................|ale-css-options| - cspell................................|ale-css-cspell| - css-beautify..........................|ale-css-css-beautify| - fecs..................................|ale-css-fecs| - prettier..............................|ale-css-prettier| - stylelint.............................|ale-css-stylelint| - vscodecss.............................|ale-css-vscode| - cuda....................................|ale-cuda-options| - nvcc..................................|ale-cuda-nvcc| - clangd................................|ale-cuda-clangd| - clang-format..........................|ale-cuda-clangformat| - d.......................................|ale-d-options| - dfmt..................................|ale-d-dfmt| - dls...................................|ale-d-dls| - uncrustify............................|ale-d-uncrustify| - dafny...................................|ale-dafny-options| - dafny.................................|ale-dafny-dafny| - dart....................................|ale-dart-options| - analysis_server.......................|ale-dart-analysis_server| - dart-analyze..........................|ale-dart-analyze| - dart-format...........................|ale-dart-format| - dartfmt...............................|ale-dart-dartfmt| - desktop.................................|ale-desktop-options| - desktop-file-validate.................|ale-desktop-desktop-file-validate| - dhall...................................|ale-dhall-options| - dhall-format..........................|ale-dhall-format| - dhall-freeze..........................|ale-dhall-freeze| - dhall-lint............................|ale-dhall-lint| - dockerfile..............................|ale-dockerfile-options| - dockerfile_lint.......................|ale-dockerfile-dockerfile_lint| - dprint................................|ale-dockerfile-dprint| - 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| - credo.................................|ale-elixir-credo| - cspell................................|ale-elixir-cspell| - elm.....................................|ale-elm-options| - elm-format............................|ale-elm-elm-format| - elm-ls................................|ale-elm-elm-ls| - elm-make..............................|ale-elm-elm-make| - erlang..................................|ale-erlang-options| - dialyzer..............................|ale-erlang-dialyzer| - elvis.................................|ale-erlang-elvis| - erlc..................................|ale-erlang-erlc| - erlfmt................................|ale-erlang-erlfmt| - syntaxerl.............................|ale-erlang-syntaxerl| - eruby...................................|ale-eruby-options| - erblint...............................|ale-eruby-erblint| - ruumba................................|ale-eruby-ruumba| - fish....................................|ale-fish-options| - fish_indent...........................|ale-fish-fish_indent| - 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| - bingo.................................|ale-go-bingo| - cspell................................|ale-go-cspell| - gobuild...............................|ale-go-gobuild| - gofmt.................................|ale-go-gofmt| - gofumpt...............................|ale-go-gofumpt| - golangci-lint.........................|ale-go-golangci-lint| - golangserver..........................|ale-go-golangserver| - golines...............................|ale-go-golines| - golint................................|ale-go-golint| - gometalinter..........................|ale-go-gometalinter| - gopls.................................|ale-go-gopls| - govet.................................|ale-go-govet| - revive................................|ale-go-revive| - staticcheck...........................|ale-go-staticcheck| - 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| - prettier..............................|ale-handlebars-prettier| - ember-template-lint...................|ale-handlebars-embertemplatelint| - haskell.................................|ale-haskell-options| - brittany..............................|ale-haskell-brittany| - cspell................................|ale-haskell-cspell| - floskell..............................|ale-haskell-floskell| - ghc...................................|ale-haskell-ghc| - ghc-mod...............................|ale-haskell-ghc-mod| - cabal-ghc.............................|ale-haskell-cabal-ghc| - hdevtools.............................|ale-haskell-hdevtools| - hfmt..................................|ale-haskell-hfmt| - hindent...............................|ale-haskell-hindent| - hlint.................................|ale-haskell-hlint| - hls...................................|ale-haskell-hls| - stack-build...........................|ale-haskell-stack-build| - stack-ghc.............................|ale-haskell-stack-ghc| - stylish-haskell.......................|ale-haskell-stylish-haskell| - hie...................................|ale-haskell-hie| - ormolu................................|ale-haskell-ormolu| - hcl.....................................|ale-hcl-options| - packer-fmt............................|ale-hcl-packer-fmt| - terraform-fmt.........................|ale-hcl-terraform-fmt| - help....................................|ale-help-options| - cspell................................|ale-help-cspell| - html....................................|ale-html-options| - angular...............................|ale-html-angular| - cspell................................|ale-html-cspell| - fecs..................................|ale-html-fecs| - html-beautify.........................|ale-html-beautify| - htmlhint..............................|ale-html-htmlhint| - prettier..............................|ale-html-prettier| - stylelint.............................|ale-html-stylelint| - tidy..................................|ale-html-tidy| - vscodehtml............................|ale-html-vscode| - write-good............................|ale-html-write-good| - idris...................................|ale-idris-options| - idris.................................|ale-idris-idris| - ink.....................................|ale-ink-options| - ink-language-server...................|ale-ink-language-server| - inko....................................|ale-inko-options| - inko..................................|ale-inko-inko| - ispc....................................|ale-ispc-options| - ispc..................................|ale-ispc-ispc| - java....................................|ale-java-options| - checkstyle............................|ale-java-checkstyle| - cspell................................|ale-java-cspell| - javac.................................|ale-java-javac| - google-java-format....................|ale-java-google-java-format| - pmd...................................|ale-java-pmd| - javalsp...............................|ale-java-javalsp| - eclipselsp............................|ale-java-eclipselsp| - uncrustify............................|ale-java-uncrustify| - javascript..............................|ale-javascript-options| - cspell................................|ale-javascript-cspell| - deno..................................|ale-javascript-deno| - dprint................................|ale-javascript-dprint| - eslint................................|ale-javascript-eslint| - fecs..................................|ale-javascript-fecs| - 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| - cspell................................|ale-json-cspell| - dprint................................|ale-json-dprint| - eslint................................|ale-json-eslint| - fixjson...............................|ale-json-fixjson| - jsonlint..............................|ale-json-jsonlint| - jq....................................|ale-json-jq| - prettier..............................|ale-json-prettier| - spectral..............................|ale-json-spectral| - vscodejson............................|ale-json-vscode| - jsonc...................................|ale-jsonc-options| - eslint................................|ale-jsonc-eslint| - jsonnet.................................|ale-jsonnet-options| - jsonnetfmt............................|ale-jsonnet-jsonnetfmt| - jsonnet-lint..........................|ale-jsonnet-jsonnet-lint| - json5...................................|ale-json5-options| - eslint................................|ale-json5-eslint| - 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| - cspell................................|ale-latex-cspell| - 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| - cspell................................|ale-lua-cspell| - lua-format............................|ale-lua-lua-format| - luac..................................|ale-lua-luac| - luacheck..............................|ale-lua-luacheck| - luafmt................................|ale-lua-luafmt| - selene................................|ale-lua-selene| - stylua................................|ale-lua-stylua| - markdown................................|ale-markdown-options| - cspell................................|ale-markdown-cspell| - dprint................................|ale-markdown-dprint| - markdownlint..........................|ale-markdown-markdownlint| - mdl...................................|ale-markdown-mdl| - pandoc................................|ale-markdown-pandoc| - 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| - nim.....................................|ale-nim-options| - nimcheck..............................|ale-nim-nimcheck| - nimlsp................................|ale-nim-nimlsp| - nimpretty.............................|ale-nim-nimpretty| - nix.....................................|ale-nix-options| - nixfmt................................|ale-nix-nixfmt| - nixpkgs-fmt...........................|ale-nix-nixpkgs-fmt| - statix................................|ale-nix-statix| - 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| - dune..................................|ale-ocaml-dune| - merlin................................|ale-ocaml-merlin| - ocamllsp..............................|ale-ocaml-ocamllsp| - ols...................................|ale-ocaml-ols| - ocamlformat...........................|ale-ocaml-ocamlformat| - ocp-indent............................|ale-ocaml-ocp-indent| - openapi.................................|ale-openapi-options| - ibm_validator.........................|ale-openapi-ibm-validator| - prettier..............................|ale-openapi-prettier| - yamllint..............................|ale-openapi-yamllint| - openscad................................|ale-openscad-options| - sca2d.................................|ale-openscad-sca2d| - packer..................................|ale-packer-options| - packer-fmt-fixer......................|ale-packer-fmt-fixer| - pascal..................................|ale-pascal-options| - ptop..................................|ale-pascal-ptop| - 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| - cspell................................|ale-php-cspell| - 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| - pint..................................|ale-php-pint| - tlint.................................|ale-php-tlint| - intelephense..........................|ale-php-intelephense| - 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| - powershell..............................|ale-powershell-options| - cspell................................|ale-powershell-cspell| - powershell............................|ale-powershell-powershell| - psscriptanalyzer......................|ale-powershell-psscriptanalyzer| - prolog..................................|ale-prolog-options| - swipl.................................|ale-prolog-swipl| - proto...................................|ale-proto-options| - buf-format............................|ale-proto-buf-format| - buf-lint..............................|ale-proto-buf-lint| - protoc-gen-lint.......................|ale-proto-protoc-gen-lint| - protolint.............................|ale-proto-protolint| - 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| - purescript..............................|ale-purescript-options| - purescript-language-server............|ale-purescript-language-server| - purs-tidy.............................|ale-purescript-tidy| - purty.................................|ale-purescript-purty| - pyrex (cython)..........................|ale-pyrex-options| - cython................................|ale-pyrex-cython| - python..................................|ale-python-options| - autoflake.............................|ale-python-autoflake| - autoimport............................|ale-python-autoimport| - autopep8..............................|ale-python-autopep8| - bandit................................|ale-python-bandit| - black.................................|ale-python-black| - cspell................................|ale-python-cspell| - flake8................................|ale-python-flake8| - flakehell.............................|ale-python-flakehell| - isort.................................|ale-python-isort| - mypy..................................|ale-python-mypy| - prospector............................|ale-python-prospector| - pycodestyle...........................|ale-python-pycodestyle| - pydocstyle............................|ale-python-pydocstyle| - pyflakes..............................|ale-python-pyflakes| - pyflyby...............................|ale-python-pyflyby| - pylama................................|ale-python-pylama| - pylint................................|ale-python-pylint| - pylsp.................................|ale-python-pylsp| - pyre..................................|ale-python-pyre| - pyright...............................|ale-python-pyright| - reorder-python-imports................|ale-python-reorder_python_imports| - unimport..............................|ale-python-unimport| - vulture...............................|ale-python-vulture| - yapf..................................|ale-python-yapf| - qml.....................................|ale-qml-options| - qmlfmt................................|ale-qml-qmlfmt| - r.......................................|ale-r-options| - languageserver........................|ale-r-languageserver| - lintr.................................|ale-r-lintr| - styler................................|ale-r-styler| - reasonml................................|ale-reasonml-options| - merlin................................|ale-reasonml-merlin| - ols...................................|ale-reasonml-ols| - reason-language-server................|ale-reasonml-language-server| - refmt.................................|ale-reasonml-refmt| - rego....................................|ale-rego-options| - cspell................................|ale-rego-cspell| - opacheck..............................|ale-rego-opa-check| - opafmt................................|ale-rego-opa-fmt-fixer| - restructuredtext........................|ale-restructuredtext-options| - cspell................................|ale-restructuredtext-cspell| - textlint..............................|ale-restructuredtext-textlint| - write-good............................|ale-restructuredtext-write-good| - robot...................................|ale-robot-options| - rflint................................|ale-robot-rflint| - ruby....................................|ale-ruby-options| - brakeman..............................|ale-ruby-brakeman| - cspell................................|ale-ruby-cspell| - debride...............................|ale-ruby-debride| - prettier..............................|ale-ruby-prettier| - 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| - sorbet................................|ale-ruby-sorbet| - standardrb............................|ale-ruby-standardrb| - syntax_tree...........................|ale-ruby-syntax_tree| - rust....................................|ale-rust-options| - analyzer..............................|ale-rust-analyzer| - cargo.................................|ale-rust-cargo| - cspell................................|ale-rust-cspell| - rls...................................|ale-rust-rls| - rustc.................................|ale-rust-rustc| - rustfmt...............................|ale-rust-rustfmt| - salt....................................|ale-salt-options| - salt-lint.............................|ale-salt-salt-lint| - sass....................................|ale-sass-options| - sasslint..............................|ale-sass-sasslint| - stylelint.............................|ale-sass-stylelint| - scala...................................|ale-scala-options| - cspell................................|ale-scala-cspell| - metals................................|ale-scala-metals| - 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| - bashate...............................|ale-sh-bashate| - cspell................................|ale-sh-cspell| - 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| - solc..................................|ale-solidity-solc| - solhint...............................|ale-solidity-solhint| - solium................................|ale-solidity-solium| - spec....................................|ale-spec-options| - rpmlint...............................|ale-spec-rpmlint| - sql.....................................|ale-sql-options| - dprint................................|ale-sql-dprint| - pgformatter...........................|ale-sql-pgformatter| - sqlfmt................................|ale-sql-sqlfmt| - sqlformat.............................|ale-sql-sqlformat| - stylus..................................|ale-stylus-options| - stylelint.............................|ale-stylus-stylelint| - sugarss.................................|ale-sugarss-options| - stylelint.............................|ale-sugarss-stylelint| - svelte..................................|ale-svelte-options| - prettier..............................|ale-svelte-prettier| - svelteserver..........................|ale-svelte-svelteserver| - swift...................................|ale-swift-options| - apple-swift-format....................|ale-swift-apple-swift-format| - cspell................................|ale-swift-cspell| - sourcekitlsp..........................|ale-swift-sourcekitlsp| - systemd.................................|ale-systemd-options| - systemd-analyze.......................|ale-systemd-analyze| - tcl.....................................|ale-tcl-options| - nagelfar..............................|ale-tcl-nagelfar| - terraform...............................|ale-terraform-options| - checkov...............................|ale-terraform-checkov| - terraform-fmt-fixer...................|ale-terraform-fmt-fixer| - terraform.............................|ale-terraform-terraform| - terraform-ls..........................|ale-terraform-terraform-ls| - terraform-lsp.........................|ale-terraform-terraform-lsp| - tflint................................|ale-terraform-tflint| - tfsec.................................|ale-terraform-tfsec| - tex.....................................|ale-tex-options| - chktex................................|ale-tex-chktex| - cspell................................|ale-tex-cspell| - lacheck...............................|ale-tex-lacheck| - latexindent...........................|ale-tex-latexindent| - texlab................................|ale-tex-texlab| - texinfo.................................|ale-texinfo-options| - cspell................................|ale-texinfo-cspell| - write-good............................|ale-texinfo-write-good| - text....................................|ale-text-options| - cspell................................|ale-text-cspell| - textlint..............................|ale-text-textlint| - write-good............................|ale-text-write-good| - thrift..................................|ale-thrift-options| - thrift................................|ale-thrift-thrift| - thriftcheck...........................|ale-thrift-thriftcheck| - toml....................................|ale-toml-options| - dprint................................|ale-toml-dprint| - typescript..............................|ale-typescript-options| - cspell................................|ale-typescript-cspell| - deno..................................|ale-typescript-deno| - dprint................................|ale-typescript-dprint| - eslint................................|ale-typescript-eslint| - prettier..............................|ale-typescript-prettier| - standard..............................|ale-typescript-standard| - tslint................................|ale-typescript-tslint| - tsserver..............................|ale-typescript-tsserver| - xo....................................|ale-typescript-xo| - v.......................................|ale-v-options| - v.....................................|ale-v-v| - vfmt..................................|ale-v-vfmt| - vala....................................|ale-vala-options| - uncrustify............................|ale-vala-uncrustify| - verilog/systemverilog...................|ale-verilog-options| - hdl-checker...........................|ale-verilog-hdl-checker| - iverilog..............................|ale-verilog-iverilog| - verilator.............................|ale-verilog-verilator| - vlog..................................|ale-verilog-vlog| - xvlog.................................|ale-verilog-xvlog| - yosys.................................|ale-verilog-yosys| - vhdl....................................|ale-vhdl-options| - ghdl..................................|ale-vhdl-ghdl| - hdl-checker...........................|ale-vhdl-hdl-checker| - vcom..................................|ale-vhdl-vcom| - xvhdl.................................|ale-vhdl-xvhdl| - vim help................................|ale-vim-help-options| - write-good............................|ale-vim-help-write-good| - vim.....................................|ale-vim-options| - vimls.................................|ale-vim-vimls| - vint..................................|ale-vim-vint| - vue.....................................|ale-vue-options| - cspell................................|ale-vue-cspell| - prettier..............................|ale-vue-prettier| - vls...................................|ale-vue-vls| - volar.................................|ale-vue-volar| - wgsl....................................|ale-wgsl-options| - naga..................................|ale-wgsl-naga| - xhtml...................................|ale-xhtml-options| - cspell................................|ale-xhtml-cspell| - write-good............................|ale-xhtml-write-good| - xml.....................................|ale-xml-options| - xmllint...............................|ale-xml-xmllint| - yaml....................................|ale-yaml-options| - actionlint............................|ale-yaml-actionlint| - circleci..............................|ale-yaml-circleci| - prettier..............................|ale-yaml-prettier| - spectral..............................|ale-yaml-spectral| - swaglint..............................|ale-yaml-swaglint| - yaml-language-server..................|ale-yaml-language-server| - yamlfix...............................|ale-yaml-yamlfix| - yamllint..............................|ale-yaml-yamllint| - gitlablint............................|ale-yaml-gitlablint| - yang....................................|ale-yang-options| - yang-lsp..............................|ale-yang-lsp| - zeek....................................|ale-zeek-options| - zeek..................................|ale-zeek-zeek| - zig.....................................|ale-zig-options| - zigfmt................................|ale-zig-zigfmt| - zls...................................|ale-zig-zls| - - -=============================================================================== -8. Commands/Keybinds *ale-commands* - -ALEComplete *ALEComplete* - - Manually trigger LSP autocomplete and show the menu. Works only when called - from insert mode. > - - inoremap :ALEComplete -< - A plug mapping `(ale_complete)` is defined for this command. > - - imap (ale_complete) -< -ALEDocumentation *ALEDocumentation* - - Similar to the |ALEHover| command, retrieve documentation information for - the symbol at the cursor. Documentation data will always be shown in a - preview window, no matter how small the documentation content is. - - NOTE: This command is only available for `tsserver`. - - A plug mapping `(ale_documentation)` is defined for this command. - - -ALEFindReferences *ALEFindReferences* - - Find references in the codebase for the symbol under the cursor using the - enabled LSP linters for the buffer. ALE will display a preview window - containing the results if some references are found. - - The window can be navigated using the usual Vim navigation commands. The - Enter key (``) can be used to jump to a referencing location, or the `t` - key can be used to jump to the location in a new tab. - - The locations opened in different ways using the following variations. - - `:ALEFindReferences -tab` - Open the location in a new tab. - `:ALEFindReferences -split` - Open the location in a horizontal split. - `:ALEFindReferences -vsplit` - Open the location in a vertical split. - `:ALEFindReferences -quickfix` - Put the locations into quickfix list. - - The default method used for navigating to a new location can be changed - by modifying |g:ale_default_navigation|. - - You can add `-relative` to the command to view results with relatives paths, - instead of absolute paths. This option has no effect if `-quickfix` is used. - - The selection can be opened again with the |ALERepeatSelection| command. - - You can jump back to the position you were at before going to a reference of - something with jump motions like CTRL-O. See |jump-motions|. - - A plug mapping `(ale_find_references)` is defined for this command. - You can define additional plug mapping with any additional options you want - like so: > - - nnoremap (my_mapping) :ALEFindReferences -relative -< - -ALEFix *ALEFix* - - Fix problems with the current buffer. See |ale-fix| for more information. - - If the command is run with a bang (`:ALEFix!`), all warnings will be - suppressed, including warnings about no fixers being defined, and warnings - about not being able to apply fixes to a file because it has been changed. - - A plug mapping `(ale_fix)` is defined for this command. - - -ALEFixSuggest *ALEFixSuggest* - - Suggest tools that can be used to fix problems in the current buffer. - - See |ale-fix| for more information. - - -ALEGoToDefinition `` *ALEGoToDefinition* - - Jump to the definition of a symbol under the cursor using the enabled LSP - linters for the buffer. ALE will jump to a definition if an LSP server - provides a location to jump to. Otherwise, ALE will do nothing. - - The locations opened in different ways using the following variations. - - `:ALEGoToDefinition -tab` - Open the location in a new tab. - `:ALEGoToDefinition -split` - Open the location in a horizontal split. - `:ALEGoToDefinition -vsplit` - Open the location in a vertical split. - - The default method used for navigating to a new location can be changed - by modifying |g:ale_default_navigation|. - - You can jump back to the position you were at before going to the definition - of something with jump motions like CTRL-O. See |jump-motions|. - - You should consider using the 'hidden' option in combination with this - command. Otherwise, Vim will refuse to leave the buffer you're jumping from - unless you have saved your edits. - - The following Plug mappings are defined for this command, which correspond - to the following commands. - - `(ale_go_to_definition)` - `:ALEGoToDefinition` - `(ale_go_to_definition_in_tab)` - `:ALEGoToDefinition -tab` - `(ale_go_to_definition_in_split)` - `:ALEGoToDefinition -split` - `(ale_go_to_definition_in_vsplit)` - `:ALEGoToDefinition -vsplit` - - -ALEGoToTypeDefinition *ALEGoToTypeDefinition* - - This works similar to |ALEGoToDefinition| but instead jumps to the - definition of a type of a symbol under the cursor. ALE will jump to a - definition if an LSP server provides a location to jump to. Otherwise, ALE - will do nothing. - - The locations opened in different ways using the following variations. - - `:ALEGoToTypeDefinition -tab` - Open the location in a new tab. - `:ALEGoToTypeDefinition -split` - Open the location in a horizontal split. - `:ALEGoToTypeDefinition -vsplit` - Open the location in a vertical split. - - The default method used for navigating to a new location can be changed - by modifying |g:ale_default_navigation|. - - You can jump back to the position you were at before going to the definition - of something with jump motions like CTRL-O. See |jump-motions|. - - The following Plug mappings are defined for this command, which correspond - to the following commands. - - `(ale_go_to_type_definition)` - `:ALEGoToTypeDefinition` - `(ale_go_to_type_definition_in_tab)` - `:ALEGoToTypeDefinition -tab` - `(ale_go_to_type_definition_in_split)` - `:ALEGoToTypeDefinition -split` - `(ale_go_to_type_definition_in_vsplit)` - `:ALEGoToTypeDefinition -vsplit` - - -ALEGoToImplementation *ALEGoToImplementation* - - This works similar to |ALEGoToDefinition| but instead jumps to the - implementation of symbol under the cursor. ALE will jump to a definition if - an LSP server provides a location to jump to. Otherwise, ALE will do nothing. - - The locations opened in different ways using the following variations. - - `:ALEGoToImplementation -tab` - Open the location in a new tab. - `:ALEGoToImplementation -split` - Open the location in a horizontal split. - `:ALEGoToImplementation -vsplit` - Open the location in a vertical split. - - The default method used for navigating to a new location can be changed - by modifying |g:ale_default_navigation|. - - You can jump back to the position you were at before going to the definition - of something with jump motions like CTRL-O. See |jump-motions|. - - The following Plug mappings are defined for this command, which correspond - to the following commands. - - `(ale_go_to_implementation)` - `:ALEGoToImplementation` - `(ale_go_to_implementation_in_tab)` - `:ALEGoToImplementation -tab` - `(ale_go_to_implementation_in_split)` - `:ALEGoToImplementation -split` - `(ale_go_to_implementation_in_vsplit)` - `:ALEGoToImplementation -vsplit` - - -ALEHover *ALEHover* - - Print brief information about the symbol under the cursor, taken from any - available LSP linters. There may be a small non-blocking delay before - information is printed. - - NOTE: In Vim 8, long messages will be shown in a preview window, as Vim 8 - does not support showing a prompt to press enter to continue for long - messages from asynchronous callbacks. - - A plug mapping `(ale_hover)` is defined for this command. - - -ALEImport *ALEImport* - - Try to import a symbol using `tsserver` or a Language Server. - - ALE will look for completions for the word at the cursor which contain - additional text edits that possible insert lines to import the symbol. The - first match with additional text edits will be used, and may add other code - to the current buffer other than import lines. - - If linting is enabled, and |g:ale_lint_on_text_changed| is set to ever check - buffers when text is changed, the buffer will be checked again after changes - are made. - - A Plug mapping `(ale_import)` is defined for this command. This - mapping should only be bound for normal mode. - - -ALEOrganizeImports *ALEOrganizeImports* - - Organize imports using tsserver. Currently not implemented for LSPs. - - -ALERename *ALERename* - - Rename a symbol using `tsserver` or a Language Server. - - The symbol where the cursor is resting will be the symbol renamed, and a - prompt will open to request a new name. - - The rename operation will save all modified buffers when `set nohidden` is - set, because that disables leaving unsaved buffers in the background. See - `:help hidden` for more details. - -ALEFileRename *ALEFileRename* - - Rename a file and fix imports using `tsserver`. - -ALECodeAction *ALECodeAction* - - Apply a code action via LSP servers or `tsserver`. - - If there is an error present on a line that can be fixed, ALE will - automatically fix a line, unless there are multiple possible code fixes to - apply. - - This command can be run in visual mode apply actions, such as applicable - refactors. A menu will be shown to select code action to apply. - - -ALERepeatSelection *ALERepeatSelection* - - Repeat the last selection displayed in the preview window. - - -ALESymbolSearch `` *ALESymbolSearch* - - Search for symbols in the workspace, taken from any available LSP linters. - - The arguments provided to this command will be used as a search query for - finding symbols in the workspace, such as functions, types, etc. - - You can add `-relative` to the command to view results with relatives paths, - instead of absolute paths. - - *:ALELint* -ALELint *ALELint* - - Run ALE once for the current buffer. This command can be used to run ALE - manually, instead of automatically, if desired. - - This command will also run linters where `lint_file` is evaluates to `1`, - meaning linters which check the file instead of the Vim buffer. - - A plug mapping `(ale_lint)` is defined for this command. - - -ALELintStop *ALELintStop* - - Stop any currently running jobs for checking the current buffer. - - Any problems from previous linter results will continue to be shown. - - -ALEPopulateQuickfix *ALEPopulateQuickfix* -ALEPopulateLocList *ALEPopulateLocList* - - Manually populate the |quickfix| or |location-list| and show the - corresponding list. Useful when you have other uses for both the |quickfix| - and |location-list| and don't want them automatically populated. Be sure to - disable auto populating: > - - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 0 -< - With these settings, ALE will still run checking and display it with signs, - highlighting, and other output described in |ale-lint-file-linters|. - -ALEPrevious *ALEPrevious* -ALEPreviousWrap *ALEPreviousWrap* -ALENext *ALENext* -ALENextWrap *ALENextWrap* -ALEFirst *ALEFirst* -ALELast *ALELast* - *ale-navigation-commands* - - Move between warnings or errors in a buffer. ALE will only navigate between - the errors or warnings it generated, even if both |g:ale_set_quickfix| - and |g:ale_set_loclist| are set to `0`. - - `ALEPrevious` and `ALENext` will stop at the top and bottom of a file, while - `ALEPreviousWrap` and `ALENextWrap` will wrap around the file to find - the last or first warning or error in the file, respectively. - - `ALEPrevious` and `ALENext` take optional flags arguments to custom their - behavior : - `-wrap` enable wrapping around the file - `-error`, `-warning` and `-info` enable jumping to errors, warnings or infos - respectively, ignoring anything else. They are mutually exclusive and if - several are provided the priority is the following: error > warning > info. - `-style` and `-nostyle` allow you to jump respectively to style error or - warning and to not style error or warning. They also are mutually - exclusive and nostyle has priority over style. - - Flags can be combined to create create custom jumping. Thus you can use - ":ALENext -wrap -error -nosyle" to jump to the next error which is not a - style error while going back to the beginning of the file if needed. - - `ALEFirst` goes to the first error or warning in the buffer, while `ALELast` - goes to the last one. - - The following || mappings are defined for the commands: > - (ale_previous) - ALEPrevious - (ale_previous_wrap) - ALEPreviousWrap - (ale_previous_error) - ALEPrevious -error - (ale_previous_wrap_error) - ALEPrevious -wrap -error - (ale_previous_warning) - ALEPrevious -warning - (ale_previous_wrap_warning) - ALEPrevious -wrap -warning - (ale_next) - ALENext - (ale_next_wrap) - ALENextWrap - (ale_next_error) - ALENext -error - (ale_next_wrap_error) - ALENext -wrap -error - (ale_next_warning) - ALENext -warning - (ale_next_wrap_warning) - ALENext -wrap -warning - (ale_first) - ALEFirst - (ale_last) - ALELast -< - For example, these commands could be bound to the keys Ctrl + j - and Ctrl + k: > - - " Map movement through errors without wrapping. - nmap (ale_previous) - nmap (ale_next) - " OR map keys to use wrapping. - nmap (ale_previous_wrap) - nmap (ale_next_wrap) -< - -ALEToggle *ALEToggle* -ALEEnable *ALEEnable* -ALEDisable *ALEDisable* -ALEToggleBuffer *ALEToggleBuffer* -ALEEnableBuffer *ALEEnableBuffer* -ALEDisableBuffer *ALEDisableBuffer* - - `ALEToggle`, `ALEEnable`, and `ALEDisable` enable or disable ALE linting, - including all of its autocmd events, loclist items, quickfix items, signs, - current jobs, etc., globally. Executing any of these commands will change - the |g:ale_enabled| variable. - - ALE can be disabled or enabled for only a single buffer with - `ALEToggleBuffer`, `ALEEnableBuffer`, and `ALEDisableBuffer`. Disabling ALE - for a buffer will not remove autocmd events, but will prevent ALE from - checking for problems and reporting problems for whatever buffer the - `ALEDisableBuffer` or `ALEToggleBuffer` command is executed from. These - commands can be used for temporarily disabling ALE for a buffer. These - commands will modify the |b:ale_enabled| variable. - - ALE linting cannot be enabled for a single buffer when it is disabled - globally, as disabling ALE globally removes the autocmd events needed to - perform linting with. - - The following plug mappings are defined, for conveniently defining keybinds: - - |ALEToggle| - `(ale_toggle)` - |ALEEnable| - `(ale_enable)` - |ALEDisable| - `(ale_disable)` - |ALEToggleBuffer| - `(ale_toggle_buffer)` - |ALEEnableBuffer| - `(ale_enable_buffer)` - |ALEDisableBuffer| - `(ale_disable_buffer)` - - For removing problems reported by ALE, but leaving ALE enabled, see - |ALEReset| and |ALEResetBuffer|. - - *:ALEDetail* -ALEDetail *ALEDetail* - - Show the full linter message for the problem nearest to the cursor on the - given line in the preview window. The preview window can be easily closed - with the `q` key. If there is no message to show, the window will not be - opened. - - If a loclist item has a `detail` key set, the message for that key will be - preferred over `text`. See |ale-loclist-format|. - - A plug mapping `(ale_detail)` is defined for this command. - - - *:ALEInfo* -ALEInfo *ALEInfo* -ALEInfoToClipboard *ALEInfoToClipboard* - - Print runtime information about ALE, including the values of global and - buffer-local settings for ALE, the linters that are enabled, the commands - that have been run, and the output of commands. - - ALE will log the commands that are run by default. If you wish to disable - this, set |g:ale_history_enabled| to `0`. Because it could be expensive, ALE - does not remember the output of recent commands by default. Set - |g:ale_history_log_output| to `1` to enable logging of output for commands. - ALE will only log the output captured for parsing problems, etc. - - The command `:ALEInfoToClipboard` can be used to output ALEInfo directly to - your clipboard. This might not work on every machine. - - `:ALEInfoToFile` will write the ALE runtime information to a given filename. - The filename works just like |:w|. - - -ALEReset *ALEReset* -ALEResetBuffer *ALEResetBuffer* - - `ALEReset` will remove all problems reported by ALE for all buffers. - `ALEResetBuffer` will remove all problems reported for a single buffer. - - Either command will leave ALE linting enabled, so ALE will report problems - when linting is performed again. See |ale-lint| for more information. - - The following plug mappings are defined, for conveniently defining keybinds: - - |ALEReset| - `(ale_reset)` - |ALEResetBuffer| - `(ale_reset_buffer)` - - ALE can be disabled globally or for a buffer with |ALEDisable| or - |ALEDisableBuffer|. - - -ALEStopAllLSPs *ALEStopAllLSPs* - - `ALEStopAllLSPs` will close and stop all channels and jobs for all LSP-like - clients, including tsserver, remove all of the data stored for them, and - delete all of the problems found for them, updating every linted buffer. - - This command can be used when LSP clients mess up and need to be restarted. - - -=============================================================================== -9. API *ale-api* - -ALE offers a number of functions for running linters or fixers, or defining -them. The following functions are part of the publicly documented part of that -API, and should be expected to continue to work. - - -ale#Env(variable_name, value) *ale#Env()* - - Given a variable name and a string value, produce a string for including in - a command for setting environment variables. This function can be used for - building a command like so. > - - :echo string(ale#Env('VAR', 'some value') . 'command') - 'VAR=''some value'' command' # On Linux or Mac OSX - 'set VAR="some value" && command' # On Windows - - -ale#GetFilenameMappings(buffer, name) *ale#GetFilenameMappings()* - - Given a `buffer` and the `name` of either a linter for fixer, return a - |List| of two-item |List|s that describe mapping to and from the local and - foreign file systems for running a particular linter or fixer. - - See |g:ale_filename_mappings| for details on filename mapping. - - -ale#Has(feature) *ale#Has()* - - Return `1` if ALE supports a given feature, like |has()| for Vim features. - - ALE versions can be checked with version strings in the format - `ale#Has('ale-x.y.z')`, such as `ale#Has('ale-2.4.0')`. - - -ale#Pad(string) *ale#Pad()* - - Given a string or any |empty()| value, return either the string prefixed - with a single space, or an empty string. This function can be used to build - parts of a command from variables. - - -ale#Queue(delay, [linting_flag, buffer_number]) *ale#Queue()* - - Run linters for the current buffer, based on the filetype of the buffer, - with a given `delay`. A `delay` of `0` will run the linters immediately. - The linters will always be run in the background. Calling this function - again from the same buffer - - An optional `linting_flag` argument can be given. If `linting_flag` is - `'lint_file'`, then linters where the `lint_file` option evaluates to `1` - will be run. Otherwise, those linters will not be run. - - An optional `buffer_number` argument can be given for specifying the buffer - to check. The active buffer (`bufnr('')`) will be checked by default. - - *ale-cool-down* - If an exception is thrown when queuing/running ALE linters, ALE will enter - a cool down period where it will stop checking anything for a short period - of time. This is to prevent ALE from seriously annoying users if a linter - is broken, or when developing ALE itself. - - -ale#command#CreateDirectory(buffer) *ale#command#CreateDirectory()* - - Create a new temporary directory with a unique name, and manage that - directory with |ale#command#ManageDirectory()|, so it will be removed as soon - as possible. - - It is advised to only call this function from a callback function for - returning a linter command to run. - - -ale#command#CreateFile(buffer) *ale#command#CreateFile()* - - Create a new temporary file with a unique name, and manage that file with - |ale#command#ManageFile()|, so it will be removed as soon as possible. - - It is advised to only call this function from a callback function for - returning a linter command to run. - - -ale#command#Run(buffer, command, callback, [options]) *ale#command#Run()* - - Start running a job in the background, and pass the results to the given - callback later. - - This function can be used for computing the results of ALE linter or fixer - functions asynchronously with jobs. `buffer` must match the buffer being - linted or fixed, `command` must be a |String| for a shell command to - execute, `callback` must be defined as a |Funcref| to call later with the - results, and an optional |Dictionary| of `options` can be provided. - - The `callback` will receive the arguments `(buffer, output, metadata)`, - where the `buffer` will match the buffer given to the function, the `output` - will be a `List` of lines of output from the job that was run, and the - `metadata` will be a |Dictionary| with additional information about the job - that was run, including: - - `exit_code` - A |Number| with the exit code for the program that was run. - - The result of this function is either a special |Dictionary| ALE will use - for waiting for the command to finish, or `0` if the job is not started. The - The return value of the `callback` will be used as the eventual result for - whatever value is being given to ALE. For example: > - - function! s:GetCommand(buffer, output, meta) abort - " Do something with a:output here, from the foo command. - - " This is used as the command to run for linting. - return 'final command' - endfunction - - " ... - - 'command': {b -> ale#command#Run(b, 'foo', function('s:GetCommand'))} -< - The result of a callback can also be the result of another call to this - function, so that several commands can be arbitrarily chained together. For - example: > - - function! s:GetAnotherCommand(buffer, output, meta) abort - " We can finally return this command. - return 'last command' - endfunction - - function! s:GetCommand(buffer, output, meta) abort - " We can return another deferred result. - return ale#command#Run( - \ a:buffer, - \ 'second command', - \ function('s:GetAnotherCommand') - \) - endfunction - - " ... - - 'command': {b -> ale#command#Run(b, 'foo', function('s:GetCommand'))} -< - The following `options` can be provided. - - `cwd` - An optional |String| for setting the working directory - for the command, just as per |ale#linter#Define|. - - If not set, or `v:null`, the `cwd` of the last command - that spawned this one will be used. - - `output_stream` - Either `'stdout'`, `'stderr'`, `'both'`, or - `'none`' for selecting which output streams to read - lines from. - - The default is `'stdout'` - - `executable` - An executable for formatting into `%e` in the - command. If this option is not provided, formatting - commands with `%e` will not work. - - `read_buffer` - If set to `1`, the buffer will be piped into the - command. - - The default is `0`. - - `input` - When creating temporary files with `%t` or piping - text into a command `input` can be set to a |List| of - text to use instead of the buffer's text. - - `filename_mappings` - A |List| of two-item |List|s describing filename - mappings to apply for formatted filenames in the - command string, as per |g:ale_filename_mappings|. - - If the call to this function is being used for a - linter or fixer, the mappings should be provided with - this option, and can be retrieved easily with - |ale#GetFilenameMappings()|. - - The default is `[]`. - - - -ale#command#EscapeCommandPart(command_part) *ale#command#EscapeCommandPart()* - - Given a |String|, return a |String| with all `%` characters replaced with - `%%` instead. This function can be used to escape strings which are - dynamically generated for commands before handing them over to ALE, - so that ALE doesn't treat any strings with `%` formatting sequences - specially. - - -ale#command#ManageDirectory(buffer, directory) *ale#command#ManageDirectory()* - - Like |ale#command#ManageFile()|, but directories and all of their contents - will be deleted, akin to `rm -rf directory`, which could lead to loss of - data if mistakes are made. This command will also delete any temporary - filenames given to it. - - It is advised to use |ale#command#ManageFile()| instead for deleting single - files. - - -ale#command#ManageFile(buffer, filename) *ale#command#ManageFile()* - - Given a buffer number for a buffer currently running some linting or fixing - tasks and a filename, register a filename with ALE for automatic deletion - after linting or fixing is complete, or when Vim exits. - - If Vim exits suddenly, ALE will try its best to remove temporary files, but - ALE cannot guarantee with absolute certainty that the files will be removed. - It is advised to create temporary files in the operating system's managed - temporary file directory, such as with |tempname()|. - - Directory names should not be given to this function. ALE will only delete - files and symlinks given to this function. This is to prevent entire - directories from being accidentally deleted, say in cases of writing - `dir . '/' . filename` where `filename` is actually `''`, etc. ALE instead - manages directories separately with the |ale#command#ManageDirectory| function. - - -ale#completion#OmniFunc(findstart, base) *ale#completion#OmniFunc()* - - A completion function to use with 'omnifunc'. - - See |ale-completion|. - - -ale#engine#GetLoclist(buffer) *ale#engine#GetLoclist()* - - Given a buffer number, this function will return the list of problems - reported by ALE for a given buffer in the format accepted by |setqflist()|. - - A reference to the buffer's list of problems will be returned. The list must - be copied before applying |map()| or |filter()|. - - -ale#engine#IsCheckingBuffer(buffer) *ale#engine#IsCheckingBuffer()* - - Given a buffer number, returns `1` when ALE is busy checking that buffer. - - This function can be used for status lines, tab names, etc. - - -ale#fix#registry#Add(name, func, filetypes, desc, [aliases]) - *ale#fix#registry#Add()* - - Given a |String| `name` for a name to add to the registry, a |String| `func` - for a function name, a |List| `filetypes` for a list of filetypes to - set for suggestions, and a |String| `desc` for a short description of - the fixer, register a fixer in the registry. - - The `name` can then be used for |g:ale_fixers| in place of the function - name, and suggested for fixing files. - - An optional |List| of |String|s for aliases can be passed as the `aliases` - argument. These aliases can also be used for looking up a fixer function. - ALE will search for fixers in the registry first by `name`, then by their - `aliases`. - - For example to register a custom fixer for `luafmt`: > - - function! FormatLua(buffer) abort - return { - \ 'command': 'luafmt --stdin' - \} - endfunction - - execute ale#fix#registry#Add('luafmt', 'FormatLua', ['lua'], 'luafmt for lua') - - " You can now use it in g:ale_fixers - let g:ale_fixers = { - \ 'lua': ['luafmt'] - } -< - -ale#linter#Define(filetype, linter) *ale#linter#Define()* - - Given a |String| for a filetype and a |Dictionary| Describing a linter - configuration, add a linter for the given filetype. The dictionaries each - offer the following options: - - `name` The name of the linter. These names will be used by - |g:ale_linters| option for enabling/disabling - particular linters. - - This argument is required. - - `callback` A |String| or |Funcref| for a callback function - accepting two arguments (buffer, lines), for a - buffer number the output is for, and the lines of - output from a linter. - - This callback function should return a |List| of - |Dictionary| objects in the format accepted by - |setqflist()|. The |List| will be sorted by line and - then column order so it can be searched with a binary - search by in future before being passed on to the - |loclist|, etc. - - This argument is required, unless the linter is an - LSP linter. In which case, this argument must not be - defined, as LSP linters handle diagnostics - automatically. See |ale-lsp-linters|. - - If the function named does not exist, including if - the function is later deleted, ALE will behave as if - the callback returned an empty list. - - The keys for each item in the List will be handled in - the following manner: - *ale-loclist-format* - `text` - This error message is required. - `detail` - An optional, more descriptive message. - This message can be displayed with the |ALEDetail| - command instead of the message for `text`, if set. - `lnum` - The line number is required. Any strings - will be automatically converted to numbers by - using `str2nr()`. - - Line 0 will be moved to line 1, and lines beyond - the end of the file will be moved to the end. - `col` - The column number is optional and will - default to `0`. Any strings will be automatically - converted to number using `str2nr()`. - `end_col` - An optional end column number. - This key can be set to specify the column problems - end on, for improved highlighting. - `end_lnum` - An optional end line number. - This key can set along with `end_col` for - highlighting multi-line problems. - `bufnr` - This key represents the buffer number the - problems are for. This value will default to - the buffer number being checked. - - The `filename` key can be set instead of this key, - and then the eventual `bufnr` value in the final - list will either represent the number for an open - buffer or `-1` for a file not open in any buffer. - `filename` - An optional filename for the file the - problems are for. This should be an absolute path to - a file. - - Problems for files which have not yet been opened - will be set in those files after they are opened - and have been checked at least once. - - Temporary files in directories used for Vim - temporary files with `tempname()` will be assumed - to be the buffer being checked, unless the `bufnr` - key is also set with a valid number for some other - buffer. - `vcol` - Defaults to `0`. - - If set to `1`, ALE will convert virtual column - positions for `col` and `end_col` to byte column - positions. If the buffer is changed in-between - checking it and displaying the results, the - calculated byte column positions will probably be - wrong. - `type` - Defaults to `'E'`. - `nr` - Defaults to `-1`. - - Numeric error code. If `nr` is not `-1`, `code` - likely should contain the string representation of - the same value. - `code` - No default; may be unset. - - Human-readable |String| error code. - - `executable` A |String| naming the executable itself which - will be run, or a |Funcref| for a function to call - for computing the executable, accepting a buffer - number. - - The result can be computed with |ale#command#Run()|. - - This value will be used to check if the program - requested is installed or not. - - If an `executable` is not defined, the command will - be run without checking if a program is executable - first. Defining an executable path is recommended to - avoid starting too many processes. - - `command` A |String| for a command to run asynchronously, or a - |Funcref| for a function to call for computing the - command, accepting a buffer number. - - The result can be computed with |ale#command#Run()|. - - The command string can be formatted with format - markers. See |ale-command-format-strings|. - - This command will be fed the lines from the buffer to - check, and will produce the lines of output given to - the `callback`. - - `cwd` An optional |String| for setting the working - directory for the command, or a |Funcref| for a - function to call for computing the command, accepting - a buffer number. The working directory can be - specified as a format string for determining the path - dynamically. See |ale-command-format-strings|. - - To set the working directory to the directory - containing the file you're checking, you should - probably use `'%s:h'` as the option value. - - If this option is absent or the string is empty, the - `command` will be run with no determined working - directory in particular. - - The directory specified with this option will be used - as the default working directory for all commands run - in a chain with |ale#command#Run()|, unless otherwise - specified. - - `output_stream` A |String| for the output stream the lines of output - should be read from for the command which is run. The - accepted values are `'stdout'`, `'stderr'`, and - `'both'`. This argument defaults to `'stdout'`. This - argument can be set for linter programs which output - their errors and warnings to the stderr stream - instead of stdout. The option `'both'` will read - from both stder and stdout at the same time. - - `read_buffer` A |Number| (`0` or `1`) indicating whether a command - should read the Vim buffer as input via stdin. This - option is set to `1` by default, and can be disabled - if a command manually reads from a temporary file - instead, etc. - - This option behaves as if it was set to `0` when the - `lint_file` option evaluates to `1`. - - *ale-lint-file* - `lint_file` A |Number| (`0` or `1`), or a |Funcref| for a function - accepting a buffer number for computing either `0` or - `1`, indicating whether a command should read the file - instead of the Vim buffer. This option can be used - for linters which must check the file on disk, and - which cannot check a Vim buffer instead. - - The result can be computed with |ale#command#Run()|. - - Linters where the eventual value of this option - evaluates to `1` will not be run as a user types, per - |g:ale_lint_on_text_changed|. Linters will instead be - run only when events occur against the file on disk, - including |g:ale_lint_on_enter| and - |g:ale_lint_on_save|. Linters where this option - evaluates to `1` will also be run when the |ALELint| - command is run. - - When this option is evaluates to `1`, ALE will behave - as if `read_buffer` was set to `0`. - - *ale-lsp-linters* - `lsp` A |String| for defining LSP (Language Server Protocol) - linters. - - This argument may be omitted or `''` when a linter - does not represent an LSP linter. - - When this argument is set to `'stdio'`, then the - linter will be defined as an LSP linter which keeps a - process for a language server running, and - communicates with it directly via a |channel|. - `executable` and `command` must be set. - - When this argument is set to `'socket'`, then the - linter will be defined as an LSP linter via a TCP - or named pipe socket connection. `address` must be set. - - ALE will not start a server automatically. - - When this argument is not empty `project_root` must - be defined. - - `language` can be defined to describe the language - for a file. The filetype will be used as the language - by default. - - LSP linters handle diagnostics automatically, so - the `callback` argument must not be defined. - - An optional `completion_filter` callback may be - defined for filtering completion results. - - `initialization_options` may be defined to pass - initialization options to the LSP. - - `lsp_config` may be defined to pass configuration - settings to the LSP. - - `address` A |String| representing an address to connect to, - or a |Funcref| accepting a buffer number and - returning the |String|. If the value contains a - colon, it is interpreted as referring to a TCP - socket; otherwise it is interpreted as the path of a - named pipe. - - The result can be computed with |ale#command#Run()|. - - This argument must only be set if the `lsp` argument - is set to `'socket'`. - - `project_root` A |String| representing a path to the project for - the file being checked with the language server, or - a |Funcref| accepting a buffer number and returning - the |String|. - - If an empty string is returned, the file will not be - checked at all. - - This argument must only be set if the `lsp` argument - is also set to a non-empty string. - - `language` A |String| representing the name of the language - being checked, or a |Funcref| accepting a buffer - number and returning the |String|. This string will - be sent to the LSP to tell it what type of language - is being checked. - - If a language isn't provided, the language will - default to the value of the filetype given to - |ale#linter#Define|. - - `completion_filter` A |String| or |Funcref| for a callback function - accepting a buffer number and a completion item. - - The completion item will be a |Dictionary| following - the Language Server Protocol `CompletionItem` - interface as described in the specification, - available online here: - https://microsoft.github.io/language-server-protocol - - `aliases` A |List| of aliases for the linter name. - - This argument can be set with alternative names for - selecting the linter with |g:ale_linters|. This - setting can make it easier to guess the linter name - by offering a few alternatives. - - `initialization_options` A |Dictionary| of initialization options for LSPs, - or a |Funcref| for a callback function accepting - a buffer number and returning the |Dictionary|. - - This will be fed (as JSON) to the LSP in the - initialize command. - - `lsp_config` A |Dictionary| for configuring a language server, - or a |Funcref| for a callback function accepting - a buffer number and returning the |Dictionary|. - - This will be fed (as JSON) to the LSP in the - workspace/didChangeConfiguration command. - - If temporary files or directories are created for commands run with - `command`, then these temporary files or directories can be managed by ALE, - for automatic deletion. See |ale#command#ManageFile()| and - |ale#command#ManageDirectory| for more information. - - *ale-command-format-strings* - - All command strings will be formatted for special character sequences. - Any substring `%s` will be replaced with the full path to the current file - being edited. This format option can be used to pass the exact filename - being edited to a program. - - For example: > - 'command': 'eslint -f unix --stdin --stdin-filename %s' -< - Any substring `%t` will be replaced with a path to a temporary file. Merely - adding `%t` will cause ALE to create a temporary file containing the - contents of the buffer being checked. All occurrences of `%t` in command - strings will reference the one temporary file. The temporary file will be - created inside a temporary directory, and the entire temporary directory - will be automatically deleted, following the behavior of - |ale#command#ManageDirectory|. This option can be used for some linters which - do not support reading from stdin. - - For example: > - 'command': 'ghc -fno-code -v0 %t', -< - Any substring `%e` will be replaced with the escaped executable supplied - with `executable`. This provides a convenient way to define a command string - which needs to include a dynamic executable name, but which is otherwise - static. - - For example: > - 'command': '%e --some-argument', -< - The character sequence `%%` can be used to emit a literal `%` into a - command, so literal character sequences `%s` and `%t` can be escaped by - using `%%s` and `%%t` instead, etc. - - Some |filename-modifiers| can be applied to `%s` and `%t`. Only `:h`, `:t`, - `:r`, and `:e` may be applied, other modifiers will be ignored. Filename - modifiers can be applied to the format markers by placing them after them. - - For example: > - 'command': '%s:h %s:e %s:h:t', -< - Given a path `/foo/baz/bar.txt`, the above command string will generate - something akin to `'/foo/baz' 'txt' 'baz'` - - If a callback for a command generates part of a command string which might - possibly contain `%%`, `%s`, `%t`, or `%e`, where the special formatting - behavior is not desired, the |ale#command#EscapeCommandPart()| function can - be used to replace those characters to avoid formatting issues. - - *ale-linter-loading-behavior* - - Linters for ALE will be loaded by searching |runtimepath| in the following - format: > - - ale_linters//.vim -< - Any linters which exist anywhere in |runtimepath| with that directory - structure will be automatically loaded for the matching |filetype|. Filetypes - containing `.` characters will be split into individual parts, and files - will be loaded for each filetype between the `.` characters. - - Linters can be defined from vimrc and other files as long as this function - is loaded first. For example, the following code will define a Hello World - linter in vimrc in Vim 8: > - - " Plugins have to be loaded first. - " If you are using a plugin manager, run that first. - packloadall - - call ale#linter#Define('vim', { - \ 'name': 'echo-test', - \ 'executable': 'echo', - \ 'command': 'echo hello world', - \ 'callback': {buffer, lines -> map(lines, '{"text": v:val, "lnum": 1}')}, - \}) -< - -ale#linter#Get(filetype) *ale#linter#Get()* - - Return all of linters configured for a given filetype as a |List| of - |Dictionary| values in the format specified by |ale#linter#Define()|. - - Filetypes may be dot-separated to invoke linters for multiple filetypes: - for instance, the filetype `javascript.jsx` will return linters for both the - `javascript` and `jsx` filetype. - - Aliases may be defined in as described in |g:ale_linter_aliases|. Aliases - are applied after dot-separated filetypes are broken up into their - components. - - -ale#linter#PreventLoading(filetype) *ale#linter#PreventLoading()* - - Given a `filetype`, prevent any more linters from being loaded from - |runtimepath| for that filetype. This function can be called from vimrc or - similar to prevent ALE from loading linters. - - -ale#lsp_linter#SendRequest(buffer, linter_name, message, [Handler]) - *ale#lsp_linter#SendRequest()* - - Send a custom request to an LSP linter. The arguments are defined as - follows: - - `buffer` A valid buffer number. - - `linter_name` A |String| identifying an LSP linter that is available and - enabled for the |filetype| of `buffer`. - - `message` A |List| in the form `[is_notification, method, parameters]`, - containing three elements: - `is_notification` - an |Integer| that has value 1 if the - request is a notification, 0 otherwise; - `method` - a |String|, identifying an LSP method supported - by `linter`; - `parameters` - a |dictionary| of LSP parameters that are - applicable to `method`. - - `Handler` Optional argument, meaningful only when `message[0]` is 0. - A |Funcref| that is called when a response to the request is - received, and takes as unique argument a dictionary - representing the response obtained from the server. - - -ale#other_source#ShowResults(buffer, linter_name, loclist) - *ale#other_source#ShowResults()* - - Show results from another source of information. - - `buffer` must be a valid buffer number, and `linter_name` must be a unique - name for identifying another source of information. The `loclist` given - where the problems in a buffer are, and should be provided in the format ALE - uses for regular linter results. See |ale-loclist-format|. - - -ale#other_source#StartChecking(buffer, linter_name) - *ale#other_source#StartChecking()* - - Tell ALE that another source of information has started checking a buffer. - - `buffer` must be a valid buffer number, and `linter_name` must be a unique - name for identifying another source of information. - - -ale#statusline#Count(buffer) *ale#statusline#Count()* - - Given the number of a buffer which may have problems, return a |Dictionary| - containing information about the number of problems detected by ALE. The - following keys are supported: - - `error` -> The number of problems with type `E` and `sub_type != 'style'` - `warning` -> The number of problems with type `W` and `sub_type != 'style'` - `info` -> The number of problems with type `I` - `style_error` -> The number of problems with type `E` and `sub_type == 'style'` - `style_warning` -> The number of problems with type `W` and `sub_type == 'style'` - `total` -> The total number of problems. - - -ale#statusline#FirstProblem(buffer, type) *ale#statusline#FirstProblem()* - - Returns a copy of the first entry in the `loclist` that matches the supplied - buffer number and problem type. If there is no such entry, an empty dictionary - is returned. - Problem type should be one of the strings listed below: - - `error` -> Returns the first `loclist` item with type `E` and - `sub_type != 'style'` - `warning` -> First item with type `W` and `sub_type != 'style'` - `info` -> First item with type `I` - `style_error` -> First item with type `E` and `sub_type == 'style'` - `style_warning` -> First item with type `W` and `sub_type == 'style'` - - -b:ale_linted *b:ale_linted* - - `b:ale_linted` is set to the number of times a buffer has been checked by - ALE after all linters for one lint cycle have finished checking a buffer. - This variable may not be defined until ALE first checks a buffer, so it - should be accessed with |get()| or |getbufvar()|. For example: > - - " Print a message indicating how many times ALE has checked this buffer. - echo 'ALE has checked this buffer ' . get(b:, 'ale_linted') . ' time(s).' - " Print 'checked' using getbufvar() if a buffer has been checked. - echo getbufvar(bufnr(''), 'ale_linted', 0) > 0 ? 'checked' : 'not checked' -< - -g:ale_want_results_buffer *g:ale_want_results_buffer* - - `g:ale_want_results_buffer` is set to the number of the buffer being checked - when the |ALEWantResults| event is signaled. This variable should be read to - figure out which buffer other sources should lint. - - -ALECompletePost *ALECompletePost-autocmd* - *ALECompletePost* - - This |User| autocmd is triggered after ALE inserts an item on - |CompleteDone|. This event can be used to run commands after a buffer - is changed by ALE as the result of completion. For example, |ALEFix| can - be configured to run automatically when completion is done: > - - augroup FixAfterComplete - autocmd! - " Run ALEFix when completion items are added. - autocmd User ALECompletePost ALEFix! - " If ALE starts fixing a file, stop linters running for now. - autocmd User ALEFixPre ALELintStop - augroup END -< - -ALELintPre *ALELintPre-autocmd* - *ALELintPre* -ALELintPost *ALELintPost-autocmd* - *ALELintPost* -ALEFixPre *ALEFixPre-autocmd* - *ALEFixPre* -ALEFixPost *ALEFixPost-autocmd* - *ALEFixPost* - - These |User| autocommands are triggered before and after every lint or fix - cycle. They can be used to update statuslines, send notifications, etc. - The autocmd commands are run with |:silent|, so |:unsilent| is required for - echoing messges. - - For example to change the color of the statusline while the linter is - running: -> - augroup ALEProgress - autocmd! - autocmd User ALELintPre hi Statusline ctermfg=darkgrey - autocmd User ALELintPost hi Statusline ctermfg=NONE - augroup END -< - Or to display the progress in the statusline: -> - let s:ale_running = 0 - let l:stl .= '%{s:ale_running ? "[linting]" : ""}' - augroup ALEProgress - autocmd! - autocmd User ALELintPre let s:ale_running = 1 | redrawstatus - autocmd User ALELintPost let s:ale_running = 0 | redrawstatus - augroup END - -< -ALEJobStarted *ALEJobStarted-autocmd* - *ALEJobStarted* - - This |User| autocommand is triggered immediately after a job is successfully - run. This provides better accuracy for checking linter status with - |ale#engine#IsCheckingBuffer()| over |ALELintPre-autocmd|, which is actually - triggered before any linters are executed. - -ALELSPStarted *ALELSPStarted-autocmd* - *ALELSPStarted* - - This |User| autocommand is trigged immediately after an LSP connection is - successfully initialized. This provides a way to perform any additional - initialization work, such as setting up buffer-level mappings. - - -ALEWantResults *ALEWantResults-autocmd* - *ALEWantResults* - - This |User| autocommand is triggered before ALE begins a lint cycle. Another - source can respond by calling |ale#other_source#StartChecking()|, and - |ALELintPre| will be signaled thereafter, to allow other plugins to know - that another source is checking the buffer. - - |g:ale_want_results_buffer| will be set to the number for a buffer being - checked when the event is signaled, and deleted after the event is done. - This variable should be read to know which buffer to check. - - Other plugins can use this event to start checking buffers when ALE events - for checking buffers are triggered. - - -=============================================================================== -10. Special Thanks *ale-special-thanks* - -Special thanks to Mark Grealish (https://www.bhalash.com/) for providing ALE's -snazzy looking ale glass logo. Cheers, Mark! - -=============================================================================== -11. Contact *ale-contact* - -If you like this plugin, and wish to get in touch, check out the GitHub -page for issues and more at https://github.com/dense-analysis/ale - -If you wish to contact the author of this plugin directly, please feel -free to send an email to devw0rp@gmail.com. - -Please drink responsibly, or not at all, which is ironically the preference -of w0rp, who is teetotal. - -=============================================================================== - vim:tw=78:ts=2:sts=2:sw=2:ft=help:norl: diff --git a/dotfiles/.vim/plugged/ale/ftplugin/ale-fix-suggest.vim b/dotfiles/.vim/plugged/ale/ftplugin/ale-fix-suggest.vim deleted file mode 100644 index 189a4dc2..00000000 --- a/dotfiles/.vim/plugged/ale/ftplugin/ale-fix-suggest.vim +++ /dev/null @@ -1,2 +0,0 @@ -" Close the ALEFixSuggest window with the q key. -noremap q :q! diff --git a/dotfiles/.vim/plugged/ale/ftplugin/ale-preview-selection.vim b/dotfiles/.vim/plugged/ale/ftplugin/ale-preview-selection.vim deleted file mode 100644 index 7ec84068..00000000 --- a/dotfiles/.vim/plugged/ale/ftplugin/ale-preview-selection.vim +++ /dev/null @@ -1,16 +0,0 @@ -" Close the ALEPreviewWindow window with the q key. -noremap q :q! -" Disable some keybinds for the selection window. -noremap v -noremap i -noremap I -noremap -noremap -noremap -noremap a -noremap A -noremap o -noremap O -" Keybinds for opening selection items. -noremap :call ale#preview#OpenSelection() -noremap t :call ale#preview#OpenSelectionInTab() diff --git a/dotfiles/.vim/plugged/ale/ftplugin/ale-preview.vim b/dotfiles/.vim/plugged/ale/ftplugin/ale-preview.vim deleted file mode 100644 index ffbffbd5..00000000 --- a/dotfiles/.vim/plugged/ale/ftplugin/ale-preview.vim +++ /dev/null @@ -1,2 +0,0 @@ -" Close the ALEPreviewWindow window with the q key. -noremap q :q! diff --git a/dotfiles/.vim/plugged/ale/plugin/ale.vim b/dotfiles/.vim/plugged/ale/plugin/ale.vim deleted file mode 100644 index 4ba24c1d..00000000 --- a/dotfiles/.vim/plugged/ale/plugin/ale.vim +++ /dev/null @@ -1,353 +0,0 @@ -" Author: w0rp -" Description: Main entry point for the plugin: sets up prefs and autocommands -" Preferences can be set in vimrc files and so on to configure ale - -" Sanity Checks - -if exists('g:loaded_ale_dont_use_this_in_other_plugins_please') - finish -endif - -" Set a special flag used only by this plugin for preventing doubly -" loading the script. -let g:loaded_ale_dont_use_this_in_other_plugins_please = 1 - -" A flag for detecting if the required features are set. -if has('nvim') - let s:has_features = has('timers') && has('nvim-0.2.0') -else - " Check if Job and Channel functions are available, instead of the - " features. This works better on old MacVim versions. - let s:has_features = has('timers') && exists('*job_start') && exists('*ch_close_in') -endif - -if !s:has_features - " Only output a warning if editing some special files. - if index(['', 'gitcommit'], &filetype) == -1 - " no-custom-checks - echoerr 'ALE requires NeoVim >= 0.2.0 or Vim 8 with +timers +job +channel' - " no-custom-checks - echoerr 'Please update your editor appropriately.' - endif - - " Stop here, as it won't work. - finish -endif - -" Set this flag so that other plugins can use it, like airline. -let g:loaded_ale = 1 - -" This global variable is used internally by ALE for tracking information for -" each buffer which linters are being run against. -let g:ale_buffer_info = {} -" This global Dictionary tracks data for fixing code. Don't mess with it. -let g:ale_fix_buffer_data = {} - -" User Configuration - -" This option prevents ALE autocmd commands from being run for particular -" filetypes which can cause issues. -let g:ale_filetype_blacklist = [ -\ 'dirvish', -\ 'nerdtree', -\ 'qf', -\ 'tags', -\ 'unite', -\] - -" This Dictionary configures which linters are enabled for which languages. -let g:ale_linters = get(g:, 'ale_linters', {}) -" This option can be changed to only enable explicitly selected linters. -let g:ale_linters_explicit = get(g:, 'ale_linters_explicit', 0) - -" This Dictionary configures which functions will be used for fixing problems. -let g:ale_fixers = get(g:, 'ale_fixers', {}) - -" This Dictionary allows users to set up filetype aliases for new filetypes. -let g:ale_linter_aliases = get(g:, 'ale_linter_aliases', {}) - -" This flag can be set with a number of milliseconds for delaying the -" execution of a linter when text is changed. The timeout will be set and -" cleared each time text is changed, so repeated edits won't trigger the -" jobs for linting until enough time has passed after editing is done. -let g:ale_lint_delay = get(g:, 'ale_lint_delay', 200) - -" This flag can be set to 'never' to disable linting when text is changed. -" This flag can also be set to 'always' or 'insert' to lint when text is -" changed in both normal and insert mode, or only in insert mode respectively. -let g:ale_lint_on_text_changed = get(g:, 'ale_lint_on_text_changed', 'normal') - -" This flag can be set to 1 to enable linting when leaving insert mode. -let g:ale_lint_on_insert_leave = get(g:, 'ale_lint_on_insert_leave', 1) - -" This flag can be set to 0 to disable linting when the buffer is entered. -let g:ale_lint_on_enter = get(g:, 'ale_lint_on_enter', 1) - -" This flag can be set to 1 to enable linting when a buffer is written. -let g:ale_lint_on_save = get(g:, 'ale_lint_on_save', 1) - -" This flag can be set to 1 to enable linting when the filetype is changed. -let g:ale_lint_on_filetype_changed = get(g:, 'ale_lint_on_filetype_changed', 1) - -" If set to 1, hints and suggestion from LSP servers and tsserver will be shown. -let g:ale_lsp_suggestions = get(g:, 'ale_lsp_suggestions', 0) - -" This flag can be set to 1 to enable automatically fixing files on save. -let g:ale_fix_on_save = get(g:, 'ale_fix_on_save', 0) - -" This flag may be set to 0 to disable ale. After ale is loaded, :ALEToggle -" should be used instead. -let g:ale_enabled = get(g:, 'ale_enabled', 1) - -" A Dictionary mapping linter or fixer names to Arrays of two-item Arrays -" mapping filename paths from one system to another. -let g:ale_filename_mappings = get(g:, 'ale_filename_mappings', {}) - -" This Dictionary configures the default project roots for various linters. -let g:ale_root = get(g:, 'ale_root', {}) - -" These flags dictates if ale uses the quickfix or the loclist (loclist is the -" default, quickfix overrides loclist). -let g:ale_set_loclist = get(g:, 'ale_set_loclist', 1) -let g:ale_set_quickfix = get(g:, 'ale_set_quickfix', 0) - -" This flag can be set to 0 to disable setting signs. -" This is enabled by default only if the 'signs' feature exists. -let g:ale_set_signs = get(g:, 'ale_set_signs', has('signs')) - -" This flag can be set to 0 to disable setting error highlights. -let g:ale_set_highlights = get(g:, 'ale_set_highlights', has('syntax')) - -" This List can be configured to exclude particular highlights. -let g:ale_exclude_highlights = get(g:, 'ale_exclude_highlights', []) - -" This flag can be set to 0 to disable echoing when the cursor moves. -let g:ale_echo_cursor = get(g:, 'ale_echo_cursor', 1) - -" This flag can be set to 1 to automatically show errors in the preview window. -let g:ale_cursor_detail = get(g:, 'ale_cursor_detail', 0) - -" This flag can be set to 1 to enable virtual text when the cursor moves. -let g:ale_virtualtext_cursor = get(g:, 'ale_virtualtext_cursor', 0) - -" This flag can be set to 1 to enable LSP hover messages at the cursor. -let g:ale_hover_cursor = get(g:, 'ale_hover_cursor', 1) - -" This flag can be set to 1 to automatically close the preview window upon -" entering Insert Mode. -let g:ale_close_preview_on_insert = get(g:, 'ale_close_preview_on_insert', 0) - -" This flag can be set to 0 to disable balloon support. -let g:ale_set_balloons = get(g:, 'ale_set_balloons', has('balloon_eval') && has('gui_running')) - -" Use preview window for hover messages. -let g:ale_hover_to_preview = get(g:, 'ale_hover_to_preview', 0) - -" Float preview windows in Neovim -let g:ale_floating_preview = get(g:, 'ale_floating_preview', 0) - -" Hovers use floating windows in Neovim -let g:ale_hover_to_floating_preview = get(g:, 'ale_hover_to_floating_preview', 0) - -" Detail uses floating windows in Neovim -let g:ale_detail_to_floating_preview = get(g:, 'ale_detail_to_floating_preview', 0) - -" Border setting for floating preview windows -" The elements in the list set the characters for the left, top, top-left, -" top-right, bottom-right, bottom-left, right, and bottom of the border -" respectively -let g:ale_floating_window_border = get(g:, 'ale_floating_window_border', ['|', '-', '+', '+', '+', '+', '|', '-']) - -" This flag can be set to 0 to disable warnings for trailing whitespace -let g:ale_warn_about_trailing_whitespace = get(g:, 'ale_warn_about_trailing_whitespace', 1) -" This flag can be set to 0 to disable warnings for trailing blank lines -let g:ale_warn_about_trailing_blank_lines = get(g:, 'ale_warn_about_trailing_blank_lines', 1) - -" A flag for enabling or disabling the command history. -let g:ale_history_enabled = get(g:, 'ale_history_enabled', 1) - -" A flag for storing the full output of commands in the history. -let g:ale_history_log_output = get(g:, 'ale_history_log_output', 1) - -" Enable automatic completion with LSP servers and tsserver -let g:ale_completion_enabled = get(g:, 'ale_completion_enabled', 0) - -" Enable automatic detection of pipenv for Python linters. -let g:ale_python_auto_pipenv = get(g:, 'ale_python_auto_pipenv', 0) - -" Enable automatic detection of poetry for Python linters. -let g:ale_python_auto_poetry = get(g:, 'ale_python_auto_poetry', 0) - -" This variable can be overridden to set the GO111MODULE environment variable. -let g:ale_go_go111module = get(g:, 'ale_go_go111module', '') - -" Default executable for deno, needed set before plugin start -let g:ale_deno_executable = get(g:, 'ale_deno_executable', 'deno') - -" If 1, enable a popup menu for commands. -let g:ale_popup_menu_enabled = get(g:, 'ale_popup_menu_enabled', has('gui_running')) - -if g:ale_set_balloons is 1 || g:ale_set_balloons is# 'hover' - call ale#balloon#Enable() -endif - -if g:ale_completion_enabled - call ale#completion#Enable() -endif - -if g:ale_popup_menu_enabled - call ale#code_action#EnablePopUpMenu() -endif - -" Define commands for moving through warnings and errors. -command! -bar -nargs=* ALEPrevious -\ :call ale#loclist_jumping#WrapJump('before', ) -command! -bar -nargs=* ALENext -\ :call ale#loclist_jumping#WrapJump('after', ) - -command! -bar ALEPreviousWrap :call ale#loclist_jumping#Jump('before', 1) -command! -bar ALENextWrap :call ale#loclist_jumping#Jump('after', 1) -command! -bar ALEFirst :call ale#loclist_jumping#JumpToIndex(0) -command! -bar ALELast :call ale#loclist_jumping#JumpToIndex(-1) - -" A command for showing error details. -command! -bar ALEDetail :call ale#cursor#ShowCursorDetail() - -" Define commands for turning ALE on or off. -command! -bar ALEToggle :call ale#toggle#Toggle() -command! -bar ALEEnable :call ale#toggle#Enable() -command! -bar ALEDisable :call ale#toggle#Disable() -command! -bar ALEReset :call ale#toggle#Reset() -" Commands for turning ALE on or off for a buffer. -command! -bar ALEToggleBuffer :call ale#toggle#ToggleBuffer(bufnr('')) -command! -bar ALEEnableBuffer :call ale#toggle#EnableBuffer(bufnr('')) -command! -bar ALEDisableBuffer :call ale#toggle#DisableBuffer(bufnr('')) -command! -bar ALEResetBuffer :call ale#toggle#ResetBuffer(bufnr('')) -" A command to stop all LSP-like clients, including tsserver. -command! -bar ALEStopAllLSPs :call ale#lsp#reset#StopAllLSPs() - -" A command for linting manually. -command! -bar ALELint :call ale#Queue(0, 'lint_file') -" Stop current jobs when linting. -command! -bar ALELintStop :call ale#engine#Stop(bufnr('')) - -" Commands to manually populate the quickfixes. -command! -bar ALEPopulateQuickfix :call ale#list#ForcePopulateErrorList(1) -command! -bar ALEPopulateLocList :call ale#list#ForcePopulateErrorList(0) - -" Define a command to get information about current filetype. -command! -bar ALEInfo :call ale#debugging#Info() -" The same, but copy output to your clipboard. -command! -bar ALEInfoToClipboard :call ale#debugging#InfoToClipboard() -" Copy ALE information to a file. -command! -bar -nargs=1 ALEInfoToFile :call ale#debugging#InfoToFile() - -" Fix problems in files. -command! -bar -bang -nargs=* -complete=customlist,ale#fix#registry#CompleteFixers ALEFix :call ale#fix#Fix(bufnr(''), '', ) -" Suggest registered functions to use for fixing problems. -command! -bar ALEFixSuggest :call ale#fix#registry#Suggest(&filetype) - -" Go to definition for tsserver and LSP -command! -bar -nargs=* ALEGoToDefinition :call ale#definition#GoToCommandHandler('', ) - -" Go to type definition for tsserver and LSP -command! -bar -nargs=* ALEGoToTypeDefinition :call ale#definition#GoToCommandHandler('type', ) - -" Go to implementation for tsserver and LSP -command! -bar -nargs=* ALEGoToImplementation :call ale#definition#GoToCommandHandler('implementation', ) - -" Repeat a previous selection in the preview window -command! -bar ALERepeatSelection :call ale#preview#RepeatSelection() - -" Find references for tsserver and LSP -command! -bar -nargs=* ALEFindReferences :call ale#references#Find() - -" Show summary information for the cursor. -command! -bar ALEHover :call ale#hover#ShowAtCursor() - -" Show documentation for the cursor. -command! -bar ALEDocumentation :call ale#hover#ShowDocumentationAtCursor() - -" Search for appearances of a symbol, such as a type name or function name. -command! -nargs=1 ALESymbolSearch :call ale#symbol#Search() - -" Complete text with tsserver and LSP -command! -bar ALEComplete :call ale#completion#GetCompletions('ale-manual') - -" Try to find completions for the current symbol that add additional text. -command! -bar ALEImport :call ale#completion#Import() - -" Rename symbols using tsserver and LSP -command! -bar -bang ALERename :call ale#rename#Execute() - -" Rename file using tsserver -command! -bar -bang ALEFileRename :call ale#filerename#Execute() - -" Apply code actions to a range. -command! -bar -range ALECodeAction :call ale#codefix#Execute() - -" Organize import statements using tsserver -command! -bar ALEOrganizeImports :call ale#organize_imports#Execute() - -" mappings for commands -nnoremap (ale_previous) :ALEPrevious -nnoremap (ale_previous_wrap) :ALEPreviousWrap -nnoremap (ale_previous_error) :ALEPrevious -error -nnoremap (ale_previous_wrap_error) :ALEPrevious -wrap -error -nnoremap (ale_previous_warning) :ALEPrevious -warning -nnoremap (ale_previous_wrap_warning) :ALEPrevious -wrap -warning -nnoremap (ale_next) :ALENext -nnoremap (ale_next_wrap) :ALENextWrap -nnoremap (ale_next_error) :ALENext -error -nnoremap (ale_next_wrap_error) :ALENext -wrap -error -nnoremap (ale_next_warning) :ALENext -warning -nnoremap (ale_next_wrap_warning) :ALENext -wrap -warning -nnoremap (ale_first) :ALEFirst -nnoremap (ale_last) :ALELast -nnoremap (ale_toggle) :ALEToggle -nnoremap (ale_enable) :ALEEnable -nnoremap (ale_disable) :ALEDisable -nnoremap (ale_reset) :ALEReset -nnoremap (ale_toggle_buffer) :ALEToggleBuffer -nnoremap (ale_enable_buffer) :ALEEnableBuffer -nnoremap (ale_disable_buffer) :ALEDisableBuffer -nnoremap (ale_reset_buffer) :ALEResetBuffer -nnoremap (ale_lint) :ALELint -nnoremap (ale_detail) :ALEDetail -nnoremap (ale_fix) :ALEFix -nnoremap (ale_go_to_definition) :ALEGoToDefinition -nnoremap (ale_go_to_definition_in_tab) :ALEGoToDefinition -tab -nnoremap (ale_go_to_definition_in_split) :ALEGoToDefinition -split -nnoremap (ale_go_to_definition_in_vsplit) :ALEGoToDefinition -vsplit -nnoremap (ale_go_to_type_definition) :ALEGoToTypeDefinition -nnoremap (ale_go_to_type_definition_in_tab) :ALEGoToTypeDefinition -tab -nnoremap (ale_go_to_type_definition_in_split) :ALEGoToTypeDefinition -split -nnoremap (ale_go_to_type_definition_in_vsplit) :ALEGoToTypeDefinition -vsplit -nnoremap (ale_go_to_implementation_in_tab) :ALEGoToImplementation -tab -nnoremap (ale_go_to_implementation_in_split) :ALEGoToImplementation -split -nnoremap (ale_go_to_implementation_in_vsplit) :ALEGoToImplementation -vsplit -nnoremap (ale_find_references) :ALEFindReferences -nnoremap (ale_hover) :ALEHover -nnoremap (ale_documentation) :ALEDocumentation -inoremap (ale_complete) :ALEComplete -nnoremap (ale_import) :ALEImport -nnoremap (ale_rename) :ALERename -nnoremap (ale_filerename) :ALEFileRename -nnoremap (ale_code_action) :ALECodeAction -nnoremap (ale_repeat_selection) :ALERepeatSelection - -" Set up autocmd groups now. -call ale#events#Init() - -" Housekeeping - -augroup ALECleanupGroup - autocmd! - " Clean up buffers automatically when they are unloaded. - autocmd BufDelete * if exists('*ale#engine#Cleanup') | call ale#engine#Cleanup(str2nr(expand(''))) | endif - autocmd QuitPre * call ale#events#QuitEvent(str2nr(expand(''))) - - if exists('##VimSuspend') - autocmd VimSuspend * if exists('*ale#engine#CleanupEveryBuffer') | call ale#engine#CleanupEveryBuffer() | endif - endif -augroup END diff --git a/dotfiles/.vim/plugged/ale/rplugin/python3/deoplete/sources/ale.py b/dotfiles/.vim/plugged/ale/rplugin/python3/deoplete/sources/ale.py deleted file mode 100644 index a692dc31..00000000 --- a/dotfiles/.vim/plugged/ale/rplugin/python3/deoplete/sources/ale.py +++ /dev/null @@ -1,62 +0,0 @@ -""" -A Deoplete source for ALE completion via tsserver and LSP. -""" -__author__ = 'Joao Paulo, w0rp' - -try: - from deoplete.source.base import Base -except ImportError: - # Mock the Base class if deoplete isn't available, as mock isn't available - # in the Docker image. - class Base(object): - def __init__(self, vim): - pass - - -# Make sure this code is valid in Python 2, used for running unit tests. -class Source(Base): - - def __init__(self, vim): - super(Source, self).__init__(vim) - - self.name = 'ale' - self.mark = '[L]' - self.rank = 1000 - self.is_bytepos = True - self.min_pattern_length = 1 - self.is_volatile = True - # Do not forget to update s:trigger_character_map in completion.vim in - # updating entries in this map. - self.input_patterns = { - '_': r'\.\w*$', - 'rust': r'(\.|::)\w*$', - 'typescript': r'(\.|\'|")\w*$', - 'cpp': r'(\.|::|->)\w*$', - 'c': r'(\.|->)\w*$', - } - - # Returns an integer for the start position, as with omnifunc. - def get_complete_position(self, context): - return self.vim.call( - 'ale#completion#GetCompletionPositionForDeoplete', context['input'] - ) - - def gather_candidates(self, context): - # Stop early if ALE can't provide completion data for this buffer. - if not self.vim.call('ale#completion#CanProvideCompletions'): - return None - - event = context.get('event') - - if event == 'Async': - result = self.vim.call('ale#completion#GetCompletionResult') - - return result or [] - - if context.get('is_refresh'): - self.vim.command( - "call ale#completion#GetCompletions('ale-callback', " - + "{'callback': {completions -> deoplete#auto_complete() }})" - ) - - return [] diff --git a/dotfiles/.vim/plugged/ale/run-tests b/dotfiles/.vim/plugged/ale/run-tests deleted file mode 100755 index a3c9b616..00000000 --- a/dotfiles/.vim/plugged/ale/run-tests +++ /dev/null @@ -1,269 +0,0 @@ -#!/usr/bin/env bash - -# Author: w0rp -# -# This script runs tests for the ALE project. Run `./run-tests --help` for -# options, or read the output below. -# - -image=denseanalysis/ale - -# Create docker image tag based on Dockerfile contents -if [ -n "$(command -v md5)" ]; then - image_tag=$(md5 -q Dockerfile) -else - image_tag=$(md5sum Dockerfile | cut -d' ' -f1) -fi -git_version=$(git describe --always --tags) - -# Used in all test scripts for running the selected Docker image. -DOCKER_RUN_IMAGE="$image:$image_tag" -export DOCKER_RUN_IMAGE - -tests='test/*.vader test/*/*.vader test/*/*/*.vader test/*/*/*.vader' -# These flags are forwarded to the script for running Vader tests. -verbose_flag='' -quiet_flag='' -run_neovim_02_tests=1 -run_neovim_07_tests=1 -run_vim_80_tests=1 -run_vim_90_tests=1 -run_linters=1 - -while [ $# -ne 0 ]; do - case $1 in - -v) - verbose_flag='-v' - shift - ;; - -q) - quiet_flag='-q' - shift - ;; - --build-image) - run_vim_80_tests=0 - run_vim_90_tests=0 - run_neovim_02_tests=0 - run_neovim_07_tests=0 - run_linters=0 - shift - ;; - --neovim-only) - run_vim_80_tests=0 - run_vim_90_tests=0 - run_linters=0 - shift - ;; - --neovim-02-only) - run_neovim_07_tests=0 - run_vim_80_tests=0 - run_vim_90_tests=0 - run_linters=0 - shift - ;; - --neovim-07-only) - run_neovim_02_tests=0 - run_vim_80_tests=0 - run_vim_90_tests=0 - run_linters=0 - shift - ;; - --vim-only) - run_neovim_02_tests=0 - run_neovim_07_tests=0 - run_linters=0 - shift - ;; - --vim-80-only) - run_neovim_02_tests=0 - run_neovim_07_tests=0 - run_linters=0 - shift - ;; - --vim-90-only) - run_neovim_02_tests=0 - run_neovim_07_tests=0 - run_vim_80_tests=0 - run_linters=0 - shift - ;; - --linters-only) - run_vim_80_tests=0 - run_vim_90_tests=0 - run_neovim_02_tests=0 - run_neovim_07_tests=0 - shift - ;; - --fast) - run_vim_80_tests=0 - run_vim_90_tests=0 - run_neovim_02_tests=0 - run_neovim_07_tests=1 - shift - ;; - --help) - echo 'Usage: ./run-tests [OPTION]... [FILE]...' - echo - echo 'Filenames can be given as arguments to run a subset of tests.' - echo 'For example: ./run-tests test/test_ale_var.vader' - echo - echo 'Options:' - echo ' -v Enable verbose output' - echo ' -q Hide output for successful tests' - echo ' --build-image Run docker image build only.' - echo ' --neovim-only Run tests only for NeoVim' - echo ' --neovim-02-only Run tests only for NeoVim 0.2' - echo ' --neovim-07-only Run tests only for NeoVim 0.7' - echo ' --vim-only Run tests only for Vim' - echo ' --vim-80-only Run tests only for Vim 8.2' - echo ' --vim-90-only Run tests only for Vim 9.0' - echo ' --linters-only Run only Vint and custom checks' - echo ' --fast Run only the fastest Vim and custom checks' - echo ' --help Show this help text' - echo ' -- Stop parsing options after this' - exit 0 - ;; - --) - shift - break - ;; - -?*) - echo "Invalid argument: $1" 1>&2 - exit 1 - ;; - *) - break - ;; - esac -done - -# Allow tests to be passed as arguments. -if [ $# -ne 0 ]; then - # This doesn't perfectly handle work splitting, but none of our files - # have spaces in the names. - tests="$*" - - # Don't run other tools when targeting tests. - run_linters=0 -fi - -# Delete .swp files in the test directory, which cause Vim 8 to hang. -find test -name '*.swp' -delete - -# Check if docker un image is available locally -has_image=$(docker images --quiet "${image}:${image_tag}" | wc -l) - -if [ "$has_image" -eq 0 ] -then - - echo "Downloading run image ${image}:${image_tag}" - docker pull "${image}:${image_tag}" &> /dev/null - - if [ $? -eq 1 ] - then - echo "Could not pull image ${image}:${image_tag}" - echo "Building run image ${image}:${image_tag}" - docker build --build-arg GIT_VERSION="$git_version" -t "${image}:${image_tag}" . - docker tag "${image}:${image_tag}" "${image}:latest" - - if [[ -z "${DOCKER_HUB_USER:-}" || -z "${DOCKER_HUB_PASS:-}" ]] - then - echo "Docker Hub credentials not set, skip push" - else - echo "Push ${image}:${image_tag} to Docker Hub" - echo "$DOCKER_HUB_PASS" | docker login -u "$DOCKER_HUB_USER" --password-stdin - docker push "${image}:${image_tag}" - fi - fi -else - echo "Docker run image ${image}:${image_tag} ready" -fi - -set -e -set -u - -docker tag "${image}:${image_tag}" "${image}:latest" - -output_dir=$(mktemp -d 2>/dev/null || mktemp -d -t 'mytmpdir') - -trap '{ rm -rf "$output_dir"; }' EXIT - -file_number=0 -pid_list='' - -# Used for killing tests when you kill the script. -cancel_tests() { - set +e - - if [ -n "$pid_list" ]; then - for pid in $pid_list; do - kill "$pid" - wait "$pid" - done - fi - - # shellcheck disable=SC2046 - docker kill $(docker ps -a -q --filter ancestor="$image" --format='{{.ID}}') &> /dev/null - - if [ -d "$output_dir" ]; then - rm -rf "$output_dir" - fi - - echo - exit 1 -} - -trap cancel_tests INT TERM - -for vim in $(docker run --rm "$DOCKER_RUN_IMAGE" ls /vim-build/bin | grep '^neovim\|^vim' ); do - if ( [[ $vim =~ ^vim-v8.0 ]] && ((run_vim_80_tests)) ) \ - || ( [[ $vim =~ ^vim-v9.0 ]] && ((run_vim_90_tests)) ) \ - || ( [[ $vim =~ ^neovim-v0.2 ]] && ((run_neovim_02_tests)) ) \ - || ( [[ $vim =~ ^neovim-v0.7 ]] && ((run_neovim_07_tests)) ); then - echo "Starting Vim: $vim..." - file_number=$((file_number+1)) - test/script/run-vader-tests $quiet_flag $verbose_flag "$vim" "$tests" \ - > "$output_dir/$file_number" 2>&1 & - pid_list="$pid_list $!" - fi -done - -if ((run_linters)); then - echo "Starting Vint..." - file_number=$((file_number+1)) - test/script/run-vint > "$output_dir/$file_number" 2>&1 & - pid_list="$pid_list $!" - - echo "Starting Custom checks..." - file_number=$((file_number+1)) - test/script/custom-checks &> "$output_dir/$file_number" 2>&1 & - pid_list="$pid_list $!" -fi - -echo - -failed=0 -index=0 - -for pid in $pid_list; do - this_failed=0 - index=$((index+1)) - - if ! wait "$pid"; then - failed=1 - this_failed=1 - fi - - # Hide output for things that passed if -q is set. - if [ "$quiet_flag" != '-q' ] || ((this_failed)); then - cat "$output_dir/$index" - fi -done - -if ((failed)); then - echo 'Something went wrong!' -else - echo 'All tests passed!' -fi - -exit $failed diff --git a/dotfiles/.vim/plugged/ale/run-tests.bat b/dotfiles/.vim/plugged/ale/run-tests.bat deleted file mode 100644 index 9ba6b554..00000000 --- a/dotfiles/.vim/plugged/ale/run-tests.bat +++ /dev/null @@ -1,30 +0,0 @@ -@echo off -REM Run tests on Windows. -REM -REM To run these tests, you should set up your Windows machine with the same -REM paths that are used in AppVeyor. - -set tests=test/*.vader test/*/*.vader test/*/*/*.vader test/*/*/*/*.vader - -REM Use the first argument for selecting tests to run. -if not "%1"=="" set tests=%1 - -set VADER_OUTPUT_FILE=%~dp0\vader_output -REM Automatically re-run Windows tests, which can fail some times. -set tries=0 - -:RUN_TESTS -set /a tries=%tries%+1 -type nul > "%VADER_OUTPUT_FILE%" -C:\vim\vim\vim80\vim.exe -u test/vimrc "+Vader! %tests%" -set code=%ERRORLEVEL% - -IF %code% EQU 0 GOTO :SHOW_RESULTS -IF %tries% GEQ 2 GOTO :SHOW_RESULTS -GOTO :RUN_TESTS - -:SHOW_RESULTS -type "%VADER_OUTPUT_FILE%" -del "%VADER_OUTPUT_FILE%" - -exit /B %code% diff --git a/dotfiles/.vim/plugged/ale/supported-tools.md b/dotfiles/.vim/plugged/ale/supported-tools.md deleted file mode 100644 index face9e39..00000000 --- a/dotfiles/.vim/plugged/ale/supported-tools.md +++ /dev/null @@ -1,694 +0,0 @@ -# ALE Supported Languages and Tools - -This plugin supports the following languages and tools. All available -tools will be run in combination, so they can be complementary. - - - -**Legend** - -| Key | Definition | -| ------------- | ----------------------------------------------------------------- | -| :floppy_disk: | May only run on files on disk (see: `help ale-lint-file-linters` | -| :warning: | Disabled by default | - ---- - -* Ada - * [ada_language_server](https://github.com/AdaCore/ada_language_server) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [gcc](https://gcc.gnu.org) - * [gnatpp](https://docs.adacore.com/gnat_ugn-docs/html/gnat_ugn/gnat_ugn/gnat_utility_programs.html#the-gnat-pretty-printer-gnatpp) :floppy_disk: -* Ansible - * [ansible-lint](https://github.com/willthames/ansible-lint) :floppy_disk: -* API Blueprint - * [drafter](https://github.com/apiaryio/drafter) -* APKBUILD - * [apkbuild-lint](https://gitlab.alpinelinux.org/Leo/atools) - * [secfixes-check](https://gitlab.alpinelinux.org/Leo/atools) -* AsciiDoc - * [alex](https://github.com/get-alex/alex) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [languagetool](https://languagetool.org/) :floppy_disk: - * [proselint](http://proselint.com/) - * [redpen](http://redpen.cc/) - * [textlint](https://textlint.github.io/) - * [vale](https://github.com/ValeLint/vale) - * [write-good](https://github.com/btford/write-good) -* ASM - * [gcc](https://gcc.gnu.org) -* AVRA - * [avra](https://github.com/Ro5bert/avra) -* Awk - * [gawk](https://www.gnu.org/software/gawk/) -* Bash - * [bashate](https://github.com/openstack/bashate) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [language-server](https://github.com/mads-hartmann/bash-language-server) - * shell [-n flag](https://www.gnu.org/software/bash/manual/bash.html#index-set) - * [shellcheck](https://www.shellcheck.net/) - * [shfmt](https://github.com/mvdan/sh) -* Bats - * [shellcheck](https://www.shellcheck.net/) -* Bazel - * [buildifier](https://github.com/bazelbuild/buildtools) -* BibTeX - * [bibclean](http://ftp.math.utah.edu/pub/bibclean/) -* Bicep - * [bicep](https://github.com/Azure/bicep) :floppy_disk: -* BitBake - * [oelint-adv](https://github.com/priv-kweihmann/oelint-adv) -* Bourne Shell - * shell [-n flag](http://linux.die.net/man/1/sh) - * [shellcheck](https://www.shellcheck.net/) - * [shfmt](https://github.com/mvdan/sh) -* C - * [astyle](http://astyle.sourceforge.net/) - * [ccls](https://github.com/MaskRay/ccls) - * [clang](http://clang.llvm.org/) - * [clang-format](https://clang.llvm.org/docs/ClangFormat.html) - * [clangd](https://clang.llvm.org/extra/clangd.html) - * [clangtidy](http://clang.llvm.org/extra/clang-tidy/) :floppy_disk: - * [cppcheck](http://cppcheck.sourceforge.net) - * [cpplint](https://github.com/cpplint/cpplint) - * [cquery](https://github.com/cquery-project/cquery) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [flawfinder](https://www.dwheeler.com/flawfinder/) - * [gcc](https://gcc.gnu.org/) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* C# - * [csc](http://www.mono-project.com/docs/about-mono/languages/csharp/) :floppy_disk: see:`help ale-cs-csc` for details and configuration - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [dotnet-format](https://github.com/dotnet/format) - * [mcs](http://www.mono-project.com/docs/about-mono/languages/csharp/) see:`help ale-cs-mcs` for details - * [mcsc](http://www.mono-project.com/docs/about-mono/languages/csharp/) :floppy_disk: see:`help ale-cs-mcsc` for details and configuration - * [uncrustify](https://github.com/uncrustify/uncrustify) -* C++ (filetype cpp) - * [astyle](http://astyle.sourceforge.net/) - * [ccls](https://github.com/MaskRay/ccls) - * [clang](http://clang.llvm.org/) - * [clang-format](https://clang.llvm.org/docs/ClangFormat.html) - * [clangcheck](http://clang.llvm.org/docs/ClangCheck.html) :floppy_disk: - * [clangd](https://clang.llvm.org/extra/clangd.html) - * [clangtidy](http://clang.llvm.org/extra/clang-tidy/) :floppy_disk: - * [clazy](https://github.com/KDE/clazy) :floppy_disk: - * [cppcheck](http://cppcheck.sourceforge.net) - * [cpplint](https://github.com/google/styleguide/tree/gh-pages/cpplint) :floppy_disk: - * [cquery](https://github.com/cquery-project/cquery) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [flawfinder](https://www.dwheeler.com/flawfinder/) - * [gcc](https://gcc.gnu.org/) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* Cairo - * [starknet](https://starknet.io/docs) -* Chef - * [cookstyle](https://docs.chef.io/cookstyle.html) - * [foodcritic](http://www.foodcritic.io/) :floppy_disk: -* Clojure - * [clj-kondo](https://github.com/borkdude/clj-kondo) - * [joker](https://github.com/candid82/joker) -* CloudFormation - * [cfn-python-lint](https://github.com/awslabs/cfn-python-lint) -* CMake - * [cmake-format](https://github.com/cheshirekow/cmake_format) - * [cmake-lint](https://github.com/cheshirekow/cmake_format) - * [cmakelint](https://github.com/cmake-lint/cmake-lint) -* CoffeeScript - * [coffee](http://coffeescript.org/) - * [coffeelint](https://www.npmjs.com/package/coffeelint) -* Crystal - * [ameba](https://github.com/veelenga/ameba) :floppy_disk: - * [crystal](https://crystal-lang.org/) :floppy_disk: -* CSS - * [VSCode CSS language server](https://github.com/hrsh7th/vscode-langservers-extracted) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [css-beautify](https://github.com/beautify-web/js-beautify) - * [csslint](http://csslint.net/) - * [fecs](http://fecs.baidu.com/) - * [prettier](https://github.com/prettier/prettier) - * [stylelint](https://github.com/stylelint/stylelint) -* Cucumber - * [cucumber](https://cucumber.io/) -* CUDA - * [clangd](https://clang.llvm.org/extra/clangd.html) - * [nvcc](http://docs.nvidia.com/cuda/cuda-compiler-driver-nvcc/index.html) :floppy_disk: -* Cypher - * [cypher-lint](https://github.com/cleishm/libcypher-parser) -* Cython (pyrex filetype) - * [cython](http://cython.org/) -* D - * [dfmt](https://github.com/dlang-community/dfmt) - * [dls](https://github.com/d-language-server/dls) - * [dmd](https://dlang.org/dmd-linux.html) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* Dafny - * [dafny](https://rise4fun.com/Dafny) :floppy_disk: -* Dart - * [analysis_server](https://github.com/dart-lang/sdk/tree/master/pkg/analysis_server) - * [dart-analyze](https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_cli) :floppy_disk: - * [dart-format](https://github.com/dart-lang/sdk/tree/master/utils/dartfmt) - * [dartfmt](https://github.com/dart-lang/sdk/tree/master/utils/dartfmt) - * [language_server](https://github.com/natebosch/dart_language_server) -* desktop - * [desktop-file-validate](https://www.freedesktop.org/wiki/Software/desktop-file-utils/) -* Dhall - * [dhall-format](https://github.com/dhall-lang/dhall-lang) - * [dhall-freeze](https://github.com/dhall-lang/dhall-lang) - * [dhall-lint](https://github.com/dhall-lang/dhall-lang) -* Dockerfile - * [dockerfile_lint](https://github.com/projectatomic/dockerfile_lint) - * [dprint](https://dprint.dev) - * [hadolint](https://github.com/hadolint/hadolint) -* Elixir - * [credo](https://github.com/rrrene/credo) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) :warning: - * [dialyxir](https://github.com/jeremyjh/dialyxir) - * [dogma](https://github.com/lpil/dogma) :floppy_disk: - * [elixir-ls](https://github.com/elixir-lsp/elixir-ls) :warning: - * [mix](https://hexdocs.pm/mix/Mix.html) :warning: :floppy_disk: -* Elm - * [elm-format](https://github.com/avh4/elm-format) - * [elm-ls](https://github.com/elm-tooling/elm-language-server) - * [elm-make](https://github.com/elm/compiler) -* Erb - * [erb](https://apidock.com/ruby/ERB) - * [erblint](https://github.com/Shopify/erb-lint) - * [erubi](https://github.com/jeremyevans/erubi) - * [erubis](https://github.com/kwatch/erubis) - * [ruumba](https://github.com/ericqweinstein/ruumba) -* Erlang - * [SyntaxErl](https://github.com/ten0s/syntaxerl) - * [dialyzer](http://erlang.org/doc/man/dialyzer.html) :floppy_disk: - * [elvis](https://github.com/inaka/elvis) :floppy_disk: - * [erlc](http://erlang.org/doc/man/erlc.html) - * [erlfmt](https://github.com/WhatsApp/erlfmt) -* Fish - * fish [-n flag](https://linux.die.net/man/1/fish) - * [fish_indent](https://fishshell.com/docs/current/cmds/fish_indent.html) -* Fortran - * [gcc](https://gcc.gnu.org/) - * [language_server](https://github.com/hansec/fortran-language-server) -* Fountain - * [proselint](http://proselint.com/) -* FusionScript - * [fusion-lint](https://github.com/RyanSquared/fusionscript) -* Git Commit Messages - * [gitlint](https://github.com/jorisroovers/gitlint) -* GLSL - * [glslang](https://github.com/KhronosGroup/glslang) - * [glslls](https://github.com/svenstaro/glsl-language-server) -* Go - * [bingo](https://github.com/saibing/bingo) :warning: - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) :warning: - * [go build](https://golang.org/cmd/go/) :warning: :floppy_disk: - * [go mod](https://golang.org/cmd/go/) :warning: :floppy_disk: - * [go vet](https://golang.org/cmd/vet/) :floppy_disk: - * [gofmt](https://golang.org/cmd/gofmt/) - * [gofumpt](https://github.com/mvdan/gofumpt) - * [goimports](https://godoc.org/golang.org/x/tools/cmd/goimports) :warning: - * [golangci-lint](https://github.com/golangci/golangci-lint) :warning: :floppy_disk: - * [golangserver](https://github.com/sourcegraph/go-langserver) :warning: - * [golines](https://github.com/segmentio/golines) - * [golint](https://godoc.org/github.com/golang/lint) - * [gometalinter](https://github.com/alecthomas/gometalinter) :warning: :floppy_disk: - * [gopls](https://github.com/golang/go/wiki/gopls) - * [gosimple](https://github.com/dominikh/go-tools/tree/master/cmd/gosimple) :warning: :floppy_disk: - * [gotype](https://godoc.org/golang.org/x/tools/cmd/gotype) :warning: :floppy_disk: - * [revive](https://github.com/mgechev/revive) :warning: :floppy_disk: - * [staticcheck](https://github.com/dominikh/go-tools/tree/master/cmd/staticcheck) :warning: :floppy_disk: -* GraphQL - * [eslint](http://eslint.org/) - * [gqlint](https://github.com/happylinks/gqlint) - * [prettier](https://github.com/prettier/prettier) -* Hack - * [hack](http://hacklang.org/) - * [hackfmt](https://github.com/facebook/hhvm/tree/master/hphp/hack/hackfmt) - * [hhast](https://github.com/hhvm/hhast) :warning: (see `:help ale-integration-hack`) -* Haml - * [haml-lint](https://github.com/brigade/haml-lint) -* Handlebars - * [ember-template-lint](https://github.com/rwjblue/ember-template-lint) -* Haskell - * [brittany](https://github.com/lspitzner/brittany) - * [cabal-ghc](https://www.haskell.org/cabal/) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [floskell](https://github.com/ennocramer/floskell) - * [ghc](https://www.haskell.org/ghc/) - * [ghc-mod](https://github.com/DanielG/ghc-mod) - * [hdevtools](https://hackage.haskell.org/package/hdevtools) - * [hfmt](https://github.com/danstiner/hfmt) - * [hie](https://github.com/haskell/haskell-ide-engine) - * [hindent](https://hackage.haskell.org/package/hindent) - * [hlint](https://hackage.haskell.org/package/hlint) - * [hls](https://github.com/haskell/haskell-language-server) - * [ormolu](https://github.com/tweag/ormolu) - * [stack-build](https://haskellstack.org/) :floppy_disk: - * [stack-ghc](https://haskellstack.org/) - * [stylish-haskell](https://github.com/jaspervdj/stylish-haskell) -* HCL - * [packer-fmt](https://github.com/hashicorp/packer) - * [terraform-fmt](https://github.com/hashicorp/terraform) -* HTML - * [VSCode HTML language server](https://github.com/hrsh7th/vscode-langservers-extracted) - * [alex](https://github.com/get-alex/alex) - * [angular](https://www.npmjs.com/package/@angular/language-server) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [fecs](http://fecs.baidu.com/) - * [html-beautify](https://beautifier.io/) - * [htmlhint](http://htmlhint.com/) - * [prettier](https://github.com/prettier/prettier) - * [proselint](http://proselint.com/) - * [tidy](http://www.html-tidy.org/) - * [write-good](https://github.com/btford/write-good) -* Idris - * [idris](http://www.idris-lang.org/) -* Ink - * [ink-language-server](https://github.com/ephread/ink-language-server) -* Inko - * [inko](https://inko-lang.org/) :floppy_disk: -* ISPC - * [ispc](https://ispc.github.io/) :floppy_disk: -* Java - * [PMD](https://pmd.github.io/) - * [checkstyle](http://checkstyle.sourceforge.net) :floppy_disk: - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [eclipselsp](https://github.com/eclipse/eclipse.jdt.ls) - * [google-java-format](https://github.com/google/google-java-format) - * [javac](http://www.oracle.com/technetwork/java/javase/downloads/index.html) - * [javalsp](https://github.com/georgewfraser/vscode-javac) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* JavaScript - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [deno](https://deno.land/) - * [dprint](https://dprint.dev/) - * [eslint](http://eslint.org/) - * [fecs](http://fecs.baidu.com/) - * [flow](https://flowtype.org/) - * [jscs](https://jscs-dev.github.io/) - * [jshint](http://jshint.com/) - * [prettier](https://github.com/prettier/prettier) - * [prettier-eslint](https://github.com/prettier/prettier-eslint-cli) - * [prettier-standard](https://github.com/sheerun/prettier-standard) - * [standard](http://standardjs.com/) - * [tsserver](https://github.com/Microsoft/TypeScript/wiki/Standalone-Server-%28tsserver%29) - * [xo](https://github.com/sindresorhus/xo) -* JSON - * [VSCode JSON language server](https://github.com/hrsh7th/vscode-langservers-extracted) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) :warning: - * [dprint](https://dprint.dev) - * [eslint](http://eslint.org/) :warning: - * [fixjson](https://github.com/rhysd/fixjson) - * [jq](https://stedolan.github.io/jq/) :warning: - * [jsonlint](https://github.com/zaach/jsonlint) - * [prettier](https://github.com/prettier/prettier) - * [spectral](https://github.com/stoplightio/spectral) -* JSON5 - * [eslint](http://eslint.org/) :warning: -* JSONC - * [eslint](http://eslint.org/) :warning: -* Jsonnet - * [jsonnet-lint](https://jsonnet.org/learning/tools.html) - * [jsonnetfmt](https://jsonnet.org/learning/tools.html) -* Julia - * [languageserver](https://github.com/JuliaEditorSupport/LanguageServer.jl) -* Kotlin - * [kotlinc](https://kotlinlang.org) :floppy_disk: - * [ktlint](https://ktlint.github.io) - * [languageserver](https://github.com/fwcd/KotlinLanguageServer) see `:help ale-integration-kotlin` for configuration instructions -* LaTeX - * [alex](https://github.com/get-alex/alex) - * [chktex](http://www.nongnu.org/chktex/) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [lacheck](https://www.ctan.org/pkg/lacheck) - * [proselint](http://proselint.com/) - * [redpen](http://redpen.cc/) - * [texlab](https://texlab.netlify.com) - * [textlint](https://textlint.github.io/) - * [vale](https://github.com/ValeLint/vale) - * [write-good](https://github.com/btford/write-good) -* Less - * [lessc](https://www.npmjs.com/package/less) - * [prettier](https://github.com/prettier/prettier) - * [stylelint](https://github.com/stylelint/stylelint) -* LLVM - * [llc](https://llvm.org/docs/CommandGuide/llc.html) -* Lua - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [lua-format](https://github.com/Koihik/LuaFormatter) - * [luac](https://www.lua.org/manual/5.1/luac.html) - * [luacheck](https://github.com/mpeterv/luacheck) - * [luafmt](https://github.com/trixnz/lua-fmt) - * [selene](https://github.com/Kampfkarren/selene) - * [stylua](https://github.com/johnnymorganz/stylua) -* Mail - * [alex](https://github.com/get-alex/alex) - * [languagetool](https://languagetool.org/) :floppy_disk: - * [proselint](http://proselint.com/) - * [vale](https://github.com/ValeLint/vale) -* Make - * [checkmake](https://github.com/mrtazz/checkmake) -* Markdown - * [alex](https://github.com/get-alex/alex) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [languagetool](https://languagetool.org/) :floppy_disk: - * [markdownlint](https://github.com/DavidAnson/markdownlint) :floppy_disk: - * [mdl](https://github.com/mivok/markdownlint) - * [pandoc](https://pandoc.org) - * [prettier](https://github.com/prettier/prettier) - * [proselint](http://proselint.com/) - * [redpen](http://redpen.cc/) - * [remark-lint](https://github.com/wooorm/remark-lint) - * [textlint](https://textlint.github.io/) - * [vale](https://github.com/ValeLint/vale) - * [write-good](https://github.com/btford/write-good) -* MATLAB - * [mlint](https://www.mathworks.com/help/matlab/ref/mlint.html) -* Mercury - * [mmc](http://mercurylang.org) :floppy_disk: -* NASM - * [nasm](https://www.nasm.us/) :floppy_disk: -* Nim - * [nim check](https://nim-lang.org/docs/nimc.html) :floppy_disk: - * [nimlsp](https://github.com/PMunch/nimlsp) - * nimpretty -* nix - * [nix-instantiate](http://nixos.org/nix/manual/#sec-nix-instantiate) - * [nixfmt](https://github.com/serokell/nixfmt) - * [nixpkgs-fmt](https://github.com/nix-community/nixpkgs-fmt) - * [rnix-lsp](https://github.com/nix-community/rnix-lsp) - * [statix](https://github.com/nerdypepper/statix) -* nroff - * [alex](https://github.com/get-alex/alex) - * [proselint](http://proselint.com/) - * [write-good](https://github.com/btford/write-good) -* Objective-C - * [ccls](https://github.com/MaskRay/ccls) - * [clang](http://clang.llvm.org/) - * [clangd](https://clang.llvm.org/extra/clangd.html) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* Objective-C++ - * [clang](http://clang.llvm.org/) - * [clangd](https://clang.llvm.org/extra/clangd.html) - * [uncrustify](https://github.com/uncrustify/uncrustify) -* OCaml - * [dune](https://dune.build/) - * [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-ocaml-merlin` for configuration instructions - * [ocamlformat](https://github.com/ocaml-ppx/ocamlformat) - * [ocamllsp](https://github.com/ocaml/ocaml-lsp) - * [ocp-indent](https://github.com/OCamlPro/ocp-indent) - * [ols](https://github.com/freebroccolo/ocaml-language-server) -* OpenApi - * [ibm_validator](https://github.com/IBM/openapi-validator) - * [prettier](https://github.com/prettier/prettier) - * [yamllint](https://yamllint.readthedocs.io/) -* OpenSCAD - * [SCA2D](https://gitlab.com/bath_open_instrumentation_group/sca2d) :floppy_disk: -* Packer (HCL) - * [packer-fmt-fixer](https://github.com/hashicorp/packer) -* Pascal - * [ptop](https://www.freepascal.org/tools/ptop.var) -* Pawn - * [uncrustify](https://github.com/uncrustify/uncrustify) -* Perl - * [perl -c](https://perl.org/) :warning: - * [perl-critic](https://metacpan.org/pod/Perl::Critic) - * [perltidy](https://metacpan.org/pod/distribution/Perl-Tidy/bin/perltidy) -* Perl6 - * [perl6 -c](https://perl6.org) :warning: -* PHP - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [intelephense](https://github.com/bmewburn/intelephense-docs) - * [langserver](https://github.com/felixfbecker/php-language-server) - * [phan](https://github.com/phan/phan) see `:help ale-php-phan` to instructions - * [php -l](https://secure.php.net/) - * [php-cs-fixer](https://cs.symfony.com) - * [phpactor](https://github.com/phpactor/phpactor) - * [phpcbf](https://github.com/squizlabs/PHP_CodeSniffer) - * [phpcs](https://github.com/squizlabs/PHP_CodeSniffer) - * [phpmd](https://phpmd.org) - * [phpstan](https://github.com/phpstan/phpstan) - * [pint](https://github.com/laravel/pint) :beer: - * [psalm](https://getpsalm.org) :floppy_disk: - * [tlint](https://github.com/tightenco/tlint) -* PO - * [alex](https://github.com/get-alex/alex) - * [msgfmt](https://www.gnu.org/software/gettext/manual/html_node/msgfmt-Invocation.html) - * [proselint](http://proselint.com/) - * [write-good](https://github.com/btford/write-good) -* Pod - * [alex](https://github.com/get-alex/alex) - * [proselint](http://proselint.com/) - * [write-good](https://github.com/btford/write-good) -* Pony - * [ponyc](https://github.com/ponylang/ponyc) -* PowerShell - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [powershell](https://github.com/PowerShell/PowerShell) - * [psscriptanalyzer](https://github.com/PowerShell/PSScriptAnalyzer) -* Prolog - * [swipl](https://github.com/SWI-Prolog/swipl-devel) -* proto - * [buf-format](https://github.com/bufbuild/buf) :floppy_disk: - * [buf-lint](https://github.com/bufbuild/buf) :floppy_disk: - * [protoc-gen-lint](https://github.com/ckaznocha/protoc-gen-lint) :floppy_disk: - * [protolint](https://github.com/yoheimuta/protolint) :floppy_disk: -* Pug - * [pug-lint](https://github.com/pugjs/pug-lint) -* Puppet - * [languageserver](https://github.com/lingua-pupuli/puppet-editor-services) - * [puppet](https://puppet.com) - * [puppet-lint](https://puppet-lint.com) -* PureScript - * [purescript-language-server](https://github.com/nwolverson/purescript-language-server) - * [purs-tidy](https://github.com/natefaubion/purescript-tidy) - * [purty](https://gitlab.com/joneshf/purty) -* Python - * [autoflake](https://github.com/myint/autoflake) :floppy_disk: - * [autoimport](https://lyz-code.github.io/autoimport/) - * [autopep8](https://github.com/hhatto/autopep8) - * [bandit](https://github.com/PyCQA/bandit) :warning: - * [black](https://github.com/psf/black) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [flake8](http://flake8.pycqa.org/en/latest/) - * [flakehell](https://github.com/flakehell/flakehell) - * [isort](https://github.com/timothycrosley/isort) - * [mypy](http://mypy-lang.org/) - * [prospector](https://github.com/PyCQA/prospector) :warning: :floppy_disk: - * [pycodestyle](https://github.com/PyCQA/pycodestyle) :warning: - * [pydocstyle](https://www.pydocstyle.org/) :warning: - * [pyflakes](https://github.com/PyCQA/pyflakes) - * [pyflyby](https://github.com/deshaw/pyflyby) :warning: - * [pylama](https://github.com/klen/pylama) :floppy_disk: - * [pylint](https://www.pylint.org/) :floppy_disk: - * [pylsp](https://github.com/python-lsp/python-lsp-server) :warning: - * [pyre](https://github.com/facebook/pyre-check) :warning: - * [pyright](https://github.com/microsoft/pyright) - * [reorder-python-imports](https://github.com/asottile/reorder_python_imports) - * [unimport](https://github.com/hakancelik96/unimport) - * [vulture](https://github.com/jendrikseipp/vulture) :warning: :floppy_disk: - * [yapf](https://github.com/google/yapf) -* QML - * [qmlfmt](https://github.com/jesperhh/qmlfmt) - * [qmllint](https://github.com/qt/qtdeclarative/tree/5.11/tools/qmllint) -* R - * [languageserver](https://github.com/REditorSupport/languageserver) - * [lintr](https://github.com/jimhester/lintr) - * [styler](https://github.com/r-lib/styler) -* Racket - * [racket-langserver](https://github.com/jeapostrophe/racket-langserver/tree/master) - * [raco](https://docs.racket-lang.org/raco/) -* Re:VIEW - * [redpen](http://redpen.cc/) -* ReasonML - * [merlin](https://github.com/the-lambda-church/merlin) see `:help ale-reasonml-ols` for configuration instructions - * [ols](https://github.com/freebroccolo/ocaml-language-server) - * [reason-language-server](https://github.com/jaredly/reason-language-server) - * [refmt](https://github.com/reasonml/reason-cli) -* Rego - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [opacheck](https://www.openpolicyagent.org/docs/latest/cli/#opa-check) - * [opafmt](https://www.openpolicyagent.org/docs/latest/cli/#opa-fmt) -* reStructuredText - * [alex](https://github.com/get-alex/alex) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [proselint](http://proselint.com/) - * [redpen](http://redpen.cc/) - * [rstcheck](https://github.com/myint/rstcheck) - * [textlint](https://textlint.github.io/) - * [vale](https://github.com/ValeLint/vale) - * [write-good](https://github.com/btford/write-good) -* Robot - * [rflint](https://github.com/boakley/robotframework-lint) -* RPM spec - * [rpmlint](https://github.com/rpm-software-management/rpmlint) :warning: (see `:help ale-integration-spec`) -* Ruby - * [brakeman](http://brakemanscanner.org/) :floppy_disk: - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [debride](https://github.com/seattlerb/debride) - * [prettier](https://github.com/prettier/plugin-ruby) - * [rails_best_practices](https://github.com/flyerhzm/rails_best_practices) :floppy_disk: - * [reek](https://github.com/troessner/reek) - * [rubocop](https://github.com/bbatsov/rubocop) - * [ruby](https://www.ruby-lang.org) - * [rufo](https://github.com/ruby-formatter/rufo) - * [solargraph](https://solargraph.org) - * [sorbet](https://github.com/sorbet/sorbet) - * [standardrb](https://github.com/testdouble/standard) - * [syntax_tree](https://github.com/ruby-syntax-tree/syntax_tree) -* Rust - * [cargo](https://github.com/rust-lang/cargo) :floppy_disk: (see `:help ale-integration-rust` for configuration instructions) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [rls](https://github.com/rust-lang-nursery/rls) :warning: - * [rust-analyzer](https://github.com/rust-analyzer/rust-analyzer) :warning: - * [rustc](https://www.rust-lang.org/) :warning: - * [rustfmt](https://github.com/rust-lang-nursery/rustfmt) -* Salt - * [salt-lint](https://github.com/warpnet/salt-lint) -* Sass - * [sass-lint](https://www.npmjs.com/package/sass-lint) - * [stylelint](https://github.com/stylelint/stylelint) -* Scala - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [fsc](https://www.scala-lang.org/old/sites/default/files/linuxsoft_archives/docu/files/tools/fsc.html) - * [metals](https://scalameta.org/metals/) - * [sbtserver](https://www.scala-sbt.org/1.x/docs/sbt-server.html) - * [scalac](http://scala-lang.org) - * [scalafmt](https://scalameta.org/scalafmt/) - * [scalastyle](http://www.scalastyle.org) -* SCSS - * [prettier](https://github.com/prettier/prettier) - * [sass-lint](https://www.npmjs.com/package/sass-lint) - * [scss-lint](https://github.com/brigade/scss-lint) - * [stylelint](https://github.com/stylelint/stylelint) -* Slim - * [slim-lint](https://github.com/sds/slim-lint) -* SML - * [smlnj](http://www.smlnj.org/) -* Solidity - * [solc](https://solidity.readthedocs.io/) - * [solhint](https://github.com/protofire/solhint) - * [solium](https://github.com/duaraghav8/Solium) -* SQL - * [dprint](https://dprint.dev) - * [pgformatter](https://github.com/darold/pgFormatter) - * [sql-lint](https://github.com/joereynolds/sql-lint) - * [sqlfmt](https://github.com/jackc/sqlfmt) - * [sqlformat](https://github.com/andialbrecht/sqlparse) - * [sqlint](https://github.com/purcell/sqlint) -* Stylus - * [stylelint](https://github.com/stylelint/stylelint) -* SugarSS - * [stylelint](https://github.com/stylelint/stylelint) -* Svelte - * [prettier](https://github.com/prettier/prettier) - * [svelteserver](https://github.com/sveltejs/language-tools/tree/master/packages/language-server) -* Swift - * [Apple swift-format](https://github.com/apple/swift-format) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [sourcekit-lsp](https://github.com/apple/sourcekit-lsp) - * [swiftformat](https://github.com/nicklockwood/SwiftFormat) - * [swiftlint](https://github.com/realm/SwiftLint) -* systemd - * [systemd-analyze](https://www.freedesktop.org/software/systemd/man/systemd-analyze.html) :floppy_disk: -* Tcl - * [nagelfar](http://nagelfar.sourceforge.net) :floppy_disk: -* Terraform - * [checkov](https://github.com/bridgecrewio/checkov) - * [terraform](https://github.com/hashicorp/terraform) - * [terraform-fmt-fixer](https://github.com/hashicorp/terraform) - * [terraform-ls](https://github.com/hashicorp/terraform-ls) - * [terraform-lsp](https://github.com/juliosueiras/terraform-lsp) - * [tflint](https://github.com/wata727/tflint) - * [tfsec](https://github.com/aquasecurity/tfsec) -* Texinfo - * [alex](https://github.com/get-alex/alex) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [proselint](http://proselint.com/) - * [write-good](https://github.com/btford/write-good) -* Text - * [alex](https://github.com/get-alex/alex) :warning: - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [languagetool](https://languagetool.org/) :floppy_disk: - * [proselint](http://proselint.com/) :warning: - * [redpen](http://redpen.cc/) :warning: - * [textlint](https://textlint.github.io/) :warning: - * [vale](https://github.com/ValeLint/vale) :warning: - * [write-good](https://github.com/btford/write-good) :warning: -* Thrift - * [thrift](http://thrift.apache.org/) - * [thriftcheck](https://github.com/pinterest/thriftcheck) -* TOML - * [dprint](https://dprint.dev) -* TypeScript - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [deno](https://deno.land/) - * [dprint](https://dprint.dev/) - * [eslint](http://eslint.org/) - * [fecs](http://fecs.baidu.com/) - * [prettier](https://github.com/prettier/prettier) - * [standard](http://standardjs.com/) - * [tslint](https://github.com/palantir/tslint) - * [tsserver](https://github.com/Microsoft/TypeScript/wiki/Standalone-Server-%28tsserver%29) - * typecheck -* V - * [v](https://github.com/vlang/v/) :floppy_disk: - * [vfmt](https://github.com/vlang/v/) -* VALA - * [uncrustify](https://github.com/uncrustify/uncrustify) - * [vala_lint](https://github.com/vala-lang/vala-lint) :floppy_disk: -* Verilog - * [hdl-checker](https://pypi.org/project/hdl-checker) - * [iverilog](https://github.com/steveicarus/iverilog) - * [verilator](http://www.veripool.org/projects/verilator/wiki/Intro) - * [vlog](https://www.mentor.com/products/fv/questa/) - * [xvlog](https://www.xilinx.com/products/design-tools/vivado.html) - * [yosys](http://www.clifford.at/yosys/) :floppy_disk: -* VHDL - * [ghdl](https://github.com/ghdl/ghdl) - * [vcom](https://www.mentor.com/products/fv/questa/) - * [xvhdl](https://www.xilinx.com/products/design-tools/vivado.html) -* Vim - * [vimls](https://github.com/iamcco/vim-language-server) - * [vint](https://github.com/Kuniwak/vint) -* Vim help - * [alex](https://github.com/get-alex/alex) :warning: - * [proselint](http://proselint.com/) :warning: - * [write-good](https://github.com/btford/write-good) :warning: -* Vue - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [prettier](https://github.com/prettier/prettier) - * [vls](https://github.com/vuejs/vetur/tree/master/server) - * [volar](https://github.com/johnsoncodehk/volar) -* WGSL - * [naga](https://github.com/gfx-rs/naga) -* XHTML - * [alex](https://github.com/get-alex/alex) - * [cspell](https://github.com/streetsidesoftware/cspell/tree/main/packages/cspell) - * [proselint](http://proselint.com/) - * [write-good](https://github.com/btford/write-good) -* XML - * [xmllint](http://xmlsoft.org/xmllint.html) -* YAML - * [actionlint](https://github.com/rhysd/actionlint) :warning: - * [circleci](https://circleci.com/docs/2.0/local-cli) :floppy_disk: :warning: - * [gitlablint](https://github.com/elijah-roberts/gitlab-lint) - * [prettier](https://github.com/prettier/prettier) - * [spectral](https://github.com/stoplightio/spectral) - * [swaglint](https://github.com/byCedric/swaglint) :warning: - * [yaml-language-server](https://github.com/redhat-developer/yaml-language-server) - * [yamlfix](https://lyz-code.github.io/yamlfix) - * [yamllint](https://yamllint.readthedocs.io/) -* YANG - * [yang-lsp](https://github.com/theia-ide/yang-lsp) -* Zeek - * [zeek](http://zeek.org) :floppy_disk: -* Zig - * [zigfmt](https://github.com/ziglang/zig) - * [zls](https://github.com/zigtools/zls) diff --git a/dotfiles/.vim/plugged/ale/syntax/ale-fix-suggest.vim b/dotfiles/.vim/plugged/ale/syntax/ale-fix-suggest.vim deleted file mode 100644 index b112f5b5..00000000 --- a/dotfiles/.vim/plugged/ale/syntax/ale-fix-suggest.vim +++ /dev/null @@ -1,13 +0,0 @@ -if exists('b:current_syntax') - finish -endif - -syn match aleFixerComment /^.*$/ -syn match aleFixerName /\(^\|, \)'[^']*'/ -syn match aleFixerHelp /^See :help ale-fix-configuration/ - -hi def link aleFixerComment Comment -hi def link aleFixerName String -hi def link aleFixerHelp Statement - -let b:current_syntax = 'ale-fix-suggest' diff --git a/dotfiles/.vim/plugged/ale/syntax/ale-preview-selection.vim b/dotfiles/.vim/plugged/ale/syntax/ale-preview-selection.vim deleted file mode 100644 index 879ba096..00000000 --- a/dotfiles/.vim/plugged/ale/syntax/ale-preview-selection.vim +++ /dev/null @@ -1,11 +0,0 @@ -if exists('b:current_syntax') - finish -endif - -syn match alePreviewSelectionFilename /\v^([a-zA-Z]?:?[^:]+)/ -syn match alPreviewNumber /\v:\d+:\d+$/ - -hi def link alePreviewSelectionFilename String -hi def link alePreviewNumber Number - -let b:current_syntax = 'ale-preview-selection' diff --git a/dotfiles/.vim/plugged/ale/test/.config/nvim/init.vim b/dotfiles/.vim/plugged/ale/test/.config/nvim/init.vim deleted file mode 120000 index 90f52f07..00000000 --- a/dotfiles/.vim/plugged/ale/test/.config/nvim/init.vim +++ /dev/null @@ -1 +0,0 @@ -../../vimrc \ No newline at end of file diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_ale_import_command.vader b/dotfiles/.vim/plugged/ale/test/completion/test_ale_import_command.vader deleted file mode 100644 index 4770466e..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_ale_import_command.vader +++ /dev/null @@ -1,562 +0,0 @@ -Before: - Save g:ale_enabled - Save b:ale_enabled - Save g:ale_lint_on_text_changed - Save g:ale_completion_enabled - Save g:ale_completion_autoimport - Save g:ale_completion_max_suggestions - Save g:ale_linters - Save b:ale_linters - - let g:ale_enabled = 0 - let b:ale_enabled = 0 - let g:ale_lint_on_text_changed = 'always' - let g:ale_completion_enabled = 0 - let g:ale_completion_autoimport = 0 - let g:ale_completion_max_suggestions = 50 - let g:ale_linters = {'typescript': ['tsserver'], 'python': ['pyre']} - unlet! b:ale_linters - - let g:server_started_value = 1 - let g:request_id = 0 - let g:LastCallback = v:null - let g:LastHandleCallback = v:null - let g:sent_message_list = [] - let g:code_action_list = [] - let g:execute_list = [] - let g:ale_queue_call_list = [] - - runtime autoload/ale.vim - runtime autoload/ale/util.vim - runtime autoload/ale/code_action.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - - function! ale#util#Execute(expr) abort - call add(g:execute_list, a:expr) - endfunction - - function! ale#Queue(...) abort - call add(g:ale_queue_call_list, a:000) - endfunction - - function! ale#lsp#RegisterCallback(id, Callback) abort - let g:LastHandleCallback = a:Callback - endfunction - - function! ale#lsp#NotifyForChanges(id, buffer) abort - endfunction - - function! ale#lsp#HasCapability(id, capability) abort - return 1 - endfunction - - function! ale#lsp#Send(id, message) abort - let g:request_id += 1 - - call add(g:sent_message_list, a:message) - - return g:request_id - endfunction - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:LastCallback = a:Callback - - return g:server_started_value - endfunction - - function! ale#code_action#HandleCodeAction(code_action, options) abort - Assert !get(a:options, 'should_save') - - call add(g:code_action_list, a:code_action) - endfunction - - function GetLastMessage() - return get(g:execute_list, -1, '') - endfunction - - function CheckLintStates(conn_id, message) - " Check that we request more linter results after adding completions. - AssertEqual [[0, '']], g:ale_queue_call_list - - let g:ale_enabled = 0 - - let g:ale_queue_call_list = [] - call g:LastHandleCallback(a:conn_id, a:message) - AssertEqual [], g:ale_queue_call_list - - let g:ale_enabled = 1 - let g:ale_lint_on_text_changed = 1 - - let g:ale_queue_call_list = [] - call g:LastHandleCallback(a:conn_id, a:message) - AssertEqual [[0, '']], g:ale_queue_call_list - - let g:ale_lint_on_text_changed = 'normal' - - let g:ale_queue_call_list = [] - call g:LastHandleCallback(a:conn_id, a:message) - AssertEqual [[0, '']], g:ale_queue_call_list - - let g:ale_lint_on_text_changed = 'insert' - - let g:ale_queue_call_list = [] - call g:LastHandleCallback(a:conn_id, a:message) - AssertEqual [[0, '']], g:ale_queue_call_list - - let g:ale_queue_call_list = [] - let g:ale_lint_on_text_changed = 'never' - - call g:LastHandleCallback(a:conn_id, a:message) - AssertEqual [], g:ale_queue_call_list - - let g:ale_lint_on_text_changed = '0' - - call g:LastHandleCallback(a:conn_id, a:message) - AssertEqual [], g:ale_queue_call_list - - let g:ale_lint_on_text_changed = 0 - - call g:LastHandleCallback(a:conn_id, a:message) - AssertEqual [], g:ale_queue_call_list - - let g:ale_lint_on_text_changed = 'xxx' - - call g:LastHandleCallback(a:conn_id, a:message) - AssertEqual [], g:ale_queue_call_list - endfunction - -After: - call ale#linter#Reset() - - Restore - - delfunction GetLastMessage - delfunction CheckLintStates - - unlet! g:LastCallback - unlet! g:LastHandleCallback - unlet! g:request_id - unlet! g:server_started_value - unlet! g:sent_message_list - unlet! g:code_action_list - unlet! g:ale_queue_call_list - unlet! g:execute_list - unlet! g:received_message - unlet! b:ale_old_omnifunc - unlet! b:ale_old_completeopt - unlet! b:ale_completion_info - unlet! b:ale_completion_result - unlet! b:ale_complete_done_time - - runtime autoload/ale.vim - runtime autoload/ale/util.vim - runtime autoload/ale/code_action.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - -Given typescript(Some example TypeScript code): - let xyz = 123 - let foo = missingword - - let abc = 456 - -Execute(ALEImport should complain when there's no word at the cursor): - call setpos('.', [bufnr(''), 3, 1, 0]) - ALEImport - - AssertEqual 'echom ''Nothing to complete at cursor!''', GetLastMessage() - -Execute(ALEImport should tell the user if no LSP is available): - let g:server_started_value = 0 - - call setpos('.', [bufnr(''), 2, 16, 0]) - ALEImport - - AssertEqual - \ 'echom ''No completion providers are available.''', - \ GetLastMessage() - -Execute(ALEImport should request imports correctly for tsserver): - call setpos('.', [bufnr(''), 2, 16, 0]) - - ALEImport - - AssertEqual - \ { - \ 'conn_id': 0, - \ 'request_id': 0, - \ 'source': 'ale-import', - \ 'column': 21, - \ 'line': 2, - \ 'line_length': 21, - \ 'prefix': 'missingword', - \ 'additional_edits_only': 1, - \ }, - \ b:ale_completion_info - Assert g:LastCallback isnot v:null - - call g:LastCallback(ale#linter#Get(&filetype)[0], { - \ 'connection_id': 347, - \ 'buffer': bufnr(''), - \}) - - AssertEqual - \ { - \ 'conn_id': 347, - \ 'request_id': 1, - \ 'source': 'ale-import', - \ 'column': 21, - \ 'line': 2, - \ 'line_length': 21, - \ 'prefix': 'missingword', - \ 'additional_edits_only': 1, - \ }, - \ b:ale_completion_info - Assert g:LastHandleCallback isnot v:null - - call g:LastHandleCallback(347, { - \ 'request_seq': 1, - \ 'command': 'completions', - \ 'body': [ - \ {'name': 'missingwordIgnoreMe'}, - \ {'name': 'missingword'}, - \ ], - \}) - - AssertEqual - \ [ - \ [0, 'ts@completions', { - \ 'file': expand('%:p'), - \ 'includeExternalModuleExports': 1, - \ 'offset': 21, - \ 'line': 2, - \ 'prefix': 'missingword', - \ }], - \ [0, 'ts@completionEntryDetails', { - \ 'file': expand('%:p'), - \ 'entryNames': [{'name': 'missingword'}], - \ 'offset': 21, - \ 'line': 2, - \ }] - \ ], - \ g:sent_message_list - AssertEqual 2, b:ale_completion_info.request_id - - let g:ale_enabled = 1 - let g:received_message = { - \ 'request_seq': 2, - \ 'command': 'completionEntryDetails', - \ 'body': [ - \ { - \ 'name': 'missingword', - \ 'kind': 'className', - \ 'displayParts': [], - \ 'codeActions': [{ - \ 'description': 'import { missingword } from "./Something";', - \ 'changes': [], - \ }], - \ }, - \ ], - \} - call g:LastHandleCallback(347, g:received_message) - - AssertEqual - \ [ - \ { - \ 'description': 'import { missingword } from "./Something";', - \ 'changes': [], - \ }, - \ ], - \ g:code_action_list - - call CheckLintStates(347, g:received_message) - -Execute(ALEImport should tell the user when no completions were found from tsserver): - call setpos('.', [bufnr(''), 2, 16, 0]) - - ALEImport - - AssertEqual - \ { - \ 'conn_id': 0, - \ 'request_id': 0, - \ 'source': 'ale-import', - \ 'column': 21, - \ 'line': 2, - \ 'line_length': 21, - \ 'prefix': 'missingword', - \ 'additional_edits_only': 1, - \ }, - \ b:ale_completion_info - Assert g:LastCallback isnot v:null - - call g:LastCallback(ale#linter#Get(&filetype)[0], { - \ 'connection_id': 347, - \ 'buffer': bufnr(''), - \}) - - AssertEqual - \ { - \ 'conn_id': 347, - \ 'request_id': 1, - \ 'source': 'ale-import', - \ 'column': 21, - \ 'line': 2, - \ 'line_length': 21, - \ 'prefix': 'missingword', - \ 'additional_edits_only': 1, - \ }, - \ b:ale_completion_info - Assert g:LastHandleCallback isnot v:null - - call g:LastHandleCallback(347, { - \ 'request_seq': 1, - \ 'command': 'completions', - \ 'body': [ - \ {'name': 'missingwordIgnoreMe'}, - \ ], - \}) - - AssertEqual 'echom ''No possible imports found.''', GetLastMessage() - -Given python(Some example Python code): - xyz = 123 - foo = missingword - - abc = 456 - -Execute(ALEImport should request imports correctly for language servers): - call setpos('.', [bufnr(''), 2, 12, 0]) - - ALEImport - - AssertEqual - \ { - \ 'conn_id': 0, - \ 'request_id': 0, - \ 'source': 'ale-import', - \ 'column': 17, - \ 'line': 2, - \ 'line_length': 17, - \ 'prefix': 'missingword', - \ 'additional_edits_only': 1, - \ }, - \ b:ale_completion_info - Assert g:LastCallback isnot v:null - - call g:LastCallback(ale#linter#Get(&filetype)[0], { - \ 'connection_id': 347, - \ 'buffer': bufnr(''), - \}) - - AssertEqual - \ { - \ 'conn_id': 347, - \ 'request_id': 1, - \ 'source': 'ale-import', - \ 'column': 17, - \ 'line': 2, - \ 'line_length': 17, - \ 'prefix': 'missingword', - \ 'additional_edits_only': 1, - \ 'completion_filter': 'ale#completion#python#CompletionItemFilter', - \ }, - \ b:ale_completion_info - Assert g:LastHandleCallback isnot v:null - - AssertEqual - \ [ - \ [0, 'textDocument/completion', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'character': 16, 'line': 1} - \ }], - \ ], - \ g:sent_message_list - AssertEqual 1, b:ale_completion_info.request_id - - let g:ale_enabled = 1 - let g:received_message = { - \ 'id': 1, - \ 'jsonrpc': '2.0', - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'detail': 'Some other word we should ignore', - \ 'filterText': 'missingwordIgnoreMe', - \ 'insertText': 'missingwordIgnoreMe', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' missingwordIgnoreMe', - \ 'sortText': '3ee19999missingword', - \ 'additionalTextEdits': [ - \ { - \ 'range': { - \ 'start': {'line': 1, 'character': 1}, - \ 'end': {'line': 2, 'character': 1}, - \ }, - \ 'newText': 'from something import missingwordIgnoreMe', - \ }, - \ ], - \ }, - \ { - \ 'detail': 'Some word without text edits', - \ 'filterText': 'missingword', - \ 'insertText': 'missingword', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' missingword', - \ 'sortText': '3ee19999missingword', - \ }, - \ { - \ 'detail': 'The word we should use', - \ 'filterText': 'missingword', - \ 'insertText': 'missingword', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' missingword', - \ 'sortText': '3ee19999missingword', - \ 'additionalTextEdits': [ - \ { - \ 'range': { - \ 'start': {'line': 1, 'character': 1}, - \ 'end': {'line': 2, 'character': 1}, - \ }, - \ 'newText': 'from something import missingword', - \ }, - \ ], - \ }, - \ { - \ 'detail': 'The other word we should not use', - \ 'filterText': 'missingword', - \ 'insertText': 'missingword', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' missingword', - \ 'sortText': '3ee19999missingword', - \ 'additionalTextEdits': [ - \ { - \ 'range': { - \ 'start': {'line': 1, 'character': 1}, - \ 'end': {'line': 2, 'character': 1}, - \ }, - \ 'newText': 'from something_else import missingword', - \ }, - \ ], - \ }, - \ ], - \ }, - \} - call g:LastHandleCallback(347, g:received_message) - - AssertEqual - \ [ - \ { - \ 'description': 'completion', - \ 'changes': [ - \ { - \ 'fileName': expand('%:p'), - \ 'textChanges': [ - \ { - \ 'start': {'line': 2, 'offset': 2}, - \ 'end': {'line': 3, 'offset': 2}, - \ 'newText': 'from something import missingword', - \ }, - \ ], - \ }, - \ ], - \ }, - \ ], - \ g:code_action_list - - call CheckLintStates(347, g:received_message) - -Execute(ALEImport should tell the user when no completions were found from a language server): - call setpos('.', [bufnr(''), 2, 12, 0]) - - ALEImport - - AssertEqual - \ { - \ 'conn_id': 0, - \ 'request_id': 0, - \ 'source': 'ale-import', - \ 'column': 17, - \ 'line': 2, - \ 'line_length': 17, - \ 'prefix': 'missingword', - \ 'additional_edits_only': 1, - \ }, - \ b:ale_completion_info - Assert g:LastCallback isnot v:null - - call g:LastCallback(ale#linter#Get(&filetype)[0], { - \ 'connection_id': 347, - \ 'buffer': bufnr(''), - \}) - - AssertEqual - \ { - \ 'conn_id': 347, - \ 'request_id': 1, - \ 'source': 'ale-import', - \ 'column': 17, - \ 'line': 2, - \ 'line_length': 17, - \ 'prefix': 'missingword', - \ 'additional_edits_only': 1, - \ 'completion_filter': 'ale#completion#python#CompletionItemFilter', - \ }, - \ b:ale_completion_info - Assert g:LastHandleCallback isnot v:null - - AssertEqual - \ [ - \ [0, 'textDocument/completion', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'character': 16, 'line': 1} - \ }], - \ ], - \ g:sent_message_list - AssertEqual 1, b:ale_completion_info.request_id - - let g:received_message = { - \ 'id': 1, - \ 'jsonrpc': '2.0', - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'detail': 'Some other word we should ignore', - \ 'filterText': 'missingwordIgnoreMe', - \ 'insertText': 'missingwordIgnoreMe', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' missingwordIgnoreMe', - \ 'sortText': '3ee19999missingword', - \ 'additionalTextEdits': [ - \ { - \ 'range': { - \ 'start': {'line': 1, 'character': 1}, - \ 'end': {'line': 2, 'character': 1}, - \ }, - \ 'newText': 'from something import missingwordIgnoreMe', - \ }, - \ ], - \ }, - \ { - \ 'detail': 'Some word without text edits', - \ 'filterText': 'missingword', - \ 'insertText': 'missingword', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' missingword', - \ 'sortText': '3ee19999missingword', - \ }, - \ ], - \ }, - \} - call g:LastHandleCallback(347, g:received_message) - - AssertEqual 'echom ''No possible imports found.''', GetLastMessage() diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_complete_events.vader b/dotfiles/.vim/plugged/ale/test/completion/test_complete_events.vader deleted file mode 100644 index cee15985..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_complete_events.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - let g:complete_post_triggered = 0 - - augroup VaderTest - autocmd! - autocmd User ALECompletePost let g:complete_post_triggered = 1 - augroup END - -After: - unlet! b:ale_completion_info - unlet! g:complete_post_triggered - - augroup VaderTest - autocmd! - augroup END - - augroup! VaderTest - -Execute(ALECompletePost should not be triggered when completion is cancelled): - call ale#completion#HandleUserData({}) - - Assert !g:complete_post_triggered - -Execute(ALECompletePost should not be triggered when tools other than ALE insert completions): - call ale#completion#HandleUserData({'user_data': ''}) - call ale#completion#HandleUserData({'user_data': '{}'}) - - Assert !g:complete_post_triggered - -Execute(ALECompletePost should be triggered when ALE inserts completions): - call ale#completion#HandleUserData({ - \ 'user_data': json_encode({'_ale_completion_item': 1}), - \}) - - Assert g:complete_post_triggered diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_completion_events.vader b/dotfiles/.vim/plugged/ale/test/completion/test_completion_events.vader deleted file mode 100644 index ed6dbea3..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_completion_events.vader +++ /dev/null @@ -1,486 +0,0 @@ -Before: - Save g:ale_completion_enabled - Save g:ale_completion_delay - Save g:ale_completion_max_suggestions - Save &l:omnifunc - Save &l:completeopt - - unlet! b:ale_completion_enabled - let g:ale_completion_enabled = 1 - let g:get_completions_called = 0 - let g:feedkeys_calls = [] - let g:fake_mode = 'i' - - let b:ale_linters = { - \ 'typescript': ['tsserver'], - \} - - let &l:completeopt = 'menu,menuone,preview,noselect,noinsert' - - runtime autoload/ale/util.vim - - function! ale#util#FeedKeys(string) abort - call add(g:feedkeys_calls, [a:string]) - endfunction - - " Pretend we're in insert mode for most tests. - function! ale#util#Mode(...) abort - return g:fake_mode - endfunction - - function! CheckCompletionCalled(expect_success) abort - let g:get_completions_called = 0 - - " We just want to check if the function is called. - function! ale#completion#GetCompletions(source) - let g:get_completions_called = 1 - endfunction - - let g:ale_completion_delay = 0 - - " Run this check a few times, as it can fail randomly. - for l:i in range(has('nvim-0.3') || has('win32') ? 5 : 1) - call ale#completion#Queue() - sleep 1m - - if g:get_completions_called is a:expect_success - break - endif - endfor - - AssertEqual a:expect_success, g:get_completions_called - endfunction - - let g:handle_code_action_called = 0 - function! MockHandleCodeAction() abort - " delfunction! ale#code_action#HandleCodeAction - function! ale#code_action#HandleCodeAction(action, options) abort - Assert !get(a:options, 'should_save') - let g:handle_code_action_called += 1 - endfunction - endfunction - -After: - Restore - - unlet! b:ale_completion_enabled - unlet! g:output - unlet! g:fake_mode - unlet! g:get_completions_called - unlet! g:handle_code_action_called - unlet! b:ale_old_omnifunc - unlet! b:ale_old_completeopt - unlet! b:ale_completion_info - unlet! b:ale_completion_result - unlet! b:ale_complete_done_time - unlet! b:ale_linters - - delfunction CheckCompletionCalled - delfunction ale#code_action#HandleCodeAction - delfunction MockHandleCodeAction - - if exists('*CompleteCallback') - delfunction CompleteCallback - endif - - " Stop any timers we left behind. - " This stops the tests from failing randomly. - call ale#completion#StopTimer() - - " Reset the function. The runtime command below should fix this, but doesn't - " seem to fix it. - function! ale#util#Mode(...) abort - return call('mode', a:000) - endfunction - - runtime autoload/ale/completion.vim - runtime autoload/ale/code_action.vim - runtime autoload/ale/util.vim - -Execute(ale#completion#GetCompletions should be called when the cursor position stays the same): - call CheckCompletionCalled(1) - -Execute(ale#completion#GetCompletions should not be called if the global setting is disabled): - let g:ale_completion_enabled = 0 - call CheckCompletionCalled(0) - -Execute(ale#completion#GetCompletions should not be called if the buffer setting is disabled): - let b:ale_completion_enabled = 0 - call CheckCompletionCalled(0) - -Given typescript(): - let abc = y. - let foo = ab - let foo = (ab) - -Execute(ale#completion#GetCompletions should not be called when the cursor position changes): - call setpos('.', [bufnr(''), 1, 2, 0]) - - " We just want to check if the function is called. - function! ale#completion#GetCompletions(source) - let g:get_completions_called = 1 - endfunction - - let g:ale_completion_delay = 0 - call ale#completion#Queue() - - " Change the cursor position before the callback is triggered. - call setpos('.', [bufnr(''), 2, 2, 0]) - - sleep 1m - - Assert !g:get_completions_called - -Execute(ale#completion#GetCompletions should not be called if you switch to normal mode): - let &l:completeopt = 'menu,preview' - let g:fake_mode = 'n' - - " We just want to check if the function is called. - function! ale#completion#GetCompletions(source) - let g:get_completions_called = 1 - endfunction - - let g:ale_completion_delay = 0 - call ale#completion#Queue() - - sleep 1m - - Assert !g:get_completions_called - -Execute(Completion should not be done shortly after the CompleteDone function): - call CheckCompletionCalled(1) - call ale#completion#Done() - call CheckCompletionCalled(0) - -Execute(ale#completion#Show() should remember the omnifunc setting and replace it): - let &l:omnifunc = 'FooBar' - - let b:ale_completion_info = {'source': 'ale-automatic'} - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - AssertEqual 'FooBar', b:ale_old_omnifunc - AssertEqual 'ale#completion#AutomaticOmniFunc', &l:omnifunc - - AssertEqual [], g:feedkeys_calls - sleep 1ms - AssertEqual [["\(ale_show_completion_menu)"]], g:feedkeys_calls - -Execute(ale#completion#Show() should remember the completeopt setting and replace it): - let &l:completeopt = 'menu' - - let b:ale_completion_info = {'source': 'ale-automatic'} - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - AssertEqual 'menu', b:ale_old_completeopt - AssertEqual 'menu,menuone,noinsert', &l:completeopt - - AssertEqual [], g:feedkeys_calls - sleep 1ms - AssertEqual [["\(ale_show_completion_menu)"]], g:feedkeys_calls - -Execute(ale#completion#Show() should set the preview option if it's set): - let &l:completeopt = 'menu,preview' - - let b:ale_completion_info = {'source': 'ale-automatic'} - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - AssertEqual 'menu,preview', b:ale_old_completeopt - AssertEqual 'menu,menuone,noinsert,preview', &l:completeopt - - AssertEqual [], g:feedkeys_calls - sleep 1ms - AssertEqual [["\(ale_show_completion_menu)"]], g:feedkeys_calls - -Execute(ale#completion#Show() should not replace the completeopt setting for manual completion): - let b:ale_completion_info = {'source': 'ale-manual'} - - let &l:completeopt = 'menu,preview' - - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - Assert !exists('b:ale_old_completeopt') - - AssertEqual [], g:feedkeys_calls - sleep 1ms - AssertEqual [["\(ale_show_completion_menu)"]], g:feedkeys_calls - -Execute(ale#completion#AutomaticOmniFunc() should also remember the completeopt setting and replace it): - let &l:completeopt = 'menu,noselect' - - let b:ale_completion_info = {'source': 'ale-automatic'} - call ale#completion#AutomaticOmniFunc(0, '') - - AssertEqual 'menu,noselect', b:ale_old_completeopt - AssertEqual 'menu,menuone,noinsert,noselect', &l:completeopt - -Execute(ale#completion#AutomaticOmniFunc() should set the preview option if it's set): - let &l:completeopt = 'menu,preview' - - let b:ale_completion_info = {'source': 'ale-automatic'} - call ale#completion#AutomaticOmniFunc(0, '') - - AssertEqual 'menu,preview', b:ale_old_completeopt - AssertEqual 'menu,menuone,noinsert,preview', &l:completeopt - -Execute(ale#completion#Show() should make the correct feedkeys() call for automatic completion): - let b:ale_completion_info = {'source': 'ale-automatic'} - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - AssertEqual [], g:feedkeys_calls - sleep 1ms - AssertEqual [["\(ale_show_completion_menu)"]], g:feedkeys_calls - -Execute(ale#completion#Show() should make the correct feedkeys() call for manual completion): - let b:ale_completion_info = {'source': 'ale-automatic'} - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - AssertEqual [], g:feedkeys_calls - sleep 1ms - AssertEqual [["\(ale_show_completion_menu)"]], g:feedkeys_calls - -Execute(ale#completion#Show() should not call feedkeys() for other sources): - let b:ale_completion_info = {'source': 'other-source'} - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - sleep 1ms - AssertEqual [], g:feedkeys_calls - -Execute(ale#completion#Show() shouldn't do anything if you switch back to normal mode): - let &l:completeopt = 'menu,preview' - let g:fake_mode = 'n' - - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - AssertEqual 'menu,preview', &l:completeopt - Assert !exists('b:ale_old_omnifunc') - Assert !exists('b:ale_old_completeopt') - Assert !exists('b:ale_completion_result') - AssertEqual [], g:feedkeys_calls - -Execute(ale#completion#Show() should save the result it is given): - call ale#completion#Show([]) - - AssertEqual [], b:ale_completion_result - - call ale#completion#Show([{'word': 'x', 'kind': 'v', 'icase': 1}]) - - AssertEqual [{'word': 'x', 'kind': 'v', 'icase': 1}], b:ale_completion_result - -Execute(ale#completion#Done() should restore old omnifunc values): - let b:ale_old_omnifunc = 'FooBar' - - call ale#completion#Done() - - " We reset the old omnifunc setting and remove the buffer variable. - AssertEqual 'FooBar', &l:omnifunc - Assert !has_key(b:, 'ale_old_omnifunc') - -Execute(ale#completion#Done() should restore the old completeopt setting): - let b:ale_old_completeopt = 'menu' - - call ale#completion#Done() - - AssertEqual 'menu', &l:completeopt - Assert !has_key(b:, 'ale_old_completeopt') - -Execute(ale#completion#Done() should leave settings alone when none were remembered): - let &l:omnifunc = 'BazBoz' - let &l:completeopt = 'menu' - - call ale#completion#Done() - - AssertEqual 'BazBoz', &l:omnifunc - AssertEqual 'menu', &l:completeopt - -Execute(The completion request_id should be reset when queuing again): - let b:ale_completion_info = {'request_id': 123} - - let g:ale_completion_delay = 0 - call ale#completion#Queue() - sleep 1m - - AssertEqual 0, b:ale_completion_info.request_id - -Execute(b:ale_completion_info should be set up correctly when requesting completions automatically): - let b:ale_completion_result = [] - call setpos('.', [bufnr(''), 3, 14, 0]) - call ale#completion#GetCompletions('ale-automatic') - - AssertEqual - \ { - \ 'request_id': 0, - \ 'conn_id': 0, - \ 'column': 14, - \ 'line_length': 14, - \ 'line': 3, - \ 'prefix': 'ab', - \ 'source': 'ale-automatic', - \ }, - \ b:ale_completion_info - Assert !exists('b:ale_completion_result') - -Execute(b:ale_completion_info should be set up correctly when requesting completions manually): - let b:ale_completion_result = [] - call setpos('.', [bufnr(''), 3, 14, 0]) - ALEComplete - - AssertEqual - \ { - \ 'request_id': 0, - \ 'conn_id': 0, - \ 'column': 14, - \ 'line_length': 14, - \ 'line': 3, - \ 'prefix': 'ab', - \ 'source': 'ale-manual', - \ }, - \ b:ale_completion_info - Assert !exists('b:ale_completion_result') - -Execute(b:ale_completion_info should be set up correctly for other sources): - let b:ale_completion_result = [] - call setpos('.', [bufnr(''), 3, 14, 0]) - call ale#completion#GetCompletions('ale-callback') - - AssertEqual - \ { - \ 'request_id': 0, - \ 'conn_id': 0, - \ 'column': 14, - \ 'line_length': 14, - \ 'line': 3, - \ 'prefix': 'ab', - \ 'source': 'ale-callback', - \ }, - \ b:ale_completion_info - Assert !exists('b:ale_completion_result') - -Execute(b:ale_completion_info should be set up correctly when requesting completions via callback): - let b:ale_completion_result = [] - call setpos('.', [bufnr(''), 3, 14, 0]) - - function! CompleteCallback() abort - echo 'Called' - endfunction - - - call ale#completion#GetCompletions('ale-callback', {'callback': funcref('CompleteCallback')}) - - AssertEqual - \ { - \ 'request_id': 0, - \ 'conn_id': 0, - \ 'column': 14, - \ 'line_length': 14, - \ 'line': 3, - \ 'prefix': 'ab', - \ 'source': 'ale-callback', - \ }, - \ b:ale_completion_info - Assert !exists('b:ale_completion_result') - -Execute(The correct keybinds should be configured): - redir => g:output - silent map (ale_show_completion_menu) - redir END - - AssertEqual - \ [ - \ 'n (ale_show_completion_menu) * :call ale#completion#RestoreCompletionOptions()', - \ 'o (ale_show_completion_menu) * ', - \ 'v (ale_show_completion_menu) * ', - \ ], - \ sort(split(g:output, "\n")) - -Execute(Running the normal mode keybind should reset the settings): - let b:ale_old_omnifunc = 'FooBar' - let b:ale_old_completeopt = 'menu' - - " We can't run the keybind, but we can call the function. - call ale#completion#RestoreCompletionOptions() - - AssertEqual 'FooBar', &l:omnifunc - AssertEqual 'menu', &l:completeopt - Assert !has_key(b:, 'ale_old_omnifunc') - Assert !has_key(b:, 'ale_old_completeopt') - -Execute(HandleUserData should call ale#code_action#HandleCodeAction): - let b:ale_completion_info = {'source': 'ale-manual'} - call MockHandleCodeAction() - - call ale#completion#HandleUserData({}) - AssertEqual g:handle_code_action_called, 0 - - call ale#completion#HandleUserData({ - \ 'user_data': '' - \}) - AssertEqual g:handle_code_action_called, 0 - - call ale#completion#HandleUserData({ - \ 'user_data': json_encode({}), - \}) - AssertEqual g:handle_code_action_called, 0 - - call ale#completion#HandleUserData({ - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [], - \ }), - \}) - AssertEqual g:handle_code_action_called, 0 - - call ale#completion#HandleUserData({ - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [ - \ {'description': '', 'changes': []}, - \ ], - \ }), - \}) - AssertEqual g:handle_code_action_called, 1 - - let b:ale_completion_info = {'source': 'ale-automatic'} - call ale#completion#HandleUserData({ - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [ - \ {'description': '', 'changes': []}, - \ ], - \ }), - \}) - AssertEqual g:handle_code_action_called, 2 - - let b:ale_completion_info = {'source': 'ale-callback'} - call ale#completion#HandleUserData({ - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [ - \ {'description': '', 'changes': []}, - \ ], - \ }), - \}) - AssertEqual g:handle_code_action_called, 3 - - let b:ale_completion_info = {'source': 'ale-omnifunc'} - call ale#completion#HandleUserData({ - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [ - \ {'description': '', 'changes': []}, - \ ], - \ }), - \}) - AssertEqual g:handle_code_action_called, 4 - -Execute(ale#code_action#HandleCodeAction should not be called when when source is not ALE): - call MockHandleCodeAction() - let b:ale_completion_info = {'source': 'syntastic'} - call ale#completion#HandleUserData({ - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [ - \ {'description': '', 'changes': []}, - \ ], - \ }), - \}) - AssertEqual g:handle_code_action_called, 0 diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_completion_filtering.vader b/dotfiles/.vim/plugged/ale/test/completion/test_completion_filtering.vader deleted file mode 100644 index 172203a4..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_completion_filtering.vader +++ /dev/null @@ -1,142 +0,0 @@ -Before: - Save g:ale_completion_excluded_words - - let g:ale_completion_excluded_words = [] - -After: - Restore - - unlet! b:ale_completion_excluded_words - unlet! b:suggestions - -Execute(Prefix filtering should work for Lists of strings): - AssertEqual - \ ['FooBar', 'foo'], - \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], 'foo', 0) - AssertEqual - \ ['FooBar', 'FongBar', 'baz', 'foo'], - \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], '.', 0) - AssertEqual - \ ['FooBar', 'FongBar', 'baz', 'foo'], - \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], '', 0) - -Execute(Exact filtering should work): - AssertEqual - \ ['foo'], - \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], 'foo', 1) - AssertEqual - \ ['FooBar', 'FongBar', 'baz', 'foo'], - \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'baz', 'foo'], '.', 1) - AssertEqual - \ ['Foo'], - \ ale#completion#Filter(bufnr(''), '', ['FooBar', 'FongBar', 'Foo', 'foo'], 'Foo', 1) - -Execute(Prefix filtering should work for completion items): - AssertEqual - \ [{'word': 'FooBar'}, {'word': 'foo'}], - \ ale#completion#Filter( - \ bufnr(''), - \ '', - \ [ - \ {'word': 'FooBar'}, - \ {'word': 'FongBar'}, - \ {'word': 'baz'}, - \ {'word': 'foo'}, - \ ], - \ 'foo', - \ 0, - \ ) - - AssertEqual - \ [ - \ {'word': 'FooBar'}, - \ {'word': 'FongBar'}, - \ {'word': 'baz'}, - \ {'word': 'foo'}, - \ ], - \ ale#completion#Filter( - \ bufnr(''), - \ '', - \ [ - \ {'word': 'FooBar'}, - \ {'word': 'FongBar'}, - \ {'word': 'baz'}, - \ {'word': 'foo'}, - \ ], - \ '.', - \ 0, - \ ) - -Execute(Excluding words from completion results should work): - let b:ale_completion_excluded_words = ['it', 'describe'] - - AssertEqual - \ [{'word': 'Italian'}], - \ ale#completion#Filter( - \ bufnr(''), - \ '', - \ [ - \ {'word': 'Italian'}, - \ {'word': 'it'}, - \ ], - \ 'it', - \ 0, - \ ) - - AssertEqual - \ [{'word': 'Deutsch'}], - \ ale#completion#Filter( - \ bufnr(''), - \ '', - \ [ - \ {'word': 'describe'}, - \ {'word': 'Deutsch'}, - \ ], - \ 'de', - \ 0, - \ ) - - AssertEqual - \ [{'word': 'Deutsch'}], - \ ale#completion#Filter( - \ bufnr(''), - \ '', - \ [ - \ {'word': 'describe'}, - \ {'word': 'Deutsch'}, - \ ], - \ '.', - \ 0, - \ ) - -Execute(Excluding words from completion results should work with lists of Strings): - let b:ale_completion_excluded_words = ['it', 'describe'] - - AssertEqual - \ ['Italian'], - \ ale#completion#Filter(bufnr(''), '', ['Italian', 'it'], 'it', 0) - AssertEqual - \ ['Deutsch'], - \ ale#completion#Filter(bufnr(''), '', ['describe', 'Deutsch'], 'de', 0) - AssertEqual - \ ['Deutsch'], - \ ale#completion#Filter(bufnr(''), '', ['describe', 'Deutsch'], '.', 0) - AssertEqual - \ ['Deutsch'], - \ ale#completion#Filter(bufnr(''), '', ['Deutsch'], '', 0) - -Execute(Filtering shouldn't modify the original list): - let b:ale_completion_excluded_words = ['it', 'describe'] - let b:suggestions = [{'word': 'describe'}] - - AssertEqual [], ale#completion#Filter(bufnr(''), '', b:suggestions, '.', 0) - AssertEqual b:suggestions, [{'word': 'describe'}] - AssertEqual [], ale#completion#Filter(bufnr(''), '', b:suggestions, 'de', 0) - AssertEqual b:suggestions, [{'word': 'describe'}] - -Execute(Filtering should respect filetype triggers): - let b:suggestions = [{'word': 'describe'}] - - AssertEqual b:suggestions, ale#completion#Filter(bufnr(''), '', b:suggestions, '.', 0) - AssertEqual b:suggestions, ale#completion#Filter(bufnr(''), 'rust', b:suggestions, '.', 0) - AssertEqual b:suggestions, ale#completion#Filter(bufnr(''), 'rust', b:suggestions, '::', 0) diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_completion_prefixes.vader b/dotfiles/.vim/plugged/ale/test/completion/test_completion_prefixes.vader deleted file mode 100644 index 3f2cab15..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_completion_prefixes.vader +++ /dev/null @@ -1,65 +0,0 @@ -Given typescript(): - let abc = y. - let foo = ab - let foo = (ab) - let string1 = ' - let string2 = " - -Execute(Completion should be done after dots in TypeScript): - AssertEqual '.', ale#completion#GetPrefix(&filetype, 1, 13) - -Execute(Completion should be done after words in TypeScript): - AssertEqual 'ab', ale#completion#GetPrefix(&filetype, 2, 13) - -Execute(Completion should be done after words in parens in TypeScript): - AssertEqual 'ab', ale#completion#GetPrefix(&filetype, 3, 14) - -Execute(Completion should not be done after parens in TypeScript): - AssertEqual '', ale#completion#GetPrefix(&filetype, 3, 15) - -Execute(Completion should be done after strings in TypeScript): - AssertEqual '''', ale#completion#GetPrefix(&filetype, 4, 16) - AssertEqual '"', ale#completion#GetPrefix(&filetype, 5, 16) - -Execute(Completion prefixes should work for other filetypes): - AssertEqual 'ab', ale#completion#GetPrefix('xxxyyyzzz', 3, 14) - -Execute(Completion prefixes should work for other filetypes): - AssertEqual 'ab', ale#completion#GetPrefix('xxxyyyzzz', 3, 14) - -Given rust(): - let abc = y. - let abc = String:: - let foo = (ab) - -Execute(Completion should be done after dots in Rust): - AssertEqual '.', ale#completion#GetPrefix(&filetype, 1, 13) - -Execute(Completion should be done after colons in Rust): - AssertEqual '::', ale#completion#GetPrefix(&filetype, 2, 19) - -Execute(Completion should be done after words in parens in Rust): - AssertEqual 'ab', ale#completion#GetPrefix(&filetype, 3, 14) - -Execute(Completion should not be done after parens in Rust): - AssertEqual '', ale#completion#GetPrefix(&filetype, 3, 15) - -Given lisp(): - (minus-name - (full-name) - -Execute(Completion should be done for function names with minuses in Lisp): - AssertEqual 'minus-name', ale#completion#GetPrefix(&filetype, 1, 12) - -Execute(Completion should not be done after parens in Lisp): - AssertEqual '', ale#completion#GetPrefix(&filetype, 2, 12) - -Given clojure(): - (minus-name - (full-name) - -Execute(Completion should be done for function names with minuses in Clojure): - AssertEqual 'minus-name', ale#completion#GetPrefix(&filetype, 1, 12) - -Execute(Completion should not be done after parens in Clojure): - AssertEqual '', ale#completion#GetPrefix(&filetype, 2, 12) diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_messages.vader b/dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_messages.vader deleted file mode 100644 index f6aa332b..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_messages.vader +++ /dev/null @@ -1,307 +0,0 @@ -Before: - Save g:ale_completion_delay - Save g:ale_completion_max_suggestions - Save g:ale_completion_info - Save &l:omnifunc - Save &l:completeopt - - let g:ale_completion_enabled = 1 - - call ale#test#SetDirectory('/testplugin/test/completion') - call ale#test#SetFilename('dummy.txt') - - runtime autoload/ale/lsp.vim - - let g:message_list = [] - let g:capability_checked = '' - let g:conn_id = v:null - let g:Callback = '' - let g:init_callback_list = [] - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - - let l:details = { - \ 'command': 'foobar', - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': '/foo/bar', - \} - - call add(g:init_callback_list, {-> a:Callback(a:linter, l:details)}) - endfunction - - " Pretend we're in insert mode for most tests. - function! ale#util#Mode(...) abort - return 'i' - endfunction - - function! ale#lsp#HasCapability(conn_id, capability) abort - let g:capability_checked = a:capability - - return 1 - endfunction - - function! ale#lsp#RegisterCallback(conn_id, callback) abort - let g:Callback = a:callback - endfunction - - " Replace the Send function for LSP, so we can monitor calls to it. - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 1 - endfunction - -After: - Restore - - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - unlet! g:message_list - unlet! g:capability_checked - unlet! g:init_callback_list - unlet! g:conn_id - unlet! g:Callback - unlet! b:ale_old_omnifunc - unlet! b:ale_old_completeopt - unlet! b:ale_completion_info - unlet! b:ale_complete_done_time - unlet! b:ale_linters - unlet! b:ale_tsserver_completion_names - - " Reset the function. - function! ale#util#Mode(...) abort - return call('mode', a:000) - endfunction - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - " Stop any timers we left behind. - " This stops the tests from failing randomly. - call ale#completion#StopTimer() - - runtime autoload/ale/completion.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - -Given typescript(Some typescript file): - foo - somelongerline - bazxyzxyzxyz - -Execute(The right message should be sent for the initial tsserver request): - runtime ale_linters/typescript/tsserver.vim - let b:ale_linters = ['tsserver'] - " The cursor position needs to match what was saved before. - call setpos('.', [bufnr(''), 1, 3, 0]) - - call ale#completion#GetCompletions('ale-automatic') - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual 1, len(g:init_callback_list) - call map(g:init_callback_list, 'v:val()') - - AssertEqual 'completion', g:capability_checked - - " We should send the right callback. - AssertEqual - \ 'function(''ale#completion#HandleTSServerResponse'')', - \ string(g:Callback) - " We should send the right message. - AssertEqual - \ [[0, 'ts@completions', { - \ 'file': expand('%:p'), - \ 'line': 1, - \ 'offset': 3, - \ 'prefix': 'fo', - \ 'includeExternalModuleExports': g:ale_completion_autoimport, - \ }]], - \ g:message_list - " We should set up the completion info correctly. - AssertEqual - \ { - \ 'line_length': 3, - \ 'conn_id': g:conn_id, - \ 'column': 3, - \ 'request_id': 1, - \ 'line': 1, - \ 'prefix': 'fo', - \ 'source': 'ale-automatic', - \ }, - \ get(b:, 'ale_completion_info', {}) - -Execute(The right message sent to the tsserver LSP when the first completion message is received): - " The cursor position needs to match what was saved before. - call setpos('.', [bufnr(''), 1, 1, 0]) - let b:ale_completion_info = { - \ 'conn_id': 123, - \ 'prefix': 'f', - \ 'request_id': 4, - \ 'line': 1, - \ 'column': 1, - \} - " We should only show up to this many suggestions. - let g:ale_completion_max_suggestions = 3 - - " Handle the response for completions. - call ale#completion#HandleTSServerResponse(123, { - \ 'request_seq': 4, - \ 'command': 'completions', - \ 'body': [ - \ {'name': 'Baz'}, - \ {'name': 'dingDong'}, - \ {'name': 'Foo', 'source': '/path/to/foo.ts'}, - \ {'name': 'FooBar'}, - \ {'name': 'frazzle'}, - \ {'name': 'FFS'}, - \ ], - \}) - - " We should save the names we got in the buffer, as TSServer doesn't return - " details for every name. - AssertEqual [{ - \ 'word': 'Foo', - \ 'source': '/path/to/foo.ts', - \ }, { - \ 'word': 'FooBar', - \ 'source': '', - \ }, { - \ 'word': 'frazzle', - \ 'source': '', - \}], - \ get(b:, 'ale_tsserver_completion_names', []) - - " The entry details messages should have been sent. - AssertEqual - \ [[ - \ 0, - \ 'ts@completionEntryDetails', - \ { - \ 'file': expand('%:p'), - \ 'entryNames': [{ - \ 'name': 'Foo', - \ 'source': '/path/to/foo.ts', - \ }, { - \ 'name': 'FooBar', - \ }, { - \ 'name': 'frazzle', - \ }], - \ 'offset': 1, - \ 'line': 1, - \ }, - \ ]], - \ g:message_list - -Given python(Some Python file): - foo - somelongerline - bazxyzxyzxyz - -Execute(The right message should be sent for the initial LSP request): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - " The cursor position needs to match what was saved before. - call setpos('.', [bufnr(''), 1, 5, 0]) - - call ale#completion#GetCompletions('ale-automatic') - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual 1, len(g:init_callback_list) - call map(g:init_callback_list, 'v:val()') - - AssertEqual 'completion', g:capability_checked - - " We should send the right callback. - AssertEqual - \ 'function(''ale#completion#HandleLSPResponse'')', - \ string(g:Callback) - " We should send the right message. - " The character index needs to be at most the index of the last character on - " the line, or integration with pylsp will be broken. - " - " We need to send the message for changing the document first. - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/completion', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ }], - \ ], - \ g:message_list - " We should set up the completion info correctly. - AssertEqual - \ { - \ 'line_length': 3, - \ 'conn_id': g:conn_id, - \ 'column': 3, - \ 'request_id': 1, - \ 'line': 1, - \ 'prefix': 'fo', - \ 'source': 'ale-automatic', - \ 'completion_filter': 'ale#completion#python#CompletionItemFilter', - \ }, - \ get(b:, 'ale_completion_info', {}) - -Execute(Two completion requests shouldn't be sent in a row): - call ale#linter#PreventLoading('python') - call ale#linter#Define('python', { - \ 'name': 'foo', - \ 'lsp': 'stdio', - \ 'executable': 'foo', - \ 'command': 'foo', - \ 'project_root': {-> '/foo/bar'}, - \}) - call ale#linter#Define('python', { - \ 'name': 'bar', - \ 'lsp': 'stdio', - \ 'executable': 'foo', - \ 'command': 'foo', - \ 'project_root': {-> '/foo/bar'}, - \}) - let b:ale_linters = ['foo', 'bar'] - - " The cursor position needs to match what was saved before. - call setpos('.', [bufnr(''), 1, 5, 0]) - - call ale#completion#GetCompletions('ale-automatic') - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual 2, len(g:init_callback_list) - call map(g:init_callback_list, 'v:val()') - - AssertEqual 'completion', g:capability_checked - - " We should only send one completion message for two LSP servers. - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/completion', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ }], - \ ], - \ g:message_list diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_parsing.vader b/dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_parsing.vader deleted file mode 100644 index 7fe22e0c..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_lsp_completion_parsing.vader +++ /dev/null @@ -1,736 +0,0 @@ -Before: - Save g:ale_completion_autoimport - Save g:ale_completion_max_suggestions - - let g:ale_completion_max_suggestions = 50 - -After: - Restore - - unlet! b:ale_completion_info - -Execute(Should handle Rust completion results correctly): - let g:ale_completion_autoimport = 0 - - AssertEqual - \ [ - \ {'word': 'new', 'dup': 0, 'menu': 'pub fn new() -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'with_capacity', 'dup': 0, 'menu': 'pub fn with_capacity(capacity: usize) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_utf8', 'dup': 0, 'menu': 'pub fn from_utf8(vec: Vec) -> Result', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_utf8_lossy', 'dup': 0, 'menu': 'pub fn from_utf8_lossy<''a>(v: &''a [u8]) -> Cow<''a, str>', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_utf16', 'dup': 0, 'menu': 'pub fn from_utf16(v: &[u16]) -> Result', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_utf16_lossy', 'dup': 0, 'menu': 'pub fn from_utf16_lossy(v: &[u16]) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_raw_parts', 'dup': 0, 'menu': 'pub unsafe fn from_raw_parts(buf: *mut u8, length: usize, capacity: usize) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_utf8_unchecked', 'dup': 0, 'menu': 'pub unsafe fn from_utf8_unchecked(bytes: Vec) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_iter', 'dup': 0, 'menu': 'fn from_iter>(iter: I) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_iter', 'dup': 0, 'menu': 'fn from_iter>(iter: I) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_iter', 'dup': 0, 'menu': 'fn from_iter>(iter: I) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_iter', 'dup': 0, 'menu': 'fn from_iter>(iter: I) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_iter', 'dup': 0, 'menu': 'fn from_iter>>(iter: I) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Searcher', 'dup': 0, 'menu': 'type Searcher = <&''b str as Pattern<''a>>::Searcher;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'default', 'dup': 0, 'menu': 'fn default() -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Output', 'dup': 0, 'menu': 'type Output = String;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Output', 'dup': 0, 'menu': 'type Output = str;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Output', 'dup': 0, 'menu': 'type Output = str;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Output', 'dup': 0, 'menu': 'type Output = str;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Output', 'dup': 0, 'menu': 'type Output = str;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Output', 'dup': 0, 'menu': 'type Output = str;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Output', 'dup': 0, 'menu': 'type Output = str;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Target', 'dup': 0, 'menu': 'type Target = str;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'Err', 'dup': 0, 'menu': 'type Err = ParseError;', 'info': '', 'kind': 't', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from_str', 'dup': 0, 'menu': 'fn from_str(s: &str) -> Result', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from', 'dup': 0, 'menu': 'fn from(s: &''a str) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from', 'dup': 0, 'menu': 'fn from(s: Box) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'from', 'dup': 0, 'menu': 'fn from(s: Cow<''a, str>) -> String', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'to_vec', 'dup': 0, 'menu': 'pub fn to_vec(&self) -> Vec where T: Clone,', 'info': '', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \], - \ ale#completion#ParseLSPCompletions({ - \ "jsonrpc":"2.0", - \ "id":65, - \ "result":[ - \ { - \ "label":"new", - \ "kind":3, - \ "detail":"pub fn new() -> String" - \ }, - \ { - \ "label":"with_capacity", - \ "kind":3, - \ "detail":"pub fn with_capacity(capacity: usize) -> String" - \ }, - \ { - \ "label":"from_utf8", - \ "kind":3, - \ "detail":"pub fn from_utf8(vec: Vec) -> Result" - \ }, - \ { - \ "label":"from_utf8_lossy", - \ "kind":3, - \ "detail":"pub fn from_utf8_lossy<'a>(v: &'a [u8]) -> Cow<'a, str>" - \ }, - \ { - \ "label":"from_utf16", - \ "kind":3, - \ "detail":"pub fn from_utf16(v: &[u16]) -> Result" - \ }, - \ { - \ "label":"from_utf16_lossy", - \ "kind":3, - \ "detail":"pub fn from_utf16_lossy(v: &[u16]) -> String" - \ }, - \ { - \ "label":"from_raw_parts", - \ "kind":3, - \ "detail":"pub unsafe fn from_raw_parts(buf: *mut u8, length: usize, capacity: usize) -> String" - \ }, - \ { - \ "label":"from_utf8_unchecked", - \ "kind":3, - \ "detail":"pub unsafe fn from_utf8_unchecked(bytes: Vec) -> String" - \ }, - \ { - \ "label":"from_iter", - \ "kind":3, - \ "detail":"fn from_iter>(iter: I) -> String" - \ }, - \ { - \ "label":"from_iter", - \ "kind":3, - \ "detail":"fn from_iter>(iter: I) -> String" - \ }, - \ { - \ "label":"from_iter", - \ "kind":3, - \ "detail":"fn from_iter>(iter: I) -> String" - \ }, - \ { - \ "label":"from_iter", - \ "kind":3, - \ "detail":"fn from_iter>(iter: I) -> String" - \ }, - \ { - \ "label":"from_iter", - \ "kind":3, - \ "detail":"fn from_iter>>(iter: I) -> String" - \ }, - \ { - \ "label":"Searcher", - \ "kind":8, - \ "detail":"type Searcher = <&'b str as Pattern<'a>>::Searcher;" - \ }, - \ { - \ "label":"default", - \ "kind":3, - \ "detail":"fn default() -> String" - \ }, - \ { - \ "label":"Output", - \ "kind":8, - \ "detail":"type Output = String;" - \ }, - \ { - \ "label":"Output", - \ "kind":8, - \ "detail":"type Output = str;" - \ }, - \ { - \ "label":"Output", - \ "kind":8, - \ "detail":"type Output = str;" - \ }, - \ { - \ "label":"Output", - \ "kind":8, - \ "detail":"type Output = str;" - \ }, - \ { - \ "label":"Output", - \ "kind":8, - \ "detail":"type Output = str;" - \ }, - \ { - \ "label":"Output", - \ "kind":8, - \ "detail":"type Output = str;" - \ }, - \ { - \ "label":"Output", - \ "kind":8, - \ "detail":"type Output = str;" - \ }, - \ { - \ "label":"Target", - \ "kind":8, - \ "detail":"type Target = str;" - \ }, - \ { - \ "label":"Err", - \ "kind":8, - \ "detail":"type Err = ParseError;" - \ }, - \ { - \ "label":"from_str", - \ "kind":3, - \ "detail":"fn from_str(s: &str) -> Result" - \ }, - \ { - \ "label":"from", - \ "kind":3, - \ "detail":"fn from(s: &'a str) -> String" - \ }, - \ { - \ "label":"from", - \ "kind":3, - \ "detail":"fn from(s: Box) -> String" - \ }, - \ { - \ "label":"from", - \ "kind":3, - \ "detail":"fn from(s: Cow<'a, str>) -> String" - \ }, - \ { - \ "label":"to_vec", - \ "kind":3, - \ "detail":"pub fn to_vec(&self) -> Vec\nwhere\n T: Clone," - \ } - \ ] - \ }) - -Execute(Should handle Python completion results correctly): - let g:ale_completion_autoimport = 0 - let b:ale_completion_info = { - \ 'completion_filter': 'ale#completion#python#CompletionItemFilter', - \} - - AssertEqual - \ [ - \ {'word': 'what', 'dup': 0, 'menu': 'example-python-project.bar.Bar', 'info': "what()\n\n", 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ ], - \ ale#completion#ParseLSPCompletions({ - \ "jsonrpc":"2.0", - \ "id":6, - \ "result":{ - \ "isIncomplete":v:false, - \ "items":[ - \ { - \ "label":"what()", - \ "kind":3, - \ "detail":"example-python-project.bar.Bar", - \ "documentation":"what()\n\n", - \ "sortText":"awhat", - \ "insertText":"what" - \ }, - \ { - \ "label":"__class__", - \ "kind":7, - \ "detail":"object", - \ "documentation":"type(object_or_name, bases, dict)\ntype(object) -> the object's type\ntype(name, bases, dict) -> a new type", - \ "sortText":"z__class__", - \ "insertText":"__class__" - \ }, - \ { - \ "label":"__delattr__(name)", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Implement delattr(self, name).", - \ "sortText":"z__delattr__", - \ "insertText":"__delattr__" - \ }, - \ { - \ "label":"__dir__()", - \ "kind":3, - \ "detail":"object", - \ "documentation":"__dir__() -> list\ndefault dir() implementation", - \ "sortText":"z__dir__", - \ "insertText":"__dir__" - \ }, - \ { - \ "label":"__doc__", - \ "kind":18, - \ "detail":"object", - \ "documentation":"str(object='') -> str\nstr(bytes_or_buffer[, encoding[, errors]]) -> str\n\nCreate a new string object from the given object. If encoding or\nerrors is specified, then the object must expose a data buffer\nthat will be decoded using the given encoding and error handler.\nOtherwise, returns the result of object.__str__() (if defined)\nor repr(object).\nencoding defaults to sys.getdefaultencoding().\nerrors defaults to 'strict'.", - \ "sortText":"z__doc__", - \ "insertText":"__doc__" - \ }, - \ { - \ "label":"__eq__(value)", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Return self==value.", - \ "sortText":"z__eq__", - \ "insertText":"__eq__" - \ }, - \ { - \ "label":"__format__()", - \ "kind":3, - \ "detail":"object", - \ "documentation":"default object formatter", - \ "sortText":"z__format__", - \ "insertText":"__format__" - \ }, - \ { - \ "label":"__ge__(value)", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Return self>=value.", - \ "sortText":"z__ge__", - \ "insertText":"__ge__" - \ }, - \ { - \ "label":"__getattribute__(name)", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Return getattr(self, name).", - \ "sortText":"z__getattribute__", - \ "insertText":"__getattribute__" - \ }, - \ { - \ "label":"__gt__(value)", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Return self>value.", - \ "sortText":"z__gt__", - \ "insertText":"__gt__" - \ }, - \ { - \ "label":"__hash__()", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Return hash(self).", - \ "sortText":"z__hash__", - \ "insertText":"__hash__" - \ }, - \ { - \ "label":"__init__(args, kwargs)", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Initialize self.\u00a0\u00a0See help(type(self)) for accurate signature.", - \ "sortText":"z__init__", - \ "insertText":"__init__" - \ }, - \ { - \ "label":"__init_subclass__()", - \ "kind":3, - \ "detail":"object", - \ "documentation":"This method is called when a class is subclassed.\n\nThe default implementation does nothing. It may be\noverridden to extend subclasses.", - \ "sortText":"z__init_subclass__", - \ "insertText":"__init_subclass__" - \ }, - \ { - \ "label":"__le__(value)", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Return self<=value.", - \ "sortText":"z__le__", - \ "insertText":"__le__" - \ }, - \ { - \ "label":"__lt__(value)", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Return self int\nsize of object in memory, in bytes", - \ "sortText":"z__sizeof__", - \ "insertText":"__sizeof__" - \ }, - \ { - \ "label":"__str__()", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Return str(self).", - \ "sortText":"z__str__", - \ "insertText":"__str__" - \ }, - \ { - \ "label":"__subclasshook__()", - \ "kind":3, - \ "detail":"object", - \ "documentation":"Abstract classes can override this to customize issubclass().\n\nThis is invoked early on by abc.ABCMeta.__subclasscheck__().\nIt should return True, False or NotImplemented.\u00a0\u00a0If it returns\nNotImplemented, the normal algorithm is used.\u00a0\u00a0Otherwise, it\noverrides the normal algorithm (and the outcome is cached).", - \ "sortText":"z__subclasshook__", - \ "insertText":"__subclasshook__" - \ } - \ ] - \ } - \ }) - -Execute(Should handle extra Python completion results correctly): - let g:ale_completion_autoimport = 0 - - let b:ale_completion_info = { - \ 'completion_filter': 'ale#completion#python#CompletionItemFilter', - \ 'prefix': 'mig', - \} - - AssertEqual - \ [ - \ {'word': 'migrations', 'dup': 0, 'menu': 'xxx', 'info': 'migrations', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ {'word': 'MigEngine', 'dup': 0, 'menu': 'xxx', 'info': 'mig engine', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ ], - \ ale#completion#ParseLSPCompletions({ - \ 'jsonrpc': '2.0', - \ 'id': 6, - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'label': 'migrations', - \ 'kind': 3, - \ 'detail': 'xxx', - \ 'documentation': 'migrations', - \ }, - \ { - \ 'label': 'MigEngine', - \ 'kind': 3, - \ 'detail': 'xxx', - \ 'documentation': 'mig engine', - \ }, - \ { - \ 'label': 'ignore me', - \ 'kind': 3, - \ 'detail': 'nope', - \ 'documentation': 'nope', - \ }, - \ ] - \ } - \ }) - -Execute(Should handle missing keys): - let g:ale_completion_autoimport = 0 - - AssertEqual - \ [ - \ {'word': 'x', 'dup': 0, 'menu': '', 'info': '', 'kind': 'v', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ ], - \ ale#completion#ParseLSPCompletions({ - \ 'jsonrpc': '2.0', - \ 'id': 6, - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'label': 'x', - \ }, - \ ] - \ } - \ }) - -Execute(Should handle documentation in the markdown format): - let g:ale_completion_autoimport = 0 - - AssertEqual - \ [ - \ {'word': 'migrations', 'dup': 0, 'menu': 'xxx', 'info': 'Markdown documentation', 'kind': 'f', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ ], - \ ale#completion#ParseLSPCompletions({ - \ 'jsonrpc': '2.0', - \ 'id': 6, - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'label': 'migrations', - \ 'kind': 3, - \ 'detail': 'xxx', - \ 'documentation': { - \ 'kind': 'markdown', - \ 'value': 'Markdown documentation', - \ }, - \ }, - \ ], - \ }, - \ }) - -Execute(Should handle completion messages with textEdit objects): - let g:ale_completion_autoimport = 0 - - AssertEqual - \ [ - \ {'word': 'next_callback', 'dup': 0, 'menu': 'PlayTimeCallback', 'info': '', 'kind': 'v', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ ], - \ ale#completion#ParseLSPCompletions({ - \ 'id': 226, - \ 'jsonrpc': '2.0', - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'detail': 'PlayTimeCallback', - \ 'filterText': 'next_callback', - \ 'insertText': 'ignoreme', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' next_callback', - \ 'sortText': '3ee19999next_callback', - \ 'textEdit': { - \ 'newText': 'next_callback', - \ 'range': { - \ 'end': {'character': 13, 'line': 12}, - \ 'start': {'character': 4, 'line': 12}, - \ }, - \ }, - \ }, - \ ], - \ }, - \ }) - -Execute(Should handle completion messages with textEdit objects and no insertTextFormat key): - let g:ale_completion_autoimport = 0 - - AssertEqual - \ [ - \ {'word': 'next_callback', 'dup': 0, 'menu': 'PlayTimeCallback', 'info': '', 'kind': 'v', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ ], - \ ale#completion#ParseLSPCompletions({ - \ 'id': 226, - \ 'jsonrpc': '2.0', - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'detail': 'PlayTimeCallback', - \ 'filterText': 'next_callback', - \ 'insertText': 'ignoreme', - \ 'kind': 6, - \ 'label': ' next_callback', - \ 'sortText': '3ee19999next_callback', - \ 'textEdit': { - \ 'newText': 'next_callback', - \ 'range': { - \ 'end': {'character': 13, 'line': 12}, - \ 'start': {'character': 4, 'line': 12}, - \ }, - \ }, - \ }, - \ ], - \ }, - \ }) - -Execute(Should handle completion messages with the deprecated insertText attribute): - let g:ale_completion_autoimport = 0 - - AssertEqual - \ [ - \ {'word': 'next_callback', 'dup': 0, 'menu': 'PlayTimeCallback', 'info': '', 'kind': 'v', 'icase': 1, 'user_data': json_encode({'_ale_completion_item': 1})}, - \ ], - \ ale#completion#ParseLSPCompletions({ - \ 'id': 226, - \ 'jsonrpc': '2.0', - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'detail': 'PlayTimeCallback', - \ 'filterText': 'next_callback', - \ 'insertText': 'next_callback', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' next_callback', - \ 'sortText': '3ee19999next_callback', - \ }, - \ ], - \ }, - \ }) - -Execute(Should handle completion messages with additionalTextEdits when ale_completion_autoimport is turned on): - let g:ale_completion_autoimport = 1 - - AssertEqual - \ [ - \ { - \ 'word': 'next_callback', - \ 'dup': 1, - \ 'menu': 'PlayTimeCallback', - \ 'info': '', - \ 'kind': 'v', - \ 'icase': 1, - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [ - \ { - \ 'description': 'completion', - \ 'changes': [ - \ { - \ 'fileName': expand('#' . bufnr('') . ':p'), - \ 'textChanges': [ - \ { - \ 'start': { - \ 'line': 11, - \ 'offset': 2, - \ }, - \ 'end': { - \ 'line': 13, - \ 'offset': 4, - \ }, - \ 'newText': 'from "module" import next_callback', - \ }, - \ ], - \ }, - \ ], - \ }, - \ ], - \ }), - \ }, - \ ], - \ ale#completion#ParseLSPCompletions({ - \ 'id': 226, - \ 'jsonrpc': '2.0', - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'detail': 'PlayTimeCallback', - \ 'filterText': 'next_callback', - \ 'insertText': 'next_callback', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' next_callback', - \ 'sortText': '3ee19999next_callback', - \ 'additionalTextEdits': [ - \ { - \ 'range': { - \ 'start': { - \ 'line': 10, - \ 'character': 1, - \ }, - \ 'end': { - \ 'line': 12, - \ 'character': 3, - \ }, - \ }, - \ 'newText': 'from "module" import next_callback', - \ }, - \ ], - \ }, - \ ], - \ }, - \ }) - -Execute(Should not handle completion messages with additionalTextEdits when ale_completion_autoimport is turned off): - let g:ale_completion_autoimport = 0 - let b:ale_completion_info = {'line': 30} - - AssertEqual - \ [], - \ ale#completion#ParseLSPCompletions({ - \ 'id': 226, - \ 'jsonrpc': '2.0', - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'detail': 'PlayTimeCallback', - \ 'filterText': 'next_callback', - \ 'insertText': 'next_callback', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' next_callback', - \ 'sortText': '3ee19999next_callback', - \ 'additionalTextEdits': [ - \ { - \ 'range': { - \ 'start': { - \ 'line': 10, - \ 'character': 1, - \ }, - \ 'end': { - \ 'line': 12, - \ 'character': 3, - \ }, - \ }, - \ 'newText': 'from "module" import next_callback', - \ }, - \ ], - \ }, - \ ], - \ }, - \ }) - -Execute(Should still handle completion messages with empty additionalTextEdits with ale_completion_autoimport turned off): - let g:ale_completion_autoimport = 0 - - AssertEqual - \ [ - \ { - \ 'word': 'next_callback', - \ 'dup': 0, - \ 'menu': 'PlayTimeCallback', - \ 'info': '', - \ 'kind': 'v', - \ 'icase': 1, - \ 'user_data': json_encode({'_ale_completion_item': 1}), - \ } - \ ], - \ ale#completion#ParseLSPCompletions({ - \ 'id': 226, - \ 'jsonrpc': '2.0', - \ 'result': { - \ 'isIncomplete': v:false, - \ 'items': [ - \ { - \ 'detail': 'PlayTimeCallback', - \ 'filterText': 'next_callback', - \ 'insertText': 'next_callback', - \ 'insertTextFormat': 1, - \ 'kind': 6, - \ 'label': ' next_callback', - \ 'sortText': '3ee19999next_callback', - \ 'additionalTextEdits': [], - \ }, - \ ], - \ }, - \ }) diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_omnifunc_completion.vader b/dotfiles/.vim/plugged/ale/test/completion/test_omnifunc_completion.vader deleted file mode 100644 index 1db64705..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_omnifunc_completion.vader +++ /dev/null @@ -1,60 +0,0 @@ -Before: - unlet! b:ale_completion_info - unlet! b:ale_completion_result - - let b:lsp_started = 0 - - runtime autoload/ale/lsp_linter.vim - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - return b:lsp_started - endfunction - - function! SetCompletionResult(...) abort - let b:ale_completion_result = ['foo'] - endfunction - - function! SetCompletionResponse(...) abort - let b:ale_completion_result = ['foo'] - endfunction - -After: - unlet! b:ale_completion_info - unlet! b:ale_completion_result - unlet! b:lsp_started - - delfunction SetCompletionResult - delfunction SetCompletionResponse - - runtime autoload/ale/lsp_linter.vim - - call ale#linter#Reset() - -Given typescript(): - let abc = y. - let foo = ab - let foo = (ab) - -Execute(-3 should be returned when completion results cannot be requested): - AssertEqual -3, ale#completion#OmniFunc(1, '') - -Execute(The start position should be returned when results can be requested): - let b:lsp_started = 1 - call setpos('.', [bufnr(''), 3, 14, 0]) - - AssertEqual 11, ale#completion#OmniFunc(1, '') - -Execute(The omnifunc function should return async results): - " Neovim 0.2.0 and 0.4.4 struggles at running these tests. - if !has('nvim') - call timer_start(0, function('SetCompletionResult')) - - AssertEqual ['foo'], ale#completion#OmniFunc(0, '') - endif - -Execute(The omnifunc function should parse and return async responses): - if !has('nvim') - call timer_start(0, function('SetCompletionResponse')) - - AssertEqual ['foo'], ale#completion#OmniFunc(0, '') - endif diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_public_completion_api.vader b/dotfiles/.vim/plugged/ale/test/completion/test_public_completion_api.vader deleted file mode 100644 index 03394820..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_public_completion_api.vader +++ /dev/null @@ -1,47 +0,0 @@ -Before: - call ale#linter#Reset() - - unlet! b:ale_linters - unlet! b:ale_completion_info - unlet! b:ale_completion_result - -After: - call ale#linter#Reset() - - unlet! b:ale_linters - unlet! b:ale_completion_info - unlet! b:ale_completion_result - -Execute(ale#completion#GetCompletionResult() should return v:null when there are no results): - AssertEqual v:null, ale#completion#GetCompletionResult() - -Execute(ale#completion#GetCompletionResult() should return a result computed previously): - let b:ale_completion_result = [1] - - AssertEqual [1], ale#completion#GetCompletionResult() - -Execute(ale#completion#GetCompletionPosition() should return 0 when there is no completion information): - AssertEqual 0, ale#completion#GetCompletionPosition() - -Given python(Some Python file): - foo bar - -Execute(ale#completion#GetCompletionPosition() should return the position in the file when information is available): - let b:ale_completion_info = {'line': 1, 'column': 6} - - " This is the first character of 'bar' - AssertEqual 4, ale#completion#GetCompletionPosition() - -Execute(ale#completion#GetCompletionPositionForDeoplete() should return the position on the given input string): - " This is the first character of 'bar' - AssertEqual 4, ale#completion#GetCompletionPositionForDeoplete('foo bar') - -Execute(ale#completion#CanProvideCompletions should return 0 when no completion sources are available): - let b:ale_linters = ['flake8'] - AssertEqual 0, ale#completion#CanProvideCompletions() - -Execute(ale#completion#CanProvideCompletions should return 1 when at least one completion source is available): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - - AssertEqual 1, ale#completion#CanProvideCompletions() diff --git a/dotfiles/.vim/plugged/ale/test/completion/test_tsserver_completion_parsing.vader b/dotfiles/.vim/plugged/ale/test/completion/test_tsserver_completion_parsing.vader deleted file mode 100644 index 231c0f95..00000000 --- a/dotfiles/.vim/plugged/ale/test/completion/test_tsserver_completion_parsing.vader +++ /dev/null @@ -1,309 +0,0 @@ -Before: - Save g:ale_completion_tsserver_remove_warnings - - let g:ale_completion_tsserver_remove_warnings = 0 - -After: - Restore - - unlet! b:ale_tsserver_completion_names - -Execute(TypeScript completions responses should be parsed correctly): - AssertEqual [], - \ ale#completion#ParseTSServerCompletions({ - \ 'body': [], - \}) - AssertEqual - \ [ - \ { - \ 'word': 'foo', - \ 'source': '/path/to/foo.ts', - \ }, - \ { - \ 'word': 'bar', - \ 'source': '', - \ }, - \ { - \ 'word': 'baz', - \ 'source': '', - \ } - \ ], - \ ale#completion#ParseTSServerCompletions({ - \ 'body': [ - \ {'name': 'foo', 'source': '/path/to/foo.ts'}, - \ {'name': 'bar'}, - \ {'name': 'baz'}, - \ ], - \}) - -Execute(TypeScript completions responses should include warnings): - AssertEqual - \ [ - \ { - \ 'word': 'foo', - \ 'source': '/path/to/foo.ts', - \ }, - \ { - \ 'word': 'bar', - \ 'source': '', - \ }, - \ { - \ 'word': 'baz', - \ 'source': '', - \ } - \ ], - \ ale#completion#ParseTSServerCompletions({ - \ 'body': [ - \ {'name': 'foo', 'source': '/path/to/foo.ts'}, - \ {'name': 'bar', 'kind': 'warning'}, - \ {'name': 'baz'}, - \ ], - \}) - -Execute(TypeScript completions responses should not include warnings if excluded): - let g:ale_completion_tsserver_remove_warnings = 1 - AssertEqual - \ [ - \ { - \ 'word': 'foo', - \ 'source': '/path/to/foo.ts', - \ }, - \ { - \ 'word': 'baz', - \ 'source': '', - \ } - \ ], - \ ale#completion#ParseTSServerCompletions({ - \ 'body': [ - \ {'name': 'foo', 'source': '/path/to/foo.ts'}, - \ {'name': 'bar', 'kind': 'warning'}, - \ {'name': 'baz'}, - \ ], - \}) - -Execute(TypeScript completion details responses should be parsed correctly): - AssertEqual - \ [ - \ { - \ 'word': 'abc', - \ 'menu': '(property) Foo.abc: number', - \ 'info': '', - \ 'kind': 'v', - \ 'icase': 1, - \ 'user_data': json_encode({'_ale_completion_item': 1}), - \ 'dup': g:ale_completion_autoimport, - \ }, - \ { - \ 'word': 'def', - \ 'menu': '(property) Foo.def: number', - \ 'info': 'foo bar baz', - \ 'kind': 'v', - \ 'icase': 1, - \ 'user_data': json_encode({'_ale_completion_item': 1}), - \ 'dup': g:ale_completion_autoimport, - \ }, - \ { - \ 'word': 'ghi', - \ 'menu': '(class) Foo', - \ 'info': '', - \ 'kind': 'v', - \ 'icase': 1, - \ 'user_data': json_encode({'_ale_completion_item': 1}), - \ 'dup': g:ale_completion_autoimport, - \ }, - \ ], - \ ale#completion#ParseTSServerCompletionEntryDetails({ - \ 'body': [ - \ { - \ 'name': 'abc', - \ 'kind': 'parameterName', - \ 'displayParts': [ - \ {'text': '('}, - \ {'text': 'property'}, - \ {'text': ')'}, - \ {'text': ' '}, - \ {'text': 'Foo'}, - \ {'text': '.'}, - \ {'text': 'abc'}, - \ {'text': ':'}, - \ {'text': ' '}, - \ {'text': 'number'}, - \ ], - \ }, - \ { - \ 'name': 'def', - \ 'kind': 'parameterName', - \ 'displayParts': [ - \ {'text': '('}, - \ {'text': 'property'}, - \ {'text': ')'}, - \ {'text': ' '}, - \ {'text': 'Foo'}, - \ {'text': '.'}, - \ {'text': 'def'}, - \ {'text': ':'}, - \ {'text': ' '}, - \ {'text': 'number'}, - \ ], - \ 'documentation': [ - \ {'text': 'foo'}, - \ {'text': ' '}, - \ {'text': 'bar'}, - \ {'text': ' '}, - \ {'text': 'baz'}, - \ ], - \ }, - \ { - \ 'name': 'ghi', - \ 'kind': 'className', - \ 'displayParts': [ - \ {'text': '('}, - \ {'text': 'class'}, - \ {'text': ')'}, - \ {'text': ' '}, - \ {'text': 'Foo'}, - \ ], - \ }, - \ ], - \}) - -Execute(Entries without details should be included in the responses): - let b:ale_tsserver_completion_names = [{ - \ 'word': 'xyz', - \ 'source': '/path/to/xyz.ts', - \ }] - - AssertEqual - \ [ - \ { - \ 'word': 'abc', - \ 'menu': 'import { def } from "./Foo"; (property) Foo.abc: number', - \ 'info': '', - \ 'kind': 'v', - \ 'icase': 1, - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [{ - \ 'description': 'import { def } from "./Foo";', - \ 'changes': [], - \ }], - \ }), - \ 'dup': g:ale_completion_autoimport, - \ }, - \ { - \ 'word': 'def', - \ 'menu': '(property) Foo.def: number', - \ 'info': 'foo bar baz', - \ 'kind': 'v', - \ 'icase': 1, - \ 'user_data': json_encode({'_ale_completion_item': 1}), - \ 'dup': g:ale_completion_autoimport, - \ }, - \ { - \ 'word': 'xyz', - \ 'menu': '', - \ 'info': '', - \ 'kind': 'v', - \ 'user_data': json_encode({'_ale_completion_item': 1}), - \ 'icase': 1, - \ }, - \ ], - \ ale#completion#ParseTSServerCompletionEntryDetails({ - \ 'body': [ - \ { - \ 'name': 'abc', - \ 'kind': 'parameterName', - \ 'displayParts': [ - \ {'text': '('}, - \ {'text': 'property'}, - \ {'text': ')'}, - \ {'text': ' '}, - \ {'text': 'Foo'}, - \ {'text': '.'}, - \ {'text': 'abc'}, - \ {'text': ':'}, - \ {'text': ' '}, - \ {'text': 'number'}, - \ ], - \ 'codeActions': [{ - \ 'description': 'import { def } from "./Foo";', - \ 'changes': [], - \ }], - \ }, - \ { - \ 'name': 'def', - \ 'kind': 'parameterName', - \ 'displayParts': [ - \ {'text': '('}, - \ {'text': 'property'}, - \ {'text': ')'}, - \ {'text': ' '}, - \ {'text': 'Foo'}, - \ {'text': '.'}, - \ {'text': 'def'}, - \ {'text': ':'}, - \ {'text': ' '}, - \ {'text': 'number'}, - \ ], - \ 'documentation': [ - \ {'text': 'foo'}, - \ {'text': ' '}, - \ {'text': 'bar'}, - \ {'text': ' '}, - \ {'text': 'baz'}, - \ ], - \ }, - \ ], - \}) - -Execute(Default imports should be handled correctly): - AssertEqual - \ [ - \ { - \ 'word': 'abcd', - \ 'menu': 'Import default ''abcd'' from module "./foo" (alias) const abcd: 3', - \ 'info': '', - \ 'kind': 't', - \ 'icase': 1, - \ 'user_data': json_encode({ - \ '_ale_completion_item': 1, - \ 'code_actions': [{ - \ 'description': 'Import default ''abcd'' from module "./foo"', - \ 'changes': [], - \ }], - \ }), - \ 'dup': g:ale_completion_autoimport, - \ }, - \ ], - \ ale#completion#ParseTSServerCompletionEntryDetails({ - \ 'body': [ - \ { - \ 'name': 'default', - \ 'kind': 'alias', - \ 'displayParts': [ - \ {'kind': 'punctuation', 'text': '('}, - \ {'kind': 'text', 'text': 'alias'}, - \ {'kind': 'punctuation', 'text': ')'}, - \ {'kind': 'space', 'text': ' '}, - \ {'kind': 'keyword', 'text': 'const'}, - \ {'kind': 'space', 'text': ' '}, - \ {'kind': 'localName', 'text': 'abcd'}, - \ {'kind': 'punctuation', 'text': ':'}, - \ {'kind': 'space', 'text': ' '}, - \ {'kind': 'stringLiteral', 'text': '3'}, - \ {'kind': 'lineBreak', 'text': '^@'}, - \ {'kind': 'keyword', 'text': 'export'}, - \ {'kind': 'space', 'text': ' '}, - \ {'kind': 'keyword', 'text': 'default'}, - \ {'kind': 'space', 'text': ' '}, - \ {'kind': 'aliasName', 'text': 'abcd'} - \ ], - \ 'codeActions': [ - \ { - \ 'description': 'Import default ''abcd'' from module "./foo"', - \ 'changes': [], - \ }, - \ ], - \ }, - \ ], - \ }) diff --git a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix.vader b/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix.vader deleted file mode 100644 index 6529f6f9..00000000 --- a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix.vader +++ /dev/null @@ -1,884 +0,0 @@ -Before: - Save g:ale_fixers - Save &shell - Save g:ale_enabled - Save g:ale_fix_on_save - Save g:ale_lint_on_save - Save g:ale_echo_cursor - Save g:ale_command_wrapper - Save g:ale_filename_mappings - - silent! cd /testplugin/test/fix - - unlet! b:ale_lint_on_save - let g:ale_enabled = 0 - let g:ale_echo_cursor = 0 - let g:ale_command_wrapper = '' - let g:ale_run_synchronously = 1 - let g:ale_set_lists_synchronously = 1 - let g:ale_fix_buffer_data = {} - let g:ale_fixers = { - \ 'testft': [], - \} - let g:ale_filename_mappings = {} - - let g:pre_success = 0 - let g:post_success = 0 - augroup VaderTest - autocmd! - autocmd User ALEFixPre let g:pre_success = 1 - autocmd User ALEFixPost let g:post_success = 1 - augroup END - - if !has('win32') - let &shell = '/bin/bash' - endif - - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('test.txt') - call ale#linter#PreventLoading('testft') - - function AddCarets(buffer, lines) abort - " map() is applied to the original lines here. - " This way, we can ensure that defensive copies are made. - return map(a:lines, '''^'' . v:val') - endfunction - - function Capitalize(buffer, lines) abort - return map(a:lines, 'toupper(v:val)') - endfunction - - function DoNothing(buffer, lines) abort - return 0 - endfunction - - function CatLine(buffer, lines) abort - return {'command': 'cat - <(echo d)'} - endfunction - - function CatLineOneArg(buffer) abort - return {'command': 'cat - <(echo d)'} - endfunction - - function CatLineDeferred(buffer, lines) abort - return ale#command#Run(a:buffer, 'echo', { - \ -> ale#command#Run(a:buffer, 'echo', {-> {'command': 'cat - <(echo d)'}}) - \}) - endfunction - - function ReplaceWithTempFile(buffer, lines) abort - return {'command': 'echo x > %t', 'read_temporary_file': 1} - endfunction - - function CatWithTempFile(buffer, lines) abort - return {'command': 'cat %t <(echo d)'} - endfunction - - function EchoFilename(buffer, lines) abort - return {'command': 'echo %s'} - endfunction - - function RemoveLastLine(buffer, lines) abort - return ['a', 'b'] - endfunction - - function RemoveLastLineOneArg(buffer) abort - return ['a', 'b'] - endfunction - - function! TestCallback(buffer, output) - return [{'lnum': 1, 'col': 1, 'text': 'xxx'}] - endfunction - - " echo will output a single blank line, and we should ingore it. - function! IgnoredEmptyOutput(buffer, output) - return {'command': has('win32') ? 'echo(' : 'echo'} - endfunction - - function! EchoLineNoPipe(buffer, output) - return {'command': 'echo new line', 'read_buffer': 0} - endfunction - - function! SetUpLinters() - call ale#linter#Define('testft', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': 'true', - \ 'command': 'true', - \}) - endfunction - - function GetLastMessage() - redir => l:output - silent mess - redir END - - let l:lines = split(l:output, "\n") - - return empty(l:lines) ? '' : l:lines[-1] - endfunction - - function! FixWithJSONPostProcessing(buffer) abort - let l:ProcessWith = 'JSONPostProcessor' - - " Test with lambdas where support is available. - if has('lambda') - let l:ProcessWith = {buffer, output -> JSONPostProcessor(buffer, output)} - endif - - " Escaping needs to be handled specially for CMD on Windows. - let l:json_string = has('win32') - \ ? '{"output":["x","y","z"]}' - \ : ale#Escape('{"output": ["x", "y", "z"]}') - - return { - \ 'command': 'echo ' . l:json_string, - \ 'read_buffer': 0, - \ 'process_with': l:ProcessWith, - \} - endfunction - - function! JSONPostProcessor(buffer, output) abort - return json_decode(a:output[0]).output - endfunction - -After: - Restore - unlet! g:test_filename - unlet! g:ale_run_synchronously - unlet! g:ale_set_lists_synchronously - unlet! g:ale_run_synchronously_callbacks - unlet! g:ale_emulate_job_failure - unlet! b:ale_fixers - unlet! b:ale_lint_on_save - unlet! b:ale_fix_on_save - unlet! b:ale_quitting - delfunction AddCarets - delfunction Capitalize - delfunction DoNothing - delfunction CatLine - delfunction CatLineOneArg - delfunction CatLineDeferred - delfunction ReplaceWithTempFile - delfunction CatWithTempFile - delfunction EchoFilename - delfunction RemoveLastLine - delfunction RemoveLastLineOneArg - delfunction TestCallback - delfunction SetUpLinters - delfunction GetLastMessage - delfunction IgnoredEmptyOutput - delfunction EchoLineNoPipe - delfunction FixWithJSONPostProcessing - delfunction JSONPostProcessor - - augroup VaderTest - autocmd! - augroup END - - augroup! VaderTest - - call ale#test#RestoreDirectory() - - call ale#fix#registry#ResetToDefaults() - call ale#linter#Reset() - - setlocal buftype=nofile - - if exists('g:test_filename') && filereadable(g:test_filename) - call delete(g:test_filename) - endif - - call setloclist(0, []) - - let g:ale_fix_buffer_data = {} - - " Clear the messages between tests. - echomsg '' - - if !exists('g:ale_command_wrapper') - let g:ale_command_wrapper = '' - endif - -Given testft (A file with three lines): - a - b - c - -Execute(ALEFix should complain when there are no functions to call): - ALEFix - call ale#test#FlushJobs() - AssertEqual 'No fixers have been defined. Try :ALEFixSuggest', GetLastMessage() - -Execute(ALEFix should not complain when the command is run with a bang): - echom 'none' - - ALEFix! - call ale#test#FlushJobs() - AssertEqual 'none', GetLastMessage() - -Execute(ALEFix should apply simple functions): - let g:ale_fixers.testft = ['AddCarets'] - ALEFix - call ale#test#FlushJobs() - -Expect(The first function should be used): - ^a - ^b - ^c - -Execute(Should apply filename mpapings): - " The command echos %s, and we'll map the current path so we can check - " that ALEFix applies filename mappings, end-to-end. - let g:ale_filename_mappings = { - \ 'echo_filename': [ - \ [expand('%:p:h') . '/', '/some/fake/path/'], - \ ], - \} - - call ale#fix#registry#Add('echo_filename', 'EchoFilename', [], 'echo filename') - let g:ale_fixers.testft = ['echo_filename'] - ALEFix - call ale#test#FlushJobs() - " Remote trailing whitespace from the line. - call setline(1, substitute(getline(1), '[ \r]\+$', '', '')) - -Expect(The mapped filename should be printed): - /some/fake/path/test.txt - -Execute(ALEFix should apply simple functions in a chain): - let g:ale_fixers.testft = ['AddCarets', 'Capitalize'] - ALEFix - call ale#test#FlushJobs() - -Expect(Both functions should be used): - ^A - ^B - ^C - -Execute(ALEFix should allow 0 to be returned to skip functions): - let g:ale_fixers.testft = ['DoNothing', 'Capitalize'] - ALEFix - call ale#test#FlushJobs() - -Expect(Only the second function should be applied): - A - B - C - -Execute(The * fixers shouldn't be used if an empty list is set for fixers): - let g:ale_fixers.testft = [] - let g:ale_fixers['*'] = ['Capitalize'] - ALEFix - call ale#test#FlushJobs() - -Expect(Nothing should be changed): - a - b - c - -Execute(* fixers should be used if no filetype is matched): - let g:ale_fixers = {'*': ['Capitalize']} - ALEFix - call ale#test#FlushJobs() - -Expect(The file should be changed): - A - B - C - -Execute(ALEFix should allow commands to be run): - if has('win32') - " Just skip this test on Windows, we can't run it. - call setline(1, ['a', 'b', 'c', 'd']) - else - let g:ale_fixers.testft = ['CatLine'] - ALEFix - call ale#test#FlushJobs() - endif - -Expect(An extra line should be added): - a - b - c - d - -Execute(ALEFix should use fixers passed in commandline when provided): - let g:ale_fixers.testft = ['RemoveLastLine'] - ALEFix AddCarets Capitalize - call ale#test#FlushJobs() - -Expect(Only fixers passed via command line should be run): - ^A - ^B - ^C - -Execute(ALEFix should allow temporary files to be read): - if has('win32') - " Just skip this test on Windows, we can't run it. - call setline(1, ['x']) - 2,3d - else - let g:ale_fixers.testft = ['ReplaceWithTempFile'] - ALEFix - call ale#test#FlushJobs() - endif - -Expect(The line we wrote to the temporary file should be used here): - x - -Execute(ALEFix should not read the temporary file when the option is not set): - if has('win32') - " Just skip this test on Windows, we can't run it. - call setline(1, ['a', 'b', 'c', 'd']) - else - let g:ale_fixers.testft = ['CatWithTempFile'] - ALEFix - call ale#test#FlushJobs() - endif - -Expect(An extra line should be added): - a - b - c - d - -Execute(ALEFix should allow jobs and simple functions to be combined): - if has('win32') - " Just skip this test on Windows, we can't run it. - call setline(1, ['X']) - 2,3d - else - let g:ale_fixers.testft = ['ReplaceWithTempFile', 'Capitalize'] - ALEFix - call ale#test#FlushJobs() - endif - -Expect(The lines from the temporary file should be modified): - X - -Execute(ALEFix should send lines modified by functions to jobs): - if has('win32') - " Just skip this test on Windows, we can't run it. - call setline(1, ['A', 'B', 'C', 'd']) - else - let g:ale_fixers.testft = ['Capitalize', 'CatLine'] - ALEFix - call ale#test#FlushJobs() - endif - -Expect(The lines should first be modified by the function, then the job): - A - B - C - d - -Execute(ALEFix should skip commands when jobs fail to run): - let g:ale_emulate_job_failure = 1 - let g:ale_fixers.testft = ['CatLine', 'Capitalize'] - ALEFix - call ale#test#FlushJobs() - -Expect(Only the second function should be applied): - A - B - C - -Execute(ALEFix should handle strings for selecting a single function): - let g:ale_fixers.testft = 'AddCarets' - ALEFix - call ale#test#FlushJobs() - -Expect(The first function should be used): - ^a - ^b - ^c - -Execute(ALEFix should use functions from the registry): - call ale#fix#registry#Add('add_carets', 'AddCarets', [], 'Add some carets') - let g:ale_fixers.testft = ['add_carets'] - ALEFix - call ale#test#FlushJobs() - -Expect(The registry function should be used): - ^a - ^b - ^c - -Execute(ALEFix should be able to remove the last line for files): - let g:ale_fixers.testft = ['RemoveLastLine'] - ALEFix - call ale#test#FlushJobs() - -Expect(There should be only two lines): - a - b - -Execute(ALEFix should accept funcrefs): - let g:ale_fixers.testft = [function('RemoveLastLine')] - ALEFix - call ale#test#FlushJobs() - -Expect(There should be only two lines): - a - b - -Execute(ALEFix should accept lambdas): - if has('nvim') - " NeoVim 0.1.7 can't interpret lambdas correctly, so just set the lines - " to make the test pass. - call setline(1, ['a', 'b', 'c', 'd']) - else - let g:ale_fixers.testft = [{buffer, lines -> lines + ['d']}] - ALEFix - call ale#test#FlushJobs() - endif - -Expect(There should be an extra line): - a - b - c - d - -Execute(ALEFix should user buffer-local fixer settings): - let g:ale_fixers.testft = ['AddCarets', 'Capitalize'] - let b:ale_fixers = {'testft': ['RemoveLastLine']} - ALEFix - call ale#test#FlushJobs() - -Expect(There should be only two lines): - a - b - -Execute(ALEFix should allow Lists to be used for buffer-local fixer settings): - let g:ale_fixers.testft = ['AddCarets', 'Capitalize'] - let b:ale_fixers = ['RemoveLastLine'] - ALEFix - call ale#test#FlushJobs() - -Expect(There should be only two lines): - a - b - -Given testft (A file with three lines): - a - b - c - -Execute(ALEFix should fix files on the save event): - let g:ale_fix_on_save = 1 - let g:ale_lint_on_save = 1 - let g:ale_enabled = 1 - - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - call writefile(getline(1, '$'), g:test_filename) - - let g:ale_fixers.testft = ['Capitalize'] - - " We have to set the buftype to empty so the file will be written. - setlocal buftype= - - call SetUpLinters() - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - " We should save the file. - AssertEqual ['A', 'B', 'C'], readfile(g:test_filename) - Assert !&modified, 'The file was marked as ''modified''' - - if !has('win32') - " We should have run the linter. - AssertEqual [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 1, - \ 'vcol': 0, - \ 'col': 1, - \ 'text': 'xxx', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \}], ale#test#GetLoclistWithoutNewerKeys() - endif - -Expect(The buffer should be modified): - A - B - C - -Given testft (A file with three lines): - a - b - c - -Execute(ALEFix should run the linters with b:ale_lint_on_save = 1): - let g:ale_fix_on_save = 0 - let b:ale_fix_on_save = 1 - let g:ale_lint_on_save = 1 - let g:ale_enabled = 1 - - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - call writefile(getline(1, '$'), g:test_filename) - - let g:ale_fixers.testft = ['Capitalize'] - - " We have to set the buftype to empty so the file will be written. - setlocal buftype= - - call SetUpLinters() - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - " We should save the file. - AssertEqual ['A', 'B', 'C'], readfile(g:test_filename) - Assert !&modified, 'The file was marked as ''modified''' - - if !has('win32') - " We should have run the linter. - AssertEqual [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 1, - \ 'vcol': 0, - \ 'col': 1, - \ 'text': 'xxx', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \}], ale#test#GetLoclistWithoutNewerKeys() - endif - -Expect(The buffer should be modified): - A - B - C - -Execute(ALEFix should not fix files on :wq): - let g:ale_fix_on_save = 1 - let g:ale_lint_on_save = 1 - let g:ale_enabled = 1 - - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - call writefile(getline(1, '$'), g:test_filename) - - let g:ale_fixers.testft = ['Capitalize'] - - " We have to set the buftype to empty so the file will be written. - setlocal buftype= - - call ale#events#QuitEvent(bufnr('')) - - call SetUpLinters() - call ale#events#SaveEvent(bufnr('')) - - " We should save the file. - AssertEqual ['a', 'b', 'c'], readfile(g:test_filename) - Assert &modified, 'The was not marked as ''modified''' - - " We should not run the linter. - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - -Expect(The buffer should not be modified): - a - b - c - -Given testft (A file with three lines): - a - b - c - -Execute(ALEFix should still lint with no linters to be applied): - let g:ale_fix_on_save = 1 - let g:ale_lint_on_save = 1 - let g:ale_enabled = 1 - - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - - let g:ale_fixers.testft = [] - - call SetUpLinters() - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - Assert !filereadable(g:test_filename), 'The file should not have been saved' - - if !has('win32') - " We have run the linter. - AssertEqual [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 1, - \ 'vcol': 0, - \ 'col': 1, - \ 'text': 'xxx', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \}], ale#test#GetLoclistWithoutNewerKeys() - endif - -Expect(The buffer should be the same): - a - b - c - -Execute(ALEFix should still lint when nothing was fixed on save): - let g:ale_fix_on_save = 1 - let g:ale_lint_on_save = 1 - let g:ale_enabled = 1 - - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - - let g:ale_fixers.testft = ['DoNothing'] - - call SetUpLinters() - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - Assert !filereadable(g:test_filename), 'The file should not have been saved' - - if !has('win32') - " We should have run the linter. - AssertEqual [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 1, - \ 'vcol': 0, - \ 'col': 1, - \ 'text': 'xxx', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \}], ale#test#GetLoclistWithoutNewerKeys() - endif - -Expect(The buffer should be the same): - a - b - c - -Execute(ALEFix should not lint the buffer on save if linting on save is disabled globally): - let g:ale_fix_on_save = 1 - let g:ale_lint_on_save = 0 - let g:ale_enabled = 1 - - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - - let g:ale_fixers.testft = ['DoNothing'] - - call SetUpLinters() - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - Assert !filereadable(g:test_filename), 'The file should not have been saved' - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - -Expect(The buffer should be the same): - a - b - c - -Execute(ALEFix should not lint the buffer on save if linting on save is disabled locally): - let g:ale_fix_on_save = 1 - let b:ale_lint_on_save = 0 - let g:ale_enabled = 1 - - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - - let g:ale_fixers.testft = ['DoNothing'] - - call SetUpLinters() - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - Assert !filereadable(g:test_filename), 'The file should not have been saved' - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - -Expect(The buffer should be the same): - a - b - c - -Given testft (A file with three lines): - a - b - c - -Execute(ale#fix#InitBufferData() should set up the correct data): - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - - call ale#fix#InitBufferData(bufnr(''), 'save_file') - - AssertEqual { - \ bufnr(''): { - \ 'temporary_directory_list': [], - \ 'done': 0, - \ 'lines_before': ['a', 'b', 'c'], - \ 'should_save': 1, - \ 'ignore_file_changed_errors': 0, - \ }, - \}, g:ale_fix_buffer_data - - call ale#fix#InitBufferData(bufnr(''), '!') - - AssertEqual { - \ bufnr(''): { - \ 'temporary_directory_list': [], - \ 'done': 0, - \ 'lines_before': ['a', 'b', 'c'], - \ 'should_save': 0, - \ 'ignore_file_changed_errors': 1, - \ }, - \}, g:ale_fix_buffer_data - -Execute(ALEFix simple functions should be able to accept one argument, the buffer): - let g:ale_fixers.testft = ['RemoveLastLineOneArg'] - ALEFix - call ale#test#FlushJobs() - -Expect(There should be only two lines): - a - b - -Execute(ALEFix should modify a buffer that is not modifiable, if it becomes modifiable later): - let g:ale_fixers.testft = ['RemoveLastLineOneArg'] - - set nomodifiable - ALEFix - call ale#test#FlushJobs() - set modifiable - call ale#fix#ApplyQueuedFixes(bufnr('')) - -Expect(There should be only two lines): - a - b - -Execute(b:ale_fix_on_save = 1 should override g:ale_fix_on_save = 0): - let g:ale_fix_on_save = 0 - let b:ale_fix_on_save = 1 - - let g:ale_fixers.testft = ['RemoveLastLineOneArg'] - call ale#events#SaveEvent(bufnr('')) - -Expect(There should be only two lines): - a - b - -Execute(b:ale_fix_on_save = 0 should override g:ale_fix_on_save = 1): - let g:ale_fix_on_save = 1 - let b:ale_fix_on_save = 0 - - let g:ale_fixers.testft = ['RemoveLastLineOneArg'] - call ale#events#SaveEvent(bufnr('')) - -Expect(The lines should be the same): - a - b - c - -Execute(ALEFix functions returning jobs should be able to accept one argument): - if has('win32') - " Just skip this test on Windows, we can't run it. - call setline(1, ['a', 'b', 'c', 'd']) - else - let g:ale_fixers.testft = ['CatLine'] - ALEFix - call ale#test#FlushJobs() - endif - -Expect(An extra line should be added): - a - b - c - d - -Execute(ALE should print a message telling you something isn't a valid fixer when you type some nonsense): - let g:ale_fixers.testft = ['CatLine', 'invalidname'] - ALEFix - call ale#test#FlushJobs() - - AssertEqual 'There is no fixer named `invalidname`. Check :ALEFixSuggest', GetLastMessage() - -Execute(ALE should complain about invalid fixers with minuses in the name): - let g:ale_fixers.testft = ['foo-bar'] - ALEFix - call ale#test#FlushJobs() - - AssertEqual 'There is no fixer named `foo-bar`. Check :ALEFixSuggest', GetLastMessage() - -Execute(ALE should tolerate valid fixers with minuses in the name): - let g:ale_fixers.testft = ['prettier-standard'] - ALEFix - call ale#test#FlushJobs() - -Execute(Empty output should be ignored): - let g:ale_fixers.testft = ['IgnoredEmptyOutput'] - ALEFix - call ale#test#FlushJobs() - -Expect(The lines should be the same): - a - b - c - -Execute(A temporary file shouldn't be piped into the command when disabled): - let g:ale_fixers.testft = ['EchoLineNoPipe'] - ALEFix - call ale#test#FlushJobs() - - AssertEqual - \ string(ale#job#PrepareCommand(bufnr(''), 'echo new line')), - \ string(ale#history#Get(bufnr(''))[-1].command) - - " Remove trailing whitespace for Windows. - if has('win32') - %s/[[:space:]]*$//g - endif - -Expect(The new line should be used): - new line - -Execute(Post-processing should work): - let g:ale_fixers.testft = ['FixWithJSONPostProcessing'] - ALEFix - call ale#test#FlushJobs() - -Expect(The lines in the JSON should be used): - x - y - z - -Execute(ALEFix should apply autocmds): - let g:ale_fixers.testft = ['AddCarets'] - ALEFix - call ale#test#FlushJobs() - - AssertEqual g:pre_success, 1 - AssertEqual g:post_success, 1 - -Execute(ALEFix should support ale#command#Run): - if has('win32') - " Just skip this test on Windows, we can't run it. - call setline(1, ['a', 'b', 'c', 'd']) - else - let g:ale_fixers.testft = ['CatLineDeferred'] - ALEFix - call ale#test#FlushJobs() - endif - -Expect(The extra line should be added): - a - b - c - d diff --git a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_aliases.vader b/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_aliases.vader deleted file mode 100644 index d3c47b34..00000000 --- a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_aliases.vader +++ /dev/null @@ -1,5 +0,0 @@ -Execute(prettier-eslint should be aliased): - AssertEqual 'ale#fixers#prettier_eslint#Fix', ale#fix#registry#GetFunc('prettier-eslint') - -Execute(prettier-standard should be aliased): - AssertEqual 'ale#fixers#prettier_standard#Fix', ale#fix#registry#GetFunc('prettier-standard') diff --git a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion.vader b/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion.vader deleted file mode 100644 index 6c38bb8d..00000000 --- a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion.vader +++ /dev/null @@ -1,23 +0,0 @@ -Execute (List of available fixers is empty): - call ale#fix#registry#Clear() - -Then (List of applicable fixers for python file is empty): - AssertEqual [], ale#fix#registry#GetApplicableFixers('python') - -Execute (Add ruby fixer): - call ale#fix#registry#Add('ruby_fixer', 'fixer_fun', ['ruby'], 'ruby fixer') - -Then (List of applicable fixers for python file is still empty): - AssertEqual [], ale#fix#registry#GetApplicableFixers('python') - -Execute (Add generic fixer): - call ale#fix#registry#Add('generic_fixer', 'fixer_fun', [], 'generic fixer') - -Then (Generic fixer should be returned as applicable for python file): - AssertEqual ['generic_fixer'], ale#fix#registry#GetApplicableFixers('python') - -Execute (Add python fixer): - call ale#fix#registry#Add('python_fixer', 'fixer_func', ['python'], 'python fixer') - -Then (List of fixers should contain both generic and python fixers): - AssertEqual ['generic_fixer', 'python_fixer'], ale#fix#registry#GetApplicableFixers('python') diff --git a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion_filter.vader b/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion_filter.vader deleted file mode 100644 index 536b7138..00000000 --- a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_completion_filter.vader +++ /dev/null @@ -1,14 +0,0 @@ -Before: - call ale#fix#registry#Clear() - call ale#test#SetFilename('test.js') - call ale#fix#registry#Add('prettier', '', ['javascript'], 'prettier') - call ale#fix#registry#Add('eslint', '', ['javascript'], 'eslint') - setfiletype javascript - -Execute(completeFixers returns all of the applicable fixers without an arglead): - AssertEqual ['eslint', 'prettier'], - \ ale#fix#registry#CompleteFixers('', 'ALEFix ', 7) - -Execute(completeFixers returns all of the applicable fixers without an arglead): - AssertEqual ['prettier'], - \ ale#fix#registry#CompleteFixers('pre', 'ALEFix ', 10) diff --git a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_ignore.vader b/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_ignore.vader deleted file mode 100644 index 5eb9b9ab..00000000 --- a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_ignore.vader +++ /dev/null @@ -1,110 +0,0 @@ -Before: - Save g:ale_fixers - Save g:ale_fix_on_save - Save g:ale_fix_on_save_ignore - - let g:ale_fix_on_save = 1 - let g:ale_fixers = {'abc': ['a', 'b'], 'xyz': ['c', 'd']} - unlet! b:ale_fixers - unlet! b:ale_fix_on_save_ignore - - function FixerA(buffer, lines) abort - return a:lines + ['a'] - endfunction - - function FixerB(buffer, lines) abort - return a:lines + ['b'] - endfunction - - function FixerC(buffer, lines) abort - return a:lines + ['c'] - endfunction - - function FixerD(buffer, lines) abort - return a:lines + ['d'] - endfunction - - set filetype=abc.xyz - let g:test_filename = tempname() - execute 'noautocmd silent file ' . fnameescape(g:test_filename) - - call ale#fix#registry#Add('a', 'FixerA', ['abc'], '') - call ale#fix#registry#Add('b', 'FixerB', ['abc'], '') - call ale#fix#registry#Add('c', 'FixerC', ['xyz'], '') - call ale#fix#registry#Add('d', 'FixerD', ['xyz'], '') - -After: - Restore - - if exists('g:test_filename') && filereadable(g:test_filename) - call delete(g:test_filename) - endif - - unlet! b:ale_fixers - unlet! b:ale_fix_on_save_ignore - unlet! g:test_filename - - delfunction FixerA - delfunction FixerB - delfunction FixerC - delfunction FixerD - - call ale#fix#registry#ResetToDefaults() - -Given abc.xyz (An empty file): -Execute(Ignoring with a filetype in a global Dictionary should work): - let g:ale_fix_on_save_ignore = {'abc': ['b'], 'xyz': ['c']} - - call ale#events#SaveEvent(bufnr('')) - - AssertEqual ['', 'a', 'd'], getline(1, '$') - -Execute(Ignoring with a filetype in a global List should work): - let g:ale_fix_on_save_ignore = ['b', 'c'] - - call ale#events#SaveEvent(bufnr('')) - - AssertEqual ['', 'a', 'd'], getline(1, '$') - -Execute(Ignoring with a filetype in a local Dictionary should work): - let g:ale_fix_on_save_ignore = {'abc': ['b'], 'xyz': ['c']} - " The local Dictionary should entirely replace the global one. - let b:ale_fix_on_save_ignore = {'abc': ['b']} - - call ale#events#SaveEvent(bufnr('')) - - AssertEqual ['', 'a', 'c', 'd'], getline(1, '$') - -Execute(Ignoring with a filetype in a local List should work): - let g:ale_fix_on_save_ignore = {'abc': ['b'], 'xyz': ['c']} - " The local List should entirely replace the global Dictionary. - let b:ale_fix_on_save_ignore = ['b'] - - call ale#events#SaveEvent(bufnr('')) - - AssertEqual ['', 'a', 'c', 'd'], getline(1, '$') - -Execute(Ignoring functions by reference with a Dictionary should work): - let g:ale_fixers = { - \ 'abc': [function('FixerA'), function('FixerB')], - \ 'xyz': [function('FixerC'), function('FixerD')], - \} - let b:ale_fix_on_save_ignore = { - \ 'abc': [function('FixerB')], - \ 'xyz': [function('FixerC')], - \} - - call ale#events#SaveEvent(bufnr('')) - - AssertEqual ['', 'a', 'd'], getline(1, '$') - -Execute(Ignoring functions by reference with a List should work): - let g:ale_fixers = { - \ 'abc': [function('FixerA'), function('FixerB')], - \ 'xyz': [function('FixerC'), function('FixerD')], - \} - let b:ale_fix_on_save_ignore = [function('FixerB'), function('FixerC')] - - call ale#events#SaveEvent(bufnr('')) - - AssertEqual ['', 'a', 'd'], getline(1, '$') diff --git a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_suggest.vader b/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_suggest.vader deleted file mode 100644 index 1100aeed..00000000 --- a/dotfiles/.vim/plugged/ale/test/fix/test_ale_fix_suggest.vader +++ /dev/null @@ -1,102 +0,0 @@ -Before: - call ale#fix#registry#Clear() - - let g:buffer = bufnr('') - - function GetSuggestions() - silent ALEFixSuggest - - if bufnr('') != g:buffer - let l:lines = getline(1, '$') - else - let l:lines = [] - endif - - return l:lines - endfunction - -After: - if bufnr('') != g:buffer - :q! - endif - - unlet! g:buffer - - call ale#fix#registry#ResetToDefaults() - delfunction GetSuggestions - -Execute(ALEFixSuggest should return something sensible with no suggestions): - AssertEqual - \ [ - \ 'There is nothing in the registry to suggest.', - \ '', - \ 'Press q to close this window', - \ ], - \ GetSuggestions() - -Execute(ALEFixSuggest should set the appropriate settings): - silent ALEFixSuggest - - AssertEqual 'ale-fix-suggest', &filetype - Assert !&modified, 'The buffer was marked as modified' - Assert !&modifiable, 'The buffer was modifiable' - -Execute(ALEFixSuggest output should be correct for only generic handlers): - call ale#fix#registry#Add('zed', 'XYZ', [], 'Zedify things.') - call ale#fix#registry#Add('alpha', 'XYZ', [], 'Alpha things.') - - AssertEqual - \ [ - \ 'Try the following generic fixers:', - \ '', - \ '''alpha'' - Alpha things.', - \ '''zed'' - Zedify things.', - \ '', - \ 'See :help ale-fix-configuration', - \ '', - \ 'Press q to close this window', - \ ], - \ GetSuggestions() - -Execute(ALEFixSuggest output should be correct for only filetype handlers): - let &filetype = 'testft2.testft' - - call ale#fix#registry#Add('zed', 'XYZ', ['testft2'], 'Zedify things.') - call ale#fix#registry#Add('alpha', 'XYZ', ['testft'], 'Alpha things.') - - AssertEqual - \ [ - \ 'Try the following fixers appropriate for the filetype:', - \ '', - \ '''alpha'' - Alpha things.', - \ '''zed'' - Zedify things.', - \ '', - \ 'See :help ale-fix-configuration', - \ '', - \ 'Press q to close this window', - \ ], - \ GetSuggestions() - -Execute(ALEFixSuggest should suggest filetype and generic handlers): - let &filetype = 'testft2.testft' - - call ale#fix#registry#Add('zed', 'XYZ', ['testft2'], 'Zedify things.', ['foobar']) - call ale#fix#registry#Add('alpha', 'XYZ', ['testft'], 'Alpha things.') - call ale#fix#registry#Add('generic', 'XYZ', [], 'Generic things.') - - AssertEqual - \ [ - \ 'Try the following fixers appropriate for the filetype:', - \ '', - \ '''alpha'' - Alpha things.', - \ '''zed'', ''foobar'' - Zedify things.', - \ '', - \ 'Try the following generic fixers:', - \ '', - \ '''generic'' - Generic things.', - \ '', - \ 'See :help ale-fix-configuration', - \ '', - \ 'Press q to close this window', - \ ], - \ GetSuggestions() diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_appleswiftformat_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_appleswiftformat_fixer_callback.vader deleted file mode 100644 index 72465f4f..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_appleswiftformat_fixer_callback.vader +++ /dev/null @@ -1,47 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('swift', 'apple-swift-format') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The swiftformat callback should return the correct default values): - call ale#test#SetFilename('../test-files/swift/dummy.swift') - let g:ale_swift_appleswiftformat_executable = 'xxxinvalid' - let g:ale_swift_appleswiftformat_use_swiftpm = 0 - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_swift_appleswiftformat_executable) - \ . ' format --in-place %t', - \ }, - \ ale#fixers#appleswiftformat#Fix(bufnr('')) - -Execute(The swiftformat callback should return the correct default values and located configuration): - call ale#test#SetDirectory('/testplugin/test/test-files/swift/swift-package-project-with-config') - call ale#test#SetFilename('src/folder/dummy.swift') - - let g:ale_swift_appleswiftformat_executable = 'xxxinvalid' - let g:ale_swift_appleswiftformat_use_swiftpm = 0 - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_swift_appleswiftformat_executable) - \ . ' format --in-place %t --configuration ' . glob(g:dir . '/.swift-format'), - \ }, - \ ale#fixers#appleswiftformat#Fix(bufnr('')) - - call ale#test#RestoreDirectory() - -Execute(The swiftformat callback should use swiftpm is use_swiftpm is set to 1): - call ale#test#SetFilename('../test-files/swift/swift-package-project/src/folder/dummy.swift') - let g:ale_swift_appleswiftformat_use_swiftpm = 1 - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('swift') - \ . ' run swift-format format --in-place %t', - \ }, - \ ale#fixers#appleswiftformat#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_astyle_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_astyle_fixer_callback.vader deleted file mode 100644 index 9d2e4c80..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_astyle_fixer_callback.vader +++ /dev/null @@ -1,96 +0,0 @@ -Before: - Save g:ale_c_astyle_executable - Save g:ale_c_astyle_project_options - Save g:ale_cpp_astyle_project_options - - " Use an invalid global executable, so we don't match it. - let g:ale_c_astyle_executable = 'xxxinvalid' - let g:ale_cpp_astyle_executable = 'invalidpp' - let g:ale_c_astyle_project_options = '' - let g:ale_cpp_astyle_project_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The astyle callback should return the correct default values): - " Because this file doesn't exist, no astylrc config - " exists near it. Therefore, project_options is empty. - call ale#test#SetFilename('../c_files/testfile.c') - let targetfile = bufname(bufnr('%')) - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_astyle_executable) - \ . ' --stdin=' . ale#Escape(targetfile) - \ }, - \ ale#fixers#astyle#Fix(bufnr('')) - -Execute(The astyle callback should support cpp files): - " Because this file doesn't exist, no astylrc config - " exists near it. Therefore, project_options is empty. - call ale#test#SetFilename('../cpp_files/dummy.cpp') - set filetype=cpp " The test fails without this - let targetfile = bufname(bufnr('%')) - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_cpp_astyle_executable) - \ . ' --stdin=' . ale#Escape(targetfile) - \ }, - \ ale#fixers#astyle#Fix(bufnr('')) - -Execute(The astyle callback should support cpp files with option file set): - call ale#test#SetFilename('../cpp_files/dummy.cpp') - let g:ale_cpp_astyle_project_options = '.astylerc_cpp' - let targetfile = bufname(bufnr('%')) - set filetype=cpp " The test fails without this - - AssertEqual - \ { - \ 'command': ale#Escape('invalidpp') - \ . ' --project=' . g:ale_cpp_astyle_project_options - \ . ' --stdin=' . ale#Escape(targetfile) - \ }, - \ ale#fixers#astyle#Fix(bufnr('')) - -Execute(The astyle callback should return the correct default values with a specified option file): - call ale#test#SetFilename('../c_files/testfile.c') - let g:ale_c_astyle_project_options = '.astylerc_c' - let targetfile = bufname(bufnr('%')) - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' --project=' . g:ale_c_astyle_project_options - \ . ' --stdin=' . ale#Escape(targetfile) - \ }, - \ ale#fixers#astyle#Fix(bufnr('')) - -Execute(The astyle callback should find nearest default option file _astylrc): - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/file.c') - let targetfile = bufname(bufnr('%')) - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' --project=_astylerc' - \ . ' --stdin=' . ale#Escape(targetfile) - \ }, - \ ale#fixers#astyle#Fix(bufnr('')) - -Execute(The astyle callback should find .astylrc in the same directory as src): - call ale#test#SetFilename('../test-files/cpp/dummy.cpp') - set filetype=cpp " The test fails without this - let targetfile = bufname(bufnr('%')) - - AssertEqual - \ { - \ 'command': ale#Escape('invalidpp') - \ . ' --project=.astylerc' - \ . ' --stdin=' . ale#Escape(targetfile) - \ }, - \ ale#fixers#astyle#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_autoflake_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_autoflake_fixer_callback.vader deleted file mode 100644 index 91fc62b5..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_autoflake_fixer_callback.vader +++ /dev/null @@ -1,49 +0,0 @@ -Before: - Save g:ale_python_autoflake_executable - Save g:ale_python_autoflake_options - - " Use an invalid global executable, so we don't match it. - let g:ale_python_autoflake_executable = 'xxxinvalid' - let g:ale_python_autoflake_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - let g:dir = getcwd() - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - Restore - - unlet! b:bin_dir - - call ale#test#RestoreDirectory() - -Execute(The autoflake callback should return the correct default values): - AssertEqual - \ 0, - \ ale#fixers#autoflake#Fix(bufnr('')) - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ { - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/autoflake')) - \ . ' --in-place ' - \ . ' %t', - \ 'read_temporary_file': 1, - \ }, - \ ale#fixers#autoflake#Fix(bufnr('')) - - -Execute(The autoflake callback should include options): - let g:ale_python_autoflake_options = '--some-option' - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ { - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/autoflake')) - \ . ' --some-option' - \ . ' --in-place ' - \ . ' %t', - \ 'read_temporary_file': 1, - \ }, - \ ale#fixers#autoflake#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_autoimport_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_autoimport_fixer_callback.vader deleted file mode 100644 index edca5c38..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_autoimport_fixer_callback.vader +++ /dev/null @@ -1,47 +0,0 @@ -Before: - Save g:ale_python_autoimport_executable - Save g:ale_python_autoimport_options - - " Use an invalid global executable, so we don't match it. - let g:ale_python_autoimport_executable = 'xxxinvalid' - let g:ale_python_autoimport_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - Restore - - unlet! b:bin_dir - - call ale#test#RestoreDirectory() - -Execute(The autoimport callback should return the correct default values): - AssertEqual - \ 0, - \ ale#fixers#autoimport#Fix(bufnr('')) - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/autoimport')) . ' -', - \ }, - \ ale#fixers#autoimport#Fix(bufnr('')) - -Execute(The autoimport callback should respect custom options): - let g:ale_python_autoimport_options = '--multi-line=3 --trailing-comma' - - AssertEqual - \ 0, - \ ale#fixers#autoimport#Fix(bufnr('')) - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/autoimport')) - \ . ' --multi-line=3 --trailing-comma -', - \ }, - \ ale#fixers#autoimport#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_autopep8_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_autopep8_fixer_callback.vader deleted file mode 100644 index 46671eda..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_autopep8_fixer_callback.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - Save g:ale_python_autopep8_executable - Save g:ale_python_autopep8_options - - " Use an invalid global executable, so we don't match it. - let g:ale_python_autopep8_executable = 'xxxinvalid' - let g:ale_python_autopep8_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - let g:dir = getcwd() - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - Restore - - unlet! b:bin_dir - - call ale#test#RestoreDirectory() - -Execute(The autopep8 callback should return the correct default values): - AssertEqual - \ 0, - \ ale#fixers#autopep8#Fix(bufnr('')) - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/autopep8')) . ' -'}, - \ ale#fixers#autopep8#Fix(bufnr('')) - -Execute(The autopep8 callback should include options): - let g:ale_python_autopep8_options = '--some-option' - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/autopep8')) . ' --some-option -' }, - \ ale#fixers#autopep8#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_bibclean_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_bibclean_fixer_callback.vader deleted file mode 100644 index 88412eca..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_bibclean_fixer_callback.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - Save g:ale_bib_bibclean_executable - Save g:ale_bib_bibclean_options - - let g:ale_bib_bibclean_executable = 'xxxinvalid' - let g:ale_bib_bibclean_options = '-align-equals' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - call ale#test#RestoreDirectory() - -Execute(The bibclean callback should return the correct default values): - call ale#test#SetFilename('../test-files/bib/dummy.bib') - - AssertEqual - \ {'command': ale#Escape(g:ale_bib_bibclean_executable) . ' -align-equals'}, - \ ale#fixers#bibclean#Fix(bufnr('')) - -Execute(The bibclean callback should include custom bibclean options): - let g:ale_bib_bibclean_options = '-author -check-values' - call ale#test#SetFilename('../test-files/bib/dummy.bib') - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_bib_bibclean_executable) . ' -author -check-values' - \ }, - \ ale#fixers#bibclean#Fix(bufnr('')) - diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_black_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_black_fixer_callback.vader deleted file mode 100644 index bb76a1fe..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_black_fixer_callback.vader +++ /dev/null @@ -1,67 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('python', 'black') - - let g:dir = getcwd() - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - call ale#assert#TearDownFixerTest() - - unlet! g:dir - unlet! b:bin_dir - -Execute(The black callback should return the correct default values): - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/black')) . ' -'}, - \ ale#fixers#black#Fix(bufnr('')) - -Execute(The black callback should include options): - let g:ale_python_black_options = '--some-option' - let g:ale_python_black_change_directory = 0 - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/black')) . ' --some-option -' }, - \ ale#fixers#black#Fix(bufnr('')) - -Execute(The black callback should include --pyi for .pyi files): - let g:ale_python_black_change_directory = 0 - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.pyi') - - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/black')) . ' --pyi -' }, - \ ale#fixers#black#Fix(bufnr('')) - -Execute(The black callback should not concatenate options): - let g:ale_python_black_options = '--some-option' - let g:ale_python_black_change_directory = 0 - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.pyi') - - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/black')) . ' --some-option --pyi -' }, - \ ale#fixers#black#Fix(bufnr('')) - -Execute(Pipenv is detected when python_black_auto_pipenv is set): - let g:ale_python_black_auto_pipenv = 1 - let g:ale_python_black_change_directory = 0 - - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertEqual - \ {'command': ale#Escape('pipenv') . ' run black -'}, - \ ale#fixers#black#Fix(bufnr('')) - -Execute(Poetry is detected when python_black_auto_poetry is set): - let g:ale_python_black_auto_poetry = 1 - let g:ale_python_black_change_directory = 0 - - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertEqual - \ {'command': ale#Escape('poetry') . ' run black -'}, - \ ale#fixers#black#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_break_up_long_lines_python_fixer.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_break_up_long_lines_python_fixer.vader deleted file mode 100644 index c7809acd..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_break_up_long_lines_python_fixer.vader +++ /dev/null @@ -1,39 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - call ale#test#RestoreDirectory() - -Execute(Long lines with basic function calls should be broken up correctly): - AssertEqual - \ [ - \ 'def foo():', - \ ' some_variable = this_is_a_longer_function(', - \ 'first_argument,', - \ ' second_argument,', - \ ' third_with_function_call(', - \ 'foo,', - \ ' bar,', - \ '))', - \ ], - \ ale#fixers#generic_python#BreakUpLongLines(bufnr(''), [ - \ 'def foo():', - \ ' some_variable = this_is_a_longer_function(first_argument, second_argument, third_with_function_call(foo, bar))', - \ ]) - -Execute(Longer lines should be permitted if a configuration file allows it): - call ale#test#SetFilename('../test-files/long-line/foo/bar.py') - - AssertEqual - \ [ - \ 'x = this_line_is_between_79_and_90_characters(first, second, third, fourth, fifth)', - \ 'y = this_line_is_longer_than_90_characters(', - \ 'much_longer_word,', - \ ' another_longer_word,', - \ ' a_third_long_word,', - \ ')' - \ ], - \ ale#fixers#generic_python#BreakUpLongLines(bufnr(''), [ - \ 'x = this_line_is_between_79_and_90_characters(first, second, third, fourth, fifth)', - \ 'y = this_line_is_longer_than_90_characters(much_longer_word, another_longer_word, a_third_long_word)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_brittany_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_brittany_fixer_callback.vader deleted file mode 100644 index 073e368c..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_brittany_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_haskell_brittany_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_haskell_brittany_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The brittany callback should return the correct default values): - call ale#test#SetFilename('../haskell_files/testfile.hs') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' --write-mode inplace' - \ . ' %t', - \ }, - \ ale#fixers#brittany#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_buf_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_buf_format_fixer_callback.vader deleted file mode 100644 index ee484820..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_buf_format_fixer_callback.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - Save g:ale_proto_buf_format_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_proto_buf_format_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The buf-format callback should return the correct default values): - call ale#test#SetFilename('../test-files/proto/testfile.proto') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' format %t', - \ }, - \ ale#fixers#buf_format#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_buildifier_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_buildifier_fixer_callback.vader deleted file mode 100644 index f82e8e6e..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_buildifier_fixer_callback.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - let g:ale_bazel_buildifier_options = '' - call ale#assert#SetUpFixerTest('bzl', 'buildifier') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The buildifier callback should return the correct default values): - call ale#test#SetFilename('../test-files/bazel/WORKSPACE') - - AssertFixer - \ { - \ 'command': ale#Escape(g:ale_bazel_buildifier_executable) - \ . ' -mode fix -lint fix -path ' - \ . ale#Escape(ale#test#GetFilename('../test-files/bazel/WORKSPACE')) - \ . ' -' - \ } - -Execute(The buildifier callback should include any additional options): - call ale#test#SetFilename('../test-files/bazel/WORKSPACE') - let g:ale_bazel_buildifier_options = '--some-option' - - AssertFixer - \ { - \ 'command': ale#Escape(g:ale_bazel_buildifier_executable) - \ . ' -mode fix -lint fix -path ' - \ . ale#Escape(ale#test#GetFilename('../test-files/bazel/WORKSPACE')) - \ . ' --some-option -' - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_clangformat_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_clangformat_fixer_callback.vader deleted file mode 100644 index 130ca7f7..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_clangformat_fixer_callback.vader +++ /dev/null @@ -1,64 +0,0 @@ -Before: - Save g:ale_c_clangformat_executable - Save g:c_clangformat_style_option - Save g:c_clangformat_use_local_file - - " Use an invalid global executable, so we don't match it. - let g:ale_c_clangformat_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - let g:dir = getcwd() - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The clang-format callback should return the correct default values): - call ale#test#SetFilename('../test-files/c/dummy.c') - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_clangformat_executable) - \ . ' --assume-filename=' . ale#Escape(bufname(bufnr(''))) - \ }, - \ ale#fixers#clangformat#Fix(bufnr('')) - -Execute(The clangformat callback should include any additional options): - call ale#test#SetFilename('../test-files/c/dummy.c') - let g:ale_c_clangformat_options = '--some-option' - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_clangformat_executable) - \ . ' --assume-filename=' . ale#Escape(bufname(bufnr(''))) - \ . ' --some-option', - \ }, - \ ale#fixers#clangformat#Fix(bufnr('')) - -Execute(The clangformat callback should include style options as well): - call ale#test#SetFilename('../test-files/c/dummy.c') - let g:ale_c_clangformat_options = '--some-option' - let g:ale_c_clangformat_style_option = '{BasedOnStyle: Microsoft, ColumnLimit:80,}' - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_clangformat_executable) - \ . ' --assume-filename=' . ale#Escape(bufname(bufnr(''))) - \ . ' --some-option' . " -style='{BasedOnStyle: Microsoft, ColumnLimit:80,}'", - \ }, - \ ale#fixers#clangformat#Fix(bufnr('')) - -Execute(The clangformat callback should use local file instead of style options): - call ale#test#SetFilename('../test-files/clangformat/with_clangformat/dummy.c') - let g:ale_c_clangformat_options = '--some-option' - let g:ale_c_clangformat_style_option = '{BasedOnStyle: Microsoft, ColumnLimit:80,}' - let g:ale_c_clangformat_use_local_file = 1 - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_clangformat_executable) - \ . ' --assume-filename=' . ale#Escape(bufname(bufnr(''))) - \ . ' --some-option' . ' -style=file', - \ }, - \ ale#fixers#clangformat#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_clangtidy_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_clangtidy_fixer_callback.vader deleted file mode 100644 index d6678bd9..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_clangtidy_fixer_callback.vader +++ /dev/null @@ -1,47 +0,0 @@ -Before: - Save g:ale_c_build_dir - Save g:ale_c_clangtidy_executable - Save g:ale_c_clangtidy_checks - Save g:ale_c_clangtidy_extra_options - Save g:ale_cpp_clangtidy_executable - Save g:ale_cpp_clangtidy_checks - Save g:ale_cpp_clangtidy_extra_options - - " Use an invalid global executable, so we don't match it. - let g:ale_c_clangtidy_executable = 'xxxinvalid' - let g:ale_c_clangtidy_checks = [] - let g:ale_c_clangtidy_extra_options = '' - let g:ale_cpp_clangtidy_executable = 'xxxinvalidpp' - let g:ale_cpp_clangtidy_checks = [] - let g:ale_cpp_clangtidy_extra_options = '' - let g:ale_c_build_dir = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The clangtidy callback should return the correct default values): - call ale#test#SetFilename('../test-files/c/dummy.c') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_c_clangtidy_executable) - \ . ' -fix -fix-errors %t' - \ }, - \ ale#fixers#clangtidy#Fix(bufnr('')) - -Execute(The clangtidy callback should include any additional options): - call ale#test#SetFilename('../test-files/c/dummy.c') - let g:ale_c_clangtidy_extra_options = '--some-option' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_c_clangtidy_executable) - \ . ' -fix -fix-errors --some-option %t', - \ }, - \ ale#fixers#clangtidy#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_cmakeformat_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_cmakeformat_fixer_callback.vader deleted file mode 100644 index 545fe067..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_cmakeformat_fixer_callback.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - Save g:ale_cmake_cmakeformat_executable - Save g:ale_cmake_cmakeformat_options - - " Use an invalid global executable, so we don't match it. - let g:ale_cmake_cmakeformat_executable = 'xxxinvalid' - let g:ale_cmake_cmakeformat_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The cmakeformat callback should return the correct default values): - call ale#test#SetFilename('../cmake_files/CMakeList.txt') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' -' - \ }, - \ ale#fixers#cmakeformat#Fix(bufnr('')) - -Execute(The cmakeformat callback should include custom cmakeformat options): - let g:ale_cmake_cmakeformat_options = "-r '(a) -> a'" - call ale#test#SetFilename('../cmake_files/CMakeList.txt') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_cmake_cmakeformat_options - \ . ' -', - \ }, - \ ale#fixers#cmakeformat#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_crystal_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_crystal_format_fixer_callback.vader deleted file mode 100644 index d7d9588b..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_crystal_format_fixer_callback.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - Save g:ale_crystal_format_executable - Save g:ale_crystal_format_options - - " Use an invalid global executable, so we don't match it. - let g:ale_crystal_format_executable = 'xxxinvalid' - let g:ale_crystal_format_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The crystal format callback should return the correct default values): - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' tool format -', - \ }, - \ ale#fixers#crystal#Fix(bufnr('')) - -Execute(The crystal format callback should include custom options): - let g:ale_crystal_format_options = "-list=true" - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' tool format ' . g:ale_crystal_format_options - \ . ' -', - \ }, - \ ale#fixers#crystal#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_css_beautify_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_css_beautify_fixer_callback.vader deleted file mode 100644 index a6b61713..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_css_beautify_fixer_callback.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('css', 'css-beautify', 'beautify') - -After: - Restore - - call ale#assert#TearDownFixerTest() - -Execute(The css-beautify callback should return the correct default command): - AssertEqual - \ {'command': ale#Escape('css-beautify') . ' -'}, - \ ale#fixers#css_beautify#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dart_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dart_format_fixer_callback.vader deleted file mode 100644 index 8dfd20b6..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dart_format_fixer_callback.vader +++ /dev/null @@ -1,40 +0,0 @@ -Before: - Save g:ale_dart_format_executable - Save g:ale_dart_format_options - - " Use an invalid global executable, so we don't match it. - let g:ale_dart_format_executable = 'xxxinvalid' - let g:ale_dart_format_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The dart format callback should return the correct default values): - call ale#test#SetFilename('../test-files/dart/testfile.dart') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' format' - \ . ' %t', - \ }, - \ ale#fixers#dart_format#Fix(bufnr('')) - -Execute(The dart format callback should include custom dart format options): - let g:ale_dart_format_options = "-l 80" - call ale#test#SetFilename('../test-files/dart/testfile.dart') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' format' - \ . ' ' . g:ale_dart_format_options - \ . ' %t', - \ }, - \ ale#fixers#dart_format#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dartfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dartfmt_fixer_callback.vader deleted file mode 100644 index c783c9a4..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dartfmt_fixer_callback.vader +++ /dev/null @@ -1,40 +0,0 @@ -Before: - Save g:ale_dart_dartfmt_executable - Save g:ale_dart_dartfmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_dart_dartfmt_executable = 'xxxinvalid' - let g:ale_dart_dartfmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The dartfmt callback should return the correct default values): - call ale#test#SetFilename('../test-files/dart/testfile.dart') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -w' - \ . ' %t', - \ }, - \ ale#fixers#dartfmt#Fix(bufnr('')) - -Execute(The dartfmt callback should include custom dartfmt options): - let g:ale_dart_dartfmt_options = "-l 80" - call ale#test#SetFilename('../test-files/dart/testfile.dart') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -w' - \ . ' ' . g:ale_dart_dartfmt_options - \ . ' %t', - \ }, - \ ale#fixers#dartfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dfmt_fixer_callback.vader deleted file mode 100644 index 5749224e..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dfmt_fixer_callback.vader +++ /dev/null @@ -1,40 +0,0 @@ -Before: - Save g:ale_d_dfmt_executable - Save g:ale_d_dfmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_d_dfmt_executable = 'xxxinvalid' - let g:ale_d_dfmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The dfmt callback should return the correct default values): - call ale#test#SetFilename('../test-files/d/test.d') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -i' - \ . ' %t', - \ }, - \ ale#fixers#dfmt#Fix(bufnr('')) - -Execute(The dfmt callback should include custom dfmt options): - let g:ale_d_dfmt_options = "--space-after-cast" - call ale#test#SetFilename('../test-files/d/test.d') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -i' - \ . ' ' . g:ale_d_dfmt_options - \ . ' %t', - \ }, - \ ale#fixers#dfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_format_fixer_callback.vader deleted file mode 100644 index 8fa2fe7c..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_format_fixer_callback.vader +++ /dev/null @@ -1,22 +0,0 @@ -Before: - Save g:ale_dhall_executable - Save g:ale_dhall_options - - " Use an invalid global executable, so we don’t match it. - let g:ale_dhall_executable = 'odd-dhall' - let g:ale_dhall_options = '--ascii' - - call ale#assert#SetUpFixerTest('dhall', 'dhall-format') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The dhall-format callback should return the correct options): - call ale#test#SetFilename('../dhall_files/testfile.dhall') - - AssertFixer - \ { - \ 'command': ale#Escape('odd-dhall') - \ . ' --ascii' - \ . ' format' - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_freeze_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_freeze_fixer_callback.vader deleted file mode 100644 index 02473697..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_freeze_fixer_callback.vader +++ /dev/null @@ -1,22 +0,0 @@ -Before: - Save g:ale_dhall_executable - Save g:ale_dhall_options - - " Use an invalid global executable, so we don’t match it. - let g:ale_dhall_executable = 'odd-dhall' - let g:ale_dhall_options = '--ascii' - let g:ale_dhall_freeze_options = '--all' - - call ale#assert#SetUpFixerTest('dhall', 'dhall-freeze') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The dhall-freeze callback should return the correct options): - AssertFixer - \ { - \ 'command': ale#Escape('odd-dhall') - \ . ' --ascii' - \ . ' freeze' - \ . ' --all' - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_lint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_lint_fixer_callback.vader deleted file mode 100644 index e2054eb0..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dhall_lint_fixer_callback.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - Save g:ale_dhall_executable - Save g:ale_dhall_options - - " Use an invalid global executable, so we don’t match it. - let g:ale_dhall_executable = 'odd-dhall' - let g:ale_dhall_options = '--ascii' - - call ale#assert#SetUpFixerTest('dhall', 'dhall-lint') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The dhall-lint callback should return the correct options): - AssertFixer - \ { - \ 'command': ale#Escape('odd-dhall') - \ . ' --ascii' - \ . ' lint' - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dotnet_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dotnet_format_fixer_callback.vader deleted file mode 100644 index a3993573..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dotnet_format_fixer_callback.vader +++ /dev/null @@ -1,41 +0,0 @@ -Before: - Save g:ale_cs_dotnet_format_executable - Save g:ale_cs_dotnet_format_options - - " Use an invalid global executable, so we don't match it. - let g:ale_cs_dotnet_format_executable = 'xxxinvalid' - let g:ale_cs_dotnet_format_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The dotnet format callback should return the correct default values): - call ale#test#SetFilename('../test-files/cs/testfile.cs') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' format' - \ . ' --folder --include %t "$(dirname %t)"', - \ }, - \ ale#fixers#dotnet_format#Fix(bufnr('')) - -Execute(The dotnet format callback should include custom dotnet format options): - let g:ale_cs_dotnet_format_options = "-l 80" - call ale#test#SetFilename('../test-files/cs/testfile.cs') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' format' - \ . ' ' . g:ale_cs_dotnet_format_options - \ . ' --folder --include %t "$(dirname %t)"', - \ }, - \ ale#fixers#dotnet_format#Fix(bufnr('')) - diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dprint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dprint_fixer_callback.vader deleted file mode 100644 index 6a9d0118..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dprint_fixer_callback.vader +++ /dev/null @@ -1,44 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('typescript', 'dprint') - call ale#test#SetFilename('../test-files/dprint/blank.ts') - let g:ale_dprint_executable_override = 0 - let g:ale_dprint_executable = 'dprint' - let g:ale_dprint_config = '' - -After: - Restore - call ale#assert#TearDownFixerTest() - -Execute(The dprint callback should return 0 for a non-existent executable): - let g:ale_dprint_executable = 'foo' - AssertFixer 0 - -Execute(The dprint callback should return the correct default values): - let g:ale_dprint_executable_override = 1 - AssertFixer { - \ 'command': ale#Escape('dprint') - \ . ' fmt ' - \ . ' --stdin %s' - \ } - -Execute(The dprint callback should include config): - let g:ale_dprint_executable_override = 1 - let g:ale_dprint_config = 'dprint.json' - - AssertFixer { - \ 'command': ale#Escape('dprint') - \ . ' fmt ' - \ . ' -c ' - \ . ale#Escape((has('win32') ? 'C:\testplugin\test\test-files\dprint\dprint.json' : '/testplugin/test/test-files/dprint/dprint.json')) - \ . ' --stdin %s' - \ } - -Execute(The dprint callback should include custom options): - let g:ale_dprint_executable_override = 1 - let g:ale_dprint_options = '--verbose' - - AssertFixer { - \ 'command': ale#Escape('dprint') - \ . ' fmt ' - \ . '--verbose' . ' --stdin %s' - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_dune_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_dune_fixer_callback.vader deleted file mode 100644 index 7fc0733c..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_dune_fixer_callback.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - Save g:ale_ocaml_dune_executable - Save g:ale_ocaml_dune_options - - " Use an invalid global executable, so we don't match it. - let g:ale_ocaml_dune_executable = 'xxxinvalid' - let g:ale_ocaml_dune_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The dune callback should return the correct default values): - call ale#test#SetFilename('../test-files/ocaml/testfile.re') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' format', - \ }, - \ ale#fixers#dune#Fix(bufnr('')) - -Execute(The dune callback should include custom dune options): - let g:ale_ocaml_dune_options = "--random-option" - call ale#test#SetFilename('../test-files/ocaml/testfile.re') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' format' - \ . ' ' . g:ale_ocaml_dune_options, - \ }, - \ ale#fixers#dune#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_elm_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_elm_format_fixer_callback.vader deleted file mode 100644 index 35244737..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_elm_format_fixer_callback.vader +++ /dev/null @@ -1,74 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - unlet! b:ale_elm_format_executable - unlet! b:ale_elm_format_use_global - unlet! b:ale_elm_format_options - - call ale#test#RestoreDirectory() - -Execute(The elm-format command should have default params): - call ale#test#SetFilename('../test-files/elm/src/subdir/testfile.elm') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/elm/node_modules/.bin/elm-format')) - \ . ' %t --yes', - \ }, - \ ale#fixers#elm_format#Fix(bufnr('')) - -Execute(The elm-format command should manage use_global = 1 param): - call ale#test#SetFilename('../test-files/elm/src/subdir/testfile.elm') - let b:ale_elm_format_use_global = 1 - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape('elm-format') - \ . ' %t --yes', - \ }, - \ ale#fixers#elm_format#Fix(bufnr('')) - -Execute(The elm-format command should manage executable param): - call ale#test#SetFilename('../test-files/elm/src/subdir/testfile.elm') - let b:ale_elm_format_use_global = 1 - let b:ale_elm_format_executable = 'elmformat' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape('elmformat') - \ . ' %t --yes', - \ }, - \ ale#fixers#elm_format#Fix(bufnr('')) - -Execute(The elm-format command should manage empty options): - call ale#test#SetFilename('../test-files/elm/src/subdir/testfile.elm') - let b:ale_elm_format_options = '' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/elm/node_modules/.bin/elm-format')) - \ . ' %t', - \ }, - \ ale#fixers#elm_format#Fix(bufnr('')) - -Execute(The elm-format command should manage custom options): - call ale#test#SetFilename('../test-files/elm/src/subdir/testfile.elm') - let b:ale_elm_format_options = '--param1 --param2' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/elm/node_modules/.bin/elm-format')) - \ . ' %t --param1 --param2', - \ }, - \ ale#fixers#elm_format#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_erblint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_erblint_fixer_callback.vader deleted file mode 100644 index 7b56e3a9..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_erblint_fixer_callback.vader +++ /dev/null @@ -1,55 +0,0 @@ -Before: - Save g:ale_eruby_erblint_executable - Save g:ale_eruby_erblint_options - - " Use an invalid global executable, so we don't match it. - let g:ale_eruby_erblint_executable = 'xxxinvalid' - let g:ale_eruby_erblint_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The erblint callback should return the correct default values): - call ale#test#SetFilename('../test-files/eruby/dummy.html.erb') - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#erblint#PostProcess', - \ 'command': ale#Escape(g:ale_eruby_erblint_executable) - \ . ' --autocorrect --stdin %s', - \ }, - \ ale#fixers#erblint#Fix(bufnr('')) - -Execute(The erblint callback should include custom erblint options): - let g:ale_eruby_erblint_options = '--lint-all' - call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb') - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#erblint#PostProcess', - \ 'command': ale#Escape(g:ale_eruby_erblint_executable) - \ . ' --lint-all' - \ . ' --autocorrect --stdin %s', - \ }, - \ ale#fixers#erblint#Fix(bufnr('')) - -Execute(The erblint post-processor should remove diagnostics content): - AssertEqual - \ [ - \ '
', - \ '', - \ '
', - \ ], - \ ale#fixers#erblint#PostProcess(bufnr(''), [ - \ 'Linting 1 files with 11 autocorrectable linters...', - \ '', - \ '1 error(s) corrected in ERB files', - \ '================ /home/user/demo.html.erb ==================', - \ '
', - \ '', - \ '
', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_erlfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_erlfmt_fixer_callback.vader deleted file mode 100644 index 132cd6ee..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_erlfmt_fixer_callback.vader +++ /dev/null @@ -1,25 +0,0 @@ -Before: - Save b:ale_elm_format_executable - Save b:ale_elm_format_options - - let b:ale_elm_format_executable = 'erlfmt' - let b:ale_elm_format_options = '' - -After: - Restore - -Execute(The erlfmt command should handle empty options): - AssertEqual - \ { - \ 'command': ale#Escape('erlfmt') . ' %s' - \ }, - \ ale#fixers#erlfmt#Fix(bufnr('')) - -Execute(The erlfmt command should handle custom options): - let b:ale_erlang_erlfmt_options = '--insert-pragma' - - AssertEqual - \ { - \ 'command': ale#Escape('erlfmt') . ' --insert-pragma %s' - \ }, - \ ale#fixers#erlfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_eslint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_eslint_fixer_callback.vader deleted file mode 100644 index 4a1dc47c..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_eslint_fixer_callback.vader +++ /dev/null @@ -1,339 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('javascript', 'eslint') - Save g:ale_command_wrapper - - runtime autoload/ale/handlers/eslint.vim - - let g:ale_command_wrapper = '' - -After: - call ale#assert#TearDownFixerTest() - -Execute(The executable path should be correct): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir/testfile.js') - - " eslint_d output with an older eslint version is used here. - GivenCommandOutput ['v4.4.1 (eslint_d v5.1.0)'] - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/react-app'), - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/.eslintrc.js')) - \ . ' --fix %t', - \ } - -Execute(The ESLint fixer shouldn't run if no configuration file can be found): - call ale#test#SetFilename('../no-configuration') - AssertFixerNotExecuted - -Execute(The ESLint fixer should use a config file option if set for old versions): - call ale#test#SetFilename('../no-configuration') - let b:ale_javascript_eslint_options = '-c /foo.cfg' - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': '', - \ 'command': ale#Escape('eslint') . ' -c /foo.cfg --fix %t', - \ } - - let b:ale_javascript_eslint_options = '--bar -c /foo.cfg' - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': '', - \ 'command': ale#Escape('eslint') . ' --bar -c /foo.cfg --fix %t', - \ } - - let b:ale_javascript_eslint_options = '--config /foo.cfg' - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': '', - \ 'command': ale#Escape('eslint') . ' --config /foo.cfg --fix %t', - \ } - - let b:ale_javascript_eslint_options = '--bar --config /foo.cfg' - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': '', - \ 'command': ale#Escape('eslint') . ' --bar --config /foo.cfg --fix %t', - \ } - -Execute(The ESLint fixer should use a -c file option if set for eslint_d): - let b:ale_javascript_eslint_executable = '/bin/eslint_d' - GivenCommandOutput ['v3.19.0 (eslint_d v4.2.0)'] - call ale#test#SetFilename('../no-configuration') - let b:ale_javascript_eslint_options = '-c /foo.cfg' - - AssertFixer - \ { - \ 'process_with': 'ale#fixers#eslint#ProcessEslintDOutput', - \ 'cwd': '', - \ 'command': ale#Escape('/bin/eslint_d') - \ . ' -c /foo.cfg' - \ . ' --stdin-filename %s --stdin --fix-to-stdout' - \ } - - let b:ale_javascript_eslint_options = '--bar -c /foo.cfg' - - AssertFixer - \ { - \ 'process_with': 'ale#fixers#eslint#ProcessEslintDOutput', - \ 'cwd': '', - \ 'command': ale#Escape('/bin/eslint_d') - \ . ' --bar -c /foo.cfg' - \ . ' --stdin-filename %s --stdin --fix-to-stdout' - \ } - - let b:ale_javascript_eslint_options = '--config /foo.cfg' - - AssertFixer - \ { - \ 'process_with': 'ale#fixers#eslint#ProcessEslintDOutput', - \ 'cwd': '', - \ 'command': ale#Escape('/bin/eslint_d') - \ . ' --config /foo.cfg' - \ . ' --stdin-filename %s --stdin --fix-to-stdout' - \ } - - let b:ale_javascript_eslint_options = '--bar --config /foo.cfg' - - AssertFixer - \ { - \ 'process_with': 'ale#fixers#eslint#ProcessEslintDOutput', - \ 'cwd': '', - \ 'command': ale#Escape('/bin/eslint_d') - \ . ' --bar --config /foo.cfg' - \ . ' --stdin-filename %s --stdin --fix-to-stdout' - \ } - -Execute(The ESLint fixer should use a config file option if set for new versions): - GivenCommandOutput ['4.9.0'] - call ale#test#SetFilename('../no-configuration') - let b:ale_javascript_eslint_options = '-c /foo.cfg' - - AssertFixer - \ { - \ 'process_with': 'ale#fixers#eslint#ProcessFixDryRunOutput', - \ 'cwd': '', - \ 'command': ale#Escape('eslint') - \ . ' -c /foo.cfg' - \ . ' --stdin-filename %s --stdin --fix-dry-run --format=json' - \ } - - let b:ale_javascript_eslint_options = '--bar -c /foo.cfg' - - AssertFixer - \ { - \ 'process_with': 'ale#fixers#eslint#ProcessFixDryRunOutput', - \ 'cwd': '', - \ 'command': ale#Escape('eslint') - \ . ' --bar -c /foo.cfg' - \ . ' --stdin-filename %s --stdin --fix-dry-run --format=json' - \ } - - let b:ale_javascript_eslint_options = '--config /foo.cfg' - - AssertFixer - \ { - \ 'process_with': 'ale#fixers#eslint#ProcessFixDryRunOutput', - \ 'cwd': '', - \ 'command': ale#Escape('eslint') - \ . ' --config /foo.cfg' - \ . ' --stdin-filename %s --stdin --fix-dry-run --format=json' - \ } - - let b:ale_javascript_eslint_options = '--bar --config /foo.cfg' - - AssertFixer - \ { - \ 'process_with': 'ale#fixers#eslint#ProcessFixDryRunOutput', - \ 'cwd': '', - \ 'command': ale#Escape('eslint') - \ . ' --bar --config /foo.cfg' - \ . ' --stdin-filename %s --stdin --fix-dry-run --format=json' - \ } - -Execute(The lower priority configuration file in a nested directory should be preferred): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir-with-config/testfile.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/react-app'), - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/subdir-with-config/.eslintrc')) - \ . ' --fix %t', - \ } - -Execute(--config in options should override configuration file detection for old versions): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir-with-config/testfile.js') - - let b:ale_javascript_eslint_options = '--config /foo.cfg' - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/react-app'), - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' --config /foo.cfg' - \ . ' --fix %t', - \ } - - let b:ale_javascript_eslint_options = '-c /foo.cfg' - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/react-app'), - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' -c /foo.cfg' - \ . ' --fix %t', - \ } - -Execute(package.json should be used as a last resort): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir-with-package-json/testfile.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/react-app'), - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/.eslintrc.js')) - \ . ' --fix %t', - \ } - - call ale#test#SetFilename('../test-files/eslint/package.json') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint'), - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/node_modules/.bin/eslint')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/package.json')) - \ . ' --fix %t', - \ } - -Execute(The version check should be correct): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir-with-config/testfile.js') - - " We should run the command to get the version the first time. - GivenCommandOutput ['4.9.0'] - AssertFixer [ - \ (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' --version', - \ { - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/react-app'), - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' --stdin-filename %s --stdin --fix-dry-run --format=json', - \ 'process_with': 'ale#fixers#eslint#ProcessFixDryRunOutput', - \ }, - \] - - AssertFixer [ - \ { - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/react-app'), - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' --stdin-filename %s --stdin --fix-dry-run --format=json', - \ 'process_with': 'ale#fixers#eslint#ProcessFixDryRunOutput', - \ }, - \] - -Execute(--fix-dry-run should be used for 4.9.0 and up): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir/testfile.js') - - GivenCommandOutput ['4.9.0'] - AssertFixer - \ { - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/react-app'), - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js')) - \ . ' --stdin-filename %s --stdin --fix-dry-run --format=json', - \ 'process_with': 'ale#fixers#eslint#ProcessFixDryRunOutput', - \ } - -Execute(--fix-to-stdout should be used for eslint_d): - call ale#test#SetFilename('../test-files/eslint/app-with-eslint-d/testfile.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/app-with-eslint-d'), - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/app-with-eslint-d/node_modules/.bin/eslint_d')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/package.json')) - \ . ' --fix %t', - \ } - - " The option should be used when eslint_d is new enough. - " We look at the ESLint version instead of the eslint_d version. - GivenCommandOutput ['v3.19.0 (eslint_d v4.2.0)'] - AssertFixer - \ { - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/app-with-eslint-d'), - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/app-with-eslint-d/node_modules/.bin/eslint_d')) - \ . ' --stdin-filename %s --stdin --fix-to-stdout', - \ 'process_with': 'ale#fixers#eslint#ProcessEslintDOutput', - \ } - - " The option should be used for new versions too. - GivenCommandOutput ['4.9.0'] - AssertFixer - \ { - \ 'cwd': ale#path#Simplify(g:dir . '/../test-files/eslint/app-with-eslint-d'), - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/app-with-eslint-d/node_modules/.bin/eslint_d')) - \ . ' --stdin-filename %s --stdin --fix-to-stdout', - \ 'process_with': 'ale#fixers#eslint#ProcessEslintDOutput', - \ } - -Execute(The --fix-dry-run post-processor should handle JSON output correctly): - AssertEqual - \ [], - \ ale#fixers#eslint#ProcessFixDryRunOutput(bufnr(''), []) - AssertEqual - \ [], - \ ale#fixers#eslint#ProcessFixDryRunOutput(bufnr(''), ['']) - AssertEqual - \ [], - \ ale#fixers#eslint#ProcessFixDryRunOutput(bufnr(''), ['[{}]']) - AssertEqual - \ ['foo', 'bar'], - \ ale#fixers#eslint#ProcessFixDryRunOutput(bufnr(''), ['[{"output": "foo\nbar"}]']) - -Execute(The eslint_d post-processor should permit regular JavaScript content): - AssertEqual - \ [ - \ 'const x = ''Error: foo''', - \ 'const y = 3', - \ ], - \ ale#fixers#eslint#ProcessEslintDOutput(bufnr(''), [ - \ 'const x = ''Error: foo''', - \ 'const y = 3', - \ ]) - -Execute(The eslint_d post-processor should handle error messages correctly): - AssertEqual - \ [], - \ ale#fixers#eslint#ProcessEslintDOutput(bufnr(''), [ - \ 'Error: No ESLint configuration found.', - \ ]) - -Execute(The eslint_d post-processor should handle failing to connect properly): - AssertEqual - \ [], - \ ale#fixers#eslint#ProcessEslintDOutput(bufnr(''), [ - \ 'Could not connect', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_fecs_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_fecs_fixer_callback.vader deleted file mode 100644 index 146c0a87..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_fecs_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('javascript', 'fecs') - runtime autoload/ale/handlers/fecs.vim - -After: - call ale#assert#TearDownFixerTest() - -Execute(The fecs fixer should respect to g:ale_javascript_fecs_executable): - let g:ale_javascript_fecs_executable = '../test-files/fecs/fecs' - let g:ale_javascript_fecs_use_global = 1 - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_javascript_fecs_executable) . ' format --replace=true %t', - \ 'read_temporary_file': 1, - \ }, - \ ale#fixers#fecs#Fix(bufnr('')) - -Execute(The fecs fixer should return 0 when executable not found): - let g:ale_javascript_fecs_executable = 'fecs-invalid' - let g:ale_javascript_fecs_use_global = 1 - AssertEqual - \ 0, - \ ale#fixers#fecs#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_fish_indent_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_fish_indent_fixer_callback.vader deleted file mode 100644 index 3555a974..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_fish_indent_fixer_callback.vader +++ /dev/null @@ -1,40 +0,0 @@ -Before: - Save g:ale_fish_fish_indent_executable - Save g:ale_fish_fish_indent_options - - " Use an invalid global executable, so we don't match it. - let g:ale_fish_fish_indent_executable = 'xxxinvalid' - let g:ale_fish_fish_indent_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The fish_indent callback should return the correct default values): - call ale#test#SetFilename('../test-files/fish/testfile.fish') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -w ' - \ . ' %t', - \ }, - \ ale#fixers#fish_indent#Fix(bufnr('')) - -Execute(The fish_indent callback should include custom fish_indent options): - let g:ale_fish_fish_indent_options = "-d" - call ale#test#SetFilename('../test-files/fish/testfile.fish') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -w ' - \ . ' -d' - \ . ' %t', - \ }, - \ ale#fixers#fish_indent#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_fixjson_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_fixjson_fixer_callback.vader deleted file mode 100644 index 2b023fad..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_fixjson_fixer_callback.vader +++ /dev/null @@ -1,50 +0,0 @@ -Before: - Save g:ale_json_fixjson_executable - Save g:ale_json_fixjson_options - - let g:ale_json_fixjson_executable = '/path/to/fixjson' - let g:ale_json_fixjson_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - -Execute(The fixjson callback should return the correct default command): - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/fixjson') - \ . ' --stdin-filename ' - \ . ale#Escape(bufname(bufnr(''))) - \ }, - \ ale#fixers#fixjson#Fix(bufnr('')) - -Execute(The fixjson callback should set the buffer name as file name): - call ale#test#SetFilename('../test-files/json/testfile.json') - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/fixjson') - \ . ' --stdin-filename ' - \ . ale#Escape(bufname(bufnr(''))) - \ }, - \ ale#fixers#fixjson#Fix(bufnr('')) - - AssertNotEqual - \ stridx( - \ ale#fixers#fixjson#Fix(bufnr('')).command, - \ 'testfile.json', - \ ), - \ -1 - -Execute(The fixjson callback should include additional options): - let g:ale_json_fixjson_options = '-i 2' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/fixjson') - \ . ' --stdin-filename ' - \ . ale#Escape(bufname(bufnr(''))) - \ . ' -i 2' - \ }, - \ ale#fixers#fixjson#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_floskell_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_floskell_fixer_callback.vader deleted file mode 100644 index 66fe9200..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_floskell_fixer_callback.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - Save g:ale_haskell_floskell_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_haskell_floskell_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The floskell callback should return the correct default values): - call ale#test#SetFilename('../haskell_files/testfile.hs') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' %t', - \ }, - \ ale#fixers#floskell#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_gnatpp_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_gnatpp_fixer_callback.vader deleted file mode 100644 index 7a3ed517..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_gnatpp_fixer_callback.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('ada', 'gnatpp') - -After: - " Reset fixers, variables, etc. - " - " Vader's 'Restore' command will be called here. - call ale#assert#TearDownFixerTest() - -Execute(The default command should be correct): - call ale#test#SetFilename('../test-files/ada/testfile.adb') - - AssertFixer - \ { - \ 'command': ale#Escape(g:ale_ada_gnatpp_executable) .' %t', - \ 'read_temporary_file': 1, - \ } - -Execute(The version check should be correct): - call ale#test#SetFilename('../test-files/ada/testfile.adb') - let g:ale_ada_gnatpp_options = '--no-alignment' - - AssertFixer - \ { - \ 'command': ale#Escape(g:ale_ada_gnatpp_executable) - \ . ' --no-alignment %t', - \ 'read_temporary_file': 1, - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_gofmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_gofmt_fixer_callback.vader deleted file mode 100644 index 579dd3db..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_gofmt_fixer_callback.vader +++ /dev/null @@ -1,50 +0,0 @@ -Before: - Save g:ale_go_gofmt_executable - Save g:ale_go_gofmt_options - Save g:ale_go_go111module - - " Use an invalid global executable, so we don't match it. - let g:ale_go_gofmt_executable = 'xxxinvalid' - let g:ale_go_gofmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#test#RestoreDirectory() - -Execute(The gofmt callback should return the correct default values): - call ale#test#SetFilename('../test-files/go/testfile.go') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid'), - \ }, - \ ale#fixers#gofmt#Fix(bufnr('')) - -Execute(The gofmt callback should include custom gofmt options): - let g:ale_go_gofmt_options = "-r '(a) -> a'" - - call ale#test#SetFilename('../test-files/go/testfile.go') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_go_gofmt_options, - \ }, - \ ale#fixers#gofmt#Fix(bufnr('')) - -Execute(The gofmt callback should support Go environment variables): - let g:ale_go_go111module = 'off' - - call ale#test#SetFilename('../test-files/go/testfile.go') - - AssertEqual - \ { - \ 'command': ale#Env('GO111MODULE', 'off') - \ . ale#Escape('xxxinvalid') - \ }, - \ ale#fixers#gofmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_gofumpt_fixer.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_gofumpt_fixer.vader deleted file mode 100644 index 63e04de8..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_gofumpt_fixer.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('go', 'gofumpt') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The gofumpt callback should return the correct default values): - AssertFixer { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('gofumpt') . ' -w -- %t' - \} - -Execute(The gofumpt callback should allow custom gofumpt executables): - let g:ale_go_gofumpt_executable = 'foo/bar' - - AssertFixer { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('foo/bar') . ' -w -- %t' - \} - -Execute(The gofumpt callback should allow custom gofumpt options): - let g:ale_go_gofumpt_options = '--foobar' - - AssertFixer { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('gofumpt') . ' --foobar -w -- %t' - \} diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_goimports_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_goimports_fixer_callback.vader deleted file mode 100644 index 64c75b2d..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_goimports_fixer_callback.vader +++ /dev/null @@ -1,57 +0,0 @@ -Before: - Save g:ale_go_goimports_executable - Save g:ale_go_goimports_options - Save g:ale_go_go111module - - " Use an invalid global executable, so we don't match it. - let g:ale_go_goimports_executable = 'xxxinvalid' - let g:ale_go_goimports_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - call ale#test#SetFilename('../test-files/go/testfile.go') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#test#RestoreDirectory() - -Execute(The goimports callback should return 0 when the executable isn't executable): - AssertEqual - \ 0, - \ ale#fixers#goimports#Fix(bufnr('')) - -Execute(The goimports callback should the command when the executable test passes): - let g:ale_go_goimports_executable = has('win32') ? 'cmd' : 'echo' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_go_goimports_executable) . ' -l -w -srcdir %s %t' - \ }, - \ ale#fixers#goimports#Fix(bufnr('')) - -Execute(The goimports callback should include extra options): - let g:ale_go_goimports_executable = has('win32') ? 'cmd' : 'echo' - let g:ale_go_goimports_options = '--xxx' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_go_goimports_executable) . ' -l -w -srcdir %s --xxx %t' - \ }, - \ ale#fixers#goimports#Fix(bufnr('')) - -Execute(The goimports callback should support Go environment variables): - let g:ale_go_goimports_executable = has('win32') ? 'cmd' : 'echo' - let g:ale_go_go111module = 'on' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Env('GO111MODULE', 'on') - \ . ale#Escape(g:ale_go_goimports_executable) - \ . ' -l -w -srcdir %s %t' - \ }, - \ ale#fixers#goimports#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_golines_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_golines_fixer_callback.vader deleted file mode 100644 index 87e53c88..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_golines_fixer_callback.vader +++ /dev/null @@ -1,54 +0,0 @@ -Before: - Save g:ale_go_golines_executable - Save g:ale_go_golines_options - Save g:ale_go_go111module - - " Use an invalid global executable, so we don't match it. - let g:ale_go_golines_executable = 'xxxinvalid' - let g:ale_go_golines_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#test#RestoreDirectory() - -Execute(The golines callback should return 0 when the executable isn't executable): - AssertEqual - \ 0, - \ ale#fixers#golines#Fix(bufnr('')) - - -Execute(The golines callback should return the correct default values): - let g:ale_go_golines_executable = has('win32') ? 'cmd' : 'echo' - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_go_golines_executable), - \ }, - \ ale#fixers#golines#Fix(bufnr('')) - -Execute(The golines callback should include custom golines options): - let g:ale_go_golines_executable = has('win32') ? 'cmd' : 'echo' - let g:ale_go_golines_options = "--max-len --shorten-comments" - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_go_golines_executable) - \ . ' ' . g:ale_go_golines_options, - \ }, - \ ale#fixers#golines#Fix(bufnr('')) - -Execute(The golines callback should support Go environment variables): - let g:ale_go_golines_executable = has('win32') ? 'cmd' : 'echo' - let g:ale_go_go111module = 'off' - - AssertEqual - \ { - \ 'command': ale#Env('GO111MODULE', 'off') - \ . ale#Escape(g:ale_go_golines_executable) - \ }, - \ ale#fixers#golines#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_gomod_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_gomod_fixer_callback.vader deleted file mode 100644 index 56fb9854..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_gomod_fixer_callback.vader +++ /dev/null @@ -1,41 +0,0 @@ -Before: - Save g:ale_go_go_executable - Save g:ale_go_go111module - - " Use an invalid global executable, so we don't match it. - let g:ale_go_go_executable = 'xxxinvalid' - let g:ale_go_go111module = '' - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#test#RestoreDirectory() - -Execute(The gomod callback should return the correct default values): - call ale#test#SetFilename('../test-files/go/go.mod') - setl filetype=gomod - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' mod edit -fmt' - \ . ' %t', - \ }, - \ ale#fixers#gomod#Fix(bufnr('')) - -Execute(The gomod callback should support Go environment variables): - call ale#test#SetFilename('../test-files/go/go.mod') - setl filetype=gomod - let g:ale_go_go111module = 'on' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Env('GO111MODULE', 'on') - \ . ale#Escape('xxxinvalid') . ' mod edit -fmt %t' - \ }, - \ ale#fixers#gomod#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_goofle_java_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_goofle_java_format_fixer_callback.vader deleted file mode 100644 index 4c28b330..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_goofle_java_format_fixer_callback.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - Save g:ale_java_google_java_format_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_java_google_java_format_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The google-java-format callback should return 0 when the executable isn't executable): - AssertEqual - \ 0, - \ ale#fixers#google_java_format#Fix(bufnr('')) - -Execute(The google-java-format callback should run the command when the executable test passes): - let g:ale_java_google_java_format_executable = has('win32') ? 'cmd' : 'echo' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(ale_java_google_java_format_executable) . ' --replace %t' - \ }, - \ ale#fixers#google_java_format#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_hackfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_hackfmt_fixer_callback.vader deleted file mode 100644 index d294c15e..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_hackfmt_fixer_callback.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - Save g:ale_hack_hackfmt_executable - Save g:ale_hack_hackfmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_hack_hackfmt_executable = 'xxxinvalid' - let g:ale_hack_hackfmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The hackfmt callback should return the correct default values): - call ale#test#SetFilename('../hack_files/testfile.hack') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -i %t', - \ }, - \ ale#fixers#hackfmt#Fix(bufnr('')) - -Execute(The hackfmt callback should include custom hackfmt options): - let g:ale_hack_hackfmt_options = "--some-option" - call ale#test#SetFilename('../hack_files/testfile.hack') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -i --some-option %t', - \ }, - \ ale#fixers#hackfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_hfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_hfmt_fixer_callback.vader deleted file mode 100644 index 69cd03f8..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_hfmt_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_haskell_hfmt_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_haskell_hfmt_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The hfmt callback should return the correct default values): - call ale#test#SetFilename('../haskell_files/testfile.hs') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -w' - \ . ' %t', - \ }, - \ ale#fixers#hfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_hindent_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_hindent_fixer_callback.vader deleted file mode 100644 index 2e5a8b9f..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_hindent_fixer_callback.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The hindent callback should return the correct default values): - call ale#test#SetFilename('../haskell_files/testfile.hs') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('hindent') - \ . ' %t', - \ }, - \ ale#fixers#hindent#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_hlint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_hlint_fixer_callback.vader deleted file mode 100644 index 08f08fae..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_hlint_fixer_callback.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The hlint callback should return the correct default values): - call ale#test#SetFilename('../haskell_files/testfile.hs') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('hlint') - \ . ' --refactor' - \ . ' --refactor-options="--inplace"' - \ . ' %t', - \ }, - \ ale#fixers#hlint#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_html_beautify_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_html_beautify_fixer_callback.vader deleted file mode 100644 index 3012c7f1..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_html_beautify_fixer_callback.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('html', 'html-beautify', 'beautify') - -After: - Restore - - call ale#assert#TearDownFixerTest() - -Execute(The html-beautify callback should return the correct default command): - AssertEqual - \ {'command': ale#Escape('html-beautify') . ' -'}, - \ ale#fixers#html_beautify#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_importjs_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_importjs_fixer_callback.vader deleted file mode 100644 index 727e6a16..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_importjs_fixer_callback.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - Save g:ale_javascript_importjs_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_javascript_importjs_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - call ale#test#SetFilename('../test-files/javascript/test.js') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The importjs callback should return 0 when the executable isn't executable): - AssertEqual - \ 0, - \ ale#fixers#importjs#Fix(bufnr('')) - -Execute(The importjs callback should run the command when the executable test passes): - let g:ale_javascript_importjs_executable = has('win32') ? 'cmd' : 'echo' - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#importjs#ProcessOutput', - \ 'command': ale#Escape(g:ale_javascript_importjs_executable) . ' fix %s' - \ }, - \ ale#fixers#importjs#Fix(bufnr('')) - -Execute(The ProcessOutput callback should return the expected output): - let g:testOutput = '{"messages":[],"fileContent":"one\ntwo","unresolvedImports":{}}' - - AssertEqual - \ ['one', 'two'], - \ ale#fixers#importjs#ProcessOutput(bufnr(''), g:testOutput) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_isort_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_isort_fixer_callback.vader deleted file mode 100644 index 8b665d6b..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_isort_fixer_callback.vader +++ /dev/null @@ -1,70 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('python', 'isort') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - call ale#assert#TearDownFixerTest() - - unlet! g:dir - unlet! b:bin_dir - -Execute(The isort callback should return the correct default values): - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - - " --filename option exists only after 5.7.0 - GivenCommandOutput ['VERSION 5.7.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/isort')) . ' --filename %s' . ' -', - \ } - -Execute(The isort callback should respect custom options): - let g:ale_python_isort_options = '--multi-line=3 --trailing-comma' - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - - " --filename option exists only after 5.7.0 - GivenCommandOutput ['VERSION 5.7.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/isort')) - \ . ' --filename %s' . ' --multi-line=3 --trailing-comma -', - \ } - -Execute(Pipenv is detected when python_isort_auto_pipenv is set): - let g:ale_python_isort_auto_pipenv = 1 - - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - GivenCommandOutput ['VERSION 5.7.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape('pipenv') . ' run isort' . ' --filename %s' . ' -' - \ } - -Execute(Poetry is detected when python_isort_auto_poetry is set): - let g:ale_python_isort_auto_poetry = 1 - - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - GivenCommandOutput ['VERSION 5.7.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape('poetry') . ' run isort' . ' --filename %s' . ' -' - \ } - -Execute(The isort callback should not use --filename for older versions): - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - - " --filename option exists only after 5.7.0 - GivenCommandOutput ['VERSION 5.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/isort')) . ' -', - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_jq_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_jq_fixer_callback.vader deleted file mode 100644 index 74580d3b..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_jq_fixer_callback.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - Save g:ale_json_jq_executable - Save g:ale_json_jq_options - Save g:ale_json_jq_filters - -After: - Restore - -Execute(The jq fixer should use the options you set): - let g:ale_json_jq_executable = 'foo' - let g:ale_json_jq_options = '--bar' - let g:ale_json_jq_filters = '.baz' - - AssertEqual - \ {'command': ale#Escape('foo') . ' .baz --bar'}, - \ ale#fixers#jq#Fix(bufnr('')) - -Execute(The jq fixer should return 0 when there are no filters): - let g:ale_json_jq_executable = 'jq' - let g:ale_json_jq_options = '' - - let g:ale_json_jq_filters = '' - - AssertEqual - \ 0, - \ ale#fixers#jq#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_jsonnetfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_jsonnetfmt_fixer_callback.vader deleted file mode 100644 index 204d6583..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_jsonnetfmt_fixer_callback.vader +++ /dev/null @@ -1,38 +0,0 @@ -Before: - Save g:ale_jsonnet_jsonnetfmt_executable - Save g:ale_jsonnet_jsonnetfmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_jsonnet_jsonnetfmt_executable = 'xxxinvalid' - let g:ale_jsonnet_jsonnetfmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - call ale#assert#SetUpFixerTest('jsonnet', 'jsonnetfmt') - -After: - call ale#test#RestoreDirectory() - call ale#assert#TearDownFixerTest() - -Execute(The jsonnetfmt callback should return the correct default values): - call ale#test#SetFilename('../jsonnet_files/testfile.jsonnet') - - AssertFixer { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_jsonnet_jsonnetfmt_executable) - \ . ' -i' - \ . ' %t', - \} - -Execute(The jsonnetfmt callback should include custom options): - let g:ale_jsonnet_jsonnetfmt_options = '--pad-arrays' - - call ale#test#SetFilename('../jsonnet_files/testfile.jsonnet') - - AssertFixer { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_jsonnet_jsonnetfmt_executable) - \ . ' -i' - \ . ' ' . g:ale_jsonnet_jsonnetfmt_options - \ . ' %t', - \} - diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_ktlint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_ktlint_fixer_callback.vader deleted file mode 100644 index cfe39205..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_ktlint_fixer_callback.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - Save g:ale_kotlin_ktlint_executable - Save g:ale_kotlin_ktlint_options - Save g:ale_kotlin_ktlint_rulesets - - " Use an invalid global executable, so we don't match it. - let g:ale_kotlin_ktlint_executable = 'xxxinvalid' - let g:ale_kotlin_ktlint_options = '' - let g:ale_kotlin_ktlint_rulesets = [] - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The ktlint callback should return the correct default values): - call ale#test#SetFilename('../test-files/kotlin/testfile.kt') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' --stdin' - \ . ' --format', - \ }, - \ ale#fixers#ktlint#Fix(bufnr('')) - -Execute(The ktlint callback should include custom ktlint options): - let g:ale_kotlin_ktlint_options = "--android" - let g:ale_kotlin_ktlint_rulesets = ['/path/to/custom/ruleset.jar'] - call ale#test#SetFilename('../test-files/kotlin/testfile.kt') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_kotlin_ktlint_options - \ . ' --ruleset /path/to/custom/ruleset.jar' - \ . ' --stdin' - \ . ' --format', - \ }, - \ ale#fixers#ktlint#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_latexindent_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_latexindent_fixer_callback.vader deleted file mode 100644 index bd4ac69a..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_latexindent_fixer_callback.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - Save g:ale_tex_latexindent_executable - Save g:ale_tex_latexindent_options - - " Use an invalid global executable, so we don't match it. - let g:ale_tex_latexindent_executable = 'xxxinvalid' - let g:ale_tex_latexindent_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The latexindent callback should return the correct default values): - call ale#test#SetFilename('../test-files/tex/testfile.tex') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' -l' - \ }, - \ ale#fixers#latexindent#Fix(bufnr('')) - -Execute(The latexindent callback should include custom gofmt options): - let g:ale_tex_latexindent_options = "-l '~/.indentconfig.yaml'" - call ale#test#SetFilename('../test-files/tex/testfile.tex') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' -l' - \ . ' ' . g:ale_tex_latexindent_options - \ }, - \ ale#fixers#latexindent#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_lua_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_lua_format_fixer_callback.vader deleted file mode 100644 index 29cafde6..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_lua_format_fixer_callback.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - Save g:ale_lua_lua_format_executable - Save g:ale_lua_lua_format_options - - " Use an invalid global executable, so we don't match it. - let g:ale_lua_lua_format_executable = 'xxxinvalid' - let g:ale_lua_lua_format_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The lua_format callback should return the correct default values): - call ale#test#SetFilename('../test-files/lua/testfile.lua') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' -i', - \ }, - \ ale#fixers#lua_format#Fix(bufnr('')) - -Execute(The lua_format callback should include custom lua_format options): - let g:ale_lua_lua_format_options = "--no-chop-down-table" - call ale#test#SetFilename('../test-files/lua/testfile.lua') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_lua_lua_format_options - \ . ' -i', - \ }, - \ ale#fixers#lua_format#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_luafmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_luafmt_fixer_callback.vader deleted file mode 100644 index ef69f297..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_luafmt_fixer_callback.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - Save g:ale_lua_luafmt_executable - Save g:ale_lua_luafmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_lua_luafmt_executable = 'xxxinvalid' - let g:ale_lua_luafmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The luafmt callback should return the correct default values): - call ale#test#SetFilename('../test-files/lua/testfile.lua') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' --stdin', - \ }, - \ ale#fixers#luafmt#Fix(bufnr('')) - -Execute(The luafmt callback should include custom luafmt options): - let g:ale_lua_luafmt_options = "--skip-children" - call ale#test#SetFilename('../test-files/lua/testfile.lua') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_lua_luafmt_options - \ . ' --stdin', - \ }, - \ ale#fixers#luafmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_mix_format_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_mix_format_fixer_callback.vader deleted file mode 100644 index cd492e81..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_mix_format_fixer_callback.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - Save g:ale_elixir_mix_executable - Save g:ale_elixir_mix_format_options - - let g:ale_elixir_mix_executable = 'xxxinvalid' - let g:ale_elixir_mix_format_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The mix_format callback should return the correct default values): - call ale#test#SetFilename('../test-files/elixir/testfile.ex') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' format %t', - \ }, - \ ale#fixers#mix_format#Fix(bufnr('')) - -Execute(The mix_format callback should include the correct format options): - let g:ale_elixir_mix_format_options = 'invalid_options' - call ale#test#SetFilename('../test-files/elixir/testfile.ex') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' format invalid_options %t', - \ }, - \ ale#fixers#mix_format#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_nimpretty_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_nimpretty_fixer_callback.vader deleted file mode 100644 index a26f649a..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_nimpretty_fixer_callback.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('nim', 'nimpretty') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The nimpretty callback should return the correct default values): - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('nimpretty') . ' %t --maxLineLen:80' - \ }, - \ ale#fixers#nimpretty#Fix(bufnr('')) - -Execute(The nimpretty callback should include any additional options): - let g:ale_nim_nimpretty_options = '--some-option' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('nimpretty') . ' %t --some-option' - \ }, - \ ale#fixers#nimpretty#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_nixfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_nixfmt_fixer_callback.vader deleted file mode 100644 index 880ac83e..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_nixfmt_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_nix_nixfmt_executable - Save g:ale_nix_nixfmt_options - -After: - Restore - -Execute(The nixfmt callback should return the correct default values): - AssertEqual - \ { - \ 'command': ale#Escape('nixfmt') - \ }, - \ ale#fixers#nixfmt#Fix(bufnr('')) - -Execute(The nixfmt executable and options should be configurable): - let g:ale_nix_nixfmt_executable = '/path/to/nixfmt' - let g:ale_nix_nixfmt_options = '--help' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/nixfmt') - \ . ' --help', - \ }, - \ ale#fixers#nixfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_nixpkgsfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_nixpkgsfmt_fixer_callback.vader deleted file mode 100644 index 0065f77b..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_nixpkgsfmt_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_nix_nixpkgsfmt_executable - Save g:ale_nix_nixpkgsfmt_options - -After: - Restore - -Execute(The nixpkgs-fmt callback should return the correct default values): - AssertEqual - \ { - \ 'command': ale#Escape('nixpkgs-fmt') - \ }, - \ ale#fixers#nixpkgsfmt#Fix(bufnr('')) - -Execute(The nixpkgs-fmt executable and options should be configurable): - let g:ale_nix_nixpkgsfmt_executable = '/path/to/nixpkgs-fmt' - let g:ale_nix_nixpkgsfmt_options = '-h' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/nixpkgs-fmt') - \ . ' -h', - \ }, - \ ale#fixers#nixpkgsfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_ocamlformat_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_ocamlformat_fixer_callback.vader deleted file mode 100644 index 587fcf56..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_ocamlformat_fixer_callback.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - Save g:ale_ocaml_ocamlformat_executable - Save g:ale_ocaml_ocamlformat_options - - " Use an invalid global executable, so we don't match it. - let g:ale_ocaml_ocamlformat_executable = 'xxxinvalid' - let g:ale_ocaml_ocamlformat_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The ocamlformat callback should return the correct default values): - call ale#test#SetFilename('../test-files/ocaml/testfile.re') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' --name=%s -', - \ }, - \ ale#fixers#ocamlformat#Fix(bufnr('')) - -Execute(The ocamlformat callback should include custom ocamlformat options): - let g:ale_ocaml_ocamlformat_options = "-m 78" - call ale#test#SetFilename('../test-files/ocaml/testfile.re') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_ocaml_ocamlformat_options - \ . ' --name=%s -', - \ }, - \ ale#fixers#ocamlformat#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_ocp_indent_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_ocp_indent_fixer_callback.vader deleted file mode 100644 index fc336b2d..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_ocp_indent_fixer_callback.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - Save g:ale_ocaml_ocp_indent_executable - Save g:ale_ocaml_ocpindent_options - - " Use an invalid global executable - let g:ale_ocaml_ocp_indent_executable = 'xxxinvalid' - let g:ale_ocaml_ocp_indent_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The ocp_indent callback should return the correct default values): - call ale#test#SetFilename('../test-files/ocaml/ocp_inden_testfile.re') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ }, - \ ale#fixers#ocp_indent#Fix(bufnr('')) - -Execute(The ocp_indent callback should include custom ocp_indent options): - let g:ale_ocaml_ocp_indent_config = "base=4, type=4" - call ale#test#SetFilename('../test-files/ocaml/ocp_inden_testfile.re') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' --config=' . ale#Escape(g:ale_ocaml_ocp_indent_config) - \ }, - \ ale#fixers#ocp_indent#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_opa_fmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_opa_fmt_fixer_callback.vader deleted file mode 100644 index 3b112b2e..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_opa_fmt_fixer_callback.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - Save g:ale_opa_fmt_executable - Save g:ale_opa_fmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_opa_fmt_executable = 'xxxinvalid' - let g:ale_opa_fmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The opa fmt callback should return the correct default values): - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' fmt', - \ }, - \ ale#fixers#opafmt#Fix(bufnr('')) - -Execute(The opa fmt callback should include custom options): - let g:ale_opa_fmt_options = "--list" - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' fmt' - \ . ' ' . g:ale_opa_fmt_options - \ }, - \ ale#fixers#opafmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_ormolu_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_ormolu_fixer_callback.vader deleted file mode 100644 index 8df3fca9..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_ormolu_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_haskell_ormolu_executable - Save g:ale_haskell_ormolu_options - -After: - Restore - -Execute(The ormolu callback should return the correct default values): - AssertEqual - \ { - \ 'command': ale#Escape('ormolu') - \ }, - \ ale#fixers#ormolu#Fix(bufnr('')) - -Execute(The ormolu executable and options should be configurable): - let g:ale_nix_nixpkgsfmt_executable = '/path/to/ormolu' - let g:ale_nix_nixpkgsfmt_options = '-h' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/ormolu') - \ . ' -h', - \ }, - \ ale#fixers#nixpkgsfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_packer_fmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_packer_fmt_fixer_callback.vader deleted file mode 100644 index 2eb07ed4..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_packer_fmt_fixer_callback.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - Save g:ale_packer_fmt_executable - Save g:ale_packer_fmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_packer_fmt_executable = 'xxxinvalid' - let g:ale_packer_fmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The packer fmt callback should return the correct default values): - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' fmt -', - \ }, - \ ale#fixers#packer#Fix(bufnr('')) - -Execute(The packer fmt callback should include custom options): - let g:ale_packer_fmt_options = "-list=true" - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' fmt' - \ . ' ' . g:ale_packer_fmt_options - \ . ' -', - \ }, - \ ale#fixers#packer#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_pandoc_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_pandoc_fixer_callback.vader deleted file mode 100644 index a364ee56..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_pandoc_fixer_callback.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - Save g:ale_markdown_pandoc_executable - Save g:ale_markdown_pandoc_options - -After: - Restore - -Execute(The pandoc callback should return 'pandoc' as default command): - setlocal noexpandtab - Assert - \ ale#fixers#pandoc#Fix(bufnr('')).command =~# '^' . ale#Escape('pandoc'), - \ "Default command name is expected to be 'pandoc'" - -Execute(The pandoc executable and options should be configurable): - let g:ale_markdown_pandoc_executable = 'foobar' - let g:ale_markdown_pandoc_options = '--some-option' - - AssertEqual - \ { - \ 'command': ale#Escape('foobar') - \ . ' --some-option', - \ }, - \ ale#fixers#pandoc#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_perltidy_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_perltidy_fixer_callback.vader deleted file mode 100644 index c7430bfa..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_perltidy_fixer_callback.vader +++ /dev/null @@ -1,40 +0,0 @@ -Before: - Save g:ale_perl_perltidy_executable - Save g:ale_perl_perltidy_options - - " Use an invalid global executable, so we don't match it. - let g:ale_perl_perltidy_executable = 'xxxinvalid' - let g:ale_perl_perltidy_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The perltidy callback should return the correct default values): - call ale#test#SetFilename('../pl_files/testfile.pl') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -b' - \ . ' %t', - \ }, - \ ale#fixers#perltidy#Fix(bufnr('')) - -Execute(The perltidy callback should include custom perltidy options): - let g:ale_perl_perltidy_options = "-r '(a) -> a'" - call ale#test#SetFilename('../pl_files/testfile.pl') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' -b' - \ . ' ' . g:ale_perl_perltidy_options - \ . ' %t', - \ }, - \ ale#fixers#perltidy#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_pgformatter_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_pgformatter_fixer_callback.vader deleted file mode 100644 index 5baa6f6f..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_pgformatter_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_sql_pgformatter_executable - Save g:ale_sql_pgformatter_options - -After: - Restore - -Execute(The pgFormatter callback should return the correct default values): - AssertEqual - \ { - \ 'command': ale#Escape('pg_format') - \ }, - \ ale#fixers#pgformatter#Fix(bufnr('')) - -Execute(The pgFormatter executable and options should be configurable): - let g:ale_sql_pgformatter_executable = '/path/to/pg_format' - let g:ale_sql_pgformatter_options = '-n' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/pg_format') - \ . ' -n', - \ }, - \ ale#fixers#pgformatter#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_php_cs_fixer.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_php_cs_fixer.vader deleted file mode 100644 index eb4d78f8..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_php_cs_fixer.vader +++ /dev/null @@ -1,62 +0,0 @@ -Before: - Save g:ale_php_cs_fixer_executable - Save g:ale_php_cs_fixer_options - let g:ale_php_cs_fixer_executable = 'php-cs-fixer' - let g:ale_php_cs_fixer_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - - -Execute(project with php-cs-fixer should use local by default): - call ale#test#SetFilename('../test-files/php/project-with-php-cs-fixer/test.php') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/php/project-with-php-cs-fixer/vendor/bin/php-cs-fixer'), - \ ale#fixers#php_cs_fixer#GetExecutable(bufnr('')) - -Execute(use-global should override local detection): - let g:ale_php_cs_fixer_use_global = 1 - call ale#test#SetFilename('../test-files/php/project-with-php-cs-fixer/test.php') - - AssertEqual - \ 'php-cs-fixer', - \ ale#fixers#php_cs_fixer#GetExecutable(bufnr('')) - -Execute(project without php-cs-fixer should use global): - call ale#test#SetFilename('../test-files/php/project-without-php-cs-fixer/test.php') - - AssertEqual - \ 'php-cs-fixer', - \ ale#fixers#php_cs_fixer#GetExecutable(bufnr('')) - - - - -Execute(The php-cs-fixer callback should return the correct default values): - call ale#test#SetFilename('../test-files/php/project-without-php-cs-fixer/foo/test.php') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('php-cs-fixer') - \ . ' ' . g:ale_php_cs_fixer_options - \ . ' fix %t' - \ }, - \ ale#fixers#php_cs_fixer#Fix(bufnr('')) - -Execute(The php-cs-fixer callback should include custom php-cs-fixer options): - let g:ale_php_cs_fixer_options = '--config="$HOME/.php_cs"' - call ale#test#SetFilename('../test-files/php/project-without-php-cs-fixer/test.php') - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_php_cs_fixer_executable) - \ . ' --config="$HOME/.php_cs" fix %t', - \ 'read_temporary_file': 1, - \ }, - \ ale#fixers#php_cs_fixer#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_phpcbf_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_phpcbf_fixer_callback.vader deleted file mode 100644 index 45229a1b..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_phpcbf_fixer_callback.vader +++ /dev/null @@ -1,117 +0,0 @@ -Before: - Save g:ale_php_phpcbf_executable - Save g:ale_php_phpcbf_standard - Save g:ale_php_phpcbf_use_global - - let g:ale_php_phpcbf_executable = 'phpcbf_test' - let g:ale_php_phpcbf_standard = '' - let g:ale_php_phpcbf_options = '' - let g:ale_php_phpcbf_use_global = 0 - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(project with phpcbf should use local by default): - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/php/project-with-phpcbf/vendor/bin/phpcbf'), - \ ale#fixers#phpcbf#GetExecutable(bufnr('')) - -Execute(use-global should override local detection): - let g:ale_php_phpcbf_use_global = 1 - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ 'phpcbf_test', - \ ale#fixers#phpcbf#GetExecutable(bufnr('')) - -Execute(project without phpcbf should use global): - call ale#test#SetFilename('../test-files/php/project-without-phpcbf/foo/test.php') - - AssertEqual - \ 'phpcbf_test', - \ ale#fixers#phpcbf#GetExecutable(bufnr('')) - -Execute(The phpcbf callback should return the correct default values): - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/php/project-with-phpcbf/vendor/bin/phpcbf')) . ' --stdin-path=%s -' }, - \ ale#fixers#phpcbf#Fix(bufnr('')) - -Execute(The phpcbf callback should include the phpcbf_standard option): - let g:ale_php_phpcbf_standard = 'phpcbf_ruleset.xml' - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/php/project-with-phpcbf/vendor/bin/phpcbf')) . ' --stdin-path=%s ' . '--standard=phpcbf_ruleset.xml' . ' -'}, - \ ale#fixers#phpcbf#Fix(bufnr('')) - -Execute(User provided options should be used): - let g:ale_php_phpcbf_options = '--my-user-provided-option my-value' - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/php/project-with-phpcbf/vendor/bin/phpcbf')) . ' --stdin-path=%s ' . ale#Pad('--my-user-provided-option my-value') . ' -'}, - \ ale#fixers#phpcbf#Fix(bufnr('')) - - -Before: - Save g:ale_php_phpcbf_executable - Save g:ale_php_phpcbf_standard - Save g:ale_php_phpcbf_use_global - - let g:ale_php_phpcbf_executable = 'phpcbf_test' - let g:ale_php_phpcbf_standard = '' - let g:ale_php_phpcbf_options = '' - let g:ale_php_phpcbf_use_global = 0 - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(project with phpcbf should use local by default): - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/php/project-with-phpcbf/vendor/bin/phpcbf'), - \ ale#fixers#phpcbf#GetExecutable(bufnr('')) - -Execute(use-global should override local detection): - let g:ale_php_phpcbf_use_global = 1 - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ 'phpcbf_test', - \ ale#fixers#phpcbf#GetExecutable(bufnr('')) - -Execute(project without phpcbf should use global): - call ale#test#SetFilename('../test-files/php/project-without-phpcbf/foo/test.php') - - AssertEqual - \ 'phpcbf_test', - \ ale#fixers#phpcbf#GetExecutable(bufnr('')) - -Execute(The phpcbf callback should return the correct default values): - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/php/project-with-phpcbf/vendor/bin/phpcbf')) . ' --stdin-path=%s -' }, - \ ale#fixers#phpcbf#Fix(bufnr('')) - -Execute(The phpcbf callback should include the phpcbf_standard option): - let g:ale_php_phpcbf_standard = 'phpcbf_ruleset.xml' - call ale#test#SetFilename('../test-files/php/project-with-phpcbf/foo/test.php') - - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/php/project-with-phpcbf/vendor/bin/phpcbf')) . ' --stdin-path=%s ' . '--standard=phpcbf_ruleset.xml' . ' -'}, - \ ale#fixers#phpcbf#Fix(bufnr('')) - diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_pint_fixer.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_pint_fixer.vader deleted file mode 100644 index 5ea28b33..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_pint_fixer.vader +++ /dev/null @@ -1,62 +0,0 @@ -Before: - Save g:ale_php_pint_executable - Save g:ale_php_pint_options - let g:ale_php_pint_executable = 'pint' - let g:ale_php_pint_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - - -Execute(project with pint should use local by default): - call ale#test#SetFilename('../test-files/php/project-with-pint/test.php') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/php/project-with-pint/vendor/bin/pint'), - \ ale#fixers#pint#GetExecutable(bufnr('')) - -Execute(use-global should override local detection): - let g:ale_php_pint_use_global = 1 - call ale#test#SetFilename('../test-files/php/project-with-pint/test.php') - - AssertEqual - \ 'pint', - \ ale#fixers#pint#GetExecutable(bufnr('')) - -Execute(project without pint should use global): - call ale#test#SetFilename('../test-files/php/project-without-pint/test.php') - - AssertEqual - \ 'pint', - \ ale#fixers#pint#GetExecutable(bufnr('')) - - - - -Execute(The pint callback should return the correct default values): - call ale#test#SetFilename('../test-files/php/project-without-pint/foo/test.php') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('pint') - \ . ' ' . g:ale_php_pint_options - \ . ' %t' - \ }, - \ ale#fixers#pint#Fix(bufnr('')) - -Execute(The pint callback should include custom pint options): - let g:ale_php_pint_options = '--test' - call ale#test#SetFilename('../test-files/php/project-without-pint/test.php') - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_php_pint_executable) - \ . ' --test %t', - \ 'read_temporary_file': 1, - \ }, - \ ale#fixers#pint#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_eslint_fixer.callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_eslint_fixer.callback.vader deleted file mode 100644 index cfdd1c78..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_eslint_fixer.callback.vader +++ /dev/null @@ -1,97 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('javascript', 'prettier_eslint') - Save g:ale_command_wrapper - - let g:ale_command_wrapper = '' - -After: - call ale#assert#TearDownFixerTest() - -Execute(The default command should be correct): - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape('prettier-eslint') - \ . ' %t' - \ . ' --write' - \ } - -Execute(Additional options should be used when set): - let b:ale_javascript_prettier_eslint_options = '--foobar' - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape('prettier-eslint') - \ . ' %t' - \ . ' --foobar --write' - \ } - -Execute(--eslint-config-path should be set for 4.2.0 and up): - call ale#test#SetFilename('../test-files/eslint/react-app/foo/bar.js') - - GivenCommandOutput ['4.2.0'] - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape('prettier-eslint') - \ . ' %t' - \ . ' --eslint-config-path ' . ale#Escape(ale#test#GetFilename('../test-files/eslint/react-app/.eslintrc.js')) - \ . ' --write' - \ } - -Execute(--eslint-config-path shouldn't be used for older versions): - call ale#test#SetFilename('../test-files/eslint/react-app/foo/bar.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape('prettier-eslint') - \ . ' %t' - \ . ' --write' - \ } - -Execute(The version check should be correct): - AssertFixer [ - \ ale#Escape('prettier-eslint') . ' --version', - \ { - \ 'read_temporary_file': 1, - \ 'command': - \ ale#Escape('prettier-eslint') - \ . ' %t' - \ . ' --write' - \ } - \] - -Execute(The new --stdin-filepath option should be used when the version is new enough): - call ale#test#SetFilename('../test-files/eslint/react-app/foo/bar.js') - - GivenCommandOutput ['4.4.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape('prettier-eslint') - \ . ' --eslint-config-path ' . ale#Escape(ale#test#GetFilename('../test-files/eslint/react-app/.eslintrc.js')) - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(The version number should be cached): - GivenCommandOutput ['4.4.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape('prettier-eslint') - \ . ' --stdin-filepath %s --stdin', - \ } - - GivenCommandOutput [] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape('prettier-eslint') - \ . ' --stdin-filepath %s --stdin', - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_fixer_callback.vader deleted file mode 100644 index 8da13fcd..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_fixer_callback.vader +++ /dev/null @@ -1,337 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('javascript', 'prettier') - Save g:ale_command_wrapper - - let g:ale_command_wrapper = '' - -After: - call ale#assert#TearDownFixerTest() - -Execute(The prettier callback should return the correct default values): - call ale#test#SetFilename('../test-files/prettier/testfile.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' %t' - \ . ' --write', - \ } - -Execute(The --config option should not be set automatically): - let g:ale_javascript_prettier_use_local_config = 1 - call ale#test#SetFilename('../test-files/prettier/with_config/testfile.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' %t' - \ . ' --write', - \ } - -Execute(The prettier callback should include custom prettier options): - let g:ale_javascript_prettier_options = '--no-semi' - call ale#test#SetFilename('../test-files/prettier/with_config/testfile.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' %t' - \ . ' --no-semi' - \ . ' --write', - \ } - -Execute(The version check should be correct): - call ale#test#SetFilename('../test-files/prettier/testfile.js') - - AssertFixer [ - \ ale#Escape('prettier') . ' --version', - \ {'read_temporary_file': 1, 'command': ale#Escape('prettier') . ' %t --write'} - \] - -Execute(--stdin-filepath should be used when prettier is new enough): - let g:ale_javascript_prettier_options = '--no-semi' - call ale#test#SetFilename('../test-files/prettier/with_config/testfile.js') - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --no-semi' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(The version number should be cached): - call ale#test#SetFilename('../test-files/prettier/with_config/testfile.js') - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --stdin-filepath %s --stdin', - \ } - - GivenCommandOutput [] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser to `babylon` by default, < 1.16.0): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=javascript - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser babylon' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser to `babel` by default, >= 1.16.0): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=javascript - - GivenCommandOutput ['1.16.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser babel' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, TypeScript): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=typescript - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser typescript' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, CSS): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=css - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser css' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, LESS): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=less - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser less' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, SCSS): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=scss - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser scss' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, JSON): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=json - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser json' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, JSON5): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=json5 - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser json5' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, GraphQL): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=graphql - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser graphql' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, Markdown): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=markdown - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser markdown' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, Vue): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=vue - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser vue' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, YAML): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=yaml - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser yaml' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, HTML): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=html - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser html' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on filetype, Ruby): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=ruby - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser ruby' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser based on first filetype of multiple filetypes): - call ale#test#SetFilename('../test-files/prettier/testfile') - - set filetype=css.scss - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser css' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Should set --parser for experimental language, Handlebars): - call ale#test#SetFilename('../test-files/prettier/testfile.hbs') - - set filetype=html.handlebars - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --parser glimmer' - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(Changes to directory where .prettierignore is found): - call ale#test#SetFilename('../test-files/prettier/with_prettierignore/src/testfile.js') - - GivenCommandOutput ['1.6.0'] - AssertFixer - \ { - \ 'cwd': expand('%:p:h:h'), - \ 'command': ale#Escape(g:ale_javascript_prettier_executable) - \ . ' --stdin-filepath %s --stdin', - \ } - -Execute(The prettier_d post-processor should permit regular JavaScript content): - AssertEqual - \ [ - \ 'const x = ''Error: foo''', - \ 'const y = 3', - \ ], - \ ale#fixers#prettier#ProcessPrettierDOutput(bufnr(''), [ - \ 'const x = ''Error: foo''', - \ 'const y = 3', - \ ]) - -Execute(The prettier_d post-processor should handle error messages correctly): - AssertEqual - \ [], - \ ale#fixers#prettier#ProcessPrettierDOutput(bufnr(''), [ - \ 'SyntaxError: Unexpected token, expected "," (36:28)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_standard_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_standard_callback.vader deleted file mode 100644 index f5037ed6..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_prettier_standard_callback.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('javascript', 'prettier_standard') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The prettier callback should return the correct default values): - call ale#test#SetFilename('../test-files/prettier/testfile.js') - - AssertFixer - \ { - \ 'command': ale#Escape(g:ale_javascript_prettier_standard_executable) - \ . ' --stdin' - \ . ' --stdin-filepath=%s ', - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_protolint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_protolint_fixer_callback.vader deleted file mode 100644 index 5a6931d7..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_protolint_fixer_callback.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('proto', 'protolint') - call ale#test#SetFilename('test.proto') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The default command should be correct): - AssertFixer - \ { - \ 'command': ale#Escape('protolint') - \ . ' -fix' - \ . ' %t', - \ 'read_temporary_file': 1, - \ } - -Execute(The callback should include any additional options): - let b:ale_proto_protolint_executable = '/tmp/protolint' - let b:ale_proto_protolint_config = '/tmp/protolint.yaml' - - AssertFixer - \ { - \ 'command': ale#Escape('/tmp/protolint') - \ . ' -config_path=' . ale#Escape('/tmp/protolint.yaml') - \ . ' -fix' - \ . ' %t', - \ 'read_temporary_file': 1, - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_ptop_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_ptop_fixer_callback.vader deleted file mode 100644 index 7cf632e3..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_ptop_fixer_callback.vader +++ /dev/null @@ -1,38 +0,0 @@ -Before: - Save g:ale_pascal_ptop_executable - Save g:ale_pascal_ptop_options - - " Use an invalid global executable, so we don't match it. - let g:ale_pascal_ptop_executable = 'xxxinvalid' - let g:ale_pascal_ptop_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The ptop callback should return the correct default values): - call ale#test#SetFilename('../test-files/pascal/test.pas') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' %s %t', - \ }, - \ ale#fixers#ptop#Fix(bufnr('')) - -Execute(The ptop callback should include custom ptop options): - let g:ale_pascal_ptop_options = "-i 2" - call ale#test#SetFilename('../test-files/pascal/test.pas') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_pascal_ptop_options - \ . ' %s %t', - \ }, - \ ale#fixers#ptop#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_puppetlint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_puppetlint_fixer_callback.vader deleted file mode 100644 index 1a5a6cea..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_puppetlint_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_puppet_puppetlint_executable - Save g:ale_puppet_puppetlint_options - - " Use an invalid global executable, so we don't match it. - let g:ale_puppet_puppetlint_executable = 'xxxinvalid' - let g:ale_puppet_puppetlint_options = '--invalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The puppetlint callback should return the correct default values): - silent execute 'file ' . fnameescape(g:dir . '/../test-files/puppet/dummy.pp') - - AssertEqual - \ {'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_puppet_puppetlint_executable) - \ . ' ' . g:ale_puppet_puppetlint_options - \ . ' --fix %t' }, - \ ale#fixers#puppetlint#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_purs_tidy_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_purs_tidy_fixer_callback.vader deleted file mode 100644 index fdeb3f21..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_purs_tidy_fixer_callback.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - Save g:ale_purescript_tidy_executable - Save g:ale_purescript_tidy_options - - " Use an invalid global executable, so we don’t match it. - let g:ale_purescript_tidy_executable = 'odd-purs-tidy' - let g:ale_purescript_tidy_options = '--indent 3' - - call ale#assert#SetUpFixerTest('purescript', 'purs-tidy') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The purs-tidy callback should return the correct custom options): - AssertFixer - \ { - \ 'command': ale#Escape('odd-purs-tidy') - \ . ' format' - \ . ' --indent 3' - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_purty_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_purty_fixer_callback.vader deleted file mode 100644 index e83b8c18..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_purty_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_purescript_purty_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_purescript_purty_executable = 'my-special-purty' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The purty callback should return the correct options): - call ale#test#SetFilename('../purescript_files/testfile.purs') - - AssertEqual - \ { - \ 'command': ale#Escape('my-special-purty') - \ . ' --write' - \ . ' %t', - \ 'read_temporary_file': 1, - \ }, - \ ale#fixers#purty#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_pyflyby_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_pyflyby_fixer_callback.vader deleted file mode 100644 index d017572e..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_pyflyby_fixer_callback.vader +++ /dev/null @@ -1,38 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('python', 'pyflyby') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - call ale#assert#TearDownFixerTest() - - unlet! b:bin_dir - -Execute(The pyflyby callback should return the correct default values): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - AssertFixer - \ { - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/tidy-imports')), - \ } - -Execute(Pipenv is detected when python_pyflyby_auto_pipenv is set): - let g:ale_python_pyflyby_auto_pipenv = 1 - - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertFixer - \ { - \ 'command': ale#Escape('pipenv') . ' run tidy-imports' - \ } - -Execute(Poetry is detected when python_pyflyby_auto_poetry is set): - let g:ale_python_pyflyby_auto_poetry = 1 - - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - GivenCommandOutput ['VERSION 5.7.0'] - AssertFixer - \ { - \ 'command': ale#Escape('poetry') . ' run tidy-imports' - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_python_add_blank_lines_fixer.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_python_add_blank_lines_fixer.vader deleted file mode 100644 index 7d042c8a..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_python_add_blank_lines_fixer.vader +++ /dev/null @@ -1,167 +0,0 @@ -Before: - Save g:ale_fixers - -After: - Restore - -Given python(Some Python without blank lines): - def foo(): - """ This is a simple test docstring """ - return 1 - - - def bar(): - '''This is another simple test docstring''' - return 1 - return 4 - - - def bar(): - """ - This is a multi-line - docstring - """ - - if x: - pass - for l in x: - pass - for l in x: - pass - break - continue - elif x: - pass - while x: - pass - while x: - pass - else: - pass - if x: - pass - elif x: - pass - else: - pass - -Execute(Blank lines should be added appropriately): - let g:ale_fixers = {'python': ['add_blank_lines_for_python_control_statements']} - ALEFix - -Expect python(Newlines should be added): - def foo(): - """ This is a simple test docstring """ - - return 1 - - - def bar(): - '''This is another simple test docstring''' - - return 1 - - return 4 - - - def bar(): - """ - This is a multi-line - docstring - """ - - if x: - pass - - for l in x: - pass - - for l in x: - pass - - break - - continue - elif x: - pass - - while x: - pass - - while x: - pass - else: - pass - - if x: - pass - elif x: - pass - else: - pass - -Given python(A file with a main block): - import os - - - def main(): - print('hello') - - - if __name__ == '__main__': - main() - -Execute(Fix the file): - let g:ale_fixers = {'python': ['add_blank_lines_for_python_control_statements']} - ALEFix - -Expect python(extra newlines shouldn't be added to the main block): - import os - - - def main(): - print('hello') - - - if __name__ == '__main__': - main() - - -Given python(A file with variables/docstring that start with a control statement): - def some(): - """ - This is a docstring that contains an - break control statement and also contains a - return something funny. - """ - - continue_some_var = True - forward_something = False - - if ( - continue_some_var and - forwarded_something - ): - return True - - -Execute(Fix the file): - let g:ale_fixers = {'python': ['add_blank_lines_for_python_control_statements']} - ALEFix - -Expect python(Extra new lines are not added to the file): - def some(): - """ - This is a docstring that contains an - break control statement and also contains a - return something funny. - """ - - continue_some_var = True - forward_something = False - - if ( - continue_some_var and - forwarded_something - ): - return True diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_qmlfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_qmlfmt_fixer_callback.vader deleted file mode 100644 index e216f2e1..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_qmlfmt_fixer_callback.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - Save g:ale_qml_qmlfmt_executable - -After: - Restore - -Execute(The qmlfmt fixer should use the options you set): - let g:ale_qml_qmlfmt_executable = 'foo-exe' - - AssertEqual - \ {'command': ale#Escape('foo-exe')}, - \ ale#fixers#qmlfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_refmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_refmt_fixer_callback.vader deleted file mode 100644 index 01b56bee..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_refmt_fixer_callback.vader +++ /dev/null @@ -1,41 +0,0 @@ -Before: - Save g:ale_reasonml_refmt_executable - Save g:ale_reasonml_refmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_reasonml_refmt_executable = 'xxxinvalid' - let g:ale_reasonml_refmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The refmt callback should return the correct default values): - call ale#test#SetFilename('../test-files/reasonml/testfile.re') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' --in-place' - \ . ' %t', - \ }, - \ ale#fixers#refmt#Fix(bufnr('')) - -Execute(The refmt callback should include custom refmt options): - let g:ale_reasonml_refmt_options = "-w 80" - call ale#test#SetFilename('../test-files/reasonml/testfile.re') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_reasonml_refmt_options - \ . ' --in-place' - \ . ' %t', - \ }, - \ ale#fixers#refmt#Fix(bufnr('')) - diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_remark_lint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_remark_lint_fixer_callback.vader deleted file mode 100644 index 5e2e342d..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_remark_lint_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_markdown_remark_lint_executable - Save g:ale_markdown_remark_lint_options - -After: - Restore - -Execute(The remark callback should return the correct default values): - AssertEqual - \ { - \ 'command': ale#Escape('remark') - \ }, - \ ale#fixers#remark_lint#Fix(bufnr('')) - -Execute(The remark executable and options should be configurable): - let g:ale_markdown_remark_lint_executable = '/path/to/remark' - let g:ale_markdown_remark_lint_options = '-h' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/remark') - \ . ' -h', - \ }, - \ ale#fixers#remark_lint#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_reorder_python_imports_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_reorder_python_imports_fixer_callback.vader deleted file mode 100644 index ead2da77..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_reorder_python_imports_fixer_callback.vader +++ /dev/null @@ -1,46 +0,0 @@ -Before: - Save g:ale_python_reorder_python_imports_executable - Save g:ale_python_reorder_python_imports_options - - " Use an invalid global executable, so we don't match it. - let g:ale_python_reorder_python_imports_executable = 'xxxinvalid' - let g:ale_python_reorder_python_imports_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - Restore - - unlet! b:bin_dir - - call ale#test#RestoreDirectory() - -Execute(The reorder_python_imports callback should return the correct default values): - AssertEqual - \ 0, - \ ale#fixers#reorder_python_imports#Fix(bufnr('')) - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ { - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' - \ . b:bin_dir . '/reorder-python-imports')) . ' -', - \ }, - \ ale#fixers#reorder_python_imports#Fix(bufnr('')) - -Execute(The reorder_python_imports callback should respect custom options): - let g:ale_python_reorder_python_imports_options = '--py3-plus' - - AssertEqual - \ 0, - \ ale#fixers#reorder_python_imports#Fix(bufnr('')) - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.py') - AssertEqual - \ { - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' - \ . b:bin_dir . '/reorder-python-imports')) . ' --py3-plus -', - \ }, - \ ale#fixers#reorder_python_imports#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_rubocop_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_rubocop_fixer_callback.vader deleted file mode 100644 index f7b0eb60..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_rubocop_fixer_callback.vader +++ /dev/null @@ -1,89 +0,0 @@ -Before: - Save g:ale_ruby_rubocop_executable - Save g:ale_ruby_rubocop_options - - " Use an invalid global executable, so we don't match it. - let g:ale_ruby_rubocop_executable = 'xxxinvalid' - let g:ale_ruby_rubocop_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The rubocop callback should return the correct default values): - call ale#test#SetFilename('../test-files/ruby/dummy.rb') - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#rubocop#PostProcess', - \ 'command': ale#Escape(g:ale_ruby_rubocop_executable) - \ . ' --auto-correct --force-exclusion --stdin %s', - \ }, - \ ale#fixers#rubocop#Fix(bufnr('')) - -Execute(The rubocop callback should include custom rubocop options): - let g:ale_ruby_rubocop_options = '--except Lint/Debugger' - call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb') - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#rubocop#PostProcess', - \ 'command': ale#Escape(g:ale_ruby_rubocop_executable) - \ . ' --except Lint/Debugger' - \ . ' --auto-correct --force-exclusion --stdin %s', - \ }, - \ ale#fixers#rubocop#Fix(bufnr('')) - -Execute(The rubocop callback should use auto-correct-all option when set): - let g:ale_ruby_rubocop_auto_correct_all = 1 - call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb') - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#rubocop#PostProcess', - \ 'command': ale#Escape(g:ale_ruby_rubocop_executable) - \ . ' --auto-correct-all --force-exclusion --stdin %s' - \ }, - \ ale#fixers#rubocop#Fix(bufnr('')) - -Execute(The rubocop post-processor should remove diagnostics content): - AssertEqual - \ [ - \ 'class MyModel < ApplicationRecord', - \ ' # rubocop:disable Rails/InverseOf', - \ ' has_one :something', - \ ' # rubocop:enable Rails/InverseOf', - \ 'end', - \ '', - \ 'array = [1, 2, 3,', - \ ' 4, 5, 6]', - \ 'array = [''run'',', - \ ' ''forrest'',', - \ ' ''run'']', - \ ], - \ ale#fixers#rubocop#PostProcess(bufnr(''), [ - \ 'Inspecting 1 file', - \ 'C', - \ '', - \ 'Offenses:', - \ 'app/models/my_model.rb:8:3: C: [Corrected] Layout/ArrayAlignment: ', - \ '4, 5, 6]', - \ '^', - \ '', - \ '1 file inspected, 3 offenses detected, 3 offenses corrected', - \ '====================', - \ 'class MyModel < ApplicationRecord', - \ ' # rubocop:disable Rails/InverseOf', - \ ' has_one :something', - \ ' # rubocop:enable Rails/InverseOf', - \ 'end', - \ '', - \ 'array = [1, 2, 3,', - \ ' 4, 5, 6]', - \ 'array = [''run'',', - \ ' ''forrest'',', - \ ' ''run'']', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_rufo_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_rufo_fixer_callback.vader deleted file mode 100644 index 3d539f7a..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_rufo_fixer_callback.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - Save g:ale_ruby_rufo_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_ruby_rufo_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The rufo command should contain `bundle exec` when executable is `bundle`): - let g:ale_ruby_rufo_executable = 'bundle' - call ale#test#SetFilename('../test-files/ruby/dummy.rb') - - AssertEqual - \ ale#Escape('bundle') . ' exec rufo %t', - \ ale#fixers#rufo#GetCommand(bufnr('')) - -Execute(The rufo callback should return the correct default values): - call ale#test#SetFilename('../test-files/ruby/dummy.rb') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') . ' %t' - \ }, - \ ale#fixers#rufo#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_rustfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_rustfmt_fixer_callback.vader deleted file mode 100644 index 98761c94..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_rustfmt_fixer_callback.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('rust', 'rustfmt') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The rustfmt callback should return the correct default values): - call ale#test#SetFilename('../test-files/rust/testfile.rs') - - AssertFixer {'command': ale#Escape('rustfmt')} - -Execute(The rustfmt callback should include custom rustfmt options): - let g:ale_rust_rustfmt_options = "--skip-children" - call ale#test#SetFilename('../test-files/rust/testfile.rs') - - AssertFixer {'command': ale#Escape('rustfmt') . ' ' . g:ale_rust_rustfmt_options} diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_scalafmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_scalafmt_fixer_callback.vader deleted file mode 100644 index 2b8dc3eb..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_scalafmt_fixer_callback.vader +++ /dev/null @@ -1,66 +0,0 @@ -Before: - Save g:ale_scala_scalafmt_executable - Save g:ale_scala_scalafmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_scala_scalafmt_executable = 'xxxinvalid' - let g:ale_scala_scalafmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The scalafmt callback should return the correct default values): - call ale#test#SetFilename('../test-files/scala/dummy.scala') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_scala_scalafmt_executable) - \ . ' %t', - \ }, - \ ale#fixers#scalafmt#Fix(bufnr('')) - -Execute(The scalafmt callback should use ng with scalafmt automatically): - let g:ale_scala_scalafmt_executable = 'ng' - call ale#test#SetFilename('../test-files/scala/dummy.scala') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('ng') - \ . ' scalafmt' - \ . ' %t', - \ }, - \ ale#fixers#scalafmt#Fix(bufnr('')) - -Execute(The scalafmt callback should include custom scalafmt options): - let g:ale_scala_scalafmt_options = '--diff' - call ale#test#SetFilename('../test-files/scala/dummy.scala') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_scala_scalafmt_executable) - \ . ' --diff' - \ . ' %t', - \ }, - \ ale#fixers#scalafmt#Fix(bufnr('')) - -Execute(The scalafmt callback should include custom scalafmt options and use ng with scalafmt): - let g:ale_scala_scalafmt_options = '--diff' - let g:ale_scala_scalafmt_executable = 'ng' - call ale#test#SetFilename('../test-files/scala/dummy.scala') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('ng') - \ . ' scalafmt' - \ . ' --diff' - \ . ' %t', - \ }, - \ ale#fixers#scalafmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_shfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_shfmt_fixer_callback.vader deleted file mode 100644 index 02fce526..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_shfmt_fixer_callback.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - Save g:ale_sh_shfmt_executable - Save g:ale_sh_shfmt_options - Save &l:expandtab - Save &l:shiftwidth - Save &l:tabstop - -After: - Restore - -Execute(The shfmt callback should return 'shfmt' as default command): - setlocal noexpandtab - Assert - \ ale#fixers#shfmt#Fix(bufnr('')).command =~# '^' . ale#Escape('shfmt'), - \ "Default command name is expected to be 'shfmt'" - -Execute(The shfmt executable and options should be configurable): - let g:ale_sh_shfmt_executable = 'foobar' - let g:ale_sh_shfmt_options = '--some-option' - - AssertEqual - \ { - \ 'command': ale#Escape('foobar') - \ . ' -filename=%s' - \ . ' --some-option', - \ }, - \ ale#fixers#shfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_sorbet_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_sorbet_fixer_callback.vader deleted file mode 100644 index 2694a3dc..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_sorbet_fixer_callback.vader +++ /dev/null @@ -1,38 +0,0 @@ -Before: - Save g:ale_ruby_sorbet_executable - Save g:ale_ruby_sorbet_options - - " Use an invalid global executable, so we don't match it. - let g:ale_ruby_sorbet_executable = 'xxxinvalid' - let g:ale_ruby_sorbet_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The sorbet callback should return the correct default values): - call ale#test#SetFilename('../test-files/ruby/dummy.rb') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_ruby_sorbet_executable) - \ . ' tc --autocorrect --file %t', - \ }, - \ ale#fixers#sorbet#Fix(bufnr('')) - -Execute(The sorbet callback should include custom sorbet options): - let g:ale_ruby_sorbet_options = '--enable-experimental-lsp-hover' - call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_ruby_sorbet_executable) - \ . ' tc --enable-experimental-lsp-hover' - \ . ' --autocorrect --file %t', - \ }, - \ ale#fixers#sorbet#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_sqlfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_sqlfmt_fixer_callback.vader deleted file mode 100644 index 3046edb3..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_sqlfmt_fixer_callback.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - Save g:ale_sql_sqlfmt_executable - Save g:ale_sql_sqlfmt_options - -After: - Restore - -Execute(The sqlfmt callback should return the correct default values): - AssertEqual - \ { - \ 'command': ale#Escape('sqlfmt') - \ . ' -w', - \ }, - \ ale#fixers#sqlfmt#Fix(bufnr('')) - -Execute(The sqlfmt executable and options should be configurable): - let g:ale_sql_sqlfmt_executable = '/path/to/sqlfmt' - let g:ale_sql_sqlfmt_options = '-u' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/sqlfmt') - \ . ' -w' - \ . ' -u', - \ }, - \ ale#fixers#sqlfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_sqlformat_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_sqlformat_fixer_callback.vader deleted file mode 100644 index 4bace089..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_sqlformat_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_sql_sqlformat_executable - Save g:ale_sql_sqlformat_options - -After: - Restore - -Execute(The sqlformat callback should return the correct default values): - AssertEqual - \ { - \ 'command': ale#Escape('sqlformat') . ' -' - \ }, - \ ale#fixers#sqlformat#Fix(bufnr('')) - -Execute(The sqlformat executable and options should be configurable): - let g:ale_sql_sqlformat_executable = '/path/to/sqlformat' - let g:ale_sql_sqlformat_options = '-a' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/sqlformat') - \ . ' -a -' - \ }, - \ ale#fixers#sqlformat#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_standard_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_standard_fixer_callback.vader deleted file mode 100644 index 9f5eb0e9..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_standard_fixer_callback.vader +++ /dev/null @@ -1,31 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/fixers') - - unlet! b:ale_javascript_standard_executable - unlet! b:ale_javascript_standard_options - -After: - call ale#test#RestoreDirectory() - -Execute(The executable path should be correct): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir/testfile.js') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/standard/bin/cmd.js')) - \ . ' --fix --stdin < %s > %t', - \ }, - \ ale#fixers#standard#Fix(bufnr('')) - -Execute(Custom options should be supported): - let b:ale_javascript_standard_use_global = 1 - let b:ale_javascript_standard_options = '--foo-bar' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('standard') . ' --foo-bar --fix --stdin < %s > %t', - \ }, - \ ale#fixers#standard#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_standardrb_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_standardrb_fixer_callback.vader deleted file mode 100644 index ff82b8f1..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_standardrb_fixer_callback.vader +++ /dev/null @@ -1,51 +0,0 @@ -Before: - Save g:ale_ruby_standardrb_executable - Save g:ale_ruby_standardrb_options - - " Use an invalid global executable, so we don't match it. - let g:ale_ruby_standardrb_executable = 'xxxinvalid' - let g:ale_ruby_standardrb_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The standardrb callback should return the correct default values): - call ale#test#SetFilename('../test-files/ruby/dummy.rb') - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#rubocop#PostProcess', - \ 'command': ale#Escape(g:ale_ruby_standardrb_executable) - \ . ' --fix --force-exclusion --stdin %s', - \ }, - \ ale#fixers#standardrb#Fix(bufnr('')) - -Execute(The standardrb callback should include configuration files): - call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb') - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#rubocop#PostProcess', - \ 'command': ale#Escape(g:ale_ruby_standardrb_executable) - \ . ' --config ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/ruby/with_config/.standard.yml')) - \ . ' --fix --force-exclusion --stdin %s', - \ }, - \ ale#fixers#standardrb#Fix(bufnr('')) - -Execute(The standardrb callback should include custom rubocop options): - let g:ale_ruby_standardrb_options = '--except Lint/Debugger' - call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb') - - AssertEqual - \ { - \ 'process_with': 'ale#fixers#rubocop#PostProcess', - \ 'command': ale#Escape(g:ale_ruby_standardrb_executable) - \ . ' --config ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/ruby/with_config/.standard.yml')) - \ . ' --except Lint/Debugger' - \ . ' --fix --force-exclusion --stdin %s', - \ }, - \ ale#fixers#standardrb#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_statix_fixer.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_statix_fixer.vader deleted file mode 100644 index c55365a6..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_statix_fixer.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('nix', 'statix') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The callback should return the correct default values): - AssertFixer { 'command': ale#Escape('statix') . ' fix --stdin' } - -Execute(The callback should include a custom runtime): - let g:ale_nix_statix_fix_executable = 'foo/bar' - - AssertFixer { 'command': ale#Escape('foo/bar') . ' fix --stdin' } - -Execute(The callback should include custom options): - let g:ale_nix_statix_fix_options = '--foobar' - - AssertFixer { 'command': ale#Escape('statix') . ' fix --stdin --foobar' } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_stylelint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_stylelint_fixer_callback.vader deleted file mode 100644 index ee7cfdd4..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_stylelint_fixer_callback.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - Save g:ale_stylelint_options - - let g:ale_stylelint_options = '' - - call ale#assert#SetUpFixerTest('css', 'stylelint') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The stylelint callback should return the correct default values): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir/testfile.css') - - AssertFixer - \ { - \ 'read_temporary_file': 0, - \ 'cwd': '%s:h', - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/stylelint/bin/stylelint.js')) - \ . ' --fix --stdin --stdin-filename %s', - \ } - -Execute(The stylelint callback should include custom stylelint options): - let g:ale_stylelint_options = '--cache' - call ale#test#SetFilename('../test-files/eslint/react-app/subdir/testfile.css') - - AssertFixer - \ { - \ 'read_temporary_file': 0, - \ 'cwd': '%s:h', - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/stylelint/bin/stylelint.js')) - \ . ' --cache --fix --stdin --stdin-filename %s', - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_styler_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_styler_fixer_callback.vader deleted file mode 100644 index 79f71ba9..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_styler_fixer_callback.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The styler callback should include custom styler options): - let g:ale_r_styler_options = "a_custom_option" - - AssertEqual - \ { - \ 'command': 'Rscript --vanilla -e ' - \ . '"suppressPackageStartupMessages(library(styler));' - \ . 'style_file(commandArgs(TRUE), transformers = ' - \ . 'a_custom_option)"' - \ . ' %t', - \ 'read_temporary_file': 1, - \ }, - \ ale#fixers#styler#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_stylish_haskell_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_stylish_haskell_fixer_callback.vader deleted file mode 100644 index 755d3430..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_stylish_haskell_fixer_callback.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_haskell_stylish_haskell_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_haskell_stylish_haskell_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The stylish-haskell callback should return the correct default values): - call ale#test#SetFilename('../haskell_files/testfile.hs') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' --inplace' - \ . ' %t', - \ }, - \ ale#fixers#stylish_haskell#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_stylua_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_stylua_fixer_callback.vader deleted file mode 100644 index 8621c498..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_stylua_fixer_callback.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('lua', 'stylua') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The default command should be correct): - AssertFixer {'command': ale#Escape('stylua') . ' -'} - -Execute(The stylua callback should include custom stylua options): - let g:ale_lua_stylua_executable = 'xxxinvalid' - let g:ale_lua_stylua_options = '--search-parent-directories' - - AssertFixer - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' ' . g:ale_lua_stylua_options - \ . ' -', - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_swiftformat_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_swiftformat_fixer_callback.vader deleted file mode 100644 index 755c30f6..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_swiftformat_fixer_callback.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - Save g:ale_swift_swiftformat_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_swift_swiftformat_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The swiftformat callback should return the correct default values): - call ale#test#SetFilename('../test-files/swift/dummy.swift') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_swift_swiftformat_executable) - \ . ' %t ', - \ }, - \ ale#fixers#swiftformat#Fix(bufnr('')) - -Execute(The swiftformat callback should include any additional options): - call ale#test#SetFilename('../test-files/swift/dummy.swift') - let g:ale_swift_swiftformat_options = '--some-option' - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_swift_swiftformat_executable) - \ . ' %t --some-option', - \ }, - \ ale#fixers#swiftformat#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_syntax_tree_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_syntax_tree_fixer_callback.vader deleted file mode 100644 index 46450985..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_syntax_tree_fixer_callback.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - Save g:ale_ruby_syntax_tree_executable - Save g:ale_ruby_syntax_tree_options - - " Use an invalid global executable, so we don't match it. - let g:ale_ruby_syntax_tree_executable = 'xxxinvalid' - let g:ale_ruby_syntax_tree_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The syntax_tree callback should return the correct default values): - call ale#test#SetFilename('../test-files/ruby/dummy.rb') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_ruby_syntax_tree_executable) - \ . ' write %t', - \ }, - \ ale#fixers#syntax_tree#Fix(bufnr('')) - -Execute(The syntax_tree callback should include custom options): - let g:ale_ruby_syntax_tree_options = '--print-width=100 --plugins=plugin/trailing_comma' - call ale#test#SetFilename('../test-files/ruby/with_config/dummy.rb') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape(g:ale_ruby_syntax_tree_executable) - \ . ' write --print-width=100 --plugins=plugin/trailing_comma %t', - \ }, - \ ale#fixers#syntax_tree#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_terraform_fmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_terraform_fmt_fixer_callback.vader deleted file mode 100644 index 15377a7e..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_terraform_fmt_fixer_callback.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - Save g:ale_terraform_fmt_executable - Save g:ale_terraform_fmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_terraform_fmt_executable = 'xxxinvalid' - let g:ale_terraform_fmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The terraform fmt callback should return the correct default values): - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' fmt -', - \ }, - \ ale#fixers#terraform#Fix(bufnr('')) - -Execute(The terraform fmt callback should include custom options): - let g:ale_terraform_fmt_options = "-list=true" - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' fmt' - \ . ' ' . g:ale_terraform_fmt_options - \ . ' -', - \ }, - \ ale#fixers#terraform#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_textlint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_textlint_fixer_callback.vader deleted file mode 100644 index 5b6c5b7a..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_textlint_fixer_callback.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - Save g:ale_textlint_executable - Save g:ale_textlint_options - Save g:ale_textlint_use_global - - " Use an invalid global executable, so we don't match it. - let g:ale_textlint_executable = 'xxxinvalid' - let g:ale_textlint_options = '' - let g:ale_textlint_use_global = 0 - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The textlint callback should return the correct default values): - call ale#test#SetFilename('../test-files/markdown/testfile.md') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' --fix' - \ . ' %t', - \ }, - \ ale#fixers#textlint#Fix(bufnr('')) - -Execute(The textlint callback should include custom textlint options): - let g:ale_textlint_options = "--quiet" - call ale#test#SetFilename('../test-files/markdown/testfile.md') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('xxxinvalid') - \ . ' --fix' - \ . ' ' . g:ale_textlint_options - \ . ' %t', - \ }, - \ ale#fixers#textlint#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_tidy_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_tidy_fixer_callback.vader deleted file mode 100644 index 25d3d6c3..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_tidy_fixer_callback.vader +++ /dev/null @@ -1,25 +0,0 @@ -Before: - Save g:ale_html_tidy_executable - - let g:ale_html_tidy_executable = '../test-files/tidy/tidy' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The tidy callback should return 0 if tidy not found): - let g:ale_html_tidy_executable = 'xxxinvalidpath' - AssertEqual - \ 0, - \ ale#fixers#tidy#Fix(bufnr('')) - -Execute(The tidy callback should return the correct default command): - AssertEqual - \ { - \ 'command': ale#Escape('../test-files/tidy/tidy') - \ . ' -q --tidy-mark no --show-errors 0 --show-warnings 0' - \ }, - \ ale#fixers#tidy#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_trim_whitespace.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_trim_whitespace.vader deleted file mode 100644 index 2ffbcb04..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_trim_whitespace.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - call ale#test#RestoreDirectory() - -Execute(Should delete all whitespace at the end of different lines): - AssertEqual - \ [ - \ 'def foo():', - \ ' some_variable = this_is_a_longer_function(', - \ 'first_argument,', - \ ' second_argument,', - \ ' third_with_function_call(', - \ 'foo,', - \ ' bar,', - \ '))', - \ ], - \ ale#fixers#generic#TrimWhitespace(bufnr(''), [ - \ 'def foo():', - \ ' some_variable = this_is_a_longer_function(', - \ 'first_argument,', - \ ' second_argument,', - \ ' third_with_function_call(', - \ 'foo,', - \ ' bar,', - \ '))', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_tslint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_tslint_fixer_callback.vader deleted file mode 100644 index 43fcc5a4..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_tslint_fixer_callback.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - Save g:ale_typescript_tslint_executable - Save g:ale_typescript_tslint_config_path - - unlet! g:ale_typescript_tslint_executable - unlet! g:ale_typescript_tslint_config_path - unlet! b:ale_typescript_tslint_executable - unlet! b:ale_typescript_tslint_config_path - - call ale#handlers#tslint#InitVariables() - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The tslint callback should return the correct default values): - let g:ale_typescript_tslint_config_path = 'tslint.json' - call ale#test#SetFilename('../test-files/prettier/testfile.ts') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('tslint') - \ . ' -c ' . ale#Escape('tslint.json') - \ . ' --outputAbsolutePaths --fix %t', - \ }, - \ ale#fixers#tslint#Fix(bufnr('')) - -Execute(The tslint callback should include custom tslint config option): - let g:ale_typescript_tslint_config_path = '.tslintrc' - call ale#test#SetFilename('../test-files/prettier/testfile.ts') - - AssertEqual - \ { - \ 'read_temporary_file': 1, - \ 'command': ale#Escape('tslint') - \ . ' -c ' . ale#Escape('.tslintrc') - \ . ' --outputAbsolutePaths --fix %t', - \ }, - \ ale#fixers#tslint#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_uncrustify_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_uncrustify_fixer_callback.vader deleted file mode 100644 index c101a31a..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_uncrustify_fixer_callback.vader +++ /dev/null @@ -1,108 +0,0 @@ -Before: - Save g:ale_c_uncrustify_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_c_uncrustify_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The clang-format callback should return the correct default values): - call ale#test#SetFilename('../test-files/c/dummy.c') - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l C' - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - -Execute(The uncrustify callback should include any additional options): - call ale#test#SetFilename('../test-files/c/dummy.c') - let b:ale_c_uncrustify_options = '--some-option' - - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l C --some-option', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - -Execute(The uncrustify callback should set proper language): - unlet b:ale_c_uncrustify_options - - set filetype=c - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l C', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - - set filetype=cpp - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l CPP', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - - set filetype=cs - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l CS', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - - set filetype=objc - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l OC', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - - set filetype=objcpp - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l OC+', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - - set filetype=d - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l D', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - - set filetype=java - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l JAVA', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - - set filetype=vala - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l VALA', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) - - set filetype=p - AssertEqual - \ { - \ 'command': ale#Escape(g:ale_c_uncrustify_executable) - \ . ' --no-backup -l PAWN', - \ }, - \ ale#fixers#uncrustify#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_vfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_vfmt_fixer_callback.vader deleted file mode 100644 index cbab1189..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_vfmt_fixer_callback.vader +++ /dev/null @@ -1,44 +0,0 @@ -Before: - Save g:ale_v_v_executable - Save g:ale_v_vfmt_options - - " Use an invalid global executable, so we don't match it. - let g:ale_v_v_executable = 'xxxinvalid' - let g:ale_v_vfmt_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - - call ale#test#RestoreDirectory() - -Execute(The vfmt callback should return the correct default values): - call ale#test#SetFilename('../v_files/testfile.v') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' fmt', - \ }, - \ ale#fixers#vfmt#Fix(bufnr('')) - -Execute(The vfmt callback should include custom vfmt options): - let g:ale_v_vfmt_options = "-r '(a) -> a'" - - call ale#test#SetFilename('../v_files/testfile.v') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') - \ . ' fmt ' . g:ale_v_vfmt_options, - \ }, - \ ale#fixers#vfmt#Fix(bufnr('')) - -Execute(The vfmt callback should support Go environment variables): - call ale#test#SetFilename('../v_files/testfile.v') - - AssertEqual - \ { - \ 'command': ale#Escape('xxxinvalid') . ' fmt', - \ }, - \ ale#fixers#vfmt#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_vim_help_tags_alignment_fixer.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_vim_help_tags_alignment_fixer.vader deleted file mode 100644 index 7e18a771..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_vim_help_tags_alignment_fixer.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - Save g:ale_fixers - -After: - Restore - -Given help(A vim help file with badly aligned tags): - foo *foo* - bar *bar* - baz *bar* - -Execute(Tags should be aligned at the right margin): - let g:ale_fixers = {'help': ['align_help_tags']} - ALEFix - -Expect help(Tags should be aligned): - foo *foo* - bar *bar* - baz *bar* diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_xmllint_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_xmllint_fixer_callback.vader deleted file mode 100644 index 54fe05bd..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_xmllint_fixer_callback.vader +++ /dev/null @@ -1,46 +0,0 @@ -Before: - Save g:ale_xml_xmllint_executable - Save g:ale_xml_xmllint_indentsize - Save g:ale_xml_xmllint_options - - let g:ale_xml_xmllint_executable = '/path/to/xmllint' - let g:ale_xml_xmllint_indentsize = '' - let g:ale_xml_xmllint_options = '' - - call ale#test#SetDirectory('/testplugin/test/fixers') - -After: - Restore - -Execute(The xmllint callback should return the correct default command): - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/xmllint') - \ . ' --format ' - \ . ale#Escape(bufname(bufnr(''))) - \ }, - \ ale#fixers#xmllint#Fix(bufnr('')) - -Execute(The xmllint callback should include the XMLLINT_INDENT variable): - let g:ale_xml_xmllint_indentsize = 2 - - AssertEqual - \ { - \ 'command': ale#Env('XMLLINT_INDENT', ' ') - \ . ale#Escape('/path/to/xmllint') - \ . ' --format ' - \ . ale#Escape(bufname(bufnr(''))) - \ }, - \ ale#fixers#xmllint#Fix(bufnr('')) - -Execute(The xmllint callback should include additional options): - let g:ale_xml_xmllint_options = '--nonet' - - AssertEqual - \ { - \ 'command': ale#Escape('/path/to/xmllint') - \ . ' --format ' - \ . ale#Escape(bufname(bufnr(''))) - \ . ' --nonet' - \ }, - \ ale#fixers#xmllint#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_xo_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_xo_fixer_callback.vader deleted file mode 100644 index fe2da8cc..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_xo_fixer_callback.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('javascript', 'xo') - runtime autoload/ale/handlers/xo.vim - set filetype=javascript - -After: - call ale#assert#TearDownFixerTest() - -Execute(The xo callback should return the correct default values): - call ale#test#SetFilename('../test-files/xo/monorepo/packages/a/index.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/xo/monorepo/node_modules/xo/cli.js')) - \ . ' --fix %t', - \ } - -Execute(The xo callback should include custom xo options): - let g:ale_javascript_xo_options = '--space' - call ale#test#SetFilename('../test-files/xo/monorepo/packages/a/index.js') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/xo/monorepo/node_modules/xo/cli.js')) - \ . ' --fix %t' - \ . ' --space', - \ } - -Execute(--stdin should be used when xo is new enough): - let g:ale_javascript_xo_options = '--space' - call ale#test#SetFilename('../test-files/xo/monorepo/packages/a/index.js') - - GivenCommandOutput ['0.30.0'] - AssertFixer - \ { - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/xo/monorepo/node_modules/xo/cli.js')) - \ . ' --stdin --stdin-filename %s' - \ . ' --fix' - \ . ' --space', - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_xots_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_xots_fixer_callback.vader deleted file mode 100644 index 61a22e62..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_xots_fixer_callback.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('typescript', 'xo') - runtime autoload/ale/handlers/xo.vim - set filetype=typescript - -After: - call ale#assert#TearDownFixerTest() - -Execute(The xo callback should return the correct default values): - call ale#test#SetFilename('../test-files/xo/monorepo/packages/a/index.ts') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/xo/monorepo/node_modules/xo/cli.js')) - \ . ' --fix %t', - \ } - -Execute(The xo callback should include custom xo options): - let g:ale_typescript_xo_options = '--space' - call ale#test#SetFilename('../test-files/xo/monorepo/packages/a/index.ts') - - AssertFixer - \ { - \ 'read_temporary_file': 1, - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/xo/monorepo/node_modules/xo/cli.js')) - \ . ' --fix %t' - \ . ' --space', - \ } - -Execute(--stdin should be used when xo is new enough): - let g:ale_typescript_xo_options = '--space' - call ale#test#SetFilename('../test-files/xo/monorepo/packages/a/index.ts') - - GivenCommandOutput ['0.30.0'] - AssertFixer - \ { - \ 'command': (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/xo/monorepo/node_modules/xo/cli.js')) - \ . ' --stdin --stdin-filename %s' - \ . ' --fix' - \ . ' --space', - \ } diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_yamlfix_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_yamlfix_fixer_callback.vader deleted file mode 100644 index 1ae5e335..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_yamlfix_fixer_callback.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('yaml', 'yamlfix') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - call ale#assert#TearDownFixerTest() - -Execute(The yamlfix callback should return the correct default values): - AssertEqual - \ 0, - \ ale#fixers#yamlfix#Fix(bufnr('')) - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.yaml') - AssertEqual - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/yamlfix')) . ' -', - \ }, - \ ale#fixers#yamlfix#Fix(bufnr('')) - -Execute(The yamlfix callback should respect custom options): - let g:ale_yaml_yamlfix_options = '--multi-line=3 --trailing-comma' - - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_virtualenv/subdir/foo/bar.yaml') - AssertEqual - \ { - \ 'cwd': '%s:h', - \ 'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/yamlfix')) - \ . ' --multi-line=3 --trailing-comma -', - \ }, - \ ale#fixers#yamlfix#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_yapf_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_yapf_fixer_callback.vader deleted file mode 100644 index a7fcc07b..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_yapf_fixer_callback.vader +++ /dev/null @@ -1,39 +0,0 @@ -Before: - Save g:ale_python_yapf_executable - - " Use an invalid global executable, so we don't match it. - let g:ale_python_yapf_executable = 'xxxinvalid' - - call ale#test#SetDirectory('/testplugin/test/fixers') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - Restore - - unlet! b:bin_dir - - call ale#test#RestoreDirectory() - -Execute(The yapf callback should return the correct default values): - AssertEqual - \ 0, - \ ale#fixers#yapf#Fix(bufnr('')) - - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - AssertEqual - \ {'command': ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/yapf'))}, - \ ale#fixers#yapf#Fix(bufnr('')) - \ -Execute(The yapf should include the .style.yapf file if present): - call ale#test#SetFilename('../test-files/python/with_virtualenv/dir_with_yapf_config/foo/bar.py') - - AssertEqual - \ { - \ 'command': - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/yapf')) - \ . ' --no-local-style' - \ . ' --style ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/dir_with_yapf_config/.style.yapf')), - \ }, - \ ale#fixers#yapf#Fix(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/fixers/test_zigfmt_fixer_callback.vader b/dotfiles/.vim/plugged/ale/test/fixers/test_zigfmt_fixer_callback.vader deleted file mode 100644 index 47e3ddee..00000000 --- a/dotfiles/.vim/plugged/ale/test/fixers/test_zigfmt_fixer_callback.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#assert#SetUpFixerTest('zig', 'zigfmt') - -After: - call ale#assert#TearDownFixerTest() - -Execute(The zig callback should return the correct default values): - AssertFixer { - \ 'command': ale#Escape('zig') . ' fmt %t', - \ 'read_temporary_file': 1, - \} - -Execute(The zig callback should allow custom zig executables): - let g:ale_zig_zigfmt_executable = 'foo/bar' - - AssertFixer { - \ 'command': ale#Escape('foo/bar') . ' fmt %t', - \ 'read_temporary_file': 1, - \} - diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_actionlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_actionlint_handler.vader deleted file mode 100644 index 3e762129..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_actionlint_handler.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - runtime! ale/handlers/actionlint.vim - -After: - unlet! g:ale_yaml_actionlint_options - call ale#linter#Reset() - -Execute(Problems should be parsed correctly for actionlint): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': '"jobs" section is missing in workflow', - \ 'code': 'syntax-check', - \ }, - \ { - \ 'lnum': 56, - \ 'col': 23, - \ 'type': 'E', - \ 'text': 'property "unknown_input" is not defined in object type {input7: bool; input0: any; input1: any; input2: string; input3: any; input4: any; input5: number; input6: number}', - \ 'code': 'expression', - \ }, - \ ], - \ ale#handlers#actionlint#Handle(bufnr(''), [ - \ '.codecov.yaml:2:1: "jobs" section is missing in workflow [syntax-check]', - \ 'workflow_call_event.yaml:56:23: property "unknown_input" is not defined in object type {input7: bool; input0: any; input1: any; input2: string; input3: any; input4: any; input5: number; input6: number} [expression]', - \ ]) - -Execute(Command should always have --no-color and --oneline options): - let g:ale_yaml_actionlint_options = '' - - AssertEqual - \ '%e --no-color --oneline %t', - \ ale#handlers#actionlint#GetCommand(bufnr('')) - -Execute(Options should be added to command): - let g:ale_yaml_actionlint_options = '-shellcheck= -pyflakes=' - - AssertEqual - \ '%e -shellcheck= -pyflakes= --no-color --oneline %t', - \ ale#handlers#actionlint#GetCommand(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ada_gcc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ada_gcc_handler.vader deleted file mode 100644 index 06ddfe1f..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ada_gcc_handler.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - runtime ale_linters/ada/gcc.vim - -After: - call ale#linter#Reset() - -Execute(The gcc handler for Ada should parse input correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 0, - \ 'lnum': 8, - \ 'col': 5, - \ 'type': 'W', - \ 'text': 'variable "X" is assigned but never read', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 6, - \ 'col': 22, - \ 'type': 'E', - \ 'text': 'type definition expected', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 8, - \ 'col': 9, - \ 'type': 'E', - \ 'text': 'aspect specifications not allowed here', - \ }, - \ ], - \ ale_linters#ada#gcc#Handle(0, [ - \ 'foobar.adb:8:05: warning: variable "X" is assigned but never read', - \ 'foobar.ads:6:22: type definition expected', - \ 'foobar.ads:8:09: aspect specifications not allowed here', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_alex_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_alex_handler.vader deleted file mode 100644 index eb241f80..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_alex_handler.vader +++ /dev/null @@ -1,54 +0,0 @@ -Execute(The alex handler should handle the example from the alex README): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 5, - \ 'end_lnum': 1, - \ 'end_col': 13, - \ 'type': 'W', - \ 'text': '`boogeyman` may be insensitive, use `boogey` instead (retext-equality)', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 42, - \ 'end_lnum': 1, - \ 'end_col': 47, - \ 'type': 'W', - \ 'text': '`master` / `slaves` may be insensitive, use `primary` / `replica` instead (retext-equality)', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 69, - \ 'end_lnum': 1, - \ 'end_col': 74, - \ 'type': 'W', - \ 'text': 'Don’t use “slaves”, it’s profane (retext-profanities)', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 52, - \ 'end_lnum': 2, - \ 'end_col': 53, - \ 'type': 'W', - \ 'text': '`he` may be insensitive, use `they`, `it` instead (retext-equality)', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 61, - \ 'end_lnum': 2, - \ 'end_col': 67, - \ 'type': 'W', - \ 'text': '`cripple` may be insensitive, use `person with a limp` instead (retext-equality)', - \ }, - \ ], - \ ale#handlers#alex#Handle(bufnr(''), [ - \ 'example.md', - \ ' 1:5-1:14 warning `boogeyman` may be insensitive, use `boogey` instead boogeyman-boogeywoman retext-equality', - \ ' 1:42-1:48 warning `master` / `slaves` may be insensitive, use `primary` / `replica` instead master-slave retext-equality', - \ ' 1:69-1:75 warning Don’t use “slaves”, it’s profane slaves retext-profanities', - \ ' 2:52-2:54 warning `he` may be insensitive, use `they`, `it` instead he-she retext-equality', - \ ' 2:61-2:68 warning `cripple` may be insensitive, use `person with a limp` instead cripple retext-equality', - \ '', - \ '⚠ 5 warnings', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ameba_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ameba_handler.vader deleted file mode 100644 index a6f43170..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ameba_handler.vader +++ /dev/null @@ -1,44 +0,0 @@ -Before: - runtime ale_linters/crystal/ameba.vim - -After: - unlet! g:lines - call ale#linter#Reset() - -Execute(The ameba handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 24, - \ 'col': 28, - \ 'end_col': 29, - \ 'text': 'Trailing whitespace detected', - \ 'code': 'Layout/TrailingWhitespace', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#crystal#ameba#HandleAmebaOutput(123, [ - \ '{"sources":[{"path":"my_file_with_issues.cr","issues":[{"rule_name":"Layout/TrailingWhitespace","message":"Trailing whitespace detected","location":{"line":24,"column":28},"end_location":{"line":null,"column":null}}]},{"path":"my_file_without_issues.cr","issues":[]}],"metadata":{"ameba_version":"0.8.1","crystal_version":"0.26.1"},"summary":{"target_sources_count":2,"issues_count":1}}' - \ ]) - -Execute(The ameba handler should handle when files are checked and no offenses are found): - AssertEqual - \ [], - \ ale_linters#crystal#ameba#HandleAmebaOutput(123, [ - \ '{"sources":[{"path":"my_file_with_issues.cr",issues":[]},{"path":"my_file_without_issues.cr",issues":[]}],"metadata":{ameba_version":"0.8.1",crystal_version":"0.26.1"},"summary":{target_sources_count":2,issues_count":0}}' - \ ]) - -Execute(The ameba handler should handle when no files are checked): - AssertEqual - \ [], - \ ale_linters#crystal#ameba#HandleAmebaOutput(123, [ - \ '{"sources":[],"metadata":{ameba_version":"0.8.1",crystal_version":"0.26.1"},"summary":{target_sources_count":0,issues_count":0}}' - \ ]) - -Execute(The ameba handler should handle blank output without any errors): - AssertEqual - \ [], - \ ale_linters#crystal#ameba#HandleAmebaOutput(123, ['{}']) - AssertEqual - \ [], - \ ale_linters#crystal#ameba#HandleAmebaOutput(123, []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ansible_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ansible_lint_handler.vader deleted file mode 100644 index 28dbba30..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ansible_lint_handler.vader +++ /dev/null @@ -1,95 +0,0 @@ -Before: - runtime ale_linters/ansible/ansible_lint.vim - call ale#test#SetFilename('test_playbook.yml') - - let b:ale_warn_about_trailing_whitespace = 1 - -After: - unlet! b:ale_warn_about_trailing_whitespace - call ale#linter#Reset() - -Execute(The ansible-lint handler for version group <5 should handle basic errors): - AssertEqual - \ [ - \ { - \ 'lnum': 35, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'Trailing whitespace', - \ 'code': 'EANSIBLE0002', - \ }, - \ ], - \ ale_linters#ansible#ansible_lint#Handle(bufnr(''), [4, 1, 2], [ - \ fnamemodify(tempname(), ':h') . '/test_playbook.yml:35: [EANSIBLE0002] Trailing whitespace', - \ ]) - -Execute(The ansible-lint handler for version group <5 should supress trailing whitespace output when the option is used): - let b:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [ - \ ], - \ ale_linters#ansible#ansible_lint#Handle(bufnr(''), [4, 1, 2], [ - \ fnamemodify(tempname(), ':h') . '/test_playbook.yml:35: [EANSIBLE0002] Trailing whitespace', - \ ]) - - -Execute(The ansible-lint handler for version group >=5 should handle basic errors): - AssertEqual - \ [ - \ { - \ 'lnum': 35, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'File permissions unset or incorrect', - \ 'code': 'risky-file-permissions', - \ }, - \ ], - \ ale_linters#ansible#ansible_lint#Handle(bufnr(''), [5, 1, 2], [ - \ fnamemodify(tempname(), ':h') . '/test_playbook.yml:35: [risky-file-permissions] [VERY_HIGH] File permissions unset or incorrect', - \ ]) - -Before: - runtime ale_linters/ansible/ansible_lint.vim - call ale#test#SetFilename('test playbook.yml') - -After: - call ale#linter#Reset() - -Execute (The ansible-lint handler for version group <5 should handle names with spaces): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 6, - \ 'type': 'E', - \ 'text': 'indentation is not a multiple of four', - \ 'code': 'E111', - \ }, - \ ], - \ ale_linters#ansible#ansible_lint#Handle(bufnr(''), [4, 1, 2], [ - \ fnamemodify(tempname(), ':h') . '/test playbook.yml:6:6: E111 indentation is not a multiple of four', - \ ]) - -Execute (The ansible-lint handler for version group >=5 should handle names with spaces): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'col': 148, - \ 'type': 'E', - \ 'text': "'var' is not a valid attribute for a Play", - \ 'code': 'syntax-check', - \ }, - \ ], - \ ale_linters#ansible#ansible_lint#Handle(bufnr(''), [5, 1, 2], [ - \ fnamemodify(tempname(), ':h') . "/test playbook.yml:3:148: [syntax-check] [VERY_HIGH] 'var' is not a valid attribute for a Play", - \ ]) - -Execute (The ansible-lint handler should ignore errors from other files): - AssertEqual - \ [ - \ ], - \ ale_linters#ansible#ansible_lint#Handle(bufnr(''), [5, 1, 2], [ - \ '/foo/bar/roles/test_playbook.yml:6: [command-instead-of-module] [VERY_LOW] curl used in place of get_url or uri module', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_appleswiftformat_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_appleswiftformat_handler.vader deleted file mode 100644 index 818bd9c5..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_appleswiftformat_handler.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - runtime ale_linters/swift/appleswiftformat.vim - -After: - call ale#linter#Reset() - -Execute(The appleswiftformat handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'col': 21, - \ 'type': 'W', - \ 'code': 'DoNotUseSemicolons', - \ 'text': 'remove '';'' and move the next statement to the new line', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 12, - \ 'type': 'W', - \ 'code': 'Spacing', - \ 'text': 'remove 1 space' - \ }, - \ ], - \ ale_linters#swift#appleswiftformat#Handle(bufnr(''), [ - \ 'Sources/main.swift:4:21: warning: [DoNotUseSemicolons] remove '';'' and move the next statement to the new line', - \ 'Sources/main.swift:3:12: warning: [Spacing] remove 1 space', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_asm_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_asm_handler.vader deleted file mode 100644 index 4ab99992..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_asm_handler.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - runtime ale_linters/asm/gcc.vim - -After: - call ale#linter#Reset() - -Execute(The asm GCC handler should parse lines from GCC 6.3.1 correctly): - - AssertEqual - \ [ - \ { - \ 'lnum': 38, - \ 'text': "too many memory references for `mov'", - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 42, - \ 'text': "incorrect register `%ax' used with `l' suffix", - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#asm#gcc#Handle(357, [ - \ "{standard input}: Assembler messages:", - \ "{standard_input}:38: Error: too many memory references for `mov'", - \ "{standard input}:42: Error: incorrect register `%ax' used with `l' suffix", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_atools_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_atools_handler.vader deleted file mode 100644 index 1bb9ca00..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_atools_handler.vader +++ /dev/null @@ -1,85 +0,0 @@ -Before: - runtime autoload/ale/handlers/atools.vim - -After: - call ale#linter#Reset() - -Execute(The atools handler should handle basic errors or warings): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'text': 'trailing whitespace', - \ 'type': 'E', - \ 'code': 'AL8', - \ }, - \ { - \ 'lnum': 15, - \ 'text': '$pkgname should not be used in the source url', - \ 'type': 'W', - \ 'code': 'AL29', - \ }, - \ ], - \ ale#handlers#atools#Handle(bufnr(''), [ - \ 'IC:[AL8]:APKBUILD:2:trailing whitespace', - \ 'MC:[AL29]:APKBUILD:15:$pkgname should not be used in the source url', - \ ]) - -" Regardless of the severity, if the certainty is [P]ossible and not [C]ertain -" or if regardless of the Certainity the Severity is not [I]mportant or [S]erious -" then it must be a [W]arning -Execute(If we are not Certain or Importantly Serious, be a Warning): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'text': 'This violation is Serious but Possible false positive, I am a Warning!', - \ 'type': 'W', - \ 'code': 'AL', - \ }, - \ { - \ 'lnum': 4, - \ 'text': 'This violation is Important but Possible false positive, I am a Warning!', - \ 'type': 'W', - \ 'code': 'AL', - \ }, - \ { - \ 'lnum': 5, - \ 'text': 'This violation is Minor, I am a Warning!', - \ 'type': 'W', - \ 'code': 'AL', - \ }, - \ { - \ 'lnum': 6, - \ 'text': 'This violation is Style, I am a Warning!', - \ 'type': 'W', - \ 'code': 'AL', - \ }, - \ ], - \ ale#handlers#atools#Handle(bufnr(''), [ - \ 'SP:[AL]:APKBUILD:3:This violation is Serious but Possible false positive, I am a Warning!', - \ 'IP:[AL]:APKBUILD:4:This violation is Important but Possible false positive, I am a Warning!', - \ 'MC:[AL]:APKBUILD:5:This violation is Minor, I am a Warning!', - \ 'TC:[AL]:APKBUILD:6:This violation is Style, I am a Warning!', - \ ]) - -Execute(We should be error if we are Certain it is Serious or Important): - AssertEqual - \ [ - \ { - \ 'lnum': 7, - \ 'text': 'This is Certainly Serious, I am an Error!', - \ 'type': 'E', - \ 'code': 'AL', - \ }, - \ { - \ 'lnum': 8, - \ 'text': 'This is Certainly Important, I am an Error!', - \ 'type': 'E', - \ 'code': 'AL', - \ }, - \ ], - \ ale#handlers#atools#Handle(bufnr(''), [ - \ 'SC:[AL]:APKBUILD:7:This is Certainly Serious, I am an Error!', - \ 'IC:[AL]:APKBUILD:8:This is Certainly Important, I am an Error!', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_avra_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_avra_handler.vader deleted file mode 100644 index 0de83fb8..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_avra_handler.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - runtime ale_linters/avra/avra.vim - -After: - call ale#linter#Reset() - -Execute(The avra handler should parse errors correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'text': "Unknown device: atmega3228p", - \ 'type': 'E' - \ }, - \ { - \ 'lnum': 12, - \ 'text': "Unknown directive: .EQ", - \ 'type': 'E' - \ } - \ ], - \ ale_linters#avra#avra#Handle(bufnr(''), [ - \ "main.asm(3) : Error : Unknown device: atmega3228p", - \ "main.asm(12) : Error : Unknown directive: .EQ" - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_bandit_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_bandit_handler.vader deleted file mode 100644 index a2793a46..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_bandit_handler.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - runtime ale_linters/python/bandit.vim - -After: - call ale#linter#Reset() - -Execute(The bandit handler for Python should parse input correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 0, - \ 'lnum': 2, - \ 'code': 'B404', - \ 'type': 'I', - \ 'text': 'Consider possible security implications associated with subprocess module.', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 4, - \ 'code': 'B305', - \ 'type': 'W', - \ 'text': 'Use of insecure cipher mode cryptography.hazmat.primitives.ciphers.modes.ECB.', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 6, - \ 'code': 'B609', - \ 'type': 'E', - \ 'text': 'Possible wildcard injection in call: subprocess.Popen', - \ }, - \ ], - \ ale_linters#python#bandit#Handle(0, [ - \ '[main] INFO profile include tests: None', - \ '[main] INFO profile exclude tests: None', - \ '[main] INFO cli include tests: None', - \ '[main] INFO cli exclude tests: None', - \ '[main] INFO running on Python 3.7.2', - \ '[node_visitor] INFO Unable to find qualified name for module: ', - \ '2:B404:LOW:Consider possible security implications associated with subprocess module.', - \ '4:B305:MEDIUM:Use of insecure cipher mode cryptography.hazmat.primitives.ciphers.modes.ECB.', - \ '6:B609:HIGH:Possible wildcard injection in call: subprocess.Popen', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_bashate_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_bashate_handler.vader deleted file mode 100644 index b61bb956..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_bashate_handler.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - runtime ale_linters/sh/bashate.vim - -After: - call ale#linter#Reset() - -Execute(The bashate handler should handle basic errors): - AssertEqual - \ [ - \ { - \ 'lnum': 777, - \ 'col': 1, - \ 'text': 'E003 Indent not multiple of 4', - \ }, - \ { - \ 'lnum': 783, - \ 'col': 1, - \ 'text': 'E020 Function declaration not in format ^function name {$', - \ }, - \ { - \ 'lnum': 786, - \ 'col': 1, - \ 'text': 'E010 The "do" should be on same line as for', - \ }, - \ { - \ 'lnum': 791, - \ 'col': 1, - \ 'text': 'E006 Line too long', - \ }, - \ ], - \ ale_linters#sh#bashate#Handle(bufnr(''), [ - \ 'run:777:1: E003 Indent not multiple of 4', - \ 'run:783:1: E020 Function declaration not in format ^function name {$', - \ 'run:786:1: E010 The "do" should be on same line as for', - \ 'run:791:1: E006 Line too long', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_bibclean_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_bibclean_handler.vader deleted file mode 100644 index 9da52a92..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_bibclean_handler.vader +++ /dev/null @@ -1,88 +0,0 @@ -Before: - runtime ale_linters/bib/bibclean.vim - -After: - call ale#linter#Reset() - -Execute(The bibclean handler should parse lines from bibclean <= v2.11.4 correctly): - - AssertEqual - \ [ - \ { - \ 'lnum': '60', - \ 'type': 'W', - \ 'text': 'Unexpected value in ``month = "09"''''.', - \ 'col': '17' - \ }, - \ { - \ 'lnum': '63', - \ 'type': 'E', - \ 'text': 'Expected comma after last field ``keywords''''.', - \ 'col': ' 1' - \ }, - \ { - \ 'lnum': '176', - \ 'type': 'W', - \ 'text': 'Unexpected DOI in URL value ``"https://doi.org/DOI"'''': move to separate DOI = "..." key/value in this entry.', - \ 'col': '14' - \ } - \ ], - \ ale_linters#bib#bibclean#Handle(255, [ - \ "%% \"stdin\", line 60: Unexpected value in ``month = \"09\"''.", - \ "%% File positions: input [main.bib] output [stdout]", - \ "%% Entry input byte=1681 line=50 column= 1 output byte=1680 line=50 column= 0", - \ "%% Value input byte=2137 line=60 column=17 output byte=2137 line=60 column=17", - \ "%% Current input byte=2139 line=60 column=19 output byte=2137 line=60 column=17", - \ "?? \"stdin\", line 71: Expected comma after last field ``keywords''.", - \ "?? File positions: input [main.bib] output [stdout]", - \ "?? Entry input byte=2145 line=63 column= 1 output byte=2146 line=63 column= 0", - \ "?? Value input byte=2528 line=71 column= 2 output byte=2527 line=70 column=49", - \ "?? Current input byte=2529 line=71 column= 3 output byte=2528 line=70 column=50", - \ "%% \"stdin\", line 176: Unexpected DOI in URL value ``\"https://doi.org/DOI\"'': move to separate DOI = \"...\" key/value in this entry.", - \ "%% File positions: input [stdin] output [stdout]", - \ "%% Entry input byte=6813 line=174 column= 1 output byte=8543 line=227 column= 0", - \ "%% Value input byte=6890 line=176 column=14 output byte=8641 line=229 column=17", - \ "%% Current input byte=6938 line=176 column=62 output byte=8641 line=229 column=17" - \ ]) - -Execute(The bibclean handler should parse lines of bibclean > v2.11.4 correctly): - - AssertEqual - \ [ - \ { - \ 'lnum': '60', - \ 'type': 'W', - \ 'text': 'Unexpected value in ``month = "09"''''.', - \ 'col': '17' - \ }, - \ { - \ 'lnum': '63', - \ 'type': 'E', - \ 'text': 'Expected comma after last field ``keywords''''.', - \ 'col': ' 1' - \ }, - \ { - \ 'lnum': '176', - \ 'type': 'W', - \ 'text': 'Unexpected DOI in URL value ``"https://doi.org/DOI"'''': move to separate DOI = "..." key/value in this entry.', - \ 'col': '14' - \ } - \ ], - \ ale_linters#bib#bibclean#Handle(255, [ - \ "%% stdin:60:Unexpected value in ``month = \"09\"''.", - \ "%% File positions: input [main.bib] output [stdout]", - \ "%% Entry input byte=1681 line=50 column= 1 output byte=1680 line=50 column= 0", - \ "%% Value input byte=2137 line=60 column=17 output byte=2137 line=60 column=17", - \ "%% Current input byte=2139 line=60 column=19 output byte=2137 line=60 column=17", - \ "?? stdin:71:Expected comma after last field ``keywords''.", - \ "?? File positions: input [main.bib] output [stdout]", - \ "?? Entry input byte=2145 line=63 column= 1 output byte=2146 line=63 column= 0", - \ "?? Value input byte=2528 line=71 column= 2 output byte=2527 line=70 column=49", - \ "?? Current input byte=2529 line=71 column= 3 output byte=2528 line=70 column=50", - \ "%% stdin:176:Unexpected DOI in URL value ``\"https://doi.org/DOI\"'': move to separate DOI = \"...\" key/value in this entry.", - \ "%% File positions: input [stdin] output [stdout]", - \ "%% Entry input byte=6813 line=174 column= 1 output byte=8543 line=227 column= 0", - \ "%% Value input byte=6890 line=176 column=14 output byte=8641 line=229 column=17", - \ "%% Current input byte=6938 line=176 column=62 output byte=8641 line=229 column=17" - \ ]) - diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_bicep_bicep_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_bicep_bicep_handler.vader deleted file mode 100644 index d105cae5..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_bicep_bicep_handler.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - runtime ale_linters/bicep/bicep.vim - -After: - Restore - - call ale#linter#Reset() - -Execute(The cmake_lint handler should handle basic warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 7, - \ 'col': 10, - \ 'type': 'W', - \ 'code': 'no-unused-existing-resources', - \ 'text': 'Existing resource "asdasd" is declared but never used. [https://aka.ms/bicep/linter/no-unused-existing-resources]', - \ }, - \ { - \ 'lnum': 106, - \ 'col': 6, - \ 'type': 'E', - \ 'code': 'BCP019', - \ 'text': 'Expected a new line character at this location.', - \ }, - \ ], - \ ale_linters#bicep#bicep#Handle(1, [ - \ '/tmp/nvimhxqs5D/1/dns.bicep(7,10) : Warning no-unused-existing-resources: Existing resource "asdasd" is declared but never used. [https://aka.ms/bicep/linter/no-unused-existing-resources]', - \ '/tmp/nvimhxqs5D/1/dns.bicep(106,6) : Error BCP019: Expected a new line character at this location.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_bitbake_oelint_adv_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_bitbake_oelint_adv_handler.vader deleted file mode 100644 index a52e8810..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_bitbake_oelint_adv_handler.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - runtime ale_linters/bitbake/oelint_adv.vim - -After: - Restore - - call ale#linter#Reset() - -Execute(The oelint_adv handler should handle warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 1234, - \ 'type': 'I', - \ 'code': 'oelint.var.suggestedvar.BUGTRACKER', - \ 'text': 'Variable ''BUGTRACKER'' should be set', - \ }, - \ { - \ 'lnum': 17, - \ 'type': 'E', - \ 'code': 'oelint.var.mandatoryvar.DESCRIPTION', - \ 'text': 'Variable ''DESCRIPTION'' should be set', - \ }, - \ ], - \ ale_linters#bitbake#oelint_adv#Handle(1, [ - \ '/meta-x/recipes-y/example/example_1.0.bb:1234:info:oelint.var.suggestedvar.BUGTRACKER:Variable ''BUGTRACKER'' should be set', - \ 'example2_1.1.bb:17:error:oelint.var.mandatoryvar.DESCRIPTION:Variable ''DESCRIPTION'' should be set', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_brakeman_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_brakeman_handler.vader deleted file mode 100644 index ad5376f7..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_brakeman_handler.vader +++ /dev/null @@ -1,83 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/handler') - - runtime ale_linters/ruby/brakeman.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The brakeman handler should parse JSON correctly): - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/app/models/thing.rb') - - AssertEqual - \ [ - \ { - \ 'filename': expand('%:p'), - \ 'lnum': 84, - \ 'text': 'SQL Injection Possible SQL injection (Medium)', - \ 'type': 'W', - \ }, - \ { - \ 'filename': expand('%:p'), - \ 'lnum': 1, - \ 'text': 'Mass Assignment Potentially dangerous attribute available for mass assignment (Weak)', - \ 'type': 'W', - \ } - \ ], - \ ale_linters#ruby#brakeman#Handle(bufnr(''), [ - \ '{', - \ '"warnings": [', - \ '{', - \ '"warning_type": "SQL Injection",', - \ '"warning_code": 0,', - \ '"fingerprint": "1234",', - \ '"check_name": "SQL",', - \ '"message": "Possible SQL injection",', - \ '"file": "' . substitute(ale#path#Simplify('app/models/thing.rb'), '\\', '\\\\', 'g') . '",', - \ '"line": 84,', - \ '"link": "http://brakemanscanner.org/docs/warning_types/sql_injection/",', - \ '"code": "Thing.connection.execute(params[:data])",', - \ '"render_path": null,', - \ '"location": {', - \ '"type": "method",', - \ '"class": "Thing",', - \ '"method": "run_raw_sql_from_internet"', - \ '},', - \ '"user_input": "whatever",', - \ '"confidence": "Medium"', - \ '},', - \ '{', - \ '"warning_type": "Mass Assignment",', - \ '"warning_code": 60,', - \ '"fingerprint": "1235",', - \ '"check_name": "ModelAttrAccessible",', - \ '"message": "Potentially dangerous attribute available for mass assignment",', - \ '"file": "' . substitute(ale#path#Simplify('app/models/thing.rb'), '\\', '\\\\', 'g') . '",', - \ '"line": null,', - \ '"link": "http://brakemanscanner.org/docs/warning_types/mass_assignment/",', - \ '"code": ":name",', - \ '"render_path": null,', - \ '"location": {', - \ '"type": "model",', - \ '"model": "Thing"', - \ '},', - \ '"user_input": null,', - \ '"confidence": "Weak"', - \ '}', - \ ']', - \ '}' - \ ]) - -Execute(The brakeman handler should parse JSON correctly when there is no output from brakeman): - AssertEqual - \ [], - \ ale_linters#ruby#brakeman#Handle(347, [ - \ ]) - \ -Execute(The brakeman handler should handle garbage output): - AssertEqual - \ [], - \ ale_linters#ruby#brakeman#Handle(347, [ - \ 'No such command in 2.4.1 of ruby', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cfn_python_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cfn_python_lint_handler.vader deleted file mode 100644 index 2c7ddc62..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cfn_python_lint_handler.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - runtime! ale_linters/cloudformation/cfn_python_lint.vim - call ale#test#SetFilename('sample.template.yaml') - -After: - call ale#linter#Reset() - -Execute(The cfn_python_lint handler should parse items correctly): - AssertEqual - \ [ - \ { - \ 'lnum': '96', - \ 'col': '7', - \ 'end_lnum': '96', - \ 'end_col': '15', - \ 'text': 'Property Resources/Sample/Properties/FromPort should be of type Integer', - \ 'code': 'E3012', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': '97', - \ 'col': '7', - \ 'end_lnum': '97', - \ 'end_col': '15', - \ 'text': 'AllowedPattern and/or AllowedValues for Parameter should be specified at Parameters/SampleIpAddress. Example for AllowedPattern "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$"', - \ 'code': 'W2509', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#cloudformation#cfn_python_lint#Handle(bufnr(''), [ - \ fnamemodify(tempname(), ':h') . '/sample.template.yaml:96:7:96:15:E3012:Property Resources/Sample/Properties/FromPort should be of type Integer', - \ fnamemodify(tempname(), ':h') . '/sample.template.yaml:97:7:97:15:W2509:AllowedPattern and/or AllowedValues for Parameter should be specified at Parameters/SampleIpAddress. Example for AllowedPattern "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$"', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_checkmake_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_checkmake_handler.vader deleted file mode 100644 index e2e18425..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_checkmake_handler.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - runtime ale_linters/make/checkmake.vim - -After: - call ale#linter#Reset() - -Execute(Parsing checkmake errors should work): - silent file Makefile - - AssertEqual - \ [ - \ { - \ 'bufnr': 42, - \ 'lnum': 1, - \ 'type': 'E', - \ 'code': 'woops', - \ 'text': 'an error has occurred', - \ } - \ ], - \ ale_linters#make#checkmake#Handle(42, [ - \ 'This shouldnt match', - \ '1:woops:an error has occurred', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_checkov_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_checkov_handler.vader deleted file mode 100644 index 9884113c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_checkov_handler.vader +++ /dev/null @@ -1,66 +0,0 @@ -Before: - runtime ale_linters/terraform/checkov.vim - call ale#test#SetFilename('main.tf') - -After: - call ale#linter#Reset() - -Execute(The JSON output of checkov should be handled correctly): - AssertEqual - \ [ - \ { - \ 'filename': '/main.tf', - \ 'lnum': 22, - \ 'end_lnum': 27, - \ 'text': 'Enable VPC Flow Logs and Intranode Visibility [CKV_GCP_61]', - \ 'detail': "CKV_GCP_61: Enable VPC Flow Logs and Intranode Visibility\n" . - \ 'For more information, see: https://docs.bridgecrew.io/docs/enable-vpc-flow-logs-and-intranode-visibility', - \ 'type': 'W', - \ } - \ ], - \ ale_linters#terraform#checkov#Handle(bufnr(''), [ - \'{', - \' "check_type": "terraform",', - \' "results": {', - \' "failed_checks": [', - \' {', - \' "check_id": "CKV_GCP_61",', - \' "bc_check_id": "BC_GCP_KUBERNETES_18",', - \' "check_name": "Enable VPC Flow Logs and Intranode Visibility",', - \' "check_result": {', - \' "result": "FAILED",', - \' "evaluated_keys": [', - \' "enable_intranode_visibility"', - \' ]', - \' },', - \' "file_path": "/main.tf",', - \' "repo_file_path": "/main.tf",', - \' "file_line_range": [', - \' 22,', - \' 27', - \' ],', - \' "resource": "google_container_cluster.cluster-name",', - \' "evaluations": null,', - \' "check_class": "checkov.terraform.checks.resource.gcp.GKEEnableVPCFlowLogs",', - \' "entity_tags": null,', - \' "resource_address": null,', - \' "guideline": "https://docs.bridgecrew.io/docs/enable-vpc-flow-logs-and-intranode-visibility"', - \' }', - \' ]', - \' }', - \'}' - \ ]) - -Execute(Handle output for no findings correctly): - AssertEqual - \ [], - \ ale_linters#terraform#checkov#Handle(bufnr(''), [ - \'{', - \' "passed": 0,', - \' "failed": 0,', - \' "skipped": 0,', - \' "parsing_errors": 0,', - \' "resource_count": 0,', - \' "checkov_version": "2.0.632"', - \'}' - \]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_checkstyle_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_checkstyle_handler.vader deleted file mode 100644 index ea90db3f..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_checkstyle_handler.vader +++ /dev/null @@ -1,53 +0,0 @@ -Before: - runtime ale_linters/java/checkstyle.vim - -After: - call ale#linter#Reset() - -Execute(The checkstyle handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 101, - \ 'col': 0, - \ 'text': '''method def rcurly'' has incorrect indentation level 4, expected level should be 2.', - \ 'code': 'Indentation', - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 63, - \ 'col': 3, - \ 'text': 'Missing a Javadoc comment.', - \ 'code': 'JavadocMethod', - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 11, - \ 'col': 7, - \ 'text': 'WhitespaceAround: ''if'' is not followed by whitespace.', - \ 'code': 'WhitespaceAround', - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ ], - \ ale_linters#java#checkstyle#Handle(666, [ - \ '[WARN] whatever:101: ''method def rcurly'' has incorrect indentation level 4, expected level should be 2. [Indentation]', - \ '[WARN] whatever:63:3: Missing a Javadoc comment. [JavadocMethod]', - \ '[WARN] whatever:11:7: WhitespaceAround: ''if'' is not followed by whitespace. [WhitespaceAround]', - \ ]) - -Execute(The checkstyle handler should parse lines from older checkstyle versions correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 289, - \ 'text': '''method def modifier'' have incorrect indentation level 4, expected level should be 2.', - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ ], - \ ale_linters#java#checkstyle#Handle(666, [ - \ '/home/languitar/src/rsb-java/rsb-java/src/main/java/rsb/Listener.java:289: warning: ''method def modifier'' have incorrect indentation level 4, expected level should be 2.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_circleci_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_circleci_handler.vader deleted file mode 100644 index 8ffba360..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_circleci_handler.vader +++ /dev/null @@ -1,39 +0,0 @@ -Before: - runtime ale_linters/yaml/circleci.vim - -After: - call ale#linter#Reset() - -Execute(The circlei handler should return nothing when configs are valid): - AssertEqual - \ [], - \ ale_linters#yaml#circleci#Handle(0, [ - \ 'Config input is valid.', - \ ]) - -Execute(The circlei handler put errors at the top when something is wrong): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': '[#/jobs] expected type: Mapping, found: Integer', - \ 'detail': join([ - \ '[#/jobs] expected type: Mapping, found: Integer', - \ 'Jobs is a map', - \ 'SCHEMA:', - \ ' type: object', - \ 'INPUT:', - \ ' 4', - \ ], "\n"), - \ }, - \ ], - \ ale_linters#yaml#circleci#Handle(0, [ - \ 'Error: ERROR IN CONFIG FILE:', - \ '[#/jobs] expected type: Mapping, found: Integer', - \ 'Jobs is a map', - \ 'SCHEMA:', - \ ' type: object', - \ 'INPUT:', - \ ' 4', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_clang_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_clang_handler.vader deleted file mode 100644 index cc8eabd0..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_clang_handler.vader +++ /dev/null @@ -1,30 +0,0 @@ -Execute(clang errors from included files should be parsed correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'filename': './b.h', - \ 'type': 'E', - \ 'text': 'expected identifier or ''(''', - \ }, - \ { - \ 'lnum': 3, - \ 'text': 'Error found in header. See :ALEDetail', - \ 'detail': join([ - \ 'In file included from :3:', - \ 'In file included from ./a.h:1:', - \ './b.h:1:1: error: expected identifier or ''(''', - \ '{{{', - \ '^', - \ ], "\n"), - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ 'In file included from :3:', - \ 'In file included from ./a.h:1:', - \ './b.h:1:1: error: expected identifier or ''(''', - \ '{{{', - \ '^', - \ '1 error generated.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_clojure_clj_kondo_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_clojure_clj_kondo_handler.vader deleted file mode 100644 index 9ae70668..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_clojure_clj_kondo_handler.vader +++ /dev/null @@ -1,89 +0,0 @@ -Before: - runtime ale_linters/clojure/clj_kondo.vim - -After: - call ale#linter#Reset() - -Execute(the clojure clj-kondo handler should be able to handle errors): - AssertEqual - \ [ - \ { - \ 'lnum': 123, - \ 'col': 44, - \ 'type': 'E', - \ 'text': 'error: Unexpected )', - \ }, - \ ], - \ ale_linters#clojure#clj_kondo#HandleCljKondoFormat(0, [ - \ 'test.clj:123:44: error: Unexpected )', - \ ]) - -Execute(the clojure clj-kondo handler should be able to handle warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 654, - \ 'col': 321, - \ 'type': 'W', - \ 'text': 'warning: inline def', - \ } - \ ], - \ ale_linters#clojure#clj_kondo#HandleCljKondoFormat(0, [ - \ 'test.clj:654:321: warning: inline def' - \ ]) - -Execute(the clojure clj-kondo handler should be able to handle exceptions): - AssertEqual - \ [ - \ { - \ 'lnum': 123, - \ 'col': 321, - \ 'type': 'E', - \ 'text': 'Exception: something horrible happen', - \ } - \ ], - \ ale_linters#clojure#clj_kondo#HandleCljKondoFormat(0, [ - \ 'test.clj:123:321: Exception: something horrible happen' - \ ]) - -Execute(the clojure clj-kondo handler should be able to handle errors from stdin): - AssertEqual - \ [ - \ { - \ 'lnum': 16, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'error: Unexpected )', - \ }, - \ ], - \ ale_linters#clojure#clj_kondo#HandleCljKondoFormat(0, [ - \ ':16:1: error: Unexpected )', - \ ]) - -Execute(the clojure clj-kondo handler should be able to handle windows files): - AssertEqual - \ [ - \ { - \ 'lnum': 123, - \ 'col': 44, - \ 'type': 'E', - \ 'text': 'error: Unexpected )', - \ } - \ ], - \ ale_linters#clojure#clj_kondo#HandleCljKondoFormat(0, [ - \ 'C:\my\operating\system\is\silly\core.clj:123:44: error: Unexpected )', - \ ]) - -Execute(the clojure clj-kondo handler should be able to lines without row/col): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'error: Unexpected )', - \ }, - \ ], - \ ale_linters#clojure#clj_kondo#HandleCljKondoFormat(0, [ - \ 'test.clj::: error: Unexpected )', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_clojure_joker_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_clojure_joker_handler.vader deleted file mode 100644 index 460c62e8..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_clojure_joker_handler.vader +++ /dev/null @@ -1,75 +0,0 @@ -Before: - runtime ale_linters/clojure/joker.vim - -After: - call ale#linter#Reset() - -Execute(the clojure joker handler should be able to handle errors): - AssertEqual - \ [ - \ { - \ 'lnum': 123, - \ 'col': 44, - \ 'type': 'E', - \ 'text': 'Read error: Unexpected )', - \ }, - \ ], - \ ale_linters#clojure#joker#HandleJokerFormat(0, [ - \ 'test.clj:123:44: Read error: Unexpected )', - \ ]) - -Execute(the clojure joker handler should be able to handle warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 654, - \ 'col': 321, - \ 'type': 'W', - \ 'text': 'Parse warning: let form with empty body', - \ } - \ ], - \ ale_linters#clojure#joker#HandleJokerFormat(0, [ - \ 'test.clj:654:321: Parse warning: let form with empty body' - \ ]) - -Execute(the clojure joker handler should be able to handle exceptions): - AssertEqual - \ [ - \ { - \ 'lnum': 123, - \ 'col': 321, - \ 'type': 'E', - \ 'text': 'Exception: something horrible happen', - \ } - \ ], - \ ale_linters#clojure#joker#HandleJokerFormat(0, [ - \ 'test.clj:123:321: Exception: something horrible happen' - \ ]) - -Execute(the clojure joker handler should be able to handle errors from stdin): - AssertEqual - \ [ - \ { - \ 'lnum': 16, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Read error: Unexpected )', - \ }, - \ ], - \ ale_linters#clojure#joker#HandleJokerFormat(0, [ - \ ':16:1: Read error: Unexpected )', - \ ]) - -Execute(the clojure joker handler should be able to handle windows files): - AssertEqual - \ [ - \ { - \ 'lnum': 123, - \ 'col': 44, - \ 'type': 'E', - \ 'text': 'Read error: Unexpected )', - \ } - \ ], - \ ale_linters#clojure#joker#HandleJokerFormat(0, [ - \ 'C:\my\operating\system\is\silly\core.clj:123:44: Read error: Unexpected )', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cmake_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cmake_lint_handler.vader deleted file mode 100644 index 26fb8c1d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cmake_lint_handler.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - runtime ale_linters/cmake/cmake_lint.vim - -After: - Restore - - call ale#linter#Reset() - -Execute(The cmake_lint handler should handle basic warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 126, - \ 'col': 0, - \ 'type': 'W', - \ 'code': 'C0301', - \ 'text': 'Line too long (136/80)', - \ }, - \ { - \ 'lnum': 139, - \ 'col': 4, - \ 'type': 'W', - \ 'code': 'C0113', - \ 'text': 'Missing COMMENT in statement which allows it', - \ }, - \ ], - \ ale_linters#cmake#cmake_lint#Handle(1, [ - \ 'CMakeLists.txt:126: [C0301] Line too long (136/80)', - \ 'CMakeLists.txt:139,04: [C0113] Missing COMMENT in statement which allows it', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_coffeelint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_coffeelint_handler.vader deleted file mode 100644 index a061f3a9..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_coffeelint_handler.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - runtime ale_linters/coffee/coffeelint.vim - -After: - call ale#linter#Reset() - -Execute(The coffeelint handler should parse lines correctly): - - AssertEqual - \ [ - \ { - \ 'lnum': 125, - \ 'text': "Line exceeds maximum allowed length Length is 122, max is 120.", - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#coffee#coffeelint#Handle(347, [ - \ "path,lineNumber,lineNumberEnd,level,message", - \ "stdin,125,,error,Line exceeds maximum allowed length Length is 122, max is 120.", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_common_handlers.vader b/dotfiles/.vim/plugged/ale/test/handler/test_common_handlers.vader deleted file mode 100644 index ee29da36..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_common_handlers.vader +++ /dev/null @@ -1,181 +0,0 @@ -Execute(HandleCSSLintFormat should handle CSS errors): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Expected RBRACE at line 2, col 1.', - \ 'code': 'errors', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 5, - \ 'type': 'W', - \ 'text': 'Expected ... but found ''wat''.', - \ 'code': 'known-properties', - \ }, - \ ], - \ ale#handlers#css#HandleCSSLintFormat(42, [ - \ 'something.css: line 2, col 1, Error - Expected RBRACE at line 2, col 1. (errors)', - \ 'something.css: line 2, col 5, Warning - Expected ... but found ''wat''. (known-properties)', - \ ]) - -Execute(HandleCSSLintFormat should handle CSS errors without groups): - AssertEqual - \ [ - \ { - \ 'lnum': 7, - \ 'col': 3, - \ 'type': 'W', - \ 'text': 'Unknown property ''fill''.', - \ }, - \ { - \ 'lnum': 8, - \ 'col': 3, - \ 'type': 'W', - \ 'text': 'Unknown property ''fill-opacity''.', - \ }, - \ ], - \ ale#handlers#css#HandleCSSLintFormat(42, [ - \ 'something.css: line 7, col 3, Warning - Unknown property ''fill''.', - \ 'something.css: line 8, col 3, Warning - Unknown property ''fill-opacity''.', - \ ]) - -Execute (HandleGCCFormat should handle the correct lines of output): - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'col': 5, - \ 'type': 'W', - \ 'text': 'conversion lacks type at end of format [-Wformat=]', - \ }, - \ { - \ 'lnum': 10, - \ 'col': 27, - \ 'type': 'E', - \ 'text': 'invalid operands to binary - (have ''int'' and ''char *'')', - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormat(42, [ - \ ':8:5: warning: conversion lacks type at end of format [-Wformat=]', - \ ':10:27: error: invalid operands to binary - (have ‘int’ and ‘char *’)', - \ ]) - -Execute (HandleGCCFormat should replace Unicode quotes): - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'col': 5, - \ 'type': 'W', - \ 'text': "'''' \"\"", - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormat(42, [':8:5: warning: `´‘’ “”']) - -Execute (HandleUnixFormatAsError should handle some example lines of output): - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'missing argument for Printf("%s"): format reads arg 2, have only 1 args', - \ }, - \ { - \ 'lnum': 53, - \ 'col': 10, - \ 'type': 'E', - \ 'text': 'if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'text': '".b" is not a valid class name. Class names must begin with "-", "_" or a letter and can only contain "_", "-", a-z and 0-9.', - \ }, - \ ], - \ ale#handlers#unix#HandleAsError(42, [ - \ 'file.go:27: missing argument for Printf("%s"): format reads arg 2, have only 1 args', - \ 'file.go:53:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)', - \ 'test.pug:1:1 ".b" is not a valid class name. Class names must begin with "-", "_" or a letter and can only contain "_", "-", a-z and 0-9.', - \ ]) - -Execute (HandleUnixFormatAsError should handle lines with no space after the colon): - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'foo', - \ }, - \ { - \ 'lnum': 53, - \ 'col': 10, - \ 'type': 'E', - \ 'text': 'bar', - \ }, - \ ], - \ ale#handlers#unix#HandleAsError(42, [ - \ 'some_file.xyz:27:foo', - \ 'some_file.xyz:53:10:bar', - \ ]) - -Execute (HandleUnixFormatAsError should handle names with spaces): - AssertEqual - \ [ - \ { - \ 'lnum': 13, - \ 'col': 90, - \ 'type': 'E', - \ 'text': 'leonard.exclamation.30ppm More than 30 ppm of exclamations. Keep them under control.', - \ }, - \ ], - \ ale#handlers#unix#HandleAsError(42, [ - \ '/Users/rrj/Notes/Astro/Taurus December SM.txt:13:90: leonard.exclamation.30ppm More than 30 ppm of exclamations. Keep them under control.', - \ ]) - -Execute (HandleUnixFormatAsWarning should handle some example lines of output): - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'col': 0, - \ 'type': 'W', - \ 'text': 'missing argument for Printf("%s"): format reads arg 2, have only 1 args', - \ }, - \ { - \ 'lnum': 53, - \ 'col': 10, - \ 'type': 'W', - \ 'text': 'if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)', - \ }, - \ ], - \ ale#handlers#unix#HandleAsWarning(42, [ - \ 'file.go:27: missing argument for Printf("%s"): format reads arg 2, have only 1 args', - \ 'file.go:53:10: if block ends with a return statement, so drop this else and outdent its block (move short variable declaration to its own line if necessary)', - \ ]) - -Execute (Unix format functions should handle Windows paths): - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'foo', - \ }, - \ { - \ 'lnum': 53, - \ 'col': 10, - \ 'type': 'E', - \ 'text': 'foo', - \ }, - \ ], - \ ale#handlers#unix#HandleAsError(42, [ - \ 'C:\Users\w0rp\AppData\Local\Temp\Xyz123.go:27: foo', - \ 'C:\Users\w0rp\AppData\Local\Temp\Xyz123.go:53:10: foo', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cookstyle_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cookstyle_handler.vader deleted file mode 100644 index 7d705a19..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cookstyle_handler.vader +++ /dev/null @@ -1,22 +0,0 @@ -Before: - runtime ale_linters/chef/cookstyle.vim - -After: - call ale#linter#Reset() - -Execute(Basic warnings should be handled): - AssertEqual - \ [ - \ { - \ 'lnum': 58, - \ 'col': 24, - \ 'code': 'Style/UnneededInterpolation', - \ 'type': 'W', - \ 'end_col': 40, - \ 'text': 'Style/UnneededInterpolation: Prefer `to_s` over string interpolation.', - \ } - \ ], - \ ale_linters#chef#cookstyle#Handle(bufnr(''), [ - \ '{"metadata":{"rubocop_version":"0.62.0","ruby_engine":"ruby","ruby_version":"2.6.0","ruby_patchlevel":"0","ruby_platform":"x86_64-linux"},"files":[{"path":"recipes/default.rb","offenses":[{"severity":"convention","message":"Style/UnneededInterpolation: Prefer `to_s` over string interpolation.","cop_name":"Style/UnneededInterpolation","corrected":false,"location":{"start_line":58,"start_column":24,"last_line":58,"last_column":40,"length":17,"line":58,"column":24}}]}],"summary":{"offense_count":1,"target_file_count":1,"inspected_file_count":1}}' - \ ]) - diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cppcheck_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cppcheck_handler.vader deleted file mode 100644 index ef161f44..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cppcheck_handler.vader +++ /dev/null @@ -1,93 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/handler') - -After: - call ale#test#RestoreDirectory() - -Execute(Basic errors should be handled by cppcheck): - call ale#test#SetFilename('test.cpp') - - AssertEqual - \ [ - \ { - \ 'lnum': 974, - \ 'col' : 6, - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'Array ''n[3]'' accessed at index 3, which is out of bounds.', - \ 'code': 'arrayIndexOutOfBounds' - \ }, - \ { - \ 'lnum': 1185, - \ 'col' : 10, - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'The scope of the variable ''indxStr'' can be reduced.', - \ 'code': 'variableScope' - \ }, - \ ], - \ ale#handlers#cppcheck#HandleCppCheckFormat(bufnr(''), [ - \ 'test.cpp:974:6: error: Array ''n[3]'' accessed at index 3, which is out of bounds. [arrayIndexOutOfBounds]\', - \ ' n[3]=3;', - \ ' ^', - \ 'test.cpp:1185:10: style: The scope of the variable ''indxStr'' can be reduced. [variableScope]\', - \ ' char indxStr[16];', - \ ' ^', - \ ]) - - AssertEqual - \ [ - \ { - \ 'lnum': 974, - \ 'col' : 1, - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'inconclusive Array ''n[3]'' accessed at index 3, which is out of bounds.', - \ 'code': 'arrayIndexOutOfBounds' - \ }, - \ { - \ 'lnum': 1185, - \ 'col' : 1, - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'The scope of the variable ''indxStr'' can be reduced.', - \ 'code': 'variableScope' - \ }, - \ ], - \ ale#handlers#cppcheck#HandleCppCheckFormat(bufnr(''), [ - \ 'test.cpp:974:{column}: error:inconclusive Array ''n[3]'' accessed at index 3, which is out of bounds. [arrayIndexOutOfBounds]\', - \ ' n[3]=3;', - \ ' ^', - \ 'test.cpp:1185:{column}: style:{inconclusive:inconclusive} The scope of the variable ''indxStr'' can be reduced. [variableScope]\', - \ ' char indxStr[16];', - \ ' ^', - \ ]) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col' : 16, - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'misra violation (use --rule-texts= to get proper output)', - \ 'code': 'misra-c2012-2.7' - \ }, - \ ], - \ ale#handlers#cppcheck#HandleCppCheckFormat(bufnr(''), [ - \ 'test.cpp:1:16: style: misra violation (use --rule-texts= to get proper output) [misra-c2012-2.7]\', - \ 'void test( int parm ) {}', - \ ' ^', - \ ]) - -Execute(Problems from other files should be ignored by cppcheck): - call ale#test#SetFilename('test.cpp') - - AssertEqual - \ [ - \ ], - \ ale#handlers#cppcheck#HandleCppCheckFormat(bufnr(''), [ - \ 'bar.cpp:974:6: error: Array ''n[3]'' accessed at index 3, which is out of bounds. [arrayIndexOutOfBounds]\', - \ ' n[3]=3;', - \ ' ^', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cpplint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cpplint_handler.vader deleted file mode 100644 index d8d7b8b7..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cpplint_handler.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - runtime ale_linters/cpp/cpplint.vim - -After: - call ale#linter#Reset() - -Execute(cpplint warnings from included files should be parsed correctly): - - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 0, - \ 'text': 'Extra space after ( in function call', - \ 'code': 'whitespace/parents', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 120, - \ 'col': 0, - \ 'text': 'At least two spaces is best between code and comments', - \ 'code': 'whitespace/comments', - \ 'type': 'W', - \ }, - \ ], - \ ale#handlers#cpplint#HandleCppLintFormat(347, [ - \ 'test.cpp:5: Extra space after ( in function call [whitespace/parents] [4]', - \ 'keymap_keys.hpp:120: At least two spaces is best between code and comments [whitespace/comments] [2]', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_credo_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_credo_handler.vader deleted file mode 100644 index 1fd54bb5..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_credo_handler.vader +++ /dev/null @@ -1,53 +0,0 @@ -Before: - runtime ale_linters/elixir/credo.vim - -After: - call ale#linter#Reset() - -Execute(The credo handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 347, - \ 'lnum': 1, - \ 'col': 24, - \ 'text': 'This code can be refactored', - \ 'type': 'W', - \ }, - \ { - \ 'bufnr': 347, - \ 'lnum': 1, - \ 'col': 4, - \ 'text': 'There is no whitespace around parentheses/brackets most of the time, but here there is.', - \ 'type': 'W', - \ }, - \ { - \ 'bufnr': 347, - \ 'lnum': 5, - \ 'col': 21, - \ 'text': 'TODO comment', - \ 'type': 'I', - \ }, - \ { - \ 'bufnr': 347, - \ 'lnum': 26, - \ 'col': 0, - \ 'text': 'If/else blocks should not have a negated condition in `if`.', - \ 'type': 'I', - \ }, - \ { - \ 'bufnr': 347, - \ 'lnum': 15, - \ 'col': 1, - \ 'text': 'Warning in the code', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#elixir#credo#Handle(347, [ - \ 'This line should be ignored completely', - \ 'lib/my_code/test.ex:1:24: F: This code can be refactored', - \ 'lib/filename.ex:1:4: C: There is no whitespace around parentheses/brackets most of the time, but here there is.', - \ 'lib/my_code/test.ex:5:21: D: TODO comment', - \ 'lib/phoenix/channel.ex:26: R: If/else blocks should not have a negated condition in `if`.', - \ 'lib/my_code/test.ex:15:1: W: Warning in the code', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_crystal_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_crystal_handler.vader deleted file mode 100644 index 209632e9..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_crystal_handler.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - runtime ale_linters/crystal/crystal.vim - -After: - call ale#linter#Reset() - -Execute(The crystal handler should parse lines correctly and add the column if it can): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'text': 'unexpected token: EOF' - \ } - \ ], - \ ale_linters#crystal#crystal#Handle(255, [ - \ '[{"file":"/tmp/test.cr","line":2,"column":1,"size":null,"message":"unexpected token: EOF"}]' - \ ]) - -Execute(The crystal handler should not fail when a missing file is required): - AssertEqual - \ [ { 'lnum':1, 'col': 1, 'text': 'while requiring "./nonexistent.cr"' } ], - \ ale_linters#crystal#crystal#Handle(255, - \ json_encode([ - \ { "file":"/tmp/file.cr","line":1,"column":1,"size":0,"message":"while requiring \"./nonexistent.cr\"" }, - \ { "message": "can't find file './nonexistent.cr' relative to '/tmp'" }, - \ ]) - \ ) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_csc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_csc_handler.vader deleted file mode 100644 index 3db5b6fd..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_csc_handler.vader +++ /dev/null @@ -1,98 +0,0 @@ -Before: - Save g:ale_cs_csc_source - - unlet! g:ale_cs_csc_source - - call ale#test#SetDirectory('/testplugin/test/handler') - call ale#test#SetFilename('Test.cs') - - runtime ale_linters/cs/csc.vim - -After: - unlet! g:ale_cs_csc_source - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The csc handler should work with the default of the buffer's directory): - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'col' : 29, - \ 'text': '; expected', - \ 'code': 'CS1001', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(g:dir . '/Test.cs'), - \ }, - \ ], - \ ale_linters#cs#csc#Handle(bufnr(''), [ - \ 'Test.cs(12,29): error CS1001: ; expected', - \ 'Compilation failed: 2 error(s), 1 warnings', - \ ]) - -Execute(The csc handler should handle cannot find symbol errors): - let g:ale_cs_csc_source = '/home/foo/project/bar' - - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'col' : 29, - \ 'text': '; expected', - \ 'code': 'CS1001', - \ 'type': 'E', - \ 'filename': ale#path#Simplify('/home/foo/project/bar/Test.cs'), - \ }, - \ { - \ 'lnum': 101, - \ 'col': 0, - \ 'text': 'Unexpected processor directive (no #if for this #endif)', - \ 'code': 'CS1028', - \ 'type': 'E', - \ 'filename': ale#path#Simplify('/home/foo/project/bar/Test.cs'), - \ }, - \ { - \ 'lnum': 10, - \ 'col': 12, - \ 'text': 'some warning', - \ 'code': 'CS0123', - \ 'type': 'W', - \ 'filename': ale#path#Simplify('/home/foo/project/bar/Test.cs'), - \ }, - \ ], - \ ale_linters#cs#csc#Handle(bufnr(''), [ - \ 'Test.cs(12,29): error CS1001: ; expected', - \ 'Test.cs(101,0): error CS1028: Unexpected processor directive (no #if for this #endif)', - \ 'Test.cs(10,12): warning CS0123: some warning', - \ 'Compilation failed: 2 error(s), 1 warnings', - \ ]) - -Execute(The csc handler should handle non file specific compiler errors without reporting overal status report as error): - let g:ale_cs_csc_source = '/home/foo/project/bar' - - AssertEqual - \ [ - \ { - \ 'lnum': -1, - \ 'col' : -1, - \ 'text': 'No source files specified.', - \ 'code': 'CS2008', - \ 'type': 'W', - \ 'filename': '', - \ }, - \ { - \ 'lnum': -1, - \ 'col': -1, - \ 'text': 'Outputs without source must have the /out option specified', - \ 'code': 'CS1562', - \ 'type': 'E', - \ 'filename': '', - \ }, - \ ], - \ ale_linters#cs#csc#Handle(bufnr(''), [ - \ 'Microsoft (R) Visual C# Compiler version 2.8.2.62916 (2ad4aabc)', - \ 'Copyright (C) Microsoft Corporation. All rights reserved.', - \ 'warning CS2008: No source files specified.', - \ 'error CS1562: Outputs without source must have the /out option specified', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cspell_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cspell_handler.vader deleted file mode 100644 index b74b8d22..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cspell_handler.vader +++ /dev/null @@ -1,13 +0,0 @@ -Execute(The cspell handler should handle cspell output): - AssertEqual - \ [ - \ { - \ 'lnum': 721, - \ 'col': 18, - \ 'type': 'W', - \ 'text': 'Unknown word (stylelint)', - \ }, - \ ], - \ ale#handlers#cspell#Handle(bufnr(''), - \ '/:721:18 - Unknown word (stylelint)' - \) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cucumber_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cucumber_handler.vader deleted file mode 100644 index 2b69a784..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cucumber_handler.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - runtime ale_linters/cucumber/cucumber.vim - -After: - call ale#linter#Reset() - -Execute(The cucumber handler parses JSON correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 13, - \ 'code': 'E', - \ 'text': 'Undefined step' - \ } - \ ], - \ ale_linters#cucumber#cucumber#Handle(bufnr(''), [ - \ '[{"elements": [{"steps": [{"result": {"status": "undefined"},"match": {"location": "features/cuke.feature:13"},"line": 13,"name": "Something undefined","keyword": "Given "},{"result": {"status": "skipped"},"match": {"location": "/var/lib/gems/2.3.0/gems/cucumber-3.1.0/lib/cucumber/step_match.rb:103"},"line": 14,"name": "I visit the profile page for Alice","keyword": "When "}],"type": "scenario","line": 12,"description": "","name": "Another scenario","keyword": "Scenario","id": "a-user-can-view-another-users-profile;another-scenario"}],"line": 1,"description": "","name": "A user can view another users profile","keyword": "Feature","id": "a-user-can-view-another-users-profile","uri": "features/cuke.feature"}]' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cuda_nvcc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cuda_nvcc_handler.vader deleted file mode 100644 index 40e31922..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cuda_nvcc_handler.vader +++ /dev/null @@ -1,41 +0,0 @@ -Before: - runtime ale_linters/cuda/nvcc.vim - -After: - call ale#linter#Reset() - -Execute(The cuda nvcc handler should parse errors from multiple files for NVCC 8.0): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': 'this declaration has no storage class or type specifier', - \ 'filename': has('win32') - \ ? 'C:\tmp\cudatest\test.cu' - \ : '/tmp/cudatest/test.cu', - \ }, - \ { - \ 'lnum': 2, - \ 'type': 'E', - \ 'text': 'attribute "global" does not apply here', - \ 'filename': has('win32') - \ ? 'C:\tmp\cudatest\common.h' - \ : '/tmp/cudatest/common.h', - \ }, - \ { - \ 'lnum': 2, - \ 'type': 'E', - \ 'text': 'expected a ";"', - \ 'filename': has('win32') - \ ? 'C:\tmp\cudatest\common.h' - \ : '/tmp/cudatest/common.h', - \ }, - \ ], - \ ale_linters#cuda#nvcc#HandleNVCCFormat(0, [ - \ '/tmp/cudatest/test.cu(1): error: this declaration has no storage class or type specifier', - \ '/tmp/cudatest/common.h(2): error: attribute "global" does not apply here', - \ '/tmp/cudatest/common.h(2): error: expected a ";"', - \ 'At end of source: warning: parsing restarts here after previous syntax error', - \ '3 errors detected in the compilation of "/tmp/tmpxft_00003a9f_00000000-7_test.cpp1.ii".', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_cypher_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_cypher_lint_handler.vader deleted file mode 100644 index 066adae4..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_cypher_lint_handler.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - runtime ale_linters/cypher/cypher_lint.vim - -After: - call ale#linter#Reset() - -Execute(The cypher-lint handler should handle errors for the current file correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 75, - \ 'type': 'E', - \ 'text': "Invalid input ',': expected an identifier, shortestPath, allShortestPaths or '('", - \ }, - \ ], - \ ale_linters#cypher#cypher_lint#Handle(bufnr(''), [ - \ "shakespeare.cql:1:75: Invalid input ',': expected an identifier, shortestPath, allShortestPaths or '('", - \ "CREATE (shakespeare:Author {firstname:'William', lastname:'Shakespeare'}),,", - \ " ^", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_dafny_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_dafny_handler.vader deleted file mode 100644 index 4ca288d2..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_dafny_handler.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - runtime ale_linters/dafny/dafny.vim - -After: - call ale#linter#Reset() - -Execute(The Dafny handler should parse output correctly): - AssertEqual - \ [ - \ { - \ 'filename': 'File.dfy', - \ 'col': 45, - \ 'lnum': 123, - \ 'text': 'A precondition for this call might not hold.', - \ 'type': 'E' - \ }, - \ { - \ 'filename': 'File.dfy', - \ 'col': 90, - \ 'lnum': 678, - \ 'text': 'This is the precondition that might not hold.', - \ 'type': 'W' - \ }, - \ { - \ 'filename': 'File.dfy', - \ 'col': 45, - \ 'lnum': 123, - \ 'text': "Verification of 'Impl$$_22_Proof.__default.PutKeepsMapsFull' timed out after 2 seconds", - \ 'type': 'E' - \ }, - \ ], - \ ale_linters#dafny#dafny#Handle(0, [ - \ 'File.dfy(123,45): Error BP5002: A precondition for this call might not hold.', - \ 'File.dfy(678,90): Related location: This is the precondition that might not hold.', - \ "File.dfy(123,45): Verification of 'Impl$$_22_Proof.__default.PutKeepsMapsFull' timed out after 2 seconds", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_dart_analyze_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_dart_analyze_handler.vader deleted file mode 100644 index f167582c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_dart_analyze_handler.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - runtime ale_linters/dart/dart_analyze.vim - -After: - call ale#linter#Reset() - -Execute(Basic problems should be parsed correctly): - AssertEqual - \ [ - \ { - \ 'type': 'E', - \ 'text': 'expected_token: Expected to find ''}''', - \ 'lnum': 5, - \ 'col': 1, - \ }, - \ { - \ 'type': 'W', - \ 'text': 'invalid_assignment: A value of type ''String'' can''t be assigned to a variable of type ''int''', - \ 'lnum': 2, - \ 'col': 16, - \ }, - \ { - \ 'type': 'I', - \ 'text': 'dead_code: Dead code. Try removing the code, or fixing the code before it so that it can be reached.', - \ 'lnum': 8, - \ 'col': 3, - \ }, - \ ], - \ ale_linters#dart#dart_analyze#Handle(bufnr(''), [ - \ 'Analyzing main.dart...', - \ ' error - main.dart:5:1 - Expected to find ''}'' - expected_token', - \ 'warning - main.dart:2:16 - A value of type ''String'' can''t be assigned to a variable of type ''int'' - invalid_assignment', - \ ' info - main.dart:8:3 - Dead code. Try removing the code, or fixing the code before it so that it can be reached. - dead_code', - \ '3 issues found.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_debride_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_debride_handler.vader deleted file mode 100644 index 62851468..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_debride_handler.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - runtime ale_linters/ruby/debride.vim - -After: - call ale#linter#Reset() - -Execute(The debride linter parses output correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'text': 'Possible unused method: image_tags', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 7, - \ 'text': 'Possible unused method: not_deleted', - \ 'type': 'W', - \ } - \ ], - \ ale_linters#ruby#debride#HandleOutput(0, [ - \ 'These methods MIGHT not be called:', - \ '', - \ 'Image', - \ ' image_tags app/models/image.rb:2', - \ ' not_deleted app/models/image.rb:7' - \]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_desktop_file_validate_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_desktop_file_validate_handler.vader deleted file mode 100644 index 88163433..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_desktop_file_validate_handler.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - runtime ale_linters/desktop/desktop_file_validate.vim - -After: - call ale#linter#Reset() - -Execute(The desktop-file-validate handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'key "TerminalOptions" in group "Desktop Entry" is deprecated', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'action "new-private-window" is defined, but there is no matching "Desktop Action new-private-window" group', - \ }, - \ ], - \ ale_linters#desktop#desktop_file_validate#Handle(bufnr(''), [ - \ 'foo.desktop: warning: key "TerminalOptions" in group "Desktop Entry" is deprecated', - \ 'foo.desktop: error: action "new-private-window" is defined, but there is no matching "Desktop Action new-private-window" group', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_dmd_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_dmd_handler.vader deleted file mode 100644 index 32a04982..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_dmd_handler.vader +++ /dev/null @@ -1,41 +0,0 @@ -Before: - runtime ale_linters/d/dmd.vim - call ale#test#SetDirectory('/testplugin/test/dmd') - call ale#test#SetFilename('test.d') - -After: - call ale#linter#Reset() - call ale#test#RestoreDirectory() - -Execute(Basic errors should be handled by dmd): - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify(g:dir . '/test.d'), - \ 'lnum': '5', - \ 'col' : '8', - \ 'type': 'E', - \ 'text': 'module weak_reference is in file ''dstruct/weak_reference.d'' which cannot be read' - \ }, - \ { - \ 'filename': ale#path#Simplify(g:dir . '/test.d'), - \ 'lnum': '20', - \ 'col' : '10', - \ 'type': 'W', - \ 'text': 'function test.thisoldfunc is deprecated' - \ }, - \ { - \ 'filename': ale#path#Simplify(g:dir . '/foo.d'), - \ 'lnum': '230', - \ 'col' : '9', - \ 'type': 'W', - \ 'text': 'statement is not reachable' - \ } - \ ], - \ ale_linters#d#dmd#Handle(bufnr(''), [ - \ 'test.d(5,8): Error: module weak_reference is in file ''dstruct/weak_reference.d'' which cannot be read', - \ 'import path[0] = source', - \ 'import path[1] = /usr/include/dlang/dmd', - \ ale#path#Simplify(g:dir . '/test.d') . '(20,10): Deprecation: function test.thisoldfunc is deprecated', - \ 'foo.d(230,9): Warning: statement is not reachable', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_dockerfile_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_dockerfile_lint_handler.vader deleted file mode 100644 index a73db8cd..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_dockerfile_lint_handler.vader +++ /dev/null @@ -1,112 +0,0 @@ -Before: - runtime ale_linters/dockerfile/dockerfile_lint.vim - -After: - call ale#linter#Reset() - -Execute(The dockerfile_lint handler should handle broken JSON): - AssertEqual - \ [], - \ ale_linters#dockerfile#dockerfile_lint#Handle(bufnr(''), ["{asdf"]) - -Execute(The dockerfile_lint handler should handle an empty string response): - AssertEqual - \ [], - \ ale_linters#dockerfile#dockerfile_lint#Handle(bufnr(''), []) - -Execute(The dockerfile_lint handler should handle an empty result, even if it shouldn't happen): - AssertEqual - \ [], - \ ale_linters#dockerfile#dockerfile_lint#Handle(bufnr(''), ["{}"]) - -Execute(The dockerfile_lint handler should handle a normal example): - AssertEqual - \ [ - \ { - \ 'lnum': -1, - \ 'type': 'E', - \ 'text': "Required LABEL name/key 'Name' is not defined", - \ 'detail': "Required LABEL name/key 'Name' is not defined\n\nhttp://docs.projectatomic.io/container-best-practices/#_recommended_labels_for_your_project", - \ }, - \ { - \ 'lnum': -1, - \ 'type': 'E', - \ 'text': "Required LABEL name/key 'Version' is not defined", - \ 'detail': "Required LABEL name/key 'Version' is not defined\n\nhttp://docs.projectatomic.io/container-best-practices/#_recommended_labels_for_your_project", - \ }, - \ { - \ 'lnum': 3, - \ 'type': 'I', - \ 'text': "the MAINTAINER command is deprecated", - \ 'detail': "the MAINTAINER command is deprecated\n\nMAINTAINER is deprecated in favor of using LABEL since Docker v1.13.0\n\nhttps://github.com/docker/cli/blob/master/docs/deprecated.md#maintainer-in-dockerfile", - \ }, - \ { - \ 'lnum': -1, - \ 'type': 'I', - \ 'text': "There is no 'CMD' instruction", - \ 'detail': "There is no 'CMD' instruction\n\nhttps://docs.docker.com/engine/reference/builder/#cmd", - \ }, - \ ], - \ ale_linters#dockerfile#dockerfile_lint#Handle(bufnr(''), [ - \ '{', - \ ' "error": {', - \ ' "count": 2,', - \ ' "data": [', - \ ' {', - \ " \"message\": \"Required LABEL name/key 'Name' is not defined\",", - \ ' "line": -1,', - \ ' "level": "error",', - \ ' "lineContent": "",', - \ ' "reference_url": [', - \ ' "http://docs.projectatomic.io/container-best-practices/#",', - \ ' "_recommended_labels_for_your_project"', - \ ' ]', - \ ' },', - \ ' {', - \ " \"message\": \"Required LABEL name/key 'Version' is not defined\",", - \ ' "line": -1,', - \ ' "level": "error",', - \ ' "lineContent": "",', - \ ' "reference_url": [', - \ ' "http://docs.projectatomic.io/container-best-practices/#",', - \ ' "_recommended_labels_for_your_project"', - \ ' ]', - \ ' }', - \ ' ]', - \ ' },', - \ ' "warn": {', - \ ' "count": 0,', - \ ' "data": []', - \ ' },', - \ ' "info": {', - \ ' "count": 2,', - \ ' "data": [', - \ ' {', - \ ' "label": "maintainer_deprecated",', - \ ' "regex": {},', - \ ' "level": "info",', - \ ' "message": "the MAINTAINER command is deprecated",', - \ ' "description": "MAINTAINER is deprecated in favor of using LABEL since Docker v1.13.0",', - \ ' "reference_url": [', - \ ' "https://github.com/docker/cli/blob/master/docs/deprecated.md",', - \ ' "#maintainer-in-dockerfile"', - \ ' ],', - \ ' "lineContent": "MAINTAINER Alexander Olofsson ",', - \ ' "line": 3', - \ ' },', - \ ' {', - \ ' "instruction": "CMD",', - \ ' "count": 1,', - \ ' "level": "info",', - \ " \"message\": \"There is no 'CMD' instruction\",", - \ ' "description": "None",', - \ ' "reference_url": [', - \ ' "https://docs.docker.com/engine/reference/builder/",', - \ ' "#cmd"', - \ ' ]', - \ ' }', - \ ' ]', - \ ' },', - \ ' "summary": []', - \ '}', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_dogma_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_dogma_handler.vader deleted file mode 100644 index ead6d09f..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_dogma_handler.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - runtime ale_linters/elixir/dogma.vim - -After: - call ale#linter#Reset() - -Execute(The dogma handler should parse lines correctly): - - AssertEqual - \ [ - \ { - \ 'bufnr': 347, - \ 'lnum': 18, - \ 'col': 5, - \ 'text': 'Some error', - \ 'type': 'E', - \ }, - \ { - \ 'bufnr': 347, - \ 'lnum': 19, - \ 'col': 7, - \ 'text': 'Some warning', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#elixir#dogma#Handle(347, [ - \ 'This line should be ignored completely', - \ 'lib/filename.ex:18:5: C: Some error', - \ 'lib/filename.ex:19:7: R: Some warning', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_drafter_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_drafter_handler.vader deleted file mode 100644 index 1524dde1..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_drafter_handler.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - runtime! ale_linters/apiblueprint/drafter.vim - -After: - call ale#linter#Reset() - -Execute(drafter handler should handle errors output): - AssertEqual - \ [ - \ { - \ 'lnum': 25, - \ 'col': 3, - \ 'text': "unable to parse response signature, expected 'response [] [()]'", - \ 'type': "W", - \ }, - \ { - \ 'lnum': 25, - \ 'col': 3, - \ 'text': "missing response HTTP status code, assuming 'Response 200'", - \ 'type': "W", - \ }, - \ { - \ 'lnum': 30, - \ 'col': 7, - \ 'end_lnum': 32, - \ 'end_col': 7, - \ 'text': "message-body asset is expected to be a pre-formatted code block, separate it by a newline and indent every of its line by 12 spaces or 3 tabs", - \ 'type': "W", - \ }, - \ ], - \ ale_linters#apiblueprint#drafter#HandleErrors(bufnr(''), [ - \ "", - \ "OK.", - \ "warning: (3) unable to parse response signature, expected 'response [] [()]'; line 25, column 3 - line 25, column 29", - \ "warning: (6) missing response HTTP status code, assuming 'Response 200'; line 25, column 3 - line 25, column 29", - \ "warning: (10) message-body asset is expected to be a pre-formatted code block, separate it by a newline and indent every of its line by 12 spaces or 3 tabs; line 30, column 7 - line 30, column 11; line 31, column 6 - line 31, column 7; line 32, column 6 - line 32, column 7" - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_elmmake_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_elmmake_handler.vader deleted file mode 100644 index f5906a8b..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_elmmake_handler.vader +++ /dev/null @@ -1,299 +0,0 @@ -Before: - runtime ale_linters/elm/make.vim - -After: - unlet! g:config_error_lines - - call ale#linter#Reset() - - -" Elm 0.19 - -Execute(The elm-make handler should parse Elm 0.19 general problems correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': "error details\n\nstyled details" - \ } - \ ], - \ ale_linters#elm#make#Handle(347, [ - \ json_encode({ - \ 'type': 'error', - \ 'path': ale#util#Tempname() . '/Module.elm', - \ 'title': 'UNKNOWN IMPORT', - \ 'message': ["error details\n\n", { 'string': 'styled details' }] - \ }), - \ ]) - -Execute(The elm-make handler should parse Elm 0.19 compilation errors correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 404, - \ 'col': 1, - \ 'end_lnum': 408, - \ 'end_col': 18, - \ 'type': 'E', - \ 'text': "error details 1\n\nstyled details" - \ }, - \ { - \ 'lnum': 406, - \ 'col': 5, - \ 'end_lnum': 407, - \ 'end_col': 17, - \ 'type': 'E', - \ 'text': 'error details 2', - \ }, - \ { - \ 'lnum': 406, - \ 'col': 5, - \ 'end_lnum': 406, - \ 'end_col': 93, - \ 'type': 'E', - \ 'text': 'error details 3', - \ }, - \ ], - \ ale_linters#elm#make#Handle(347, [ - \ json_encode({ - \ 'type': 'compile-errors', - \ 'errors': [ - \ { - \ 'path': ale#util#Tempname() . '/Module.elm', - \ 'problems': [ - \ { - \ 'title': 'TYPE MISMATCH', - \ 'message': ["error details 1\n\n", { 'string': 'styled details' }], - \ 'region': { 'start': { 'line': 404, 'column': 1 }, 'end': { 'line': 408, 'column': 18 } } - \ }, - \ { - \ 'title': 'TYPE MISMATCH', - \ 'message': ['error details 2'], - \ 'region': { 'start': {'line': 406, 'column': 5}, 'end': {'line': 407, 'column': 17 } } - \ }, - \ { - \ 'title': 'TYPE MISMATCH', - \ 'message': ['error details 3'], - \ 'region': { 'start': { 'line': 406, 'column': 5}, 'end': {'line': 406, 'column': 93 } } - \ } - \ ] - \ } - \ ] - \ }), - \ ]) - -Execute(The elm-make handler should handle errors in Elm 0.19 imported modules): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': "src/Module.elm - error details\n\nstyled details", - \ 'detail': "src/Module.elm ----------\n\nerror details\n\nstyled details" - \ }, - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': "Elm - error details\n\nstyled details", - \ 'detail': "Elm ----------\n\nerror details\n\nstyled details" - \ }, - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': "src/Module.elm:404 - error details\n\nstyled details", - \ 'detail': "src/Module.elm:404 ----------\n\nerror details\n\nstyled details" - \ }, - \ ], - \ ale_linters#elm#make#Handle(347, [ - \ json_encode({ - \ 'type': 'error', - \ 'path': 'src/Module.elm', - \ 'title': 'UNKNOWN IMPORT', - \ 'message': ["error details\n\n", { 'string': 'styled details' }] - \ }), - \ json_encode({ - \ 'type': 'error', - \ 'path': v:null, - \ 'title': 'UNKNOWN IMPORT', - \ 'message': ["error details\n\n", { 'string': 'styled details' }] - \ }), - \ json_encode({ - \ 'type': 'compile-errors', - \ 'errors': [ - \ { - \ 'path': 'src/Module.elm', - \ 'problems': [ - \ { - \ 'title': 'TYPE MISMATCH', - \ 'message': ["error details\n\n", { 'string': 'styled details' }], - \ 'region': { 'start': { 'line': 404, 'column': 1 }, 'end': { 'line': 408, 'column': 18 } } - \ } - \ ] - \ } - \ ] - \ }), - \ ]) - - -" Elm 0.18 - -Execute(The elm-make handler should parse Elm 0.18 compilation errors correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 33, - \ 'col': 1, - \ 'end_lnum': 33, - \ 'end_col': 19, - \ 'type': 'W', - \ 'text': 'warning overview', - \ 'detail': "warning overview\n\nwarning details", - \ }, - \ { - \ 'lnum': 404, - \ 'col': 1, - \ 'end_lnum': 408, - \ 'end_col': 18, - \ 'type': 'E', - \ 'text': 'error overview 1', - \ 'detail': "error overview 1\n\nerror details 1", - \ }, - \ { - \ 'lnum': 406, - \ 'col': 5, - \ 'end_lnum': 407, - \ 'end_col': 17, - \ 'type': 'E', - \ 'text': 'error overview 2', - \ 'detail': "error overview 2\n\nerror details 2", - \ }, - \ { - \ 'lnum': 406, - \ 'col': 5, - \ 'end_lnum': 406, - \ 'end_col': 93, - \ 'type': 'E', - \ 'text': 'error overview 3', - \ 'detail': "error overview 3\n\nerror details 3", - \ }, - \ ], - \ ale_linters#elm#make#Handle(347, [ - \ json_encode([ - \ { - \ 'tag': 'unused import', - \ 'overview': 'warning overview', - \ 'details': 'warning details', - \ 'region': {'start': { 'line': 33, 'column': 1 }, 'end': { 'line': 33, 'column': 19 } }, - \ 'type': 'warning', - \ 'file': ale#util#Tempname() . '/Module.elm', - \ } - \ ]), - \ json_encode([ - \ { - \ 'tag': 'TYPE MISMATCH', - \ 'overview': 'error overview 1', - \ 'subregion': { 'start': { 'line': 406, 'column': 5 }, 'end': { 'line': 408, 'column': 18 } }, - \ 'details': 'error details 1', - \ 'region': { 'start': { 'line': 404, 'column': 1 }, 'end': { 'line': 408, 'column': 18 } }, - \ 'type': 'error', - \ 'file': ale#util#Tempname() . '/Module.elm', - \ }, - \ { - \ 'tag': 'TYPE MISMATCH', - \ 'overview': 'error overview 2', - \ 'subregion': { 'start': { 'line': 407, 'column': 12 }, 'end': { 'line': 407, 'column': 17 } }, - \ 'details': 'error details 2', - \ 'region': { 'start': { 'line': 406, 'column': 5}, 'end': { 'line': 407, 'column': 17 } }, - \ 'type':'error', - \ 'file': ale#util#Tempname() . '/Module.elm', - \ }, - \ { - \ 'tag': 'TYPE MISMATCH', - \ 'overview': 'error overview 3', - \ 'subregion': { 'start': { 'line': 406, 'column': 88 }, 'end': { 'line': 406, 'column': 93 } }, - \ 'details': 'error details 3', - \ 'region': { 'start': { 'line': 406, 'column': 5 }, 'end': { 'line': 406, 'column': 93 } }, - \ 'type':'error', - \ 'file': ale#util#Tempname() . '/Module.elm', - \ } - \ ]), - \ ]) - -Execute(The elm-make handler should handle errors in Elm 0.18 imported modules): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': 'src/Module.elm:33 - error overview', - \ 'detail': "src/Module.elm:33 ----------\n\nerror overview\n\nerror details" - \ } - \ ], - \ ale_linters#elm#make#Handle(347, [ - \ json_encode([ - \ { - \ 'tag': 'unused import', - \ 'overview': 'warning overview', - \ 'details': 'warning details', - \ 'region': {'start': { 'line': 33, 'column': 1 }, 'end': { 'line': 33, 'column': 19 } }, - \ 'type': 'warning', - \ 'file': 'src/Module.elm', - \ }, - \ { - \ 'tag': 'type error', - \ 'overview': 'error overview', - \ 'details': 'error details', - \ 'region': {'start': { 'line': 33, 'column': 1 }, 'end': { 'line': 33, 'column': 19 } }, - \ 'type': 'error', - \ 'file': 'src/Module.elm', - \ } - \ ]), - \ ]) - -" Generic - -Execute(The elm-make handler should put an error on the first line if a line cannot be parsed): - AssertEqual - \ [ - \ { - \ 'lnum': 404, - \ 'col': 1, - \ 'end_lnum': 408, - \ 'end_col': 18, - \ 'type': 'E', - \ 'text': "error details 1\n\nstyled details" - \ }, - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': 'Not JSON', - \ 'detail': "Not JSON\nAlso not JSON", - \ }, - \ ], - \ ale_linters#elm#make#Handle(347, [ - \ json_encode({ - \ 'type': 'compile-errors', - \ 'errors': [ - \ { - \ 'path': ale#util#Tempname() . '/Module.elm', - \ 'problems': [ - \ { - \ 'title': 'TYPE MISMATCH', - \ 'message': ["error details 1\n\n", { 'string': 'styled details' }], - \ 'region': { 'start': { 'line': 404, 'column': 1 }, 'end': { 'line': 408, 'column': 18 } } - \ } - \ ] - \ } - \ ] - \ }), - \ 'Not JSON', - \ 'Also not JSON', - \ ]) - -Execute(The elm-make handler should ignore success lines): - AssertEqual - \ [], - \ ale_linters#elm#make#Handle(347, [ - \ 'Successfully generated /dev/null', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_embertemplatelint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_embertemplatelint_handler.vader deleted file mode 100644 index 97ca4390..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_embertemplatelint_handler.vader +++ /dev/null @@ -1,81 +0,0 @@ -" Author: Adrian Zalewski -Before: - runtime ale_linters/handlebars/embertemplatelint.vim - -After: - call ale#linter#Reset() - -Execute(The ember-template-lint handler should parse lines correctly): - let input_lines = split('{ - \ "/ember-project/app/templates/application.hbs": [ - \ { - \ "moduleId": "app/templates/application", - \ "rule": "bare-strings", - \ "severity": 2, - \ "message": "Non-translated string used", - \ "line": 1, - \ "column": 10, - \ "source": " Bare String\n" - \ }, - \ { - \ "moduleId": "app/templates/application", - \ "rule": "invalid-interactive", - \ "severity": 1, - \ "message": "Interaction added to non-interactive element", - \ "line": 3, - \ "column": 6, - \ "source": "" - \ } - \ ] - \ }', '\n') - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'text': 'bare-strings: Non-translated string used', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 6, - \ 'text': 'invalid-interactive: Interaction added to non-interactive element', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#handlebars#embertemplatelint#Handle(347, input_lines) - -Execute(The ember-template-lint handler should handle template parsing error correctly): - let input_lines = split('{ - \ "/ember-project/app/templates/application.hbs": [ - \ { - \ "fatal": true, - \ "moduleId": "app/templates/application", - \ "message": "Parse error on line 5 ...", - \ "line": 5, - \ "column": 3, - \ "source": "Error: Parse error on line 5 ...", - \ "severity": 2 - \ } - \ ] - \ }', '\n') - - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 3, - \ 'text': 'Parse error on line 5 ...', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#handlebars#embertemplatelint#Handle(347, input_lines) - -Execute(The ember-template-lint handler should handle no lint errors/warnings): - AssertEqual - \ [], - \ ale_linters#handlebars#embertemplatelint#Handle(347, []) - AssertEqual - \ [], - \ ale_linters#handlebars#embertemplatelint#Handle(347, ['{}']) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_erblint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_erblint_handler.vader deleted file mode 100644 index 01d4c0ab..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_erblint_handler.vader +++ /dev/null @@ -1,70 +0,0 @@ -Before: - runtime ale_linters/eruby/erblint.vim - -After: - unlet! g:lines - call ale#linter#Reset() - -Execute(The erblint handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'col': 0, - \ 'end_col': 0, - \ 'text': 'Extra blank line detected.', - \ 'code': 'ExtraNewline', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 6, - \ 'col': 0, - \ 'end_col': 0, - \ 'text': 'Remove multiple trailing newline at the end of the file.', - \ 'code': 'FinalNewline', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 9, - \ 'end_col': 11, - \ 'text': 'Use 1 space after `<%=` instead of 2 spaces.', - \ 'code': 'SpaceAroundErbTag', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 9, - \ 'end_col': 11, - \ 'text': 'Use 1 space before `%>` instead of 2 spaces.', - \ 'code': 'SpaceAroundErbTag', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 5, - \ 'col': 6, - \ 'end_col': 10, - \ 'text': 'Extra whitespace detected at end of line.', - \ 'code': 'TrailingWhitespace', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#eruby#erblint#Handle(347, [ - \ '{"metadata":{"erb_lint_version":"0.1.1","ruby_engine":"ruby","ruby_version":"3.0.2","ruby_patchlevel":"107","ruby_platform":"arm64-darwin20"},"files":[{"path":"demo.html.erb","offenses":[{"linter":"ExtraNewline","message":"Extra blank line detected.","location":{"start_line":3,"start_column":0,"last_line":4,"last_column":0,"length":1}},{"linter":"FinalNewline","message":"Remove multiple trailing newline at the end of the file.","location":{"start_line":6,"start_column":0,"last_line":8,"last_column":0,"length":2}},{"linter":"SpaceAroundErbTag","message":"Use 1 space after `<%=` instead of 2 spaces.","location":{"start_line":4,"start_column":9,"last_line":4,"last_column":11,"length":2}},{"linter":"SpaceAroundErbTag","message":"Use 1 space before `%>` instead of 2 spaces.","location":{"start_line":4,"start_column":9,"last_line":4,"last_column":11,"length":2}},{"linter":"TrailingWhitespace","message":"Extra whitespace detected at end of line.","location":{"start_line":5,"start_column":6,"last_line":5,"last_column":10,"length":4}}]}],"summary":{"offenses":5,"inspected_files":1,"corrected":0}}' - \ ]) - -Execute(The erblint handler should handle when files are checked and no offenses are found): - AssertEqual - \ [], - \ ale_linters#eruby#erblint#Handle(347, [ - \ '{"metadata":{"erb_lint_version":"0.1.1","ruby_engine":"ruby","ruby_version":"3.0.2","ruby_patchlevel":"107","ruby_platform":"arm64-darwin20"},"files":[{"path":"demo.html.erb","offenses":[]}],"summary":{"offenses":0,"inspected_files":1,"corrected":0}}' - \ ]) - -Execute(The erblint handler should handle output without any errors): - AssertEqual - \ [], - \ ale_linters#eruby#erblint#Handle(347, ['{}']) - - AssertEqual - \ [], - \ ale_linters#eruby#erblint#Handle(347, []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_erlang_dialyzer_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_erlang_dialyzer_handler.vader deleted file mode 100644 index afd5c597..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_erlang_dialyzer_handler.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - runtime ale_linters/erlang/dialyzer.vim - -After: - call ale#linter#Reset() - -Execute(The dialyzer handler should handle error messages.): - AssertEqual - \[ - \ { - \ 'lnum': 3, - \ 'lcol': 0, - \ 'text': 'Callback info about the provider behaviour is not available', - \ 'type': 'W' - \ } - \], - \ ale_linters#erlang#dialyzer#Handle(bufnr(''), ['erl_tidy_prv_fmt.erl:3: Callback info about the provider behaviour is not available']) - -Execute(The dialyzer handler should handle empty file.): - AssertEqual - \[], - \ ale_linters#erlang#dialyzer#Handle(bufnr(''), []) - -Execute(The dialyzer handler should handle empty lines.): - AssertEqual - \[], - \ ale_linters#erlang#dialyzer#Handle(bufnr(''), ['']) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_erlang_elvis_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_erlang_elvis_handler.vader deleted file mode 100644 index 0a6d756d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_erlang_elvis_handler.vader +++ /dev/null @@ -1,40 +0,0 @@ -Before: - runtime ale_linters/erlang/elvis.vim - -After: - call ale#linter#Reset() - -Execute(Warning messages should be handled): - AssertEqual - \ [ - \ { - \ 'lnum': 11, - \ 'text': "Replace the 'if' expression on line 11 with a 'case' expression or function clauses.", - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 20, - \ 'text': 'Remove the debug call to io:format/1 on line 20.', - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ ], - \ ale_linters#erlang#elvis#Handle(bufnr(''), [ - \ "src/foo.erl:11:no_if_expression:Replace the 'if' expression on line 11 with a 'case' expression or function clauses.", - \ 'src/foo.erl:20:no_debug_call:Remove the debug call to io:format/1 on line 20.', - \ ]) - -Execute(Line length message shouldn't contain the line itself): - AssertEqual - \ [ - \ { - \ 'lnum': 24, - \ 'text': 'Line 24 is too long.', - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ ], - \ ale_linters#erlang#elvis#Handle(bufnr(''), [ - \ 'src/foo.erl:24:line_length:Line 24 is too long: io:format("Look ma, too long!"),.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_eslint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_eslint_handler.vader deleted file mode 100644 index 01dd2c8f..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_eslint_handler.vader +++ /dev/null @@ -1,438 +0,0 @@ -Before: - Save g:ale_javascript_eslint_suppress_eslintignore - Save g:ale_javascript_eslint_suppress_missing_config - Save g:ale_warn_about_trailing_whitespace - Save g:ale_warn_about_trailing_blank_lines - - let g:ale_javascript_eslint_suppress_eslintignore = 0 - let g:ale_javascript_eslint_suppress_missing_config = 0 - let g:ale_warn_about_trailing_whitespace = 1 - let g:ale_warn_about_trailing_blank_lines = 1 - unlet! b:ale_warn_about_trailing_whitespace - unlet! b:ale_warn_about_trailing_blank_lines - -After: - Restore - - unlet! b:ale_javascript_eslint_suppress_eslintignore - unlet! b:ale_javascript_eslint_suppress_missing_config - unlet! b:ale_warn_about_trailing_whitespace - unlet! b:ale_warn_about_trailing_blank_lines - unlet! g:config_error_lines - -Execute(The eslint handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 47, - \ 'col': 14, - \ 'text': 'Missing trailing comma.', - \ 'code': 'comma-dangle', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 56, - \ 'col': 41, - \ 'text': 'Missing semicolon.', - \ 'code': 'semi', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 13, - \ 'col': 3, - \ 'text': 'Parsing error: Unexpected token', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ 'This line should be ignored completely', - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ 'This line should be ignored completely', - \ '/path/to/some-filename.js:13:3: Parsing error: Unexpected token', - \ ]) - -Execute(The eslint handler should print a message about a missing configuration file): - let g:config_error_lines = [ - \ '', - \ 'Oops! Something went wrong! :(', - \ '', - \ 'ESLint couldn''t find a configuration file. To set up a configuration file for this project, please run:', - \ ' eslint --init', - \ '', - \ 'ESLint looked for configuration files in /some/path/or/other and its ancestors.', - \ '', - \ 'If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://gitter.im/eslint/eslint', - \ '', - \ ] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should allow the missing config error to be suppressed): - let b:ale_javascript_eslint_suppress_missing_config = 1 - let g:config_error_lines = [ - \ '', - \ 'Oops! Something went wrong! :(', - \ '', - \ 'ESLint couldn''t find a configuration file. To set up a configuration file for this project, please run:', - \ ' eslint --init', - \ '', - \ 'ESLint looked for configuration files in /some/path/or/other and its ancestors.', - \ '', - \ 'If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://gitter.im/eslint/eslint', - \ '', - \ ] - - AssertEqual - \ [], - \ ale#handlers#eslint#Handle(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should print a message for config parsing errors): - let g:config_error_lines = [ - \ 'Cannot read config file: /some/path/or/other/.eslintrc.js', - \ 'Error: Unexpected token <<', - \ '/some/path/or/other/.eslintrc.js:1', - \ '(function (exports, require, module, __filename, __dirname) { <<<>>>', - \ ' ^^', - \ 'SyntaxError: Unexpected token <<', - \ ' at Object.exports.runInThisContext (vm.js:76:16)', - \ ' at Module._compile (module.js:528:28)', - \ ' at Object.Module._extensions..js (module.js:565:10)', - \ ' at Module.load (module.js:473:32)', - \ ' at tryModuleLoad (module.js:432:12)', - \ ' at Function.Module._load (module.js:424:3)', - \ ' at Module.require (module.js:483:17)', - \ ' at require (internal/module.js:20:19)', - \ ' at module.exports (/usr/local/lib/node_modules/eslint/node_modules/require-uncached/index.js:14:12)', - \ ' at loadJSConfigFile (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:160:16)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), g:config_error_lines[:]) - -Execute(Suppressing missing configs shouldn't suppress parsing errors): - let b:ale_javascript_eslint_suppress_missing_config = 1 - let g:config_error_lines = [ - \ 'Cannot read config file: /some/path/or/other/.eslintrc.js', - \ 'Error: Unexpected token <<', - \ '/some/path/or/other/.eslintrc.js:1', - \ '(function (exports, require, module, __filename, __dirname) { <<<>>>', - \ ' ^^', - \ 'SyntaxError: Unexpected token <<', - \ ' at Object.exports.runInThisContext (vm.js:76:16)', - \ ' at Module._compile (module.js:528:28)', - \ ' at Object.Module._extensions..js (module.js:565:10)', - \ ' at Module.load (module.js:473:32)', - \ ' at tryModuleLoad (module.js:432:12)', - \ ' at Function.Module._load (module.js:424:3)', - \ ' at Module.require (module.js:483:17)', - \ ' at require (internal/module.js:20:19)', - \ ' at module.exports (/usr/local/lib/node_modules/eslint/node_modules/require-uncached/index.js:14:12)', - \ ' at loadJSConfigFile (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:160:16)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should print a message for invalid configuration settings): - let g:config_error_lines = [ - \ '/home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:', - \ ' Configuration for rule "indent" is invalid:', - \ ' Value "off" is the wrong type.', - \ '', - \ 'Error: /home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:', - \ ' Configuration for rule "indent" is invalid:', - \ ' Value "off" is the wrong type.', - \ '', - \ ' at validateRuleOptions (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:115:15)', - \ ' at /usr/local/lib/node_modules/eslint/lib/config/config-validator.js:162:13', - \ ' at Array.forEach (native)', - \ ' at Object.validate (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:161:35)', - \ ' at Object.load (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:522:19)', - \ ' at loadConfig (/usr/local/lib/node_modules/eslint/lib/config.js:63:33)', - \ ' at getLocalConfig (/usr/local/lib/node_modules/eslint/lib/config.js:130:29)', - \ ' at Config.getConfig (/usr/local/lib/node_modules/eslint/lib/config.js:256:22)', - \ ' at processText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:224:33)', - \ ' at CLIEngine.executeOnText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:756:26)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), g:config_error_lines[:]) - -Execute(Suppressing missing configs shouldn't suppress invalid config errors): - let b:ale_javascript_eslint_suppress_missing_config = 1 - let g:config_error_lines = [ - \ '/home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:', - \ ' Configuration for rule "indent" is invalid:', - \ ' Value "off" is the wrong type.', - \ '', - \ 'Error: /home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:', - \ ' Configuration for rule "indent" is invalid:', - \ ' Value "off" is the wrong type.', - \ '', - \ ' at validateRuleOptions (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:115:15)', - \ ' at /usr/local/lib/node_modules/eslint/lib/config/config-validator.js:162:13', - \ ' at Array.forEach (native)', - \ ' at Object.validate (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:161:35)', - \ ' at Object.load (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:522:19)', - \ ' at loadConfig (/usr/local/lib/node_modules/eslint/lib/config.js:63:33)', - \ ' at getLocalConfig (/usr/local/lib/node_modules/eslint/lib/config.js:130:29)', - \ ' at Config.getConfig (/usr/local/lib/node_modules/eslint/lib/config.js:256:22)', - \ ' at processText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:224:33)', - \ ' at CLIEngine.executeOnText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:756:26)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should print a message when import is not used in a module): - let g:config_error_lines = [ - \ 'ImportDeclaration should appear when the mode is ES6 and in the module context.', - \ 'AssertionError: ImportDeclaration should appear when the mode is ES6 and in the module context.', - \ ' at Referencer.ImportDeclaration (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:597:9)', - \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)', - \ ' at Referencer.Visitor.visitChildren (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:101:38)', - \ ' at Referencer.Program (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:449:14)', - \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)', - \ ' at Object.analyze (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/index.js:138:16)', - \ ' at EventEmitter.module.exports.api.verify (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/eslint.js:887:40)', - \ ' at processText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:278:31)', - \ ' at CLIEngine.executeOnText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:734:26)', - \ ' at Object.execute (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli.js:171:42) ', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), g:config_error_lines[:]) - -Execute(Suppressing missing configs shouldn't suppress module import errors): - let b:ale_javascript_eslint_suppress_missing_config = 1 - let g:config_error_lines = [ - \ 'ImportDeclaration should appear when the mode is ES6 and in the module context.', - \ 'AssertionError: ImportDeclaration should appear when the mode is ES6 and in the module context.', - \ ' at Referencer.ImportDeclaration (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:597:9)', - \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)', - \ ' at Referencer.Visitor.visitChildren (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:101:38)', - \ ' at Referencer.Program (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:449:14)', - \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)', - \ ' at Object.analyze (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/index.js:138:16)', - \ ' at EventEmitter.module.exports.api.verify (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/eslint.js:887:40)', - \ ' at processText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:278:31)', - \ ' at CLIEngine.executeOnText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:734:26)', - \ ' at Object.execute (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli.js:171:42) ', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), g:config_error_lines[:]) - - -Execute(The eslint handler should output end_col values where appropriate): - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'col': 3, - \ 'end_col': 15, - \ 'text': 'Parsing error: Unexpected token ''some string''', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 70, - \ 'col': 3, - \ 'end_col': 5, - \ 'text': '''foo'' is not defined.', - \ 'code': 'no-undef', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 71, - \ 'col': 2, - \ 'end_col': 6, - \ 'text': 'Unexpected `await` inside a loop.', - \ 'code': 'no-await-in-loop', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 72, - \ 'col': 6, - \ 'end_col': 10, - \ 'text': 'Redundant use of `await` on a return value.', - \ 'code': 'no-return-await', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 73, - \ 'col': 4, - \ 'end_col': 10, - \ 'text': 'Unexpected console statement', - \ 'code': 'no-console', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 74, - \ 'col': 4, - \ 'end_col': 11, - \ 'text': 'Unexpected ''debugger'' statement.', - \ 'code': 'no-debugger', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ 'app.js:4:3: Parsing error: Unexpected token ''some string'' [Error]', - \ 'app.js:70:3: ''foo'' is not defined. [Error/no-undef]', - \ 'app.js:71:2: Unexpected `await` inside a loop. [Error/no-await-in-loop]', - \ 'app.js:72:6: Redundant use of `await` on a return value. [Error/no-return-await]', - \ 'app.js:73:4: Unexpected console statement [Error/no-console]', - \ 'app.js:74:4: Unexpected ''debugger'' statement. [Error/no-debugger]', - \ ]) - -Execute(The eslint hint about using typescript-eslint-parser): - silent! noautocmd file foo.ts - - AssertEqual - \ [ - \ { - \ 'lnum': 451, - \ 'col': 2, - \ 'end_col': 2, - \ 'text': 'Parsing error (You may need configure typescript-eslint-parser): Unexpected token )', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ 'foo.ts:451:2: Parsing error: Unexpected token ) [Error]', - \ ]) - -Execute(eslint should warn about ignored files by default): - AssertEqual - \ [{ - \ 'lnum': 0, - \ 'col': 0, - \ 'type': 'W', - \ 'text': 'File ignored because of a matching ignore pattern. Use "--no-ignore" to override.' - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ '/path/to/some/ignored.js:0:0: File ignored because of a matching ignore pattern. Use "--no-ignore" to override. [Warning]', - \ ]) - - AssertEqual - \ [{ - \ 'lnum': 0, - \ 'col': 0, - \ 'type': 'W', - \ 'text': 'File ignored by default. Use "--ignore-pattern ''!node_modules/*''" to override.', - \ }], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ '/path/to/some/ignored.js:0:0: File ignored by default. Use "--ignore-pattern ''!node_modules/*''" to override. [Warning]', - \ ]) - -Execute(eslint should not warn about ignored files when explicitly disabled): - let g:ale_javascript_eslint_suppress_eslintignore = 1 - - AssertEqual - \ [], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ '/path/to/some/ignored.js:0:0: File ignored because of a matching ignore pattern. Use "--no-ignore" to override. [Warning]', - \ ]) - - AssertEqual - \ [], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ '/path/to/some/ignored.js:0:0: File ignored by default. Use "--ignore-pattern ''!node_modules/*''" to override. [Warning]', - \ ]) - -Execute(eslint should handle react errors correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 59, - \ 'col': 9, - \ 'type': 'E', - \ 'text': 'Property should be placed on the same line as the component declaration', - \ 'code': 'react/jsx-first-prop-new-line', - \ }, - \ ], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ '/path/editor-help.jsx:59:9: Property should be placed on the same line as the component declaration [Error/react/jsx-first-prop-new-line]', - \ ]) - -Execute(Failing to connect to eslint_d should be handled correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': 'Could not connect to eslint_d. Try updating eslint_d or killing it.', - \ }, - \ ], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ 'Could not connect', - \ ]) - -Execute(Disabling warnings about trailing spaces should work): - silent! noautocmd file foo.ts - - AssertEqual - \ [ - \ { - \ 'lnum': 182, - \ 'col': 22, - \ 'code': 'no-trailing-spaces', - \ 'type': 'E', - \ 'text': 'Trailing spaces not allowed.', - \ }, - \ ], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ 'foo.js:182:22: Trailing spaces not allowed. [Error/no-trailing-spaces]', - \ ]) - - let g:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ 'foo.js:182:22: Trailing spaces not allowed. [Error/no-trailing-spaces]', - \ ]) - - let g:ale_warn_about_trailing_whitespace = 1 - let b:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [], - \ ale#handlers#eslint#Handle(bufnr(''), [ - \ 'foo.js:182:22: Trailing spaces not allowed. [Error/no-trailing-spaces]', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_eslint_json_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_eslint_json_handler.vader deleted file mode 100644 index 6235794a..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_eslint_json_handler.vader +++ /dev/null @@ -1,376 +0,0 @@ -Before: - Save g:ale_javascript_eslint_suppress_eslintignore - Save g:ale_javascript_eslint_suppress_missing_config - Save g:ale_warn_about_trailing_whitespace - Save g:ale_warn_about_trailing_blank_lines - - let g:ale_javascript_eslint_suppress_eslintignore = 0 - let g:ale_javascript_eslint_suppress_missing_config = 0 - let g:ale_warn_about_trailing_whitespace = 1 - let g:ale_warn_about_trailing_blank_lines = 1 - unlet! b:ale_warn_about_trailing_whitespace - unlet! b:ale_warn_about_trailing_blank_lines - -After: - Restore - - unlet! b:ale_javascript_eslint_suppress_eslintignore - unlet! b:ale_javascript_eslint_suppress_missing_config - unlet! b:ale_warn_about_trailing_whitespace - unlet! b:ale_warn_about_trailing_blank_lines - unlet! g:config_error_lines - -Execute(The eslint handler should parse json correctly): - call ale#test#SetFilename('foo.js') - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'end_lnum': 1, - \ 'col': 7, - \ 'end_col': 14, - \ 'text': '''variable'' is assigned a value but never used.', - \ 'code': 'no-unused-vars', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 5, - \ 'col': 15, - \ 'text': 'Missing semicolon.', - \ 'code': 'semi', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 7, - \ 'end_lnum': 7, - \ 'col': 7, - \ 'end_col': 14, - \ 'text': '''variable'' is already defined.', - \ 'code': 'no-redeclare', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"foo.js","messages":[{"ruleId":"no-unused-vars","severity":1,"message":"''variable'' is assigned a value but never used.","line":1,"column":7,"nodeType":"Identifier","endLine":1,"endColumn":15},{"ruleId":"semi","severity":1,"message":"Missing semicolon.","line":5,"column":15,"nodeType":"ExpressionStatement","fix":{"range":[46,46],"text":";"}},{"ruleId":"no-redeclare","severity":2,"message":"''variable'' is already defined.","line":7,"column":7,"nodeType":"Identifier","endLine":7,"endColumn":15}],"errorCount":1,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":1,"source":"const variable = {\n a: 3\n};\n\nconsole.log(1)\n\nclass variable {\n}\n"}]' - \ ]) - -Execute(The eslint handler should suppress deprecation warnings): - call ale#test#SetFilename('foo.js') - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 9, - \ 'text': 'Parsing error: Unexpected token Controller', - \ 'type': 'E', - \ } - \ ], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"foo.js","messages":[{"ruleId":null,"fatal":true,"severity":2 ,"message":"Parsing error: Unexpected token Controller","line":1,"column":9}],"errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount": 0,"source":"i:mport Controller from \"@ember/controller\";\nimport listViewControllerMixin from \"elearning/mixins/list-view-controller\";\nimport { inject as service } from \"@ember/service\";\n\nexport default Controller.extend(listViewControllerMixin(), {\n modelName: \"notification\",\n intl: service(),\n\n flatpickrLocale: computed(\"intl.locale\", function() {\n return this.intl.locale.firstObject.split(\"-\")[0];\n })\n});\n"}]', '(node:616989) [ESLINT_LEGACY_OBJECT_REST_SPREAD] DeprecationWarning: The ''parserOptions.ecmaFeatures.experimentalObjectRestSpread'' option is deprecated. Use ''parser Options.ecmaVersion'' instead. (found in "node_modules/eslint-plugin-ember/lib/config/base.js")]' - \ ]) - -Execute(The eslint handler should print a message about a missing configuration file): - let g:config_error_lines = [ - \ '', - \ 'Oops! Something went wrong! :(', - \ '', - \ 'ESLint couldn''t find a configuration file. To set up a configuration file for this project, please run:', - \ ' eslint --init', - \ '', - \ 'ESLint looked for configuration files in /some/path/or/other and its ancestors.', - \ '', - \ 'If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://gitter.im/eslint/eslint', - \ '', - \ ] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should allow the missing config error to be suppressed): - let b:ale_javascript_eslint_suppress_missing_config = 1 - let g:config_error_lines = [ - \ '', - \ 'Oops! Something went wrong! :(', - \ '', - \ 'ESLint couldn''t find a configuration file. To set up a configuration file for this project, please run:', - \ ' eslint --init', - \ '', - \ 'ESLint looked for configuration files in /some/path/or/other and its ancestors.', - \ '', - \ 'If you think you already have a configuration file or if you need more help, please stop by the ESLint chat room: https://gitter.im/eslint/eslint', - \ '', - \ ] - - AssertEqual - \ [], - \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should print a message for config parsing errors): - let g:config_error_lines = [ - \ 'Cannot read config file: /some/path/or/other/.eslintrc.js', - \ 'Error: Unexpected token <<', - \ '/some/path/or/other/.eslintrc.js:1', - \ '(function (exports, require, module, __filename, __dirname) { <<<>>>', - \ ' ^^', - \ 'SyntaxError: Unexpected token <<', - \ ' at Object.exports.runInThisContext (vm.js:76:16)', - \ ' at Module._compile (module.js:528:28)', - \ ' at Object.Module._extensions..js (module.js:565:10)', - \ ' at Module.load (module.js:473:32)', - \ ' at tryModuleLoad (module.js:432:12)', - \ ' at Function.Module._load (module.js:424:3)', - \ ' at Module.require (module.js:483:17)', - \ ' at require (internal/module.js:20:19)', - \ ' at module.exports (/usr/local/lib/node_modules/eslint/node_modules/require-uncached/index.js:14:12)', - \ ' at loadJSConfigFile (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:160:16)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:]) - -Execute(Suppressing missing configs shouldn't suppress parsing errors): - let b:ale_javascript_eslint_suppress_missing_config = 1 - let g:config_error_lines = [ - \ 'Cannot read config file: /some/path/or/other/.eslintrc.js', - \ 'Error: Unexpected token <<', - \ '/some/path/or/other/.eslintrc.js:1', - \ '(function (exports, require, module, __filename, __dirname) { <<<>>>', - \ ' ^^', - \ 'SyntaxError: Unexpected token <<', - \ ' at Object.exports.runInThisContext (vm.js:76:16)', - \ ' at Module._compile (module.js:528:28)', - \ ' at Object.Module._extensions..js (module.js:565:10)', - \ ' at Module.load (module.js:473:32)', - \ ' at tryModuleLoad (module.js:432:12)', - \ ' at Function.Module._load (module.js:424:3)', - \ ' at Module.require (module.js:483:17)', - \ ' at require (internal/module.js:20:19)', - \ ' at module.exports (/usr/local/lib/node_modules/eslint/node_modules/require-uncached/index.js:14:12)', - \ ' at loadJSConfigFile (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:160:16)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should print a message for invalid configuration settings): - let g:config_error_lines = [ - \ '/home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:', - \ ' Configuration for rule "indent" is invalid:', - \ ' Value "off" is the wrong type.', - \ '', - \ 'Error: /home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:', - \ ' Configuration for rule "indent" is invalid:', - \ ' Value "off" is the wrong type.', - \ '', - \ ' at validateRuleOptions (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:115:15)', - \ ' at /usr/local/lib/node_modules/eslint/lib/config/config-validator.js:162:13', - \ ' at Array.forEach (native)', - \ ' at Object.validate (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:161:35)', - \ ' at Object.load (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:522:19)', - \ ' at loadConfig (/usr/local/lib/node_modules/eslint/lib/config.js:63:33)', - \ ' at getLocalConfig (/usr/local/lib/node_modules/eslint/lib/config.js:130:29)', - \ ' at Config.getConfig (/usr/local/lib/node_modules/eslint/lib/config.js:256:22)', - \ ' at processText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:224:33)', - \ ' at CLIEngine.executeOnText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:756:26)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:]) - -Execute(Suppressing missing configs shouldn't suppress invalid config errors): - let b:ale_javascript_eslint_suppress_missing_config = 1 - let g:config_error_lines = [ - \ '/home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:', - \ ' Configuration for rule "indent" is invalid:', - \ ' Value "off" is the wrong type.', - \ '', - \ 'Error: /home/w0rp/git/wazoku/wazoku-spotlight/.eslintrc.js:', - \ ' Configuration for rule "indent" is invalid:', - \ ' Value "off" is the wrong type.', - \ '', - \ ' at validateRuleOptions (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:115:15)', - \ ' at /usr/local/lib/node_modules/eslint/lib/config/config-validator.js:162:13', - \ ' at Array.forEach (native)', - \ ' at Object.validate (/usr/local/lib/node_modules/eslint/lib/config/config-validator.js:161:35)', - \ ' at Object.load (/usr/local/lib/node_modules/eslint/lib/config/config-file.js:522:19)', - \ ' at loadConfig (/usr/local/lib/node_modules/eslint/lib/config.js:63:33)', - \ ' at getLocalConfig (/usr/local/lib/node_modules/eslint/lib/config.js:130:29)', - \ ' at Config.getConfig (/usr/local/lib/node_modules/eslint/lib/config.js:256:22)', - \ ' at processText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:224:33)', - \ ' at CLIEngine.executeOnText (/usr/local/lib/node_modules/eslint/lib/cli-engine.js:756:26)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should print a message when import is not used in a module): - let g:config_error_lines = [ - \ 'ImportDeclaration should appear when the mode is ES6 and in the module context.', - \ 'AssertionError: ImportDeclaration should appear when the mode is ES6 and in the module context.', - \ ' at Referencer.ImportDeclaration (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:597:9)', - \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)', - \ ' at Referencer.Visitor.visitChildren (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:101:38)', - \ ' at Referencer.Program (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:449:14)', - \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)', - \ ' at Object.analyze (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/index.js:138:16)', - \ ' at EventEmitter.module.exports.api.verify (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/eslint.js:887:40)', - \ ' at processText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:278:31)', - \ ' at CLIEngine.executeOnText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:734:26)', - \ ' at Object.execute (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli.js:171:42) ', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:]) - -Execute(Suppressing missing configs shouldn't suppress module import errors): - let b:ale_javascript_eslint_suppress_missing_config = 1 - let g:config_error_lines = [ - \ 'ImportDeclaration should appear when the mode is ES6 and in the module context.', - \ 'AssertionError: ImportDeclaration should appear when the mode is ES6 and in the module context.', - \ ' at Referencer.ImportDeclaration (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:597:9)', - \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)', - \ ' at Referencer.Visitor.visitChildren (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:101:38)', - \ ' at Referencer.Program (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/referencer.js:449:14)', - \ ' at Referencer.Visitor.visit (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/esrecurse/esrecurse.js:122:34)', - \ ' at Object.analyze (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint-scope/lib/index.js:138:16)', - \ ' at EventEmitter.module.exports.api.verify (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/eslint.js:887:40)', - \ ' at processText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:278:31)', - \ ' at CLIEngine.executeOnText (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli-engine.js:734:26)', - \ ' at Object.execute (/home/w0rp/git/wazoku/wazoku-spotlight/spotlight/static/node_modules/eslint/lib/cli.js:171:42) ', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'eslint configuration error (type :ALEDetail for more information)', - \ 'detail': join(g:config_error_lines, "\n"), - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), g:config_error_lines[:]) - -Execute(The eslint handler should hint about using typescript-eslint-parser): - call ale#test#SetFilename('foo.ts') - - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'text': 'Parsing error (You may need configure typescript-eslint-parser): The keyword ''interface'' is reserved', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"foo.ts","messages":[{"ruleId":null,"fatal":true,"severity":2,"message":"Parsing error: The keyword ''interface'' is reserved","line":2,"column":1}],"errorCount":1,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"source":"\ninterface test {}\n"}]', - \ ]) - -Execute(eslint should warn about ignored files by default): - AssertEqual - \ [{ - \ 'lnum': 0, - \ 'type': 'W', - \ 'text': 'File ignored because of a matching ignore pattern. Use "--no-ignore" to override.' - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"/path/to/some/ignored/file.js","messages":[{"fatal":false,"severity":1,"message":"File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0}]', - \ ]) - - AssertEqual - \ [{ - \ 'lnum': 0, - \ 'type': 'W', - \ 'text': 'File ignored by default. Use "--ignore-pattern ''!node_modules/*''" to override.', - \ }], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"/path/to/some/ignored/file.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use \"--ignore-pattern ''!node_modules/*''\" to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0}]', - \ ]) - -Execute(eslint should not warn about ignored files when explicitly disabled): - let g:ale_javascript_eslint_suppress_eslintignore = 1 - - AssertEqual - \ [], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"/path/to/some/ignored/file.js","messages":[{"fatal":false,"severity":1,"message":"File ignored because of a matching ignore pattern. Use \"--no-ignore\" to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0}]', - \ ]) - - AssertEqual - \ [], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"/path/to/some/ignored/file.js","messages":[{"fatal":false,"severity":1,"message":"File ignored by default. Use \"--ignore-pattern ''!node_modules/*''\" to override."}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0}]', - \ ]) - -Execute(Failing to connect to eslint_d should be handled correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': 'Could not connect to eslint_d. Try updating eslint_d or killing it.', - \ }, - \ ], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ 'Could not connect', - \ ]) - -Execute(Disabling warnings about trailing spaces should work): - call ale#test#SetFilename('foo.js') - - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 16, - \ 'code': 'no-trailing-spaces', - \ 'type': 'W', - \ 'text': 'Trailing spaces not allowed.', - \ }, - \ ], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"foo.js","messages":[{"ruleId":"no-trailing-spaces","severity":1,"message":"Trailing spaces not allowed.","line":2,"column":16,"nodeType":"Program","fix":{"range":[16,17],"text":""}}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"\nconsole.log(1); \n"}]' - \ ]) - - let g:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"foo.js","messages":[{"ruleId":"no-trailing-spaces","severity":1,"message":"Trailing spaces not allowed.","line":2,"column":16,"nodeType":"Program","fix":{"range":[16,17],"text":""}}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"\nconsole.log(1); \n"}]' - \ ]) - - let g:ale_warn_about_trailing_whitespace = 1 - let b:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [], - \ ale#handlers#eslint#HandleJSON(bufnr(''), [ - \ '[{"filePath":"foo.js","messages":[{"ruleId":"no-trailing-spaces","severity":1,"message":"Trailing spaces not allowed.","line":2,"column":16,"nodeType":"Program","fix":{"range":[16,17],"text":""}}],"errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"\nconsole.log(1); \n"}]' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_fecs_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_fecs_handler.vader deleted file mode 100644 index 7c216b8d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_fecs_handler.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - runtime autoload/ale/handlers/fecs.vim - -After: - call ale#linter#Reset() - -Execute(fecs should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 20, - \ 'col': 25, - \ 'text': 'Unexpected console statement.', - \ 'code': 'no-console', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 24, - \ 'col': 36, - \ 'text': 'Missing radix parameter.', - \ 'code': 'radix', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 25, - \ 'col': 6, - \ 'text': 'Missing static property value.', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#fecs#Handle(347, [ - \ 'fecs WARN → line 20, col 25: Unexpected console statement. (no-console)', - \ 'fecs ERROR → line 24, col 36: Missing radix parameter. (radix)', - \ 'fecs ERROR → line 25, col 6: Missing static property value.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_fish_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_fish_handler.vader deleted file mode 100644 index ad3a963c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_fish_handler.vader +++ /dev/null @@ -1,61 +0,0 @@ -Before: - runtime ale_linters/fish/fish.vim - -After: - call ale#linter#Reset() - -Execute(The fish handler should handle basic warnings and syntax errors): - AssertEqual - \ [ - \ { - \ 'lnum': 20, - \ 'col': 23, - \ 'text': "Unsupported use of '||'. In fish, please use 'COMMAND; or COMMAND'.", - \ }, - \ { - \ 'lnum': 26, - \ 'col': 7, - \ 'text': "Illegal command name '(prompt_pwd)'", - \ }, - \ { - \ 'lnum': 36, - \ 'col': 1, - \ 'text': "'end' outside of a block", - \ }, - \ ], - \ ale_linters#fish#fish#Handle(1, [ - \ "fish_prompt.fish (line 20): Unsupported use of '||'. In fish, please use 'COMMAND; or COMMAND'.", - \ 'if set -q SSH_CLIENT || set -q SSH_TTY', - \ ' ^', - \ "fish_prompt.fish (line 26): Illegal command name '(prompt_pwd)'", - \ ' (prompt_pwd) \', - \ ' ^', - \ "fish_prompt.fish (line 36): 'end' outside of a block", - \ 'end', - \ '^', - \ 'config.fish (line 45):', - \ "abbr --add p 'cd ~/Projects'", - \ '^', - \ ]) - -Execute(The fish handler should handle problems where the problem before before the line with the line number): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 23, - \ 'text': 'Unsupported use of ''||''. In fish, please use ''COMMAND; or COMMAND''.', - \ }, - \ { - \ 'lnum': 5, - \ 'col': 1, - \ 'text': 'wat', - \ }, - \ ], - \ ale_linters#fish#fish#Handle(bufnr(''), [ - \ 'Unsupported use of ''||''. In fish, please use ''COMMAND; or COMMAND''.', - \ '/tmp/vLz620o/258/test.fish (line 2): if set -q SSH_CLIENT || set -q SSH_TTY', - \ ' ^', - \ '/tmp/vLz620o/258/test.fish (line 5): wat', - \ ' ^', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_flake8_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_flake8_handler.vader deleted file mode 100644 index 1c9956fa..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_flake8_handler.vader +++ /dev/null @@ -1,276 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_blank_lines - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_blank_lines = 1 - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/python/flake8.vim - -After: - Restore - - unlet! b:ale_warn_about_trailing_blank_lines - unlet! b:ale_warn_about_trailing_whitespace - - call ale#linter#Reset() - -Execute(The flake8 handler should handle basic warnings and syntax errors): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 6, - \ 'vcol': 1, - \ 'type': 'E', - \ 'text': 'indentation is not a multiple of four', - \ 'code': 'E111', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 6, - \ 'vcol': 1, - \ 'type': 'W', - \ 'text': 'some warning', - \ 'code': 'W123', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 8, - \ 'col': 3, - \ 'vcol': 1, - \ 'type': 'E', - \ 'text': 'SyntaxError: invalid syntax', - \ 'code': 'E999', - \ }, - \ ], - \ ale_linters#python#flake8#Handle(1, [ - \ 'stdin:6:6: E111 indentation is not a multiple of four', - \ 'stdin:7:6: W123 some warning', - \ 'stdin:8:3: E999 SyntaxError: invalid syntax', - \ ]) - -Execute(The flake8 handler should set end column indexes for certain errors): - AssertEqual - \ [ - \ { - \ 'lnum': 25, - \ 'col': 1, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 3, - \ 'text': 'undefined name ''foo''', - \ 'code': 'F821', - \ }, - \ { - \ 'lnum': 28, - \ 'col': 5, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 9, - \ 'text': 'hello may be undefined, or defined from star imports: x', - \ 'code': 'F405', - \ }, - \ { - \ 'lnum': 104, - \ 'col': 5, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 12, - \ 'text': '''continue'' not properly in loop', - \ 'code': 'F999', - \ }, - \ { - \ 'lnum': 106, - \ 'col': 5, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 9, - \ 'text': '''break'' outside loop', - \ 'code': 'F999', - \ }, - \ { - \ 'lnum': 109, - \ 'col': 5, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 8, - \ 'text': 'local variable ''test'' is assigned to but never used', - \ 'code': 'F841', - \ }, - \ ], - \ ale_linters#python#flake8#Handle(1, [ - \ 'foo.py:25:1: F821 undefined name ''foo''', - \ 'foo.py:28:5: F405 hello may be undefined, or defined from star imports: x', - \ 'foo.py:104:5: F999 ''continue'' not properly in loop', - \ 'foo.py:106:5: F999 ''break'' outside loop', - \ 'foo.py:109:5: F841 local variable ''test'' is assigned to but never used', - \ ]) - -Execute(The flake8 handler should handle stack traces): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': 'ImportError: No module named parser (See :ALEDetail)', - \ 'detail': join([ - \ 'Traceback (most recent call last):', - \ ' File "/usr/local/bin/flake8", line 7, in ', - \ ' from flake8.main.cli import main', - \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/main/cli.py", line 2, in ', - \ ' from flake8.main import application', - \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/main/application.py", line 17, in ', - \ ' from flake8.plugins import manager as plugin_manager', - \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/plugins/manager.py", line 5, in ', - \ ' import pkg_resources', - \ ' File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 35, in ', - \ ' import email.parser', - \ 'ImportError: No module named parser', - \ ], "\n"), - \ }, - \ ], - \ ale_linters#python#flake8#Handle(42, [ - \ 'Traceback (most recent call last):', - \ ' File "/usr/local/bin/flake8", line 7, in ', - \ ' from flake8.main.cli import main', - \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/main/cli.py", line 2, in ', - \ ' from flake8.main import application', - \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/main/application.py", line 17, in ', - \ ' from flake8.plugins import manager as plugin_manager', - \ ' File "/usr/local/lib/python2.7/dist-packages/flake8/plugins/manager.py", line 5, in ', - \ ' import pkg_resources', - \ ' File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 35, in ', - \ ' import email.parser', - \ 'ImportError: No module named parser', - \ ]) - -Execute(The flake8 handler should handle names with spaces): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 6, - \ 'vcol': 1, - \ 'type': 'E', - \ 'text': 'indentation is not a multiple of four', - \ 'code': 'E111', - \ 'sub_type': 'style', - \ }, - \ ], - \ ale_linters#python#flake8#Handle(42, [ - \ 'C:\something\with spaces.py:6:6: E111 indentation is not a multiple of four', - \ ]) - -Execute(Warnings about trailing whitespace should be reported by default): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'W291', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'who cares', - \ }, - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'W293', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'who cares', - \ }, - \ ], - \ ale_linters#python#flake8#Handle(bufnr(''), [ - \ 'foo.py:6:1: W291 who cares', - \ 'foo.py:6:1: W293 who cares', - \ ]) - -Execute(Disabling trailing whitespace warnings should work): - let b:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [ - \ ], - \ ale_linters#python#flake8#Handle(bufnr(''), [ - \ 'foo.py:6:1: W291 who cares', - \ 'foo.py:6:1: W293 who cares', - \ ]) - -Execute(Warnings about trailing blank lines should be reported by default): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'W391', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'blank line at end of file', - \ }, - \ ], - \ ale_linters#python#flake8#Handle(bufnr(''), [ - \ 'foo.py:6:1: W391 blank line at end of file', - \ ]) - -Execute(Disabling trailing blank line warnings should work): - let b:ale_warn_about_trailing_blank_lines = 0 - - AssertEqual - \ [ - \ ], - \ ale_linters#python#flake8#Handle(bufnr(''), [ - \ 'foo.py:6:1: W391 blank line at end of file', - \ ]) - -Execute(F401 should be a warning): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'F401', - \ 'type': 'W', - \ 'text': 'module imported but unused', - \ }, - \ ], - \ ale_linters#python#flake8#Handle(bufnr(''), [ - \ 'foo.py:6:1: F401 module imported but unused', - \ ]) - -Execute(E112 should be a syntax error): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'E112', - \ 'type': 'E', - \ 'text': 'expected an indented block', - \ }, - \ ], - \ ale_linters#python#flake8#Handle(bufnr(''), [ - \ 'foo.py:6:1: E112 expected an indented block', - \ ]) - -Execute(Compatibility with hacking which uses older style flake8): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'H306', - \ 'type': 'W', - \ 'text': 'imports not in alphabetical order (smtplib, io)', - \ }, - \ ], - \ ale_linters#python#flake8#Handle(bufnr(''), [ - \ 'foo.py:6:1: H306: imports not in alphabetical order (smtplib, io)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_flakehell_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_flakehell_handler.vader deleted file mode 100644 index 1f77bd96..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_flakehell_handler.vader +++ /dev/null @@ -1,276 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_blank_lines - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_blank_lines = 1 - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/python/flakehell.vim - -After: - Restore - - unlet! b:ale_warn_about_trailing_blank_lines - unlet! b:ale_warn_about_trailing_whitespace - - call ale#linter#Reset() - -Execute(The flakehell handler should handle basic warnings and syntax errors): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 6, - \ 'vcol': 1, - \ 'type': 'E', - \ 'text': 'indentation is not a multiple of four', - \ 'code': 'E111', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 6, - \ 'vcol': 1, - \ 'type': 'W', - \ 'text': 'some warning', - \ 'code': 'W123', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 8, - \ 'col': 3, - \ 'vcol': 1, - \ 'type': 'E', - \ 'text': 'SyntaxError: invalid syntax', - \ 'code': 'E999', - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(1, [ - \ 'stdin:6:6: E111 indentation is not a multiple of four', - \ 'stdin:7:6: W123 some warning', - \ 'stdin:8:3: E999 SyntaxError: invalid syntax', - \ ]) - -Execute(The flakehell handler should set end column indexes for certain errors): - AssertEqual - \ [ - \ { - \ 'lnum': 25, - \ 'col': 1, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 3, - \ 'text': 'undefined name ''foo''', - \ 'code': 'F821', - \ }, - \ { - \ 'lnum': 28, - \ 'col': 5, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 9, - \ 'text': 'hello may be undefined, or defined from star imports: x', - \ 'code': 'F405', - \ }, - \ { - \ 'lnum': 104, - \ 'col': 5, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 12, - \ 'text': '''continue'' not properly in loop', - \ 'code': 'F999', - \ }, - \ { - \ 'lnum': 106, - \ 'col': 5, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 9, - \ 'text': '''break'' outside loop', - \ 'code': 'F999', - \ }, - \ { - \ 'lnum': 109, - \ 'col': 5, - \ 'vcol': 1, - \ 'type': 'E', - \ 'end_col': 8, - \ 'text': 'local variable ''test'' is assigned to but never used', - \ 'code': 'F841', - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(1, [ - \ 'foo.py:25:1: F821 undefined name ''foo''', - \ 'foo.py:28:5: F405 hello may be undefined, or defined from star imports: x', - \ 'foo.py:104:5: F999 ''continue'' not properly in loop', - \ 'foo.py:106:5: F999 ''break'' outside loop', - \ 'foo.py:109:5: F841 local variable ''test'' is assigned to but never used', - \ ]) - -Execute(The flakehell handler should handle stack traces): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': 'ImportError: No module named parser (See :ALEDetail)', - \ 'detail': join([ - \ 'Traceback (most recent call last):', - \ ' File "/usr/local/bin/flakehell", line 7, in ', - \ ' from flakehell.main.cli import main', - \ ' File "/usr/local/lib/python2.7/dist-packages/flakehell/main/cli.py", line 2, in ', - \ ' from flakehell.main import application', - \ ' File "/usr/local/lib/python2.7/dist-packages/flakehell/main/application.py", line 17, in ', - \ ' from flakehell.plugins import manager as plugin_manager', - \ ' File "/usr/local/lib/python2.7/dist-packages/flakehell/plugins/manager.py", line 5, in ', - \ ' import pkg_resources', - \ ' File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 35, in ', - \ ' import email.parser', - \ 'ImportError: No module named parser', - \ ], "\n"), - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(42, [ - \ 'Traceback (most recent call last):', - \ ' File "/usr/local/bin/flakehell", line 7, in ', - \ ' from flakehell.main.cli import main', - \ ' File "/usr/local/lib/python2.7/dist-packages/flakehell/main/cli.py", line 2, in ', - \ ' from flakehell.main import application', - \ ' File "/usr/local/lib/python2.7/dist-packages/flakehell/main/application.py", line 17, in ', - \ ' from flakehell.plugins import manager as plugin_manager', - \ ' File "/usr/local/lib/python2.7/dist-packages/flakehell/plugins/manager.py", line 5, in ', - \ ' import pkg_resources', - \ ' File "/usr/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 35, in ', - \ ' import email.parser', - \ 'ImportError: No module named parser', - \ ]) - -Execute(The flakehell handler should handle names with spaces): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 6, - \ 'vcol': 1, - \ 'type': 'E', - \ 'text': 'indentation is not a multiple of four', - \ 'code': 'E111', - \ 'sub_type': 'style', - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(42, [ - \ 'C:\something\with spaces.py:6:6: E111 indentation is not a multiple of four', - \ ]) - -Execute(Warnings about trailing whitespace should be reported by default): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'W291', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'who cares', - \ }, - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'W293', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'who cares', - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(bufnr(''), [ - \ 'foo.py:6:1: W291 who cares', - \ 'foo.py:6:1: W293 who cares', - \ ]) - -Execute(Disabling trailing whitespace warnings should work): - let b:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [ - \ ], - \ ale_linters#python#flakehell#Handle(bufnr(''), [ - \ 'foo.py:6:1: W291 who cares', - \ 'foo.py:6:1: W293 who cares', - \ ]) - -Execute(Warnings about trailing blank lines should be reported by default): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'W391', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'blank line at end of file', - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(bufnr(''), [ - \ 'foo.py:6:1: W391 blank line at end of file', - \ ]) - -Execute(Disabling trailing blank line warnings should work): - let b:ale_warn_about_trailing_blank_lines = 0 - - AssertEqual - \ [ - \ ], - \ ale_linters#python#flakehell#Handle(bufnr(''), [ - \ 'foo.py:6:1: W391 blank line at end of file', - \ ]) - -Execute(F401 should be a warning): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'F401', - \ 'type': 'W', - \ 'text': 'module imported but unused', - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(bufnr(''), [ - \ 'foo.py:6:1: F401 module imported but unused', - \ ]) - -Execute(E112 should be a syntax error): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'E112', - \ 'type': 'E', - \ 'text': 'expected an indented block', - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(bufnr(''), [ - \ 'foo.py:6:1: E112 expected an indented block', - \ ]) - -Execute(Compatibility with hacking which uses older style flakehell): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'vcol': 1, - \ 'code': 'H306', - \ 'type': 'W', - \ 'text': 'imports not in alphabetical order (smtplib, io)', - \ }, - \ ], - \ ale_linters#python#flakehell#Handle(bufnr(''), [ - \ 'foo.py:6:1: H306: imports not in alphabetical order (smtplib, io)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_flawfinder_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_flawfinder_handler.vader deleted file mode 100644 index 708bac2a..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_flawfinder_handler.vader +++ /dev/null @@ -1,57 +0,0 @@ -Before: - Save g:ale_c_flawfinder_error_severity - - unlet! g:ale_c_flawfinder_error_severity - unlet! b:ale_c_flawfinder_error_severity - - runtime ale_linters/c/flawfinder.vim - -After: - unlet! g:ale_c_flawfinder_error_severity - Restore - -Execute(The Flawfinder handler should ignore other lines of output): - AssertEqual - \ [], - \ ale#handlers#flawfinder#HandleFlawfinderFormat(347, [ - \ 'foo', - \ 'bar', - \ 'baz', - \ ]) - -Execute(The Flawfinder handler should work): - AssertEqual - \ [ - \ { - \ 'lnum': 31, - \ 'col': 4, - \ 'type': 'W', - \ 'text': "(buffer) strncpy: Easily used incorrectly", - \ }, - \ ], - \ ale#handlers#flawfinder#HandleFlawfinderFormat(347, [ - \ ":31:4: [1] (buffer) strncpy:Easily used incorrectly", - \ ]) - -Execute(The Flawfinder error severity level should be configurable): - let b:ale_c_flawfinder_error_severity = 2 - - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'col': 4, - \ 'type': 'E', - \ 'text': "(buffer) char: Statically-sized arrays can be bad", - \ }, - \ { - \ 'lnum': 31, - \ 'col': 4, - \ 'type': 'W', - \ 'text': "(buffer) strncpy: Easily used incorrectly", - \ }, - \ ], - \ ale#handlers#flawfinder#HandleFlawfinderFormat(bufnr(''), [ - \ ":12:4: [2] (buffer) char:Statically-sized arrays can be bad", - \ ":31:4: [1] (buffer) strncpy:Easily used incorrectly", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_flow_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_flow_handler.vader deleted file mode 100644 index 055ba026..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_flow_handler.vader +++ /dev/null @@ -1,507 +0,0 @@ -Before: - runtime ale_linters/javascript/flow.vim - -After: - unlet! g:flow_output - unlet! g:expected - unlet! g:actual - call ale#linter#Reset() - -Execute(The flow handler should throw away non-JSON lines): - AssertEqual - \ [], - \ ale_linters#javascript#flow#Handle(bufnr(''), [ - \ 'Already up-to-date.', - \ '{"flowVersion":"0.50.0","errors":[],"passed":true}', - \ ]) - AssertEqual - \ [], - \ ale_linters#javascript#flow#Handle(bufnr(''), [ - \ 'foo', - \ 'bar', - \ 'baz', - \ '{"flowVersion":"0.50.0","errors":[],"passed":true}', - \ ]) - -Execute(The flow handler should process errors correctly.): - silent! noautocmd file /home/w0rp/Downloads/graphql-js/src/language/parser.js - - let g:flow_output = { - \ "flowVersion": "0.39.0", - \ "errors": [ - \ { - \ "kind": "infer", - \ "level": "error", - \ "message": [ - \ { - \ "context": " return 1", - \ "descr": "number", - \ "type": "Blame", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 417, - \ "column": 10, - \ "offset": 9503 - \ }, - \ "end": { - \ "line": 417, - \ "column": 10, - \ "offset": 9504 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 417, - \ "endline": 417, - \ "start": 10, - \ "end": 10 - \ }, - \ { - \ "context": v:null, - \ "descr": "This type is incompatible with the expected return type of", - \ "type": "Comment", - \ "path": "", - \ "line": 0, - \ "endline": 0, - \ "start": 1, - \ "end": 0 - \ }, - \ { - \ "context": "function parseArguments(lexer: Lexer<*>): Array {", - \ "descr": "array type", - \ "type": "Blame", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 416, - \ "column": 43, - \ "offset": 9472 - \ }, - \ "end": { - \ "line": 416, - \ "column": 61, - \ "offset": 9491 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 416, - \ "endline": 416, - \ "start": 43, - \ "end": 61 - \ } - \ ] - \ }, - \ { - \ "kind": "infer", - \ "level": "warning", - \ "message": [ - \ { - \ "context": " return peek(lexer, TokenKind.PAREN_L) ?", - \ "descr": "unreachable code", - \ "type": "Blame", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 419, - \ "column": 3, - \ "offset": 9508 - \ }, - \ "end": { - \ "line": 421, - \ "column": 7, - \ "offset": 9626 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 419, - \ "endline": 421, - \ "start": 3, - \ "end": 7 - \ } - \ ] - \ } - \ ], - \ "passed": v:false - \} - - let g:actual = ale_linters#javascript#flow#Handle(bufnr(''), [json_encode(g:flow_output)]) - let g:expected = [ - \ { - \ 'lnum': 417, - \ 'type': 'E', - \ 'col': 10, - \ 'text': 'number: This type is incompatible with the expected return type of array type', - \ }, - \ { - \ 'lnum': 419, - \ 'type': 'W', - \ 'col': 3, - \ 'text': 'unreachable code:', - \ }, - \] - - AssertEqual g:expected, g:actual - -Execute(The flow handler should fetch the correct location for the currently opened file, even when it's not in the first message.): - silent! noautocmd file /Users/rav/Projects/vim-ale-flow/index.js - - let g:flow_output = { - \ "flowVersion": "0.44.0", - \ "errors": [{ - \ "operation": { - \ "context": " , document.getElementById('foo')", - \ "descr": "React element `Foo`", - \ "type": "Blame", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 6, - \ "column": 3, - \ "offset": 92 - \ }, - \ "end": { - \ "line": 6, - \ "column": 18, - \ "offset": 108 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 6, - \ "endline": 6, - \ "start": 3, - \ "end": 18 - \ }, - \ "kind": "infer", - \ "level": "error", - \ "message": [{ - \ "context": "module.exports = function(props: Props) {", - \ "descr": "property `bar`", - \ "type": "Blame", - \ "loc": { - \ "source": "/Users/rav/Projects/vim-ale-flow/foo.js", - \ "type": "SourceFile", - \ "start": { - \ "line": 9, - \ "column": 34, - \ "offset": 121 - \ }, - \ "end": { - \ "line": 9, - \ "column": 38, - \ "offset": 126 - \ } - \ }, - \ "path": "/Users/rav/Projects/vim-ale-flow/foo.js", - \ "line": 9, - \ "endline": 9, - \ "start": 34, - \ "end": 38 - \ }, { - \ "context": v:null, - \ "descr": "Property not found in", - \ "type": "Comment", - \ "path": "", - \ "line": 0, - \ "endline": 0, - \ "start": 1, - \ "end": 0 - \ }, { - \ "context": " , document.getElementById('foo')", - \ "descr": "props of React element `Foo`", - \ "type": "Blame", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 6, - \ "column": 3, - \ "offset": 92 - \ }, - \ "end": { - \ "line": 6, - \ "column": 18, - \ "offset": 108 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 6, - \ "endline": 6, - \ "start": 3, - \ "end": 18 - \ }] - \ }], - \ "passed": v:false - \} - - let g:actual = ale_linters#javascript#flow#Handle(bufnr(''), [json_encode(g:flow_output)]) - let g:expected = [ - \ { - \ 'lnum': 6, - \ 'col': 3, - \ 'type': 'E', - \ 'text': 'property `bar`: Property not found in props of React element `Foo` See also: React element `Foo`', - \ } - \] - - AssertEqual g:expected, g:actual - -Execute(The flow handler should handle relative paths): - silent! noautocmd file /Users/rav/Projects/vim-ale-flow/index.js - - let g:flow_output = { - \ "flowVersion": "0.44.0", - \ "errors": [{ - \ "operation": { - \ "context": " , document.getElementById('foo')", - \ "descr": "React element `Foo`", - \ "type": "Blame", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 6, - \ "column": 3, - \ "offset": 92 - \ }, - \ "end": { - \ "line": 6, - \ "column": 18, - \ "offset": 108 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 6, - \ "endline": 6, - \ "start": 3, - \ "end": 18 - \ }, - \ "kind": "infer", - \ "level": "error", - \ "message": [{ - \ "context": "module.exports = function(props: Props) {", - \ "descr": "property `bar`", - \ "type": "Blame", - \ "loc": { - \ "source": "vim-ale-flow/foo.js", - \ "type": "SourceFile", - \ "start": { - \ "line": 9, - \ "column": 34, - \ "offset": 121 - \ }, - \ "end": { - \ "line": 9, - \ "column": 38, - \ "offset": 126 - \ } - \ }, - \ "path": "vim-ale-flow/foo.js", - \ "line": 9, - \ "endline": 9, - \ "start": 34, - \ "end": 38 - \ }, { - \ "context": v:null, - \ "descr": "Property not found in", - \ "type": "Comment", - \ "path": "", - \ "line": 0, - \ "endline": 0, - \ "start": 1, - \ "end": 0 - \ }, { - \ "context": " , document.getElementById('foo')", - \ "descr": "props of React element `Foo`", - \ "type": "Blame", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 6, - \ "column": 3, - \ "offset": 92 - \ }, - \ "end": { - \ "line": 6, - \ "column": 18, - \ "offset": 108 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 6, - \ "endline": 6, - \ "start": 3, - \ "end": 18 - \ }] - \ }], - \ "passed": v:false - \} - - let g:actual = ale_linters#javascript#flow#Handle(bufnr(''), [json_encode(g:flow_output)]) - let g:expected = [ - \ { - \ 'lnum': 6, - \ 'col': 3, - \ 'type': 'E', - \ 'text': 'property `bar`: Property not found in props of React element `Foo` See also: React element `Foo`', - \ } - \] - - AssertEqual g:expected, g:actual - -Execute(The flow handler should handle extra errors): - silent! noautocmd file /Users/rav/Projects/vim-ale-flow/index.js - - let g:flow_output = { - \ "flowVersion": "0.54.0", - \ "errors": [{ - \ "extra": [{ - \ "message": [{ - \ "context": v:null, - \ "descr": "Property \`setVector\` is incompatible:", - \ "type": "Blame ", - \ "path": "", - \ "line": 0, - \ "endline": 0, - \ "start": 1, - \ "end": 0 - \ }], - \ "children": [{ - \ "message": [{ - \ "context": "setVector = \{2\}", - \ "descr": "number ", - \ "type": "Blame ", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile ", - \ "start": { - \ "line": 90, - \ "column": 30, - \ "offset": 2296 - \ }, - \ "end": { - \ "line": 90, - \ "column": 30, - \ "offset": 2297 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 90, - \ "endline": 90, - \ "start": 30, - \ "end": 30 - \ }, { - \ "context": v:null, - \ "descr": "This type is incompatible with ", - \ "type": "Comment ", - \ "path": "", - \ "line": 0, - \ "endline": 0, - \ "start": 1, - \ "end": 0 - \ }, { - \ "context": "setVector: VectorType => void,", - \ "descr": "function type ", - \ "type": "Blame ", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 9, - \ "column": 14, - \ "offset": 252 - \ }, - \ "end": { - \ "line": 9, - \ "column": 31, - \ "offset": 270 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 9, - \ "endline": 9, - \ "start": 14, - \ "end": 31 - \ }] - \ }] - \ }], - \ "kind": "infer", - \ "level": "error", - \ "suppressions": [], - \ "message": [{ - \ "context": " < New ", - \ "descr": "props of React element `New`", - \ "type": "Blame", - \ "loc": { - \ "source": "vim-ale-flow/foo.js", - \ "type": "SourceFile", - \ "start": { - \ "line": 89, - \ "column": 17, - \ "offset": 2262 - \ }, - \ "end": { - \ "line": 94, - \ "column": 18, - \ "offset": 2488 - \ } - \ }, - \ "path": "", - \ "line": 89, - \ "endline": 94, - \ "start": 17, - \ "end": 18 - \ }, { - \ "context": v:null, - \ "descr": "This type is incompatible with", - \ "type": "Comment", - \ "path": "", - \ "line": 0, - \ "endline": 0, - \ "start": 1, - \ "end": 0 - \ }, { - \ "context": "class New extends React.Component < NewProps,NewState > {", - \ "descr": "object type", - \ "type": "Blame", - \ "loc": { - \ "source": expand('%:p'), - \ "type": "SourceFile", - \ "start": { - \ "line": 20, - \ "column": 35, - \ "offset": 489 - \ }, - \ "end": { - \ "line": 20, - \ "column": 42, - \ "offset": 497 - \ } - \ }, - \ "path": expand('%:p'), - \ "line": 20, - \ "endline": 20, - \ "start": 35, - \ "end": 42 - \ }] - \ }], - \ "passed": v:false - \} - - let g:actual = ale_linters#javascript#flow#Handle(bufnr(''), [json_encode(g:flow_output)]) - let g:expected = [ - \ { - \ 'lnum': 20, - \ 'col': 35, - \ 'type': 'E', - \ 'text': 'props of React element `New`: This type is incompatible with object type', - \ 'detail': 'props of React element `New`: This type is incompatible with object type' - \ . "\nProperty `setVector` is incompatible: number This type is incompatible with function type ", - \ } - \] - - AssertEqual g:expected, g:actual diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_foodcritic_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_foodcritic_handler.vader deleted file mode 100644 index 67cb6cab..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_foodcritic_handler.vader +++ /dev/null @@ -1,44 +0,0 @@ -Before: - runtime ale_linters/chef/foodcritic.vim - -After: - call ale#linter#Reset() - -Execute(Basic warnings should be handled): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'code': 'CINK001', - \ 'type': 'W', - \ 'text': 'Missing CHANGELOG in markdown format', - \ 'filename': '/foo/bar/CHANGELOG.md', - \ }, - \ { - \ 'lnum': 1, - \ 'code': 'FC011', - \ 'type': 'W', - \ 'text': 'Missing README in markdown format', - \ 'filename': '/foo/bar/README.md', - \ }, - \ { - \ 'lnum': 1, - \ 'code': 'FC031', - \ 'type': 'W', - \ 'text': 'Cookbook without metadata.rb file', - \ 'filename': '/foo/bar/metadata.rb', - \ }, - \ { - \ 'lnum': 1, - \ 'code': 'FC071', - \ 'type': 'W', - \ 'text': 'Missing LICENSE file', - \ 'filename': '/foo/bar/LICENSE', - \ }, - \ ], - \ ale_linters#chef#foodcritic#Handle(bufnr(''), [ - \ 'CINK001: Missing CHANGELOG in markdown format: /foo/bar/CHANGELOG.md:1', - \ 'FC011: Missing README in markdown format: /foo/bar/README.md:1', - \ 'FC031: Cookbook without metadata.rb file: /foo/bar/metadata.rb:1', - \ 'FC071: Missing LICENSE file: /foo/bar/LICENSE:1', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_fortran_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_fortran_handler.vader deleted file mode 100644 index c55a4c6f..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_fortran_handler.vader +++ /dev/null @@ -1,95 +0,0 @@ -Before: - runtime ale_linters/fortran/gcc.vim - -After: - call ale#linter#Reset() - -Execute(The fortran handler should parse lines from GCC 4.1.2 correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 357, - \ 'lnum': 4, - \ 'col': 0, - \ 'text': "Symbol ‘b’ at (1) has no IMPLICIT type", - \ 'type': 'E', - \ }, - \ { - \ 'bufnr': 357, - \ 'lnum': 3, - \ 'col': 0, - \ 'text': "Symbol ‘a’ at (1) has no IMPLICIT type", - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#fortran#gcc#Handle(357, [ - \ " In file :4", - \ "", - \ "write(*,*) b", - \ " 1", - \ "Error: Symbol ‘b’ at (1) has no IMPLICIT type", - \ " In file :3", - \ "", - \ "write(*,*) a", - \ " 1", - \ "Error: Symbol ‘a’ at (1) has no IMPLICIT type", - \ ]) - - -Execute(The fortran handler should parse lines from GCC 4.9.3 correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 357, - \ 'lnum': 3, - \ 'col': 12, - \ 'text': "Symbol ‘a’ at (1) has no IMPLICIT type", - \ 'type': 'E', - \ }, - \ { - \ 'bufnr': 357, - \ 'lnum': 4, - \ 'col': 12, - \ 'text': "Symbol ‘b’ at (1) has no IMPLICIT type", - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#fortran#gcc#Handle(357, [ - \ ":3.12:", - \ "", - \ "write(*,*) a", - \ " 1", - \ "Error: Symbol ‘a’ at (1) has no IMPLICIT type", - \ ":4.12:", - \ "", - \ "write(*,*) b", - \ " 1", - \ "Error: Symbol ‘b’ at (1) has no IMPLICIT type", - \ ]) - -Execute(The fortran handler should parse lines from GCC 6.3.1 correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 337, - \ 'lnum': 3, - \ 'col': 12, - \ 'text': "Symbol ‘a’ at (1) has no IMPLICIT type", - \ 'type': 'E', - \ }, - \ { - \ 'bufnr': 337, - \ 'lnum': 4, - \ 'col': 12, - \ 'text': "Symbol ‘b’ at (1) has no IMPLICIT type", - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#fortran#gcc#Handle(337, [ - \ ":3:12:", - \ "", - \ "Error: Symbol ‘a’ at (1) has no IMPLICIT type", - \ ":4:12:", - \ "", - \ "Error: Symbol ‘b’ at (1) has no IMPLICIT type", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_gawk_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_gawk_handler.vader deleted file mode 100644 index 3a7b5457..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_gawk_handler.vader +++ /dev/null @@ -1,39 +0,0 @@ -Before: - runtime ale_linters/awk/gawk.vim - -After: - call ale#linter#Reset() - -Execute(gawk syntax errors should be parsed correctly): - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 0, - \ 'text': "invalid char ''' in expression", - \ 'code': 0, - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 5, - \ 'col': 0, - \ 'text': 'unterminated string', - \ 'code': 0, - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 10, - \ 'col': 0, - \ 'text': "escape sequence `\u' treated as plain `u'", - \ 'code': 0, - \ 'type': 'W', - \ }, - \ ], - \ ale#handlers#gawk#HandleGawkFormat(347, [ - \ "gawk: something.awk:1: BEGIN { system('touch aaaaaaaaa') }", - \ "gawk: something.awk:1: ^ invalid char ''' in expression", - \ 'gawk: something.awk:5: { x = "aaaaaaaaaaa', - \ 'gawk: something.awk:5: ^ unterminated string', - \ "gawk: something.awk:10: warning: escape sequence `\u' treated as plain `u'", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_gcc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_gcc_handler.vader deleted file mode 100644 index a4231cab..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_gcc_handler.vader +++ /dev/null @@ -1,316 +0,0 @@ -Execute(The GCC handler should ignore other lines of output): - AssertEqual - \ [], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ 'foo', - \ 'bar', - \ 'baz', - \ ]) - -Execute(GCC errors from included files should be parsed correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'filename': 'broken.h', - \ 'type': 'E', - \ 'text': 'expected identifier or ''('' before ''{'' token', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 2, - \ 'text': 'Error found in header. See :ALEDetail', - \ 'detail': join([ - \ 'In file included from :3:2:', - \ 'broken.h:1:1: error: expected identifier or ''('' before ''{'' token', - \ ' {{{', - \ ' ^', - \ ], "\n"), - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ 'In file included from :3:2:', - \ 'broken.h:1:1: error: expected identifier or ''('' before ''{'' token', - \ ' {{{', - \ ' ^', - \ 'compilation terminated.', - \ ]) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'filename': 'b.h', - \ 'type': 'E', - \ 'text': 'expected identifier or ''('' before ''{'' token', - \ }, - \ { - \ 'lnum': 5, - \ 'text': 'Error found in header. See :ALEDetail', - \ 'detail': join([ - \ 'In file included from a.h:1:0,', - \ ' from :5:', - \ 'b.h:1:1: error: expected identifier or ''('' before ''{'' token', - \ ' {{{', - \ ' ^', - \ ], "\n"), - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ 'In file included from a.h:1:0,', - \ ' from :5:', - \ 'b.h:1:1: error: expected identifier or ''('' before ''{'' token', - \ ' {{{', - \ ' ^', - \ 'compilation terminated.', - \ ]) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'filename': 'b.h', - \ 'type': 'E', - \ 'text': 'unknown type name ''bad_type''', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'filename': 'b.h', - \ 'type': 'E', - \ 'text': 'unknown type name ''other_bad_type''', - \ }, - \ { - \ 'lnum': 3, - \ 'text': 'Error found in header. See :ALEDetail', - \ 'detail': join([ - \ 'In file included from a.h:1:0,', - \ ' from :3:', - \ 'b.h:1:1: error: unknown type name ‘bad_type’', - \ ' bad_type x;', - \ ' ^', - \ 'b.h:2:1: error: unknown type name ‘other_bad_type’', - \ ' other_bad_type y;', - \ ' ^', - \ ], "\n"), - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ 'In file included from a.h:1:0,', - \ ' from :3:', - \ 'b.h:1:1: error: unknown type name ‘bad_type’', - \ ' bad_type x;', - \ ' ^', - \ 'b.h:2:1: error: unknown type name ‘other_bad_type’', - \ ' other_bad_type y;', - \ ' ^', - \ 'compilation terminated.', - \ ]) - -Execute(The GCC handler shouldn't complain about #pragma once for headers): - silent file! test.h - - AssertEqual - \ [], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ ':1:1: warning: #pragma once in main file [enabled by default]', - \ ]) - - silent file! test.hpp - - AssertEqual - \ [], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ ':1:1: warning: #pragma once in main file [enabled by default]', - \ ]) - -Execute(The GCC handler should handle syntax errors): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 12, - \ 'type': 'E', - \ 'text': 'invalid suffix "p" on integer constant' - \ }, - \ { - \ 'lnum': 17, - \ 'col': 5, - \ 'type': 'E', - \ 'text': 'invalid suffix "n" on integer constant' - \ }, - \ { - \ 'lnum': 4, - \ 'type': 'E', - \ 'text': 'variable or field ''foo'' declared void' - \ }, - \ { - \ 'lnum': 4, - \ 'type': 'E', - \ 'text': '''cat'' was not declared in this scope' - \ }, - \ { - \ 'lnum': 12, - \ 'type': 'E', - \ 'text': 'expected '';'' before ''o''' - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ ':6:12: error: invalid suffix "p" on integer constant', - \ ':17:5: error: invalid suffix "n" on integer constant', - \ ':4: error: variable or field ''foo'' declared void', - \ ':4: error: ''cat'' was not declared in this scope', - \ ':12: error: expected `;'' before ''o''', - \ ]) - -Execute(The GCC handler should handle notes with no previous message): - AssertEqual - \ [], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ ':1:1: note: x', - \ ':1:1: note: x', - \ ]) - -Execute(The GCC handler should attach notes to previous messages): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 12, - \ 'type': 'E', - \ 'text': 'Some error', - \ 'detail': "Some error\n:1:1: note: x", - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ '-:6:12: error: Some error', - \ ':1:1: note: x', - \ ]) - -Execute(The GCC handler should interpret - as being the current file): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 12, - \ 'type': 'E', - \ 'text': 'Some error', - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ '-:6:12: error: Some error', - \ ]) - -Execute(The GCC handler should handle fatal error messages due to missing files): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'col': 12, - \ 'type': 'E', - \ 'text': 'foo.h: No such file or directory' - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ ':3:12: fatal error: foo.h: No such file or directory', - \ ]) - -Execute(The GCC handler should handle errors for inlined header functions): - AssertEqual - \ [ - \ { - \ 'lnum': 50, - \ 'col': 4, - \ 'filename': '/usr/include/bits/fcntl2.h', - \ 'type': 'E', - \ 'text': 'call to ''__open_missing_mode'' declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments', - \ }, - \ { - \ 'lnum': 44, - \ 'col': 5, - \ 'filename': '/usr/include/bits/fcntl2.h', - \ 'type': 'E', - \ 'text': 'call to ''__open_too_many_args'' declared with attribute error: open can be called either with 2 or 3 arguments, not more', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 10, - \ 'type': 'E', - \ 'text': 'call to ''__open_missing_mode'' declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments', - \ }, - \ { - \ 'lnum': 13, - \ 'col': 11, - \ 'type': 'E', - \ 'text': 'call to ''__open_too_many_args'' declared with attribute error: open can be called either with 2 or 3 arguments, not more', - \ }, - \ { - \ 'lnum': 1, - \ 'text': 'Error found in header. See :ALEDetail', - \ 'detail': join([ - \ 'In file included from /usr/include/fcntl.h:328,', - \ ' from :1:', - \ 'In function ‘open’,', - \ ' inlined from ‘main’ at :7:10:', - \ '/usr/include/bits/fcntl2.h:50:4: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments', - \ ' __open_missing_mode ();', - \ ' ^~~~~~~~~~~~~~~~~~~~~~', - \ 'In function ‘open’,', - \ ' inlined from ‘main’ at :13:11:', - \ '/usr/include/bits/fcntl2.h:44:5: error: call to ‘__open_too_many_args’ declared with attribute error: open can be called either with 2 or 3 arguments, not more', - \ ' __open_too_many_args ();', - \ ], "\n") - \ }, - \], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ 'In file included from /usr/include/fcntl.h:328,', - \ ' from :1:', - \ 'In function ‘open’,', - \ ' inlined from ‘main’ at :7:10:', - \ '/usr/include/bits/fcntl2.h:50:4: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT or O_TMPFILE in second argument needs 3 arguments', - \ ' __open_missing_mode ();', - \ ' ^~~~~~~~~~~~~~~~~~~~~~', - \ 'In function ‘open’,', - \ ' inlined from ‘main’ at :13:11:', - \ '/usr/include/bits/fcntl2.h:44:5: error: call to ‘__open_too_many_args’ declared with attribute error: open can be called either with 2 or 3 arguments, not more', - \ ' __open_too_many_args ();', - \ ' ^~~~~~~~~~~~~~~~~~~~~~~', - \ ]) - -Execute(The GCC handler should handle macro expansion errors in current file): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 19, - \ 'type': 'E', - \ 'text': 'error message', - \ 'detail': "error message\n:1:19: note: in expansion of macro 'TEST'", - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ ': error: error message', - \ ':1:19: note: in expansion of macro ‘TEST’', - \ ' 1 | std::string str = TEST;', - \ ' | ^~~~', - \ ]) - -Execute(The GCC handler should handle macro expansion errors in other files): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'type': 'E', - \ 'text': 'Error found in macro expansion. See :ALEDetail', - \ 'detail': "error message\ninc.h:1:19: note: in expansion of macro 'TEST'", - \ }, - \ ], - \ ale#handlers#gcc#HandleGCCFormatWithIncludes(347, [ - \ ': error: error message', - \ 'inc.h:1:19: note: in expansion of macro ‘TEST’', - \ ' 1 | std::string str = TEST;', - \ ' | ^~~~', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ghc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ghc_handler.vader deleted file mode 100644 index 70246ed1..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ghc_handler.vader +++ /dev/null @@ -1,177 +0,0 @@ -Execute(The ghc handler should handle hdevtools output): - call ale#test#SetFilename('foo.hs') - - AssertEqual - \ [ - \ { - \ 'lnum': 147, - \ 'type': 'W', - \ 'col': 62, - \ 'text': '• Couldnt match type ‘a -> T.Text’ with ‘T.Text’ Expected type: [T.Text]', - \ 'detail': join([ - \ '• Couldnt match type ‘a -> T.Text’ with ‘T.Text’', - \ ' Expected type: [T.Text]', - \ ], "\n"), - \ }, - \ ], - \ ale#handlers#haskell#HandleGHCFormat(bufnr(''), [ - \ 'foo.hs:147:62: warning:', - \ '• Couldnt match type ‘a -> T.Text’ with ‘T.Text’', - \ ' Expected type: [T.Text]', - \ ]) - -Execute(The ghc handler should handle ghc 8 output): - call ale#test#SetFilename('src/Appoint/Lib.hs') - - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'type': 'E', - \ 'col': 1, - \ 'text': 'Failed to load interface for ‘GitHub.Data’ Use -v to see a list of the files searched for.', - \ 'detail': join([ - \ ' Failed to load interface for ‘GitHub.Data’', - \ ' Use -v to see a list of the files searched for.', - \ ], "\n"), - \ }, - \ { - \ 'lnum': 7, - \ 'type': 'W', - \ 'col': 1, - \ 'text': 'Failed to load interface for ‘GitHub.Endpoints.PullRequests’ Use -v to see a list of the files searched for.', - \ 'detail': join([ - \ ' Failed to load interface for ‘GitHub.Endpoints.PullRequests’', - \ ' Use -v to see a list of the files searched for.', - \ ], "\n"), - \ }, - \ ], - \ ale#handlers#haskell#HandleGHCFormat(bufnr(''), [ - \ '', - \ ale#path#Simplify('src/Appoint/Lib.hs') . ':6:1: error:', - \ ' Failed to load interface for ‘GitHub.Data’', - \ ' Use -v to see a list of the files searched for.', - \ '', - \ ale#path#Simplify('src/Appoint/Lib.hs') . ':7:1: warning:', - \ ' Failed to load interface for ‘GitHub.Endpoints.PullRequests’', - \ ' Use -v to see a list of the files searched for.', - \ ]) - -Execute(The ghc handler should handle ghc 7 output): - call ale#test#SetFilename('src/Main.hs') - - AssertEqual - \ [ - \ { - \ 'lnum': 168, - \ 'type': 'E', - \ 'col': 1, - \ 'text': 'parse error (possibly incorrect indentation or mismatched brackets)', - \ 'detail': join([ - \ ' parse error (possibly incorrect indentation or mismatched brackets)', - \ ], "\n"), - \ }, - \ { - \ 'lnum': 84, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'Top-level binding with no type signature: myLayout :: Choose Tall (Choose (Mirror Tall) Full) a', - \ 'detail': join([ - \ ' Top-level binding with no type signature:', - \ ' myLayout :: Choose Tall (Choose (Mirror Tall) Full) a', - \ ], "\n"), - \ }, - \ { - \ 'lnum': 94, - \ 'col': 5, - \ 'type': 'E', - \ 'text': 'Some other error', - \ 'detail': join([ - \ ' Some other error', - \ ], "\n"), - \ }, - \ ], - \ ale#handlers#haskell#HandleGHCFormat(bufnr(''), [ - \ ale#path#Simplify('src/Main.hs') . ':168:1:', - \ ' parse error (possibly incorrect indentation or mismatched brackets)', - \ ale#path#Simplify('src/Main.hs') . ':84:1:Warning:', - \ ' Top-level binding with no type signature:', - \ ' myLayout :: Choose Tall (Choose (Mirror Tall) Full) a', - \ ale#path#Simplify('src/Main.hs') . ':94:5:Error:', - \ ' Some other error', - \ ]) - -Execute(The ghc handler should handle stack 1.5.1 output): - call ale#test#SetFilename('src/Main.hs') - - AssertEqual - \ [ - \ { - \ 'lnum': 160, - \ 'col': 14, - \ 'type': 'E', - \ 'text': '• Expecting one fewer arguments to ‘Exp’ Expected kind ‘k0 -> *’, but ‘Exp’ has kind ‘*’ • In the type ‘Exp a’ | 160 | pattern F :: Exp a | ^^^^^', - \ 'detail': join([ - \ ' • Expecting one fewer arguments to ‘Exp’', - \ ' Expected kind ‘k0 -> *’, but ‘Exp’ has kind ‘*’', - \ ' • In the type ‘Exp a’', - \ ' |', - \ ' 160 | pattern F :: Exp a', - \ ' | ^^^^^', - \ ], "\n"), - \ }, - \ ], - \ ale#handlers#haskell#HandleGHCFormat(bufnr(''), [ - \ ' ' . ale#path#Simplify('src/Main.hs') . ':160:14: error:', - \ ' • Expecting one fewer arguments to ‘Exp’', - \ ' Expected kind ‘k0 -> *’, but ‘Exp’ has kind ‘*’', - \ ' • In the type ‘Exp a’', - \ ' |', - \ ' 160 | pattern F :: Exp a', - \ ' | ^^^^^', - \ ]) - -Execute(The ghc handler should handle ghc panic): - let g:detail = [ - \ '[15 of 15] Compiling SizedTypes.List', - \ 'ghc: panic! (the ''impossible'' happened)', - \ ' (GHC version 8.10.3:', - \ ' src/SizedTypes/List.hs:(46,19)-(50,0) Specified type does not refine Haskell type for `SizedTypes.List.out` (Plugged Init types new)', - \ ' The Liquid type', - \ ' .', - \ ' GHC.Types.Int -> (SizedTypes.List.List a) -> (_, (SizedTypes.List.List a))', - \ ' .', - \ ' is inconsistent with the Haskell type', - \ ' .', - \ ' forall p a ->', - \ 'p -> SizedTypes.List.List a -> (a, SizedTypes.List.List a)', - \ ' .', - \ ' defined at src/SizedTypes/List.hs:52:1-3', - \ ' .', - \ ' Specifically, the Liquid component', - \ ' .', - \ ' {VV##0 : GHC.Types.Int | VV##0 >= 0}', - \ ' .', - \ ' is inconsistent with the Haskell component', - \ ' .', - \ ' p', - \ ' .', - \ ' ', - \ ' HINT: Use the hole ''_'' instead of the mismatched component (in the Liquid specification)', - \ '', - \ 'Please report this as a GHC bug: https://www.haskell.org/ghc/reportabug', - \ '', - \ '' - \ ] - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'ghc panic!', - \ 'detail': join(g:detail[1:-3], "\n"), - \ }, - \ ], - \ ale#handlers#haskell#HandleGHCFormat(bufnr(''), g:detail) - unlet g:detail diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ghc_mod_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ghc_mod_handler.vader deleted file mode 100644 index bed5b13c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ghc_mod_handler.vader +++ /dev/null @@ -1,37 +0,0 @@ -Execute(HandleGhcFormat should handle ghc-mod problems): - call ale#test#SetFilename('check2.hs') - - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Failed to load interface for ‘Missing’Use -v to see a list of the files searched for.', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Suggestion: Use camelCaseFound: my_variable = ...Why not: myVariable = ...', - \ }, - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'Eta reduceFound: myFunc x = succ xWhy not: myFunc = succ', - \ }, - \ { - \ 'lnum': 28, - \ 'col': 28, - \ 'type': 'W', - \ 'text': 'Defaulting the following constraints to type ‘Integer’ (Num a0) arising from the literal ‘3’ at check2.hs:28:28 (Eq a0) arising from a use of ‘lookup’ at check2.hs:28:21-28 • In the first argument of ‘lookup’, namely ‘3’ In the expression: lookup 3 In the second argument of ‘fmap’, namely ‘(lookup 3 $ zip [1, 2, 3] [4, 5, 6])''’' - \ }, - \ ], - \ ale#handlers#haskell#HandleGHCFormat(bufnr(''), [ - \ 'check2.hs:2:1:Failed to load interface for ‘Missing’Use -v to see a list of the files searched for.', - \ 'check2.hs:2:1: Suggestion: Use camelCaseFound: my_variable = ...Why not: myVariable = ...', - \ 'check2.hs:6:1: Warning: Eta reduceFound: myFunc x = succ xWhy not: myFunc = succ', - \ 'xxx.hs:6:1: Warning: Eta reduceFound: myFunc x = succ xWhy not: myFunc = succ', - \ printf("check2.hs:28:28: Warning: Defaulting the following constraints to type ‘Integer’ (Num a0) arising from the literal ‘3’ at %s/check2.hs:28:28 (Eq a0) arising from a use of ‘lookup’ at %s/check2.hs:28:21-28 • In the first argument of ‘lookup’, namely ‘3’ In the expression: lookup 3 In the second argument of ‘fmap’, namely ‘(lookup 3 $ zip [1, 2, 3] [4, 5, 6])'’", tempname(), tempname()), - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ghdl_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ghdl_handler.vader deleted file mode 100644 index a0f5edac..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ghdl_handler.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - runtime ale_linters/vhdl/ghdl.vim - -After: - call ale#linter#Reset() - -Execute(The ghdl handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 41, - \ 'col' : 5, - \ 'type': 'E', - \ 'text': "error: 'begin' is expected instead of 'if'" - \ }, - \ { - \ 'lnum': 12, - \ 'col' : 8, - \ 'type': 'E', - \ 'text': ' no declaration for "i0"' - \ }, - \ ], - \ ale_linters#vhdl#ghdl#Handle(bufnr(''), [ - \ "dff_en.vhd:41:5:error: 'begin' is expected instead of 'if'", - \ '/path/to/file.vhdl:12:8: no declaration for "i0"', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_gitlablint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_gitlablint_handler.vader deleted file mode 100644 index 3b08ccb4..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_gitlablint_handler.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - runtime! ale_linters/yaml/gitlablint.vim - -After: - Restore - call ale#linter#Reset() - -Execute(Problems should be parsed correctly for gitlablint): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'root config contains unknown keys: efore_script', - \ }, - \ { - \ 'lnum': 77, - \ 'col': 3, - \ 'type': 'E', - \ 'text': '(): could not find expected : while scanning a simple key', - \ }, - \ { - \ 'lnum': 0, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'build:dev:rest job: undefined need: chck:dev', - \ }, - \ ], - \ ale_linters#yaml#gitlablint#Handle(bufnr(''), [ - \ 'GitLab CI configuration is invalid', - \ 'root config contains unknown keys: efore_script', - \ '(): could not find expected : while scanning a simple key at line 77 column 3', - \ 'build:dev:rest job: undefined need: chck:dev', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_gitlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_gitlint_handler.vader deleted file mode 100644 index 5c531664..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_gitlint_handler.vader +++ /dev/null @@ -1,89 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/gitcommit/gitlint.vim - -After: - Restore - - unlet! b:ale_warn_about_trailing_whitespace - - call ale#linter#Reset() - -Execute(The gitlint handler should handle basic warnings and syntax errors): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': 'Body message is missing', - \ 'code': 'B6', - \ }, - \ { - \ 'lnum': 2, - \ 'type': 'E', - \ 'text': 'Second line is not empty: "to send to upstream"', - \ 'code': 'B4', - \ }, - \ { - \ 'lnum': 3, - \ 'type': 'E', - \ 'text': 'Body message is too short (19<20): "to send to upstream"', - \ 'code': 'B5', - \ }, - \ { - \ 'lnum': 8, - \ 'type': 'E', - \ 'text': 'Title exceeds max length (92>72): "some very long commit subject line where the author can''t wait to explain what he just fixed"', - \ 'code': 'T1', - \ }, - \ ], - \ ale_linters#gitcommit#gitlint#Handle(1, [ - \ '1: B6 Body message is missing', - \ '2: B4 Second line is not empty: "to send to upstream"', - \ '3: B5 Body message is too short (19<20): "to send to upstream"', - \ '8: T1 Title exceeds max length (92>72): "some very long commit subject line where the author can''t wait to explain what he just fixed"' - \ ]) - -Execute(Disabling trailing whitespace warnings should work): - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'type': 'E', - \ 'text': 'Trailing whitespace', - \ 'code': 'T2', - \ }, - \ ], - \ ale_linters#gitcommit#gitlint#Handle(bufnr(''), [ - \ '8: T2 Trailing whitespace', - \]) - - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'type': 'E', - \ 'text': 'Trailing whitespace', - \ 'code': 'B2', - \ }, - \ ], - \ ale_linters#gitcommit#gitlint#Handle(bufnr(''), [ - \ '8: B2 Trailing whitespace', - \]) - - let b:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [], - \ ale_linters#gitcommit#gitlint#Handle(bufnr(''), [ - \ '8: T2 Trailing whitespace', - \ ]) - - AssertEqual - \ [], - \ ale_linters#gitcommit#gitlint#Handle(bufnr(''), [ - \ '8: B2 Trailing whitespace', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_glslang_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_glslang_handler.vader deleted file mode 100644 index 6d3a7999..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_glslang_handler.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - runtime ale_linters/glsl/glslang.vim - -Execute(The glsl glslang handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'col': 0, - \ 'type': 'E', - \ 'text': '''gl_ModelViewProjectionMatrix'' : undeclared identifier', - \ }, - \ { - \ 'lnum': 121, - \ 'col': 0, - \ 'type': 'W', - \ 'text': '''switch'' : last case/default label not followed by statements', - \ }, - \ ], - \ ale_linters#glsl#glslang#Handle(bufnr(''), [ - \ 'ERROR: 0:4: ''gl_ModelViewProjectionMatrix'' : undeclared identifier', - \ 'WARNING: 0:121: ''switch'' : last case/default label not followed by statements', - \ 'ERROR: 2 compilation errors. No code generated.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_go_generic_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_go_generic_handler.vader deleted file mode 100644 index 2b17fdcb..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_go_generic_handler.vader +++ /dev/null @@ -1,38 +0,0 @@ -Execute(The golang handler should return the correct filenames): - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'col': 0, - \ 'text': 'some error', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'), - \ }, - \ { - \ 'lnum': 27, - \ 'col': 5, - \ 'text': 'some error with a column', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/other.go'), - \ }, - \ { - \ 'lnum': 18, - \ 'col': 0, - \ 'text': 'random error', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/go1.14.go'), - \ }, - \ { - \ 'lnum': 36, - \ 'col': 2, - \ 'text': 'another random error', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/anothergo1.14.go'), - \ }, - \ ], - \ ale#handlers#go#Handler(bufnr(''), [ - \ 'test.go:27: some error', - \ 'other.go:27:5: some error with a column', - \ 'vet: go1.14.go:18:0: random error', - \ 'vet: anothergo1.14.go:36:2: another random error', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_gobuild_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_gobuild_handler.vader deleted file mode 100644 index 17608c3a..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_gobuild_handler.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - runtime ale_linters/go/gobuild.vim - -After: - call ale#linter#Reset() - -Execute (The gobuild handler should handle names with spaces): - " We can't test Windows paths with the path resovling on Linux, but we can - " test the regex. - AssertEqual - \ [ - \ [ - \ 'C:\something\file with spaces.go', - \ '27', - \ '', - \ 'missing argument for Printf("%s"): format reads arg 2, have only 1 args', - \ ], - \ [ - \ 'C:\something\file with spaces.go', - \ '5', - \ '2', - \ 'expected declaration, found ''STRING'' "log"', - \ ], - \ ], - \ map(ale_linters#go#gobuild#GetMatches([ - \ 'C:\something\file with spaces.go:27: missing argument for Printf("%s"): format reads arg 2, have only 1 args', - \ 'C:\something\file with spaces.go:5:2: expected declaration, found ''STRING'' "log"', - \ ]), 'v:val[1:4]') - -Execute (The gobuild handler should handle relative paths correctly): - call ale#test#SetFilename('app/test.go') - - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'col': 0, - \ 'text': 'missing argument for Printf("%s"): format reads arg 2, have only 1 args', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'), - \ }, - \ ], - \ ale_linters#go#gobuild#Handler(bufnr(''), [ - \ 'test.go:27: missing argument for Printf("%s"): format reads arg 2, have only 1 args', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_golangci_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_golangci_lint_handler.vader deleted file mode 100644 index 58815f56..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_golangci_lint_handler.vader +++ /dev/null @@ -1,84 +0,0 @@ -Before: - runtime ale_linters/go/golangci_lint.vim - -After: - call ale#linter#Reset() - -Execute (The golangci-lint handler should handle names with spaces): - " We can't test Windows paths with the path resovling on Linux, but we can - " test the regex. - AssertEqual - \ [ - \ [ - \ 'C:\something\file with spaces.go', - \ '12', - \ '3', - \ 'expected ''package'', found ''IDENT'' gibberish', - \ 'staticcheck', - \ ], - \ [ - \ 'C:\something\file with spaces.go', - \ '37', - \ '5', - \ 'expected ''package'', found ''IDENT'' gibberish', - \ 'golint', - \ ], - \ ], - \ map(ale_linters#go#golangci_lint#GetMatches([ - \ 'C:\something\file with spaces.go:12:3: expected ''package'', found ''IDENT'' gibberish (staticcheck)', - \ 'C:\something\file with spaces.go:37:5: expected ''package'', found ''IDENT'' gibberish (golint)', - \ ]), 'v:val[1:5]') - -Execute (The golangci-lint handler should handle paths correctly): - call ale#test#SetFilename('app/test.go') - - let file = ale#path#GetAbsPath(expand('%:p:h'), 'test.go') - - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'col': 3, - \ 'text': 'expected ''package'', found ''IDENT'' gibberish (staticcheck)', - \ 'type': 'W', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'), - \ }, - \ { - \ 'lnum': 37, - \ 'col': 5, - \ 'text': 'expected ''package'', found ''IDENT'' gibberish (golint)', - \ 'type': 'W', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'), - \ }, - \ ], - \ ale_linters#go#golangci_lint#Handler(bufnr(''), [ - \ file . ':12:3: expected ''package'', found ''IDENT'' gibberish (staticcheck)', - \ file . ':37:5: expected ''package'', found ''IDENT'' gibberish (golint)', - \ ]) - -Execute (The golangci-lint handler should handle only typecheck lines as errors): - call ale#test#SetFilename('app/main.go') - - let file = ale#path#GetAbsPath(expand('%:p:h'), 'test.go') - - AssertEqual - \ [ - \ { - \ 'lnum': 30, - \ 'col': 5, - \ 'text': 'variable ''err'' is not used (typecheck)', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'), - \ }, - \ { - \ 'lnum': 505, - \ 'col': 75, - \ 'text': 'Magic number: 404, in detected (gomnd)', - \ 'type': 'W', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'), - \ } - \ ], - \ ale_linters#go#golangci_lint#Handler(bufnr(''), [ - \ file . ':30:5: variable ''err'' is not used (typecheck)', - \ file . ':505:75: Magic number: 404, in detected (gomnd)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_gometalinter_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_gometalinter_handler.vader deleted file mode 100644 index 1aade8a7..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_gometalinter_handler.vader +++ /dev/null @@ -1,57 +0,0 @@ -Before: - runtime ale_linters/go/gometalinter.vim - -After: - call ale#linter#Reset() - -Execute (The gometalinter handler should handle names with spaces): - " We can't test Windows paths with the path resovling on Linux, but we can - " test the regex. - AssertEqual - \ [ - \ [ - \ 'C:\something\file with spaces.go', - \ '12', - \ '3', - \ 'warning', - \ 'expected ''package'', found ''IDENT'' gibberish (staticcheck)', - \ ], - \ [ - \ 'C:\something\file with spaces.go', - \ '37', - \ '5', - \ 'error', - \ 'expected ''package'', found ''IDENT'' gibberish (golint)', - \ ], - \ ], - \ map(ale_linters#go#gometalinter#GetMatches([ - \ 'C:\something\file with spaces.go:12:3:warning: expected ''package'', found ''IDENT'' gibberish (staticcheck)', - \ 'C:\something\file with spaces.go:37:5:error: expected ''package'', found ''IDENT'' gibberish (golint)', - \ ]), 'v:val[1:5]') - -Execute (The gometalinter handler should handle paths correctly): - call ale#test#SetFilename('app/test.go') - - let file = ale#path#GetAbsPath(expand('%:p:h'), 'test.go') - - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'col': 3, - \ 'text': 'expected ''package'', found ''IDENT'' gibberish (staticcheck)', - \ 'type': 'W', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'), - \ }, - \ { - \ 'lnum': 37, - \ 'col': 5, - \ 'text': 'expected ''package'', found ''IDENT'' gibberish (golint)', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.go'), - \ }, - \ ], - \ ale_linters#go#gometalinter#Handler(bufnr(''), [ - \ file . ':12:3:warning: expected ''package'', found ''IDENT'' gibberish (staticcheck)', - \ file . ':37:5:error: expected ''package'', found ''IDENT'' gibberish (golint)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_hadolint.vader b/dotfiles/.vim/plugged/ale/test/handler/test_hadolint.vader deleted file mode 100644 index f84c303d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_hadolint.vader +++ /dev/null @@ -1,59 +0,0 @@ -Before: - runtime ale_linters/dockerfile/hadolint.vim - -After: - call ale#linter#Reset() - -Execute(The hadolint handler should handle an empty string response): - AssertEqual - \ [], - \ ale_linters#dockerfile#hadolint#Handle(bufnr(''), []) - -Execute(The hadolint handler should handle a normal example): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 0, - \ 'type': 'W', - \ 'code': 'DL3006', - \ 'text': "DL3006: Always tag the version of an image explicitly", - \ 'detail': "DL3006 ( https://github.com/hadolint/hadolint/wiki/DL3006 )\n\nAlways tag the version of an image explicitly", - \ }, - \ { - \ 'lnum': 4, - \ 'col': 0, - \ 'type': 'W', - \ 'code': 'DL3033', - \ 'text': "DL3033: Specify version with `yum install -y -`.", - \ 'detail': "DL3033 ( https://github.com/hadolint/hadolint/wiki/DL3033 )\n\nSpecify version with `yum install -y -`.", - \ }, - \ { - \ 'lnum': 12, - \ 'col': 0, - \ 'type': 'W', - \ 'code': 'SC2039', - \ 'text': "SC2039: In POSIX sh, brace expansion is undefined.", - \ 'detail': "SC2039 ( https://github.com/koalaman/shellcheck/wiki/SC2039 )\n\nIn POSIX sh, brace expansion is undefined.", - \ }, - \ ], - \ ale_linters#dockerfile#hadolint#Handle(bufnr(''), [ - \ '-:1 DL3006 warning: Always tag the version of an image explicitly', - \ '-:4 DL3033 warning: Specify version with `yum install -y -`.', - \ '-:12 SC2039 warning: In POSIX sh, brace expansion is undefined.', - \ ]) - -Execute(The hadolint handler should handle parsing errors): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'text': "unexpected 'b' expecting '#', ADD, ARG, CMD, COPY, ENTRYPOINT, ENV, EXPOSE, FROM, HEALTHCHECK, LABEL, MAINTAINER, ONBUILD, RUN, SHELL, STOPSIGNAL, USER, VOLUME, WORKDIR, or end of input", - \ 'detail': "hadolint could not parse the file because of a syntax error.", - \ }, - \ ], - \ ale_linters#dockerfile#hadolint#Handle(bufnr(''), [ - \ '/dev/stdin:1:1 unexpected ''b'' expecting ''#'', ADD, ARG, CMD, COPY, ENTRYPOINT, ENV, EXPOSE, FROM, HEALTHCHECK, LABEL, MAINTAINER, ONBUILD, RUN, SHELL, STOPSIGNAL, USER, VOLUME, WORKDIR, or end of input', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_haskell_stack_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_haskell_stack_handler.vader deleted file mode 100644 index 07e7e69c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_haskell_stack_handler.vader +++ /dev/null @@ -1,7 +0,0 @@ -Before: - runtime ale/handlers/haskell_stack.vim - -Execute(Escape stack should correctly identify a stack exec command): - AssertEqual - \ ale#Escape('stack') . ' exec ' . ale#Escape('hlint') . ' --', - \ ale#handlers#haskell_stack#EscapeExecutable('stack', 'hlint') diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_hlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_hlint_handler.vader deleted file mode 100644 index 915e1748..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_hlint_handler.vader +++ /dev/null @@ -1,80 +0,0 @@ -Before: - runtime! ale_linters/haskell/hlint.vim - -After: - call ale#linter#Reset() - -Execute(The hlint handler should parse items correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 4, - \ 'end_lnum': 3, - \ 'end_col': 2, - \ 'text': 'Error: Do something. Found: [Char] Why not: String', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 4, - \ 'end_lnum': 7, - \ 'end_col': 2, - \ 'text': 'Warning: Do something. Found: [Char] Why not: String', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 73, - \ 'col': 25, - \ 'end_lnum': 73, - \ 'end_col': 31, - \ 'text': 'Suggestion: Use String. Found: [Char] Why not: String', - \ 'type': 'I', - \ }, - \ ], - \ ale_linters#haskell#hlint#Handle(bufnr(''), [json_encode([ - \ { - \ 'module': 'Main', - \ 'decl': 'foo', - \ 'severity': 'Error', - \ 'hint': 'Do something', - \ 'file': '-', - \ 'startLine': 1, - \ 'startColumn': 4, - \ 'endLine': 3, - \ 'endColumn': 2, - \ 'from': '[Char]', - \ 'to': 'String', - \ }, - \ { - \ 'module': 'Main', - \ 'decl': 'foo', - \ 'severity': 'Warning', - \ 'hint': 'Do something', - \ 'file': '-', - \ 'startLine': 2, - \ 'startColumn': 4, - \ 'endLine': 7, - \ 'endColumn': 2, - \ 'from': '[Char]', - \ 'to': 'String', - \ }, - \ { - \ 'module': 'Main', - \ 'decl': 'myFocusedBorderColor', - \ 'severity': 'Suggestion', - \ 'hint': 'Use String', - \ 'file': '-', - \ 'startLine': 73, - \ 'startColumn': 25, - \ 'endLine': 73, - \ 'endColumn': 31, - \ 'from': '[Char]', - \ 'to': 'String', - \ }, - \ ])]) - -Execute(The hlint handler should handle empty output): - AssertEqual - \ [], - \ ale_linters#haskell#hlint#Handle(bufnr(''), []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ibm_openapi_validator_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ibm_openapi_validator_handler.vader deleted file mode 100644 index e136d5d2..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ibm_openapi_validator_handler.vader +++ /dev/null @@ -1,49 +0,0 @@ -Before: - runtime! ale_linters/openapi/ibm_validator.vim - -After: - call ale#linter#Reset() - -Execute(Problems should be parsed correctly for openapi-ibm-validator): - AssertEqual - \ [ - \ { - \ 'lnum': 54, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'Items with a description must have content in it.', - \ }, - \ { - \ 'lnum': 24, - \ 'col': 0, - \ 'type': 'W', - \ 'text': 'Operations must have a non-empty `operationId`.', - \ }, - \ { - \ 'lnum': 40, - \ 'col': 0, - \ 'type': 'W', - \ 'text': 'operationIds must follow case convention: lower_snake_case', - \ }, - \ ], - \ ale_linters#openapi#ibm_validator#Handle(bufnr(''), [ - \ '', - \ '[Warning] No .validaterc file found. The validator will run in default mode.', - \ 'To configure the validator, create a .validaterc file.', - \ '', - \ 'errors', - \ '', - \ ' Message : Items with a description must have content in it.', - \ ' Path : paths./settings.patch.description', - \ ' Line : 54', - \ '', - \ 'warnings', - \ '', - \ ' Message : Operations must have a non-empty `operationId`.', - \ ' Path : paths./stats.get.operationId', - \ ' Line : 24', - \ '', - \ ' Message : operationIds must follow case convention: lower_snake_case', - \ ' Path : paths./settings.get.operationId', - \ ' Line : 40' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_idris_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_idris_handler.vader deleted file mode 100644 index 6a032ea6..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_idris_handler.vader +++ /dev/null @@ -1,66 +0,0 @@ -Before: - Save $TMPDIR - - " Set TMPDIR so the temporary file checks work. - let $TMPDIR = '/tmp' - - runtime ale_linters/idris/idris.vim - -After: - Restore - - call ale#linter#Reset() - -Execute(The idris handler should parse messages that reference a single column): - if has('win32') - call ale#test#SetFilename($TEMP . '\foo.idr') - else - call ale#test#SetFilename('/tmp/foo.idr') - endif - - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'col': 5, - \ 'type': 'E', - \ 'text': 'When checking right hand side of main with expected type IO () When checking an application of function Prelude.Monad.>>=: Type mismatch between IO () (Type of putStrLn _) and _ -> _ (Is putStrLn _ applied to too many arguments?) Specifically: Type mismatch between IO and \uv => _ -> uv' - \ } - \ ], - \ ale_linters#idris#idris#Handle(bufnr(''), [ - \ expand('%:p') . ':4:5:', - \ 'When checking right hand side of main with expected type', - \ ' IO ()', - \ '', - \ 'When checking an application of function Prelude.Monad.>>=:', - \ ' Type mismatch between', - \ ' IO () (Type of putStrLn _)', - \ ' and', - \ ' _ -> _ (Is putStrLn _ applied to too many arguments?)', - \ '', - \ ' Specifically:', - \ ' Type mismatch between', - \ ' IO', - \ ' and', - \ ' \uv => _ -> uv', - \ ]) - -Execute(The idris handler should parse messages that reference a column range): - call ale#test#SetFilename('/tmp/foo.idr') - - AssertEqual - \ [ - \ { - \ 'lnum': 11, - \ 'col': 11, - \ 'type': 'E', - \ 'text': 'When checking right hand side of Main.case block in main at /tmp/foo.idr:10:10 with expected type IO () Last statement in do block must be an expression' - \ } - \ ], - \ ale_linters#idris#idris#Handle(bufnr(''), [ - \ expand('%:p') . ':11:11-13:', - \ 'When checking right hand side of Main.case block in main at /tmp/foo.idr:10:10 with expected type', - \ ' IO ()', - \ '', - \ 'Last statement in do block must be an expression', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_inko_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_inko_handler.vader deleted file mode 100644 index 6621d2d6..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_inko_handler.vader +++ /dev/null @@ -1,54 +0,0 @@ -Before: - runtime ale_linters/inko/inko.vim - -After: - call ale#linter#Reset() - -Execute(The inko handler should parse errors correctly): - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify('/tmp/foo.inko'), - \ 'lnum': 4, - \ 'col': 5, - \ 'text': 'this is an error', - \ 'type': 'E', - \ } - \ ], - \ ale#handlers#inko#Handle(bufnr(''), [ - \ '[', - \ ' {', - \ ' "file": "/tmp/foo.inko",', - \ ' "line": 4,', - \ ' "column": 5,', - \ ' "message": "this is an error",', - \ ' "level": "error"', - \ ' }', - \ ']' - \ ]) - -Execute(The inko handler should parse warnings correctly): - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify('/tmp/foo.inko'), - \ 'lnum': 4, - \ 'col': 5, - \ 'text': 'this is a warning', - \ 'type': 'W', - \ } - \ ], - \ ale#handlers#inko#Handle(bufnr(''), [ - \ '[', - \ ' {', - \ ' "file": "/tmp/foo.inko",', - \ ' "line": 4,', - \ ' "column": 5,', - \ ' "message": "this is a warning",', - \ ' "level": "warning"', - \ ' }', - \ ']' - \ ]) - -Execute(The inko handler should handle empty output): - AssertEqual [], ale#handlers#inko#Handle(bufnr(''), []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ispc_ispc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ispc_ispc_handler.vader deleted file mode 100644 index 619773fe..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ispc_ispc_handler.vader +++ /dev/null @@ -1,90 +0,0 @@ -Before: - runtime ale_linters/ispc/ispc.vim - -After: - call ale#linter#Reset() - -Execute(The ispc handler should parse input correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 0, - \ 'lnum': 33, - \ 'col': 14, - \ 'type': 'E', - \ 'text': 'syntax error, unexpected ''int'', expecting '','' or '';''.', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 36, - \ 'col': 5, - \ 'type': 'E', - \ 'text': 'syntax error, unexpected ''for''.', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 51, - \ 'col': 9, - \ 'type': 'E', - \ 'text': '''foobar.h'' file not found', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 79, - \ 'col': 52, - \ 'type': 'W', - \ 'text': 'Modulus operator with varying types is very inefficient.', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 85, - \ 'col': 13, - \ 'type': 'W', - \ 'text': 'Undefined behavior: all program instances are writing to the same location!', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 93, - \ 'col': 19, - \ 'type': 'W', - \ 'text': 'Gather required to load value.', - \ }, - \ { - \ 'bufnr': 0, - \ 'lnum': 93, - \ 'col': 9, - \ 'type': 'W', - \ 'text': 'Scatter required to store value.', - \ }, - \ ], - \ ale_linters#ispc#ispc#Handle(0, [ - \ 'Warning: No output file or header file name specified. Program will be compiled and warnings/errors will be issued, but no output will be generated. ', - \ 'Warning: No --target specified on command-line. Using default system target "avx2-i32x8".', - \ 'mandelbrot.ispc:33:14: Error: syntax error, unexpected ''int'', expecting '','' or '';''.', - \ 'static iline int mandel(float c_re, float c_im, int count) {', - \ ' ^^^', - \ '', - \ 'mandelbrot.ispc:36:5: Error: syntax error, unexpected ''for''.', - \ ' for (i = 0; i < count; ++i) {', - \ ' ^^^', - \ '', - \ 'mandelbrot.ispc:51:9: fatal error: ''foobar.h'' file not found', - \ '#include', - \ ' ^~~~~~~~~~', - \ 'mandelbrot.ispc:79:52: Performance Warning: Modulus operator with varying types is very inefficient.', - \ ' double x = x0 + i * (dx + epsilon*(k%2)*delta);', - \ ' ^^^', - \ '', - \ 'mandelbrot.ispc:85:13: Warning: Undefined behavior: all program instances are writing to the same location!', - \ ' output[index] = (NNN) / sample_size;', - \ ' ^^^^^^^^^^^^^', - \ '', - \ 'mandelbrot.ispc:93:19: Performance Warning: Gather required to load value.', - \ ' A[i*8] *= A[i*8];', - \ ' ^^^^^^', - \ '', - \ 'mandelbrot.ispc:93:9: Performance Warning: Scatter required to store value.', - \ ' A[i*8] *= A[i*8];', - \ ' ^^^^^^', - \ '', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_javac_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_javac_handler.vader deleted file mode 100644 index 3dc245af..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_javac_handler.vader +++ /dev/null @@ -1,97 +0,0 @@ -Before: - runtime ale_linters/java/javac.vim - - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('dummy.java') - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The javac handler should handle cannot find symbol errors): - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify('/tmp/vLPr4Q5/33/foo.java'), - \ 'lnum': 1, - \ 'text': 'error: some error', - \ 'type': 'E', - \ }, - \ { - \ 'filename': ale#path#Simplify('/tmp/vLPr4Q5/33/foo.java'), - \ 'lnum': 2, - \ 'col': 5, - \ 'text': 'error: cannot find symbol: BadName', - \ 'type': 'E', - \ }, - \ { - \ 'filename': ale#path#Simplify('/tmp/vLPr4Q5/33/foo.java'), - \ 'lnum': 34, - \ 'col': 5, - \ 'text': 'error: cannot find symbol: BadName2', - \ 'type': 'E', - \ }, - \ { - \ 'filename': ale#path#Simplify('/tmp/vLPr4Q5/33/foo.java'), - \ 'lnum': 37, - \ 'text': 'warning: some warning', - \ 'type': 'W', - \ }, - \ { - \ 'filename': ale#path#Simplify('/tmp/vLPr4Q5/33/foo.java'), - \ 'lnum': 42, - \ 'col': 11, - \ 'text': 'error: cannot find symbol: bar()', - \ 'type': 'E', - \ }, - \ { - \ 'filename': ale#path#Simplify('/tmp/vLPr4Q5/33/foo.java'), - \ 'lnum': 58, - \ 'col': 19, - \ 'text': 'error: incompatible types: Bar cannot be converted to Foo', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#java#javac#Handle(bufnr(''), [ - \ '/tmp/vLPr4Q5/33/foo.java:1: error: some error', - \ '/tmp/vLPr4Q5/33/foo.java:2: error: cannot find symbol', - \ ' BadName foo() {', - \ ' ^', - \ ' symbol: class BadName', - \ ' location: class Bar', - \ '/tmp/vLPr4Q5/33/foo.java:34: error: cannot find symbol', - \ ' BadName2 foo() {', - \ ' ^', - \ ' symbol: class BadName2', - \ ' location: class Bar', - \ '/tmp/vLPr4Q5/33/foo.java:37: warning: some warning', - \ '/tmp/vLPr4Q5/33/foo.java:42: error: cannot find symbol', - \ ' this.bar();', - \ ' ^', - \ ' symbol: method bar()', - \ '/tmp/vLPr4Q5/33/foo.java:58: error: incompatible types: Bar cannot be converted to Foo', - \ ' this.setFoo(bar);', - \ ' ^', - \ '6 errors', - \ ]) - -Execute(The javac handler should resolve files from different directories): - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify(g:dir . '/Foo.java'), - \ 'lnum': 1, - \ 'text': 'error: some error', - \ 'type': 'E', - \ }, - \ { - \ 'filename': ale#path#Simplify(g:dir . '/Bar.java'), - \ 'lnum': 1, - \ 'text': 'error: some error', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#java#javac#Handle(bufnr(''), [ - \ './Foo.java:1: error: some error', - \ './Bar.java:1: error: some error', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_jscs_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_jscs_handler.vader deleted file mode 100644 index 5566116f..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_jscs_handler.vader +++ /dev/null @@ -1,39 +0,0 @@ -Before: - runtime ale_linters/javascript/jscs.vim - -After: - call ale#linter#Reset() - -Execute(jscs should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 7, - \ 'text': 'Variable declarations should use `let` or `const` not `var`', - \ 'code': 'disallowVar', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 21, - \ 'text': 'Illegal trailing whitespace', - \ 'code': 'disallowTrailingWhitespace', - \ }, - \ { - \ 'lnum': 5, - \ 'col': 9, - \ 'text': 'Variable `hello` is not used', - \ 'code': 'disallowUnusedVariables', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'text': 'Expected indentation of 1 characters', - \ }, - \ ], - \ ale_linters#javascript#jscs#Handle(347, [ - \ 'foobar.js: line 1, col 7, disallowVar: Variable declarations should use `let` or `const` not `var`', - \ 'foobar.js: line 3, col 21, disallowTrailingWhitespace: Illegal trailing whitespace', - \ 'foobar.js: line 5, col 9, disallowUnusedVariables: Variable `hello` is not used', - \ 'foobar.js: line 2, col 1, Expected indentation of 1 characters', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ktlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ktlint_handler.vader deleted file mode 100644 index f0d634e6..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ktlint_handler.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - Save g:ale_kotlin_ktlint_rulesets - - let g:ale_kotlin_ktlint_rulesets = [] - -After: - Restore - -Execute(The ktlint handler method GetRulesets should properly parse custom rulesets): - let g:ale_kotlin_ktlint_rulesets = ['/path/to/custom/ruleset.jar', '/path/to/other/ruleset.jar'] - - AssertEqual - \ '--ruleset /path/to/custom/ruleset.jar --ruleset /path/to/other/ruleset.jar', - \ ale#handlers#ktlint#GetRulesets(bufnr('')) - -Execute(The ktlint handler method GetRulesets should return an empty string when no rulesets have been configured): - let g:ale_kotlin_ktlint_rulesets = [] - - AssertEqual - \ '', - \ ale#handlers#ktlint#GetRulesets(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_lacheck_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_lacheck_handler.vader deleted file mode 100644 index 5d1b6ace..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_lacheck_handler.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - runtime ale_linters/tex/lacheck.vim - call ale#test#SetDirectory('/testplugin/test/handler') - -After: - call ale#linter#Reset() - call ale#test#RestoreDirectory() - -Execute(The lacheck handler should parse lines correctly): - call ale#test#SetFilename('../test-files/tex/sample1.tex') - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'W', - \ 'text': 'perhaps you should insert a `~'' before "\ref"' - \ } - \ ], - \ ale_linters#tex#lacheck#Handle(bufnr(''), [ - \ "** sample1:", - \ "\"sample1.tex\", line 1: perhaps you should insert a `~' before \"\\ref\"" - \ ]) - -Execute(The lacheck handler should ignore errors from input files): - call ale#test#SetFilename('ale_test.tex') - - AssertEqual - \ [ - \ ], - \ ale_linters#tex#lacheck#Handle(255, [ - \ "** ale_input:", - \ "\"ale_input.tex\", line 1: perhaps you should insert a `~' before \"\\ref\"" - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_languagetool_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_languagetool_handler.vader deleted file mode 100644 index 61d3abfd..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_languagetool_handler.vader +++ /dev/null @@ -1,62 +0,0 @@ -Before: - runtime! ale_linters/text/languagetool.vim - -After: - call ale#linter#Reset() - -Execute(languagetool handler should report 3 errors): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'col': 19, - \ 'end_col': 20, - \ 'text': 'This sentence does not start with an uppercase letter', - \ 'type': 'W', - \ 'code': 'UPPERCASE_SENTENCE_START', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 36, - \ 'end_col': 42, - \ 'text': "Did you mean 'to see'?", - \ 'type': 'W', - \ 'code': 'TOO_TO[1]', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 44, - \ 'end_col': 45, - \ 'text': "Use 'a' instead of 'an' if the following word doesn't start with a vowel sound, e.g. 'a sentence', 'a university'", - \ 'type': 'W', - \ 'code': 'EN_A_VS_AN', - \ } - \ ], - \ ale#handlers#languagetool#HandleOutput(bufnr(''), [ - \ '1.) Line 3, column 19, Rule ID: UPPERCASE_SENTENCE_START', - \ 'Message: This sentence does not start with an uppercase letter', - \ 'Suggestion: Or', - \ '...red phrases for details on potential errors. or use this text too see an few of of the probl...', - \ ' ^^ ', - \ '', - \ '2.) Line 3, column 36, Rule ID: TOO_TO[1]', - \ "Message: Did you mean 'to see'?", - \ 'Suggestion: to see', - \ '...etails on potential errors. or use this text too see an few of of the problems that LanguageTool ...', - \ ' ^^^^^^^ ', - \ '', - \ '3.) Line 3, column 44, Rule ID: EN_A_VS_AN', - \ "Message: Use 'a' instead of 'an' if the following word doesn't start with a vowel sound, e.g. 'a sentence', 'a university'", - \ 'Suggestion: a', - \ '...n potential errors. or use this text too see an few of of the problems that LanguageTool can...', - \ ' ^^ ', - \ 'Time: 2629ms for 8 sentences (3.0 sentences/sec)' - \ ]) - -Execute(languagetool handler should report no errors on empty input): - AssertEqual - \ [], - \ ale#handlers#languagetool#HandleOutput(bufnr(''), [ - \ '', - \ 'Time: 2629ms for 8 sentences (3.0 sentences/sec)' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_lessc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_lessc_handler.vader deleted file mode 100644 index 31de5593..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_lessc_handler.vader +++ /dev/null @@ -1,69 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/handler') - call ale#test#SetFilename('testfile.less') - - runtime ale_linters/less/lessc.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The lessc handler should handle errors for the current file correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Unrecognised input. Possibly missing something', - \ }, - \ ], - \ ale_linters#less#lessc#Handle(bufnr(''), [ - \ 'ParseError: Unrecognised input. Possibly missing something in - on line 2, column 1:', - \ '1 vwewww', - \ '2 ', - \]) - -Execute(The lessc handler should handle errors for other files in the same directory correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Unrecognised input. Possibly missing something', - \ 'filename': ale#path#Simplify(g:dir . '/imported.less') - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Unrecognised input. Possibly missing something', - \ 'filename': ale#path#Simplify(g:dir . '/imported.less') - \ }, - \ ], - \ ale_linters#less#lessc#Handle(bufnr(''), [ - \ 'ParseError: Unrecognised input. Possibly missing something in imported.less on line 2, column 1:', - \ '1 vwewww', - \ '2 ', - \ 'ParseError: Unrecognised input. Possibly missing something in ./imported.less on line 2, column 1:', - \ '1 vwewww', - \ '2 ', - \]) - -Execute(The lessc handler should handle errors for files in directories above correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Unrecognised input. Possibly missing something', - \ 'filename': ale#path#Simplify(g:dir . '/../imported2.less') - \ }, - \ ], - \ ale_linters#less#lessc#Handle(bufnr(''), [ - \ 'ParseError: Unrecognised input. Possibly missing something in ../imported2.less on line 2, column 1:', - \ '1 vwewww', - \ '2 ', - \]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_llc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_llc_handler.vader deleted file mode 100644 index bbe686f2..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_llc_handler.vader +++ /dev/null @@ -1,58 +0,0 @@ -Before: - runtime! ale_linters/llvm/llc.vim - -After: - call ale#linter#Reset() - -Execute(llc handler should parse errors output for STDIN): - AssertEqual - \ [ - \ { - \ 'lnum': 10, - \ 'col': 7, - \ 'text': "error: value doesn't match function result type 'i32'", - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 10, - \ 'col': 13, - \ 'text': "error: use of undefined value '@foo'", - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#llvm#llc#HandleErrors(bufnr(''), [ - \ "llc: :10:7: error: value doesn't match function result type 'i32'", - \ 'ret i64 0', - \ ' ^', - \ '', - \ "llc: :10:13: error: use of undefined value '@foo'", - \ 'call void @foo(i64 %0)', - \ ' ^', - \ ]) - -Execute(llc handler should parse errors output for some file): - call ale#test#SetFilename('test.ll') - AssertEqual - \ [ - \ { - \ 'lnum': 10, - \ 'col': 7, - \ 'text': "error: value doesn't match function result type 'i32'", - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 10, - \ 'col': 13, - \ 'text': "error: use of undefined value '@foo'", - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#llvm#llc#HandleErrors(bufnr(''), [ - \ "llc: /path/to/test.ll:10:7: error: value doesn't match function result type 'i32'", - \ 'ret i64 0', - \ ' ^', - \ '', - \ "llc: /path/to/test.ll:10:13: error: use of undefined value '@foo'", - \ 'call void @foo(i64 %0)', - \ ' ^', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_lua_selene_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_lua_selene_handler.vader deleted file mode 100644 index e9410ae9..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_lua_selene_handler.vader +++ /dev/null @@ -1,38 +0,0 @@ -Before: - runtime ale_linters/lua/selene.vim - -After: - Restore - call ale#linter#Reset() - -Execute(The selene handler for Lua should parse input correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'end_lnum': 2, - \ 'col': 1, - \ 'end_col': 3, - \ 'text': 'empty if block', - \ 'code': 'empty_if', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 1, - \ 'end_lnum': 1, - \ 'col': 4, - \ 'end_col': 11, - \ 'text': 'comparing things to nan directly is not allowed', - \ 'code': 'compare_nan', - \ 'type': 'E', - \ 'detail': "comparing things to nan directly is not allowed\n\ntry: `x ~= x` instead" - \ }, - \ ], - \ ale_linters#lua#selene#Handle(0, [ - \ '{"severity":"Warning","code":"empty_if","message":"empty if block","primary_label":{"span":{"start":0,"start_line":0,"start_column":0,"end":20,"end_line":1,"end_column":3},"message":""},"notes":[],"secondary_labels":[]}', - \ '{"severity":"Error","code":"compare_nan","message":"comparing things to nan directly is not allowed","primary_label":{"span":{"start":3,"start_line":0,"start_column":3,"end":11,"end_line":0,"end_column":11},"message":""},"notes":["try: `x ~= x` instead"],"secondary_labels":[]}', - \ 'Results:', - \ '1 errors', - \ '1 warnings', - \ '0 parse errors', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_luac_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_luac_handler.vader deleted file mode 100644 index 3a2e769c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_luac_handler.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/lua/luac.vim - -After: - Restore - call ale#linter#Reset() - -Execute(The luac handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': 'line contains trailing whitespace', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 3, - \ 'text': 'unexpected symbol near ''-''', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 5, - \ 'text': '''='' expected near '')''', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#lua#luac#Handle(347, [ - \ 'luac /file/path/here.lua:1: line contains trailing whitespace', - \ 'luac /file/path/here.lua:3: unexpected symbol near ''-''', - \ 'luac /file/path/here.lua:5: ''='' expected near '')''', - \ ]) - diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_luacheck_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_luacheck_handler.vader deleted file mode 100644 index 7cebb017..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_luacheck_handler.vader +++ /dev/null @@ -1,62 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/lua/luacheck.vim - -After: - Restore - call ale#linter#Reset() - -Execute(The luacheck handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 8, - \ 'text': 'line contains trailing whitespace', - \ 'code': 'W612', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 5, - \ 'text': 'unused loop variable ''k''', - \ 'code': 'W213', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 19, - \ 'text': 'accessing undefined variable ''x''', - \ 'code': 'W113', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#lua#luacheck#Handle(347, [ - \ ' /file/path/here.lua:1:8: (W612) line contains trailing whitespace', - \ ' /file/path/here.lua:3:5: (W213) unused loop variable ''k''', - \ ' /file/path/here.lua:3:19: (W113) accessing undefined variable ''x''', - \ ]) - -Execute(The luacheck handler should respect the warn_about_trailing_whitespace option): - let g:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 43, - \ 'text': 'unused argument ''g''', - \ 'code': 'W212', - \ 'type': 'W', - \ } - \ ], - \ ale_linters#lua#luacheck#Handle(347, [ - \ '/file/path/here.lua:15:97: (W614) trailing whitespace in a comment', - \ '/file/path/here.lua:16:60: (W612) line contains trailing whitespace', - \ '/file/path/here.lua:17:1: (W611) line contains only whitespace', - \ '/file/path/here.lua:27:57: (W613) trailing whitespace in a string', - \ '/file/path/here.lua:5:43: (W212) unused argument ''g''', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_markdownlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_markdownlint_handler.vader deleted file mode 100644 index f2e6e328..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_markdownlint_handler.vader +++ /dev/null @@ -1,91 +0,0 @@ -Before: - runtime ale_linters/markdown/markdownlint.vim - -After: - call ale#linter#Reset() - -Execute(The Markdownlint handler should parse pre v0.19.0 output with single digit line correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'code': 'MD013/line-length', - \ 'text': 'Line length [Expected: 80; Actual: 114]', - \ 'type': 'W' - \ } - \ ], - \ ale#handlers#markdownlint#Handle(0, [ - \ 'README.md: 1: MD013/line-length Line length [Expected: 80; Actual: 114]' - \ ]) - -Execute(The Markdownlint handler should parse pre v0.19.0 output with multi digit line correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 100, - \ 'code': 'MD013/line-length', - \ 'text': 'Line length [Expected: 80; Actual: 114]', - \ 'type': 'W' - \ } - \ ], - \ ale#handlers#markdownlint#Handle(0, [ - \ 'README.md: 100: MD013/line-length Line length [Expected: 80; Actual: 114]' - \ ]) - -Execute(The Markdownlint handler should parse post v0.19.0 output with single digit line correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'code': 'MD013/line-length', - \ 'text': 'Line length [Expected: 80; Actual: 114]', - \ 'type': 'W' - \ } - \ ], - \ ale#handlers#markdownlint#Handle(0, [ - \ 'README.md:1 MD013/line-length Line length [Expected: 80; Actual: 114]' - \ ]) - -Execute(The Markdownlint handler should parse post v0.19.0 output with multi digit line correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 100, - \ 'code': 'MD013/line-length', - \ 'text': 'Line length [Expected: 80; Actual: 114]', - \ 'type': 'W' - \ } - \ ], - \ ale#handlers#markdownlint#Handle(0, [ - \ 'README.md:100 MD013/line-length Line length [Expected: 80; Actual: 114]' - \ ]) - - -Execute(The Markdownlint handler should parse post v0.22.0 output with column correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 10, - \ 'col': 20, - \ 'code': 'MD013/line-length', - \ 'text': 'Line length [Expected: 80; Actual: 114]', - \ 'type': 'W' - \ } - \ ], - \ ale#handlers#markdownlint#Handle(0, [ - \ 'README.md:10:20 MD013/line-length Line length [Expected: 80; Actual: 114]' - \ ]) - -Execute(The Markdownlint handler should parse output with multiple slashes in rule name correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 10, - \ 'code': 'MD022/blanks-around-headings/blanks-around-headers', - \ 'text': 'Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Above] [Context: "### something"]', - \ 'type': 'W' - \ } - \ ], - \ ale#handlers#markdownlint#Handle(0, [ - \ 'README.md:10 MD022/blanks-around-headings/blanks-around-headers Headings should be surrounded by blank lines [Expected: 1; Actual: 0; Above] [Context: "### something"]' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_mcs_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_mcs_handler.vader deleted file mode 100644 index 3defc328..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_mcs_handler.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - runtime ale_linters/cs/mcs.vim - -After: - call ale#linter#Reset() - -Execute(The mcs handler should handle cannot find symbol errors): - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'col' : 29, - \ 'text': '; expected', - \ 'code': 'CS1001', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 101, - \ 'col': 0, - \ 'text': 'Unexpected processor directive (no #if for this #endif)', - \ 'code': 'CS1028', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 10, - \ 'col': 12, - \ 'text': 'some warning', - \ 'code': 'CS0123', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#cs#mcs#Handle(347, [ - \ 'Tests.cs(12,29): error CS1001: ; expected', - \ 'Tests.cs(101,0): error CS1028: Unexpected processor directive (no #if for this #endif)', - \ 'Tests.cs(10,12): warning CS0123: some warning', - \ 'Compilation failed: 2 error(s), 1 warnings', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_mcsc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_mcsc_handler.vader deleted file mode 100644 index c04f7d27..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_mcsc_handler.vader +++ /dev/null @@ -1,88 +0,0 @@ -Before: - Save g:ale_cs_mcsc_source - - unlet! g:ale_cs_mcsc_source - - call ale#test#SetDirectory('/testplugin/test/handler') - call ale#test#SetFilename('Test.cs') - - runtime ale_linters/cs/mcsc.vim - -After: - unlet! g:ale_cs_mcsc_source - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The mcs handler should work with the default of the buffer's directory): - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'col' : 29, - \ 'text': '; expected', - \ 'code': 'CS1001', - \ 'type': 'E', - \ 'filename': ale#path#Simplify(g:dir . '/Test.cs'), - \ }, - \ ], - \ ale_linters#cs#mcsc#Handle(bufnr(''), [ - \ 'Test.cs(12,29): error CS1001: ; expected', - \ 'Compilation failed: 2 error(s), 1 warnings', - \ ]) - -Execute(The mcs handler should handle cannot find symbol errors): - let g:ale_cs_mcsc_source = '/home/foo/project/bar' - - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'col' : 29, - \ 'text': '; expected', - \ 'code': 'CS1001', - \ 'type': 'E', - \ 'filename': ale#path#Simplify('/home/foo/project/bar/Test.cs'), - \ }, - \ { - \ 'lnum': 101, - \ 'col': 0, - \ 'text': 'Unexpected processor directive (no #if for this #endif)', - \ 'code': 'CS1028', - \ 'type': 'E', - \ 'filename': ale#path#Simplify('/home/foo/project/bar/Test.cs'), - \ }, - \ { - \ 'lnum': 10, - \ 'col': 12, - \ 'text': 'some warning', - \ 'code': 'CS0123', - \ 'type': 'W', - \ 'filename': ale#path#Simplify('/home/foo/project/bar/Test.cs'), - \ }, - \ ], - \ ale_linters#cs#mcsc#Handle(bufnr(''), [ - \ 'Test.cs(12,29): error CS1001: ; expected', - \ 'Test.cs(101,0): error CS1028: Unexpected processor directive (no #if for this #endif)', - \ 'Test.cs(10,12): warning CS0123: some warning', - \ 'Compilation failed: 2 error(s), 1 warnings', - \ ]) - -Execute(The mcsc handler should handle non file specific compiler errors without reporting overal status report as error): - let g:ale_cs_mcsc_source = '/home/foo/project/bar' - - AssertEqual - \ [ - \ { - \ 'lnum': -1, - \ 'col' : -1, - \ 'text': 'No files to compile were specified', - \ 'code': 'CS2008', - \ 'type': 'E', - \ 'filename': '', - \ }, - \ ], - \ ale_linters#cs#mcsc#Handle(bufnr(''), [ - \ 'error CS2008: No files to compile were specified', - \ 'Compilation failed: 1 error(s), 0 warnings', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_mdl_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_mdl_handler.vader deleted file mode 100644 index d01b52af..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_mdl_handler.vader +++ /dev/null @@ -1,25 +0,0 @@ -Before: - runtime ale_linters/markdown/mdl.vim - -After: - call ale#linter#Reset() - -Execute(The mdl handler should parse output correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'code': 'MD002/first-header-h1', - \ 'text': 'First header should be a top level header', - \ 'type': 'W' - \ }, - \ { - \ 'lnum': 18, - \ 'code': 'MD033/no-inline-html', - \ 'text': 'Inline HTML', - \ 'type': 'W' - \ } - \ ], - \ ale_linters#markdown#mdl#Handle(0, [ - \ '[{"filename":"README.md","line":1,"rule":"MD002","aliases":["first-header-h1"],"description":"First header should be a top level header"},{"filename":"README.md","line":18,"rule":"MD033","aliases":["no-inline-html"],"description":"Inline HTML"}]' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_mercury_mmc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_mercury_mmc_handler.vader deleted file mode 100644 index e862f287..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_mercury_mmc_handler.vader +++ /dev/null @@ -1,58 +0,0 @@ -Before: - runtime ale_linters/mercury/mmc.vim - -After: - call ale#linter#Reset() - -Execute(The mmc handler should handle syntax errors): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'type': 'E', - \ 'text': "Syntax error at token ',': operator precedence error." - \ } - \ ], - \ ale_linters#mercury#mmc#Handle(1, [ - \ "file_name.m:003: Syntax error at token ',': operator precedence error." - \ ]) - -Execute(The mmc handler should handle warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 10, - \ 'type': 'W', - \ 'text': 'Warning: reference to uninitialized state variable !.X.' - \ }, - \ { - \ 'lnum': 12, - \ 'type': 'W', - \ 'text': 'warning: determinism declaration could be tighter.' - \ } - \ ], - \ ale_linters#mercury#mmc#Handle(1, [ - \ 'file_name.m:010: Warning: reference to uninitialized state variable !.X.', - \ "file_name.m:012: In `some_predicate':", - \ 'file_name.m:012: warning: determinism declaration could be tighter.' - \ ]) - -Execute(The mmc handler should handle semantic errors): - AssertEqual - \ [ - \ { - \ 'lnum': 7, - \ 'type': 'E', - \ 'text': "error: undefined type `bar'/0." - \ }, - \ { - \ 'lnum': 15, - \ 'type': 'E', - \ 'text': "Error: circular equivalence type `file_name.foo'/0." - \ } - \ ], - \ ale_linters#mercury#mmc#Handle(1, [ - \ "file_name.m:007: In clause for predicate `foldit'/4:", - \ "file_name.m:007: error: undefined type `bar'/0.", - \ "file_name.m:015: Error: circular equivalence type `file_name.foo'/0." - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_mix_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_mix_handler.vader deleted file mode 100644 index a5549b5d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_mix_handler.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - runtime ale_linters/elixir/mix.vim - -After: - call ale#linter#Reset() - -Execute(The mix handler should parse lines correctly): - - AssertEqual - \ [ - \ { - \ 'bufnr': 347, - \ 'lnum': 87, - \ 'col': 0, - \ 'text': 'undefined function update_in/4', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#elixir#mix#Handle(347, [ - \ '** (CompileError) apps/sim/lib/sim/server.ex:87: undefined function update_in/4' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_msgfmt_hander.vader b/dotfiles/.vim/plugged/ale/test/handler/test_msgfmt_hander.vader deleted file mode 100644 index 1a67dbc6..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_msgfmt_hander.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - runtime ale_linters/po/msgfmt.vim - -After: - call ale#linter#Reset() - -Execute(Duplicate messages should be made easier to navigate): - AssertEqual - \ [ - \ {'lnum': 14, 'col': 0, 'type': 'W', 'text': 'some other thing'}, - \ {'lnum': 1746, 'col': 0, 'type': 'W', 'text': 'duplicate of message at line 262'}, - \ {'lnum': 262, 'col': 0, 'type': 'W', 'text': 'first location of duplicate of message at line 1746'}, - \ {'lnum': 666, 'col': 0, 'type': 'W', 'text': 'duplicate message definition...'}, - \ {'lnum': 888, 'col': 0, 'type': 'W', 'text': 'some other thing'}, - \ {'lnum': 999, 'col': 0, 'type': 'W', 'text': '...this is the location of the first definition'}, - \ ], - \ ale_linters#po#msgfmt#Handle(bufnr(''), [ - \ '/tmp/v6GMUFf/16/foo.po:14: some other thing', - \ '/tmp/v6GMUFf/16/foo.po:1746: duplicate message definition...', - \ '/tmp/v6GMUFf/16/foo.po:262: ...this is the location of the first definition', - \ '/tmp/v6GMUFf/16/foo.po:666: duplicate message definition...', - \ '/tmp/v6GMUFf/16/foo.po:888: some other thing', - \ '/tmp/v6GMUFf/16/foo.po:999: ...this is the location of the first definition', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_mypy_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_mypy_handler.vader deleted file mode 100644 index 039155a2..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_mypy_handler.vader +++ /dev/null @@ -1,141 +0,0 @@ -Before: - Save g:ale_python_mypy_ignore_invalid_syntax - Save g:ale_python_mypy_show_notes - - unlet! g:ale_python_mypy_show_notes - unlet! g:ale_python_mypy_ignore_invalid_syntax - - runtime ale_linters/python/mypy.vim - - call ale#test#SetDirectory('/testplugin/test/handler') - -After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The mypy handler should parse lines correctly): - call ale#test#SetFilename('__init__.py') - - let g:ale_python_mypy_show_notes = 0 - - AssertEqual - \ [ - \ { - \ 'lnum': 768, - \ 'col': 38, - \ 'filename': ale#path#Simplify(g:dir . '/baz.py'), - \ 'type': 'E', - \ 'text': 'Cannot determine type of ''SOME_SYMBOL''', - \ }, - \ { - \ 'lnum': 821, - \ 'col': 38, - \ 'filename': ale#path#Simplify(g:dir . '/baz.py'), - \ 'type': 'E', - \ 'text': 'Cannot determine type of ''SOME_SYMBOL''', - \ }, - \ { - \ 'lnum': 38, - \ 'col': 44, - \ 'filename': ale#path#Simplify(g:dir . '/other.py'), - \ 'type': 'E', - \ 'text': 'Cannot determine type of ''ANOTHER_SYMBOL''', - \ }, - \ { - \ 'lnum': 15, - \ 'col': 3, - \ 'filename': ale#path#Simplify(g:dir . '/__init__.py'), - \ 'type': 'E', - \ 'text': 'Argument 1 to "somefunc" has incompatible type "int"; expected "str"' - \ }, - \ { - \ 'lnum': 72, - \ 'col': 1, - \ 'filename': ale#path#Simplify(g:dir . '/__init__.py'), - \ 'type': 'W', - \ 'text': 'Some warning', - \ }, - \ ], - \ ale_linters#python#mypy#Handle(bufnr(''), [ - \ 'baz.py: note: In class "SomeClass":', - \ 'baz.py:768:38: error: Cannot determine type of ''SOME_SYMBOL''', - \ 'baz.py: note: In class "AnotherClass":', - \ 'baz.py:821:38: error: Cannot determine type of ''SOME_SYMBOL''', - \ '__init__.py:92: note: In module imported here:', - \ 'other.py: note: In class "YetAnotherClass":', - \ 'other.py:38:44: error: Cannot determine type of ''ANOTHER_SYMBOL''', - \ '__init__.py: note: At top level:', - \ '__init__.py:15:3: error: Argument 1 to "somefunc" has incompatible type "int"; expected "str"', - \ 'another_module/bar.py:14: note: In module imported here,', - \ 'another_module/__init__.py:16: note: ... from here,', - \ '__init__.py:72:1: warning: Some warning', - \ ]) - -Execute(The mypy handler should show notes if enabled): - call ale#test#SetFilename('__init__.py') - - AssertEqual - \ [ - \ { - \ 'lnum': 72, - \ 'col': 1, - \ 'filename': ale#path#Simplify(g:dir . '/__init__.py'), - \ 'type': 'I', - \ 'text': 'A note', - \ }, - \ ], - \ ale_linters#python#mypy#Handle(bufnr(''), [ - \ '__init__.py:72:1: note: A note', - \ ]) - - let g:ale_python_mypy_show_notes = 0 - - AssertEqual - \ [], - \ ale_linters#python#mypy#Handle(bufnr(''), [ - \ '__init__.py:72:1: note: A note', - \ ]) - -Execute(The mypy handler should handle Windows names with spaces): - " This test works on Unix, where this is seen as a single filename - silent file C:\\something\\with\ spaces.py - - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'col': 0, - \ 'filename': ale#path#Simplify('C:\something\with spaces.py'), - \ 'type': 'E', - \ 'text': 'No library stub file for module ''django.db''', - \ }, - \ ], - \ ale_linters#python#mypy#Handle(bufnr(''), [ - \ 'C:\something\with spaces.py:4: error: No library stub file for module ''django.db''', - \ ]) - -Execute(The mypy syntax errors shouldn't be ignored by default): - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'col': 0, - \ 'filename': ale#path#Simplify(g:dir . '/foo.py'), - \ 'type': 'E', - \ 'text': 'invalid syntax', - \ }, - \ ], - \ ale_linters#python#mypy#Handle(bufnr(''), [ - \ 'foo.py:4: error: invalid syntax', - \ ]) - -Execute(The mypy syntax errors should be ignored when the option is on): - let g:ale_python_mypy_ignore_invalid_syntax = 1 - - AssertEqual - \ [], - \ ale_linters#python#mypy#Handle(bufnr(''), [ - \ 'foo.py:4: error: invalid syntax', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_naga_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_naga_handler.vader deleted file mode 100644 index 48b8c281..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_naga_handler.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - runtime ale_linters/wgsl/naga.vim - -After: - call ale#linter#Reset() - -Execute(Error handler should parse error message and position from input): - let example_output = [ - \ "error: expected global item ('struct', 'let', 'var', 'type', ';', 'fn') or the end of the file, found '['", - \ " ┌─ wgsl:5:1", - \ " │", - \ "5 │ [[group(1), binding(0)]]", - \ " │ ^ expected global item ('struct', 'let', 'var', 'type', ';', 'fn') or the end of the file", - \ "Could not parse WGSL", - \ ] - let actual = ale#handlers#naga#Handle(0, example_output) - let expected = [{ - \ "text": "expected global item ('struct', 'let', 'var', 'type', ';', 'fn') or the end of the file, found '['", - \ "lnum": 5, - \ "col": 1, - \ "type": "E", - \ }] - AssertEqual actual, expected diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_nagelfar_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_nagelfar_handler.vader deleted file mode 100644 index ceaee19c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_nagelfar_handler.vader +++ /dev/null @@ -1,174 +0,0 @@ -Before: - runtime ale_linters/tcl/nagelfar.vim - -After: - call ale#linter#Reset() - -Execute(The nagelfar handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'type': 'W', - \ 'text': 'Found constant "bepa" which is also a variable.' - \ }, - \ { - \ 'lnum': 7, - \ 'type': 'E', - \ 'text': 'Unknown variable "cep"' - \ }, - \ { - \ 'lnum': 7, - \ 'type': 'W', - \ 'text': 'Unknown command "se"' - \ }, - \ { - \ 'lnum': 8, - \ 'type': 'E', - \ 'text': 'Unknown variable "epa"' - \ }, - \ { - \ 'lnum': 10, - \ 'type': 'E', - \ 'text': 'Unknown variable "depa"' - \ }, - \ { - \ 'lnum': 10, - \ 'type': 'W', - \ 'text': 'Suspicious variable name "$depa"' - \ }, - \ { - \ 'lnum': 11, - \ 'type': 'W', - \ 'text': 'Suspicious variable name "$cepa"' - \ }, - \ { - \ 'lnum': 13, - \ 'type': 'E', - \ 'text': 'Wrong number of arguments (3) to "set"' - \ }, - \ { - \ 'lnum': 13, - \ 'type': 'W', - \ 'text': 'Found constant "bepa" which is also a variable.' - \ }, - \ { - \ 'lnum': 13, - \ 'type': 'W', - \ 'text': 'Found constant "cepa" which is also a variable.' - \ }, - \ { - \ 'lnum': 18, - \ 'type': 'E', - \ 'text': 'Badly formed if statement' - \ }, - \ { - \ 'lnum': 24, - \ 'type': 'E', - \ 'text': 'Unknown subcommand "gurka" to "info"' - \ }, - \ { - \ 'lnum': 31, - \ 'type': 'W', - \ 'text': 'Switch pattern starting with #. This could be a bad comment.' - \ }, - \ { - \ 'lnum': 31, - \ 'type': 'W', - \ 'text': 'Unknown command "This"' - \ }, - \ { - \ 'lnum': 31, - \ 'type': 'W', - \ 'text': 'Unknown command "bad"' - \ }, - \ { - \ 'lnum': 34, - \ 'type': 'W', - \ 'text': 'Unknown command "miffo"' - \ }, - \ { - \ 'lnum': 55, - \ 'type': 'W', - \ 'text': 'Suspicious variable name "$bepa"' - \ }, - \ { - \ 'lnum': 56, - \ 'type': 'W', - \ 'text': 'Suspicious variable name "$apa"' - \ }, - \ { - \ 'lnum': 61, - \ 'type': 'E', - \ 'text': 'Could not complete statement.' - \ }, - \ { - \ 'lnum': 67, - \ 'type': 'E', - \ 'text': 'Could not complete statement.' - \ }, - \ { - \ 'lnum': 70, - \ 'type': 'E', - \ 'text': 'Wrong number of arguments (4) to "proc"' - \ }, - \ { - \ 'lnum': 72, - \ 'type': 'E', - \ 'text': 'Wrong number of arguments (1) to "if"' - \ }, - \ { - \ 'lnum': 75, - \ 'type': 'E', - \ 'text': 'Unbalanced close brace found' - \ }, - \ { - \ 'lnum': 82, - \ 'type': 'E', - \ 'text': 'Unbalanced close brace found' - \ }, - \ { - \ 'lnum': 88, - \ 'type': 'E', - \ 'text': 'Could not complete statement.' - \ }, - \ { - \ 'lnum': 90, - \ 'type': 'E', - \ 'text': 'Wrong number of arguments (1) to "if"' - \ }, - \ { - \ 'lnum': 93, - \ 'type': 'W', - \ 'text': 'Close brace not aligned with line 90 (4 0)' - \ }, - \ ], - \ ale_linters#tcl#nagelfar#Handle(bufnr(''), [ - \ 'Line 5: W Found constant "bepa" which is also a variable.', - \ 'Line 7: E Unknown variable "cep"', - \ 'Line 7: W Unknown command "se"', - \ 'Line 8: E Unknown variable "epa"', - \ 'Line 10: E Unknown variable "depa"', - \ 'Line 10: N Suspicious variable name "$depa"', - \ 'Line 11: N Suspicious variable name "$cepa"', - \ 'Line 13: E Wrong number of arguments (3) to "set"', - \ 'Line 13: W Found constant "bepa" which is also a variable.', - \ 'Line 13: W Found constant "cepa" which is also a variable.', - \ 'Line 18: E Badly formed if statement', - \ 'Line 24: E Unknown subcommand "gurka" to "info"', - \ 'Line 31: W Switch pattern starting with #. This could be a bad comment.', - \ 'Line 31: W Unknown command "This"', - \ 'Line 31: W Unknown command "bad"', - \ 'Line 34: W Unknown command "miffo"', - \ 'Line 55: N Suspicious variable name "$bepa"', - \ 'Line 56: N Suspicious variable name "$apa"', - \ 'Line 61: E Could not complete statement.', - \ 'Line 67: E Could not complete statement.', - \ 'Line 70: E Wrong number of arguments (4) to "proc"', - \ 'Line 72: E Wrong number of arguments (1) to "if"', - \ 'Line 75: E Unbalanced close brace found', - \ 'Line 82: E Unbalanced close brace found', - \ 'Line 88: E Could not complete statement.', - \ 'Line 90: E Wrong number of arguments (1) to "if"', - \ 'Line 93: N Close brace not aligned with line 90 (4 0)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_nasm_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_nasm_handler.vader deleted file mode 100644 index 9c7d9650..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_nasm_handler.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - runtime ale_linters/nasm/nasm.vim - -After: - call ale#linter#Reset() - -Execute(The nasm handler should parse GCC style output from nasm correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'text': "label alone on a line without a colon might be in error", - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 4, - \ 'text': "invalid combination of opcode and operands", - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 7, - \ 'text': "unable to open include file `bar.asm'", - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#nasm#nasm#Handle(bufnr(''), [ - \ "tmp.asm:2: warning: label alone on a line without a colon might be in error", - \ "tmp.asm:4: error: invalid combination of opcode and operands", - \ "tmp.asm:7: fatal: unable to open include file `bar.asm'" - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_nim_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_nim_handler.vader deleted file mode 100644 index b6784d84..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_nim_handler.vader +++ /dev/null @@ -1,80 +0,0 @@ -Before: - runtime ale_linters/nim/nimcheck.vim - -After: - call ale#linter#Reset() - -Execute(Parsing nim errors should work): - silent file foobar.nim - - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'col': 8, - \ 'text': 'use {.base.} for base methods; baseless methods are deprecated', - \ 'code': 'UseBase', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 12, - \ 'col': 2, - \ 'text': 'identifier expected, but found ''a.barfoo''', - \ 'type': 'E', - \ 'end_col': 9, - \ }, - \ { - \ 'lnum': 2, - \ 'col': 5, - \ 'text': '''NotUsed'' is declared but not used', - \ 'code': 'XDeclaredButNotUsed', - \ 'type': 'W', - \ 'end_col': 11, - \ }, - \ { - \ 'lnum': 12, - \ 'col': 2, - \ 'text': 'with : character', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 8, - \ 'text': 'imported and not used: ''strutils''', - \ 'code': 'UnusedImport', - \ 'type': 'W', - \ 'end_col': 15, - \ }, - \ { - \ 'lnum': 12, - \ 'col': 9, - \ 'text': 'undeclared identifier: ''total''', - \ 'type': 'E', - \ 'end_col': 13, - \ }, - \ { - \ 'lnum': 14, - \ 'col': 1, - \ 'text': '''sum'' cannot be assigned to', - \ 'type': 'E', - \ 'end_col': 3, - \ }, - \ { - \ 'lnum': 15, - \ 'col': 1, - \ 'text': 'redefinition of ''getName''; previous declaration here: /nested/folder/foobar.nim(14, 6)', - \ 'type': 'E', - \ 'end_col': 7, - \ }, - \ ], - \ ale_linters#nim#nimcheck#Handle(bufnr(''), [ - \ 'Line with wrong( format)', - \ 'foobar.nim(8, 8) Warning: use {.base.} for base methods; baseless methods are deprecated [UseBase]', - \ 'foobar.nim(12, 2) Error: identifier expected, but found ''a.barfoo''', - \ '/nested/folder/foobar.nim(2, 5) Hint: ''NotUsed'' is declared but not used [XDeclaredButNotUsed]', - \ 'foobar.nim(12, 2) Error: with : character', - \ 'foobar.nim(1, 8) Warning: imported and not used: ''strutils'' [UnusedImport]', - \ 'foobar.nim(12, 9) Error: undeclared identifier: ''total''', - \ 'foobar.nim(14, 1) Error: ''sum'' cannot be assigned to', - \ 'foobar.nim(15, 1) Error: redefinition of ''getName''; previous declaration here: /nested/folder/foobar.nim(14, 6)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_nix_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_nix_handler.vader deleted file mode 100644 index db6b9a4b..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_nix_handler.vader +++ /dev/null @@ -1,91 +0,0 @@ -Before: - runtime ale_linters/nix/nix.vim - -After: - call ale#linter#Reset() - -Execute(The nix handler should parse nix-instantiate error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 3, - \ 'type': 'E', - \ 'text': "syntax error, unexpected ']', expecting ';'", - \ }, - \ { - \ 'lnum': 3, - \ 'col': 5, - \ 'type': 'E', - \ 'text': "undefined variable 'foo'", - \ }, - \ - \ ], - \ ale_linters#nix#nix#Handle(bufnr(''), [ - \ "@nix {\"line\":6,\"column\":3,\"raw_msg\":\"syntax error, unexpected ']', expecting ';'\"}", - \ "@nix {\"line\":3,\"column\":5,\"raw_msg\":\"undefined variable 'foo'\"}", - \ "@nix {\"unrelated\":\"message\"}" - \ ]) - -Execute(The nix handler should parse message from old nix-instantiate correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 23, - \ 'col': 14, - \ 'text': 'error: syntax error, unexpected IN', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 12, - \ 'text': 'error: syntax error, unexpected ''='', expecting '';''', - \ 'type': 'E', - \ }, - \ - \ ], - \ ale_linters#nix#nix#Handle(47, [ - \ 'This line should be ignored', - \ 'error: syntax error, unexpected IN, at /path/to/filename.nix:23:14', - \ 'error: syntax error, unexpected ''='', expecting '';'', at /path/to/filename.nix:3:12', - \ ]) - -Execute(The nix command should not add 'log-format' option for nix version 2.3): - AssertEqual - \ 'nix-instantiate --parse -', - \ ale_linters#nix#nix#Command('', ['nix-instantiate (Nix) 2.3.0'], '') - -Execute(The nix command should add 'log-format' option for nix version 2.4): - AssertEqual - \ 'nix-instantiate --log-format internal-json --parse -', - \ ale_linters#nix#nix#Command('', ['nix-instantiate (Nix) 2.4.1'], '') - -Execute(The nix command should add 'log-format' option for nix version 2.5): - AssertEqual - \ 'nix-instantiate --log-format internal-json --parse -', - \ ale_linters#nix#nix#Command('', ['nix-instantiate (Nix) 2.5.0pre20211206_d1aaa7e'], '') - -Execute(The nix command should add 'log-format' option for nix version 2.6): - AssertEqual - \ 'nix-instantiate --log-format internal-json --parse -', - \ ale_linters#nix#nix#Command('', ['nix-instantiate (Nix) 2.6.0pre20211206_ignored'], '') - -Execute(The nix command should add 'log-format' option for nix version 2.7): - AssertEqual - \ 'nix-instantiate --log-format internal-json --parse -', - \ ale_linters#nix#nix#Command('', ['nix-instantiate (Nix) 2.7.0pre20211206_ignored'], '') - -Execute(The nix command should add 'log-format' option for nix version 2.8): - AssertEqual - \ 'nix-instantiate --log-format internal-json --parse -', - \ ale_linters#nix#nix#Command('', ['nix-instantiate (Nix) 2.8.0pre20211206_ignored'], '') - -Execute(The nix command should add 'log-format' option for nix version 2.9): - AssertEqual - \ 'nix-instantiate --log-format internal-json --parse -', - \ ale_linters#nix#nix#Command('', ['nix-instantiate (Nix) 2.9.0pre20211206_ignored'], '') - -Execute(The nix command should add 'log-format' option for nix version 3.0): - AssertEqual - \ 'nix-instantiate --log-format internal-json --parse -', - \ ale_linters#nix#nix#Command('', ['nix-instantiate (Nix) 3.0.0pre20211206_ignored'], '') diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_openscad_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_openscad_handler.vader deleted file mode 100644 index 36071cc7..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_openscad_handler.vader +++ /dev/null @@ -1,76 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/handler') - - " Load sca2d - runtime ale_linters/openscad/sca2d.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The openscad handler should handle sca2d output): - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify(g:dir . '/awesome_project.scad'), - \ 'lnum': 7, - \ 'type': 'E', - \ 'col': 42, - \ 'text': 'Module `corcle` used but never defined.', - \ 'detail': 'E2002: Module `corcle` used but never defined.', - \ }, - \ ], - \ ale#handlers#openscad#SCA2D_callback(bufnr(''), [ - \ 'awesome_project.scad:7:42: E2002: Module `corcle` used but never defined.', - \ '', - \ 'SCA2D message summary', - \ '=====================', - \ 'Fatal errors: 0', - \ 'Errors: 1', - \ 'Warnings: 0', - \ 'Info: 0', - \ 'Depreciated 0', - \ ]) - - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify(g:dir . '/awesome_project.scad'), - \ 'lnum': 1, - \ 'type': 'E', - \ 'col': 37, - \ 'text': 'Cannot read file due to syntax error: - No terminal matches ''}'' in the current parser context', - \ 'detail': 'F0001: Cannot read file due to syntax error: - No terminal matches ''}'' in the current parser context', - \ }, - \ ], - \ ale#handlers#openscad#SCA2D_callback(bufnr(''), [ - \ 'awesome_project.scad:1:1: F0001: Cannot read file due to syntax error:', - \ ' - No terminal matches ''}'' in the current parser context, at line 1 col 37', - \ ' - ', - \ ' - translate([ 0, 0, 0 ]) { circle(10) }', - \ ' - ^', - \ ' - Expected one of: ', - \ ' - * IF', - \ ' - * LET', - \ ' - * FOR', - \ ' - * FUNC_CALL_NAME', - \ ' - * TERMINATION', - \ ' - * STAR', - \ ' - * LBRACE', - \ ' - * BANG', - \ ' - * ASSIGN', - \ ' - * PERCENT', - \ ' - * HASH', - \ ' - * INTERSECTION_FOR', - \ ' - ', - \ 'If you belive this is a bug in SCA2D please report it to us.', - \ '', - \ '', - \ 'SCA2D message summary', - \ '=====================', - \ 'Fatal errors: 1', - \ 'Errors: 0', - \ 'Warnings: 0', - \ 'Info: 0', - \ 'Depreciated 0', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_perl6_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_perl6_handler.vader deleted file mode 100644 index 452a9174..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_perl6_handler.vader +++ /dev/null @@ -1,277 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/handler') - - runtime ale_linters/perl6/perl6.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The Perl6 linter should handle empty output): - call ale#test#SetFilename('bar.pl6') - - AssertEqual [], ale_linters#perl6#perl6#Handle(bufnr(''), []) - -Execute(The Perl6 linter should complain about undeclared variables): - call ale#test#SetFilename('bar.pl6') - - AssertEqual - \ [ - \ { - \ 'lnum': '6', - \ 'text': 'Variable ''$tes'' is not declared. Did you mean any of these? $res $test ', - \ 'type': 'E', - \ 'col': '', - \ 'end_lnum': '', - \ 'code': 'X::Undeclared', - \ } - \ ], - \ ale_linters#perl6#perl6#Handle(bufnr(''), [ - \ '{ - \ "X::Undeclared" : { - \ "highexpect" : [ ], - \ "is-compile-time" : 1, - \ "modules" : [ ], - \ "column" : null, - \ "pos" : 18, - \ "symbol" : "$tes", - \ "filename" : "bar.pl6", - \ "what" : "Variable", - \ "pre" : "my $test = 0; say ", - \ "post" : "$tes", - \ "suggestions" : [ - \ "$res", - \ "$test" - \ ], - \ "line" : 6, - \ "message" : "Variable ''$tes'' is not declared. Did you mean any of these?\n $res\n $test\n" - \ } - \ }' - \ ]) - -Execute(The Perl6 linter should complain about Comp::AdHoc errors): - call ale#test#SetFilename('bar.pl6') - - AssertEqual - \ [ - \ { - \ 'lnum': '3', - \ 'type': 'E', - \ 'text': 'is repr(...) trait needs a parameter', - \ 'col': '', - \ 'end_lnum': '', - \ 'code': 'X::Comp::AdHoc', - \ } - \ ], - \ ale_linters#perl6#perl6#Handle(bufnr(''), [ - \ '{ - \ "X::Comp::AdHoc" : { - \ "pre" : "class test is repr", - \ "message" : "is repr(...) trait needs a parameter", - \ "line" : 3, - \ "post" : " {}", - \ "is-compile-time" : true, - \ "pos" : 19, - \ "highexpect" : [ ], - \ "payload" : "is repr(...) trait needs a parameter", - \ "filename" : "bar.pl6", - \ "column" : null, - \ "modules" : [ ] - \ } - \ }' - \]) - -Execute(The Perl6 linter should be able to extract a line number from an error message): - call ale#test#SetFilename('bar.pl6') - - AssertEqual - \ [ - \ { - \ 'lnum': '3', - \ 'text': 'Could not find Module::Does::not::exist at line 3 in: /usr/share/perl6/site /usr/share/perl6/vendor /usr/share/perl6 CompUnit::Repository::AbsolutePath<94023691448416> CompUnit::Repository::NQP<94023670532736> CompUnit::Repository::Perl5<94023670532776>', - \ 'col': '', - \ 'type': 'E', - \ 'end_lnum': '', - \ 'code': 'X::CompUnit::UnsatisfiedDependency', - \ } - \ ], - \ ale_linters#perl6#perl6#Handle(bufnr(''), [ - \ '{ - \ "X::CompUnit::UnsatisfiedDependency" : { - \ "message" : "Could not find Module::Does::not::exist at line 3 in:\n /usr/share/perl6/site\n /usr/share/perl6/vendor\n /usr/share/perl6\n CompUnit::Repository::AbsolutePath<94023691448416>\n CompUnit::Repository::NQP<94023670532736>\n CompUnit::Repository::Perl5<94023670532776>", - \ "specification" : "Module::Does::not::exist" - \ } - \ }' - \ ]) - -Execute(The Perl6 linter should be able to differentiate between warnings and errors): - call ale#test#SetFilename('bar.pl6') - - AssertEqual - \ [ - \ { - \ 'lnum': '1', - \ 'col': '', - \ 'code': 'X::Syntax::Regex::Unterminated', - \ 'end_lnum': '', - \ 'type': 'E', - \ 'text': 'Regex not terminated.', - \ }, - \ { - \ 'lnum': '1', - \ 'col': '', - \ 'code': 'X::Comp::AdHoc', - \ 'end_lnum': '', - \ 'type': 'W', - \ 'text': 'Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)', - \ } - \ ], - \ ale_linters#perl6#perl6#Handle(bufnr(''), [ - \ '{ - \ "X::Comp::Group" : { - \ "message" : "Regex not terminated.\nUnable to parse regex; couldn''t find final ''/''\nSpace is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)", - \ "panic" : "Unable to parse regex; couldn''t find final ''/''", - \ "sorrows" : [ - \ { - \ "X::Syntax::Regex::Unterminated" : { - \ "highexpect" : [ - \ "infix stopper" - \ ], - \ "pos" : 6, - \ "is-compile-time" : 1, - \ "modules" : [ ], - \ "post" : "", - \ "message" : "Regex not terminated.", - \ "line" : 1, - \ "filename" : "bar.pl6", - \ "column" : null, - \ "pre" : "/win 3" - \ } - \ } - \ ], - \ "worries" : [ - \ { - \ "X::Comp::AdHoc" : { - \ "filename" : "bar.pl6", - \ "line" : 1, - \ "column" : null, - \ "pre" : "/win", - \ "highexpect" : [ ], - \ "payload" : "Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)", - \ "post" : " 3", - \ "message" : "Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)", - \ "modules" : [ ], - \ "is-compile-time" : true, - \ "pos" : 4 - \ } - \ } - \ ] - \ } - \ }' - \]) - -Execute(The Perl6 linter should gracefully handle non-JSON messages): - call ale#test#SetFilename('bar.pl6') - - AssertEqual - \ [ - \ { - \ 'lnum': '1', - \ 'text': 'Received output in the default Perl6 error format. See :ALEDetail for details', - \ 'type': 'W', - \ 'detail': join([ - \ 'Potential difficulties:', - \ ' Redeclaration of symbol ''$_''', - \ ' at /home/travis/perl6-error-fail/insanity-test.pl6:1', - \ ' ------> sub foo($_) {.say}; my $_ = 1; .&foo;', - \ ' Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)', - \ ' at /home/travis/perl6-error-fail/insanity-test.pl6:4', - \ ' ------> /win 3/', - \ 'Syntax OK',], "\n") - \ } - \ ], - \ ale_linters#perl6#perl6#Handle(bufnr(''), [ - \ 'Potential difficulties:', - \ ' Redeclaration of symbol ''$_''', - \ ' at /home/travis/perl6-error-fail/insanity-test.pl6:1', - \ ' ------> sub foo($_) {.say}; my $_ = 1; .&foo;', - \ ' Space is not significant here; please use quotes or :s (:sigspace) modifier (or, to suppress this warning, omit the space, or otherwise change the spacing)', - \ ' at /home/travis/perl6-error-fail/insanity-test.pl6:4', - \ ' ------> /win 3/', - \ 'Syntax OK' - \ ]) - -Execute(The Perl6 linter should gracefully handle messages without a line number): - call ale#test#SetFilename('bar.pl6') - - AssertEqual - \ [ - \ { - \ 'lnum': '1', - \ 'end_lnum': '', - \ 'text': 'Cannot find method ''has_compile_time_value'' on object of type NQPMu', - \ 'type': 'E', - \ 'col' : '', - \ 'code': 'X::AdHoc', - \ } - \ ], - \ ale_linters#perl6#perl6#Handle(bufnr(''), [ - \ '{', - \ '"X::AdHoc" : {', - \ '"message" : "Cannot find method ''has_compile_time_value'' on object of type NQPMu",', - \ '"payload" : "Cannot find method ''has_compile_time_value'' on object of type NQPMu"', - \ '}', - \ '}', - \ ]) - -Execute(The Perl6 linter should not include errors from a known separate file): - call ale#test#SetFilename('bar.pl6') - - AssertEqual - \ [], - \ ale_linters#perl6#perl6#Handle(bufnr(''), [ - \ '{ - \ "X::Undeclared" : { - \ "highexpect" : [ ], - \ "is-compile-time" : 1, - \ "modules" : [ ], - \ "column" : null, - \ "pos" : 18, - \ "symbol" : "$tes", - \ "filename" : "foo.pl6", - \ "what" : "Variable", - \ "pre" : "my $test = 0; say ", - \ "post" : "$tes", - \ "suggestions" : [ - \ "$res", - \ "$test" - \ ], - \ "line" : 6, - \ "message" : "Variable ''$tes'' is not declared. Did you mean any of these?\n $res\n $test\n" - \ } - \ }' - \ ]) - -Execute(The Perl6 linter should not ignore errors without a filename): - call ale#test#SetFilename('bar.pl6') - - AssertEqual - \ [ - \ { - \ 'lnum': '3', - \ 'end_lnum': '', - \ 'text': 'Cannot find method ''has_compile_time_value'' on object of type NQPMu', - \ 'type': 'E', - \ 'col' : '', - \ 'code': 'X::AdHoc', - \ } - \ ], - \ ale_linters#perl6#perl6#Handle(bufnr(''), [ - \ '{', - \ '"X::AdHoc" : {', - \ '"line" : 3,', - \ '"message" : "Cannot find method ''has_compile_time_value'' on object of type NQPMu",', - \ '"payload" : "Cannot find method ''has_compile_time_value'' on object of type NQPMu"', - \ '}', - \ '}', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_perl_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_perl_handler.vader deleted file mode 100644 index 060b1ffe..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_perl_handler.vader +++ /dev/null @@ -1,109 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/handler') - - runtime ale_linters/perl/perl.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The Perl linter should handle empty output): - call ale#test#SetFilename('bar.pl') - - AssertEqual [], ale_linters#perl#perl#Handle(bufnr(''), []) - -Execute(The Perl linter should ignore errors from other files): - call ale#test#SetFilename('bar.pl') - - AssertEqual - \ [ - \ {'lnum': '2', 'type': 'E', 'text': 'Compilation failed in require'}, - \ ], - \ ale_linters#perl#perl#Handle(bufnr(''), [ - \ 'syntax error at ' . ale#path#Simplify(g:dir . '/foo.pm') . ' line 4, near "aklsdfjmy "', - \ 'Compilation failed in require at ' . ale#path#Simplify(g:dir . '/bar.pl') . ' line 2.', - \ 'BEGIN failed--compilation aborted at ' . ale#path#Simplify(g:dir . '/bar.pl') . ' line 2.', - \ ]) - -Execute(The Perl linter should complain about failing to locate modules): - AssertEqual - \ [ - \ { - \ 'lnum': '23', - \ 'type': 'E', - \ 'text': 'Can''t locate JustOneDb.pm in @INC (you may need to install the JustOneDb module) (@INC contains: /home/local/sean/work/PostgreSQL/6616/../../../../lib /home/local/sean/work/PostgreSQL/6616/lib lib /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .)', - \ }, - \ ], - \ ale_linters#perl#perl#Handle(bufnr(''), [ - \ 'Can''t locate JustOneDb.pm in @INC (you may need to install the JustOneDb module) (@INC contains: /home/local/sean/work/PostgreSQL/6616/../../../../lib /home/local/sean/work/PostgreSQL/6616/lib lib /etc/perl /usr/local/lib/perl/5.18.2 /usr/local/share/perl/5.18.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.18 /usr/share/perl/5.18 /usr/local/lib/site_perl .) at - line 23.', - \ 'BEGIN failed--compilation aborted at - line 23.', - \ ]) - - -Execute(The Perl linter should complain about failing to locate modules): - AssertEqual - \ [ - \ {'lnum': '8', 'type': 'E', 'text': 'BEGIN failed--compilation aborted'}, - \ {'lnum': '10', 'type': 'E', 'text': 'BEGIN failed--compilation aborted'} - \ ], - \ ale_linters#perl#perl#Handle(bufnr(''), [ - \ 'Unable to build `ro` accessor for slot `path` in `App::CPANFileUpdate` because the slot cannot be found. at /extlib/Method/Traits.pm line 189.', - \ 'BEGIN failed--compilation aborted at - line 8.', - \ 'Unable to build `ro` accessor for slot `path` in `App::CPANFileUpdate` because the slot cannot be found. at /extlib/Method/Traits.pm line 189.', - \ 'BEGIN failed--compilation aborted at - line 10.', - \ ]) - -Execute(The Perl linter should not report warnings as errors): - AssertEqual - \ [ - \ {'lnum': '5', 'type': 'W', 'text': '"my" variable $foo masks earlier declaration in same scope'}, - \ ], - \ ale_linters#perl#perl#Handle(bufnr(''), [ - \ '"my" variable $foo masks earlier declaration in same scope at - line 5.', - \ 't.pl syntax OK', - \ ]) - -Execute(The Perl linter does not default to reporting generic error): - AssertEqual - \ [ - \ {'lnum': '8', 'type': 'E', 'text': 'Missing right curly or square bracket'}, - \ ], - \ ale_linters#perl#perl#Handle(bufnr(''), [ - \ 'Missing right curly or square bracket at - line 8, at end of line', - \ 'syntax error at - line 8, at EOF', - \ 'Execution of t.pl aborted due to compilation errors.', - \ ]) - -" The first "error" is actually a warning, but the current implementation -" doesn't have a good way of teasing out the warnings from amongst the -" errors. If we're able to do this in future, then we'll want to switch -" the first "E" to a "W". - -Execute(The Perl linter reports errors even when mixed with warnings): - AssertEqual - \ [ - \ {'lnum': '5', 'type': 'E', 'text': '"my" variable $foo masks earlier declaration in same scope'}, - \ {'lnum': '8', 'type': 'E', 'text': 'Missing right curly or square bracket'}, - \ ], - \ ale_linters#perl#perl#Handle(bufnr(''), [ - \ '"my" variable $foo masks earlier declaration in same scope at - line 5.', - \ 'Missing right curly or square bracket at - line 8, at end of line', - \ 'syntax error at - line 8, at EOF', - \ 'Execution of t.pl aborted due to compilation errors.', - \ ]) - -Execute(The Perl linter reports errors even when an additional file location is included): - AssertEqual - \ [ - \ {'lnum': '5', 'type': 'E', 'text': '"my" variable $foo masks earlier declaration in same scope'}, - \ {'lnum': '6', 'type': 'E', 'text': '"my" variable $foo masks earlier declaration in same scope'}, - \ {'lnum': '11', 'type': 'E', 'text': 'Global symbol "$asdf" requires explicit package name (did you forget to declare "my $asdf"?)'}, - \ {'lnum': '12', 'type': 'E', 'text': 'Global symbol "$asdf" requires explicit package name (did you forget to declare "my $asdf"?)'}, - \ ], - \ ale_linters#perl#perl#Handle(bufnr(''), [ - \ '"my" variable $foo masks earlier declaration in same scope at - line 5.', - \ '"my" variable $foo masks earlier declaration in same scope at - line 6, at line 1.', - \ 'Global symbol "$asdf" requires explicit package name (did you forget to declare "my $asdf"?) at - line 11.', - \ 'Global symbol "$asdf" requires explicit package name (did you forget to declare "my $asdf"?) at - line 12, line 1.', - \ 'Execution of t.pl aborted due to compilation errors.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_perlcritic_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_perlcritic_handler.vader deleted file mode 100644 index f00b07da..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_perlcritic_handler.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - runtime ale_linters/perl/perlcritic.vim - -After: - call ale#linter#Reset() - -Execute(The Perl::Critic handler should create all issues as warnings): - AssertEqual - \ [ - \ { - \ 'lnum': '21', - \ 'col': '17', - \ 'text': 'Regular expression without "/m" flag', - \ 'type': 'W', - \ } - \ ], - \ ale_linters#perl#perlcritic#Handle(99, [ - \ '21:17 Regular expression without "/m" flag' - \ ]) - diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_php_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_php_handler.vader deleted file mode 100644 index 6fe9b323..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_php_handler.vader +++ /dev/null @@ -1,93 +0,0 @@ -Before: - runtime ale_linters/php/php.vim - -After: - call ale#linter#Reset() - -Given (Some invalid lines of PHP): - [foo;] - class Foo { / } - $foo) - ['foo' 'bar'] - function count() {} - -Execute(The php handler should calculate column numbers): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 5, - \ 'end_col': 5, - \ 'text': "syntax error, unexpected ';', expecting ']'", - \ }, - \ { - \ 'lnum': 2, - \ 'col': 13, - \ 'end_col': 13, - \ 'text': "syntax error, unexpected '/', expecting function (T_FUNCTION) or const (T_CONST)", - \ }, - \ { - \ 'lnum': 3, - \ 'col': 5, - \ 'end_col': 5, - \ 'text': "syntax error, unexpected ')'", - \ }, - \ { - \ 'lnum': 4, - \ 'col': 8, - \ 'end_col': 12, - \ 'text': "syntax error, unexpected ''bar'' (T_CONSTANT_ENCAPSED_STRING), expecting ']'", - \ }, - \ ], - \ ale_linters#php#php#Handle(347, [ - \ "This line should be ignored completely", - \ "Parse error: syntax error, unexpected ';', expecting ']' in - on line 1", - \ "Parse error: syntax error, unexpected '/', expecting function (T_FUNCTION) or const (T_CONST) in - on line 2", - \ "Parse error: syntax error, unexpected ')' in - on line 3", - \ "Parse error: syntax error, unexpected ''bar'' (T_CONSTANT_ENCAPSED_STRING), expecting ']' in - on line 4", - \ ]) - -Execute (The php handler should ignore lines starting with 'PHP Parse error'): - AssertEqual - \ [], - \ ale_linters#php#php#Handle(347, [ - \ "PHP Parse error: syntax error, This line should be ignored completely in - on line 1", - \ ]) - -Execute (The php handler should handle lines containing 'Standard input code'): - AssertEqual - \ [ - \ { - \ 'lnum': 47, - \ 'col': 0, - \ 'text': "Invalid numeric literal", - \ }, - \ ], - \ ale_linters#php#php#Handle(347, [ - \ "Parse error: Invalid numeric literal in Standard input code on line 47", - \ ]) -Execute (The php handler should parse lines without column indication): - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 0, - \ 'text': "Cannot redeclare count()", - \ }, - \ { - \ 'lnum': 21, - \ 'col': 0, - \ 'text': "syntax error, unexpected end of file", - \ }, - \ { - \ 'lnum': 47, - \ 'col': 0, - \ 'text': "Invalid numeric literal", - \ }, - \ ], - \ ale_linters#php#php#Handle(347, [ - \ "This line should be ignored completely", - \ "Fatal error: Cannot redeclare count() in - on line 5", - \ "Parse error: syntax error, unexpected end of file in - on line 21", - \ "Parse error: Invalid numeric literal in - on line 47", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_php_phan_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_php_phan_handler.vader deleted file mode 100644 index bbdae5dd..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_php_phan_handler.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - runtime ale_linters/php/phan.vim - -After: - call ale#linter#Reset() - -Execute(The php static analyzer handler should parse errors from phan): - AssertEqual - \ [ - \ { - \ 'lnum': 25, - \ 'type': 'W', - \ 'text': 'Return type of getValidator is undeclared type \Respect\Validation\Validator', - \ 'filename': 'example.php', - \ }, - \ { - \ 'lnum': 66, - \ 'type': 'W', - \ 'text': 'Call to method string from undeclared class \Respect\Validation\Validator', - \ 'filename': 'example.php', - \ }, - \ ], - \ ale_linters#php#phan#Handle(347, [ - \ "example.php:25 PhanUndeclaredTypeReturnType Return type of getValidator is undeclared type \\Respect\\Validation\\Validator", - \ "example.php:66 PhanUndeclaredClassMethod Call to method string from undeclared class \\Respect\\Validation\\Validator", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_php_phpmd_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_php_phpmd_handler.vader deleted file mode 100644 index f161d731..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_php_phpmd_handler.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - runtime ale_linters/php/phpmd.vim - -After: - call ale#linter#Reset() - -Execute(The php static analyzer handler should parse errors from phpmd): - AssertEqual - \ [ - \ { - \ 'lnum': 22, - \ 'type': 'W', - \ 'text': "Avoid unused local variables such as '$response'.", - \ }, - \ { - \ 'lnum': 14, - \ 'type': 'W', - \ 'text': "The method test uses an else expression. Else is never necessary and you can simplify the code to work without else.", - \ }, - \ ], - \ ale_linters#php#phpmd#Handle(347, [ - \ "example.php:22 Avoid unused local variables such as '$response'.", - \ "example.php:14 The method test uses an else expression. Else is never necessary and you can simplify the code to work without else.", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_phpcs_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_phpcs_handler.vader deleted file mode 100644 index 26d35cb8..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_phpcs_handler.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - runtime ale_linters/php/phpcs.vim - -After: - call ale#linter#Reset() - -Execute(phpcs errors should be handled): - AssertEqual - \ [ - \ { - \ 'lnum': 18, - \ 'col': 3, - \ 'type': 'E', - \ 'sub_type': 'style', - \ 'text': 'Line indented incorrectly; expected 4 spaces, found 2 (Generic.WhiteSpace.ScopeIndent.IncorrectExact)', - \ }, - \ { - \ 'lnum': 22, - \ 'col': 3, - \ 'type': 'E', - \ 'sub_type': 'style', - \ 'text': 'All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks)', - \ }, - \ ], - \ ale_linters#php#phpcs#Handle(bufnr(''), [ - \ '/path/to/some-filename.php:18:3: error - Line indented incorrectly; expected 4 spaces, found 2 (Generic.WhiteSpace.ScopeIndent.IncorrectExact)', - \ "/path/to/some-filename.php:22:3: error - All output should be run through an escaping function (see the Security sections in the WordPress Developer Handbooks), found '\"\n'.", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_phpstan_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_phpstan_handler.vader deleted file mode 100644 index 58cb574f..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_phpstan_handler.vader +++ /dev/null @@ -1,51 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - - runtime ale_linters/php/phpstan.vim - -After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Output without errors should be parsed correctly): - call ale#test#SetFilename('phpstan-test-files/foo/test.php') - - AssertEqual - \ [], - \ ale_linters#php#phpstan#Handle(bufnr(''), [ - \ '{"totals":{"errors":0,"file_errors":0},"files":[],"errors":[]}', - \ ]) - -Execute(Output with some errors should be parsed correctly): - call ale#test#SetFilename('phpstan-test-files/foo/test.php') - - AssertEqual - \ [ - \ { - \ 'lnum': 9, - \ 'text': 'Call to method format() on an unknown class DateTimeImutable.', - \ 'type': 'E' - \ }, - \ { - \ 'lnum': 16, - \ 'text': 'Sample message.', - \ 'type': 'E' - \ }, - \ { - \ 'lnum': 192, - \ 'text': 'Invalid command testCommand.', - \ 'type': 'E' - \ } - \ ], - \ ale_linters#php#phpstan#Handle(bufnr(''), [json_encode( - \ { - \ "totals":{"errors": 0, "file_errors": 11}, - \ "files":{expand('%:p'): {"errors": 3, "messages": [ - \ {"message": "Call to method format() on an unknown class DateTimeImutable.", "line":9}, - \ {"message": "Sample message.", "line":16}, - \ {"message": "Invalid command testCommand.", "line": 192} - \ ]}} - \ }, - \)]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_pmd_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_pmd_handler.vader deleted file mode 100644 index 4f64c9ca..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_pmd_handler.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - runtime ale_linters/java/pmd.vim - -After: - call ale#linter#Reset() - -Execute(The pmd handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 18, - \ 'text': 'Each class should declare at least one constructor', - \ 'code': 'Code Style - AtLeastOneConstructor', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 36, - \ 'text': 'Local variable ''node'' could be declared final', - \ 'code': 'Code Style - LocalVariableCouldBeFinal', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#java#pmd#Handle(666, [ - \ '"Problem","Package","File","Priority","Line","Description","Rule set","Rule"', - \ '"1","rsb.performance.test.ros","/home/languitar/src/rsb-performance-test-api-ros/src/main/java/rsb/performance/test/ros/NodeHolder.java","3","18","Each class should declare at least one constructor","Code Style","AtLeastOneConstructor"', - \ '"2","rsb.performance.test.ros","/home/languitar/src/rsb-performance-test-api-ros/src/main/java/rsb/performance/test/ros/NodeHolder.java","1","36","Local variable ''node'' could be declared final","Code Style","LocalVariableCouldBeFinal"' - \ ]) - -Execute(The pmd handler should parse lines correctly for java files that use unnamed packages): - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'text': 'Avoid unused local variables such as ''stest''.', - \ 'code': 'Best Practices - UnusedLocalVariable', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#java#pmd#Handle(666, [ - \ '"Problem","Package","File","Priority","Line","Description","Rule set","Rule"', - \ '"1","","/Users/diego/Projects/github.com/dlresende/kata-fizz-buzz/src/main/java/App.java","3","8","Avoid unused local variables such as ''stest''.","Best Practices","UnusedLocalVariable"' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_pony_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_pony_handler.vader deleted file mode 100644 index 25a8254b..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_pony_handler.vader +++ /dev/null @@ -1,21 +0,0 @@ -Execute(The pony handler should handle ponyc output): - call ale#test#SetFilename('foo.pony') - - AssertEqual - \ [ - \ { - \ 'filename': '/home/projects/Wombat.pony', - \ 'lnum': 22, - \ 'type': 'E', - \ 'col': 30, - \ 'text': 'can''t lookup private fields from outside the type', - \ }, - \ ], - \ ale#handlers#pony#HandlePonycFormat(bufnr(''), [ - \ 'Building builtin -> /usr/lib/pony/0.21.3/packages/builtin', - \ 'Building . -> /home/projects', - \ 'Error:', - \ '/home/projects/Wombat.pony:22:30: can''t lookup private fields from outside the type', - \ ' env.out.print(defaultWombat._hunger_level)', - \ ' ^', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_powershell_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_powershell_handler.vader deleted file mode 100644 index 77c3dc65..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_powershell_handler.vader +++ /dev/null @@ -1,109 +0,0 @@ -Before: - runtime ale_linters/powershell/powershell.vim - -After: - call ale#linter#Reset() - -Execute(The powershell handler should process syntax errors from parsing a powershell script): - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'col': 29, - \ 'type': 'E', - \ 'text': 'Missing closing ''}'' in statement block or type definition.', - \ 'code': 'ParseException', - \ }, - \ ], - \ ale_linters#powershell#powershell#Handle(bufnr(''), [ - \ "At line:8 char:29", - \ "+ Invoke-Command -ScriptBlock {", - \ "+ ~", - \ "Missing closing '}' in statement block or type definition.", - \ "At /home/harrisj/tester.ps1:5 char:5", - \ "+ [void]$ExecutionContext.InvokeCommand.NewScriptBlock($Contents);", - \ "+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~", - \ "+ CategoryInfo : NotSpecified: (:) [], ParseException", - \ "+ FullyQualifiedErrorId : ParseException" - \ ]) - -Execute(The powershell handler should process multiple syntax errors from parsing a powershell script): - AssertEqual - \ [ - \ { - \ 'lnum': 11, - \ 'col': 31, - \ 'type': 'E', - \ 'text': 'The string is missing the terminator: ".', - \ 'code': 'ParseException' - \ }, - \ { - \ 'lnum': 3, - \ 'col': 16, - \ 'type': 'E', - \ 'text': 'Missing closing ''}'' in statement block or type definition.', - \ 'code': 'ParseException' - \ }, - \ ], - \ ale_linters#powershell#powershell#Handle(bufnr(''), [ - \ 'At line:11 char:31', - \ '+ write-verbose ''deleted''', - \ '+ ~', - \ 'The string is missing the terminator: ".', - \ 'At line:3 char:16', - \ '+ invoke-command {', - \ '+ ~', - \ 'Missing closing ''}'' in statement block or type definition.', - \ 'At /var/folders/qv/15ybvt050v9cgwrm7c95x4r4zc4qsg/T/vwhzIc8/1/script.ps1:1 char:150', - \ '+ ... ontents); [void]$ExecutionContext.InvokeCommand.NewScriptBlock($Con ...', - \ '+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', - \ '+ CategoryInfo : NotSpecified: (:) [], ParseException', - \ '+ FullyQualifiedErrorId : ParseException' - \ ]) -Execute(The powershell handler should process unexecpected token that contains a newline character): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 8, - \ 'type': 'E', - \ 'text': 'The string is missing the terminator: ".', - \ 'code': 'ParseException' - \ }, - \ { - \ 'lnum': 2, - \ 'col': 8, - \ 'type': 'E', - \ 'text': 'Unexpected token ''"', - \ 'code': 'ParseException' - \ }, - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Missing closing ''}'' in statement block or type definition.', - \ 'code': 'ParseException' - \ } - \ ], - \ ale_linters#powershell#powershell#Handle(bufnr(''), [ - \ 'At line:2 char:8', - \ '+ "" "', - \ '+ ~', - \ 'The string is missing the terminator: ".', - \ 'At line:2 char:8', - \ '+ "" "', - \ '+ ~', - \ 'Unexpected token ''"', - \ '', - \ ' }'' in expression or statement.', - \ '', - \ 'At line:1 char:1', - \ '+ {', - \ '+ ~', - \ 'Missing closing ''}'' in statement block or type definition.', - \ 'At C:\Users\jpharris\AppData\Local\Temp\VIAA777.tmp\script.ps1:1 char:150', - \ '+ ... ontents); [void]$ExecutionContext.InvokeCommand.NewScriptBlock($Con ...', - \ '+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~', - \ ' + CategoryInfo : NotSpecified: (:) [], ParseException', - \ ' + FullyQualifiedErrorId : ParseException' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_prospector_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_prospector_handler.vader deleted file mode 100644 index 935c37da..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_prospector_handler.vader +++ /dev/null @@ -1,163 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/python/prospector.vim - -After: - Restore - - call ale#linter#Reset() - - silent file something_else.py - -Execute(Basic prospector errors should be handle): - AssertEqual - \ [ - \ { - \ 'lnum': 20, - \ 'col': 1, - \ 'text': 'Trailing whitespace', - \ 'code': '(pylint) trailing-whitespace', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'Missing module docstring', - \ 'code': '(pylint) missing-docstring', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'text': 'Missing function docstring', - \ 'code': '(pylint) missing-docstring', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 5, - \ 'text': '''break'' not properly in loop', - \ 'code': '(pylint) not-in-loop', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 5, - \ 'text': 'Unreachable code', - \ 'code': '(pylint) unreachable', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 33, - \ 'text': 'No exception type(s) specified', - \ 'code': '(pylint) bare-except', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#python#prospector#Handle(bufnr(''), [ - \ '{', - \ ' "messages": [', - \ ' {', - \ ' "source": "pylint",', - \ ' "code": "trailing-whitespace",', - \ ' "message": "Trailing whitespace",', - \ ' "location": {', - \ ' "character": 0,', - \ ' "line": 20', - \ ' }', - \ ' },', - \ ' {', - \ ' "source": "pylint",', - \ ' "code": "missing-docstring",', - \ ' "message": "Missing module docstring",', - \ ' "location": {', - \ ' "character": 0,', - \ ' "line": 1', - \ ' }', - \ ' },', - \ ' {', - \ ' "source": "pylint",', - \ ' "code": "missing-docstring",', - \ ' "message": "Missing function docstring",', - \ ' "location": {', - \ ' "character": 0,', - \ ' "line": 2', - \ ' }', - \ ' },', - \ ' {', - \ ' "source": "pylint",', - \ ' "code": "not-in-loop",', - \ ' "message": "''break'' not properly in loop",', - \ ' "location": {', - \ ' "character": 4,', - \ ' "line": 3', - \ ' }', - \ ' },', - \ ' {', - \ ' "source": "pylint",', - \ ' "code": "unreachable",', - \ ' "message": "Unreachable code",', - \ ' "location": {', - \ ' "character": 4,', - \ ' "line": 4', - \ ' }', - \ ' },', - \ ' {', - \ ' "source": "pylint",', - \ ' "code": "bare-except",', - \ ' "message": "No exception type(s) specified",', - \ ' "location": {', - \ ' "character": 32,', - \ ' "line": 7', - \ ' }', - \ ' }', - \ ' ]', - \ '}', - \ ]) - -Execute(Ignoring trailing whitespace messages should work): - let g:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'Missing module docstring', - \ 'code': '(pylint) missing-docstring', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#python#prospector#Handle(bufnr(''), [ - \ '{', - \ ' "messages": [', - \ ' {', - \ ' "source": "pylint",', - \ ' "code": "trailing-whitespace",', - \ ' "message": "Trailing whitespace",', - \ ' "location": {', - \ ' "character": 0,', - \ ' "line": 4', - \ ' }', - \ ' },', - \ ' {', - \ ' "source": "pylint",', - \ ' "code": "missing-docstring",', - \ ' "message": "Missing module docstring",', - \ ' "location": {', - \ ' "character": 0,', - \ ' "line": 1', - \ ' }', - \ ' }', - \ ' ]', - \ '}', - \ ]) - -Execute(The prospector handler should handle empty output): - AssertEqual - \ [], - \ ale_linters#python#prospector#Handle(bufnr(''), []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_psscriptanalyzer_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_psscriptanalyzer_handler.vader deleted file mode 100644 index 060d5941..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_psscriptanalyzer_handler.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - runtime ale_linters/powershell/psscriptanalyzer.vim - -After: - call ale#linter#Reset() - -Execute(The psscriptanalyzer handler should handle basic information or warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'type': 'I', - \ 'text': 'The cmdlet ''Get-GithubRepo'' does not have a help comment.', - \ 'code': 'PSProvideCommentHelp', - \ }, - \ { - \ 'lnum': 9, - \ 'type': 'W', - \ 'text': '''%'' is an alias of ''ForEach-Object''. Alias can introduce possible problems and make scripts hard to maintain. Please consider changing alias to its full content.', - \ 'code': 'PSAvoidUsingCmdletAliases', - \ }, - \ { - \ 'lnum': 23, - \ 'type': 'E', - \ 'text': 'The ComputerName parameter of a cmdlet should not be hardcoded as this will expose sensitive information about the system.', - \ 'code': 'PSAvoidUsingComputerNameHardcoded', - \ }, - \ ], - \ ale_linters#powershell#psscriptanalyzer#Handle(bufnr(''), [ - \ '1', - \ 'Information', - \ 'The cmdlet ''Get-GithubRepo'' does not have a help comment.', - \ 'PSProvideCommentHelp', - \ '9', - \ 'Warning', - \ '''%'' is an alias of ''ForEach-Object''. Alias can introduce possible problems and make scripts hard to maintain. Please consider changing alias to its full content.', - \ 'PSAvoidUsingCmdletAliases', - \ '23', - \ 'Error', - \ 'The ComputerName parameter of a cmdlet should not be hardcoded as this will expose sensitive information about the system.', - \ 'PSAvoidUsingComputerNameHardcoded', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_puglint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_puglint_handler.vader deleted file mode 100644 index f37518bb..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_puglint_handler.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - runtime ale_linters/pug/puglint.vim - -After: - call ale#linter#Reset() - -Execute(Regular errors should be handled): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 5, - \ 'type': 'E', - \ 'text': 'Static attribute "class" must be written as class literal', - \ }, - \ ], - \ ale_linters#pug#puglint#Handle(0, [ - \ '/tmp/vwYwsJA/233/test.pug:1:5 Static attribute "class" must be written as class literal', - \ ]) - -Execute(syntax errors in the configuration file should be handled): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': 'puglint configuration error (type :ALEDetail for more information)', - \ 'detail': join( - \ [ - \ 'undefined:2', - \ ' disallowClassAttributeWithStaticValue: true', - \ ' ^', - \ 'SyntaxError: Unexpected token d in JSON at position 4', - \ ' at JSON.parse ()', - \ ], - \ "\n" - \ ), - \ }, - \ ], - \ ale_linters#pug#puglint#Handle(0, [ - \ 'undefined:2', - \ ' disallowClassAttributeWithStaticValue: true', - \ ' ^', - \ 'SyntaxError: Unexpected token d in JSON at position 4', - \ ' at JSON.parse ()', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_puppet_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_puppet_handler.vader deleted file mode 100644 index 03adc9f0..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_puppet_handler.vader +++ /dev/null @@ -1,77 +0,0 @@ -Before: - runtime ale_linters/puppet/puppet.vim - -After: - call ale#linter#Reset() - -Execute(The puppet handler should parse lines correctly when no column is supplied): - " Line Error - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 0, - \ 'text': "Syntax error at '='; expected '}'" - \ }, - \ { - \ 'lnum': 3, - \ 'col': 0, - \ 'text': "Syntax error at '='; expected '}'" - \ }, - \ ], - \ ale_linters#puppet#puppet#Handle(255, [ - \ "Error: Could not parse for environment production: Syntax error at '='; expected '}' at /root/puppetcode/modules/pancakes/manifests/init.pp:5", - \ "Error: Could not parse for environment production: Syntax error at '='; expected '}' at C:/puppet/modules/pancakes/manifests/init.pp:3", - \ ]) - -Execute(The puppet handler should parse lines and column correctly): - " Line Error - AssertEqual - \ [ - \ { - \ 'lnum': 43, - \ 'col': 12, - \ 'text': "Syntax error at ':'" - \ }, - \ { - \ 'lnum': 54, - \ 'col': 9, - \ 'text': "Syntax error at ':'" - \ }, - \ { - \ 'lnum': 45, - \ 'col': 12, - \ 'text': "Syntax error at 'parameter1'" - \ }, - \ ], - \ ale_linters#puppet#puppet#Handle(255, [ - \ "Error: Could not parse for environment production: Syntax error at ':' at /root/puppetcode/modules/nginx/manifests/init.pp:43:12", - \ "Error: Could not parse for environment production: Syntax error at ':' at C:/puppet/modules/nginx/manifests/init.pp:54:9", - \ "Error: Could not parse for environment production: Syntax error at 'parameter1' (file: /tmp/modules/mariadb/manifests/slave.pp, line: 45, column: 12)", - \ ]) - -Execute(The puppet handler should correctly parse errors that are reported before even trying to parse for an environment): - " Line Error - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 11, - \ 'text': "Illegal attempt to assign to 'a Name'. Not an assignable reference" - \ }, - \ ], - \ ale_linters#puppet#puppet#Handle(255, [ - \ "Error: Illegal attempt to assign to 'a Name'. Not an assignable reference (file: /tmp/modules/waffles/manifests/syrup.pp, line: 5, column: 11)", - \ ]) -Execute(The puppet handler should parse lines when end of input is the location): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'col': 0, - \ 'text': "Syntax error at end of input" - \ }, - \ ], - \ ale_linters#puppet#puppet#Handle(255, [ - \ "Error: Could not parse for environment production: Syntax error at end of input (file: /tmp//modules/test/manifests/init.pp)", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_pycodestyle_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_pycodestyle_handler.vader deleted file mode 100644 index 3664455e..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_pycodestyle_handler.vader +++ /dev/null @@ -1,154 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_blank_lines - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_blank_lines = 1 - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/python/pycodestyle.vim - -After: - Restore - - unlet! b:ale_warn_about_trailing_blank_lines - unlet! b:ale_warn_about_trailing_whitespace - - call ale#linter#Reset() - silent file something_else.py - -Execute(The pycodestyle handler should parse output): - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'col': 3, - \ 'type': 'E', - \ 'text': 'SyntaxError: invalid syntax', - \ 'code': 'E999', - \ }, - \ { - \ 'lnum': 69, - \ 'col': 11, - \ 'text': 'multiple imports on one line', - \ 'code': 'E401', - \ 'type': 'E', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 77, - \ 'col': 1, - \ 'text': 'expected 2 blank lines, found 1', - \ 'code': 'E302', - \ 'type': 'E', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 88, - \ 'col': 5, - \ 'text': 'expected 1 blank line, found 0', - \ 'code': 'E301', - \ 'type': 'E', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 222, - \ 'col': 34, - \ 'text': 'deprecated form of raising exception', - \ 'code': 'W602', - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ { - \ 'lnum': 544, - \ 'col': 21, - \ 'text': '.has_key() is deprecated, use ''in''', - \ 'code': 'W601', - \ 'type': 'W', - \ 'sub_type': 'style', - \ }, - \ ], - \ ale_linters#python#pycodestyle#Handle(bufnr(''), [ - \ 'stdin:8:3: E999 SyntaxError: invalid syntax', - \ 'stdin:69:11: E401 multiple imports on one line', - \ 'stdin:77:1: E302 expected 2 blank lines, found 1', - \ 'stdin:88:5: E301 expected 1 blank line, found 0', - \ 'stdin:222:34: W602 deprecated form of raising exception', - \ 'example.py:544:21: W601 .has_key() is deprecated, use ''in''', - \ ]) - -Execute(Warnings about trailing whitespace should be reported by default): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'code': 'W291', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'who cares', - \ }, - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'code': 'W293', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'who cares', - \ }, - \ ], - \ ale_linters#python#pycodestyle#Handle(bufnr(''), [ - \ 'foo.py:6:1: W291 who cares', - \ 'foo.py:6:1: W293 who cares', - \ ]) - -Execute(Disabling trailing whitespace warnings should work): - let b:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [ - \ ], - \ ale_linters#python#pycodestyle#Handle(bufnr(''), [ - \ 'foo.py:6:1: W291 who cares', - \ 'foo.py:6:1: W293 who cares', - \ ]) - -Execute(Warnings about trailing blank lines should be reported by default): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'code': 'W391', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'blank line at end of file', - \ }, - \ ], - \ ale_linters#python#pycodestyle#Handle(bufnr(''), [ - \ 'foo.py:6:1: W391 blank line at end of file', - \ ]) - -Execute(Disabling trailing blank line warnings should work): - let b:ale_warn_about_trailing_blank_lines = 0 - - AssertEqual - \ [ - \ ], - \ ale_linters#python#pycodestyle#Handle(bufnr(''), [ - \ 'foo.py:6:1: W391 blank line at end of file', - \ ]) - -Execute(E112 should be a syntax error): - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 1, - \ 'code': 'E112', - \ 'type': 'E', - \ 'text': 'expected an indented block', - \ }, - \ ], - \ ale_linters#python#pycodestyle#Handle(bufnr(''), [ - \ 'foo.py:6:1: E112 expected an indented block', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_pydocstyle_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_pydocstyle_handler.vader deleted file mode 100644 index cfb75307..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_pydocstyle_handler.vader +++ /dev/null @@ -1,116 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/python/pydocstyle.vim - -After: - Restore - - call ale#linter#Reset() - - silent file something_else.py - -" File sample.py -" # sample.py file -" -" def main(): -" """ -" This is a multi-line description that should produce multiple errors to be -" tested by the handler -" """ -" return Fales -" -" -" if __name__ == '__main__': -" main() -" -" The command to generate the handler input is: -" -" $ python -m pydocstyle --verbose --source --explain sample.py -" [...] -" $ - -Execute(Basic pydocstyle warnings should be handled): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'Missing docstring in public module', - \ 'code': 'D100', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 1, - \ 'text': '1 blank line required between summary line and description (found 0)', - \ 'code': 'D205', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 1, - \ 'text': 'First line should end with a period (not ''e'')', - \ 'code': 'D400', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 1, - \ 'text': 'First line should be in imperative mood; try rephrasing (found ''This'')', - \ 'code': 'D401', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#python#pydocstyle#Handle(bufnr(''), [ - \ 'Checking file ' . fnamemodify(bufname(bufnr('')), ':p') . '.', - \ './mydir/myfile.py:1 at module level:', - \ ' D100: Missing docstring in public module', - \ '', - \ ' All modules should normally have docstrings. [...] all functions and', - \ ' classes exported by a module should also have docstrings. Public', - \ ' methods (including the __init__ constructor) should also have', - \ ' docstrings.', - \ ' Note: Public (exported) definitions are either those with names listed', - \ ' in __all__ variable (if present), or those that do not start', - \ ' with a single underscore.', - \ '', - \ ' 1: # 2: 3: s 4: a 5: m 6: p 7: l ...', - \ '', - \ '', - \ 'C:\mydir\myfile.py:4 in public function `main`:', - \ ' D205: 1 blank line required between summary line and description (found 0)', - \ '', - \ ' Multi-line docstrings consist of a summary line just like a one-line', - \ ' docstring, followed by a blank line, followed by a more elaborate', - \ ' description. The summary line may be used by automatic indexing tools;', - \ ' it is important that it fits on one line and is separated from the', - \ ' rest of the docstring by a blank line.', - \ '', - \ ' 3: d 4: e 5: f 6: 7: m 8: a 9: i ...', - \ '', - \ '', - \ 'myfile.py:4 in public function `main`:', - \ ' D400: First line should end with a period (not ''e'')', - \ '', - \ ' The [first line of a] docstring is a phrase ending in a period.', - \ '', - \ ' 3: d 4: e 5: f 6: 7: m 8: a 9: i ...', - \ '', - \ '', - \ ale#Escape(fnamemodify(bufname(bufnr('')), ':t')) . ':4 in public function `main`:', - \ ' D401: First line should be in imperative mood; try rephrasing (found ''This'')', - \ '', - \ ' [Docstring] prescribes the function or method''s effect as a command:', - \ ' ("Do this", "Return that"), not as a description; e.g. don''t write', - \ ' "Returns the pathname ...".', - \ '', - \ ' 3: d 4: e 5: f 6: 7: m 8: a 9: i ...', - \ ]) - -Execute(Handler should handle empty output): - AssertEqual - \ [], - \ ale_linters#python#pydocstyle#Handle(bufnr(''), []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_pyflakes_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_pyflakes_handler.vader deleted file mode 100644 index ab4fab49..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_pyflakes_handler.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - runtime ale_linters/python/pyflakes.vim - -After: - call ale#linter#Reset() - -Execute(The pyflakes handler should handle basic errors): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 0, - \ 'text': 'undefined name ''foo''', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 7, - \ 'text': 'invalid syntax', - \ }, - \ ], - \ ale_linters#python#pyflakes#Handle(bufnr(''), [ - \ 'test.py:1: undefined name ''foo''', - \ 'test.py:1:7: invalid syntax', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_pylama_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_pylama_handler.vader deleted file mode 100644 index 3d1151b5..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_pylama_handler.vader +++ /dev/null @@ -1,268 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/python/pylama.vim - -After: - Restore - - call ale#linter#Reset() - - silent file something_else.py - -Execute(The pylama handler should handle no messages with version older than 8.1.4): - AssertEqual [], ale_linters#python#pylama#Handle(bufnr(''), [8, 0, 5], []) - -Execute(The pylama handler should handle no messages with version newer or equal than 8.1.4): - AssertEqual [], ale_linters#python#pylama#Handle(bufnr(''), [8, 2, 0], []) - -Execute(The pylama handler should handle basic warnings and syntax errors with version older than 8.1.4): - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'col': 1, - \ 'code': 'W0611', - \ 'type': 'W', - \ 'sub_type': '', - \ 'text': '''foo'' imported but unused [pyflakes]', - \ }, - \ { - \ 'lnum': 8, - \ 'col': 0, - \ 'code': 'E0401', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'Unable to import ''foo'' [pylint]', - \ }, - \ { - \ 'lnum': 10, - \ 'col': 1, - \ 'code': 'E302', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'expected 2 blank lines, found 1 [pycodestyle]', - \ }, - \ { - \ 'lnum': 11, - \ 'col': 1, - \ 'code': 'D401', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'First line should be in imperative mood (''Get'', not ''Gets'') [pydocstyle]', - \ }, - \ { - \ 'lnum': 15, - \ 'col': 81, - \ 'code': 'E501', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'line too long (96 > 80 characters) [pycodestyle]', - \ }, - \ { - \ 'lnum': 16, - \ 'col': 1, - \ 'code': 'D203', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': '1 blank line required before class docstring (found 0) [pydocstyle]', - \ }, - \ { - \ 'lnum': 18, - \ 'col': 1, - \ 'code': 'D107', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'Missing docstring in __init__ [pydocstyle]', - \ }, - \ { - \ 'lnum': 20, - \ 'col': 0, - \ 'code': 'C4001', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'Invalid string quote ", should be '' [pylint]', - \ }, - \ ], - \ ale_linters#python#pylama#Handle(bufnr(''), [8, 0, 5], [ - \ 'No config file found, using default configuration', - \ 'index.py:8:1: W0611 ''foo'' imported but unused [pyflakes]', - \ 'index.py:8:0: E0401 Unable to import ''foo'' [pylint]', - \ 'index.py:10:1: E302 expected 2 blank lines, found 1 [pycodestyle]', - \ 'index.py:11:1: D401 First line should be in imperative mood (''Get'', not ''Gets'') [pydocstyle]', - \ 'index.py:15:81: E501 line too long (96 > 80 characters) [pycodestyle]', - \ 'index.py:16:1: D203 1 blank line required before class docstring (found 0) [pydocstyle]', - \ 'index.py:18:1: D107 Missing docstring in __init__ [pydocstyle]', - \ 'index.py:20:0: C4001 Invalid string quote ", should be '' [pylint]', - \ ]) - -Execute(The pylama handler should handle basic warnings and syntax errors with version newer than 8.1.4): - AssertEqual - \ [ - \ { - \ 'lnum': 8, - \ 'col': 1, - \ 'code': 'W0611', - \ 'type': 'W', - \ 'sub_type': '', - \ 'text': '''foo'' imported but unused [pyflakes]', - \ }, - \ { - \ 'lnum': 8, - \ 'col': 0, - \ 'code': 'E0401', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'Unable to import ''foo'' [pylint]', - \ }, - \ { - \ 'lnum': 10, - \ 'col': 1, - \ 'code': 'E302', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'expected 2 blank lines, found 1 [pycodestyle]', - \ }, - \ { - \ 'lnum': 11, - \ 'col': 1, - \ 'code': 'D401', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'First line should be in imperative mood (''Get'', not ''Gets'') [pydocstyle]', - \ }, - \ { - \ 'lnum': 15, - \ 'col': 81, - \ 'code': 'E501', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'line too long (96 > 80 characters) [pycodestyle]', - \ }, - \ { - \ 'lnum': 16, - \ 'col': 1, - \ 'code': 'D203', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': '1 blank line required before class docstring (found 0) [pydocstyle]', - \ }, - \ { - \ 'lnum': 18, - \ 'col': 1, - \ 'code': 'D107', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'Missing docstring in __init__ [pydocstyle]', - \ }, - \ { - \ 'lnum': 20, - \ 'col': 0, - \ 'code': 'C4001', - \ 'type': 'W', - \ 'sub_type': 'style', - \ 'text': 'Invalid string quote ", should be '' [pylint]', - \ }, - \ ], - \ ale_linters#python#pylama#Handle(bufnr(''), [8, 2, 0], [ - \ '[{"source":"pyflakes","col":1,"lnum":8,"etype":"W","message":"''foo'' imported but unused","filename":"index.py","number":"W0611"},{"source":"pylint","col":0,"lnum":8,"etype":"E","message":"Unable to import ''foo''","filename":"index.py","number":"E0401"},{"source":"pycodestyle","col":1,"lnum":10,"etype":"E","message":"expected 2 blank lines, found 1","filename":"index.py","number":"E302"},{"source":"pydocstyle","col":1,"lnum":11,"etype":"D","message":"First line should be in imperative mood (''Get'', not ''Gets'')","filename":"index.py","number":"D401"},{"source":"pycodestyle","col":81,"lnum":15,"etype":"E","message":"line too long (96 > 80 characters)","filename":"index.py","number":"E501"},{"source":"pydocstyle","col":1,"lnum":16,"etype":"D","message":"1 blank line required before class docstring (found 0)","filename":"index.py","number":"D203"},{"source":"pydocstyle","col":1,"lnum":18,"etype":"D","message":"Missing docstring in __init__","filename":"index.py","number":"D107"},{"source":"pylint","col":0,"lnum":20,"etype":"C","message":"Invalid string quote \", should be ''","filename":"index.py","number":"C4001"}]', - \ ]) - -Execute(The pylama handler should handle tracebacks with parsable messages with version older than 8.1.4): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': 'ParseError: Cannot parse file. (See :ALEDetail)', - \ 'detail': join([ - \ 'Traceback (most recent call last):', - \ ' File "/usr/local/lib/python2.7/site-packages/pylama/core.py", line 66, in run', - \ ' path, code=code, ignore=ignore, select=select, params=lparams)', - \ ' File "/usr/local/lib/python2.7/site-packages/pylama/lint/pylama_pydocstyle.py", line 37, in run', - \ ' } for e in PyDocChecker().check_source(*check_source_args)]', - \ ' File "/usr/local/lib/python2.7/site-packages/pydocstyle/checker.py", line 64, in check_source', - \ ' module = parse(StringIO(source), filename)', - \ ' File "/usr/local/lib/python2.7/site-packages/pydocstyle/parser.py", line 340, in __call__', - \ ' return self.parse(*args, **kwargs)', - \ ' File "/usr/local/lib/python2.7/site-packages/pydocstyle/parser.py", line 328, in parse', - \ ' six.raise_from(ParseError(), error)', - \ ' File "/usr/local/lib/python2.7/site-packages/six.py", line 737, in raise_from', - \ ' raise value', - \ 'ParseError: Cannot parse file.', - \ ], "\n"), - \ }, - \ { - \ 'lnum': 11, - \ 'col': 1, - \ 'code': 'E302', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'expected 2 blank lines, found 1 [pycodestyle]', - \ }, - \ { - \ 'lnum': 16, - \ 'col': 81, - \ 'code': 'E501', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'line too long (96 > 80 characters) [pycodestyle]', - \ }, - \ ], - \ ale_linters#python#pylama#Handle(bufnr(''), [8, 0, 5], [ - \ 'Traceback (most recent call last):', - \ ' File "/usr/local/lib/python2.7/site-packages/pylama/core.py", line 66, in run', - \ ' path, code=code, ignore=ignore, select=select, params=lparams)', - \ ' File "/usr/local/lib/python2.7/site-packages/pylama/lint/pylama_pydocstyle.py", line 37, in run', - \ ' } for e in PyDocChecker().check_source(*check_source_args)]', - \ ' File "/usr/local/lib/python2.7/site-packages/pydocstyle/checker.py", line 64, in check_source', - \ ' module = parse(StringIO(source), filename)', - \ ' File "/usr/local/lib/python2.7/site-packages/pydocstyle/parser.py", line 340, in __call__', - \ ' return self.parse(*args, **kwargs)', - \ ' File "/usr/local/lib/python2.7/site-packages/pydocstyle/parser.py", line 328, in parse', - \ ' six.raise_from(ParseError(), error)', - \ ' File "/usr/local/lib/python2.7/site-packages/six.py", line 737, in raise_from', - \ ' raise value', - \ 'ParseError: Cannot parse file.', - \ '', - \ 'index.py:11:1: E302 expected 2 blank lines, found 1 [pycodestyle]', - \ 'index.py:16:81: E501 line too long (96 > 80 characters) [pycodestyle]', - \ ]) - -" Note: This is probably a bug, since all pylama plugins produce codes, but -" should be handled for compatibility. -" Note: The pylama isort plugin is distributed in the isort package. -Execute(The pylama handler should handle messages without codes with version older than 8.1.4): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'col': 0, - \ 'code': '', - \ 'type': 'W', - \ 'sub_type': '', - \ 'text': 'Incorrectly sorted imports. [isort]' - \ }, - \ ], - \ ale_linters#python#pylama#Handle(bufnr(''), [8, 0, 5], [ - \ 'index.py:0:0: Incorrectly sorted imports. [isort]', - \ ]) - -" Note: This is a pylama bug, but should be handled for compatibility. -" See https://github.com/klen/pylama/pull/146 -Execute(The pylama handler should handle message codes followed by a colon with version older than 8.1.4): - AssertEqual - \ [ - \ { - \ 'lnum': 31, - \ 'col': 1, - \ 'code': 'E800', - \ 'type': 'E', - \ 'sub_type': '', - \ 'text': 'Found commented out code: # needs_sphinx = ''1.0'' [eradicate]', - \ }, - \ ], - \ ale_linters#python#pylama#Handle(bufnr(''), [8, 0, 5], [ - \ 'index.py:31:1: E800: Found commented out code: # needs_sphinx = ''1.0'' [eradicate]', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_pylint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_pylint_handler.vader deleted file mode 100644 index ce7322f3..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_pylint_handler.vader +++ /dev/null @@ -1,135 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_whitespace = 1 - - runtime ale_linters/python/pylint.vim - -After: - Restore - - call ale#linter#Reset() - - silent file something_else.py - -Execute(Basic pylint errors should be handle): - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'col': 1, - \ 'text': 'Trailing whitespace', - \ 'code': 'trailing-whitespace', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'Missing module docstring', - \ 'code': 'missing-docstring', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'text': 'Missing function docstring', - \ 'code': 'missing-docstring', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 5, - \ 'text': '''break'' not properly in loop', - \ 'code': 'not-in-loop', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 5, - \ 'text': 'Unreachable code', - \ 'code': 'unreachable', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 33, - \ 'text': 'No exception type(s) specified', - \ 'code': 'bare-except', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#python#pylint#Handle(bufnr(''), [ - \ 'No config file found, using default configuration', - \ '************* Module test', - \ 'test.py:4:0: C0303 (trailing-whitespace) Trailing whitespace', - \ 'test.py:1:0: C0111 (missing-docstring) Missing module docstring', - \ 'test.py:2:0: C0111 (missing-docstring) Missing function docstring', - \ 'test.py:3:4: E0103 (not-in-loop) ''break'' not properly in loop', - \ 'test.py:4:4: W0101 (unreachable) Unreachable code', - \ 'test.py:7:32: W0702 (bare-except) No exception type(s) specified', - \ '', - \ '------------------------------------------------------------------', - \ 'Your code has been rated at 0.00/10 (previous run: 2.50/10, -2.50)', - \ ]) - -Execute(Ignoring trailing whitespace messages should work): - let g:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'Missing module docstring', - \ 'code': 'missing-docstring', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#python#pylint#Handle(bufnr(''), [ - \ 'No config file found, using default configuration', - \ '************* Module test', - \ 'test.py:4:0: C0303 (trailing-whitespace) Trailing whitespace', - \ 'test.py:1:0: C0111 (missing-docstring) Missing module docstring', - \ '', - \ '------------------------------------------------------------------', - \ 'Your code has been rated at 0.00/10 (previous run: 2.50/10, -2.50)', - \ ]) - -Execute(The pylint handler should parse Windows filenames): - AssertEqual - \ [ - \ { - \ 'lnum': 13, - \ 'col': 6, - \ 'text': 'Undefined variable ''x''', - \ 'code': 'undefined-variable', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#python#pylint#Handle(bufnr(''), [ - \ '************* Module test', - \ 'D:\acm\github\vim\tools\test.py:13:5: E0602 (undefined-variable) Undefined variable ''x''', - \ '', - \ '------------------------------------------------------------------', - \ 'Your code has been rated at 5.83/10 (previous run: 5.83/10, +0.00)', - \ ]) - -Execute(Use msg_id): - let g:ale_python_pylint_use_msg_id = 1 - AssertEqual - \ [ - \ { - \ 'lnum': 13, - \ 'col': 6, - \ 'text': 'Undefined variable ''x''', - \ 'code': 'E0602', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#python#pylint#Handle(bufnr(''), [ - \ '************* Module test', - \ 'D:\acm\github\vim\tools\test.py:13:5: E0602 (undefined-variable) Undefined variable ''x''', - \ '', - \ '------------------------------------------------------------------', - \ 'Your code has been rated at 5.83/10 (previous run: 5.83/10, +0.00)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_pyrex_cython_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_pyrex_cython_handler.vader deleted file mode 100644 index fd0f9a8b..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_pyrex_cython_handler.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - runtime ale_linters/pyrex/cython.vim - -After: - call ale#linter#Reset() - -Execute(The cython handler should handle warnings and errors): - AssertEqual - \ [ - \ { - \ 'lnum': 42, - \ 'col': 7, - \ 'text': 'some warning', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 777, - \ 'col': 21, - \ 'text': 'some error', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#pyrex#cython#Handle(347, [ - \ 'warning: file:42:7: some warning', - \ 'file:777:21: some error', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_qmlfmt_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_qmlfmt_handler.vader deleted file mode 100644 index fc8ef355..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_qmlfmt_handler.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - runtime ale_linters/qml/qmlfmt.vim - -After: - call ale#linter#Reset() - -Execute(The qmlfmt handler should parse error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 22, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'Expected token ''}''.' - \ } - \ ], - \ ale_linters#qml#qmlfmt#Handle(1, [ - \ 'Error:22:1: Expected token ''}''.' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_qmllint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_qmllint_handler.vader deleted file mode 100644 index fcc65eb5..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_qmllint_handler.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - runtime ale_linters/qml/qmllint.vim - -After: - call ale#linter#Reset() - -Execute(The qmllint handler should parse error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'Expected token ''}''' - \ } - \ ], - \ ale_linters#qml#qmllint#Handle(1, [ - \ '/tmp/ab34cd56/Test.qml:2 : Expected token ''}''' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_raco_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_raco_handler.vader deleted file mode 100644 index 565fd795..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_raco_handler.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - runtime ale_linters/racket/raco.vim - -After: - call ale#linter#Reset() - -Execute(The raco handler should handle errors for the current file correctly): - AssertEqual - \ [ - \ { - \ 'filename': 'foo.rkt', - \ 'lnum': 4, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'dfine: unbound identifier in modulemessage', - \ }, - \ ], - \ ale_linters#racket#raco#Handle(bufnr(''), [ - \ 'foo.rkt:4:1: dfine: unbound identifier in modulemessage', - \ ' in: dfine', - \ ' context...:', - \ ' /usr/local/Cellar/racket/6.5/share/racket/pkgs/compiler-lib/compiler/commands/expand.rkt:34:15: loop', - \ ' /usr/local/Cellar/racket/6.5/share/racket/pkgs/compiler-lib/compiler/commands/expand.rkt:10:2: show-program', - \ ' /usr/local/Cellar/racket/6.5/share/racket/pkgs/compiler-lib/compiler/commands/expand.rkt: [running body]', - \ ' /usr/local/Cellar/minimal-racket/6.6/share/racket/collects/raco/raco.rkt: [running body]', - \ ' /usr/local/Cellar/minimal-racket/6.6/share/racket/collects/raco/main.rkt: [running body]', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_rails_best_practices_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_rails_best_practices_handler.vader deleted file mode 100644 index f6d69eee..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_rails_best_practices_handler.vader +++ /dev/null @@ -1,52 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test/handler') - cd .. - - runtime ale_linters/ruby/rails_best_practices.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The rails_best_practices handler should parse JSON correctly): - call ale#test#SetFilename('test-files/ruby/valid_rails_app/app/models/thing.rb') - - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'text': 'use local variable', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 10, - \ 'text': 'other advice', - \ 'type': 'W', - \ } - \ ], - \ ale_linters#ruby#rails_best_practices#Handle(bufnr(''), [ - \ '[', - \ '{', - \ '"message": "use local variable",', - \ '"line_number": "5",', - \ printf('"filename": "%s"', substitute(expand('%:p'), '\\', '\\\\', 'g')), - \ '},{', - \ '"message": "other advice",', - \ '"line_number": "10",', - \ printf('"filename": "%s"', substitute(expand('%:p'), '\\', '\\\\', 'g')), - \ '}', - \ ']' - \ ]) - -Execute(The rails_best_practices handler should parse JSON correctly when there is no output from the tool): - AssertEqual - \ [], - \ ale_linters#ruby#rails_best_practices#Handle(347, [ - \ ]) - -Execute(The rails_best_practices handler should handle garbage output): - AssertEqual - \ [], - \ ale_linters#ruby#rails_best_practices#Handle(347, [ - \ 'No such command in 2.4.1 of ruby', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_redpen_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_redpen_handler.vader deleted file mode 100644 index 0b030e2d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_redpen_handler.vader +++ /dev/null @@ -1,98 +0,0 @@ -Before: - runtime! ale_linters/markdown/redpen.vim - -After: - call ale#linter#Reset() - -Execute(redpen handler should handle errors output): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'end_lnum': 1, - \ 'end_col': 15, - \ 'text': 'Found possibly misspelled word "plugin".', - \ 'type': 'W', - \ 'code': 'Spelling', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'Found possibly misspelled word "NeoVim".', - \ 'type': 'W', - \ 'code': 'Spelling', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 35, - \ 'end_lnum': 1, - \ 'end_col': 55, - \ 'text': 'Found possibly misspelled word "コードチェック".', - \ 'type': 'W', - \ 'code': 'Spelling', - \ }, - \ ], - \ ale#handlers#redpen#HandleRedpenOutput(bufnr(''), [ - \ '[', - \ ' {', - \ ' "document": "test.md",', - \ ' "errors": [', - \ ' {', - \ ' "sentence": "ALE is a plugin for providing linting in NeoVim and Vim 8 while you edit your text files.",', - \ ' "endPosition": {', - \ ' "offset": 15,', - \ ' "lineNum": 1', - \ ' },', - \ ' "validator": "Spelling",', - \ ' "lineNum": 1,', - \ ' "sentenceStartColumnNum": 0,', - \ ' "message": "Found possibly misspelled word \"plugin\".",', - \ ' "startPosition": {', - \ ' "offset": 9,', - \ ' "lineNum": 1', - \ ' }', - \ ' },', - \ ' {', - \ ' "sentence": "ALE is a plugin for providing linting in NeoVim and Vim 8 while you edit your text files.",', - \ ' "validator": "Spelling",', - \ ' "lineNum": 1,', - \ ' "sentenceStartColumnNum": 0,', - \ ' "message": "Found possibly misspelled word \"NeoVim\"."', - \ ' },', - \ ' {', - \ ' "sentence": "ALEはNeoVimとVim8で非同期のコードチェックを実現するプラグインです。",', - \ ' "endPosition": {', - \ ' "offset": 27,', - \ ' "lineNum": 1', - \ ' },', - \ ' "validator": "Spelling",', - \ ' "lineNum": 1,', - \ ' "sentenceStartColumnNum": 0,', - \ ' "message": "Found possibly misspelled word \"コードチェック\".",', - \ ' "startPosition": {', - \ ' "offset": 20,', - \ ' "lineNum": 1', - \ ' }', - \ ' }', - \ ' ]', - \ ' }', - \ ']', - \ ]) - -Execute(The redpen handler should handle an empty error list): - AssertEqual - \ [], - \ ale#handlers#redpen#HandleRedpenOutput(bufnr(''), [ - \ '[', - \ ' {', - \ ' "document": "test.md",', - \ ' "errors": []', - \ ' }', - \ ']', - \ ]) - -Execute(The redpen handler should handle totally empty output): - AssertEqual - \ [], - \ ale#handlers#redpen#HandleRedpenOutput(bufnr(''), []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_reek_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_reek_handler.vader deleted file mode 100644 index db0a1119..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_reek_handler.vader +++ /dev/null @@ -1,81 +0,0 @@ -Before: - runtime ale_linters/ruby/reek.vim - -After: - call ale#linter#Reset() - -Execute(The reek handler should parse JSON correctly, with only context enabled): - let g:ale_ruby_reek_show_context = 1 - let g:ale_ruby_reek_show_wiki_link = 0 - - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'text': 'Context#method violates rule number one', - \ 'code': 'Rule1', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 34, - \ 'text': 'Context#method violates rule number two', - \ 'code': 'Rule2', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 56, - \ 'text': 'Context#method violates rule number two', - \ 'code': 'Rule2', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#ruby#reek#Handle(347, [ - \ '[{"context":"Context#method","lines":[12],"message":"violates rule number one","smell_type":"Rule1","source":"/home/user/file.rb","parameter":"bad parameter","wiki_link":"https://example.com/Rule1.md"},{"context":"Context#method","lines":[34, 56],"message":"violates rule number two","smell_type":"Rule2","source":"/home/user/file.rb","name":"bad code","count":2,"wiki_link":"https://example.com/Rule1.md"}]' - \ ]) - -Execute(The reek handler should parse JSON correctly, with no context or wiki links): - let g:ale_ruby_reek_show_context = 0 - let g:ale_ruby_reek_show_wiki_link = 0 - - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'text': 'violates rule number one', - \ 'code': 'Rule1', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#ruby#reek#Handle(347, [ - \ '[{"context":"Context#method","lines":[12],"message":"violates rule number one","smell_type":"Rule1","source":"/home/user/file.rb","parameter":"bad parameter","wiki_link":"https://example.com/Rule1.md"}]' - \ ]) - -Execute(The reek handler should parse JSON correctly, with both context and wiki links): - let g:ale_ruby_reek_show_context = 1 - let g:ale_ruby_reek_show_wiki_link = 1 - - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'text': 'Context#method violates rule number one [https://example.com/Rule1.md]', - \ 'code': 'Rule1', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#ruby#reek#Handle(347, [ - \ '[{"context":"Context#method","lines":[12],"message":"violates rule number one","smell_type":"Rule1","source":"/home/user/file.rb","parameter":"bad parameter","wiki_link":"https://example.com/Rule1.md"}]' - \ ]) - -Execute(The reek handler should parse JSON correctly when there is no output from reek): - AssertEqual - \ [], - \ ale_linters#ruby#reek#Handle(347, [ - \ ]) - -Execute(The reek handler should handle garbage output): - AssertEqual - \ [], - \ ale_linters#ruby#reek#Handle(347, [ - \ 'No such command in 2.4.1 of ruby', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_remark_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_remark_lint_handler.vader deleted file mode 100644 index 0794d51c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_remark_lint_handler.vader +++ /dev/null @@ -1,39 +0,0 @@ -Before: - runtime ale_linters/markdown/remark_lint.vim - -After: - call ale#linter#Reset() - -Execute(Warning and error messages should be handled correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 4, - \ 'type': 'W', - \ 'text': 'Incorrect list-item indent: add 1 space list-item-indent remark-lint', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 5, - \ 'type': 'E', - \ 'text': 'Incorrect list-item indent: remove 1 space list-item-indent remark-lint', - \ }, - \ { - \ 'lnum': 18, - \ 'col': 71, - \ 'end_lnum': 19, - \ 'end_col': 1, - \ 'type': 'E', - \ 'text': 'Missing new line after list item list-item-spacing remark-lint', - \ }, - \ ], - \ ale_linters#markdown#remark_lint#Handle(1, [ - \ 'foo.md', - \ ' 1:4 warning Incorrect list-item indent: add 1 space list-item-indent remark-lint', - \ ' 3:5 error Incorrect list-item indent: remove 1 space list-item-indent remark-lint', - \ ' 18:71-19:1 error Missing new line after list item list-item-spacing remark-lint', - \ '', - \ '⚠ 1 warnings', - \ '✘ 2 errors', - \]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_rflint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_rflint_handler.vader deleted file mode 100644 index f2670141..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_rflint_handler.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - runtime ale_linters/robot/rflint.vim - -After: - call ale#linter#Reset() - -Execute(Warning and error messages should be handled correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 1, - \ 'filename': 'test.robot', - \ 'type': 'W', - \ 'lnum': 1, - \ 'col': 2, - \ 'text': 'RequireSuiteDocumentation', - \ 'detail': 'No suite documentation', - \ }, - \ { - \ 'bufnr': 1, - \ 'filename': 'test.robot', - \ 'type': 'E', - \ 'lnum': 3, - \ 'col': 4, - \ 'text': 'RequireTestDocumentation', - \ 'detail': 'No testcase documentation', - \ }, - \ ], - \ ale_linters#robot#rflint#Handle(1, [ - \ 'test.robot:W:1:2:RequireSuiteDocumentation:No suite documentation', - \ 'test.robot:E:3:4:RequireTestDocumentation:No testcase documentation' - \]) - diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_rpmlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_rpmlint_handler.vader deleted file mode 100644 index 2ea9e5cf..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_rpmlint_handler.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - runtime ale_linters/spec/rpmlint.vim - -After: - call ale#linter#Reset() - -Execute(The rpmlint handler should parse error messages correctly): - AssertEqual - \ [ - \ { - \ 'bufnr': 42, - \ 'lnum': 23, - \ 'text': 'macro-in-comment %version', - \ 'type': 'W', - \ }, - \ { - \ 'bufnr': 42, - \ 'lnum': 17, - \ 'text': 'hardcoded-library-path in %_prefix/lib/%name', - \ 'type': 'E', - \ }, - \ { - \ 'bufnr': 42, - \ 'lnum': 1, - \ 'text': 'specfile-error warning: bogus date in %changelog: Mon Oct 1 2005 - Foo', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#spec#rpmlint#Handle(42, [ - \ 'cyrus-imapd.spec:23: W: macro-in-comment %version', - \ 'cyrus-imapd.spec:17: E: hardcoded-library-path in %_prefix/lib/%name', - \ 'apcupsd.spec: E: specfile-error warning: bogus date in %changelog: Mon Oct 1 2005 - Foo', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_rstcheck_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_rstcheck_lint_handler.vader deleted file mode 100644 index c65c15eb..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_rstcheck_lint_handler.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - runtime ale_linters/rst/rstcheck.vim - -After: - call ale#linter#Reset() - -Execute(Warning and error messages should be handled correctly): - " For some reason we can't set the directory such that the filenames are - " correct here when running the tests from the Docker image, so we have to - " just check the basenames of the files instead. - AssertEqual - \ [ - \ { - \ 'filename': 'bad_python.rst', - \ 'lnum': 7, - \ 'col': 0, - \ 'type': 'W', - \ 'text': '(python) unexpected EOF while parsing', - \ }, - \ { - \ 'filename': 'bad_cpp.rst', - \ 'lnum': 9, - \ 'col': 0, - \ 'type': 'W', - \ 'text': '(cpp) error: ''x'' was not declared in this scope', - \ }, - \ { - \ 'filename': 'bad_rst.rst', - \ 'lnum': 1, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'Title overline & underline mismatch.', - \ }, - \ ], - \ map( - \ ale_linters#rst#rstcheck#Handle(1, [ - \ 'bad_python.rst:7: (ERROR/3) (python) unexpected EOF while parsing', - \ 'bad_cpp.rst:9: (ERROR/3) (cpp) error: ''x'' was not declared in this scope', - \ 'bad_rst.rst:1: (SEVERE/4) Title overline & underline mismatch.', - \ ]), - \ 'extend(v:val, {''filename'': fnamemodify(v:val.filename, '':t'')})' - \ ) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_rubocop_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_rubocop_handler.vader deleted file mode 100644 index d7868f26..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_rubocop_handler.vader +++ /dev/null @@ -1,76 +0,0 @@ -Before: - runtime ale_linters/ruby/rubocop.vim - -After: - unlet! g:lines - call ale#linter#Reset() - -Execute(The rubocop handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 83, - \ 'col': 29, - \ 'end_col': 35, - \ 'text': 'Prefer single-quoted strings...', - \ 'code': 'Style/SomeCop', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 12, - \ 'col': 2, - \ 'end_col': 2, - \ 'text': 'Some error', - \ 'code': 'Style/SomeOtherCop', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 10, - \ 'col': 5, - \ 'end_col': 12, - \ 'text': 'Regular warning', - \ 'code': 'Style/WarningCop', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 11, - \ 'col': 1, - \ 'end_col': 1, - \ 'text': 'Another error', - \ 'code': 'Style/SpaceBeforeBlockBraces', - \ 'type': 'E', - \ }, - \ ], - \ ale#ruby#HandleRubocopOutput(347, [ - \ '{"metadata":{"rubocop_version":"0.47.1","ruby_engine":"ruby","ruby_version":"2.1.5","ruby_patchlevel":"273","ruby_platform":"x86_64-linux-gnu"},"files":[{"path":"my_great_file.rb","offenses":[{"severity":"convention","message":"Prefer single-quoted strings...","cop_name":"Style/SomeCop","corrected":false,"location":{"line":83,"column":29,"length":7}},{"severity":"fatal","message":"Some error","cop_name":"Style/SomeOtherCop","corrected":false,"location":{"line":12,"column":2,"length":1}},{"severity":"warning","message":"Regular warning","cop_name":"Style/WarningCop","corrected":false,"location":{"line":10,"column":5,"length":8}},{"severity":"error","message":"Another error","cop_name":"Style/SpaceBeforeBlockBraces","corrected":false,"location":{"line":11,"column":1,"length":1}}]}],"summary":{"offense_count":4,"target_file_count":1,"inspected_file_count":1}}' - \ ]) - -Execute(The rubocop handler should handle when files are checked and no offenses are found): - AssertEqual - \ [], - \ ale#ruby#HandleRubocopOutput(347, [ - \ '{"metadata":{"rubocop_version":"0.47.1","ruby_engine":"ruby","ruby_version":"2.1.5","ruby_patchlevel":"273","ruby_platform":"x86_64-linux-gnu"},"files":[{"path":"my_great_file.rb","offenses":[]}],"summary":{"offense_count":0,"target_file_count":1,"inspected_file_count":1}}' - \ ]) - -Execute(The rubocop handler should handle when no files are checked): - AssertEqual - \ [], - \ ale#ruby#HandleRubocopOutput(347, [ - \ '{"metadata":{"rubocop_version":"0.47.1","ruby_engine":"ruby","ruby_version":"2.1.5","ruby_patchlevel":"273","ruby_platform":"x86_64-linux-gnu"},"files":[],"summary":{"offense_count":0,"target_file_count":0,"inspected_file_count":0}}' - \ ]) - -Execute(The rubocop handler should handle output without any errors): - let g:lines = [ - \ '{"metadata":{"rubocop_version":"0.48.1","ruby_engine":"ruby","ruby_version":"2.4.1","ruby_patchlevel":"111","ruby_platform":"x86_64-darwin16"},"files":[]}', - \] - - AssertEqual - \ [], - \ ale#ruby#HandleRubocopOutput(347, g:lines) - \ - AssertEqual - \ [], - \ ale#ruby#HandleRubocopOutput(347, ['{}']) - AssertEqual - \ [], - \ ale#ruby#HandleRubocopOutput(347, []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_ruby_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_ruby_handler.vader deleted file mode 100644 index 824d8c58..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_ruby_handler.vader +++ /dev/null @@ -1,38 +0,0 @@ -Before: - runtime ale_linters/ruby/ruby.vim - -After: - call ale#linter#Reset() - -Execute(The ruby handler should parse lines correctly and add the column if it can): - " Point Error - " Warning - " Line Error - AssertEqual - \ [ - \ { - \ 'lnum': 6, - \ 'col': 13, - \ 'type': 'E', - \ 'text': 'syntax error, unexpected '';''' - \ }, - \ { - \ 'lnum': 9, - \ 'col': 0, - \ 'type': 'W', - \ 'text': 'warning: statement not reached' - \ }, - \ { - \ 'lnum': 12, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'syntax error, unexpected end-of-input, expecting keyword_end' - \ } - \ ], - \ ale#handlers#ruby#HandleSyntaxErrors(255, [ - \ "test.rb:6: syntax error, unexpected ';'", - \ " t = ;", - \ " ^", - \ "test.rb:9: warning: statement not reached", - \ "test.rb:12: syntax error, unexpected end-of-input, expecting keyword_end", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_rust_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_rust_handler.vader deleted file mode 100644 index 845df2b5..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_rust_handler.vader +++ /dev/null @@ -1,483 +0,0 @@ -Execute(The Rust handler should handle rustc output): - call ale#test#SetFilename('src/playpen.rs') - - AssertEqual - \ [ - \ { - \ 'lnum': 15, - \ 'end_lnum': 15, - \ 'type': 'E', - \ 'col': 5, - \ 'end_col': 7, - \ 'text': 'expected one of `.`, `;`, `?`, `}`, or an operator, found `for`', - \ }, - \ { - \ 'lnum': 13, - \ 'end_lnum': 13, - \ 'type': 'E', - \ 'col': 7, - \ 'end_col': 9, - \ 'text': 'no method named `wat` found for type `std::string::String` in the current scope', - \ }, - \ ], - \ ale#handlers#rust#HandleRustErrors(bufnr(''), [ - \ '', - \ 'ignore this', - \ json_encode({ - \ 'message': 'expected one of `.`, `;`, `?`, `}`, or an operator, found `for`', - \ 'code': v:null, - \ 'level': 'error', - \ 'spans': [ - \ { - \ 'file_name': '', - \ 'byte_start': 418, - \ 'byte_end': 421, - \ 'line_start': 15, - \ 'line_end': 15, - \ 'column_start': 5, - \ 'column_end': 8, - \ 'is_primary': v:true, - \ 'label': v:null, - \ }, - \ ], - \ }), - \ json_encode({ - \ 'message': 'main function not found', - \ 'code': v:null, - \ 'level': 'error', - \ 'spans': [], - \ }), - \ json_encode({ - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'no method named `wat` found for type `std::string::String` in the current scope', - \ 'spans': [ - \ { - \ 'byte_end': 410, - \ 'byte_start': 407, - \ 'column_end': 10, - \ 'column_start': 7, - \ 'file_name': '', - \ 'is_primary': v:true, - \ 'label': v:null, - \ 'line_end': 13, - \ 'line_start': 13, - \ } - \ ] - \ }), - \ json_encode({ - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'aborting due to previous error', - \ 'spans': [ - \ ] - \ }), - \ ]) - -Execute(The Rust handler should handle cargo output): - call ale#test#SetFilename('src/playpen.rs') - - AssertEqual - \ [ - \ { - \ 'lnum': 15, - \ 'end_lnum': 15, - \ 'type': 'E', - \ 'col': 5, - \ 'end_col': 7, - \ 'text': 'expected one of `.`, `;`, `?`, `}`, or an operator, found `for`', - \ }, - \ { - \ 'lnum': 13, - \ 'end_lnum': 13, - \ 'type': 'E', - \ 'col': 7, - \ 'end_col': 9, - \ 'text': 'no method named `wat` found for type `std::string::String` in the current scope', - \ }, - \ ], - \ ale#handlers#rust#HandleRustErrors(bufnr(''), [ - \ '', - \ 'ignore this', - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'expected one of `.`, `;`, `?`, `}`, or an operator, found `for`', - \ 'spans': [ - \ { - \ 'byte_end': 11508, - \ 'byte_start': 11505, - \ 'column_end': 8, - \ 'column_start': 5, - \ 'file_name': ale#path#Simplify('src/playpen.rs'), - \ 'is_primary': v:true, - \ 'label': v:null, - \ 'line_end': 15, - \ 'line_start': 15, - \ } - \ ] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'no method named `wat` found for type `std::string::String` in the current scope', - \ 'spans': [ - \ { - \ 'byte_end': 11497, - \ 'byte_start': 11494, - \ 'column_end': 10, - \ 'column_start': 7, - \ 'file_name': ale#path#Simplify('src/playpen.rs'), - \ 'is_primary': v:true, - \ 'label': v:null, - \ 'line_end': 13, - \ 'line_start': 13, - \ } - \ ] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'aborting due to previous error', - \ 'spans': [ - \ ] - \ }, - \ }), - \ ]) - -Execute(The Rust handler should should errors from expansion spans): - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'end_lnum': 4, - \ 'type': 'E', - \ 'col': 21, - \ 'end_col': 22, - \ 'text': 'mismatched types: expected bool, found integral variable', - \ }, - \ ], - \ ale#handlers#rust#HandleRustErrors(bufnr(''), [ - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'mismatched types', - \ 'spans': [ - \ { - \ 'byte_end': 1, - \ 'byte_start': 1, - \ 'column_end': 1, - \ 'column_start': 1, - \ 'file_name': ale#path#Simplify('src/other.rs'), - \ 'is_primary': v:true, - \ 'label': 'some other error', - \ 'line_end': 4, - \ 'line_start': 4, - \ 'expansion': { - \ 'span': { - \ 'byte_end': 54, - \ 'byte_start': 52, - \ 'column_end': 23, - \ 'column_start': 21, - \ 'file_name': ale#path#Simplify('src/playpen.rs'), - \ 'is_primary': v:true, - \ 'label': 'expected bool, found integral variable', - \ 'line_end': 4, - \ 'line_start': 4, - \ } - \ } - \ } - \ ] - \ }, - \ }), - \ ]) - -Execute(The Rust handler should show detailed errors): - call ale#test#SetFilename('src/playpen.rs') - - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'end_lnum': 4, - \ 'type': 'E', - \ 'col': 21, - \ 'end_col': 22, - \ 'text': 'mismatched types: expected bool, found integral variable', - \ }, - \ ], - \ ale#handlers#rust#HandleRustErrors(bufnr(''), [ - \ '', - \ 'ignore this', - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'mismatched types', - \ 'spans': [ - \ { - \ 'byte_end': 54, - \ 'byte_start': 52, - \ 'column_end': 23, - \ 'column_start': 21, - \ 'expansion': v:null, - \ 'file_name': ale#path#Simplify('src/playpen.rs'), - \ 'is_primary': v:true, - \ 'label': 'expected bool, found integral variable', - \ 'line_end': 4, - \ 'line_start': 4, - \ } - \ ] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'aborting due to previous error(s)', - \ 'spans': [ - \ ] - \ }, - \ }), - \ ]) - -Execute(The Rust handler should show detailed clippy errors with rendered field if it's available): - call ale#test#SetFilename('src/playpen.rs') - - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'end_lnum': 4, - \ 'type': 'E', - \ 'col': 21, - \ 'end_col': 22, - \ 'text': 'mismatched types: expected bool, found integral variable', - \ 'detail': 'this is a detailed description', - \ }, - \ ], - \ ale#handlers#rust#HandleRustErrors(bufnr(''), [ - \ '', - \ 'ignore this', - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'mismatched types', - \ 'rendered': 'this is a detailed description', - \ 'spans': [ - \ { - \ 'byte_end': 54, - \ 'byte_start': 52, - \ 'column_end': 23, - \ 'column_start': 21, - \ 'expansion': v:null, - \ 'file_name': ale#path#Simplify('src/playpen.rs'), - \ 'is_primary': v:true, - \ 'label': 'expected bool, found integral variable', - \ 'line_end': 4, - \ 'line_start': 4, - \ } - \ ] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'aborting due to previous error(s)', - \ 'spans': [ - \ ] - \ }, - \ }), - \ ]) - -Execute(The Rust handler should find correct files): - call ale#test#SetFilename('src/noerrors/mod.rs') - - AssertEqual - \ [], - \ ale#handlers#rust#HandleRustErrors(bufnr(''), [ - \ '', - \ 'ignore this', - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'unresolved import `Undefined`', - \ 'spans': [ - \ { - \ 'byte_end': 103, - \ 'byte_start': 94, - \ 'column_end': 14, - \ 'column_start': 5, - \ 'file_name': 'src/haserrors/mod.rs', - \ 'is_primary': v:true, - \ 'label': 'no `Undefined` in the root', - \ 'line_end': 1, - \ 'line_start': 1, - \ } - \ ] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'aborting due to previous error', - \ 'spans': [ - \ ] - \ }, - \ }), - \ ]) - -Execute(The Rust handler should remove secondary spans if set): - call ale#test#SetFilename('src/noerrors/mod.rs') - - let g:ale_rust_ignore_secondary_spans = 0 - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'end_lnum': 1, - \ 'type': 'E', - \ 'end_col': 20, - \ 'col': 1, - \ 'text': 'this function takes 1 parameter but 0 were supplied: defined here', - \ }, - \ { - \ 'lnum': 1, - \ 'end_lnum': 1, - \ 'type': 'E', - \ 'end_col': 45, - \ 'col': 40, - \ 'text': 'this function takes 1 parameter but 0 were supplied: expected 1 parameter', - \ }, - \ ], - \ ale#handlers#rust#HandleRustErrors(bufnr(''), [ - \ '', - \ 'fn test(x: u8) -> u8 { x } fn main() { x(); }', - \ json_encode({ - \ 'message': { - \ 'code': { - \ 'code': 'E0061', - \ 'explanation': 'Dummy explanation; not used' - \ }, - \ 'level': 'error', - \ 'message': 'this function takes 1 parameter but 0 were supplied', - \ 'spans': [ - \ { - \ 'byte_end': 20, - \ 'byte_start': 0, - \ 'column_end': 21, - \ 'column_start': 1, - \ 'file_name': 'src/noerrors/mod.rs', - \ 'is_primary': v:false, - \ 'label': 'defined here', - \ 'line_end': 1, - \ 'line_start': 1, - \ }, - \ { - \ 'byte_end': 45, - \ 'byte_start': 39, - \ 'column_end': 46, - \ 'column_start': 40, - \ 'file_name': '', - \ 'is_primary': v:true, - \ 'label': 'expected 1 parameter', - \ 'line_end': 1, - \ 'line_start': 1, - \ }, - \ ] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'aborting due to previous error', - \ 'spans': [] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'For more information about this error, try `rustc --explain E0061`.', - \ 'spans': [] - \ }, - \ }), - \ ]) - - let g:ale_rust_ignore_secondary_spans = 1 - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'end_lnum': 1, - \ 'type': 'E', - \ 'end_col': 45, - \ 'col': 40, - \ 'text': 'this function takes 1 parameter but 0 were supplied: expected 1 parameter', - \ }, - \ ], - \ ale#handlers#rust#HandleRustErrors(bufnr(''), [ - \ '', - \ 'fn test(x: u8) -> u8 { x } fn main() { x(); }', - \ json_encode({ - \ 'message': { - \ 'code': { - \ 'code': 'E0061', - \ 'explanation': 'Dummy explanation; not used' - \ }, - \ 'level': 'error', - \ 'message': 'this function takes 1 parameter but 0 were supplied', - \ 'spans': [ - \ { - \ 'byte_end': 20, - \ 'byte_start': 0, - \ 'column_end': 21, - \ 'column_start': 1, - \ 'file_name': 'src/noerrors/mod.rs', - \ 'is_primary': v:false, - \ 'label': 'defined here', - \ 'line_end': 1, - \ 'line_start': 1, - \ }, - \ { - \ 'byte_end': 45, - \ 'byte_start': 39, - \ 'column_end': 46, - \ 'column_start': 40, - \ 'file_name': '', - \ 'is_primary': v:true, - \ 'label': 'expected 1 parameter', - \ 'line_end': 1, - \ 'line_start': 1, - \ }, - \ ] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'aborting due to previous error', - \ 'spans': [] - \ }, - \ }), - \ json_encode({ - \ 'message': { - \ 'code': v:null, - \ 'level': 'error', - \ 'message': 'For more information about this error, try `rustc --explain E0061`.', - \ 'spans': [] - \ }, - \ }), - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_salt_salt_lint.vader b/dotfiles/.vim/plugged/ale/test/handler/test_salt_salt_lint.vader deleted file mode 100644 index 7e234785..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_salt_salt_lint.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - runtime ale_linters/salt/salt_lint.vim - -After: - call ale#linter#Reset() - -Execute(The salt handler should parse lines correctly and show error in severity HIGH): - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'code': 207, - \ 'text': 'File modes should always be encapsulated in quotation marks', - \ 'type': 'E' - \ } - \ ], - \ ale_linters#salt#salt_lint#Handle(255, [ - \ '[{"id": "207", "message": "File modes should always be encapsulated in quotation marks", "filename": "test.sls", "linenumber": 5, "line": " - mode: 0755", "severity": "HIGH"}]' - \ ]) - - -Execute(The salt handler should parse lines correctly and show error in severity not HIGH): - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'code': 204, - \ 'text': 'Lines should be no longer that 160 chars', - \ 'type': 'W' - \ } - \ ], - \ ale_linters#salt#salt_lint#Handle(255, [ - \ '[{"id": "204", "message": "Lines should be no longer that 160 chars", "filename": "test2.sls", "linenumber": 27, "line": "this line is definitely longer than 160 chars, this line is definitely longer than 160 chars, this line is definitely longer than 160 chars", "severity": "VERY_LOW"}]' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_scala_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_scala_handler.vader deleted file mode 100644 index 3214bdbc..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_scala_handler.vader +++ /dev/null @@ -1,32 +0,0 @@ -After: - call ale#linter#Reset() - -Execute(The handler should return an empty list with empty input): - AssertEqual [], ale#handlers#scala#HandleScalacLintFormat(bufnr(''), []) - -Execute(The handler should correctly parse error messages): - AssertEqual - \ [ - \ { - \ 'lnum': 4, - \ 'col': 8, - \ 'text': ''':'' expected but identifier found.', - \ 'type': 'E' - \ }, - \ { - \ 'lnum': 6, - \ 'col': 2, - \ 'text': 'identifier expected but eof found.', - \ 'type': 'E' - \ } - \ ], - \ ale#handlers#scala#HandleScalacLintFormat(bufnr(''), - \ [ - \ "hi.scala:4: error: ':' expected but identifier found.", - \ " Some stupid scala code", - \ " ^", - \ "hi.scala:6: error: identifier expected but eof found.", - \ ")", - \ " ^", - \ "two errors found", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_scalastyle_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_scalastyle_handler.vader deleted file mode 100644 index 32da79c0..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_scalastyle_handler.vader +++ /dev/null @@ -1,53 +0,0 @@ -Before: - runtime! ale_linters/scala/scalastyle.vim - -After: - call ale#linter#Reset() - -Execute(The scalastyle handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 190, - \ 'text': 'Missing or badly formed ScalaDoc: Missing @param str', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 200, - \ 'col': 34, - \ 'text': 'There should be a space before the plus (+) sign', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 200, - \ 'col': 1, - \ 'text': 'There should be a space before the plus (+) sign', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#scala#scalastyle#Handle(347, [ - \ 'Starting scalastyle', - \ 'start file /home/test/Doop.scala', - \ 'warning file=/home/test/Doop.scala message=Missing or badly formed ScalaDoc: Missing @param str line=190', - \ 'error file=/home/test/Doop.scala message=There should be a space before the plus (+) sign line=200 column=33', - \ 'error file=/home/test/Doop.scala message=There should be a space before the plus (+) sign line=200 column=0', - \ 'end file /home/test/Doop.scala', - \ 'Processed 1 file(s)', - \ 'Found 0 errors', - \ 'Found 3 warnings', - \ 'Finished in 934 ms', - \ ]) - -Execute(The scalastyle linter should complain when there is no configuration file): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': '(See :help ale-scala-scalastyle) No scalastyle configuration file was found.', - \ }, - \ ], - \ ale_linters#scala#scalastyle#Handle(347, [ - \ 'scalastyle 1.0.0', - \ 'Usage: scalastyle [options] ', - \ ' -c, --config FILE configuration file (required)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_shell_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_shell_handler.vader deleted file mode 100644 index c61cf37d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_shell_handler.vader +++ /dev/null @@ -1,177 +0,0 @@ -Before: - runtime ale_linters/sh/shell.vim - -After: - call ale#linter#Reset() - -Execute(The shell handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 13, - \ 'text': 'syntax error near unexpected token d', - \ }, - \ { - \ 'lnum': 7, - \ 'text': 'line 42: line 36:', - \ }, - \ { - \ 'lnum': 11, - \ 'text': 'Syntax error: "(" unexpected', - \ }, - \ { - \ 'lnum': 95, - \ 'text': 'parse error near `out=$(( $1 / 1024. )...', - \ }, - \ { - \ 'lnum': 22, - \ 'text': ':11: :33: :44:', - \ }, - \ { - \ 'lnum': 9, - \ 'text': '`done'' unexpected', - \ }, - \ ], - \ ale_linters#sh#shell#Handle(347, [ - \ 'bash: line 13: syntax error near unexpected token d', - \ 'bash: line 7: line 42: line 36:', - \ 'sh: 11: Syntax error: "(" unexpected', - \ 'qfm:95: parse error near `out=$(( $1 / 1024. )...', - \ 'qfm:22: :11: :33: :44:', - \ 'foo.sh: syntax error at line 9: `done'' unexpected', - \ ]) - -Execute(The shell handler should parse Simplified Chinese lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'text': '未预期的符号“done”附近有语法错误', - \ }, - \ { - \ 'lnum': 90, - \ 'text': '寻找匹配的“"”时遇到了未预期的文件结束符', - \ }, - \ { - \ 'lnum': 111, - \ 'text': '语法错误: 未预期的文件结尾', - \ }, - \ { - \ 'lnum': 22, - \ 'text': ':11: :33: :44:', - \ }, - \ ], - \ ale_linters#sh#shell#Handle(347, [ - \ '/tmp/nvimWL5sOL/2/a.sh:行0: 未预期的符号“done”附近有语法错误', - \ '/tmp/nvimWL5sOL/2/a.sh:行90: 寻找匹配的“"”时遇到了未预期的文件结束符', - \ '/tmp/nvimWL5sOL/2/a.sh:行111: 语法错误: 未预期的文件结尾', - \ '/tmp/nvimWL5sOL/2/a.sh:行22: :11: :33: :44:', - \ ]) - -Execute(The shell handler should parse Traditional Chinese lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'text': '未預期的字組「(」附近有語法錯誤', - \ }, - \ { - \ 'lnum': 90, - \ 'text': '尋找匹配的「"」時遇到了未預期的檔案結束符', - \ }, - \ { - \ 'lnum': 111, - \ 'text': '語法錯誤: 未預期的檔案結尾', - \ }, - \ { - \ 'lnum': 22, - \ 'text': ':11: :33: :44:', - \ }, - \ ], - \ ale_linters#sh#shell#Handle(347, [ - \ '/tmp/nvimWL5sOL/2/a.sh: 列 0: 未預期的字組「(」附近有語法錯誤', - \ '/tmp/nvimWL5sOL/2/a.sh: 列 90: 尋找匹配的「"」時遇到了未預期的檔案結束符', - \ '/tmp/nvimWL5sOL/2/a.sh: 列 111: 語法錯誤: 未預期的檔案結尾', - \ '/tmp/nvimWL5sOL/2/a.sh: 列 22: :11: :33: :44:', - \ ]) - -Execute(The shell handler should parse Japanese lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'text': "予期しないトークン `(' 周辺に構文エラーがあります", - \ }, - \ { - \ 'lnum': 90, - \ 'text': "予期しないトークン `done' 周辺に構文エラーがあります", - \ }, - \ { - \ 'lnum': 111, - \ 'text': "対応する `\"' を探索中に予期しないファイル終了 (EOF) です", - \ }, - \ { - \ 'lnum': 22, - \ 'text': ':11: :33: :44:', - \ }, - \ ], - \ ale_linters#sh#shell#Handle(347, [ - \ "/tmp/nvimWL5sOL/2/a.sh: 行 0: 予期しないトークン `(' 周辺に構文エラーがあります", - \ "/tmp/nvimWL5sOL/2/a.sh: 行 90: 予期しないトークン `done' 周辺に構文エラーがあります", - \ "/tmp/nvimWL5sOL/2/a.sh: 行 111: 対応する `\"' を探索中に予期しないファイル終了 (EOF) です", - \ "/tmp/nvimWL5sOL/2/a.sh: 行 22: :11: :33: :44:", - \ ]) - -Execute(The shell handler should parse Greek lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'text': 'συντακτικό σφάλμα κοντά στο μη αναμενόμενο σύμβολο «done»', - \ }, - \ { - \ 'lnum': 90, - \ 'text': 'syntax error: μη αναμενόμενο τέλος αρχείου', - \ }, - \ { - \ 'lnum': 111, - \ 'text': 'μη αναμενόμενο EOF κατά την αναζήτηση «"»', - \ }, - \ { - \ 'lnum': 22, - \ 'text': ':11: :33: :44:', - \ }, - \ ], - \ ale_linters#sh#shell#Handle(347, [ - \ '/tmp/nvimWL5sOL/2/a.sh: γραμμή 0: συντακτικό σφάλμα κοντά στο μη αναμενόμενο σύμβολο «done»', - \ '/tmp/nvimWL5sOL/2/a.sh: γραμμή 90: syntax error: μη αναμενόμενο τέλος αρχείου', - \ '/tmp/nvimWL5sOL/2/a.sh: γραμμή 111: μη αναμενόμενο EOF κατά την αναζήτηση «"»', - \ "/tmp/nvimWL5sOL/2/a.sh: γραμμή 22: :11: :33: :44:", - \ ]) - -Execute(The shell handler should parse Russian lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 0, - \ 'text': 'синтаксическая ошибка рядом с неожиданным маркером «done»', - \ }, - \ { - \ 'lnum': 90, - \ 'text': 'синтаксическая ошибка: неожиданный конец файла', - \ }, - \ { - \ 'lnum': 111, - \ 'text': 'неожиданный конец файла во время поиска «"»', - \ }, - \ { - \ 'lnum': 22, - \ 'text': ':11: :33: :44:', - \ }, - \ ], - \ ale_linters#sh#shell#Handle(347, [ - \ '/tmp/nvimWL5sOL/2/a.sh: строка 0: синтаксическая ошибка рядом с неожиданным маркером «done»', - \ '/tmp/nvimWL5sOL/2/a.sh: строка 90: синтаксическая ошибка: неожиданный конец файла', - \ '/tmp/nvimWL5sOL/2/a.sh: строка 111: неожиданный конец файла во время поиска «"»', - \ '/tmp/nvimWL5sOL/2/a.sh: строка 22: :11: :33: :44:', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_shellcheck_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_shellcheck_handler.vader deleted file mode 100644 index 33f12989..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_shellcheck_handler.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - runtime ale_linters/shell/shellcheck.vim - -After: - call ale#linter#Reset() - -Execute(The shellcheck handler should handle basic errors or warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'In POSIX sh, ''let'' is not supported.', - \ 'code': 'SC2039', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 3, - \ 'type': 'E', - \ 'text': 'Don''t put spaces around the = in assignments.', - \ 'code': 'SC1068', - \ }, - \ ], - \ ale#handlers#shellcheck#Handle(bufnr(''), [ - \ '-:2:1: warning: In POSIX sh, ''let'' is not supported. [SC2039]', - \ '-:2:3: error: Don''t put spaces around the = in assignments. [SC1068]', - \ ]) - -Execute(The shellcheck handler should handle notes): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'col': 3, - \ 'type': 'I', - \ 'text': 'Double quote to prevent globbing and word splitting.', - \ 'code': 'SC2086', - \ }, - \ ], - \ ale#handlers#shellcheck#Handle(bufnr(''), [ - \ '-:3:3: note: Double quote to prevent globbing and word splitting. [SC2086]', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_slim_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_slim_handler.vader deleted file mode 100644 index bfd29f3a..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_slim_handler.vader +++ /dev/null @@ -1,34 +0,0 @@ -" Author: Markus Doits -Before: - runtime ale_linters/slim/slimlint.vim - -After: - call ale#linter#Reset() - -Execute(The slim handler should parse lines correctly): - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': '`div` is redundant when class attribute shortcut is present', - \ 'code': 'RedundantDiv', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'text': 'Line is too long. [136/80]', - \ 'code': 'LineLength', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 3, - \ 'text': 'Invalid syntax', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#slim#slimlint#Handle(347, [ - \ 'inv.slim:1 [W] RedundantDiv: `div` is redundant when class attribute shortcut is present', - \ 'inv.slim:2 [W] LineLength: Line is too long. [136/80]', - \ 'inv.slim:3 [E] Invalid syntax', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_sml_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_sml_handler.vader deleted file mode 100644 index ef93cc47..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_sml_handler.vader +++ /dev/null @@ -1,119 +0,0 @@ -Execute (Testing on EOF error): - AssertEqual [ - \ { - \ 'filename': 'a.sml', - \ 'lnum': 2, - \ 'col': 15, - \ 'type': 'E', - \ 'text': 'Error: syntax error found at EOF', - \ }, - \], - \ ale#handlers#sml#Handle(42, [ - \ "Standard ML of New Jersey v110.78 [built: Thu Jul 23 11:21:58 2015]", - \ "[opening a.sml]", - \ "a.sml:2.16 Error: syntax error found at EOF", - \ '/usr/lib/smlnj/bin/sml: Fatal error -- Uncaught exception Compile with "syntax error" raised at ../compiler/Parse/main/smlfile.sml:15.24-15.46', - \]) - -Execute (Testing if the handler can handle multiple errors on the same line): - AssertEqual [ - \ { - \ 'filename': 'a.sml', - \ 'lnum': 1, - \ 'col': 5, - \ 'type': 'E', - \ 'text': "Error: can't find function arguments in clause", - \ }, - \ { - \ 'filename': 'a.sml', - \ 'lnum': 1, - \ 'col': 12, - \ 'type': 'E', - \ 'text': 'Error: unbound variable or constructor: wow', - \ }, - \], - \ ale#handlers#sml#Handle(42, [ - \ "Standard ML of New Jersey v110.78 [built: Thu Jul 23 11:21:58 2015]", - \ "[opening test.sml]", - \ "a.sml:1.6-1.10 Error: can't find function arguments in clause", - \ "a.sml:1.13-1.16 Error: unbound variable or constructor: wow", - \ "/usr/lib/smlnj/bin/sml: Fatal error -- Uncaught exception Error with 0", - \ "raised at ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27", - \]) - -Execute (Testing rarer errors): - AssertEqual [ - \ { - \ 'filename': 'a.sml', - \ 'lnum': 5, - \ 'col': 18, - \ 'type': 'E', - \ 'text': "Error: syntax error found at ID", - \ }, - \ { - \ 'filename': 'a.sml', - \ 'lnum': 7, - \ 'col': 0, - \ 'type': 'E', - \ 'text': "Error: value type in structure doesn't match signature spec", - \ }, - \], - \ ale#handlers#sml#Handle(42, [ - \ "Standard ML of New Jersey v110.78 [built: Thu Jul 23 11:21:58 2015]", - \ "[opening test.sml]", - \ "a.sml:5.19 Error: syntax error found at ID", - \ "a.sml:7.1-9.27 Error: value type in structure doesn't match signature spec", - \ "/usr/lib/smlnj/bin/sml: Fatal error -- Uncaught exception Error with 0", - \ "raised at ../compiler/TopLevel/interact/evalloop.sml:66.19-66.27", - \]) - -Execute (Testing a warning): - AssertEqual [ - \ { - \ 'filename': 'a.sml', - \ 'lnum': 4, - \ 'col': 4, - \ 'type': 'W', - \ 'text': "Warning: match nonexhaustive", - \ }, - \], - \ ale#handlers#sml#Handle(42, [ - \ "Standard ML of New Jersey v110.78 [built: Thu Jul 23 11:21:58 2015]", - \ "[opening a.sml]", - \ "a.sml:4.5-4.12 Warning: match nonexhaustive", - \ "0 => ...", - \ "val f = fn : int -> int", - \ "-", - \]) - -Execute (Testing stdIn): - AssertEqual [ - \ { - \ 'bufnr': 42, - \ 'lnum': 1, - \ 'col': 5, - \ 'type': 'E', - \ 'text': "Error: operator and operand don't agree [overload conflict]", - \ }, - \ { - \ 'bufnr': 42, - \ 'lnum': 2, - \ 'col': 4, - \ 'type': 'E', - \ 'text': "Error: operator and operand don't agree [overload conflict]", - \ }, - \], - \ ale#handlers#sml#Handle(42, [ - \ "Standard ML of New Jersey v110.79 [built: Sat Oct 26 12:27:04 2019]", - \ "- = stdIn:1.6-1.21 Error: operator and operand don't agree [overload conflict]", - \ " operator domain: [+ ty] * [+ ty]", - \ " operand: string * [int ty]", - \ " in expression:", - \ ' "abc" + 123', - \ "stdIn:2.5-2.20 Error: operator and operand don't agree [overload conflict]", - \ " operator domain: [+ ty] * [+ ty]", - \ " operand: [+ ty] * string", - \ " in expression:", - \ ' 890 + "xyz"', - \ "-", - \]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_solc_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_solc_handler.vader deleted file mode 100644 index dcaa8b2d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_solc_handler.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - runtime ale_linters/solidity/solc.vim - -After: - call ale#linter#Reset() - -Execute(Check solc output parsing): - AssertEqual - \ [ - \ { - \ 'lnum': 40, - \ 'col': 48, - \ 'text': 'This declaration shadows an existing declaration.', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 23, - \ 'col': 16, - \ 'text': 'Member "getSinleSignature" not found or not visible after argument-dependent lookup in type(contract OneToN).', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#solidity#solc#Handle(bufnr(''), [ - \ 'Warning: This declaration shadows an existing declaration.', - \ ' --> /path/to/file.sol:40:48:', - \ ' |', - \ '40 | function decimals() external view returns (uint8 decimals);', - \ ' | ^------------^', - \ 'Error: Member "getSinleSignature" not found or not visible after argument-dependent lookup in type(contract OneToN).', - \ ' --> /path/to/file.sol:23:16: ', - \ ' | ', - \ '23 | return OneToN.getSinleSignature(signatures, i);', - \ ' | ^----------------------^', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_solhint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_solhint_handler.vader deleted file mode 100644 index f8fffb60..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_solhint_handler.vader +++ /dev/null @@ -1,84 +0,0 @@ -Before: - runtime ale_linters/solidity/solhint.vim - -After: - call ale#linter#Reset() - -Execute(The solhint handler should parse linter error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 17, - \ 'text': 'Compiler version must be fixed', - \ 'code': 'compiler-fixed', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 8, - \ 'text': 'Use double quotes for string literals', - \ 'code': 'quotes', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 5, - \ 'col': 8, - \ 'text': 'Use double quotes for string literals', - \ 'code': 'quotes', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 13, - \ 'col': 3, - \ 'text': 'Expected indentation of 4 spaces but found 2', - \ 'code': 'indent', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 14, - \ 'col': 3, - \ 'text': 'Expected indentation of 4 spaces but found 2', - \ 'code': 'indent', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 47, - \ 'col': 3, - \ 'text': 'Function order is incorrect, public function can not go after internal function.', - \ 'code': 'func-order', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#solhint#Handle(bufnr(''), [ - \ 'contracts/Bounty.sol: line 1, col 17, Warning - Compiler version must be fixed (compiler-fixed)', - \ 'contracts/Bounty.sol: line 4, col 8, Error - Use double quotes for string literals (quotes)', - \ 'contracts/Bounty.sol: line 5, col 8, Error - Use double quotes for string literals (quotes)', - \ 'contracts/Bounty.sol: line 13, col 3, Error - Expected indentation of 4 spaces but found 2 (indent)', - \ 'contracts/Bounty.sol: line 14, col 3, Error - Expected indentation of 4 spaces but found 2 (indent)', - \ 'contracts/Bounty.sol: line 47, col 3, Error - Function order is incorrect, public function can not go after internal function. (func-order)', - \ ]) - - -Execute(The solhint handler should parse syntax error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 30, - \ 'col': 4, - \ 'text': "missing ';' at 'uint248'", - \ 'code': 'Parse error', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 203, - \ 'col': 4, - \ 'text': "no viable alternative at input '_loserStakeMultiplier}'", - \ 'code': 'Parse error', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#solhint#Handle(bufnr(''), [ - \ "contracts/Bounty.sol: line 30, col 4, Error - Parse error: missing ';' at 'uint248'", - \ "contracts/Bounty.sol: line 203, col 4, Error - Parse error: no viable alternative at input '_loserStakeMultiplier}'", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_spectral_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_spectral_handler.vader deleted file mode 100644 index 89a3ff1b..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_spectral_handler.vader +++ /dev/null @@ -1,52 +0,0 @@ -Before: - runtime ale_linters/yaml/spectral.vim - -After: - call ale#linter#Reset() - -Execute(spectral handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'code': 'oas3-api-servers', - \ 'text': 'OpenAPI `servers` must be present and non-empty array.', - \ 'type': 'W' - \ }, - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'code': 'oas3-schema', - \ 'text': 'Object should have required property `paths`.', - \ 'type': 'E' - \ }, - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'code': 'openapi-tags', - \ 'text': 'OpenAPI object should have non-empty `tags` array.', - \ 'type': 'W' - \ }, - \ { - \ 'lnum': 3, - \ 'col': 6, - \ 'code': 'info-contact', - \ 'text': 'Info object should contain `contact` object.', - \ 'type': 'W' - \ }, - \ { - \ 'lnum': 3, - \ 'col': 6, - \ 'code': 'oas3-schema', - \ 'text': '`info` property should have required property `version`.', - \ 'type': 'E' - \ }, - \ ], - \ ale#handlers#spectral#HandleSpectralOutput(bufnr(''), [ - \ 'openapi.yml:1:1 warning oas3-api-servers "OpenAPI `servers` must be present and non-empty array."', - \ 'openapi.yml:1:1 error oas3-schema "Object should have required property `paths`."', - \ 'openapi.yml:1:1 warning openapi-tags "OpenAPI object should have non-empty `tags` array."', - \ 'openapi.yml:3:6 warning info-contact "Info object should contain `contact` object."', - \ 'openapi.yml:3:6 error oas3-schema "`info` property should have required property `version`."', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_sqlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_sqlint_handler.vader deleted file mode 100644 index 5567ca41..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_sqlint_handler.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - runtime! ale_linters/sql/sqlint.vim - -After: - call ale#linter#Reset() - -Execute(The sqlint handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'col': 1, - \ 'text': 'syntax error at or near "WIBBLE"', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 47, - \ 'col': 11, - \ 'text': 'unterminated quoted string at or near "''', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 50, - \ 'col': 12, - \ 'text': 'some warning at end of input', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#sql#sqlint#Handle(347, [ - \ 'This line should be ignored completely', - \ 'stdin:3:1:ERROR syntax error at or near "WIBBLE"', - \ 'stdin:47:11:ERROR unterminated quoted string at or near "''', - \ 'stdin:50:12:WARNING some warning at end of input', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_sqllint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_sqllint_handler.vader deleted file mode 100644 index 2f2283c8..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_sqllint_handler.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - " Load the file which defines the linter. - runtime ale_linters/sql/sqllint.vim - -After: - " Unload all linters again. - call ale#linter#Reset() - -Execute (The output should be correct): - - " Test that the right loclist items are parsed from the handler. - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 0, - \ 'type': '', - \ 'text': 'stdin:1 [ER_NO_DB_ERROR] No database selected' - \ }, - \ ], - \ ale_linters#sql#sqllint#Handle(bufnr(''), [ - \ 'stdin:1 [ER_NO_DB_ERROR] No database selected' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_standard_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_standard_handler.vader deleted file mode 100644 index 31e3a36b..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_standard_handler.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - Save g:ale_javascript_eslint_suppress_eslintignore - - let g:ale_javascript_eslint_suppress_eslintignore = 0 - -After: - Restore - -Execute(The standard handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 47, - \ 'col': 14, - \ 'text': 'Expected indentation of 2 spaces but found 4.', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 56, - \ 'col': 41, - \ 'text': 'Strings must use singlequote.', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 13, - \ 'col': 3, - \ 'text': 'Parsing error: Unexpected token', - \ 'type': 'E', - \ }, - \ ], - \ ale#handlers#eslint#Handle(347, [ - \ 'This line should be ignored completely', - \ '/path/to/some-filename.js:47:14: Expected indentation of 2 spaces but found 4.', - \ '/path/to/some-filename.js:56:41: Strings must use singlequote.', - \ 'This line should be ignored completely', - \ '/path/to/some-filename.js:13:3: Parsing error: Unexpected token', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_starknet_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_starknet_handler.vader deleted file mode 100644 index 767cb211..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_starknet_handler.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - runtime ale_linters/cairo/starknet.vim - -After: - call ale#linter#Reset() - -Execute(The starknet handler should handle error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'col': 6, - \ 'text': 'Could not find module "starkware.cairo.commo.cairo_builtins". Searched in the following paths:', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#cairo#starknet#Handle(bufnr(''), [ - \ 'contract.cairo:3:6: Could not find module "starkware.cairo.commo.cairo_builtins". Searched in the following paths:', - \ 'from starkware.cairo.commo.cairo_builtins import HashBuiltin', - \ ' ^**********************************^', - \ ]) - - AssertEqual - \ [ - \ { - \ 'lnum': 21, - \ 'col': 2, - \ 'text': 'Unsupported decorator: "vie".', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#cairo#starknet#Handle(bufnr(''), [ - \ 'contract.cairo:21:2: Unsupported decorator: "vie".', - \ '@vie', - \ ' ^*^', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_statix_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_statix_handler.vader deleted file mode 100644 index f2a105ee..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_statix_handler.vader +++ /dev/null @@ -1,16 +0,0 @@ -Execute(The statix handler should handle statix output): - call ale#test#SetFilename('flake.nix') - - AssertEqual - \ [ - \ { - \ 'lnum': 46, - \ 'type': 'W', - \ 'col': 13, - \ 'code': '3', - \ 'text': 'This assignment is better written with `inherit`' - \ }, - \ ], - \ ale#handlers#statix#Handle(bufnr(''), - \ '>46:13:W:3:This assignment is better written with `inherit`' - \) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_stylelint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_stylelint_handler.vader deleted file mode 100644 index 5cb34601..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_stylelint_handler.vader +++ /dev/null @@ -1,43 +0,0 @@ -After: - unlet! g:error_lines - -Execute (stylelint errors should be handled correctly): - " Stylelint includes trailing spaces for output. This needs to be taken into - " account for parsing errors. - AssertEqual - \ [ - \ { - \ 'lnum': 108, - \ 'col': 10, - \ 'type': 'E', - \ 'text': 'Unexpected leading zero', - \ 'code': 'number-leading-zero', - \ }, - \ { - \ 'lnum': 116, - \ 'col': 20, - \ 'type': 'E', - \ 'text': 'Expected a trailing semicolon', - \ 'code': 'declaration-block-trailing-semicolon', - \ }, - \ ], - \ ale#handlers#css#HandleStyleLintFormat(42, [ - \ 'src/main.css', - \ ' 108:10 ✖ Unexpected leading zero number-leading-zero ', - \ ' 116:20 ✖ Expected a trailing semicolon declaration-block-trailing-semicolon', - \ ]) - -Execute (stylelint should complain when no configuration file is used): - let g:error_lines = [ - \ 'Error: No configuration provided for /home/w0rp/.vim/bundle/ale/test.stylus', - \ ' at module.exports (/home/w0rp/.vim/bundle/ale/node_modules/stylelint/lib/utils/configurationError.js:8:27)', - \ ' at stylelint._fullExplorer.load.then.then.config (/home/w0rp/.vim/bundle/ale/node_modules/stylelint/lib/getConfigForFile.js:39:13)', - \] - - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'stylelint exception thrown (type :ALEDetail for more information)', - \ 'detail': join(g:error_lines, "\n"), - \ }], - \ ale#handlers#css#HandleStyleLintFormat(347, g:error_lines[:]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_swaglint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_swaglint_handler.vader deleted file mode 100644 index 7ab10439..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_swaglint_handler.vader +++ /dev/null @@ -1,68 +0,0 @@ -Before: - runtime ale_linters/yaml/swaglint.vim - -After: - call ale#linter#Reset() - -Execute(The swaglint handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'Missing required property: info', - \ 'code': 'sway_object_missing_required_property', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 6, - \ 'col': 9, - \ 'text': 'Not a valid response definition', - \ 'code': 'sway_one_of_missing', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 11, - \ 'text': 'Missing required property: description', - \ 'code': 'sway_object_missing_required_property', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 11, - \ 'text': 'Missing required property: $ref', - \ 'code': 'sway_object_missing_required_property', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'text': 'Expected type string but found type integer', - \ 'code': 'sway_invalid_type', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'text': 'No enum match for: 2', - \ 'code': 'sway_enum_mismatch', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 14, - \ 'col': 3, - \ 'text': 'Definition is not used: #/definitions/Foo', - \ 'code': 'sway_unused_definition', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#yaml#swaglint#Handle(347, [ - \ 'swagger.yaml: error @ 1:1 - Missing required property: info (sway_object_missing_required_property)', - \ 'swagger.yaml: error @ 6:9 - Not a valid response definition (sway_one_of_missing)', - \ 'swagger.yaml: error @ 7:11 - Missing required property: description (sway_object_missing_required_property)', - \ 'swagger.yaml: error @ 7:11 - Missing required property: $ref (sway_object_missing_required_property)', - \ 'swagger.yaml: error @ 1:10 - Expected type string but found type integer (sway_invalid_type)', - \ 'swagger.yaml: error @ 1:10 - No enum match for: 2 (sway_enum_mismatch)', - \ 'swagger.yaml: warning @ 14:3 - Definition is not used: #/definitions/Foo (sway_unused_definition)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_swiftlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_swiftlint_handler.vader deleted file mode 100644 index 725ff97c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_swiftlint_handler.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - runtime ale_linters/swift/swiftlint.vim - -After: - call ale#linter#Reset() - -Execute(The swiftint handler should parse error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 7, - \ 'text': 'Operator Usage Whitespace Violation: Operators should be surrounded by a single whitespace when they are being used.', - \ 'code': 'operator_usage_whitespace', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 11, - \ 'text': 'Operator Usage Whitespace Violation: Operators should be surrounded by a single whitespace when they are being used.', - \ 'code': 'operator_usage_whitespace', - \ 'type': 'W', - \ }, - \ - \ ], - \ ale_linters#swift#swiftlint#Handle(bufnr(''), [ - \ 'This line should be ignored', - \ ':1:7: warning: Operator Usage Whitespace Violation: Operators should be surrounded by a single whitespace when they are being used. (operator_usage_whitespace)', - \ ':1:11: warning: Operator Usage Whitespace Violation: Operators should be surrounded by a single whitespace when they are being used. (operator_usage_whitespace)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_swipl_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_swipl_handler.vader deleted file mode 100644 index 81b8b9e5..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_swipl_handler.vader +++ /dev/null @@ -1,155 +0,0 @@ -Before: - runtime ale_linters/prolog/swipl.vim - -After: - call ale#linter#Reset() - -Execute (The swipl handler should handle oneline warning / error): - call ale#test#SetFilename('test.pl') - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 1, - \ 'text': 'Syntax error: Operator expected', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#prolog#swipl#Handle(bufnr(''), [ - \ 'ERROR: /path/to/test.pl:5:1: Syntax error: Operator expected', - \ ]) - -Execute (The swipl handler should handle a warning / error of two lines): - call ale#test#SetFilename('test.pl') - AssertEqual - \ [ - \ { - \ 'lnum': 9, - \ 'col': 0, - \ 'text': 'Singleton variables: [M]', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#prolog#swipl#Handle(bufnr(''), [ - \ 'Warning: /path/to/test.pl:9:', - \ ' Singleton variables: [M]', - \ ]) - -Execute (The swipl handler should handle a warning / error of two lines in the new format): - call ale#test#SetFilename('test.pl') - AssertEqual - \ [ - \ { - \ 'lnum': 9, - \ 'col': 0, - \ 'text': 'Singleton variables: [M]', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#prolog#swipl#Handle(bufnr(''), [ - \ 'Warning: /path/to/test.pl:9:', - \ 'Warning: Singleton variables: [M]', - \ ]) - -Execute (The swipl handler should join three or more lines with '. '): - call ale#test#SetFilename('test.pl') - AssertEqual - \ [ - \ { - \ 'lnum': 10, - \ 'col': 0, - \ 'text': 'Clauses of fib/2 are not together in the source-file. Earlier definition at /path/to/test.pl:7. Current predicate: f/0. Use :- discontiguous fib/2. to suppress this message', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#prolog#swipl#Handle(bufnr(''), [ - \ 'Warning: /path/to/test.pl:10:', - \ ' Clauses of fib/2 are not together in the source-file', - \ ' Earlier definition at /path/to/test.pl:7', - \ ' Current predicate: f/0', - \ ' Use :- discontiguous fib/2. to suppress this message', - \ ]) - -Execute (The swipl handler should ignore warnings / errors 'No permission to call sandboxed ...'): - call ale#test#SetFilename('test.pl') - AssertEqual - \ [], - \ ale_linters#prolog#swipl#Handle(bufnr(''), [ - \ 'ERROR: /path/to/test.pl:11:', - \ ' No permission to call sandboxed `''$set_predicate_attribute''(_G3416:_G3417,_G3413,_G3414)''', - \ ' Reachable from:', - \ ' system:''$set_pattr''(A,B,C,D)', - \ ' system:''$set_pattr''(vimscript:A,B,C)', - \ ' vimscript: (multifile A)', - \ 'ERROR: /path/to/test.pl:12:', - \ ' No permission to call sandboxed `''$set_predicate_attribute''(_G205:_G206,_G202,_G203)''', - \ ' Reachable from:', - \ ' system:''$set_pattr''(A,B,C,D)', - \ ' system:''$set_pattr''(vimscript:A,B,C)', - \ ' vimscript: (multifile A)', - \ 'ERROR: /path/to/test.pl:13:', - \ ' No permission to call sandboxed `''$set_predicate_attribute''(_G1808:_G1809,_G1805,_G1806)''', - \ ' Reachable from:', - \ ' system:''$set_pattr''(A,B,C,D)', - \ ' system:''$set_pattr''(vimscript:A,B,C)', - \ ' vimscript: (multifile A)', - \ ]) - -Execute (The swipl handler should join three or more lines with '. ' on latest swipl): - call ale#test#SetFilename('test.pl') - AssertEqual - \ [ - \ { - \ 'lnum': 10, - \ 'col': 0, - \ 'text': 'Clauses of fib/2 are not together in the source-file. Earlier definition at /path/to/test.pl:7. Current predicate: f/0. Use :- discontiguous fib/2. to suppress this message', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#prolog#swipl#Handle(bufnr(''), [ - \ 'Warning: /path/to/test.pl:10:', - \ 'Warning: Clauses of fib/2 are not together in the source-file', - \ 'Warning: Earlier definition at /path/to/test.pl:7', - \ 'Warning: Current predicate: f/0', - \ 'Warning: Use :- discontiguous fib/2. to suppress this message', - \ ]) - -Execute (The swipl handler should ignore warnings / errors 'No permission to call sandboxed with latest swpl...'): - call ale#test#SetFilename('test.pl') - AssertEqual - \ [], - \ ale_linters#prolog#swipl#Handle(bufnr(''), [ - \ 'ERROR: /path/to/test.pl:11:', - \ 'ERROR: No permission to call sandboxed `''$set_predicate_attribute''(_G3416:_G3417,_G3413,_G3414)''', - \ 'ERROR: Reachable from:', - \ 'ERROR: system:''$set_pattr''(A,B,C,D)', - \ 'ERROR: system:''$set_pattr''(vimscript:A,B,C)', - \ 'ERROR: vimscript: (multifile A)', - \ 'ERROR: /path/to/test.pl:12:', - \ 'ERROR: No permission to call sandboxed `''$set_predicate_attribute''(_G205:_G206,_G202,_G203)''', - \ 'ERROR: Reachable from:', - \ 'ERROR: system:''$set_pattr''(A,B,C,D)', - \ 'ERROR: system:''$set_pattr''(vimscript:A,B,C)', - \ 'ERROR: vimscript: (multifile A)', - \ 'ERROR: /path/to/test.pl:13:', - \ 'ERROR: No permission to call sandboxed `''$set_predicate_attribute''(_G1808:_G1809,_G1805,_G1806)''', - \ 'ERROR: Reachable from:', - \ 'ERROR: system:''$set_pattr''(A,B,C,D)', - \ 'ERROR: system:''$set_pattr''(vimscript:A,B,C)', - \ 'ERROR: vimscript: (multifile A)', - \ ]) - -Execute (The swipl handler should handle a warning / error with no line number): - call ale#test#SetFilename('test.pl') - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 0, - \ 'text': 'Exported procedure module_name:pred/0 is not defined', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#prolog#swipl#Handle(bufnr(''), [ - \ 'ERROR: Exported procedure module_name:pred/0 is not defined', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_syntaxerl_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_syntaxerl_handler.vader deleted file mode 100644 index 95f2bfef..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_syntaxerl_handler.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - runtime ale_linters/erlang/syntaxerl.vim - -After: - call ale#linter#Reset() - -Execute (Handle SyntaxErl output): - AssertEqual - \ [ - \ { - \ 'lnum': 42, - \ 'text': "syntax error before: ','", - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 42, - \ 'text': 'function foo/0 is unused', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#erlang#syntaxerl#Handle(bufnr(''), [ - \ "/tmp/v2wDixk/1/module.erl:42: syntax error before: ','", - \ '/tmp/v2wDixk/2/module.erl:42: warning: function foo/0 is unused', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_systemd_analyze_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_systemd_analyze_handler.vader deleted file mode 100644 index c7d668e0..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_systemd_analyze_handler.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - runtime ale_linters/systemd/systemd_analyze.vim - -After: - call ale#linter#Reset() - -Execute(The systemd-analyze handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 9, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'Unknown key name ''Wat'' in section ''Service'', ignoring.', - \ }, - \ ], - \ ale_linters#systemd#systemd_analyze#Handle(bufnr(''), [ - \ '/home/user/.config/systemd/user/foo.service:9: Unknown key name ''Wat'' in section ''Service'', ignoring.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_terraform_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_terraform_handler.vader deleted file mode 100644 index 4be89cb1..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_terraform_handler.vader +++ /dev/null @@ -1,138 +0,0 @@ -Before: - " Load the file which defines the linter. - runtime ale_linters/terraform/terraform.vim - call ale#test#SetDirectory('/testplugin/test/test-files/terraform') - call ale#test#SetFilename('providers.tf') - -After: - " Unload all linters again. - call ale#linter#Reset() - call ale#test#RestoreDirectory() - -Execute(The output should be correct): - AssertEqual - \ [ - \ { - \ 'lnum': 17, - \ 'col': 13, - \ 'filename': ale#path#Simplify(g:dir . '/providers.tf'), - \ 'type': 'W', - \ 'text': 'Terraform 0.13 and earlier allowed provider version', - \ }, - \ { - \ 'lnum': 0, - \ 'col': 0, - \ 'filename': ale#path#Simplify(g:dir . '/providers.tf'), - \ 'type': 'E', - \ 'text': 'Plugin reinitialization required. Please run "terraform"', - \ } - \ ], - \ ale_linters#terraform#terraform#Handle(bufnr(''), [ - \ '{', - \ '"valid": false,', - \ '"error_count": 1,', - \ '"warning_count": 1,', - \ '"diagnostics": [', - \ ' {', - \ ' "severity": "warning",', - \ ' "summary": "Version constraints inside provider configuration blocks are deprecated",', - \ ' "detail": "Terraform 0.13 and earlier allowed provider version",', - \ ' "range": {', - \ ' "filename": "providers.tf",', - \ ' "start": {', - \ ' "line": 17,', - \ ' "column": 13,', - \ ' "byte": 669', - \ ' },', - \ ' "end": {', - \ ' "line": 17,', - \ ' "column": 24,', - \ ' "byte": 680', - \ ' }', - \ ' }', - \ ' },', - \ ' {', - \ ' "severity": "error",', - \ ' "summary": "Could not load plugin",', - \ ' "detail": "Plugin reinitialization required. Please run \"terraform\""', - \ ' }', - \ ' ]', - \ '}', - \ ]) - -Execute(Should use summary if detail not available): - AssertEqual - \ [ - \ { - \ 'lnum': 91, - \ 'col': 41, - \ 'filename': ale#path#Simplify(g:dir . '/main.tf'), - \ 'type': 'E', - \ 'text': 'storage_os_disk: required field is not set', - \ } - \ ], - \ ale_linters#terraform#terraform#Handle(bufnr(''), [ - \ '{', - \ ' "valid": false,', - \ ' "error_count": 1,', - \ ' "warning_count": 0,', - \ ' "diagnostics": [', - \ ' {', - \ ' "severity": "error",', - \ ' "summary": "storage_os_disk: required field is not set",', - \ ' "range": {', - \ ' "filename": "main.tf",', - \ ' "start": {', - \ ' "line": 91,', - \ ' "column": 41,', - \ ' "byte": 2381', - \ ' },', - \ ' "end": {', - \ ' "line": 91,', - \ ' "column": 41,', - \ ' "byte": 2381', - \ ' }', - \ ' }', - \ ' }', - \ ' ]', - \ '}' - \ ]) - -Execute(Should use summary if detail available but empty): - AssertEqual - \ [ - \ { - \ 'lnum': 91, - \ 'col': 41, - \ 'filename': ale#path#Simplify(g:dir . '/main.tf'), - \ 'type': 'E', - \ 'text': 'storage_os_disk: required field is not set', - \ } - \ ], - \ ale_linters#terraform#terraform#Handle(bufnr(''), [ - \ '{', - \ ' "valid": false,', - \ ' "error_count": 1,', - \ ' "warning_count": 0,', - \ ' "diagnostics": [', - \ ' {', - \ ' "severity": "error",', - \ ' "summary": "storage_os_disk: required field is not set",', - \ ' "detail": "",', - \ ' "range": {', - \ ' "filename": "main.tf",', - \ ' "start": {', - \ ' "line": 91,', - \ ' "column": 41,', - \ ' "byte": 2381', - \ ' },', - \ ' "end": {', - \ ' "line": 91,', - \ ' "column": 41,', - \ ' "byte": 2381', - \ ' }', - \ ' }', - \ ' }', - \ ' ]', - \ '}' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_textlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_textlint_handler.vader deleted file mode 100644 index c00d54de..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_textlint_handler.vader +++ /dev/null @@ -1,41 +0,0 @@ -Before: - runtime! ale_linters/markdown/textlint.vim - -After: - call ale#linter#Reset() - -Execute(textlint handler should handle errors output): - AssertEqual - \ [ - \ { - \ 'lnum': 16, - \ 'col': 50, - \ 'text': 'Found possibly misspelled word "NeoVim".', - \ 'type': 'W', - \ 'code': 'preset-japanese/no-doubled-joshi', - \ }, - \ ], - \ ale#handlers#textlint#HandleTextlintOutput(bufnr(''), [ - \ '[', - \ ' {', - \ ' "filePath": "test.md",', - \ ' "messages": [', - \ ' {', - \ ' "type": "lint",', - \ ' "ruleId": "preset-japanese/no-doubled-joshi",', - \ ' "index": 1332,', - \ ' "line": 16,', - \ ' "column": 50,', - \ ' "severity": 2,', - \ ' "message": "Found possibly misspelled word \"NeoVim\"."', - \ ' }', - \ ' ]', - \ ' }', - \ ']', - \ ]) - -Execute(textlint handler should no error output): - AssertEqual - \ [], - \ ale#handlers#textlint#HandleTextlintOutput(bufnr(''), [ - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_tflint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_tflint_handler.vader deleted file mode 100644 index 6b8173af..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_tflint_handler.vader +++ /dev/null @@ -1,99 +0,0 @@ -Before: - runtime! ale_linters/terraform/tflint.vim - -After: - call ale#linter#Reset() - -Execute(The tflint handler should parse items correctly for pre 0.11): - AssertEqual - \ [ - \ { - \ 'lnum': 12, - \ 'text': 'be warned, traveller', - \ 'code': 'aws_db_instance_readable_password', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 9, - \ 'text': 'error message', - \ 'code': 'aws_elasticache_cluster_invalid_type', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 5, - \ 'text': 'just so ya know', - \ 'code': 'aws_instance_not_specified_iam_profile', - \ 'type': 'I', - \ }, - \ ], - \ ale_linters#terraform#tflint#Handle(123, [ - \ '[ { "detector": "aws_db_instance_readable_password", "type": "WARNING", "message": "be warned, traveller", "line": 12, "file": "github.com/wata727/example-module/aws_db_instance.tf", "link": "https://github.com/wata727/tflint/blob/master/docs/aws_db_instance_readable_password.md" }, { "detector": "aws_elasticache_cluster_invalid_type", "type": "ERROR", "message": "error message", "line": 9, "file": "github.com/wata727/example-module/aws_elasticache_cluster.tf", "link": "https://github.com/wata727/tflint/blob/master/docs/aws_elasticache_cluster_invalid_type.md" }, { "detector": "aws_instance_not_specified_iam_profile", "type": "NOTICE", "message": "just so ya know", "line": 5, "file": "github.com/wata727/example-module/aws_instance.tf", "link": "https://github.com/wata727/tflint/blob/master/docs/aws_instance_not_specified_iam_profile.md" } ]' - \ ]) - -Execute(The tflint handler should parse items correctly): - AssertEqual - \ [ - \ { - \ 'filename': 'github.com/wata727/example-module/aws_instance.tf', - \ 'lnum': 1, - \ 'col': 30, - \ 'end_lnum': 2, - \ 'end_col': 1, - \ 'text': 'A block definition must have block content delimited by "{" and "}", starting on the same line as the block header.', - \ 'code': 'Invalid block definition', - \ 'type': 'E', - \ }, - \ { - \ 'filename': 'github.com/wata727/example-module/aws_instance.tf', - \ 'lnum': 2, - \ 'col': 3, - \ 'end_lnum': 2, - \ 'end_col': 6, - \ 'text': 'An argument named "ami" is not expected here.', - \ 'code': 'Unsupported argument', - \ 'type': 'E', - \ }, - \ { - \ 'filename': 'github.com/wata727/example-module/aws_instance.tf', - \ 'lnum': 3, - \ 'col': 3, - \ 'end_lnum': 1, - \ 'end_col': 6, - \ 'text': 'An argument named "instance_type" is not expected here.', - \ 'code': 'Unsupported argument', - \ 'type': 'E', - \ }, - \ { - \ 'filename': 'github.com/wata727/example-module/aws_db_instance.tf', - \ 'lnum': 12, - \ 'col': 11, - \ 'end_lnum': 12, - \ 'end_col': 21, - \ 'text': 'be warned, traveller', - \ 'code': 'aws_db_instance_readable_password', - \ 'type': 'W', - \ }, - \ { - \ 'filename': 'github.com/wata727/example-module/aws_elasticache_cluster.tf', - \ 'lnum': 9, - \ 'col': 29, - \ 'end_lnum': 9, - \ 'end_col': 29, - \ 'text': 'error message', - \ 'code': 'aws_elasticache_cluster_invalid_type', - \ 'type': 'E', - \ }, - \ { - \ 'filename': 'github.com/wata727/example-module/aws_instance.tf', - \ 'lnum': 5, - \ 'col': 15, - \ 'end_lnum': 5, - \ 'end_col': 25, - \ 'text': 'just so ya know', - \ 'code': 'aws_instance_not_specified_iam_profile', - \ 'type': 'I', - \ }, - \ ], - \ ale_linters#terraform#tflint#Handle(123, [ - \ '{"issues":[{"rule":{"name":"aws_db_instance_readable_password","severity":"WARNING","link":"https://github.com/wata727/tflint/blob/master/docs/aws_db_instance_readable_password.md"},"message":"be warned, traveller","range":{"filename":"github.com/wata727/example-module/aws_db_instance.tf","start":{"line":12,"column":11},"end":{"line":12,"column":21},"callers":[]}},{"rule":{"name":"aws_elasticache_cluster_invalid_type","severity":"ERROR","link":"https://github.com/wata727/tflint/blob/master/docs/aws_elasticache_cluster_invalid_type.md"},"message":"error message","range":{"filename":"github.com/wata727/example-module/aws_elasticache_cluster.tf","start":{"line":9,"column":29},"end":{"line":9,"column":29},"callers":[]}},{"rule":{"name":"aws_instance_not_specified_iam_profile","severity":"NOTICE","link":"https://github.com/wata727/tflint/blob/master/docs/aws_instance_not_specified_iam_profile.md"},"message":"just so ya know","range":{"filename":"github.com/wata727/example-module/aws_instance.tf","start":{"line":5,"column":15},"end":{"line":5,"column":25},"callers":[]}}],"errors":[{"message":"github.com/wata727/example-module/aws_instance.tf:1,30-2,1: Invalid block definition; A block definition must have block content delimited by \"{\" and \"}\", starting on the same line as the block header."},{"message":"github.com/wata727/example-module/aws_instance.tf:2,3-6: Unsupported argument; An argument named \"ami\" is not expected here."},{"message":"github.com/wata727/example-module/aws_instance.tf:3,3-16: Unsupported argument; An argument named \"instance_type\" is not expected here."}]}' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_tfsec_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_tfsec_handler.vader deleted file mode 100644 index bf64b8fb..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_tfsec_handler.vader +++ /dev/null @@ -1,52 +0,0 @@ -Before: - runtime ale_linters/terraform/tfsec.vim - -After: - call ale#linter#Reset() - -Execute(The tfsec handler should handle empty outout): - AssertEqual - \ [], - \ ale_linters#terraform#tfsec#Handle(bufnr(''), ['{"results": null}']) - -Execute(The tfsec handler should parse results correctly): - AssertEqual - \ [ - \ { - \ 'filename': '/test/main.tf', - \ 'lnum': 10, - \ 'end_lnum': 12, - \ 'text': "IAM policy document uses sensitive action 'iam:PassRole' on wildcarded resource '*'", - \ 'code': 'aws-iam-no-policy-wildcards', - \ 'type': 'W', - \ }, - \], - \ ale_linters#terraform#tfsec#Handle(bufnr(''), json_encode( - \ { - \ "results": [ - \ { - \ "rule_id": "AVD-AWS-0057", - \ "long_id": "aws-iam-no-policy-wildcards", - \ "rule_description": "IAM policy should avoid use of wildcards and instead apply the principle of least privilege", - \ "rule_provider": "aws", - \ "rule_service": "iam", - \ "impact": "Overly permissive policies may grant access to sensitive resources", - \ "resolution": "Specify the exact permissions required, and to which resources they should apply instead of using wildcards.", - \ "links": [ - \ "https://aquasecurity.github.io/tfsec/v1.28.0/checks/aws/iam/no-policy-wildcards/", - \ "https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/iam_policy_document" - \ ], - \ "description": "IAM policy document uses sensitive action 'iam:PassRole' on wildcarded resource '*'", - \ "severity": "HIGH", - \ "warning": v:false, - \ "status": 0, - \ "resource": "data.aws_iam_policy_document.default", - \ "location": { - \ "filename": "/test/main.tf", - \ "start_line": 10, - \ "end_line": 12 - \ } - \ } - \ ] - \ } - \)) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_thrift_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_thrift_handler.vader deleted file mode 100644 index 9bdb9378..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_thrift_handler.vader +++ /dev/null @@ -1,63 +0,0 @@ -Before: - runtime ale_linters/thrift/thrift.vim - -After: - call ale#linter#Reset() - -Execute(The thrift handler should handle basic warnings and errors): - AssertEqual - \ [ - \ { - \ 'lnum': 17, - \ 'col': 0, - \ 'type': 'W', - \ 'text': 'The "byte" type is a compatibility alias for "i8". Use i8" to emphasize the signedness of this type.', - \ }, - \ { - \ 'lnum': 20, - \ 'col': 0, - \ 'type': 'W', - \ 'text': 'Could not find include file include.thrift', - \ }, - \ { - \ 'lnum': 83, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'Enum FOO is already defined!', - \ }, - \ ], - \ ale_linters#thrift#thrift#Handle(1, [ - \ '[WARNING:/path/filename.thrift:17] The "byte" type is a compatibility alias for "i8". Use i8" to emphasize the signedness of this type.', - \ '[WARNING:/path/filename.thrift:20] Could not find include file include.thrift', - \ '[FAILURE:/path/filename.thrift:83] Enum FOO is already defined!', - \ ]) - -Execute(The thrift handler should handle multiline errors): - AssertEqual - \ [ - \ { - \ 'lnum': 75, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'This integer is too big: "11111111114213213453243"', - \ }, - \ { - \ 'lnum': 76, - \ 'col': 0, - \ 'type': 'E', - \ 'text': 'Implicit field keys are deprecated and not allowed with -strict', - \ }, - \ { - \ 'lnum': 77, - \ 'col': 0, - \ 'type': 'E', - \ 'text': "Unknown error (last token was ';')", - \ }, - \ ], - \ ale_linters#thrift#thrift#Handle(1, [ - \ "[ERROR:/path/filename.thrift:75] (last token was '11111111114213213453243')", - \ 'This integer is too big: "11111111114213213453243"', - \ "[ERROR:/path/filename.thrift:76] (last token was ';')", - \ 'Implicit field keys are deprecated and not allowed with -strict', - \ "[ERROR:/path/filename.thrift:77] (last token was ';')", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_thriftcheck_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_thriftcheck_handler.vader deleted file mode 100644 index e80e5050..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_thriftcheck_handler.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - runtime ale_linters/thrift/thriftcheck.vim - -After: - call ale#linter#Reset() - -Execute(The thriftcheck handler should handle basic warnings and errors): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'text': '"py" namespace must match "^idl\\."', - \ 'code': 'namespace.pattern', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 5, - \ 'type': 'W', - \ 'text': '64-bit integer constant -2147483649 may not work in all languages', - \ 'code': 'int.64bit', - \ }, - \ ], - \ ale_linters#thrift#thriftcheck#Handle(1, [ - \ 'file.thrift:1:1: error: "py" namespace must match "^idl\\." (namespace.pattern)', - \ 'file.thrift:3:5: warning: 64-bit integer constant -2147483649 may not work in all languages (int.64bit)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_tlint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_tlint_handler.vader deleted file mode 100644 index e146346c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_tlint_handler.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - runtime ale_linters/php/tlint.vim - -After: - call ale#linter#Reset() - -Execute(The tlint handler should calculate line numbers): - AssertEqual - \ [ - \ { - \ 'lnum': '5', - \ 'col': 0, - \ 'sub_type': - \ 'style', - \ 'type': 'W', - \ 'text': ['! There should be no unused imports.', 'There should be no unused imports.', '', '', '', '', '', '', '', ''] - \ }, - \ { - \ 'lnum': '15', - \ 'col': 0, - \ 'sub_type': - \ 'style', - \ 'type': 'W', - \ 'text': ['! There should be no method visibility in test methods.', 'There should be no method visibility in test methods.', '', '', '', '', '', '', '', ''] - \ }, - \ ], - \ ale_linters#php#tlint#Handle(347, [ - \ "Lints for /Users/jose/Code/Tighten/tester/tests/Unit/ExampleTest.php", - \ "============", - \ "! There should be no unused imports.", - \ "5 : `use Illuminate\Foundation\Testing\RefreshDatabase;`", - \ "! There should be no method visibility in test methods.", - \ "15 : ` public function testBasicTest()`", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_tslint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_tslint_handler.vader deleted file mode 100644 index 32036edf..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_tslint_handler.vader +++ /dev/null @@ -1,315 +0,0 @@ -Before: - Save g:ale_typescript_tslint_ignore_empty_files - - unlet! g:ale_typescript_tslint_ignore_empty_files - unlet! b:ale_typescript_tslint_ignore_empty_files - - runtime ale_linters/typescript/tslint.vim - - call ale#test#SetDirectory('/testplugin/test/handler') - -After: - Restore - - unlet! b:ale_typescript_tslint_ignore_empty_files - unlet! b:relative_to_root - unlet! b:tempname_suffix - unlet! b:relative_tempname - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(The tslint handler should parse lines correctly): - call ale#test#SetFilename('app/test.ts') - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 15, - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.ts'), - \ 'end_lnum': 1, - \ 'type': 'E', - \ 'end_col': 15, - \ 'text': 'Missing semicolon', - \ 'code': 'semicolon', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 8, - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.ts'), - \ 'end_lnum': 3, - \ 'type': 'W', - \ 'end_col': 12, - \ 'text': 'Something else', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 8, - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/something-else.ts'), - \ 'end_lnum': 3, - \ 'type': 'W', - \ 'end_col': 12, - \ 'text': 'Something else', - \ 'code': 'something', - \ }, - \ { - \ 'lnum': 31, - \ 'col': 9, - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.ts'), - \ 'end_lnum': 31, - \ 'type': 'E', - \ 'end_col': 20, - \ 'text': 'Calls to console.log are not allowed.', - \ 'code': 'no-console', - \ }, - \ ] , - \ ale_linters#typescript#tslint#Handle(bufnr(''), [json_encode([ - \ { - \ 'endPosition': { - \ 'character': 14, - \ 'line': 0, - \ 'position': 1000 - \ }, - \ 'failure': 'Missing semicolon', - \ 'fix': { - \ 'innerLength': 0, - \ 'innerStart': 14, - \ 'innerText': ';' - \ }, - \ 'name': 'test.ts', - \ 'ruleName': 'semicolon', - \ 'ruleSeverity': 'ERROR', - \ 'startPosition': { - \ 'character': 14, - \ 'line': 0, - \ 'position': 1000 - \ } - \ }, - \ { - \ 'endPosition': { - \ 'character': 11, - \ 'line': 2, - \ 'position': 1000 - \ }, - \ 'failure': 'Something else', - \ 'fix': { - \ 'innerLength': 0, - \ 'innerStart': 14, - \ 'innerText': ';' - \ }, - \ 'name': 'test.ts', - \ 'ruleSeverity': 'WARNING', - \ 'startPosition': { - \ 'character': 7, - \ 'line': 1, - \ 'position': 1000 - \ } - \ }, - \ { - \ 'endPosition': { - \ 'character': 11, - \ 'line': 2, - \ 'position': 22 - \ }, - \ 'failure': 'Something else', - \ 'fix': { - \ 'innerLength': 0, - \ 'innerStart': 14, - \ 'innerText': ';' - \ }, - \ 'name': 'something-else.ts', - \ 'ruleName': 'something', - \ 'ruleSeverity': 'WARNING', - \ 'startPosition': { - \ 'character': 7, - \ 'line': 1, - \ 'position': 14 - \ } - \ }, - \ { - \ "endPosition": { - \ "character": 19, - \ "line": 30, - \ "position": 14590 - \ }, - \ "failure": "Calls to console.log are not allowed.", - \ 'name': 'test.ts', - \ "ruleName": "no-console", - \ "startPosition": { - \ "character": 8, - \ "line": 30, - \ "position": 14579 - \ } - \ }, - \])]) - -Execute(The tslint handler should handle empty output): - AssertEqual - \ [], - \ ale_linters#typescript#tslint#Handle(bufnr(''), []) - -Execute(The tslint handler report errors for empty files by default): - call ale#test#SetFilename('app/test.ts') - - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.ts'), - \ 'end_lnum': 2, - \ 'type': 'E', - \ 'end_col': 1, - \ 'text': 'Consecutive blank lines are forbidden', - \ 'code': 'no-consecutive-blank-lines', - \ }, - \ ], - \ ale_linters#typescript#tslint#Handle(bufnr(''), [json_encode([{ - \ 'endPosition': { - \ 'character': 0, - \ 'line': 1, - \ 'position': 1 - \ }, - \ 'failure': 'Consecutive blank lines are forbidden', - \ 'fix': [{ - \ 'innerStart': 0, - \ 'innerLength': 1, - \ 'innerText': '' - \ }], - \ 'name': 'test.ts', - \ 'ruleName': 'no-consecutive-blank-lines', - \ 'ruleSeverity': 'ERROR', - \ 'startPosition': { - \ 'character': 0, - \ 'line': 1, - \ 'position': 1 - \ } - \ }])]) - -Execute(The tslint handler should not report errors for empty files when the ignore option is on): - let b:ale_typescript_tslint_ignore_empty_files = 1 - call ale#test#SetFilename('app/test.ts') - - AssertEqual - \ [ - \ ], - \ ale_linters#typescript#tslint#Handle(bufnr(''), [json_encode([{ - \ 'endPosition': { - \ 'character': 0, - \ 'line': 1, - \ 'position': 1 - \ }, - \ 'failure': 'Consecutive blank lines are forbidden', - \ 'fix': [{ - \ 'innerStart': 0, - \ 'innerLength': 1, - \ 'innerText': '' - \ }], - \ 'name': 'test.ts', - \ 'ruleName': 'no-consecutive-blank-lines', - \ 'ruleSeverity': 'ERROR', - \ 'startPosition': { - \ 'character': 0, - \ 'line': 1, - \ 'position': 1 - \ } - \ }])]) - -Given typescript(A file with extra blank lines): - const x = 3 - - - const y = 4 - -Execute(The tslint handler should report errors when the ignore option is on, but the file is not empty): - let b:ale_typescript_tslint_ignore_empty_files = 1 - call ale#test#SetFilename('app/test.ts') - - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'filename': ale#path#Simplify(expand('%:p:h') . '/test.ts'), - \ 'end_lnum': 2, - \ 'type': 'E', - \ 'end_col': 1, - \ 'text': 'Consecutive blank lines are forbidden', - \ 'code': 'no-consecutive-blank-lines', - \ }, - \ ], - \ ale_linters#typescript#tslint#Handle(bufnr(''), [json_encode([{ - \ 'endPosition': { - \ 'character': 0, - \ 'line': 1, - \ 'position': 1 - \ }, - \ 'failure': 'Consecutive blank lines are forbidden', - \ 'fix': [{ - \ 'innerStart': 0, - \ 'innerLength': 1, - \ 'innerText': '' - \ }], - \ 'name': 'test.ts', - \ 'ruleName': 'no-consecutive-blank-lines', - \ 'ruleSeverity': 'ERROR', - \ 'startPosition': { - \ 'character': 0, - \ 'line': 1, - \ 'position': 1 - \ } - \ }])]) - -Execute(The tslint handler should not report no-implicit-dependencies errors): - call ale#test#SetFilename('app/test.ts') - - AssertEqual - \ [ - \ ], - \ ale_linters#typescript#tslint#Handle(bufnr(''), [json_encode([{ - \ 'endPosition': { - \ 'character': 0, - \ 'line': 1, - \ 'position': 1 - \ }, - \ 'failure': 'this is ignored', - \ 'name': 'test.ts', - \ 'ruleName': 'no-implicit-dependencies', - \ 'ruleSeverity': 'ERROR', - \ 'startPosition': { - \ 'character': 0, - \ 'line': 1, - \ 'position': 1 - \ }, - \ }])]) - -Execute(The tslint handler should set filename keys for temporary files): - " The temporay filename below is hacked into being a relative path so we can - " test that we resolve the temporary filename first. - let b:relative_to_root = substitute(expand('%:p'), '\v[^/\\]*([/\\])[^/\\]*', '../', 'g') - let b:tempname_suffix = substitute(tempname(), '^\v([A-Z]:)?[/\\]', '', '') - let b:relative_tempname = substitute(b:relative_to_root . b:tempname_suffix, '\\', '/', 'g') - - AssertEqual - \ [ - \ {'lnum': 47, 'col': 1, 'code': 'curly', 'end_lnum': 47, 'type': 'E', 'end_col': 26, 'text': 'if statements must be braced'}, - \ ], - \ ale_linters#typescript#tslint#Handle(bufnr(''), [json_encode([ - \ { - \ 'endPosition': { - \ 'character':25, - \ 'line':46, - \ 'position':1383, - \ }, - \ 'failure': 'if statements must be braced', - \ 'name': b:relative_tempname, - \ 'ruleName': 'curly', - \ 'ruleSeverity':'ERROR', - \ 'startPosition': { - \ 'character':0, - \ 'line':46, - \ 'position':1358, - \ } - \ }, - \ ])]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_typecheck_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_typecheck_handler.vader deleted file mode 100644 index fda55d68..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_typecheck_handler.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - runtime ale_linters/typescript/typecheck.vim - -After: - call ale#linter#Reset() - -Execute(The typecheck handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 16, - \ 'col': 7, - \ 'text': "Type 'A' is not assignable to type 'B'", - \ }, - \ { - \ 'lnum': 7, - \ 'col': 41, - \ 'text': "Property 'a' does not exist on type 'A'", - \ }, - \ ], - \ ale_linters#typescript#typecheck#Handle(347, [ - \ "somets.ts[16, 7]: Type 'A' is not assignable to type 'B'", - \ "somets.ts[7, 41]: Property 'a' does not exist on type 'A'", - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_unimport_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_unimport_handler.vader deleted file mode 100644 index 5acdcbb9..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_unimport_handler.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - runtime ale_linters/python/unimport.vim - -After: - call ale#linter#Reset() - -Execute(The unimport handler should handle import warnings): - AssertEqual - \ [ - \ { - \ 'lnum': 9, - \ 'type': 'W', - \ 'text': 'unused: urllib.parse', - \ }, - \ ], - \ ale_linters#python#unimport#Handle(1, [ - \ 'urllib.parse at path/to/file.py:9', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_v_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_v_handler.vader deleted file mode 100644 index 4d6e3d9b..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_v_handler.vader +++ /dev/null @@ -1,54 +0,0 @@ -Before: - runtime ale_linters/v/v.vim - -After: - call ale#linter#Reset() - -Execute (The v handler should correctly parse error messages): - AssertEqual - \ [{ - \ 'lnum': 4, - \ 'col': 3, - \ 'filename': ale#path#GetAbsPath(expand('%:p:h'), 'const ants.v'), - \ 'type': 'W', - \ 'end_col': 14, - \ 'text': 'const names cannot contain uppercase letters, use snake_case instead' - \ }, - \ { - \ 'lnum': 4, - \ 'col': 8, - \ 'filename': ale#path#GetAbsPath(expand('%:p:h'), 'main.v'), - \ 'type': 'W', - \ 'end_col': 10, - \ 'text': 'module "os" is imported but never used' - \ }, - \ { - \ 'lnum': 20, - \ 'col': 10, - \ 'filename': ale#path#GetAbsPath(expand('%:p:h'), 'main.v'), - \ 'type': 'E', - \ 'end_col': 18, - \ 'text': 'undefined ident: `win_widt`' - \ }], - \ ale_linters#v#v#Handler('', [ - \ './const ants.v:4:3: warning: const names cannot contain uppercase letters, use snake_case instead', - \ ' 2 |', - \ ' 3 | const (', - \ ' 4 | BUTTON_TEXT = "OK"', - \ ' | ~~~~~~~~~~~', - \ ' 5 | )', - \ './main.v:4:8: warning: module "os" is imported but never used', - \ ' 2 |', - \ ' 3 | import ui', - \ ' 4 | import os', - \ ' | ~~', - \ ' 5 |', - \ ' 6 | const (', - \ './main.v:20:10: error: undefined ident: `win_widt`', - \ ' 18 | mut app := &App{}', - \ ' 19 | app.window = ui.window({', - \ ' 20 | width: win_widt', - \ ' | ~~~~~~~~', - \ ' 21 | height: win_height', - \ ' 22 | title: "Counter"', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_vala_lint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_vala_lint_handler.vader deleted file mode 100644 index b8a4fbfa..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_vala_lint_handler.vader +++ /dev/null @@ -1,54 +0,0 @@ -Before: - runtime ale_linters/vala/vala_lint.vim - -After: - call ale#linter#Reset() - -Execute(The Vala-Lint handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 18, - \ 'col': 18, - \ 'text': 'Expected space before paren', - \ 'code': 'space-before-paren', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 64, - \ 'col': 37, - \ 'text': 'Expected space before paren', - \ 'code': 'space-before-paren', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 73, - \ 'col': 37, - \ 'text': 'Expected space before paren', - \ 'code': 'space-before-paren', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#vala#vala_lint#Handle(bufnr(''), [ - \ 'Application.vala', - \ ' 18.18 error Expected space before paren space-before-paren', - \ ' 64.37 warn Expected space before paren space-before-paren', - \ ' 73.37 error Expected space before paren space-before-paren', - \ ]) - -Execute(The Vala-Lint handler should ignore unknown error types): - AssertEqual - \ [ - \ { - \ 'lnum': 73, - \ 'col': 37, - \ 'text': 'Expected space before paren', - \ 'code': 'space-before-paren', - \ 'type': 'E', - \ }, - \ ], - \ ale_linters#vala#vala_lint#Handle(bufnr(''), [ - \ 'Application.vala', - \ ' 18.18 test Expected space before paren space-before-paren', - \ ' 73.37 error Expected space before paren space-before-paren', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_vale_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_vale_handler.vader deleted file mode 100644 index 37badb47..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_vale_handler.vader +++ /dev/null @@ -1,88 +0,0 @@ -Execute(The vale handler should handle broken JSON): - AssertEqual - \ [], - \ ale#handlers#vale#Handle(bufnr(''), ["{asdf"]) - -Execute(The vale handler should handle am empty string response): - AssertEqual - \ [], - \ ale#handlers#vale#Handle(bufnr(''), []) - -Execute(The vale handler should handle an empty result): - AssertEqual - \ [], - \ ale#handlers#vale#Handle(bufnr(''), ["{}"]) - -Execute(The vale handler should handle a normal example): - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 195, - \ 'end_col': 201, - \ 'type': 'W', - \ 'text': "Consider removing 'usually'", - \ 'code': 'vale.Hedging', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 1, - \ 'end_col': 27, - \ 'type': 'E', - \ 'text': "'Documentation' is repeated!", - \ 'code': 'vale.Repetition', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 1, - \ 'end_col': 27, - \ 'type': 'I', - \ 'text': "'Documentation' is repeated!", - \ 'code': 'vale.Repetition', - \ }, - \ ], - \ ale#handlers#vale#Handle(bufnr(''), [ - \ '{', - \ ' "/home/languitar/src/autosuspend/README.md": [', - \ ' {', - \ ' "Check": "vale.Hedging",', - \ ' "Description": "",', - \ ' "Line": 5,', - \ ' "Link": "",', - \ " \"Message\": \"Consider removing 'usually'\",", - \ ' "Severity": "warning",', - \ ' "Span": [', - \ ' 195,', - \ ' 201', - \ ' ],', - \ ' "Hide": false', - \ ' },', - \ ' {', - \ ' "Check": "vale.Repetition",', - \ ' "Description": "",', - \ ' "Line": 7,', - \ ' "Link": "",', - \ " \"Message\": \"'Documentation' is repeated!\",", - \ ' "Severity": "error",', - \ ' "Span": [', - \ ' 1,', - \ ' 27', - \ ' ],', - \ ' "Hide": false', - \ ' },', - \ ' {', - \ ' "Check": "vale.Repetition",', - \ ' "Description": "",', - \ ' "Line": 7,', - \ ' "Link": "",', - \ " \"Message\": \"'Documentation' is repeated!\",", - \ ' "Severity": "suggestion",', - \ ' "Span": [', - \ ' 1,', - \ ' 27', - \ ' ],', - \ ' "Hide": false', - \ ' }', - \ ' ]', - \ '}', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_vcom_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_vcom_handler.vader deleted file mode 100644 index 943b525a..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_vcom_handler.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - runtime ale_linters/vhdl/vcom.vim - -After: - call ale#linter#Reset() - -Execute(The vcom handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 218, - \ 'type': 'W', - \ 'text': '(vcom-1236) Shared variables must be of a protected type.' - \ }, - \ { - \ 'lnum': 73, - \ 'type': 'E', - \ 'text': '(vcom-1136) Unknown identifier "aresetn".' - \ }, - \ { - \ 'lnum': 73, - \ 'type': 'E', - \ 'text': 'Bad resolution function (STD_LOGIC) for type (error).' - \ }, - \ { - \ 'lnum': 73, - \ 'type': 'E', - \ 'text': 'near ":": (vcom-1576) expecting ";" or ")".' - \ }, - \ ], - \ ale_linters#vhdl#vcom#Handle(bufnr(''), [ - \ '** Warning: ../path/to/file.vhd(218): (vcom-1236) Shared variables must be of a protected type.', - \ '** Error: tb_file.vhd(73): (vcom-1136) Unknown identifier "aresetn".', - \ '** Error: tb_file.vhd(73): Bad resolution function (STD_LOGIC) for type (error).', - \ '** Error: tb_file.vhd(73): near ":": (vcom-1576) expecting ";" or ")".', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_verilator_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_verilator_handler.vader deleted file mode 100644 index 59ec1361..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_verilator_handler.vader +++ /dev/null @@ -1,52 +0,0 @@ -Before: - runtime ale_linters/verilog/verilator.vim - -After: - call ale#linter#Reset() - - -Execute (The verilator handler should parse legacy messages with only line numbers): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'type': 'E', - \ 'text': 'syntax error, unexpected IDENTIFIER', - \ 'filename': 'foo.v' - \ }, - \ { - \ 'lnum': 10, - \ 'type': 'W', - \ 'text': 'Blocking assignments (=) in sequential (flop or latch) block; suggest delayed assignments (<=).', - \ 'filename': 'bar.v' - \ }, - \ ], - \ ale_linters#verilog#verilator#Handle(bufnr(''), [ - \ '%Error: foo.v:3: syntax error, unexpected IDENTIFIER', - \ '%Warning-BLKSEQ: bar.v:10: Blocking assignments (=) in sequential (flop or latch) block; suggest delayed assignments (<=).', - \ ]) - - -Execute (The verilator handler should parse new format messages with line and column numbers): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'col' : 1, - \ 'type': 'E', - \ 'text': 'syntax error, unexpected endmodule, expecting ;', - \ 'filename': 'bar.v' - \ }, - \ { - \ 'lnum': 4, - \ 'col' : 6, - \ 'type': 'W', - \ 'text': 'Signal is not used: r', - \ 'filename': 'foo.v' - \ }, - \ ], - \ ale_linters#verilog#verilator#Handle(bufnr(''), [ - \ '%Error: bar.v:3:1: syntax error, unexpected endmodule, expecting ;', - \ '%Warning-UNUSED: foo.v:4:6: Signal is not used: r', - \ ]) - diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_vint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_vint_handler.vader deleted file mode 100644 index c542b4ea..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_vint_handler.vader +++ /dev/null @@ -1,65 +0,0 @@ -Before: - runtime ale_linters/vim/vint.vim - -After: - call ale#linter#Reset() - -Execute(The vint handler should parse error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'filename': 'gcc.vim', - \ 'text': 'Use scriptencoding when multibyte char exists (see :help :script encoding)', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 17, - \ 'filename': 'gcc.vim', - \ 'end_col': 18, - \ 'text': 'Use robust operators ''==#'' or ''==?'' instead of ''=='' (see Google VimScript Style Guide (Matching))', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 8, - \ 'filename': 'gcc.vim', - \ 'end_col': 15, - \ 'text': 'Make the scope explicit like ''l:filename'' (see Anti-pattern of vimrc (Scope of identifier))', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 7, - \ 'col': 8, - \ 'filename': 'gcc.vim', - \ 'end_col': 15, - \ 'text': 'Undefined variable: filename (see :help E738)', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 8, - \ 'col': 11, - \ 'filename': 'gcc.vim', - \ 'end_col': 16, - \ 'text': 'E128: Function name must start with a capital or contain a colon: foobar (see ynkdir/vim-vimlparser)', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 9, - \ 'col': 12, - \ 'filename': 'gcc.vim', - \ 'end_col': 13, - \ 'text': 'Use robust operators ''=~#'' or ''=~?'' instead of ''=~'' (see Google VimScript Style Guide (Matching))', - \ 'type': 'W', - \ }, - \ ], - \ ale_linters#vim#vint#Handle(bufnr(''), [ - \ 'gcc.vim:1:1: warning: Use scriptencoding when multibyte char exists (see :help :script encoding)', - \ 'gcc.vim:3:17: warning: Use robust operators `==#` or `==?` instead of `==` (see Google VimScript Style Guide (Matching))', - \ 'gcc.vim:3:8: style_problem: Make the scope explicit like `l:filename` (see Anti-pattern of vimrc (Scope of identifier))', - \ 'gcc.vim:7:8: warning: Undefined variable: filename (see :help E738)', - \ 'gcc.vim:8:11: error: E128: Function name must start with a capital or contain a colon: foobar (see ynkdir/vim-vimlparser)', - \ 'gcc.vim:9:12: warning: Use robust operators `=~#` or `=~?` instead of `=~` (see Google VimScript Style Guide (Matching))', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_vlog_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_vlog_handler.vader deleted file mode 100644 index 7262f63d..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_vlog_handler.vader +++ /dev/null @@ -1,47 +0,0 @@ -Before: - runtime ale_linters/verilog/vlog.vim - -After: - call ale#linter#Reset() - -Execute(The vlog handler should parse old-style lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 7, - \ 'type': 'W', - \ 'text': '(vlog-2623) Undefined variable: C.', - \ 'filename': 'add.v' - \ }, - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': '(vlog-13294) Identifier must be declared with a port mode: C.', - \ 'filename': 'file.v' - \ }, - \ ], - \ ale_linters#verilog#vlog#Handle(bufnr(''), [ - \ '** Warning: add.v(7): (vlog-2623) Undefined variable: C.', - \ '** Error: file.v(1): (vlog-13294) Identifier must be declared with a port mode: C.', - \ ]) - -Execute(The vlog handler should parse new-style lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 7, - \ 'type': 'W', - \ 'text': '(vlog-2623) Undefined variable: C.', - \ 'filename': 'add.v' - \ }, - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': '(vlog-13294) Identifier must be declared with a port mode: C.', - \ 'filename': 'file.v' - \ }, - \ ], - \ ale_linters#verilog#vlog#Handle(bufnr(''), [ - \ '** Warning: (vlog-2623) add.v(7): Undefined variable: C.', - \ '** Error: (vlog-13294) file.v(1): Identifier must be declared with a port mode: C.', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_vulture_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_vulture_handler.vader deleted file mode 100644 index b28055db..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_vulture_handler.vader +++ /dev/null @@ -1,92 +0,0 @@ -Before: - runtime ale_linters/python/vulture.vim - - call ale#test#SetDirectory('/testplugin/test/handler') - -After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - silent file something_else.py - -Execute(Basic vulture check with relative path in result should be handled): - call ale#test#SetFilename('something_else.py') - AssertEqual - \ [ - \ { - \ 'lnum': 34, - \ 'text': 'unused variable ''foo'' (60% confidence)', - \ 'type': 'W', - \ 'filename': ale#path#Simplify(g:dir . '/something_else.py'), - \ }, - \ ], - \ ale_linters#python#vulture#Handle(bufnr(''), [ - \ './something_else.py:34: unused variable ''foo'' (60% confidence)', - \ ]) - -Execute(Basic vulture check with absolute path in result should be handled): - call ale#test#SetFilename('something_else.py') - AssertEqual - \ [ - \ { - \ 'lnum': 34, - \ 'text': 'unused variable ''foo'' (60% confidence)', - \ 'type': 'W', - \ 'filename': ale#path#Simplify(g:dir . '/something_else.py'), - \ }, - \ ], - \ ale_linters#python#vulture#Handle(bufnr(''), [ - \ ale#path#Simplify(g:dir . '/something_else.py') . ':34: unused variable ''foo'' (60% confidence)', - \ ]) - -Execute(Vulture check for two files should be handled): - call ale#test#SetFilename('something_else.py') - AssertEqual - \ [ - \ { - \ 'lnum': 34, - \ 'text': 'unused variable ''foo'' (60% confidence)', - \ 'type': 'W', - \ 'filename': ale#path#Simplify(g:dir . '/something_else.py'), - \ }, - \ { - \ 'lnum': 12, - \ 'text': 'unused variable ''bar'' (60% confidence)', - \ 'type': 'W', - \ 'filename': ale#path#Simplify(g:dir . '/second_one.py'), - \ }, - \ ], - \ ale_linters#python#vulture#Handle(bufnr(''), [ - \ './something_else.py:34: unused variable ''foo'' (60% confidence)', - \ './second_one.py:12: unused variable ''bar'' (60% confidence)', - \ ]) - - -Execute(Vulture exception should be handled): - call ale#test#SetFilename('something_else.py') - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'text': 'BaddestException: Everything gone wrong (See :ALEDetail)', - \ 'detail': join([ - \ 'Traceback (most recent call last):', - \ ' File "/usr/lib/python3.6/site-packages/vulture/__init__.py", line 13, in ', - \ ' from .core import stuff', - \ 'BaddestException: Everything gone wrong', - \ ], "\n"), - \ } - \ ], - \ ale_linters#python#vulture#Handle(bufnr(''), [ - \ 'Traceback (most recent call last):', - \ ' File "/usr/lib/python3.6/site-packages/vulture/__init__.py", line 13, in ', - \ ' from .core import stuff', - \ 'BaddestException: Everything gone wrong', - \ ]) - -Execute(The vulture handler should handle empty output): - AssertEqual - \ [], - \ ale_linters#python#vulture#Handle(bufnr(''), []) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_write_good_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_write_good_handler.vader deleted file mode 100644 index 8bf4b223..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_write_good_handler.vader +++ /dev/null @@ -1,37 +0,0 @@ -Execute(The write-good handler should handle the example from the write-good README): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'end_col': 2, - \ 'type': 'W', - \ 'text': '"So" adds no meaning', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 12, - \ 'end_col': 21, - \ 'type': 'W', - \ 'text': '"was stolen" may be passive voice', - \ }, - \ { - \ 'lnum': 6, - \ 'col': 2, - \ 'end_col': 2, - \ 'type': 'W', - \ 'text': '"foo bar" bla', - \ }, - \ ], - \ ale#handlers#writegood#Handle(bufnr(''), [ - \ 'In /tmp/vBYivbZ/6/test.md', - \ '=============', - \ 'So the cat was stolen.', - \ '^^', - \ '"So" adds no meaning on line 1 at column 0', - \ '-------------', - \ 'So the cat was stolen.', - \ ' ^^^^^^^^^^', - \ '"was stolen" may be passive voice on line 1 at column 11', - \ '"foo bar" bla on line 6 at column 1', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_xmllint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_xmllint_handler.vader deleted file mode 100644 index a17d74a9..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_xmllint_handler.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - runtime ale_linters/xml/xmllint.vim - -After: - call ale#linter#Reset() - -Execute(The xmllint handler should parse error messages correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 22, - \ 'type': 'W', - \ 'text': 'warning: Unsupported version ''dummy''' - \ }, - \ { - \ 'lnum': 34, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'parser error : Start tag expected, ''<'' not found' - \ } - \ ], - \ ale_linters#xml#xmllint#Handle(1, [ - \ 'path/to/file.xml:1: warning: Unsupported version ''dummy''', - \ '', - \ ' ^', - \ '-:34: parser error : Start tag expected, ''<'' not found', - \ 'blahblah>', - \ '^' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_xvhdl_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_xvhdl_handler.vader deleted file mode 100644 index b90539b8..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_xvhdl_handler.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - runtime ale_linters/vhdl/xvhdl.vim - -After: - call ale#linter#Reset() - -Execute(The xvhdl handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 17, - \ 'type': 'E', - \ 'text': '[VRFC 10-91] aresetn is not declared ' - \ }, - \ { - \ 'lnum': 128, - \ 'type': 'E', - \ 'text': '[VRFC 10-91] m_axis_tx_tdata is not declared ' - \ }, - \ ], - \ ale_linters#vhdl#xvhdl#Handle(bufnr(''), [ - \ 'ERROR: [VRFC 10-91] aresetn is not declared [/path/to/file.vhd:17]', - \ 'ERROR: [VRFC 10-91] m_axis_tx_tdata is not declared [/home/user/tx_data.vhd:128]', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_xvlog_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_xvlog_handler.vader deleted file mode 100644 index 2e1f83fc..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_xvlog_handler.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - runtime ale_linters/verilog/xvlog.vim - -After: - call ale#linter#Reset() - -Execute(The xvlog handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'type': 'E', - \ 'text': '[VRFC 10-1412] syntax error near output ' - \ }, - \ ], - \ ale_linters#verilog#xvlog#Handle(bufnr(''), [ - \ 'ERROR: [VRFC 10-1412] syntax error near output [/path/to/file.v:5]', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_yamllint_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_yamllint_handler.vader deleted file mode 100644 index dd51119c..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_yamllint_handler.vader +++ /dev/null @@ -1,59 +0,0 @@ -Before: - Save g:ale_warn_about_trailing_whitespace - - let g:ale_warn_about_trailing_whitespace = 1 - - runtime! ale/handlers/yamllint.vim - -After: - Restore - - unlet! b:ale_warn_about_trailing_whitespace - - call ale#linter#Reset() - -Execute(Problems should be parsed correctly for yamllint): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'missing document start "---"', - \ 'code': 'document-start', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'syntax error: expected the node content, but found ''''', - \ }, - \ ], - \ ale#handlers#yamllint#Handle(bufnr(''), [ - \ 'something.yaml:1:1: [warning] missing document start "---" (document-start)', - \ 'something.yml:2:1: [error] syntax error: expected the node content, but found ''''', - \ ]) - -Execute(The yamllint handler should respect ale_warn_about_trailing_whitespace): - AssertEqual - \ [ - \ { - \ 'lnum': 5, - \ 'col': 18, - \ 'type': 'E', - \ 'text': 'trailing spaces', - \ 'code': 'trailing-spaces', - \ }, - \ ], - \ ale#handlers#yamllint#Handle(bufnr(''), [ - \ 'something.yml:5:18: [error] trailing spaces (trailing-spaces)', - \ ]) - - let b:ale_warn_about_trailing_whitespace = 0 - - AssertEqual - \ [ - \ ], - \ ale#handlers#yamllint#Handle(bufnr(''), [ - \ 'something.yml:5:18: [error] trailing spaces (trailing-spaces)', - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_yosys_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_yosys_handler.vader deleted file mode 100644 index a55d0b5b..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_yosys_handler.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - runtime ale_linters/verilog/yosys.vim - -After: - call ale#linter#Reset() - -Execute(The yosys handler should parse lines correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 3, - \ 'type': 'E', - \ 'text': 'syntax error, unexpected TOK_ID', - \ 'filename': 'file.v' - \ }, - \ { - \ 'lnum': 1, - \ 'type': 'E', - \ 'text': 'internal error', - \ }, - \ ], - \ ale_linters#verilog#yosys#Handle(bufnr(''), [ - \ '1. Executing Verilog-2005 frontend: file.v', - \ 'ERROR: internal error', - \ 'file.v:3: ERROR: syntax error, unexpected TOK_ID', - \ ]) - diff --git a/dotfiles/.vim/plugged/ale/test/handler/test_zeek_handler.vader b/dotfiles/.vim/plugged/ale/test/handler/test_zeek_handler.vader deleted file mode 100644 index 07a80d86..00000000 --- a/dotfiles/.vim/plugged/ale/test/handler/test_zeek_handler.vader +++ /dev/null @@ -1,17 +0,0 @@ -Before: - runtime ale_linters/zeek/zeek.vim - -After: - call ale#linter#Reset() - -Execute(The zeek handler should parse input correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'text': 'unknown identifier bar, at or near "bar"' - \ }, - \ ], - \ ale_linters#zeek#zeek#HandleErrors(bufnr(''), [ - \ 'error in /tmp/foo.zeek, line 2: unknown identifier bar, at or near "bar"' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/jsonnet_files/testfile.jsonnet b/dotfiles/.vim/plugged/ale/test/jsonnet_files/testfile.jsonnet deleted file mode 100644 index fc8fb78a..00000000 --- a/dotfiles/.vim/plugged/ale/test/jsonnet_files/testfile.jsonnet +++ /dev/null @@ -1 +0,0 @@ -{ foo: bar } diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ada_gcc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ada_gcc.vader deleted file mode 100644 index 906b31a4..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ada_gcc.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ada', 'gcc') - call ale#test#SetFilename('dummy.adb') - - function! GetOutputDir(command) abort - let l:split_command = split(a:command) - let l:index = index(l:split_command, '-o') - return l:split_command[l:index + 1] - endfunction - - let b:out_file = GetOutputDir(ale_linters#ada#gcc#GetCommand(bufnr(''))) - -After: - delfunction GetOutputDir - - unlet! b:out_file - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'gcc', - \ ale#Escape('gcc') . ' -x ada -c -gnatc' - \ . ' -o ' . b:out_file - \ . ' -I %s:h' - \ . ' -gnatwa -gnatq %t' - - let b:ale_ada_gcc_executable = 'foo' - - AssertLinter 'foo', - \ ale#Escape('foo') . ' -x ada -c -gnatc' - \ . ' -o ' . b:out_file - \ . ' -I %s:h' - \ . ' -gnatwa -gnatq %t' - -Execute(The options should be configurable): - let g:ale_ada_gcc_options = '--foo --bar' - - AssertLinter 'gcc', - \ ale#Escape('gcc') . ' -x ada -c -gnatc' - \ . ' -o ' . b:out_file - \ . ' -I %s:h' - \ . ' --foo --bar %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_adals.vader b/dotfiles/.vim/plugged/ale/test/linter/test_adals.vader deleted file mode 100644 index 5a04594e..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_adals.vader +++ /dev/null @@ -1,17 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ada', 'adals') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Sets adals executable): - let g:ale_ada_adals_executable = '/path/to /Ada' - AssertLinter '/path/to /Ada', ale#Escape('/path/to /Ada') - -Execute(Sets adals encoding): - let b:ale_ada_adals_encoding = 'iso-8859-1' - AssertLSPConfig {'ada.defaultCharset': 'iso-8859-1', 'ada.projectFile': 'default.gpr'} - -Execute(Sets adals project): - let g:ale_ada_adals_project = 'myproject.gpr' - AssertLSPConfig {'ada.defaultCharset': 'utf-8', 'ada.projectFile': 'myproject.gpr'} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_alex.vader b/dotfiles/.vim/plugged/ale/test/linter/test_alex.vader deleted file mode 100644 index 08a0ee10..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_alex.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('tex', 'alex') - call ale#test#SetFilename('test_file.tex') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The global executable should be used when the local one cannot be found): - AssertLinter 'alex', - \ ale#Escape('alex') . ' --stdin --text', - -Execute(Should use the node_modules/.bin executable, if available): - call ale#test#SetFilename('../test-files/alex/node-modules/test_file.tex') - - AssertLinter ale#path#Simplify(g:dir . '/../test-files/alex/node-modules/node_modules/.bin/alex'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/alex/node-modules/node_modules/.bin/alex')) - \ . ' --stdin --text', - -Execute(Should use the node_modules/alex executable, if available): - call ale#test#SetFilename('../test-files/alex/node-modules-2/test_file.tex') - - AssertLinter ale#path#Simplify(g:dir . '/../test-files/alex/node-modules-2/node_modules/alex/cli.js'), - \ (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/alex/node-modules-2/node_modules/alex/cli.js')) - \ . ' --stdin --text', - -Execute(Should let users configure a global executable and override local paths): - call ale#test#SetFilename('../test-files/write-good/node-modules-2/test_file.tex') - - let g:ale_alex_executable = '/path/to/custom/alex' - let g:ale_alex_use_global = 1 - - AssertLinter '/path/to/custom/alex', - \ ale#Escape('/path/to/custom/alex') . ' --stdin --text' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ameba.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ameba.vader deleted file mode 100644 index 7746b44f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ameba.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('crystal', 'ameba') - call ale#test#SetFilename('dummy.cr') - - let g:ale_crystal_ameba_executable = 'bin/ameba' - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to bin/ameba): - AssertLinter 'bin/ameba', ale#Escape('bin/ameba') - \ . ' --format json ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/dummy.cr')) - -Execute(Should be able to set a custom executable): - let g:ale_crystal_ameba_executable = 'ameba' - - AssertLinter 'ameba' , ale#Escape('ameba') - \ . ' --format json ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/dummy.cr')) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_angular.vader b/dotfiles/.vim/plugged/ale/test/linter/test_angular.vader deleted file mode 100644 index 2e407a00..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_angular.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('html', 'angular') - let g:paths = {} - -After: - call ale#assert#TearDownLinterTest() - unlet g:paths - -Execute(The Angular LSP connection shouldn't be created outside of Angular projects): - AssertLSPLanguage 'html' - AssertLSPConfig {} - AssertLSPProject '' - AssertLinterNotExecuted - -Execute(The default command for Angular should be correct): - call ale#test#SetFilename('../test-files/angular/test.html') - let g:paths = { - \ 'ngserver': ale#test#GetFilename('../test-files/angular/node_modules/@angular/language-server/bin/ngserver'), - \ 'service': ale#test#GetFilename('../test-files/angular/node_modules/@angular/language-service'), - \ 'typescript': ale#test#GetFilename('../test-files/angular/node_modules/typescript'), - \} - - AssertLSPLanguage 'html' - AssertLSPProject ale#test#GetFilename('../test-files/angular') - AssertLinter 'node', ale#Escape('node') . ' ' . ale#Escape(g:paths.ngserver) - \ . ' --ngProbeLocations ' . ale#Escape(g:paths.service) - \ . ' --tsProbeLocations ' . ale#Escape(g:paths.typescript) - \ . ' --stdio' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ansible_lint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ansible_lint.vader deleted file mode 100644 index 3191fa7b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ansible_lint.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ansible', 'ansible_lint') - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - unlet! b:executable - call ale#assert#TearDownLinterTest() - -Execute(The ansible_lint version <5.0.0 command callback should return default string): - GivenCommandOutput ['v4.1.2'] - AssertLinter 'ansible-lint', ale#Escape('ansible-lint') . ' --nocolor -p %t' - -Execute(The ansible_lint version >=5.0.0 command callback should return default string): - GivenCommandOutput ['v5.1.2'] - AssertLinter 'ansible-lint', ale#Escape('ansible-lint') . ' --nocolor --parseable-severity -x yaml %s' - -Execute(The ansible_lint version >=6.0.0 command callback should return default string): - GivenCommandOutput ['v6.0.2'] - AssertLinter 'ansible-lint', ale#Escape('ansible-lint') . ' --nocolor -f json -x yaml %s' - -Execute(The ansible_lint executable should be configurable): - let g:ale_ansible_ansible_lint_executable = '~/.local/bin/ansible-lint' - GivenCommandOutput ['v4.1.2'] - AssertLinter '~/.local/bin/ansible-lint', - \ ale#Escape('~/.local/bin/ansible-lint') . ' --nocolor -p %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_asciidoc_textlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_asciidoc_textlint.vader deleted file mode 100644 index a79a0ae3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_asciidoc_textlint.vader +++ /dev/null @@ -1,65 +0,0 @@ -" Author: januswel, w0rp - -Before: - " This is just one language for the linter. - call ale#assert#SetUpLinterTest('asciidoc', 'textlint') - - " The configuration is shared between many languages. - Save g:ale_textlint_executable - Save g:ale_textlint_use_global - Save g:ale_textlint_options - - let g:ale_textlint_executable = 'textlint' - let g:ale_textlint_use_global = 0 - let g:ale_textlint_options = '' - - unlet! b:ale_textlint_executable - unlet! b:ale_textlint_use_global - unlet! b:ale_textlint_options - -After: - unlet! b:command_tail - unlet! b:ale_textlint_executable - unlet! b:ale_textlint_use_global - unlet! b:ale_textlint_options - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'textlint', - \ ale#Escape('textlint') . ' -f json --stdin --stdin-filename %s' - -Execute(The executable should be configurable): - let b:ale_textlint_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -f json --stdin --stdin-filename %s' - -Execute(The options should be configurable): - let b:ale_textlint_options = '--something' - - AssertLinter 'textlint', - \ ale#Escape('textlint') . ' --something -f json --stdin --stdin-filename %s' - -Execute(The local executable from .bin should be used if available): - call ale#test#SetFilename('../test-files/textlint/with_bin_path/foo.txt') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_bin_path/node_modules/.bin/textlint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_bin_path/node_modules/.bin/textlint')) - \ . ' -f json --stdin --stdin-filename %s' - -Execute(The local executable from textlint/bin should be used if available): - call ale#test#SetFilename('../test-files/textlint/with_textlint_bin_path/foo.txt') - - if has('win32') - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#Escape('node.exe') . ' ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s' - else - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s' - endif diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_asm_gcc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_asm_gcc.vader deleted file mode 100644 index 5976b5f2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_asm_gcc.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('asm', 'gcc') - call ale#test#SetFilename('test.cpp') - let b:command_tail = ' -x assembler' - \ . ' -o ' . (has('win32') ? 'nul': '/dev/null') - \ . '-iquote %s:h' - \ . ' -Wall -' - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail - - let b:ale_asm_gcc_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_avra_avra.vader b/dotfiles/.vim/plugged/ale/test/linter/test_avra_avra.vader deleted file mode 100644 index 04722d68..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_avra_avra.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('avra', 'avra') - - let b:command_tail = ' %t -o ' . g:ale#util#nul_file - let b:command_tail_opt = ' %t --max_errors 20 -o ' . g:ale#util#nul_file - -After: - unlet! b:command_tail - unlet! b:command_tail_opt - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'avra', ale#Escape('avra') . b:command_tail, - - let b:ale_avra_avra_executable = '~/avra' - - AssertLinter '~/avra', ale#Escape('~/avra') . b:command_tail - -Execute(The options should be configurable): - let b:ale_avra_avra_options = '--max_errors 20' - - AssertLinter 'avra', ale#Escape('avra') - \ . ' %t --max_errors 20 -o ' . g:ale#util#nul_file - -Execute(The options should be used in command): - let b:ale_avra_avra_options = '--max_errors 20' - - AssertLinter 'avra', ale#Escape('avra') . b:command_tail_opt diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_bandit.vader b/dotfiles/.vim/plugged/ale/test/linter/test_bandit.vader deleted file mode 100644 index e9488c00..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_bandit.vader +++ /dev/null @@ -1,90 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'bandit') - let b:bandit_flags = ' --format custom ' - \ . '--msg-template "{line}:{test_id}:{severity}:{msg}" ' - -After: - call ale#assert#TearDownLinterTest() - unlet! b:bandit_flags - -Execute(The bandit command callback should return default string): - AssertLinter 'bandit', - \ ale#Escape('bandit') - \ . b:bandit_flags - \ . ' -' - -Execute(The bandit command callback should allow options): - let g:ale_python_bandit_options = '--configfile bandit.yaml' - - AssertLinter 'bandit', - \ ale#Escape('bandit') - \ . b:bandit_flags - \ . ' --configfile bandit.yaml -' - -Execute(The bandit executable should be configurable): - let g:ale_python_bandit_executable = '~/.local/bin/bandit' - - AssertLinter '~/.local/bin/bandit', - \ ale#Escape('~/.local/bin/bandit') - \ . b:bandit_flags - \ . ' -' - -Execute(Setting executable to 'pipenv' appends 'run bandit'): - let g:ale_python_bandit_executable = 'path/to/pipenv' - - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') - \ . ' run bandit' - \ . b:bandit_flags - \ . ' -' - -Execute(Pipenv is detected when python_bandit_auto_pipenv is set): - let g:ale_python_bandit_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinter 'pipenv', - \ ale#Escape('pipenv') - \ . ' run bandit' - \ . b:bandit_flags - \ . ' -' - -Execute(Setting executable to 'poetry' appends 'run bandit'): - let g:ale_python_bandit_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') - \ . ' run bandit' - \ . b:bandit_flags - \ . ' -' - -Execute(Poetry is detected when python_bandit_auto_poetry is set): - let g:ale_python_bandit_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinter 'poetry', - \ ale#Escape('poetry') - \ . ' run bandit' - \ . b:bandit_flags - \ . ' -' - -Execute(The bandit command callback should add .bandit by default): - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_bandit/namespace/foo/bar.py') - - let b:config_path = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_bandit/.bandit' - \) - - AssertLinter 'bandit', - \ ale#Escape('bandit') - \ . ' --ini ' . ale#Escape(b:config_path) - \ . b:bandit_flags - \ . ' -' - -Execute(The bandit command callback should support not using .bandit): - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/with_bandit/subdir/foo/bar.py') - let g:ale_python_bandit_use_config = 0 - - AssertLinter 'bandit', - \ ale#Escape('bandit') - \ . b:bandit_flags - \ . ' -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_bashate.vader b/dotfiles/.vim/plugged/ale/test/linter/test_bashate.vader deleted file mode 100644 index 714cf690..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_bashate.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('sh', 'bashate') - call ale#test#SetFilename('test.sh') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default bashate command should be correct): - AssertLinter 'bashate', ale#Escape('bashate') . ' %t' - -Execute(The bashate command should accept options): - let b:ale_sh_bashate_options = '-i E310 --max-line-length 100' - - AssertLinter 'bashate', - \ ale#Escape('bashate') . ' -i E310 --max-line-length 100 %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_bib_bibclean.vader b/dotfiles/.vim/plugged/ale/test/linter/test_bib_bibclean.vader deleted file mode 100644 index fa6f7d33..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_bib_bibclean.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('bib', 'bibclean') - - let g:ale_ruby_rubocop_executable = 'bibclean' - let g:ale_ruby_rubocop_options = '' - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to bibclean): - AssertLinter 'bibclean', ale#Escape('bibclean') - \ . ' -file-position ' - -Execute(Should be able to set a custom executable): - let g:ale_bib_bibclean_executable = 'bin/bibclean' - - AssertLinter 'bin/bibclean' , ale#Escape('bin/bibclean') - \ . ' -file-position ' - -Execute(Should not include custom options): - let g:ale_bib_bibclean_options = '-no-prettryprint' - - AssertLinter 'bibclean' , ale#Escape('bibclean') - \ . ' -file-position ' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_bicep_bicep.vader b/dotfiles/.vim/plugged/ale/test/linter/test_bicep_bicep.vader deleted file mode 100644 index a4057a72..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_bicep_bicep.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('bicep', 'bicep') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - if has('win32') - AssertLinter 'bicep', ale#Escape('bicep') . ' build --outfile NUL %s' - else - AssertLinter 'bicep', ale#Escape('bicep') . ' build --outfile /dev/null %s' - endif - -Execute(The executable should be configurable): - let g:ale_bicep_bicep_executable = 'foobar' - - if has('win32') - AssertLinter 'foobar', ale#Escape('foobar') . ' build --outfile NUL %s' - else - AssertLinter 'foobar', ale#Escape('foobar') . ' build --outfile /dev/null %s' - endif diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_bingo.vader b/dotfiles/.vim/plugged/ale/test/linter/test_bingo.vader deleted file mode 100644 index d8328414..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_bingo.vader +++ /dev/null @@ -1,74 +0,0 @@ -Before: - Save g:ale_go_go111module - - call ale#assert#SetUpLinterTest('go', 'bingo') - -After: - Restore - - if isdirectory(g:dir . '/.git') - call delete(g:dir . '/.git', 'd') - endif - - unlet! b:ale_completion_enabled - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(should set correct defaults): - AssertLinter 'bingo', ale#Escape('bingo') . ' --mode stdio' - -Execute(should configure bingo callback executable): - let b:ale_go_bingo_executable = 'boo' - let b:ale_go_bingo_options = '' - - AssertLinter 'boo', ale#Escape('boo') - -Execute(should set bingo options): - call ale#test#SetFilename('../test-files/go/go1/prj1/file.go') - " let b:ale_completion_enabled = 1 - let b:ale_go_bingo_options = '' - - AssertLinter 'bingo', - \ ale#Escape('bingo') . '' - - let b:ale_go_bingo_options = '--mode stdio --trace' - - AssertLinter 'bingo', - \ ale#Escape('bingo') . ' --mode stdio --trace' - -Execute(should support Go environment variables): - call ale#test#SetFilename('../test-files/go/go1/prj1/file.go') - let b:ale_go_go111module = 'on' - - AssertLinter 'bingo', - \ ale#Env('GO111MODULE', 'on') . ale#Escape('bingo') . ' --mode stdio' - - -Execute(Should return directory for 'go.mod' if found in parent directory): - call ale#test#SetFilename('../test-files/go/test.go') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/go') - -Execute(Should return nearest directory with '.git' if found in parent directory): - call ale#test#SetFilename('test.go') - call mkdir(g:dir . '/.git') - - AssertLSPProject g:dir - -Execute(Should ignore 'go.mod' and return '.git' dir if modules off): - call ale#test#SetFilename('../test-files/go/test.go') - - let b:ale_go_go111module = 'off' - let b:parent_dir = ale#path#Simplify(g:dir . '/..') - let b:git_dir = b:parent_dir . '/.git' - - if !isdirectory(b:git_dir) - call mkdir(b:git_dir) - endif - - AssertLSPProject b:parent_dir - - call delete(b:git_dir, 'd') - unlet! b:parent_dir - unlet! b:git_dir diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_bitbake.vader b/dotfiles/.vim/plugged/ale/test/linter/test_bitbake.vader deleted file mode 100755 index ba502aa0..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_bitbake.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('bitbake', 'oelint_adv') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'oelint-adv', ale#Escape('oelint-adv') . ' --quiet %s' - -Execute(The executable should be configurable): - let b:ale_bitbake_oelint_adv_executable = 'xyz' - - AssertLinter 'xyz', ale#Escape('xyz') . ' --quiet %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_brakeman.vader b/dotfiles/.vim/plugged/ale/test/linter/test_brakeman.vader deleted file mode 100644 index d3bf1920..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_brakeman.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ruby', 'brakeman') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The brakeman command callback should detect absence of a valid Rails app): - call ale#test#SetFilename('../test-files/ruby/not_a_rails_app/test.rb') - - AssertLinter 'brakeman', '' - -Execute(The brakeman command callback should find a valid Rails app root): - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/db/test.rb') - - AssertLinter 'brakeman', ale#Escape('brakeman') - \ . ' -f json -q -p ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/ruby/valid_rails_app')) - -Execute(The brakeman command callback should include configured options): - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/db/test.rb') - - let g:ale_ruby_brakeman_options = '--combobulate' - - AssertLinter 'brakeman', ale#Escape('brakeman') - \ . ' -f json -q --combobulate -p ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/ruby/valid_rails_app')) - -Execute(Setting bundle appends 'exec brakeman'): - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/db/test.rb') - - let g:ale_ruby_brakeman_executable = 'bundle' - let g:ale_ruby_brakeman_options = '--combobulate' - - AssertLinter 'bundle', ale#Escape('bundle') - \ . ' exec brakeman' - \ . ' -f json -q --combobulate -p ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/ruby/valid_rails_app')) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_buf_lint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_buf_lint.vader deleted file mode 100644 index 2f065adc..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_buf_lint.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('proto', 'buf_lint') - call ale#test#SetFilename('test.proto') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'buf', - \ ale#Escape('buf') - \ . ' lint' - \ . ' %s#include_package_files=true' - -Execute(The callback should include any additional config): - let b:ale_proto_buf_lint_executable = '/tmp/buf' - let b:ale_proto_buf_lint_config = '/tmp/buf.yaml' - - AssertLinter '/tmp/buf', - \ ale#Escape('/tmp/buf') - \ . ' lint' - \ . ' --config=' . ale#Escape('/tmp/buf.yaml') - \ . ' %s#include_package_files=true' - -Execute(The callback should include additional options): - let b:ale_proto_buf_lint_executable = '/tmp/buf' - let b:ale_proto_buf_lint_options = '--disable-symlinks' - - AssertLinter '/tmp/buf', - \ ale#Escape('/tmp/buf') - \ . ' lint' - \ . ' --disable-symlinks' - \ . ' %s#include_package_files=true' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_c_cc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_c_cc.vader deleted file mode 100644 index ce4bd162..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_c_cc.vader +++ /dev/null @@ -1,94 +0,0 @@ -Before: - Save g:ale_c_parse_makefile - Save g:ale_history_enabled - - let g:ale_c_parse_makefile = 0 - let g:ale_history_enabled = 0 - - let g:get_cflags_return_value = '' - let g:executable_map = {} - - runtime autoload/ale/c.vim - runtime autoload/ale/engine.vim - - function! ale#engine#IsExecutable(buffer, executable) abort - return has_key(g:executable_map, a:executable) - endfunction - - function! ale#c#GetCFlags(buffer, output) abort - return g:get_cflags_return_value - endfunction - - call ale#assert#SetUpLinterTest('c', 'cc') - - let b:command_tail = ' -S -x c' - \ . ' -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -std=c11 -Wall -' - -After: - unlet! g:get_cflags_return_value - unlet! g:executable_map - unlet! b:command_tail - - runtime autoload/ale/c.vim - runtime autoload/ale/engine.vim - - call ale#assert#TearDownLinterTest() - -Execute(clang should be used instead of gcc, if available): - let g:executable_map = {'clang': 1} - - AssertLinter 'clang', [ale#Escape('clang') . b:command_tail] - -Execute(The executable should be configurable): - AssertLinter 'gcc', [ale#Escape('gcc') . b:command_tail] - - let b:ale_c_cc_executable = 'foobar' - - AssertLinter 'foobar', [ale#Escape('foobar') . b:command_tail] - -Execute(The -std flag should be replaced by parsed C flags): - let b:command_tail = substitute(b:command_tail, 'c11', 'c99 ', '') - let g:get_cflags_return_value = '-std=c99' - - AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail - -Execute(gcc should not use -x c-header with header files by default): - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/test.h') - - AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail - -Execute(clang should use -x c-header with header files by default): - let g:executable_map = {'clang': 1} - let b:command_tail = substitute(b:command_tail, '-x c', '-x c-header', '') - - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/test.h') - - AssertLinter 'clang', ale#Escape('clang') . b:command_tail - -Execute(gcc should use -x c-header with header files if configured to do so): - let b:ale_c_cc_use_header_lang_flag = 1 - let b:command_tail = substitute(b:command_tail, '-x c', '-x c-header', '') - - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/test.h') - - AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail - -Execute(clang should not use -x c-header with header files if configured to do so): - let g:executable_map = {'clang': 1} - let b:ale_c_cc_use_header_lang_flag = 0 - - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/test.h') - - AssertLinter 'clang', ale#Escape('clang') . b:command_tail - -Execute(The header file extensions should be configurable): - let g:executable_map = {'clang': 1} - let b:command_tail = substitute(b:command_tail, '-x c', '-x c-header', '') - - call ale#assert#SetUpLinterTest('c', 'cc') - let b:ale_c_cc_header_exts = ['json'] - call ale#test#SetFilename('../test-files/c/json_project/build/compile_commands.json') - - AssertLinter 'clang', ale#Escape('clang') . b:command_tail diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_c_ccls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_c_ccls.vader deleted file mode 100644 index a4f575c6..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_c_ccls.vader +++ /dev/null @@ -1,69 +0,0 @@ -" Author: Ye Jingchen , Ben Falconer -" Description: A language server for C - -Before: - call ale#assert#SetUpLinterTest('c', 'ccls') - - Save b:ale_c_build_dir_names - Save b:ale_c_ccls_executable - Save b:ale_c_ccls_init_options - -After: - call ale#assert#TearDownLinterTest() - -Execute(The project root should be detected correctly using compile_commands.json file): - call ale#test#SetFilename(tempname() . '/dummy.c') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_compile_commands_json/dummy.c') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_compile_commands_json') - -Execute(The project root should be detected correctly using .ccls file): - call ale#test#SetFilename(tempname() . '/dummy.c') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_ccls/dummy.c') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_ccls') - -Execute(The project root should be detected correctly using .ccls-root file): - call ale#test#SetFilename(tempname() . '/dummy.c') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_ccls-root/dummy.c') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_ccls-root') - -Execute(The executable should be configurable): - AssertLinter 'ccls', ale#Escape('ccls') - - let b:ale_c_ccls_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - -Execute(The initialization options should be configurable): - AssertLSPOptions {} - - let b:ale_c_ccls_init_options = { 'cacheDirectory': '/tmp/ccls' } - - AssertLSPOptions { 'cacheDirectory': '/tmp/ccls' } - -Execute(The compile command database should be detected correctly): - call ale#test#SetFilename('../test-files/ccls/with_ccls/dummy.c') - - AssertLSPOptions {} - - call ale#test#SetFilename('../test-files/ccls/with_compile_commands_json/dummy.c') - - AssertLSPOptions { 'compilationDatabaseDirectory': - \ ale#path#Simplify(g:dir . '/../test-files/ccls/with_compile_commands_json') } - - call ale#test#SetFilename('../test-files/ccls/with_build_dir/dummy.c') - let b:ale_c_build_dir_names = ['unusual_build_dir_name'] - - AssertLSPOptions { 'compilationDatabaseDirectory': - \ ale#path#Simplify(g:dir . '/../test-files/ccls/with_build_dir/unusual_build_dir_name') } diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_c_clang_tidy.vader b/dotfiles/.vim/plugged/ale/test/linter/test_c_clang_tidy.vader deleted file mode 100644 index c4433550..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_c_clang_tidy.vader +++ /dev/null @@ -1,77 +0,0 @@ -Before: - Save g:ale_c_parse_makefile - let g:ale_c_parse_makefile = 0 - - call ale#assert#SetUpLinterTest('c', 'clangtidy') - call ale#test#SetFilename('test.c') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The clangtidy command default should be correct): - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') . ' %s' - -Execute(You should be able to remove the -checks option for clang-tidy): - let b:ale_c_clangtidy_checks = [] - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') . ' %s' - -Execute(You should be able to set other checks for clang-tidy): - let b:ale_c_clangtidy_checks = ['-*', 'clang-analyzer-*'] - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('-*,clang-analyzer-*') . ' %s' - -Execute(You should be able to manually set compiler flags for clang-tidy): - let b:ale_c_clangtidy_checks = ['*'] - let b:ale_c_clangtidy_options = '-Wall' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall' - -Execute(You should be able to manually set flags for clang-tidy): - let b:ale_c_clangtidy_extra_options = '-config=' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') . ' ' . ale#Escape('-config=') . ' %s' - -Execute(The build directory should be configurable): - let b:ale_c_clangtidy_checks = ['*'] - let b:ale_c_build_dir = '/foo/bar' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar') - -Execute(The build directory setting should override the options): - let b:ale_c_clangtidy_checks = ['*'] - let b:ale_c_build_dir = '/foo/bar' - let b:ale_c_clangtidy_options = '-Wall' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar') - -Execute(The build directory should be used for header files): - call ale#test#SetFilename('test.h') - - let b:ale_c_clangtidy_checks = ['*'] - let b:ale_c_build_dir = '/foo/bar' - let b:ale_c_clangtidy_options = '-Wall' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar') - -Execute(The executable should be configurable): - let b:ale_c_clangtidy_checks = ['*'] - let b:ale_c_clangtidy_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -checks=' . ale#Escape('*') . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_c_clangd.vader b/dotfiles/.vim/plugged/ale/test/linter/test_c_clangd.vader deleted file mode 100644 index b7a4e029..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_c_clangd.vader +++ /dev/null @@ -1,47 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('c', 'clangd') - - Save b:ale_c_clangd_options - Save b:ale_c_build_dir - Save b:ale_c_build_dir_names - Save b:ale_c_parse_compile_commands - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'c' - -Execute(The default executable should be correct): - AssertLinter 'clangd', ale#Escape('clangd') - -Execute(The project root should be detected correctly): - call ale#test#SetFilename(tempname() . '/dummy.c') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/clangd/with_compile_commands/dummy.c') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/clangd/with_compile_commands') - -Execute(The executable should be configurable): - let g:ale_c_clangd_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - -Execute(The options should be configurable): - let b:ale_c_clangd_options = '-compile-commands-dir=foo' - - AssertLinter 'clangd', ale#Escape('clangd') . ' ' . b:ale_c_clangd_options - -Execute(The compile command database should be detected correctly): - call ale#test#SetFilename('../test-files/clangd/with_build_dir/dummy_src/dummy.c') - - let b:ale_c_clangd_options = '' - let b:ale_c_build_dir = '' - let b:ale_c_build_dir_names = ['unusual_build_dir_name'] - let b:ale_c_parse_compile_commands = 1 - - AssertLinter 'clangd', ale#Escape('clangd') - \ . ' -compile-commands-dir=' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/clangd/with_build_dir/unusual_build_dir_name')) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_c_cppcheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_c_cppcheck.vader deleted file mode 100644 index 0cc3a5d3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_c_cppcheck.vader +++ /dev/null @@ -1,63 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('c', 'cppcheck') - let b:command_tail = ' -q --language=c --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') . ' --enable=style -I' . ale#Escape(ale#path#Simplify(g:dir)) .' %t' - -After: - unlet! b:rel_file_path - unlet! b:command_tail - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'cppcheck', ale#Escape('cppcheck') . b:command_tail - - let b:ale_c_cppcheck_executable = 'foobar' - - AssertLinterCwd '' - AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail - -Execute(cppcheck for C should detect compile_commands.json files): - let b:rel_file_path = '../test-files/cppcheck/one/foo.c' - call ale#test#SetFilename(b:rel_file_path) - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/one') - AssertLinter 'cppcheck', ale#Escape('cppcheck') - \ . ' -q --language=c' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' --project=' . ale#Escape('compile_commands.json') - \ . ' --file-filter=' . ale#Escape(ale#test#GetFilename(b:rel_file_path)) - \ . ' --enable=style %t' - -Execute(cppcheck for C should detect compile_commands.json files in build directories): - let b:rel_file_path = '../test-files/cppcheck/with_build_dir/foo.c' - call ale#test#SetFilename(b:rel_file_path) - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/with_build_dir') - AssertLinter 'cppcheck', ale#Escape('cppcheck') - \ . ' -q --language=c' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' --project=' . ale#Escape(ale#path#Simplify('build/compile_commands.json')) - \ . ' --file-filter=' . ale#Escape(ale#test#GetFilename(b:rel_file_path)) - \ . ' --enable=style %t' - -Execute(cppcheck for C should include file dir if compile_commands.json file is not found): - call ale#test#SetFilename('../test-files/cppcheck/foo.c') - - AssertLinter 'cppcheck', - \ ale#Escape('cppcheck') - \ . ' -q --language=c' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' --enable=style' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/cppcheck')) - \ . ' %t' - -Execute(cppcheck for C header should include file dir and not use compile_commands.json): - call ale#test#SetFilename('../test-files/cppcheck/one/foo.h') - - AssertLinter 'cppcheck', - \ ale#Escape('cppcheck') - \ . ' -q --language=c' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/cppcheck/one')) - \ . ' --suppress=unusedStructMember' - \ . ' --enable=style' - \ . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_c_cquery.vader b/dotfiles/.vim/plugged/ale/test/linter/test_c_cquery.vader deleted file mode 100644 index bca0dbbc..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_c_cquery.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('c', 'cquery') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The project root should be detected correctly using compile_commands.json file): - call ale#test#SetFilename(tempname() . '/dummy.c') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/cquery/dummy.c') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/cquery') - -Execute(The project root should be detected correctly using .cquery file): - call ale#test#SetFilename(tempname() . '/dummy.c') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/cquery/with_cquery/dummy.c') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/cquery/with_cquery') - -Execute(The executable should be configurable): - AssertLinter 'cquery', ale#Escape('cquery') - - let b:ale_c_cquery_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - -Execute(The cache directory should be configurable): - AssertLSPOptions {'cacheDirectory': expand('$HOME/.cache/cquery')} - - let b:ale_c_cquery_cache_directory = '/foo/bar' - - AssertLSPOptions {'cacheDirectory': '/foo/bar'} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_c_flawfinder.vader b/dotfiles/.vim/plugged/ale/test/linter/test_c_flawfinder.vader deleted file mode 100644 index 38385e2b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_c_flawfinder.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('c', 'flawfinder') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The flawfinder command should be correct): - AssertLinter 'flawfinder', ale#Escape('flawfinder') . ' -CDQS --minlevel=1 %t' - -Execute(The minlevel of flawfinder should be configurable): - let b:ale_c_flawfinder_minlevel = 8 - - AssertLinter 'flawfinder', ale#Escape('flawfinder') . ' -CDQS --minlevel=8 %t' - -Execute(Additional flawfinder options should be configurable): - let b:ale_c_flawfinder_options = '--foobar' - - AssertLinter 'flawfinder', - \ ale#Escape('flawfinder') . ' -CDQS --foobar --minlevel=1 %t' - -Execute(The flawfinder exectable should be configurable): - let b:ale_c_flawfinder_executable = 'foo/bar' - - AssertLinter 'foo/bar', ale#Escape('foo/bar') . ' -CDQS --minlevel=1 %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_c_import_paths.vader b/dotfiles/.vim/plugged/ale/test/linter/test_c_import_paths.vader deleted file mode 100644 index 19e39915..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_c_import_paths.vader +++ /dev/null @@ -1,162 +0,0 @@ -Before: - " Make sure the c.vim file is loaded first. - call ale#c#FindProjectRoot(bufnr('')) - - Save g:ale_c_parse_compile_commands - Save g:ale_c_parse_makefile - Save g:__ale_c_project_filenames - - let g:original_project_filenames = g:__ale_c_project_filenames - let g:executable_map = {} - - " Remove the .git/HEAD dir for C import paths for these tests. - " The tests run inside of a git repo. - let g:__ale_c_project_filenames = filter( - \ copy(g:__ale_c_project_filenames), - \ 'v:val isnot# ''.git/HEAD''' - \) - - let g:ale_c_parse_compile_commands = 0 - let g:ale_c_parse_makefile = 0 - - runtime autoload/ale/engine.vim - - function! ale#engine#IsExecutable(buffer, executable) abort - return has_key(g:executable_map, a:executable) - endfunction - -After: - Restore - - unlet! g:original_project_filenames - unlet! g:executable_map - - runtime autoload/ale/engine.vim - - call ale#assert#TearDownLinterTest() - -Execute(The C cc linter should include 'include' directories for projects with a Makefile): - call ale#assert#SetUpLinterTest('c', 'cc') - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/file.c') - let g:ale_c_cc_options = '' - - AssertLinter 'gcc', - \ ale#Escape('gcc') - \ . ' -S -x c -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/makefile_project/include')) - \ . ' -' - -Execute(The C cc linter should include 'include' directories for projects with a configure file): - call ale#assert#SetUpLinterTest('c', 'cc') - call ale#test#SetFilename('../test-files/c/configure_project/subdir/file.c') - let g:ale_c_cc_options = '' - - AssertLinter 'gcc', - \ ale#Escape('gcc') - \ . ' -S -x c -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/configure_project/include')) - \ . ' -' - -Execute(The C cc linter should include root directories for projects with .h files in them): - call ale#assert#SetUpLinterTest('c', 'cc') - call ale#test#SetFilename('../test-files/c/h_file_project/subdir/file.c') - let g:ale_c_cc_options = '' - - AssertLinter 'gcc', - \ ale#Escape('gcc') - \ . ' -S -x c -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/h_file_project')) - \ . ' -' - -Execute(The C cc linter should include root directories for projects with .hpp files in them): - call ale#assert#SetUpLinterTest('c', 'cc') - call ale#test#SetFilename('../test-files/c/hpp_file_project/subdir/file.c') - let g:ale_c_cc_options = '' - - AssertLinter 'gcc', - \ ale#Escape('gcc') - \ . ' -S -x c -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/hpp_file_project')) - \ . ' -' - -Execute(The C ClangTidy handler should include 'include' directories for projects with a Makefile): - call ale#assert#SetUpLinterTest('c', 'clangtidy') - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/file.cpp') - let g:ale_c_clangtidy_options = '' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' %s ' - \ . '-- -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/makefile_project/include')) - -Execute(The C++ cc linter should include 'include' directories for projects with a Makefile): - call ale#assert#SetUpLinterTest('cpp', 'cc') - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/file.cpp') - let g:ale_cpp_cc_options = '' - - AssertLinter 'gcc', - \ ale#Escape('gcc') - \ . ' -S -x c++ -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/makefile_project/include')) - \ . ' -' - -Execute(The C++ cc linter should include 'include' directories for projects with a configure file): - call ale#assert#SetUpLinterTest('cpp', 'cc') - call ale#test#SetFilename('../test-files/c/configure_project/subdir/file.cpp') - let g:ale_cpp_cc_options = '' - - AssertLinter 'gcc', - \ ale#Escape('gcc') - \ . ' -S -x c++ -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/configure_project/include')) - \ . ' -' - -Execute(The C++ cc linter should include root directories for projects with .h files in them): - call ale#assert#SetUpLinterTest('cpp', 'cc') - call ale#test#SetFilename('../test-files/c/h_file_project/subdir/file.cpp') - let g:ale_cpp_cc_options = '' - - AssertLinter 'gcc', - \ ale#Escape('gcc') - \ . ' -S -x c++ -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/h_file_project')) - \ . ' -' - -Execute(The C++ cc linter should include root directories for projects with .hpp files in them): - call ale#assert#SetUpLinterTest('cpp', 'cc') - call ale#test#SetFilename('../test-files/c/hpp_file_project/subdir/file.cpp') - let g:ale_cpp_cc_options = '' - - AssertLinter 'gcc', - \ ale#Escape('gcc') - \ . ' -S -x c++ -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/hpp_file_project')) - \ . ' -' - -Execute(The C++ ClangTidy handler should include json folders for projects with suitable build directory in them): - call ale#assert#SetUpLinterTest('cpp', 'clangtidy') - call ale#test#SetFilename('../test-files/c/json_project/subdir/file.cpp') - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' %s ' - \ . '-p ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/json_project/build')) - -Execute(The C++ ClangTidy handler should include 'include' directories for projects with a Makefile): - call ale#assert#SetUpLinterTest('cpp', 'clangtidy') - call ale#test#SetFilename('../test-files/c/makefile_project/subdir/file.cpp') - let g:ale_cpp_clangtidy_options = '' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' %s ' - \ . '-- -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/c/makefile_project/include')) - diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cargo.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cargo.vader deleted file mode 100644 index 25dd0253..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cargo.vader +++ /dev/null @@ -1,222 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('rust', 'cargo') - call ale#test#SetFilename('../test-files/cargo/test.rs') - - let g:cd = 'cd ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/cargo')) . ' && ' - let g:suffix = ' --frozen --message-format=json -q' - let g:ale_rust_cargo_avoid_whole_workspace = 0 - - " Test with version 0.22.0 by default. - GivenCommandOutput ['cargo 0.22.0 (3423351a5 2017-10-06)'] - -After: - call ale#assert#TearDownLinterTest() - - unlet! g:cd - unlet! g:suffix - -Execute(The linter should not be executed when there's no Cargo.toml file): - call ale#test#SetFilename('../foo.rs') - AssertLinterNotExecuted - -Execute(The linter should be executed when there is a Cargo.toml file): - GivenCommandOutput [] - AssertLinter 'cargo', 'cargo build --frozen --message-format=json -q' - -Execute(`cargo check` should be used when the version is new enough): - GivenCommandOutput ['cargo 0.17.0 (3423351a5 2017-10-06)'] - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo check' . g:suffix, - \] - - " We should cache the version check - GivenCommandOutput [] - AssertLinter 'cargo', ['cargo check' . g:suffix] - -Execute(`cargo build` should be used when cargo is too old): - GivenCommandOutput ['cargo 0.16.0 (3423351a5 2017-10-06)'] - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo build' . g:suffix, - \] - - GivenCommandOutput [] - AssertLinter 'cargo', ['cargo build' . g:suffix] - -Execute(`cargo build` should be used when g:ale_rust_cargo_use_check is set to 0): - let g:ale_rust_cargo_use_check = 0 - - GivenCommandOutput ['cargo 0.24.0 (3423351a5 2017-10-06)'] - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo build' . g:suffix, - \] - - " We should cache the version check - GivenCommandOutput [] - AssertLinter 'cargo', ['cargo build' . g:suffix] - -Execute(`cargo check` should be used when the version is new enough): - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo check' . g:suffix, - \] - - " We should cache the version check - GivenCommandOutput [] - AssertLinter 'cargo', ['cargo check' . g:suffix] - -Execute(--all-targets should be used when g:ale_rust_cargo_check_all_targets is set to 1): - let g:ale_rust_cargo_check_all_targets = 1 - - AssertLinter 'cargo', [ale#Escape('cargo') . ' --version', 'cargo check --all-targets' . g:suffix] - " We should cache the version check - AssertLinter 'cargo', ['cargo check --all-targets' . g:suffix] - -Execute(--tests should be used when g:ale_rust_cargo_check_tests is set to 1): - let g:ale_rust_cargo_check_tests = 1 - - AssertLinter 'cargo', [ale#Escape('cargo') . ' --version', 'cargo check --tests' . g:suffix] - - " We should cache the version check - GivenCommandOutput [] - AssertLinter 'cargo', ['cargo check --tests' . g:suffix] - -Execute(--examples should be used when g:ale_rust_cargo_check_examples is set to 1): - let g:ale_rust_cargo_check_examples = 1 - - AssertLinter 'cargo', [ale#Escape('cargo') . ' --version', 'cargo check --examples' . g:suffix] - - " We should cache the version check - GivenCommandOutput [] - AssertLinter 'cargo', ['cargo check --examples' . g:suffix] - -Execute(--no-default-features should be used when g:ale_rust_cargo_default_feature_behavior is none): - let b:ale_rust_cargo_default_feature_behavior = 'none' - - AssertLinter 'cargo', [ale#Escape('cargo') . ' --version', 'cargo check --frozen --message-format=json -q --no-default-features'] - -Execute(g:ale_rust_cargo_include_features added when g:ale_rust_cargo_default_feature_behavior is none): - let b:ale_rust_cargo_default_feature_behavior = 'none' - let b:ale_rust_cargo_include_features = 'foo bar' - - AssertLinter 'cargo', [ale#Escape('cargo') . ' --version', 'cargo check --frozen --message-format=json -q --no-default-features --features ' . ale#Escape('foo bar')] - -Execute(g:ale_rust_cargo_include_features added and escaped): - let b:ale_rust_cargo_default_feature_behavior = 'default' - let b:ale_rust_cargo_include_features = "foo bar baz" - - AssertLinter 'cargo', [ale#Escape('cargo') . ' --version', 'cargo check --frozen --message-format=json -q --features ' . ale#Escape('foo bar baz')] - -Execute(--all-features should be used when g:ale_rust_cargo_default_feature_behavior is all): - let b:ale_rust_cargo_default_feature_behavior = 'all' - " When all features are enabled we should ignore extra features to add - " since it won't do anything - let b:ale_rust_cargo_include_features = 'foo bar' - - GivenCommandOutput ['cargo 0.22.0 (3423351a5 2017-10-06)'] - AssertLinter 'cargo', [ale#Escape('cargo') . ' --version', 'cargo check --frozen --message-format=json -q --all-features'] - -Execute(Cargo should run from the crate directory when set to avoid the workspace): - let g:ale_rust_cargo_avoid_whole_workspace = 1 - call ale#test#SetFilename('../test-files/cargo/workspace_paths/subpath/test.rs') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cargo/workspace_paths/subpath') - call ale#semver#ResetVersionCache() - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo check --frozen --message-format=json -q', - \] - -Execute(Cargo should not run from the crate directory when not set to avoid the workspace): - let g:ale_rust_cargo_avoid_whole_workspace = 0 - call ale#test#SetFilename('../test-files/cargo/workspace_paths/subpath/test.rs') - - AssertLinterCwd '' - call ale#semver#ResetVersionCache() - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo check --frozen --message-format=json -q', - \] - -Execute(When ale_rust_cargo_use_clippy is set, cargo-clippy is used as linter): - let b:ale_rust_cargo_use_clippy = 1 - - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo clippy --frozen --message-format=json -q', - \] - -Execute(When ale_rust_cargo_clippy_options is set, cargo-clippy appends it to commandline): - let b:ale_rust_cargo_use_clippy = 1 - let b:ale_rust_cargo_clippy_options = '-- -D warnings' - - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo clippy --frozen --message-format=json -q -- -D warnings', - \] - -Execute(Clippy options work without prepending --): - let b:ale_rust_cargo_use_clippy = 1 - let b:ale_rust_cargo_clippy_options = '-D warnings' - - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo clippy --frozen --message-format=json -q -- -D warnings', - \] - -Execute(Build supports all cargo flags): - let g:ale_rust_cargo_use_check = 0 - let g:ale_rust_cargo_check_all_targets = 1 - let g:ale_rust_cargo_check_tests = 1 - let g:ale_rust_cargo_check_examples = 1 - let b:ale_rust_cargo_default_feature_behavior = 'all' - let b:ale_rust_cargo_target_dir = 'target/ale' - - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo build --all-targets --examples --tests --target-dir ' . ale#Escape('target/ale') . ' --frozen --message-format=json -q --all-features', - \] - -Execute(Clippy supports all cargo flags): - let b:ale_rust_cargo_use_clippy = 1 - let g:ale_rust_cargo_check_all_targets = 1 - let g:ale_rust_cargo_check_tests = 1 - let g:ale_rust_cargo_check_examples = 1 - let b:ale_rust_cargo_default_feature_behavior = 'all' - let b:ale_rust_cargo_clippy_options = '-D warnings' - let b:ale_rust_cargo_target_dir = 'target/ale' - - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo clippy --all-targets --examples --tests --target-dir ' . ale#Escape('target/ale') . ' --frozen --message-format=json -q --all-features -- -D warnings', - \] - -Execute(cargo-check does not refer ale_rust_cargo_clippy_options): - let b:ale_rust_cargo_use_clippy = 0 - let b:ale_rust_cargo_use_check = 1 - let b:ale_rust_cargo_clippy_options = '-- -D warnings' - - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo check --frozen --message-format=json -q', - \] - -Execute(`cargo --target-dir` should be used when the version is new enough and it is set): - let b:ale_rust_cargo_target_dir = 'target/ale' - - GivenCommandOutput ['cargo 0.17.0 (3423351a5 2017-10-06)'] - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo check --target-dir ' . ale#Escape('target/ale') . g:suffix, - \] - -Execute(`cargo --target-dir` should not be used when the version is not new enough and it is set): - let b:ale_rust_cargo_target_dir = 'target/ale' - - GivenCommandOutput ['cargo 0.16.0 (3423351a5 2017-10-06)'] - AssertLinter 'cargo', [ - \ ale#Escape('cargo') . ' --version', - \ 'cargo build' . g:suffix, - \] diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_checkov.vader b/dotfiles/.vim/plugged/ale/test/linter/test_checkov.vader deleted file mode 100644 index f93d34f3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_checkov.vader +++ /dev/null @@ -1,14 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('terraform', 'checkov') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be direct): - AssertLinter 'checkov', - \ ale#Escape('checkov') . ' -f %t -o json --quiet ' - -Execute(It should be possible to override the default command): - let b:ale_terraform_checkov_executable = '/bin/other/checkov' - AssertLinter '/bin/other/checkov', - \ ale#Escape('/bin/other/checkov') . ' -f %t -o json --quiet ' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_checkstyle.vader b/dotfiles/.vim/plugged/ale/test/linter/test_checkstyle.vader deleted file mode 100644 index 8197e6b5..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_checkstyle.vader +++ /dev/null @@ -1,72 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('java', 'checkstyle') - call ale#test#SetFilename('dummy.java') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The checkstyle callback should return the correct default value): - AssertLinter 'checkstyle', - \ ale#Escape('checkstyle') - \ . ' -c ' . ale#Escape('/google_checks.xml') - \ . ' %s' - -Execute(The checkstyle executable should be configurable): - let b:ale_java_checkstyle_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') - \ . ' -c ' . ale#Escape('/google_checks.xml') - \ . ' %s' - -Execute(Custom options should be supported): - let b:ale_java_checkstyle_options = '--foobar -cp -classpath /path/to/checkstyle-8.7-all.jar' - - AssertLinter 'checkstyle', - \ ale#Escape('checkstyle') - \ . ' --foobar -cp -classpath /path/to/checkstyle-8.7-all.jar' - \ . ' -c ' . ale#Escape('/google_checks.xml') - \ . ' %s' - -Execute(configuration files set in _config should be supported): - let b:ale_java_checkstyle_config = ale#path#Simplify(g:dir . '/../test-files/checkstyle/other_config.xml') - - AssertLinter 'checkstyle', - \ ale#Escape('checkstyle') - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/checkstyle/other_config.xml')) - \ . ' %s' - -Execute(configuration files set in _options should be preferred over _config): - let b:ale_java_checkstyle_config = '/foo.xml' - let b:ale_java_checkstyle_options = '-c /bar.xml' - - AssertLinter 'checkstyle', ale#Escape('checkstyle') . ' -c /bar.xml %s' - - let b:ale_java_checkstyle_options = '-x -c /bar.xml' - - AssertLinter 'checkstyle', ale#Escape('checkstyle') . ' -x -c /bar.xml %s' - -Execute(google_checks.xml should be used by default): - call ale#test#SetFilename('../test-files/checkstyle/test.java') - - AssertLinter 'checkstyle', - \ ale#Escape('checkstyle') - \ . ' -c ' . ale#Escape('/google_checks.xml') - \ . ' %s' - -Execute(Other relative paths should be supported): - let b:ale_java_checkstyle_config = '../test-files/checkstyle/other_config.xml' - - AssertLinter 'checkstyle', - \ ale#Escape('checkstyle') - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/checkstyle/other_config.xml')) - \ . ' %s' - - call ale#test#SetFilename('../test-files/checkstyle/test.java') - - let b:ale_java_checkstyle_config = 'other_config.xml' - - AssertLinter 'checkstyle', - \ ale#Escape('checkstyle') - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/checkstyle/other_config.xml')) - \ . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_circleci.vader b/dotfiles/.vim/plugged/ale/test/linter/test_circleci.vader deleted file mode 100644 index 000a77ec..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_circleci.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('yaml', 'circleci') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The linter should not run for every YAML file): - AssertLinterNotExecuted - -Execute(The linter should for YAML files in a .circleci directory): - call ale#test#SetFilename('../test-files/.circleci/config.yml') - - AssertLinter 'circleci', 'circleci --skip-update-check config validate - < %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_clang_tidy.vader b/dotfiles/.vim/plugged/ale/test/linter/test_clang_tidy.vader deleted file mode 100644 index eb1220be..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_clang_tidy.vader +++ /dev/null @@ -1,84 +0,0 @@ -Before: - Save g:ale_c_parse_makefile - let g:ale_c_parse_makefile = 0 - - call ale#assert#SetUpLinterTest('cpp', 'clangtidy') - call ale#test#SetFilename('test.cpp') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The clangtidy command default should be correct): - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') . ' %s' - -Execute(You should be able to remove the -checks option for clang-tidy): - let b:ale_cpp_clangtidy_checks = [] - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') . ' %s' - -Execute(You should be able to set other checks for clang-tidy): - let b:ale_cpp_clangtidy_checks = ['-*', 'clang-analyzer-*'] - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('-*,clang-analyzer-*') . ' %s' - -Execute(You should be able to manually set compiler flags for clang-tidy): - let b:ale_cpp_clangtidy_checks = ['*'] - let b:ale_cpp_clangtidy_options = '-Wall' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') . ' -checks=' . ale#Escape('*') . ' %s -- -Wall' - -Execute(You should be able to manually set flags for clang-tidy): - let b:ale_cpp_clangtidy_extra_options = '-config=' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') . ' ' . ale#Escape('-config=') . ' %s' - -Execute(The build directory should be configurable): - let b:ale_cpp_clangtidy_checks = ['*'] - let b:ale_c_build_dir = '/foo/bar' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar') - -Execute(The build directory setting should override the options): - let b:ale_cpp_clangtidy_checks = ['*'] - let b:ale_c_build_dir = '/foo/bar' - let b:ale_cpp_clangtidy_options = '-Wall' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar') - -Execute(The build directory should be used for header files): - call ale#test#SetFilename('test.h') - - let b:ale_cpp_clangtidy_checks = ['*'] - let b:ale_c_build_dir = '/foo/bar' - let b:ale_cpp_clangtidy_options = '-Wall' - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar') - - call ale#test#SetFilename('test.hpp') - - AssertLinter 'clang-tidy', - \ ale#Escape('clang-tidy') - \ . ' -checks=' . ale#Escape('*') . ' %s' - \ . ' -p ' . ale#Escape('/foo/bar') - -Execute(The executable should be configurable): - let b:ale_cpp_clangtidy_checks = ['*'] - let b:ale_cpp_clangtidy_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -checks=' . ale#Escape('*') . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_clj_kondo.vader b/dotfiles/.vim/plugged/ale/test/linter/test_clj_kondo.vader deleted file mode 100644 index e62211c4..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_clj_kondo.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('clojure', 'clj_kondo') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'clj-kondo', 'clj-kondo' - \ . ' --cache --lint - --filename %s' - -Execute(Extra options should be supported): - let g:ale_clojure_clj_kondo_options = '--config ./clj-kondo/config.edn' - - AssertLinter 'clj-kondo', 'clj-kondo' - \ . ' --config ./clj-kondo/config.edn --lint - --filename %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cmake_cmake_lint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cmake_cmake_lint.vader deleted file mode 100644 index 6cf09149..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cmake_cmake_lint.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cmake', 'cmake_lint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'cmake-lint', ale#Escape('cmake-lint') . ' %t' - -Execute(The executable should be configurable): - let g:ale_cmake_cmake_lint_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cookstyle.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cookstyle.vader deleted file mode 100644 index ad7391cc..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cookstyle.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('chef', 'cookstyle') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'cookstyle', ale#Escape('cookstyle') . ' --force-exclusion --format json --stdin %s' - -Execute(The executable path should be configurable): - let b:ale_chef_cookstyle_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --force-exclusion --format json --stdin %s' - -Execute(The linter options should be configurable): - let b:ale_chef_cookstyle_options = '--parallel' - - AssertLinter 'cookstyle', ale#Escape('cookstyle') . ' --parallel --force-exclusion --format json --stdin %s' - diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cc.vader deleted file mode 100644 index e6794c09..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cc.vader +++ /dev/null @@ -1,94 +0,0 @@ -Before: - Save g:ale_c_parse_makefile - Save g:ale_history_enabled - - let g:ale_c_parse_makefile = 0 - let g:ale_history_enabled = 0 - - let g:get_cflags_return_value = '' - let g:executable_map = {} - - runtime autoload/ale/c.vim - runtime autoload/ale/engine.vim - - function! ale#engine#IsExecutable(buffer, executable) abort - return has_key(g:executable_map, a:executable) - endfunction - - function! ale#c#GetCFlags(buffer, output) abort - return g:get_cflags_return_value - endfunction - - call ale#assert#SetUpLinterTest('cpp', 'cc') - - let b:command_tail = ' -S -x c++' - \ . ' -o ' . (has('win32') ? 'nul': '/dev/null') - \ . ' -iquote %s:h' - \ . ' -std=c++14 -Wall -' - -After: - unlet! g:get_cflags_return_value - unlet! g:executable_map - unlet! b:command_tail - - runtime autoload/ale/c.vim - runtime autoload/ale/engine.vim - - call ale#assert#TearDownLinterTest() - -Execute(clang++ should be used instead of gcc, if available): - let g:executable_map = {'clang++': 1} - - AssertLinter 'clang++', [ale#Escape('clang++') . b:command_tail] - -Execute(The executable should be configurable): - AssertLinter 'gcc', [ale#Escape('gcc') . b:command_tail] - - let b:ale_cpp_cc_executable = 'foobar' - - AssertLinter 'foobar', [ale#Escape('foobar') . b:command_tail] - -Execute(The -std flag should be replaced by parsed C flags): - let b:command_tail = substitute(b:command_tail, 'c++14', 'c++11 ', '') - let g:get_cflags_return_value = '-std=c++11' - - AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail - -Execute(gcc should not use -x c++-header with header files by default): - call ale#test#SetFilename('../test-files/c/hpp_file_project/test.hpp') - - AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail - -Execute(clang++ should use -x c++-header with header files by default): - let g:executable_map = {'clang++': 1} - let b:command_tail = substitute(b:command_tail, '-x c++', '-x c++-header', '') - - call ale#test#SetFilename('../test-files/c/hpp_file_project/test.hpp') - - AssertLinter 'clang++', ale#Escape('clang++') . b:command_tail - -Execute(gcc should use -x c-header with header files if configured to do so): - let b:ale_cpp_cc_use_header_lang_flag = 1 - let b:command_tail = substitute(b:command_tail, '-x c++', '-x c++-header', '') - - call ale#test#SetFilename('../test-files/c/hpp_file_project/test.hpp') - - AssertLinter 'gcc', ale#Escape('gcc') . b:command_tail - -Execute(clang should not use -x c-header with header files if configured to do so): - let g:executable_map = {'clang++': 1} - let b:ale_cpp_cc_use_header_lang_flag = 0 - - call ale#test#SetFilename('../test-files/c/hpp_file_project/test.hpp') - - AssertLinter 'clang++', ale#Escape('clang++') . b:command_tail - -Execute(The header file extensions should be configurable): - let g:executable_map = {'clang++': 1} - let b:command_tail = substitute(b:command_tail, '-x c++', '-x c++-header', '') - - call ale#assert#SetUpLinterTest('cpp', 'cc') - let b:ale_cpp_cc_header_exts = ['json'] - call ale#test#SetFilename('../test-files/c/json_project/build/compile_commands.json') - - AssertLinter 'clang++', ale#Escape('clang++') . b:command_tail diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_ccls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cpp_ccls.vader deleted file mode 100644 index 12aa30e3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_ccls.vader +++ /dev/null @@ -1,69 +0,0 @@ -" Author: Ye Jingchen , Ben Falconer -" Description: A language server for C++ - -Before: - call ale#assert#SetUpLinterTest('cpp', 'ccls') - - Save b:ale_c_build_dir_names - Save b:ale_cpp_ccls_executable - Save b:ale_cpp_ccls_init_options - -After: - call ale#assert#TearDownLinterTest() - -Execute(The project root should be detected correctly using compile_commands.json file): - call ale#test#SetFilename(tempname() . '/dummy.cpp') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_compile_commands_json/dummy.cpp') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_compile_commands_json') - -Execute(The project root should be detected correctly using .ccls file): - call ale#test#SetFilename(tempname() . '/dummy.cpp') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_ccls/dummy.cpp') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_ccls') - -Execute(The project root should be detected correctly using .ccls-root file): - call ale#test#SetFilename(tempname() . '/dummy.cpp') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_ccls-root/dummy.cpp') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_ccls-root') - -Execute(The executable should be configurable): - AssertLinter 'ccls', ale#Escape('ccls') - - let b:ale_cpp_ccls_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - -Execute(The initialization options should be configurable): - AssertLSPOptions {} - - let b:ale_cpp_ccls_init_options = { 'cacheDirectory': '/tmp/ccls' } - - AssertLSPOptions { 'cacheDirectory': '/tmp/ccls' } - -Execute(The compile command database should be detected correctly): - call ale#test#SetFilename('../test-files/ccls/with_ccls/dummy.c') - - AssertLSPOptions {} - - call ale#test#SetFilename('../test-files/ccls/with_compile_commands_json/dummy.c') - - AssertLSPOptions { 'compilationDatabaseDirectory': - \ ale#path#Simplify(g:dir . '/../test-files/ccls/with_compile_commands_json') } - - call ale#test#SetFilename('../test-files/ccls/with_build_dir/dummy.c') - let b:ale_c_build_dir_names = ['unusual_build_dir_name'] - - AssertLSPOptions { 'compilationDatabaseDirectory': - \ ale#path#Simplify(g:dir . '/../test-files/ccls/with_build_dir/unusual_build_dir_name') } diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_clangcheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cpp_clangcheck.vader deleted file mode 100644 index 188141d5..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_clangcheck.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cpp', 'clangcheck') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'clang-check', - \ ale#Escape('clang-check') - \ . ' -analyze %s --extra-arg=-Xclang --extra-arg=-analyzer-output=text --extra-arg=-fno-color-diagnostics' - - let b:ale_cpp_clangcheck_executable = 'foobar' - - " The extra arguments in the command are used to prevent .plist files from - " being generated. - AssertLinter 'foobar', - \ ale#Escape('foobar') - \ . ' -analyze %s --extra-arg=-Xclang --extra-arg=-analyzer-output=text --extra-arg=-fno-color-diagnostics' - -Execute(The options should be configurable): - let b:ale_cpp_clangcheck_options = '--something' - - AssertLinter 'clang-check', - \ ale#Escape('clang-check') - \ . ' -analyze %s' - \ . ' --extra-arg=-Xclang --extra-arg=-analyzer-output=text --extra-arg=-fno-color-diagnostics' - \ . ' --something' - -Execute(The build directory should be used when set): - let b:ale_cpp_clangcheck_options = '--something' - let b:ale_c_build_dir = '/foo/bar' - - AssertLinter 'clang-check', - \ ale#Escape('clang-check') - \ . ' -analyze %s --something -p ' . ale#Escape('/foo/bar') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_clazy.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cpp_clazy.vader deleted file mode 100644 index e5a81b8f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_clazy.vader +++ /dev/null @@ -1,56 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cpp', 'clazy') - call ale#test#SetFilename('test.cpp') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The clazy command default should be correct): - AssertLinter 'clazy-standalone', - \ ale#Escape('clazy-standalone') . ' -checks=' . ale#Escape('level1') . ' %s' - -Execute(You should be able to remove the -checks option for clazy-standalone): - let b:ale_cpp_clazy_checks = [] - - AssertLinter 'clazy-standalone', ale#Escape('clazy-standalone') . ' %s' - -Execute(You should be able to set other checks for clazy-standalone): - let b:ale_cpp_clazy_checks = ['level2', 'level3'] - - AssertLinter 'clazy-standalone', - \ ale#Escape('clazy-standalone') - \ . ' -checks=' . ale#Escape('level2,level3') . ' %s' - -Execute(You should be able to manually set compiler flags for clazy-standalone): - let b:ale_cpp_clazy_options = '-qt4-compat' - - AssertLinter 'clazy-standalone', - \ ale#Escape('clazy-standalone') . ' -checks=' . ale#Escape('level1') . ' -qt4-compat' . ' %s' - \ -Execute(The build directory should be configurable): - let b:ale_c_build_dir = '/foo/bar' - - AssertLinter 'clazy-standalone', - \ ale#Escape('clazy-standalone') - \ . ' -checks=' . ale#Escape('level1') . ' -p ' . ale#Escape('/foo/bar') . ' %s' - -Execute(The build directory should be used for header files): - call ale#test#SetFilename('test.h') - - let b:ale_c_build_dir = '/foo/bar' - - AssertLinter 'clazy-standalone', - \ ale#Escape('clazy-standalone') - \ . ' -checks=' . ale#Escape('level1') . ' -p ' . ale#Escape('/foo/bar') . ' %s' - - call ale#test#SetFilename('test.hpp') - - AssertLinter 'clazy-standalone', - \ ale#Escape('clazy-standalone') - \ . ' -checks=' . ale#Escape('level1') . ' -p ' . ale#Escape('/foo/bar') . ' %s' - -Execute(The executable should be configurable): - let b:ale_cpp_clazy_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -checks=' . ale#Escape('level1') . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cppcheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cppcheck.vader deleted file mode 100644 index 880bcb41..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cppcheck.vader +++ /dev/null @@ -1,83 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cpp', 'cppcheck') - let b:command_tail = ' -q --language=c++ --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') . ' --enable=style -I' . ale#Escape(ale#path#Simplify(g:dir)) .' %t' - -After: - " Remove a test file we might open for some tests. - if &buftype != 'nofile' - set nomodified - set buftype=nofile - endif - - unlet! b:rel_file_path - unlet! b:command_tail - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'cppcheck', ale#Escape('cppcheck') . b:command_tail - - let b:ale_cpp_cppcheck_executable = 'foobar' - - AssertLinterCwd '' - AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail - -Execute(cppcheck for C++ should detect compile_commands.json files): - let b:rel_file_path = '../test-files/cppcheck/one/foo.cpp' - call ale#test#SetFilename(b:rel_file_path) - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/one') - AssertLinter 'cppcheck', ale#Escape('cppcheck') - \ . ' -q --language=c++' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' --project=' . ale#Escape('compile_commands.json') - \ . ' --file-filter=' . ale#Escape(ale#test#GetFilename(b:rel_file_path)) - \ . ' --enable=style %t' - -Execute(cppcheck for C++ should detect compile_commands.json files in build directories): - let b:rel_file_path = '../test-files/cppcheck/with_build_dir/foo.cpp' - call ale#test#SetFilename(b:rel_file_path) - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/with_build_dir') - AssertLinter 'cppcheck', ale#Escape('cppcheck') - \ . ' -q --language=c++' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' --project=' . ale#Escape(ale#path#Simplify('build/compile_commands.json')) - \ . ' --file-filter=' . ale#Escape(ale#test#GetFilename(b:rel_file_path)) - \ . ' --enable=style %t' - -Execute(cppcheck for C++ should include file dir if compile_commands.json file is not found): - call ale#test#SetFilename('../test-files/cppcheck/foo.cpp') - - AssertLinter 'cppcheck', - \ ale#Escape('cppcheck') - \ . ' -q --language=c++' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' --enable=style' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/cppcheck')) - \ . ' %t' - -Execute(cppcheck for C++ header should include file dir and not use compile_commands.json): - call ale#test#SetFilename('../test-files/cppcheck/one/foo.hpp') - - AssertLinter 'cppcheck', - \ ale#Escape('cppcheck') - \ . ' -q --language=c++' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/cppcheck/one')) - \ . ' --suppress=unusedStructMember' - \ . ' --enable=style' - \ . ' %t' - -Execute(cppcheck for C++ should ignore compile_commands.json file if buffer is modified): - call ale#test#SetFilename('../test-files/cppcheck/one/foo.cpp') - - set buftype= - set modified - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/cppcheck/one') - AssertLinter 'cppcheck', ale#Escape('cppcheck') - \ . ' -q --language=c++' - \ . ' --template=' . ale#Escape('{file}:{line}:{column}: {severity}:{inconclusive:inconclusive:} {message} [{id}]\\n{code}') - \ . ' --enable=style' - \ . ' -I' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/cppcheck/one')) - \ . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cquery.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cquery.vader deleted file mode 100644 index f638e401..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_cquery.vader +++ /dev/null @@ -1,40 +0,0 @@ -" Author: Ben Falconer -" Description: A language server for C++ - -Before: - call ale#assert#SetUpLinterTest('cpp', 'cquery') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The project root should be detected correctly using compile_commands.json file): - call ale#test#SetFilename(tempname() . '/dummy.cpp') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/cquery/dummy.cpp') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/cquery') - -Execute(The project root should be detected correctly using .cquery file): - call ale#test#SetFilename(tempname() . '/dummy.cpp') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/cquery/with_cquery/dummy.cpp') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/cquery/with_cquery') - -Execute(The executable should be configurable): - AssertLinter 'cquery', ale#Escape('cquery') - - let b:ale_cpp_cquery_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - -Execute(The cache directory should be configurable): - AssertLSPOptions {'cacheDirectory': expand('$HOME/.cache/cquery')} - - let b:ale_cpp_cquery_cache_directory = '/foo/bar' - - AssertLSPOptions {'cacheDirectory': '/foo/bar'} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_flawfinder.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cpp_flawfinder.vader deleted file mode 100644 index 3f4067ea..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cpp_flawfinder.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cpp', 'flawfinder') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The flawfinder command should be correct): - AssertLinter 'flawfinder', - \ ale#Escape('flawfinder') . ' -CDQS --minlevel=1 %t' - -Execute(The minlevel of flawfinder should be configurable): - let b:ale_cpp_flawfinder_minlevel = 8 - - AssertLinter 'flawfinder', - \ ale#Escape('flawfinder') . ' -CDQS --minlevel=8 %t' - -Execute(Additional flawfinder options should be configurable): - let b:ale_cpp_flawfinder_options = ' --foobar' - - AssertLinter 'flawfinder', - \ ale#Escape('flawfinder') . ' -CDQS --foobar --minlevel=1 %t' - -Execute(The flawfinder exectable should be configurable): - let b:ale_cpp_flawfinder_executable = 'foo/bar' - - AssertLinter 'foo/bar', ale#Escape('foo/bar') . ' -CDQS --minlevel=1 %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cpplint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cpplint.vader deleted file mode 100644 index d5fd457b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cpplint.vader +++ /dev/null @@ -1,17 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cpp', 'cpplint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'cpplint', ale#Escape('cpplint') . ' %s' - - let b:ale_cpp_cpplint_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' %s' - -Execute(The options should be configurable): - let b:ale_cpp_cpplint_options = '--something' - - AssertLinter 'cpplint', ale#Escape('cpplint') . ' --something %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cs_csc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cs_csc.vader deleted file mode 100644 index 28d0304a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cs_csc.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cs', 'csc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The csc linter should return the correct default command): - AssertLinterCwd expand('%:p:h') - AssertLinter 'csc', 'csc /unsafe /out:TEMP /t:module /recurse:' . ale#Escape('*.cs') - -Execute(The options should be be used in the command): - let g:ale_cs_csc_options = '' - - AssertLinter 'csc', 'csc /unsafe /out:TEMP /t:module /recurse:' . ale#Escape('*.cs') - -Execute(The souce path should be be used in the command): - let g:ale_cs_csc_source = '../foo/bar' - - AssertLinterCwd '../foo/bar' - AssertLinter 'csc', 'csc /unsafe /out:TEMP /t:module /recurse:' . ale#Escape('*.cs') - -Execute(The list of search pathes for assemblies should be be used in the command if not empty): - let g:ale_cs_csc_assembly_path = ['/usr/lib/mono', '../foo/bar'] - - AssertLinter 'csc', 'csc /unsafe' - \ . ' /lib:' . ale#Escape('/usr/lib/mono') . ',' . ale#Escape('../foo/bar') - \ . ' /out:TEMP /t:module /recurse:' . ale#Escape('*.cs') - - let g:ale_cs_csc_assembly_path = [] - - AssertLinter 'csc', 'csc /unsafe /out:TEMP /t:module /recurse:' . ale#Escape('*.cs') - -Execute(The list of assemblies should be be used in the command if not empty): - let g:ale_cs_csc_assemblies = ['foo.dll', 'bar.dll'] - - AssertLinter 'csc', 'csc /unsafe' - \ . ' /r:' . ale#Escape('foo.dll') . ',' . ale#Escape('bar.dll') - \ . ' /out:TEMP /t:module /recurse:' . ale#Escape('*.cs') - - let g:ale_cs_csc_assemblies = [] - - AssertLinter 'csc', 'csc /unsafe /out:TEMP /t:module /recurse:' . ale#Escape('*.cs') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cs_mcs.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cs_mcs.vader deleted file mode 100644 index dbebd106..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cs_mcs.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cs', 'mcs') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'mcs', 'mcs -unsafe --parse %t' - -Execute(The options should be be used in the command): - let b:ale_cs_mcs_options = '-pkg:dotnet' - - AssertLinter 'mcs', 'mcs -unsafe --parse -pkg:dotnet %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cs_mcsc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cs_mcsc.vader deleted file mode 100644 index e784cf15..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cs_mcsc.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cs', 'mcsc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The mcsc linter should return the correct default command): - AssertLinterCwd expand('%:p:h') - AssertLinter 'mcs', 'mcs -unsafe -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') - -Execute(The options should be be used in the command): - let g:ale_cs_mcsc_options = '-pkg:dotnet' - - AssertLinter 'mcs', 'mcs -unsafe -pkg:dotnet -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') - -Execute(The souce path should be be used in the command): - let g:ale_cs_mcsc_source = '../foo/bar' - - AssertLinterCwd '../foo/bar' - AssertLinter 'mcs', 'mcs -unsafe -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') - -Execute(The list of search pathes for assemblies should be be used in the command if not empty): - let g:ale_cs_mcsc_assembly_path = ['/usr/lib/mono', '../foo/bar'] - - AssertLinter 'mcs', 'mcs -unsafe' - \ . ' -lib:' . ale#Escape('/usr/lib/mono') . ',' . ale#Escape('../foo/bar') - \ . ' -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') - - let g:ale_cs_mcsc_assembly_path = [] - - AssertLinter 'mcs', 'mcs -unsafe -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') - -Execute(The list of assemblies should be be used in the command if not empty): - let g:ale_cs_mcsc_assemblies = ['foo.dll', 'bar.dll'] - - AssertLinter 'mcs', 'mcs -unsafe' - \ . ' -r:' . ale#Escape('foo.dll') . ',' . ale#Escape('bar.dll') - \ . ' -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') - - let g:ale_cs_mcsc_assemblies = [] - - AssertLinter 'mcs', 'mcs -unsafe -out:TEMP -t:module -recurse:' . ale#Escape('*.cs') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cspell.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cspell.vader deleted file mode 100644 index 0302edc5..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cspell.vader +++ /dev/null @@ -1,71 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('tex', 'cspell') - - " We have to manually do our own variable reset because SetUpLinterTest calls - " ale#assert#ResetVariables, which specifically only resets variables that - " begin with ale__, per https://github.com/dense-analysis/ale/blob/76c2293e68a6cad3b192062743d25b8daa082205/autoload/ale/assert.vim#L256 - " - " Took a lot of debugging and reading both junegunn/vader.vim and most ALE - " files to find this behavior - - Save g:ale_cspell_executable - Save g:ale_cspell_use_global - Save g:ale_cspell_options - - unlet! g:ale_cspell_executable - unlet! g:ale_cspell_use_global - unlet! g:ale_cspell_options - - let g:ale_cspell_executable = 'cspell' - let g:ale_cspell_use_global = 0 - let g:ale_cspell_options = '' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The global executable should be used when the local one cannot be found): - AssertLinter - \ 'cspell', - \ ale#Escape('cspell') - \ . ' lint --no-color --no-progress --no-summary -- stdin' - -Execute(Should use the node_modules/.bin executable if available): - call ale#test#SetFilename('../test-files/cspell/node-modules/test.tex') - - AssertLinter - \ ale#path#Simplify(g:dir - \ . '/../test-files/cspell/node-modules/node_modules/.bin/cspell'), - \ ale#Escape(ale#path#Simplify(g:dir - \ . '/../test-files/cspell/node-modules/node_modules/.bin/cspell')) - \ . ' lint --no-color --no-progress --no-summary -- stdin' - -Execute(Should use the node_modules/cspell executable if available): - call ale#test#SetFilename('../test-files/cspell/node-modules-2/test.tex') - - AssertLinter - \ ale#path#Simplify(g:dir - \ . '/../test-files/cspell/node-modules-2/node_modules/cspell/bin.js'), - \ (has('win32') ? 'node.exe ': '') - \ . ale#Escape(ale#path#Simplify(g:dir - \ . '/../test-files/cspell/node-modules-2/node_modules/cspell/bin.js')) - \ . ' lint --no-color --no-progress --no-summary -- stdin' - -Execute(Should let users configure a global executable and override local paths): - let g:ale_cspell_executable = '/path/to/custom/cspell' - let g:ale_cspell_use_global = 1 - - AssertLinter - \ '/path/to/custom/cspell', - \ ale#Escape('/path/to/custom/cspell') - \ . ' lint --no-color --no-progress --no-summary -- stdin' - -Execute(Additional cspell options should be configurable): - call ale#test#SetFilename('../test-files/dummy') - - let g:ale_cspell_options = '--foobar' - - AssertLinter - \ 'cspell', - \ ale#Escape('cspell') - \ . ' lint --no-color --no-progress --no-summary --foobar -- stdin' - diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cucumber.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cucumber.vader deleted file mode 100644 index 6a7851ef..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cucumber.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cucumber', 'cucumber') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Should require the nearest features dir, if one is found): - call ale#test#SetFilename('../test-files/cucumber/features/cuke.feature') - - AssertLinter 'cucumber', - \ 'cucumber --dry-run --quiet --strict --format=json ' - \ . '-r ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/cucumber/features/')) . ' %t' - -Execute(Should require nothing if no features dir is found): - call ale#test#SetFilename('something/without/a/features/dir') - - AssertLinter 'cucumber', - \ 'cucumber --dry-run --quiet --strict --format=json %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cuda_nvcc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cuda_nvcc.vader deleted file mode 100644 index 4578d052..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cuda_nvcc.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cuda', 'nvcc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'nvcc', - \ ale#Escape('nvcc') . ' -cuda -std=c++11 %s -o ' . g:ale#util#nul_file - - let b:ale_cuda_nvcc_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -cuda -std=c++11 %s -o ' . g:ale#util#nul_file - -Execute(The options should be configurable): - let g:ale_cuda_nvcc_options = '--foobar' - - AssertLinter 'nvcc', - \ ale#Escape('nvcc') . ' -cuda --foobar %s -o ' . g:ale#util#nul_file diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_cypher_cypher_lint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_cypher_cypher_lint.vader deleted file mode 100644 index 6b64dc1f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_cypher_cypher_lint.vader +++ /dev/null @@ -1,8 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cypher', 'cypher_lint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command and executable should be correct): - AssertLinter 'cypher-lint', 'cypher-lint' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_d_dls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_d_dls.vader deleted file mode 100644 index 156ebf66..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_d_dls.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('d', 'dls') - - Save &filetype - let &filetype = 'd' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'd' - -Execute(The default executable should be correct): - AssertLinter 'dls', 'dls' - -Execute(The executable should be configurable): - let g:ale_d_dls_executable = 'foobar' - - AssertLinter 'foobar', 'foobar' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_dart_analysis_server.vader b/dotfiles/.vim/plugged/ale/test/linter/test_dart_analysis_server.vader deleted file mode 100644 index 1754109a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_dart_analysis_server.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('dart', 'analysis_server') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'dart', ale#Escape('dart') - \ . ' ./snapshots/analysis_server.dart.snapshot --lsp' - -Execute(The executable should be configurable): - let g:ale_dart_analysis_server_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - \ . ' ./snapshots/analysis_server.dart.snapshot --lsp' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_dart_language_server.vader b/dotfiles/.vim/plugged/ale/test/linter/test_dart_language_server.vader deleted file mode 100644 index 5567f271..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_dart_language_server.vader +++ /dev/null @@ -1,8 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('dart', 'language_server') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'dart_language_server', ale#Escape('dart_language_server') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_desktop_file_validate.vader b/dotfiles/.vim/plugged/ale/test/linter/test_desktop_file_validate.vader deleted file mode 100644 index 4a49057b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_desktop_file_validate.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('desktop', 'desktop_file_validate') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'desktop-file-validate', - \ ale#Escape('desktop-file-validate') . ' %t' - -Execute(Extra options should work): - let b:ale_desktop_desktop_file_validate_options = '--warn-kde' - - AssertLinter 'desktop-file-validate', - \ ale#Escape('desktop-file-validate') . ' --warn-kde %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_dialyxir.vader b/dotfiles/.vim/plugged/ale/test/linter/test_dialyxir.vader deleted file mode 100644 index 250ffefd..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_dialyxir.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('elixir', 'dialyxir') - call ale#test#SetFilename('../test-files/elixir/mix_project/lib/app.ex') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Builds dialyxir command with a normal project): - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elixir/mix_project') - AssertLinter 'mix', 'mix help dialyzer && mix dialyzer' - -Execute(Builds dialyxir command with an umbrella project): - call ale#test#SetFilename('../test-files/elixir/umbrella_project/apps/mix_project/lib/app.ex') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elixir/umbrella_project') - AssertLinter 'mix', 'mix help dialyzer && mix dialyzer' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_dmd_commandline.vader b/dotfiles/.vim/plugged/ale/test/linter/test_dmd_commandline.vader deleted file mode 100644 index 609fc073..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_dmd_commandline.vader +++ /dev/null @@ -1,96 +0,0 @@ -Before: - runtime ale_linters/d/dmd.vim - -After: - call ale#linter#Reset() - -Execute(DMD command line should be correct with imports): - AssertEqual - \ 'dmd ' . - \ '-I' . ale#Escape('source') . ' ' . - \ '-I' . ale#Escape('/prefix/include/d') . ' ' . - \ '-I' . ale#Escape('/home/user/.dub/packages/pkg-0.0.1/pkg/src') . ' ' . - \ ' ' . - \ ' ' . - \ ' ' . - \ '-o- -wi -vcolumns -c %t', - \ ale_linters#d#dmd#DMDCommand(bufnr(''), [ - \ 'source', - \ '/prefix/include/d', - \ '/home/user/.dub/packages/pkg-0.0.1/pkg/src', - \ '', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], {}) - -Execute(DMD command line should be correct with imports and version): - AssertEqual - \ 'dmd ' . - \ '-I' . ale#Escape('source') . ' ' . - \ '-I' . ale#Escape('/prefix/include/d') . ' ' . - \ '-I' . ale#Escape('/home/user/.dub/packages/pkg-0.0.1/pkg/src') . ' ' . - \ ' ' . - \ '-version=' . ale#Escape('SOME_VERSION') . ' ' . - \ ' ' . - \ '-o- -wi -vcolumns -c %t', - \ ale_linters#d#dmd#DMDCommand(bufnr(''), [ - \ 'source', - \ '/prefix/include/d', - \ '/home/user/.dub/packages/pkg-0.0.1/pkg/src', - \ '', - \ '', - \ '', - \ 'SOME_VERSION', - \ '', - \ '', - \ ], {}) - -Execute(DMD command line should be correct): - AssertEqual - \ 'dmd ' . - \ '-I' . ale#Escape('source') . ' ' . - \ '-I' . ale#Escape('/prefix/include/d') . ' ' . - \ '-I' . ale#Escape('/home/user/.dub/packages/pkg-0.0.1/pkg/src') . ' ' . - \ '-J' . ale#Escape('views') . ' ' . - \ '-version=' . ale#Escape('SOME_VERSION') . ' ' . - \ '-version=' . ale#Escape('SOME_OTHER_VERSION') . ' ' . - \ '-debug=' . ale#Escape('SomeFeature') . ' ' . - \ '-o- -wi -vcolumns -c %t', - \ ale_linters#d#dmd#DMDCommand(bufnr(''), [ - \ 'source', - \ '/prefix/include/d', - \ '/home/user/.dub/packages/pkg-0.0.1/pkg/src', - \ '', - \ 'views', - \ '', - \ 'SOME_VERSION', - \ 'SOME_OTHER_VERSION', - \ '', - \ 'SomeFeature', - \ ], {}) - -Execute(DMD command line should be correct with CR): - " on windows, the function is called with carriage return - AssertEqual - \ 'dmd ' . - \ '-I' . ale#Escape('source') . ' ' . - \ '-I' . ale#Escape('C:\prefix\include\d') . ' ' . - \ '-I' . ale#Escape('C:\Users\user\AppData\Local\Dub\packages\pkg-0.0.1\pkg\src') . ' ' . - \ ' ' . - \ ' ' . - \ ' ' . - \ '-o- -wi -vcolumns -c %t', - \ ale_linters#d#dmd#DMDCommand(bufnr(''), [ - \ "source\r", - \ "C:\\prefix\\include\\d\r", - \ "C:\\Users\\user\\AppData\\Local\\Dub\\packages\\pkg-0.0.1\\pkg\\src\r", - \ "\r", - \ "\r", - \ "\r", - \ "\r", - \ "\r", - \ "\r", - \ ], {}) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_dockerfile_lint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_dockerfile_lint.vader deleted file mode 100644 index abc32e0d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_dockerfile_lint.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('dockerfile', 'dockerfile_lint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'dockerfile_lint', ale#Escape('dockerfile_lint') . ' -p -j -f %t' - -Execute(The executable should be configurable): - let b:ale_dockerfile_dockerfile_lint_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' -p -j -f %t' - -Execute(The options should be configurable): - let b:ale_dockerfile_dockerfile_lint_options = '-r additional.yaml' - - AssertLinter 'dockerfile_lint', ale#Escape('dockerfile_lint') . ' -r additional.yaml -p -j -f %t' - diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_dogma.vader b/dotfiles/.vim/plugged/ale/test/linter/test_dogma.vader deleted file mode 100644 index c8b599af..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_dogma.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('elixir', 'dogma') - call ale#test#SetFilename('../test-files/elixir/mix_project/lib/app.ex') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Builds dogma command with a normal project): - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elixir/mix_project') - AssertLinter 'mix', 'mix help dogma && mix dogma %s --format=flycheck' - -Execute(Builds dogma command with an umbrella project): - call ale#test#SetFilename('../test-files/elixir/umbrella_project/apps/mix_project/lib/app.ex') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elixir/umbrella_project') - AssertLinter 'mix', 'mix help dogma && mix dogma %s --format=flycheck' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_eclipselsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_eclipselsp.vader deleted file mode 100644 index 6bbc4053..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_eclipselsp.vader +++ /dev/null @@ -1,111 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('java', 'eclipselsp') - call ale#test#SetFilename('dummy.java') - - let b:ale_java_eclipselsp_path = '/home/user/eclipse.dst.ls' - - let b:cfg = ale#path#Simplify(g:dir . '/../config_linux') - - if has('win32') - let b:cfg = ale#path#Simplify(g:dir . '/../config_win') - elseif has('macunix') - let b:cfg = ale#path#Simplify(g:dir . '/../config_mac') - endif - -After: - unlet! b:ale_java_eclipselsp_path - unlet! b:cfg - - call ale#assert#TearDownLinterTest() - -Execute(VersionCheck should return correct version): - - " OpenJDK Java 1.8 - AssertEqual [1, 8, 0], ale_linters#java#eclipselsp#VersionCheck([ - \ 'openjdk version "1.8.0_191"', - \ 'OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.18.04.1-b12)', - \ 'OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)' - \]) - - " OpenJDK Java 10 - AssertEqual [10, 0, 2], ale_linters#java#eclipselsp#VersionCheck([ - \ 'openjdk version "10.0.2" 2018-07-17', - \ 'OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4)', - \ 'OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.4, mixed mode)' - \]) - - " Oracle Java 1.8 - AssertEqual [1, 8, 0], ale_linters#java#eclipselsp#VersionCheck([ - \ 'java version "1.8.0_161"', - \ 'Java(TM) SE Runtime Environment (build 1.8.0_161-b12)', - \ 'Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)' - \]) - - " Oracle Java 10 - AssertEqual [10, 0, 1], ale_linters#java#eclipselsp#VersionCheck([ - \ 'java version "10.0.1" 2018-04-17', - \ 'Java(TM) SE Runtime Environment 18.3 (build 10.0.1+10)', - \ 'Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.1+10, mixed mode)' - \]) - - AssertEqual [], ale_linters#java#eclipselsp#VersionCheck(['x']) - - AssertEqual [], ale_linters#java#eclipselsp#VersionCheck([]) - -Execute(The eclipselsp callback should return the correct default value): - let cmd = [ ale#Escape('java'), - \ '', - \ '-Declipse.application=org.eclipse.jdt.ls.core.id1', - \ '-Dosgi.bundles.defaultStartLevel=4', - \ '-Declipse.product=org.eclipse.jdt.ls.core.product', - \ '-Dlog.level=ALL', - \ '-noverify', - \ '-Xmx1G', - \ '-jar', - \ ale#Escape(''), - \ '-configuration', - \ ale#Escape(b:cfg), - \ '-data', - \ ale#Escape(ale#path#Simplify('')) - \] - AssertLinter 'java', join(cmd, ' ') - -Execute(The eclipselsp callback should allow custom executable): - let b:ale_java_eclipselsp_executable='/bin/foobar' - let cmd = [ ale#Escape('/bin/foobar'), - \ '', - \ '-Declipse.application=org.eclipse.jdt.ls.core.id1', - \ '-Dosgi.bundles.defaultStartLevel=4', - \ '-Declipse.product=org.eclipse.jdt.ls.core.product', - \ '-Dlog.level=ALL', - \ '-noverify', - \ '-Xmx1G', - \ '-jar', - \ ale#Escape(''), - \ '-configuration', - \ ale#Escape(b:cfg), - \ '-data', - \ ale#Escape(ale#path#Simplify('')) - \] - AssertLinter '/bin/foobar', join(cmd, ' ') - -Execute(The eclipselsp callback should allow custom configuration path and javaagent): - let b:ale_java_eclipselsp_config_path = '/home/config' - let b:ale_java_eclipselsp_javaagent = '/home/lombok.jar /home/lombok2.jar' - let cmd = [ ale#Escape('java'), - \ ale#Escape('-javaagent:/home/lombok.jar'), - \ ale#Escape('-javaagent:/home/lombok2.jar'), - \ '-Declipse.application=org.eclipse.jdt.ls.core.id1', - \ '-Dosgi.bundles.defaultStartLevel=4', - \ '-Declipse.product=org.eclipse.jdt.ls.core.product', - \ '-Dlog.level=ALL', - \ '-noverify', - \ '-Xmx1G', - \ '-jar', - \ ale#Escape(''), - \ '-configuration', - \ ale#Escape(ale#path#Simplify('/home/config')), - \ '-data', - \ ale#Escape(ale#path#Simplify('')) - \] - AssertLinter 'java', join(cmd, ' ') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_elixir_credo.vader b/dotfiles/.vim/plugged/ale/test/linter/test_elixir_credo.vader deleted file mode 100644 index 9c639c57..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_elixir_credo.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('elixir', 'credo') - call ale#test#SetFilename('../test-files/elixir/mix_project/lib/app.ex') - - -After: - unlet! g:ale_elixir_credo_strict - - call ale#assert#TearDownLinterTest() - -Execute(Builds credo command with normal project): - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elixir/mix_project') - AssertLinter 'mix', - \ 'mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s' - -Execute(Builds credo command with umbrella project): - call ale#test#SetFilename('../test-files/elixir/umbrella_project/apps/mix_project/lib/app.ex') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elixir/umbrella_project') - AssertLinter 'mix', - \ 'mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s' - -Execute(Builds credo command with --strict mode when set to 1): - let g:ale_elixir_credo_strict = 1 - - AssertLinter 'mix', - \ 'mix help credo && mix credo --strict --format=flycheck --read-from-stdin %s' - -Execute(Builds credo command with suggest mode by default): - AssertLinter 'mix', - \ 'mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s' - -Execute(Builds credo command with suggest mode when set to 0): - let g:ale_elixir_credo_strict = 0 - - AssertLinter 'mix', - \ 'mix help credo && mix credo suggest --format=flycheck --read-from-stdin %s' - -Execute(Builds credo command with a custom config file): - let g:ale_elixir_credo_config_file = '/home/user/custom_credo.exs' - - AssertLinter 'mix', - \ 'mix help credo && mix credo suggest --config-file /home/user/custom_credo.exs --format=flycheck --read-from-stdin %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_elixir_ls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_elixir_ls.vader deleted file mode 100644 index 84e805ba..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_elixir_ls.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('elixir', 'elixir_ls') - -After: - call ale#assert#TearDownLinterTest() - -Execute(should set correct defaults): - if has('win32') - AssertLinter 'elixir-ls\language_server.bat', 'elixir-ls\language_server.bat' - else - AssertLinter 'elixir-ls/language_server.sh', 'elixir-ls/language_server.sh' - endif - -Execute(should configure elixir-ls release location): - let b:ale_elixir_elixir_ls_release = 'boo' - - if has('win32') - AssertLinter 'boo\language_server.bat', 'boo\language_server.bat' - else - AssertLinter 'boo/language_server.sh', 'boo/language_server.sh' - endif - -Execute(should set correct LSP values): - call ale#test#SetFilename('../test-files/elixir/umbrella_project/apps/app1/lib/app.ex') - - AssertLSPLanguage 'elixir' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/elixir/umbrella_project') - -Execute(should accept configuration settings): - AssertLSPConfig {} - let b:ale_elixir_elixir_ls_config = {'elixirLS': {'dialyzerEnabled': v:false}} - AssertLSPConfig {'elixirLS': {'dialyzerEnabled': v:false}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_elixir_mix.vader b/dotfiles/.vim/plugged/ale/test/linter/test_elixir_mix.vader deleted file mode 100644 index a04bee55..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_elixir_mix.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('elixir', 'mix') - call ale#test#SetFilename('../test-files/elixir/mix_project/lib/app.ex') - let g:env_prefix = ale#Env('MIX_BUILD_PATH', 'TEMP_DIR') - -After: - unlet! g:env_prefix - - call ale#assert#TearDownLinterTest() - -Execute(The default mix command should be correct): - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elixir/mix_project') - AssertLinter 'mix', g:env_prefix . 'mix compile %s' - -Execute(Build mix commands with an umbrella root): - call ale#test#SetFilename('../test-files/elixir/umbrella_project/apps/mix_project/lib/app.ex') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elixir/umbrella_project') - AssertLinter 'mix', g:env_prefix . 'mix compile %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_elm_ls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_elm_ls.vader deleted file mode 100644 index 98b01c96..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_elm_ls.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('elm', 'elm_ls') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - call ale#test#SetFilename('../test-files/elm/newapp/src/Main.elm') - - AssertLinter 'elm-language-server', ale#Escape('elm-language-server') . ' --stdio' - -Execute(The project root should be detected correctly): - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/elm/newapp/src/Main.elm') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/elm/newapp') - -Execute(Should let users configure a global executable and override local paths): - call ale#test#SetFilename('../test-files/elm/newapp/src/Main.elm') - - let g:ale_elm_ls_executable = '/path/to/custom/elm-language-server' - let g:ale_elm_ls_use_global = 1 - - AssertLinter '/path/to/custom/elm-language-server', - \ ale#Escape('/path/to/custom/elm-language-server') . ' --stdio' - -Execute(The language should be correct): - AssertLSPLanguage 'elm' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_elm_make.vader b/dotfiles/.vim/plugged/ale/test/linter/test_elm_make.vader deleted file mode 100644 index 90e0c920..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_elm_make.vader +++ /dev/null @@ -1,63 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('elm', 'make') - -After: - unlet! g:executable - - call ale#assert#TearDownLinterTest() - -Execute(should get valid executable with default params): - call ale#test#SetFilename('../test-files/elm/newapp/src/Main.elm') - - let g:executable = ale#path#Simplify(g:dir . '/../test-files/elm/newapp/node_modules/.bin/elm') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elm/newapp') - AssertLinter g:executable, - \ ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' - -Execute(should get elm-test executable for test code with elm >= 0.19): - call ale#test#SetFilename('../test-files/elm/newapp/tests/TestSuite.elm') - - let g:executable = ale#path#Simplify(g:dir . '/../test-files/elm/newapp/node_modules/.bin/elm-test') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elm/newapp') - AssertLinter g:executable, - \ ale#Escape(g:executable) . ' make --report=json --output=/dev/null --compiler ' - \ . ale#path#Simplify(g:dir . '/../test-files/elm/newapp/node_modules/.bin/elm') . ' %t' - -Execute(should fallback to elm executable with elm >= 0.19): - call ale#test#SetFilename('../test-files/elm/newapp-notests/tests/TestMain.elm') - - let g:executable = ale#path#Simplify(g:dir . '/../test-files/elm/newapp-notests/node_modules/.bin/elm') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elm/newapp-notests') - AssertLinter g:executable, - \ ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' - -Execute(should get plain elm executable for test code with elm < 0.19): - call ale#test#SetFilename('../test-files/elm/oldapp/tests/TestSuite.elm') - - let g:executable = ale#path#Simplify(g:dir . '/../test-files/elm/oldapp/node_modules/.bin/elm') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elm/oldapp') - AssertLinter g:executable, - \ ale#Escape(g:executable) . ' make --report=json --output=/dev/null %t' - -Execute(should get valid executable with 'use_global' params): - let g:ale_elm_make_use_global = 1 - - call ale#test#SetFilename('../test-files/elm/newapp/src/Main.elm') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elm/newapp') - AssertLinter 'elm', - \ ale#Escape('elm') . ' make --report=json --output=/dev/null %t' - -Execute(should get valid executable with 'use_global' and 'executable' params): - let g:ale_elm_make_executable = 'other-elm' - let g:ale_elm_make_use_global = 1 - - call ale#test#SetFilename('../test-files/elm/newapp/src/Main.elm') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/elm/newapp') - AssertLinter 'other-elm', - \ ale#Escape('other-elm') . ' make --report=json --output=/dev/null %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_embertemplatelint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_embertemplatelint.vader deleted file mode 100644 index 7cba83e2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_embertemplatelint.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('handlebars', 'embertemplatelint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Runs the right command for ember-template-lint >= 4.x): - GivenCommandOutput ['4.0.0'] - - AssertLinter 'ember-template-lint', - \ ale#Escape('ember-template-lint') . ' --format=json --filename %s' - -Execute(Runs the right command for ember-template-lint >= 1.6, < 4.x): - GivenCommandOutput ['1.6.0'] - - AssertLinter 'ember-template-lint', - \ ale#Escape('ember-template-lint') . ' --json --filename %s' - -Execute(Runs the right command for ember-template-lint < 1.6): - GivenCommandOutput ['1.5.0'] - - AssertLinter 'ember-template-lint', - \ ale#Escape('ember-template-lint') . ' --json %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_erb.vader b/dotfiles/.vim/plugged/ale/test/linter/test_erb.vader deleted file mode 100644 index c64c7ba5..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_erb.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('eruby', 'erb') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should not contain any filter code by default): - call ale#test#SetFilename('../test-files/ruby/not_a_rails_app/file.rb') - - AssertLinter 'erb', 'erb -P -T - -x %t | ruby -c' - -Execute(Executable should filter invalid eRuby when inside a Rails project): - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/app/views/my_great_view.html.erb') - - AssertLinter 'erb', - \ 'ruby -r erb -e ' . ale#Escape('puts ERB.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_erblint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_erblint.vader deleted file mode 100644 index 147b5965..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_erblint.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('eruby', 'erblint') - call ale#test#SetFilename('dummy.html.erb') - - let g:ale_eruby_erblint_executable = 'erblint' - let g:ale_eruby_erblint_options = '' - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to erblint): - AssertLinter 'erblint', ale#Escape('erblint') - \ . ' --format json --stdin %s' - -Execute(Should be able to set a custom executable): - let g:ale_eruby_erblint_executable = 'bin/erblint' - - AssertLinter 'bin/erblint' , ale#Escape('bin/erblint') - \ . ' --format json --stdin %s' - -Execute(Setting bundle appends 'exec erblint'): - let g:ale_eruby_erblint_executable = 'path to/bundle' - - AssertLinter 'path to/bundle', ale#Escape('path to/bundle') - \ . ' exec erblint' - \ . ' --format json --stdin %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_erlang_dialyzer.vader b/dotfiles/.vim/plugged/ale/test/linter/test_erlang_dialyzer.vader deleted file mode 100644 index 5e818d7f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_erlang_dialyzer.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('erlang', 'dialyzer') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct.): - AssertLinter 'dialyzer', - \ ale#Escape('dialyzer') - \ . ' -n --plt ' . ale#Escape(expand('$HOME/.dialyzer_plt')) - \ . ' -Wunmatched_returns' - \ . ' -Werror_handling' - \ . ' -Wrace_conditions' - \ . ' -Wunderspecs' - \ . ' %s' - -Execute(The command should accept configured executable.): - let b:ale_erlang_dialyzer_executable = '/usr/bin/dialyzer' - AssertLinter '/usr/bin/dialyzer', - \ ale#Escape('/usr/bin/dialyzer') - \ . ' -n --plt ' . ale#Escape(expand('$HOME/.dialyzer_plt')) - \ . ' -Wunmatched_returns' - \ . ' -Werror_handling' - \ . ' -Wrace_conditions' - \ . ' -Wunderspecs' - \ . ' %s' - -Execute(The command should accept configured options.): - let b:ale_erlang_dialyzer_options = '-r ' . expand('$HOME') - AssertLinter 'dialyzer', - \ ale#Escape('dialyzer') - \ . ' -n --plt ' . ale#Escape(expand('$HOME/.dialyzer_plt')) - \ . ' -r ' . expand('$HOME') - \ . ' %s' - -Execute(The command should accept configured PLT file.): - let b:ale_erlang_dialyzer_plt_file = 'custom-plt' - AssertLinter 'dialyzer', - \ ale#Escape('dialyzer') - \ . ' -n --plt ' . ale#Escape(expand('custom-plt')) - \ . ' -Wunmatched_returns' - \ . ' -Werror_handling' - \ . ' -Wrace_conditions' - \ . ' -Wunderspecs' - \ . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_erlang_elvis.vader b/dotfiles/.vim/plugged/ale/test/linter/test_erlang_elvis.vader deleted file mode 100644 index 4aab49d6..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_erlang_elvis.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - let b:file = fnamemodify(bufname(''), ':.') - call ale#assert#SetUpLinterTest('erlang', 'elvis') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Default command should be correct): - AssertLinter 'elvis', - \ ale#Escape('elvis') . ' rock --output-format=parsable ' . ale#Escape(b:file) - -Execute(Executable should be configurable): - let b:ale_erlang_elvis_executable = '/path/to/elvis' - - AssertLinter '/path/to/elvis', - \ ale#Escape('/path/to/elvis') . ' rock --output-format=parsable ' . ale#Escape(b:file) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_erlang_erlc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_erlang_erlc.vader deleted file mode 100644 index 0651b512..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_erlang_erlc.vader +++ /dev/null @@ -1,62 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('erlang', 'erlc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct.): - let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr('')) - let g:regex = 'erlc.\+-o.\+%t' - let g:matched = match(g:cmd, g:regex) - - " match returns -1 if not found - AssertNotEqual - \ g:matched, - \ -1, - \ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']' - -Execute(The command should accept configured executable.): - let b:ale_erlang_erlc_executable = '/usr/bin/erlc' - let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr('')) - let g:regex = '/usr/bin/erlc.\+-o.\+%t' - let g:matched = match(g:cmd, g:regex) - - " match returns -1 if not found - AssertNotEqual - \ g:matched, - \ -1, - \ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']' - -Execute(The command should accept configured options.): - let b:ale_erlang_erlc_options = '-I include' - let g:cmd = ale_linters#erlang#erlc#GetCommand(bufnr('')) - let g:regex = 'erlc.\+-o.\+-I include.\+%t' - let g:matched = match(g:cmd, g:regex) - - " match returns -1 if not found - AssertNotEqual - \ g:matched, - \ -1, - \ 'Command error: expected [' . g:cmd . '] to match [' . g:regex . ']' - -Execute(Linter should recognize OTP23 format.): - let g:lines = ["t.erl:6: only association operators '=>' are allowed in map construction"] - let g:output_text = ale_linters#erlang#erlc#Handle(bufnr(''), g:lines)[0].text - - let g:expected = "only association operators '=>' are allowed in map construction" - AssertEqual - \ g:output_text, - \ g:expected, - \ 'Command error: expected [' . g:output_text . '] to match [' . g:expected . ']' - -Execute(Linter should recognize OTP24 format.): - let g:lines = ["t.erl:6:16: only association operators '=>' are allowed in map construction", - \ "% 6| #{ a => A, b := B }.", - \ "% | ^"] - let g:output_text = ale_linters#erlang#erlc#Handle(bufnr(''), g:lines)[0].text - - let g:expected = "only association operators '=>' are allowed in map construction" - AssertEqual - \ g:output_text, - \ g:expected, - \ 'Command error: expected [' . g:output_text . '] to match [' . g:expected . ']' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_erlang_syntaxerl.vader b/dotfiles/.vim/plugged/ale/test/linter/test_erlang_syntaxerl.vader deleted file mode 100644 index e7cc26ea..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_erlang_syntaxerl.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('erlang', 'syntaxerl') - -After: - call ale#assert#TearDownLinterTest() - -Execute (The default commands should be correct): - AssertLinter 'syntaxerl', [ - \ ale#Escape('syntaxerl') . ' -h', - \ ale#Escape('syntaxerl') . ' %t', - \] - -Execute (The executable should be configurable): - let b:ale_erlang_syntaxerl_executable = 'foobar' - - AssertLinter 'foobar', [ - \ ale#Escape('foobar') . ' -h', - \ ale#Escape('foobar') . ' %t', - \] - -Execute (The -b option should be used when available): - GivenCommandOutput [ - \ 'Syntax checker for Erlang (0.14.0)', - \ 'Usage: syntaxerl [-d | --debug] ', - \ ' syntaxerl <-h | --help>', - \ ' -d, --debug Enable debug output', - \ ' -h, --help Show this message', - \] - AssertLinter 'syntaxerl', [ - \ ale#Escape('syntaxerl') . ' -h', - \ ale#Escape('syntaxerl') . ' %t', - \] - - GivenCommandOutput [ - \ 'Syntax checker for Erlang (0.14.0)', - \ 'Usage: syntaxerl [-b | --base ] [-d | --debug] ', - \ ' syntaxerl <-h | --help>', - \ ' -b, --base Set original filename', - \ ' -d, --debug Enable debug output', - \ ' -h, --help Show this message', - \] - AssertLinter 'syntaxerl', [ - \ ale#Escape('syntaxerl') . ' -h', - \ ale#Escape('syntaxerl') . ' -b %s %t', - \] diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_erubi.vader b/dotfiles/.vim/plugged/ale/test/linter/test_erubi.vader deleted file mode 100644 index cd4a0b68..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_erubi.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('eruby', 'erubi') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should not contain any filter code by default): - call ale#test#SetFilename('../test-files/ruby/not_a_rails_app/file.rb') - - AssertLinter 'ruby', [ - \ 'ruby -r erubi/capture_end -e ' . ale#Escape('""'), - \ 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read).src') . '< %t | ruby -c', - \] - -Execute(Executable should filter invalid eRuby when inside a Rails project): - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/app/views/my_great_view.html.erb') - - AssertLinter 'ruby', [ - \ 'ruby -r erubi/capture_end -e ' . ale#Escape('""'), - \ 'ruby -r erubi/capture_end -e ' . ale#Escape('puts Erubi::CaptureEndEngine.new($stdin.read.gsub(%{<%=},%{<%}), nil, %{-}).src') . '< %t | ruby -c', - \] - -Execute(Command should be blank if the first command in the chain returns output): - GivenCommandOutput [ - \ "/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- erubi/capture_end (LoadError)", - \ " from /usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'", - \] - - AssertLinter 'ruby', [ - \ 'ruby -r erubi/capture_end -e ' . ale#Escape('""'), - \ '', - \] diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_erubis.vader b/dotfiles/.vim/plugged/ale/test/linter/test_erubis.vader deleted file mode 100644 index cfca54a2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_erubis.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('eruby', 'erubis') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should not contain any filter code by default): - call ale#test#SetFilename('../test-files/ruby/not_a_rails_app/file.rb') - - AssertLinter 'erubis', 'erubis -x %t | ruby -c' - -Execute(Executable should filter invalid eRuby when inside a Rails project): - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/app/views/my_great_view.html.erb') - - AssertLinter 'erubis', - \ 'ruby -r erubis -e ' . ale#Escape('puts Erubis::Eruby.new($stdin.read.gsub(%{<%=},%{<%})).src') . '< %t | ruby -c' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_eslint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_eslint.vader deleted file mode 100644 index 4dde5639..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_eslint.vader +++ /dev/null @@ -1,85 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('javascript', 'eslint') - runtime autoload/ale/handlers/eslint.vim - - let b:args = ' -f json --stdin --stdin-filename %s' - -After: - unlet! b:args - unlet! b:executable - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinterCwd '' - AssertLinter 'eslint', ale#Escape('eslint') . b:args - -Execute(create-react-app directories should be detected correctly): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir/testfile.js') - - let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js') - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint/react-app') - AssertLinter b:executable, - \ (has('win32') ? ale#Escape('node.exe') . ' ' : '') - \ . ale#Escape(b:executable) . b:args - -Execute(use-global should override create-react-app detection): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir/testfile.js') - - let g:ale_javascript_eslint_use_global = 1 - let g:ale_javascript_eslint_executable = 'eslint_d' - - let b:executable = 'eslint_d' - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint/react-app') - AssertLinter b:executable, ale#Escape(b:executable) . b:args - -Execute(other app directories should be detected correctly): - call ale#test#SetFilename('../test-files/eslint/other-app/subdir/testfile.js') - - let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/node_modules/.bin/eslint') - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint') - AssertLinter b:executable, ale#Escape(b:executable) . b:args - -Execute(use-global should override other app directories): - call ale#test#SetFilename('../test-files/eslint/other-app/subdir/testfile.js') - - let g:ale_javascript_eslint_use_global = 1 - let g:ale_javascript_eslint_executable = 'eslint_d' - - let b:executable = 'eslint_d' - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint') - AssertLinter b:executable, ale#Escape(b:executable) . b:args - -Execute(eslint_d should be detected correctly): - call ale#test#SetFilename('../test-files/eslint/app-with-eslint-d/testfile.js') - - let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/app-with-eslint-d/node_modules/.bin/eslint_d') - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint/app-with-eslint-d') - AssertLinter b:executable, ale#Escape(b:executable) . b:args - -Execute(eslint.js executables should be run with node on Windows): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir/testfile.js') - - let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js') - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint/react-app') - AssertLinter b:executable, - \ (has('win32') ? ale#Escape('node.exe') . ' ' : '') - \ . ale#Escape(b:executable) . b:args - -Execute(eslint.js should be run from a containing project with node_modules): - call ale#test#SetFilename('../test-files/eslint/react-app/subdir-with-package-json/testfile.js') - - let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/react-app/node_modules/eslint/bin/eslint.js') - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint/react-app') - AssertLinter b:executable, - \ (has('win32') ? ale#Escape('node.exe') . ' ' : '') - \ . ale#Escape(b:executable) . b:args - -Execute(eslint.js should be run from a containing project with .yarn/sdks): - call ale#test#SetFilename('../test-files/eslint/yarn2-app/subdir/testfile.js') - - let b:executable = ale#path#Simplify(g:dir . '/../test-files/eslint/yarn2-app/.yarn/sdks/eslint/bin/eslint.js') - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/eslint/yarn2-app') - AssertLinter b:executable, - \ (has('win32') ? ale#Escape('node.exe') . ' ' : '') - \ . ale#Escape(b:executable) . b:args diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_fecs.vader b/dotfiles/.vim/plugged/ale/test/linter/test_fecs.vader deleted file mode 100644 index 4287d324..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_fecs.vader +++ /dev/null @@ -1,9 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('javascript', 'fecs') - runtime autoload/ale/handlers/fecs.vim - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'fecs', ale#Escape('fecs') . ' check --colors=false --rule=true %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_flake8.vader b/dotfiles/.vim/plugged/ale/test/linter/test_flake8.vader deleted file mode 100644 index 53b40b29..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_flake8.vader +++ /dev/null @@ -1,219 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'flake8') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - - GivenCommandOutput ['3.0.0'] - -After: - unlet! b:executable - unlet! b:bin_dir - call ale#assert#TearDownLinterTest() - -Execute(The flake8 callbacks should return the correct default values): - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --version', - \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \] - - " The version check should be cached. - GivenCommandOutput [] - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \] - - " Try with older versions. - call ale#semver#ResetVersionCache() - GivenCommandOutput ['2.9.9'] - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --version', - \ ale#Escape('flake8') . ' --format=default -', - \] - -Execute(The option for disabling changing directories should work): - let g:ale_python_flake8_change_directory = 'off' - - AssertLinterCwd ['', ''] - call ale#semver#ResetVersionCache() - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --version', - \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \] - - let g:ale_python_flake8_change_directory = 0 - - AssertLinterCwd [''] - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \] - - " Invalid options should be considered the same as turning the setting off. - let g:ale_python_flake8_change_directory = 'xxx' - - AssertLinterCwd [''] - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \] - -Execute(The option for changing directory to project root should work): - call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py') - - AssertLinterCwd ale#python#FindProjectRootIni(bufnr('')) - call ale#semver#ResetVersionCache() - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --version', - \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \] - -Execute(The option for changing directory to file dir should work): - let g:ale_python_flake8_change_directory = 'file' - call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py') - - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --version', - \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \] - - let g:ale_python_flake8_change_directory = 1 - - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --format=default --stdin-display-name %s -', - \] - -Execute(The flake8 command callback should let you set options): - let g:ale_python_flake8_options = '--some-option' - - GivenCommandOutput ['3.0.4'] - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --version', - \ ale#Escape('flake8') . ' --some-option' - \ . ' --format=default --stdin-display-name %s -', - \] - - call ale#semver#ResetVersionCache() - GivenCommandOutput ['2.9.9'] - AssertLinter 'flake8', [ - \ ale#Escape('flake8') . ' --version', - \ ale#Escape('flake8') . ' --some-option --format=default -', - \] - -Execute(You should be able to set a custom executable and it should be escaped): - call ale#test#SetFilename('../test-files/dummy') - - let g:ale_python_flake8_executable = 'executable with spaces' - - AssertLinterCwd ['%s:h', '%s:h'] - call ale#semver#ResetVersionCache() - AssertLinter 'executable with spaces', [ - \ ale#Escape('executable with spaces') . ' --version', - \ ale#Escape('executable with spaces') - \ . ' --format=default' - \ . ' --stdin-display-name %s -', - \] - -Execute(The flake8 callbacks should detect virtualenv directories): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/flake8' - \) - - AssertLinter b:executable, [ - \ ale#Escape(b:executable) . ' --version', - \ ale#Escape(b:executable) - \ . ' --format=default' - \ . ' --stdin-display-name %s -', - \] - -Execute(The FindProjectRoot should detect the project root directory for namespace package via Manifest.in): - call ale#test#SetFilename('../test-files/python/namespace_package_manifest/namespace/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_manifest'), - \ ale#python#FindProjectRoot(bufnr('')) - -Execute(The FindProjectRoot should detect the project root directory for namespace package via setup.cf): - call ale#test#SetFilename('../test-files/python/namespace_package_setup/namespace/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_setup'), - \ ale#python#FindProjectRoot(bufnr('')) - -Execute(The FindProjectRoot should detect the project root directory for namespace package via pytest.ini): - call ale#test#SetFilename('../test-files/python/namespace_package_pytest/namespace/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_pytest'), - \ ale#python#FindProjectRoot(bufnr('')) - -Execute(The FindProjectRoot should detect the project root directory for namespace package via tox.ini): - call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_tox'), - \ ale#python#FindProjectRoot(bufnr('')) - -Execute(The FindProjectRoot should detect the project root directory for non-namespace package): - call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir'), - \ ale#python#FindProjectRoot(bufnr('')) - -" Some users currently run flake8 this way, so we should support it. -Execute(Using `python -m flake8` should be supported for running flake8): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let g:ale_python_flake8_executable = 'python' - let g:ale_python_flake8_options = '-m flake8 --some-option' - - GivenCommandOutput ['2.9.9'] - AssertLinter 'python', [ - \ ale#Escape('python') . ' -m flake8 --version', - \ ale#Escape('python') - \ . ' -m flake8 --some-option --format=default -' - \] - - call ale#semver#ResetVersionCache() - - " Leading spaces shouldn't matter - let g:ale_python_flake8_options = ' -m flake8 --some-option' - - GivenCommandOutput ['2.9.9'] - AssertLinter 'python', [ - \ ale#Escape('python') . ' -m flake8 --version', - \ ale#Escape('python') - \ . ' -m flake8 --some-option --format=default -' - \] - -Execute(Setting executable to 'pipenv' should append 'run flake8'): - let g:ale_python_flake8_executable = 'path/to/pipenv' - - " FIXME: pipenv should check the version with flake8. - GivenCommandOutput [] - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run flake8 --format=default -' - -Execute(Pipenv is detected when python_flake8_auto_pipenv is set): - let g:ale_python_flake8_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinterCwd ale#python#FindProjectRootIni(bufnr('')) - AssertLinter 'pipenv', - \ ale#Escape('pipenv') . ' run flake8 --format=default --stdin-display-name %s -' - -Execute(Setting executable to 'poetry' should append 'run flake8'): - let g:ale_python_flake8_executable = 'path/to/poetry' - - " FIXME: poetry should check the version with flake8. - GivenCommandOutput [] - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run flake8 --format=default -' - -Execute(poetry is detected when python_flake8_auto_poetry is set): - let g:ale_python_flake8_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinterCwd ale#python#FindProjectRootIni(bufnr('')) - AssertLinter 'poetry', - \ ale#Escape('poetry') . ' run flake8 --format=default --stdin-display-name %s -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_flakehell.vader b/dotfiles/.vim/plugged/ale/test/linter/test_flakehell.vader deleted file mode 100644 index 98314408..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_flakehell.vader +++ /dev/null @@ -1,203 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'flakehell') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - - GivenCommandOutput ['0.8.0'] - -After: - unlet! b:executable - unlet! b:bin_dir - call ale#assert#TearDownLinterTest() - -Execute(The flakehell callbacks should return the correct default values): - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' --version', - \ ale#Escape('flakehell') . ' lint --format=default --stdin-display-name %s -', - \] - - " The version check should be cached. - GivenCommandOutput [] - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' lint --format=default --stdin-display-name %s -', - \] - -Execute(The option for disabling changing directories should work): - let g:ale_python_flakehell_change_directory = 'off' - - AssertLinterCwd ['', ''] - call ale#semver#ResetVersionCache() - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' --version', - \ ale#Escape('flakehell') . ' lint --format=default --stdin-display-name %s -', - \] - - let g:ale_python_flakehell_change_directory = 0 - - AssertLinterCwd [''] - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' lint --format=default --stdin-display-name %s -', - \] - - " Invalid options should be considered the same as turning the setting off. - let g:ale_python_flakehell_change_directory = 'xxx' - - AssertLinterCwd [''] - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' lint --format=default --stdin-display-name %s -', - \] - -Execute(The option for changing directory to project root should work): - call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py') - - AssertLinterCwd ale#python#FindProjectRootIni(bufnr('')) - call ale#semver#ResetVersionCache() - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' --version', - \ ale#Escape('flakehell') . ' lint --format=default --stdin-display-name %s -', - \] - -Execute(The option for changing directory to file dir should work): - let g:ale_python_flakehell_change_directory = 'file' - call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py') - - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' --version', - \ ale#Escape('flakehell') . ' lint --format=default --stdin-display-name %s -', - \] - - let g:ale_python_flakehell_change_directory = 1 - - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' lint --format=default --stdin-display-name %s -', - \] - -Execute(The flakehell command callback should let you set options): - let g:ale_python_flakehell_options = '--some-option' - - GivenCommandOutput ['0.8.0'] - AssertLinter 'flakehell', [ - \ ale#Escape('flakehell') . ' --version', - \ ale#Escape('flakehell') . ' lint --some-option' - \ . ' --format=default --stdin-display-name %s -', - \] - -Execute(You should be able to set a custom executable and it should be escaped): - let g:ale_python_flakehell_executable = 'executable with spaces' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinterCwd ['%s:h', '%s:h'] - call ale#semver#ResetVersionCache() - AssertLinter 'executable with spaces', [ - \ ale#Escape('executable with spaces') . ' --version', - \ ale#Escape('executable with spaces') - \ . ' lint' - \ . ' --format=default' - \ . ' --stdin-display-name %s -', - \] - -Execute(The flakehell callbacks should detect virtualenv directories): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/flakehell' - \) - - AssertLinter b:executable, [ - \ ale#Escape(b:executable) . ' --version', - \ ale#Escape(b:executable) - \ . ' lint' - \ . ' --format=default' - \ . ' --stdin-display-name %s -', - \] - -Execute(The FindProjectRoot should detect the project root directory for namespace package via Manifest.in): - call ale#test#SetFilename('../test-files/python/namespace_package_manifest/namespace/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_manifest'), - \ ale#python#FindProjectRoot(bufnr('')) - -Execute(The FindProjectRoot should detect the project root directory for namespace package via setup.cf): - call ale#test#SetFilename('../test-files/python/namespace_package_setup/namespace/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_setup'), - \ ale#python#FindProjectRoot(bufnr('')) - -Execute(The FindProjectRoot should detect the project root directory for namespace package via pytest.ini): - call ale#test#SetFilename('../test-files/python/namespace_package_pytest/namespace/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_pytest'), - \ ale#python#FindProjectRoot(bufnr('')) - -Execute(The FindProjectRoot should detect the project root directory for namespace package via tox.ini): - call ale#test#SetFilename('../test-files/python/namespace_package_tox/namespace/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/namespace_package_tox'), - \ ale#python#FindProjectRoot(bufnr('')) - -Execute(The FindProjectRoot should detect the project root directory for non-namespace package): - call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir'), - \ ale#python#FindProjectRoot(bufnr('')) - -" Some users currently run flakehell this way, so we should support it. -Execute(Using `python -m flakehell` should be supported for running flakehell): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let g:ale_python_flakehell_executable = 'python' - let g:ale_python_flakehell_options = '--some-option' - - AssertLinter 'python', [ - \ ale#Escape('python') . ' -m flakehell --version', - \ ale#Escape('python') - \ . ' -m flakehell lint --some-option --format=default --stdin-display-name %s -' - \] - - call ale#semver#ResetVersionCache() - - " Leading spaces shouldn't matter - let g:ale_python_flakehell_options = ' --some-option' - - AssertLinter 'python', [ - \ ale#Escape('python') . ' -m flakehell --version', - \ ale#Escape('python') - \ . ' -m flakehell lint --some-option --format=default --stdin-display-name %s -' - \] - -Execute(Setting executable to 'pipenv' should append 'run flakehell'): - let g:ale_python_flakehell_executable = 'path/to/pipenv' - - " FIXME: pipenv should check the version with flakehell. - GivenCommandOutput [] - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run flakehell lint --format=default -' - -Execute(Pipenv is detected when python_flakehell_auto_pipenv is set): - let g:ale_python_flakehell_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinterCwd ale#python#FindProjectRootIni(bufnr('')) - AssertLinter 'pipenv', - \ ale#Escape('pipenv') . ' run flakehell lint --format=default --stdin-display-name %s -' - -Execute(Setting executable to 'poetry' should append 'run flakehell'): - let g:ale_python_flakehell_executable = 'path/to/poetry' - - " FIXME: poetry should check the version with flakehell. - GivenCommandOutput [] - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run flakehell lint --format=default -' - -Execute(poetry is detected when python_flakehell_auto_poetry is set): - let g:ale_python_flakehell_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinterCwd ale#python#FindProjectRootIni(bufnr('')) - AssertLinter 'poetry', - \ ale#Escape('poetry') . ' run flakehell lint --format=default --stdin-display-name %s -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_flow.vader b/dotfiles/.vim/plugged/ale/test/linter/test_flow.vader deleted file mode 100644 index 8488a2e9..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_flow.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('javascript', 'flow') - -After: - call ale#assert#TearDownLinterTest() - -Execute(flow should return a command to run if a .flowconfig file exists): - call ale#test#SetFilename('../test-files/flow/a/sub/dummy') - - AssertLinter 'flow', - \ ale#Escape('flow') - \ . ' check-contents --respect-pragma --json --from ale %s < %t' - \ . (!has('win32') ? '; echo' : '') - -Execute(flow should not use the respect pragma argument if the option is off): - call ale#test#SetFilename('../test-files/flow/a/sub/dummy') - - let b:ale_javascript_flow_use_respect_pragma = 0 - - AssertLinter 'flow', - \ ale#Escape('flow') - \ . ' check-contents --json --from ale %s < %t' - \ . (!has('win32') ? '; echo' : '') - -Execute(flow should should not use --respect-pragma for old versions): - call ale#test#SetFilename('../test-files/flow/a/sub/dummy') - - GivenCommandOutput [ - \ 'Warning: `flow --version` is deprecated in favor of `flow version`', - \ 'Flow, a static type checker for JavaScript, version 0.27.0', - \] - AssertLinter 'flow', [ - \ ale#Escape('flow') . ' --version', - \ ale#Escape('flow') - \ . ' check-contents --json --from ale %s < %t' - \ . (!has('win32') ? '; echo' : ''), - \] - -Execute(flow should not return a command to run if no .flowconfig file exists): - call ale#test#SetFilename('../test-files/flow/b/sub/dummy') - - AssertLinterNotExecuted diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_foodcritic.vader b/dotfiles/.vim/plugged/ale/test/linter/test_foodcritic.vader deleted file mode 100644 index c5564cb1..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_foodcritic.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('chef', 'foodcritic') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'foodcritic', ale#Escape('foodcritic') . ' %s' - -Execute(Extra options should be included with escapeed tildes (~)): - let b:ale_chef_foodcritic_options = '-t ~F011' - - AssertLinter 'foodcritic', ale#Escape('foodcritic') . ' -t \~F011 %s' - -Execute(The executable should be configurable): - let b:ale_chef_foodcritic_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_fortran_fortls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_fortran_fortls.vader deleted file mode 100644 index 581f94ba..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_fortran_fortls.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('fortran', 'language_server') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'fortls', ale#Escape('fortls') - -Execute(The project root should be detected correctly): - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/fortls-project/test.F90') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/fortls-project') - -Execute(The language should be correct): - AssertLSPLanguage 'fortran' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_fsc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_fsc.vader deleted file mode 100644 index 278e7c16..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_fsc.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('scala', 'fsc') - -After: - call ale#assert#TearDownLinterTest() - -Given scala(An empty Scala file): -Execute(The default executable and command should be correct): - AssertLinter 'fsc', ale#Escape('fsc') . ' -Ystop-after:parser %t' - -Given scala.sbt(An empty SBT file): -Execute(fsc should not be run for sbt files): - AssertLinterNotExecuted diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_fusionlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_fusionlint.vader deleted file mode 100644 index 1c63b811..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_fusionlint.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('fuse', 'fusionlint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The fuse fusionlint command callback should return the correct default string): - AssertLinter 'fusion-lint', ale#Escape('fusion-lint') . ' --filename %s -i' - -Execute(The fuse fusionlint command callback should let you set options): - let g:ale_fuse_fusionlint_options = '--example-option argument' - - AssertLinter 'fusion-lint', - \ ale#Escape('fusion-lint') . ' --example-option argument --filename %s -i' - -Execute(The fusionlint executable should be configurable): - let g:ale_fuse_fusionlint_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --filename %s -i' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gawk.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gawk.vader deleted file mode 100644 index f4364291..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gawk.vader +++ /dev/null @@ -1,25 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('awk', 'gawk') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'gawk', - \ ale#Escape('gawk') . ' --source ' . ale#Escape('BEGIN { exit } END { exit 1 }') - \ . ' --lint -f %t /dev/null' - -Execute(The executable should be configurable): - let b:ale_awk_gawk_executable = '/other/gawk' - - AssertLinter '/other/gawk', - \ ale#Escape('/other/gawk') . ' --source ' . ale#Escape('BEGIN { exit } END { exit 1 }') - \ . ' --lint -f %t /dev/null' - -Execute(The options should be configurable): - let b:ale_awk_gawk_executable = 'gawk' - let b:ale_awk_gawk_options = '--lint=no-ext' - - AssertLinter 'gawk', - \ ale#Escape('gawk') . ' --source ' . ale#Escape('BEGIN { exit } END { exit 1 }') - \ . ' --lint --lint=no-ext -f %t /dev/null' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gfortran.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gfortran.vader deleted file mode 100644 index 3e6ef951..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gfortran.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('fortran', 'gcc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The fortran gcc command callback should return the correct default string): - AssertLinter 'gcc', ale#Escape('gcc') . ' -S -x f95 -fsyntax-only -ffree-form -Wall -' - -Execute(The fortran gcc command callback should let you set options): - let g:ale_fortran_gcc_options = '-Wotherthings' - - AssertLinter 'gcc', ale#Escape('gcc') . ' -S -x f95 -fsyntax-only -ffree-form -Wotherthings -' - -Execute(The fortran gcc command callback should let you use -ffixed-form): - let g:ale_fortran_gcc_use_free_form = 0 - - AssertLinter 'gcc', ale#Escape('gcc') . ' -S -x f95 -fsyntax-only -ffixed-form -Wall -' - -Execute(The fortran executable should be configurable): - let g:ale_fortran_gcc_executable = 'gfortran' - - AssertLinter 'gfortran', - \ ale#Escape('gfortran') . ' -S -x f95 -fsyntax-only -ffree-form -Wall -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ghdl.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ghdl.vader deleted file mode 100644 index f254e11f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ghdl.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('vhdl', 'ghdl') - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'ghdl', ale#Escape('ghdl') . ' -s --std=08 %t' - - let b:ale_vhdl_ghdl_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' -s --std=08 %t' - -Execute(The options should be configurable): - let b:ale_vhdl_ghdl_options = '--something' - - AssertLinter 'ghdl', ale#Escape('ghdl') . ' -s --something %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gitlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gitlint.vader deleted file mode 100644 index 4df675f3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gitlint.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('gitcommit', 'gitlint') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - unlet! b:executable - - call ale#assert#TearDownLinterTest() - -Execute(The gitlint callbacks should return the correct default values): - AssertLinter 'gitlint', ale#Escape('gitlint') . ' lint' - -Execute(The gitlint executable should be configurable, and escaped properly): - let g:ale_gitcommit_gitlint_executable = 'executable with spaces' - - AssertLinter 'executable with spaces', - \ ale#Escape('executable with spaces') . ' lint' - -Execute(The gitlint command callback should let you set options): - let g:ale_gitcommit_gitlint_options = '--some-option' - - AssertLinter 'gitlint', ale#Escape('gitlint') . ' --some-option lint' - -Execute(The gitlint callbacks shouldn't detect virtualenv directories where they don't exist): - call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/COMMIT_EDITMSG') - - AssertLinter 'gitlint', ale#Escape('gitlint') . ' lint' - -Execute(The gitlint callbacks should detect virtualenv directories): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/COMMIT_EDITMSG') - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/gitlint' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' lint' - -Execute(You should able able to use the global gitlint instead): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/COMMIT_EDITMSG') - let g:ale_gitcommit_gitlint_use_global = 1 - - AssertLinter 'gitlint', ale#Escape('gitlint') . ' lint' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_glslang.vader b/dotfiles/.vim/plugged/ale/test/linter/test_glslang.vader deleted file mode 100644 index 980406af..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_glslang.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('glsl', 'glslang') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'glslangValidator', ale#Escape('glslangValidator') . ' -C %t' - -Execute(The executable should be configurable): - let b:ale_glsl_glslang_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' -C %t' - -Execute(Options should work): - let g:ale_glsl_glslang_options = '--test' - - AssertLinter 'glslangValidator', - \ ale#Escape('glslangValidator') . ' --test -C %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_glslls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_glslls.vader deleted file mode 100644 index 133c2a2f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_glslls.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('glsl', 'glslls') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'glslls', ale#Escape('glslls') . ' --stdin' - -Execute(Executable should be configurable): - let b:ale_glsl_glslls_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --stdin' - -Execute(Setting logfile should work): - let b:ale_glsl_glslls_logfile = '/tmp/test.log' - - AssertLinter 'glslls', - \ ale#Escape('glslls') . ' --verbose -l /tmp/test.log --stdin' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gobuild.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gobuild.vader deleted file mode 100644 index bac4d74e..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gobuild.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - Save g:ale_go_go_executable - - call ale#assert#SetUpLinterTest('go', 'gobuild') - - GivenCommandOutput ['/foo/bar', '/foo/baz'] - -After: - Restore - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinterCwd '%s:h' - AssertLinter 'go', 'go test -c -o /dev/null ./' - -Execute(Go environment variables should be supported): - let b:ale_go_go111module = 'on' - - AssertLinter 'go', ale#Env('GO111MODULE', 'on') . 'go test -c -o /dev/null ./' - - unlet! b:ale_go_go111module - -Execute(Extra options should be supported): - let g:ale_go_gobuild_options = '--foo-bar' - - AssertLinter 'go', 'go test --foo-bar -c -o /dev/null ./' - - let g:ale_go_gobuild_options = '' - -Execute(The executable should be configurable): - let g:ale_go_go_executable = 'foobar' - - AssertLinter 'foobar', 'foobar test -c -o /dev/null ./' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gofmt.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gofmt.vader deleted file mode 100644 index b056a659..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gofmt.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - Save g:ale_go_go111module - Save b:ale_go_go111module - - let b:ale_go_go111module = '' - - call ale#assert#SetUpLinterTest('go', 'gofmt') - call ale#test#SetFilename('../test-files/go/testfile2.go') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The default gofmt command should be correct): - AssertLinter 'gofmt', - \ ale#Escape('gofmt') . ' -e %t' - -Execute(The gofmt command should support Go environment variables): - let b:ale_go_go111module = 'on' - - AssertLinter 'gofmt', - \ ale#Env('GO111MODULE', 'on') - \ . ale#Escape('gofmt') . ' -e %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_golangci_lint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_golangci_lint.vader deleted file mode 100644 index ee754bba..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_golangci_lint.vader +++ /dev/null @@ -1,50 +0,0 @@ -Before: - Save g:ale_go_go111module - - call ale#assert#SetUpLinterTest('go', 'golangci_lint') - call ale#test#SetFilename('test.go') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The golangci-lint defaults should be correct): - AssertLinterCwd '%s:h', - AssertLinter 'golangci-lint', - \ ale#Escape('golangci-lint') - \ . ' run ' . ale#Escape(expand('%' . ':t')) - \ . ' --enable-all' - -Execute(The golangci-lint callback should use a configured executable): - let b:ale_go_golangci_lint_executable = 'something else' - - AssertLinter 'something else', - \ ale#Escape('something else') - \ . ' run ' . ale#Escape(expand('%' . ':t')) - \ . ' --enable-all' - -Execute(The golangci-lint callback should use configured options): - let b:ale_go_golangci_lint_options = '--foobar' - - AssertLinter 'golangci-lint', - \ ale#Escape('golangci-lint') - \ . ' run ' . ale#Escape(expand('%' . ':t')) - \ . ' --foobar' - -Execute(The golangci-lint callback should support environment variables): - let b:ale_go_go111module = 'on' - - AssertLinter 'golangci-lint', - \ ale#Env('GO111MODULE', 'on') - \ . ale#Escape('golangci-lint') - \ . ' run ' . ale#Escape(expand('%' . ':t')) - \ . ' --enable-all' - -Execute(The golangci-lint `lint_package` option should use the correct command): - let b:ale_go_golangci_lint_package = 1 - - AssertLinter 'golangci-lint', - \ ale#Escape('golangci-lint') . ' run --enable-all' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_golangserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_golangserver.vader deleted file mode 100644 index b31d8dc8..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_golangserver.vader +++ /dev/null @@ -1,76 +0,0 @@ -Before: - Save $GOPATH - Save g:ale_completion_enabled - Save g:ale_go_go111module - - let g:ale_completion_enabled = 0 - let g:sep = has('win32') ? ';' : ':' - - call ale#assert#SetUpLinterTest('go', 'langserver') - let $GOPATH = ale#path#Simplify(g:dir . '/../test-files/go/go1') - \ . g:sep - \ . ale#path#Simplify(g:dir . '/../test-files/go/go2') - -After: - Restore - - unlet! b:ale_completion_enabled - unlet! b:ale_go_go111module - unlet! g:sep - - call ale#assert#TearDownLinterTest() - -Execute(should set correct defaults): - AssertLinter 'go-langserver', ale#Escape('go-langserver') - -Execute(should configure go-langserver callback executable): - let b:ale_go_langserver_executable = 'boo' - - AssertLinter 'boo', ale#Escape('boo') - -Execute(should set go-langserver options): - call ale#test#SetFilename('../test-files/go/go1/prj1/file.go') - let b:ale_completion_enabled = 1 - let b:ale_go_langserver_options = '' - - AssertLinter 'go-langserver', - \ ale#Escape('go-langserver') . ' -gocodecompletion' - - let b:ale_go_langserver_options = '-trace' - - AssertLinter 'go-langserver', - \ ale#Escape('go-langserver') . ' -gocodecompletion -trace' - -Execute(should ignore go-langserver -gocodecompletion option): - call ale#test#SetFilename('../test-files/go/go1/prj1/file.go') - - let b:ale_go_langserver_options = '-trace -gocodecompletion' - let b:ale_completion_enabled = 1 - - AssertLinter 'go-langserver', - \ ale#Escape('go-langserver') . ' -gocodecompletion -trace' - - let b:ale_completion_enabled = 0 - - AssertLinter 'go-langserver', ale#Escape('go-langserver') . ' -trace' - -Execute(should support Go environment variables): - let b:ale_go_go111module = 'on' - - AssertLinter 'go-langserver', - \ ale#Env('GO111MODULE', 'on') . ale#Escape('go-langserver') - -Execute(should set go-langserver for go app1): - call ale#test#SetFilename('../test-files/go/go1/prj1/file.go') - - AssertLSPLanguage 'go' - AssertLSPConfig {} - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/go/go1') - -Execute(should set go-langserver for go app2): - call ale#test#SetFilename('../test-files/go/go2/prj1/file.go') - - AssertLSPLanguage 'go' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/go/go2') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_golint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_golint.vader deleted file mode 100644 index 64916707..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_golint.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - Save g:ale_go_go111module - - call ale#assert#SetUpLinterTest('go', 'golint') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The default golint command should be correct): - AssertLinter 'golint', ale#Escape('golint') . ' %t' - -Execute(The golint executable should be configurable): - let b:ale_go_golint_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' %t' - -Execute(The golint options should be configurable): - let b:ale_go_golint_options = '--foo' - - AssertLinter 'golint', ale#Escape('golint') . ' --foo %t' - -Execute(The golint command should support Go environment variables): - let b:ale_go_go111module = 'on' - - AssertLinter 'golint', - \ ale#Env('GO111MODULE', 'on') . ale#Escape('golint') . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gometalinter.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gometalinter.vader deleted file mode 100644 index 5ff744f5..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gometalinter.vader +++ /dev/null @@ -1,49 +0,0 @@ -Before: - Save g:ale_go_go111module - - call ale#assert#SetUpLinterTest('go', 'gometalinter') - call ale#test#SetFilename('test.go') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The gometalinter defaults should be correct): - AssertLinterCwd '%s:h', - AssertLinter 'gometalinter', - \ ale#Escape('gometalinter') - \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%' . ':t'))) - \ . ' .' - -Execute(The gometalinter callback should use a configured executable): - let b:ale_go_gometalinter_executable = 'something else' - - AssertLinter 'something else', - \ ale#Escape('something else') - \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%' . ':t'))) - \ . ' .' - -Execute(The gometalinter callback should use configured options): - let b:ale_go_gometalinter_options = '--foobar' - - AssertLinter 'gometalinter', - \ ale#Escape('gometalinter') - \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%' . ':t'))) - \ . ' --foobar' . ' .' - -Execute(The gometalinter should use configured environment variables): - let b:ale_go_go111module = 'off' - - AssertLinter 'gometalinter', - \ ale#Env('GO111MODULE', 'off') - \ . ale#Escape('gometalinter') - \ . ' --include=' . ale#Escape(ale#util#EscapePCRE(expand('%' . ':t'))) - \ . ' .' - -Execute(The gometalinter `lint_package` option should use the correct command): - let b:ale_go_gometalinter_lint_package = 1 - - AssertLinter 'gometalinter', ale#Escape('gometalinter') . ' .' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gopls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gopls.vader deleted file mode 100644 index 1c91fa10..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gopls.vader +++ /dev/null @@ -1,96 +0,0 @@ -Before: - Save g:ale_go_go111module - Save $GOPATH - - let $GOPATH = '/non/existent/directory' - - call ale#assert#SetUpLinterTest('go', 'gopls') - -After: - if isdirectory(g:dir . '/.git') - call delete(g:dir . '/.git', 'd') - endif - - unlet! b:ale_go_go111module - unlet! b:ale_go_go111module - unlet! b:ale_completion_enabled - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'gopls', ale#Escape('gopls') . ' --mode stdio' - -Execute(The executable should be configurable): - let b:ale_go_gopls_executable = 'boo' - - AssertLinter 'boo', ale#Escape('boo') . ' --mode stdio' - -Execute(gopls should be found in GOPATH): - " This is a directory with a fake executable - let $GOPATH = ale#test#GetFilename('../test-files/go/gopath') - - AssertLinter - \ ale#test#GetFilename('../test-files/go/gopath/bin/gopls'), - \ ale#Escape(ale#test#GetFilename('../test-files/go/gopath/bin/gopls')) - \ . ' --mode stdio' - -Execute(Global settings should be preferre for gopls if use_global = 1): - " This is a directory with a fake executable - let $GOPATH = ale#test#GetFilename('../test-files/go/gopath') - let b:ale_go_gopls_executable = 'boo' - let b:ale_go_gopls_use_global = 1 - - AssertLinter 'boo', ale#Escape('boo') . ' --mode stdio' - -Execute(Settings options should work): - call ale#test#SetFilename('../test-files/go/go1/prj1/file.go') - " let b:ale_completion_enabled = 1 - let b:ale_go_gopls_options = '' - - AssertLinter 'gopls', - \ ale#Escape('gopls') . '' - - let b:ale_go_gopls_options = '--mode stdio --trace' - - AssertLinter 'gopls', - \ ale#Escape('gopls') . ' --mode stdio --trace' - - let b:ale_go_gopls_init_options = {'ui.diagnostic.analyses': {'composites': v:false}} - AssertLSPOptions {'ui.diagnostic.analyses': {'composites': v:false}} - -Execute(Go environment variables should be passed on): - let b:ale_go_go111module = 'off' - - AssertLinter 'gopls', - \ ale#Env('GO111MODULE', 'off') . ale#Escape('gopls') . ' --mode stdio' - -Execute(Project directories should be detected based on 'go.mod' being present): - call ale#test#SetFilename('../test-files/go/test.go') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/go') - -Execute(Project directories with .git should be detected): - call ale#test#SetFilename('test.go') - - if !isdirectory(g:dir . '/.git') - call mkdir(g:dir . '/.git') - endif - - AssertLSPProject g:dir - -Execute('go.mod' should be ignored if modules are off): - call ale#test#SetFilename('../test-files/go/test.go') - - let b:ale_go_go111module = 'off' - let b:parent_dir = ale#path#Simplify(g:dir . '/..') - let b:git_dir = b:parent_dir . '/.git' - - if !isdirectory(b:git_dir) - call mkdir(b:git_dir) - endif - - AssertLSPProject b:parent_dir - - call delete(b:git_dir, 'd') - unlet! b:parent_dir - unlet! b:git_dir diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gosimple.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gosimple.vader deleted file mode 100644 index 960f8ee9..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gosimple.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - Save g:ale_go_go111module - - call ale#assert#SetUpLinterTest('go', 'gosimple') - call ale#test#SetFilename('../test-files/go/testfile2.go') - -After: - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The default gosimple command should be correct): - AssertLinterCwd '%s:h' - AssertLinter 'gosimple', 'gosimple .' - -Execute(The gosimple command should support Go environment variables): - let b:ale_go_go111module = 'on' - - AssertLinter 'gosimple', ale#Env('GO111MODULE', 'on') . 'gosimple .' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_gotype.vader b/dotfiles/.vim/plugged/ale/test/linter/test_gotype.vader deleted file mode 100644 index 22829a17..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_gotype.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - Save g:ale_go_go111module - - call ale#assert#SetUpLinterTest('go', 'gotype') - call ale#test#SetFilename('../test-files/go/testfile2.go') - -After: - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The default gotype command should be correct): - AssertLinterCwd '%s:h' - AssertLinter 'gotype', 'gotype -e .' - -Execute(The gotype callback should ignore test files): - call ale#test#SetFilename('bla_test.go') - - AssertLinterNotExecuted - -Execute(The gotype callback should support Go environment variables): - let b:ale_go_go111module = 'on' - - AssertLinter 'gotype', ale#Env('GO111MODULE', 'on') . 'gotype -e .' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_govet.vader b/dotfiles/.vim/plugged/ale/test/linter/test_govet.vader deleted file mode 100644 index 12ec168a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_govet.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - Save g:ale_go_go_executable - Save g:ale_go_govet_options - Save g:ale_go_go111module - - call ale#assert#SetUpLinterTest('go', 'govet') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'go', 'go vet .' - -Execute(Extra options should be supported): - let g:ale_go_govet_options = '--foo-bar' - - AssertLinterCwd '%s:h' - AssertLinter 'go', 'go vet --foo-bar .' - -Execute(The executable should be configurable): - let g:ale_go_go_executable = 'foobar' - - AssertLinter 'foobar', 'foobar vet .' - -Execute(Go environment variables should be supported): - let b:ale_go_go111module = 'on' - - AssertLinter 'go', ale#Env('GO111MODULE', 'on') . 'go vet .' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_graphql_gqlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_graphql_gqlint.vader deleted file mode 100644 index 22c05a6a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_graphql_gqlint.vader +++ /dev/null @@ -1,9 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('graphql', 'gqlint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The linter should run from the directory of the file in the buffer): - AssertLinterCwd '%s:h' - AssertLinter 'gqlint', 'gqlint --reporter=simple %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haml_hamllint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haml_hamllint.vader deleted file mode 100644 index 1f5e2fa4..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haml_hamllint.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haml', 'hamllint') - - let g:default_command = 'haml-lint %t' - -After: - unlet! b:conf - unlet! b:conf_hamllint - unlet! b:conf_rubocop - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'haml-lint', 'haml-lint %t' - -Execute(The command should have the .rubocop.yml prepended as an env var if one exists): - call ale#test#SetFilename('../test-files/hamllint/rubocop-yml/subdir/file.haml') - let b:conf = ale#path#Simplify(g:dir . '/../test-files/hamllint/rubocop-yml/.rubocop.yml') - - AssertLinter 'haml-lint', - \ ale#Env('HAML_LINT_RUBOCOP_CONF', b:conf) . 'haml-lint %t' - -Execute(The command should have the nearest .haml-lint.yml set as --config if it exists): - call ale#test#SetFilename('../test-files/hamllint/haml-lint-yml/subdir/file.haml') - let b:conf = ale#path#Simplify(g:dir . '/../test-files/hamllint/haml-lint-yml/.haml-lint.yml') - - AssertLinter 'haml-lint', - \ 'haml-lint --config ' . ale#Escape(b:conf) . ' %t', - -Execute(The command should include a .rubocop.yml and a .haml-lint if both are found): - call ale#test#SetFilename('../test-files/hamllint/haml-lint-and-rubocop/subdir/file.haml') - let b:conf_hamllint = ale#path#Simplify(g:dir . '/../test-files/hamllint/haml-lint-and-rubocop/.haml-lint.yml') - let b:conf_rubocop = ale#path#Simplify(g:dir . '/../test-files/hamllint/haml-lint-and-rubocop/.rubocop.yml') - - AssertLinter 'haml-lint', - \ ale#Env('HAML_LINT_RUBOCOP_CONF', b:conf_rubocop) - \ . 'haml-lint --config ' . ale#Escape(b:conf_hamllint) . ' %t' - -Execute(The executable can be overridden): - let b:ale_haml_hamllint_executable = 'bin/haml-lint' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'bin/haml-lint', 'bin/haml-lint %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_cabal_ghc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_cabal_ghc.vader deleted file mode 100644 index b4976b34..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_cabal_ghc.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'cabal_ghc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The options should be used in the command): - AssertLinterCwd '%s:h' - AssertLinter 'cabal', 'cabal exec -- ghc -fno-code -v0 %t' - - let b:ale_haskell_cabal_ghc_options = 'foobar' - - AssertLinter 'cabal', 'cabal exec -- ghc foobar %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc.vader deleted file mode 100644 index 2f33477d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'ghc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The options should be used in the command): - AssertLinter 'ghc', 'ghc -fno-code -v0 %t' - - let b:ale_haskell_ghc_options = 'foobar' - - AssertLinter 'ghc', 'ghc foobar %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc_mod.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc_mod.vader deleted file mode 100644 index c1cc8597..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_ghc_mod.vader +++ /dev/null @@ -1,10 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'ghc_mod') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Default should use ghc-mod): - AssertLinter - \ 'ghc-mod', - \ ale#Escape('ghc-mod') . ' --map-file %s=%t check %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hdevtools.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hdevtools.vader deleted file mode 100644 index 0ef2f0e3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hdevtools.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'hdevtools') - - let b:command_tail = ' check -g -Wall -p %s %t' - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'hdevtools', ale#Escape('hdevtools') . b:command_tail - - let b:ale_haskell_hdevtools_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . b:command_tail diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hie.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hie.vader deleted file mode 100644 index 3cababad..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hie.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'hie') - - Save &filetype - let &filetype = 'haskell' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'haskell' - -Execute(The default executable should be correct): - AssertLinter 'hie', - \ ale#Escape('hie') . ' --lsp' - -Execute(The project root should be detected correctly): - AssertLSPProject g:dir - - call ale#test#SetFilename('../test-files/hie_paths/file.hs') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/hie_paths') - -Execute(The executable should be configurable): - let g:ale_haskell_hie_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --lsp' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hlint.vader deleted file mode 100644 index 6d227c9d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hlint.vader +++ /dev/null @@ -1,17 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'hlint') - - let b:base_opts = '--color=never --json -' - -After: - unlet! b:base_opts - call ale#assert#TearDownLinterTest() - -Execute(executable should be configurable): - AssertLinter 'hlint', ale#Escape('hlint') . ' ' . b:base_opts - let b:ale_haskell_hlint_executable = 'myHlint' - AssertLinter 'myHlint', ale#Escape('myHlint') . ' ' . b:base_opts - -Execute(should accept options): - let b:ale_haskell_hlint_options= '-h myhlintfile.yaml' - AssertLinter 'hlint', ale#Escape('hlint') . ' -h myhlintfile.yaml ' . b:base_opts diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hls.vader deleted file mode 100644 index 4452d53c..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_hls.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'hls') - - Save &filetype - let &filetype = 'haskell' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'haskell' - -Execute(The default executable should be correct): - AssertLinter 'haskell-language-server-wrapper', - \ ale#Escape('haskell-language-server-wrapper') . ' --lsp' - -Execute(The project root should be detected correctly): - AssertLSPProject g:dir - - call ale#test#SetFilename('hls_paths/file.hs') - - AssertLSPProject ale#path#Simplify(g:dir . '/hls_paths') - -Execute(The executable should be configurable): - let g:ale_haskell_hls_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --lsp' - -Execute(Should accept configuration settings): - AssertLSPConfig {} - let b:ale_haskell_hls_config = {'haskell': {'maxCompletions': 250}} - AssertLSPConfig {'haskell': {'maxCompletions': 250}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_build.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_build.vader deleted file mode 100644 index 8b5b0971..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_build.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'stack_build') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The linter should not be executed when there's no stack.yaml file): - AssertLinterNotExecuted - -Execute(The linter should be executed when there is a stack.yaml file): - call ale#test#SetFilename('../test-files/stack/test.hs') - - AssertLinter 'stack', 'stack build --fast' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_ghc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_ghc.vader deleted file mode 100644 index 04bd23f5..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_haskell_stack_ghc.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('haskell', 'stack_ghc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The linter should not be executed when there's no stack.yaml file): - AssertLinterNotExecuted - -Execute(The linter should be executed when there is a stack.yaml file): - call ale#test#SetFilename('../test-files/stack/test.hs') - - AssertLinterCwd '%s:h' - AssertLinter 'stack', 'stack ghc -- -fno-code -v0 %t' - - let b:ale_haskell_stack_ghc_options = 'foobar' - - AssertLinter 'stack', 'stack ghc -- foobar %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_hdl_checker_options.vader b/dotfiles/.vim/plugged/ale/test/linter/test_hdl_checker_options.vader deleted file mode 100644 index 6e7eef46..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_hdl_checker_options.vader +++ /dev/null @@ -1,86 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('vhdl', 'hdl_checker') - - Save g:ale_hdl_checker_executable - Save g:ale_hdl_checker_config_file - Save g:ale_hdl_checker_options - - let g:default_config_file = has('unix') ? '.hdl_checker.config' : '_hdl_checker.config' - - runtime autoload/ale/handlers/hdl_checker.vim - -After: - Restore - - call ale#assert#TearDownLinterTest() - - unlet! g:default_config_file - unlet! g:call_count - - runtime autoload/ale/handlers/hdl_checker.vim - -Execute(Get default initialization dict): - AssertEqual - \ {'project_file': g:default_config_file}, - \ ale#handlers#hdl_checker#GetInitOptions(bufnr('')) - -Execute(Get custom initialization dict): - let g:ale_hdl_checker_config_file = 'some_file_name' - - AssertEqual - \ {'project_file': 'some_file_name'}, - \ ale#handlers#hdl_checker#GetInitOptions(bufnr('')) - -Execute(Get the checker command without extra user parameters): - AssertEqual - \ ale#Escape('hdl_checker') . ' --lsp', - \ ale#handlers#hdl_checker#GetCommand(bufnr('')) - -Execute(Get the checker command with user configured parameters): - let g:ale_hdl_checker_options = '--log-level DEBUG' - - AssertEqual - \ ale#Escape('hdl_checker') . ' --lsp --log-level DEBUG', - \ ale#handlers#hdl_checker#GetCommand(bufnr('')) - -Execute(Customize executable): - let g:ale_hdl_checker_executable = '/some/other/path' - AssertEqual - \ ale#Escape('/some/other/path') . ' --lsp', - \ ale#handlers#hdl_checker#GetCommand(bufnr('')) - -Execute(Get project root based on .git): - call ale#test#SetFilename('../test-files/hdl_server/with_git/files/foo.vhd') - " Create .git file - silent! call mkdir(g:dir . '/../test-files/hdl_server/with_git/.git') - AssertNotEqual '', glob(g:dir . '/../test-files/hdl_server/with_git/.git') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/hdl_server/with_git'), - \ ale#handlers#hdl_checker#GetProjectRoot(bufnr('')) - -Execute(Get project root based on config file): - call ale#test#SetFilename('../test-files/hdl_server/with_config_file/foo.vhd') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/hdl_server/with_config_file'), - \ ale#handlers#hdl_checker#GetProjectRoot(bufnr('')) - -Execute(Return no project root if neither .git or config file are found): - let g:call_count = 0 - - " Mock this command to avoid the test to find ale's own .git folder - function! ale#handlers#hdl_checker#IsDotGit(path) abort - let g:call_count += 1 - return 0 - endfunction - - call ale#test#SetFilename('../test-files/hdl_server/foo.vhd') - - AssertEqual - \ '', - \ ale#handlers#hdl_checker#GetProjectRoot(bufnr('')) - - AssertEqual g:call_count, 1 - - unlet! g:call_count diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_html_stylelint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_html_stylelint.vader deleted file mode 100644 index c5ac1b98..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_html_stylelint.vader +++ /dev/null @@ -1,60 +0,0 @@ -Before: - Save g:ale_html_stylelint_executable - Save g:ale_html_stylelint_use_global - Save g:ale_html_stylelint_options - - unlet! b:executable - - unlet! g:ale_html_stylelint_executable - unlet! g:ale_html_stylelint_use_global - unlet! g:ale_html_stylelint_options - - call ale#test#SetDirectory('/testplugin/test/linter') - call ale#test#SetFilename('testfile.html') - - runtime ale_linters/html/stylelint.vim - -After: - Restore - - unlet! b:executable - unlet! b:ale_html_stylelint_executable - unlet! b:ale_html_stylelint_use_global - unlet! b:ale_html_stylelint_options - - call ale#test#SetFilename('test.txt') - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(node_modules directories should be discovered): - call ale#test#SetFilename('../test-files/stylelint/nested/testfile.html') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/stylelint/node_modules/.bin/stylelint' - \) - - AssertEqual b:executable, ale_linters#html#stylelint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape(b:executable) . ' --stdin-filename %s', - \ ale_linters#html#stylelint#GetCommand(bufnr('')) - -Execute(The global override should work): - let b:ale_html_stylelint_executable = 'foobar' - let b:ale_html_stylelint_use_global = 1 - - call ale#test#SetFilename('../test-files/stylelint/nested/testfile.html') - - AssertEqual 'foobar', ale_linters#html#stylelint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('foobar') . ' --stdin-filename %s', - \ ale_linters#html#stylelint#GetCommand(bufnr('')) - -Execute(Extra options should be configurable): - let b:ale_html_stylelint_options = '--whatever' - - AssertEqual 'stylelint', ale_linters#html#stylelint#GetExecutable(bufnr('')) - AssertEqual - \ ale#Escape('stylelint') . ' --whatever --stdin-filename %s', - \ ale_linters#html#stylelint#GetCommand(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_htmlhint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_htmlhint.vader deleted file mode 100644 index df5797af..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_htmlhint.vader +++ /dev/null @@ -1,51 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('html', 'htmlhint') - call ale#test#SetFilename('../test-files/htmlhint/test.html') - - let g:node_executable = ale#path#Simplify( - \ g:dir . '/../test-files/htmlhint/node_modules/.bin/htmlhint' - \) - let g:config_path = ale#path#Simplify( - \ g:dir . '/../test-files/htmlhint/with_config/.htmlhintrc' - \) - -After: - unlet! g:node_executable - unlet! g:config_path - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter g:node_executable, - \ ale#Escape(g:node_executable) . ' --format=unix %t' - -Execute(The global executable should be uesd if the option is set): - let g:ale_html_htmlhint_executable = 'foo' - let g:ale_html_htmlhint_use_global = 1 - - AssertLinter 'foo', ale#Escape('foo') . ' --format=unix %t', - -" This is so old configurations which might include this still work. -Execute(--format=unix should be removed from the options if added): - let g:ale_html_htmlhint_options = '--format=unix' - - AssertLinter g:node_executable, - \ ale#Escape(g:node_executable) . ' --format=unix %t' - -Execute(The configuration file should be automatically detected): - call ale#test#SetFilename('../test-files/htmlhint/with_config/test.html') - - AssertLinter g:node_executable, - \ ale#Escape(g:node_executable) - \ . ' --config ' . ale#Escape(g:config_path) - \ . ' --format=unix %t' - -" This is so old configurations which might include the config will work. -Execute(The configuration file should be configurable through the options variable): - call ale#test#SetFilename('../test-files/htmlhint/with_config/test.html') - let g:ale_html_htmlhint_options = '--config=/foo/bar/.htmlhintrc' - - AssertLinter g:node_executable, - \ ale#Escape(g:node_executable) - \ . ' --config=/foo/bar/.htmlhintrc' - \ . ' --format=unix %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ibm_openapi_validator.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ibm_openapi_validator.vader deleted file mode 100644 index 3484cc09..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ibm_openapi_validator.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('openapi', 'ibm_validator') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The yaml ibm-openapi-validator command callback should return the correct default string): - AssertLinter 'lint-openapi', ale#Escape('lint-openapi') . ' %t' - -Execute(The yaml ibm-openapi-validator command callback should be configurable): - let g:ale_openapi_ibm_validator_executable = '~/.local/bin/lint-openapi' - let g:ale_openapi_ibm_validator_options = '-c ~/.config' - - AssertLinter '~/.local/bin/lint-openapi', ale#Escape('~/.local/bin/lint-openapi') - \ . ' -c ~/.config %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_idris.vader b/dotfiles/.vim/plugged/ale/test/linter/test_idris.vader deleted file mode 100644 index ce7cd270..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_idris.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('idris', 'idris') - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be used in the command): - AssertLinter 'idris', - \ ale#Escape('idris') . ' --total --warnpartial --warnreach --warnipkg --check %s' - - let b:ale_idris_idris_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' --total --warnpartial --warnreach --warnipkg --check %s' - -Execute(The options should be configurable): - let b:ale_idris_idris_options = '--something' - - AssertLinter 'idris', ale#Escape('idris') . ' --something --check %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ink_ls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ink_ls.vader deleted file mode 100644 index a832a250..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ink_ls.vader +++ /dev/null @@ -1,22 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ink', 'ls') - set ft=ink - -After: - call ale#assert#TearDownLinterTest() - -Execute(should set correct defaults): - AssertLinter 'ink-language-server', ale#Escape('ink-language-server') . ' --stdio' - -Execute(should set correct LSP values): - call ale#test#SetFilename('../test-files/ink/story/main.ink') - - AssertLSPLanguage 'ink' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ink/story') - -Execute(should accept configuration settings): - AssertLSPConfig {} - let b:ale_ink_ls_initialization_options = {'ink': {'runThroughMono': v:true}} - AssertLSPOptions {'ink': {'runThroughMono': v:true}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_inko_inko.vader b/dotfiles/.vim/plugged/ale/test/linter/test_inko_inko.vader deleted file mode 100644 index c08cbed4..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_inko_inko.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('inko', 'inko') - call ale#test#SetFilename('../test-files/inko/test.inko') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'inko', ale#Escape('inko') . ' build --check --format=json %s' - -Execute(The inko callback should include tests/ for test paths): - call ale#engine#Cleanup(bufnr('')) - noautocmd e! ../test-files/inko/tests/test/test_foo.inko - call ale#engine#InitBufferInfo(bufnr('')) - - AssertLinter 'inko', - \ ale#Escape('inko') - \ . ' build --check --format=json --include ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/inko/tests/')) - \ . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ispc_ispc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ispc_ispc.vader deleted file mode 100644 index f1aeb2f8..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ispc_ispc.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ispc', 'ispc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'ispc', - \ ale#Escape('ispc') . ' --nowrap %s' - - let b:ale_ispc_ispc_executable = 'foo' - - AssertLinter 'foo', - \ ale#Escape('foo') . ' --nowrap %s' - -Execute(The options should be configurable): - let g:ale_ispc_ispc_options = '--foo' - - AssertLinter 'ispc', - \ ale#Escape('ispc') . ' --nowrap --foo' . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_iverilog.vader b/dotfiles/.vim/plugged/ale/test/linter/test_iverilog.vader deleted file mode 100644 index d7a29f05..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_iverilog.vader +++ /dev/null @@ -1,14 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('verilog', 'iverilog') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default iverilog command should be correct): - AssertLinter 'iverilog', 'iverilog -t null -Wall %t' - -Execute(iverilog options should be configurable): - " Additional args for the linter - let g:ale_verilog_iverilog_options = '-y.' - - AssertLinter 'iverilog', 'iverilog -t null -Wall -y. %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_javac.vader b/dotfiles/.vim/plugged/ale/test/linter/test_javac.vader deleted file mode 100644 index 85a76e6a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_javac.vader +++ /dev/null @@ -1,326 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('java', 'javac') - call ale#test#SetFilename('dummy.java') - - let g:cp_sep = has('unix') ? ':' : ';' - let g:prefix = ale#Escape('javac') . ' -Xlint' - - function! GetCommand(previous_output) abort - let l:command = ale_linters#java#javac#GetCommand( - \ bufnr(''), - \ a:previous_output - \) - - let l:split_command = split(l:command) - let l:index = index(l:split_command, '-d') - - let l:split_command[l:index + 1] = 'TEMP' - - return join(l:split_command) - endfunction - -After: - unlet! g:cp_sep - unlet! g:prefix - - delfunction GetCommand - - call ale#assert#TearDownLinterTest() - -Execute(The javac callback should return the correct default value): - AssertLinterCwd '%s:h' - AssertLinter 'javac', g:prefix . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback should use string type g:ale_java_javac_classpath correctly): - let g:ale_java_javac_classpath = 'foo.jar' - - AssertLinter 'javac', - \ g:prefix - \ . ' -cp ' . ale#Escape('foo.jar') - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback should use list type g:ale_java_javac_classpath correctly): - let g:ale_java_javac_classpath = ['foo.jar'] - - AssertLinter 'javac', - \ g:prefix - \ . ' -cp ' . ale#Escape('foo.jar') - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The executable should be configurable): - let g:ale_java_javac_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -Xlint' - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback should include discovered classpaths): - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \], {}) - - AssertEqual - \ g:prefix - \ . ' -cp ' - \ . ale#Escape(join(['/foo/bar.jar', '/xyz/abc.jar'], g:cp_sep)) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - -Execute(The javac callback should combine discovered classpaths and manual ones): - let g:ale_java_javac_classpath = 'configured.jar' - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \], {}) - - AssertEqual - \ g:prefix - \ . ' -cp ' - \ . ale#Escape(join( - \ [ - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \ 'configured.jar', - \ ], - \ g:cp_sep - \ )) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - - let g:ale_java_javac_classpath = 'configured.jar' . g:cp_sep . 'configured2.jar' - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \], {}) - - AssertEqual - \ g:prefix - \ . ' -cp ' - \ . ale#Escape(join( - \ [ - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \ 'configured.jar', - \ 'configured2.jar', - \ ], - \ g:cp_sep - \ )) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - - let g:ale_java_javac_classpath = ['configured.jar'] - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \], {}) - - AssertEqual - \ g:prefix - \ . ' -cp ' - \ . ale#Escape(join( - \ [ - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \ 'configured.jar', - \ ], - \ g:cp_sep - \ )) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - - let g:ale_java_javac_classpath = ['configured.jar', 'configured2.jar'] - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \], {}) - - AssertEqual - \ g:prefix - \ . ' -cp ' - \ . ale#Escape(join( - \ [ - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \ 'configured.jar', - \ 'configured2.jar', - \ ], - \ g:cp_sep - \ )) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - -Execute(The javac callback should use string type g:ale_java_javac_sourcepath correctly): - let g:ale_java_javac_sourcepath = '../test-files/java/with_main/build/gen/main' - - AssertLinter 'javac', - \ g:prefix - \ . ' -sourcepath ' . ale#Escape( - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/build/gen/main/') - \ ) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback should use list type g:ale_java_javac_sourcepath correctly): - let g:ale_java_javac_sourcepath = ['../test-files/java/with_main/build/gen/main'] - - AssertLinter 'javac', - \ g:prefix - \ . ' -sourcepath ' . ale#Escape( - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/build/gen/main/') - \ ) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback shouldn't add -sourcepath when g:ale_java_javac_sourcepath variable path doesn't exist): - let g:ale_java_javac_sourcepath = '../test-files/java/with_main/build/gen3/main' - - AssertLinter 'javac', - \ g:prefix - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback should combine discovered sourcepath and manual ones): - call ale#engine#Cleanup(bufnr('')) - call ale#test#SetFilename('../test-files/java/with_main/src/main/java/com/something/dummy.java') - call ale#engine#InitBufferInfo(bufnr('')) - - let g:ale_java_javac_sourcepath = '../test-files/java/with_main/build/gen/main' - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [], {}) - - AssertEqual - \ ale#Escape('javac') . ' -Xlint' - \ . ' -sourcepath ' . ale#Escape(join([ - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/src/main/java/'), - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/build/gen/main/'), - \ ], g:cp_sep)) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - - let g:ale_java_javac_sourcepath = '../test-files/java/with_main/build/gen/main' - \ . g:cp_sep . '../test-files/java/with_main/build/gen2/main' - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [], {}) - - AssertEqual - \ ale#Escape('javac') . ' -Xlint' - \ . ' -sourcepath ' . ale#Escape(join([ - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/src/main/java/'), - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/build/gen/main/'), - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/build/gen2/main/') - \ ], g:cp_sep)) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - - let g:ale_java_javac_sourcepath = ['../test-files/java/with_main/build/gen/main'] - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [], {}) - - AssertEqual - \ ale#Escape('javac') . ' -Xlint' - \ . ' -sourcepath ' . ale#Escape(join([ - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/src/main/java/'), - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/build/gen/main/') - \ ], g:cp_sep)) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - - let g:ale_java_javac_sourcepath = [ - \ '../test-files/java/with_main/build/gen/main', - \ '../test-files/java/with_main/build/gen2/main' - \ ] - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [], {}) - - AssertEqual - \ ale#Escape('javac') . ' -Xlint' - \ . ' -sourcepath ' . ale#Escape(join([ - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/src/main/java/'), - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/build/gen/main/'), - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/build/gen2/main/') - \ ], g:cp_sep)) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - -Execute(The javac callback should detect source directories): - call ale#engine#Cleanup(bufnr('')) - noautocmd e! ../test-files/java/with_main/src/main/java/com/something/dummy - call ale#engine#InitBufferInfo(bufnr('')) - - AssertLinter 'javac', - \ ale#Escape('javac') . ' -Xlint' - \ . ' -sourcepath ' . ale#Escape( - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/src/main/java/') - \ ) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback should combine detected source directories and classpaths): - call ale#engine#Cleanup(bufnr('')) - call ale#test#SetFilename('../test-files/java/with_main/src/main/java/com/something/dummy.java') - call ale#engine#InitBufferInfo(bufnr('')) - - let b:command = ale_linters#java#javac#GetCommand(bufnr(''), [ - \ '[DEBUG] Ignore this.', - \ '[INFO] Something we should ignore.', - \ '/foo/bar.jar', - \ '/xyz/abc.jar', - \], {}) - - AssertEqual - \ ale#Escape('javac') . ' -Xlint' - \ . ' -cp ' . ale#Escape(join(['/foo/bar.jar', '/xyz/abc.jar'], g:cp_sep)) - \ . ' -sourcepath ' . ale#Escape( - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/src/main/java/') - \ ) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t', - \ substitute(b:command, '%e', '\=ale#Escape(''javac'')', 'g') - -Execute(The javac callback should use g:ale_java_javac_options correctly): - let g:ale_java_javac_options = '--anything --else' - - AssertLinter 'javac', - \ g:prefix . ' -d ' . ale#Escape('TEMP_DIR') . ' --anything --else %t' - -Execute(The javac callback should include src/test/java for test paths): - call ale#engine#Cleanup(bufnr('')) - " The test path is only included for test files. - " Regular Java files shouldn't import from tests. - noautocmd e! ../test-files/java/with_main/src/test/java/com/something/dummy - call ale#engine#InitBufferInfo(bufnr('')) - - AssertLinter 'javac', - \ ale#Escape('javac') . ' -Xlint' - \ . ' -sourcepath ' . ale#Escape(join([ - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/src/main/java/'), - \ ale#path#Simplify(g:dir . '/../test-files/java/with_main/src/test/java/'), - \ ], g:cp_sep)) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback should include src/main/jaxb when available): - call ale#engine#Cleanup(bufnr('')) - noautocmd e! ../test-files/java/with_jaxb/src/main/java/com/something/dummy - call ale#engine#InitBufferInfo(bufnr('')) - - AssertLinter 'javac', - \ ale#Escape('javac') . ' -Xlint' - \ . ' -sourcepath ' . ale#Escape(join([ - \ ale#path#Simplify(g:dir . '/../test-files/java/with_jaxb/src/main/java/'), - \ ale#path#Simplify(g:dir . '/../test-files/java/with_jaxb/src/main/jaxb/'), - \ ], g:cp_sep)) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' - -Execute(The javac callback should add -sourcepath even if src/java/main doesn't exist): - call ale#engine#Cleanup(bufnr('')) - call ale#test#SetFilename('../test-files/java/no_main/src/test/java/com/something/dummy.java') - call ale#engine#InitBufferInfo(bufnr('')) - - AssertLinter 'javac', - \ ale#Escape('javac') . ' -Xlint' - \ . ' -sourcepath ' . ale#Escape(join([ - \ ale#path#Simplify(g:dir . '/../test-files/java/no_main/src/test/java/'), - \ ], g:cp_sep)) - \ . ' -d ' . ale#Escape('TEMP_DIR') . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_javalsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_javalsp.vader deleted file mode 100644 index 122f409b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_javalsp.vader +++ /dev/null @@ -1,80 +0,0 @@ - -Before: - call ale#assert#SetUpLinterTest('java', 'javalsp') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The javalsp callback should return the correct default value): - AssertLinter '', ale#Escape('') - -Execute(The javalsp java executable should be configurable): - let b:ale_java_javalsp_executable = '/bin/foobar' - - AssertLinter '/bin/foobar', ale#Escape('/bin/foobar') - -Execute(The javalsp callback should return backward compatible value): - let b:ale_java_javalsp_executable = '/bin/java' - let cmd = [ - \ ale#Escape('/bin/java'), - \ '--add-exports jdk.compiler/com.sun.tools.javac.api=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.code=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.comp=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.main=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.tree=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.model=javacs', - \ '--add-exports jdk.compiler/com.sun.tools.javac.util=javacs', - \ '--add-opens jdk.compiler/com.sun.tools.javac.api=javacs', - \ '-m javacs/org.javacs.Main', - \] - AssertLinter '/bin/java', join(cmd, ' ') - -Execute(The javalsp should have default config): - AssertEqual - \ { - \ 'java': { - \ 'classPath': [], - \ 'externalDependencies': [] - \ } - \ }, - \ ale_linters#java#javalsp#Config(bufnr('')) - -Execute(The javalsp should have default config if user sets empty hash): - let b:ale_java_javalsp_config = {} - - AssertEqual - \ { - \ 'java': { - \ 'classPath': [], - \ 'externalDependencies': [] - \ } - \ }, - \ ale_linters#java#javalsp#Config(bufnr('')) - -Execute(The javalsp should have add missing config): - let b:ale_java_javalsp_config = { 'java': { 'classPath': ['aaa.jar'] } } - - AssertEqual - \ { - \ 'java': { - \ 'classPath': ['aaa.jar'], - \ 'externalDependencies': [] - \ } - \ }, - \ ale_linters#java#javalsp#Config(bufnr('')) - - let b:ale_java_javalsp_config = - \ { - \ 'java': { - \ 'externalDependencies': ['unit-test:2.0.0'] - \ } - \ } - - AssertEqual - \ { - \ 'java': { - \ 'classPath': [], - \ 'externalDependencies': ['unit-test:2.0.0'] - \ } - \ }, - \ ale_linters#java#javalsp#Config(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_javascript_deno_lsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_javascript_deno_lsp.vader deleted file mode 100644 index 965ce600..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_javascript_deno_lsp.vader +++ /dev/null @@ -1,79 +0,0 @@ -Before: - let g:ale_deno_importMap = 'import_map.json' - let g:ale_deno_unstable = 0 - let g:ale_deno_executable = 'deno' - let g:ale_deno_lsp_project_root = '' - - runtime autoload/ale/handlers/deno.vim - call ale#assert#SetUpLinterTest('javascript', 'deno') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Should set deno lsp for JavaScript projects using stable Deno API): - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:false, - \ 'importMap': '' - \} - -Execute(Should set deno lsp using unstable Deno API if enabled by user): - let g:ale_deno_unstable = 1 - - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:true, - \ 'importMap': '' - \} - -Execute(Should set the default importMap filepath): - call ale#test#SetFilename('../test-files/javascript_deno/main.js') - - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:false, - \ 'importMap': ale#path#Simplify(g:dir . '/../test-files/javascript_deno/import_map.json') - \} - -Execute(Should set the importMap filepath from user defined importMap): - let g:ale_deno_importMap = 'custom_import_map.json' - call ale#test#SetFilename('../test-files/javascript_deno/main.js') - - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:false, - \ 'importMap': ale#path#Simplify(g:dir . '/../test-files/javascript_deno/custom_import_map.json') - \} - -Execute(Should set the importMap filepath from user defined importMap with unstable API): - let g:ale_deno_importMap = 'custom_import_map.json' - let g:ale_deno_unstable = 1 - call ale#test#SetFilename('../test-files/javascript_deno/main.js') - - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:true, - \ 'importMap': ale#path#Simplify(g:dir . '/../test-files/javascript_deno/custom_import_map.json') - \} - -Execute(Should find project root containing tsconfig.json): - call ale#test#SetFilename('../test-files/javascript_deno/main.js') - - AssertLSPLanguage 'javascript' - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/javascript_deno') - -Execute(Should use user-specified project root): - let g:ale_deno_lsp_project_root = '/' - - call ale#test#SetFilename('../test-files/javascript_deno/main.js') - - AssertLSPLanguage 'javascript' - AssertLSPProject '/' - -Execute(Check Deno LSP command): - AssertLinter 'deno', ale#Escape('deno') . ' lsp' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_javascript_tsserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_javascript_tsserver.vader deleted file mode 100644 index 1c29c8fd..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_javascript_tsserver.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('javascript', 'tsserver') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'tsserver', ale#Escape('tsserver') - -Execute(should resolve correct path when nested 1): - call ale#test#SetFilename('../test-files/tsserver/src/level-1/level-2/file3.ts') - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/tsserver/src/level-1') - -Execute(should resolve correct path when nested 2): - call ale#test#SetFilename('../test-files/tsserver/src/file1.ts') - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/tsserver') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_jq.vader b/dotfiles/.vim/plugged/ale/test/linter/test_jq.vader deleted file mode 100644 index 20c3db5b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_jq.vader +++ /dev/null @@ -1,8 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('json', 'jq') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'jq', ale#Escape('jq') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_jscs.vader b/dotfiles/.vim/plugged/ale/test/linter/test_jscs.vader deleted file mode 100644 index 7cdf5467..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_jscs.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('javascript', 'jscs') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Should return the correct default values): - AssertLinter 'jscs', - \ ale#Escape('jscs') . ' --reporter inline --no-colors -' - -Execute(Should allow using a custom executable): - let g:ale_javascript_jscs_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' --reporter inline --no-colors -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_jshint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_jshint.vader deleted file mode 100644 index 517c957c..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_jshint.vader +++ /dev/null @@ -1,17 +0,0 @@ -Before: - Save g:ale_jshint_config_loc - - unlet! g:ale_jshint_config_loc - - call ale#assert#SetUpLinterTest('javascript', 'jshint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'jshint', ale#Escape('jshint') . ' --reporter unix --extract auto --filename %s -' - -Execute(Setting a config location should add the config parameter): - let g:ale_jshint_config_loc = '/some/file' - - AssertLinter 'jshint', ale#Escape('jshint') . ' --reporter unix --extract auto --config ' . ale#Escape('/some/file') . ' --filename %s -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_jsonnet_lint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_jsonnet_lint.vader deleted file mode 100644 index 529ae008..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_jsonnet_lint.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('jsonnet', 'jsonnet_lint') - call ale#test#SetFilename('../jsonnet_files/testfile.jsonnet') - -After: - Restore - - call ale#assert#TearDownLinterTest() - -Execute(The default jsonnet-lint command should be correct): - AssertLinter 'jsonnet-lint', - \ ale#Escape('jsonnet-lint') . ' %t' - -Execute(jsonnet-lint command and options should be customizable): - let g:ale_jsonnet_jsonnet_lint_executable = 'jsonnet' - let g:ale_jsonnet_jsonnet_lint_options = 'fmt' - - AssertLinter 'jsonnet', - \ ale#Escape('jsonnet') . ' fmt %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_jsonnetfmt.vader b/dotfiles/.vim/plugged/ale/test/linter/test_jsonnetfmt.vader deleted file mode 100644 index d070cd9f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_jsonnetfmt.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('jsonnet', 'jsonnetfmt') - call ale#test#SetFilename('../jsonnet_files/testfile.jsonnet') - -After: - Restore - - call ale#assert#TearDownLinterTest() - -Execute(The default jsonnetfmt command should be correct): - AssertLinter 'jsonnetfmt', - \ ale#Escape('jsonnetfmt') . ' %t' - -Execute(jsonnetfmt command and options should be customizable): - let g:ale_jsonnet_jsonnetfmt_executable = 'jsonnet' - let g:ale_jsonnet_jsonnetfmt_options = 'fmt' - - AssertLinter 'jsonnet', - \ ale#Escape('jsonnet') . ' fmt %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_julia_languageserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_julia_languageserver.vader deleted file mode 100644 index d75665a0..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_julia_languageserver.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - Save g:ale_julia_executable - - call ale#assert#SetUpLinterTest('julia', 'languageserver') - -After: - Restore - - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'julia', - \ ale#Escape('julia') . - \' --project=@. --startup-file=no --history-file=no -e ' . - \ ale#Escape('using LanguageServer; using Pkg; import StaticLint; import SymbolServer; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, dirname(Pkg.Types.Context().env.project_file)); server.runlinter = true; run(server);') - -Execute(The executable should be configurable): - let g:ale_julia_executable = 'julia-new' - - AssertLinter 'julia-new', - \ ale#Escape('julia-new') . - \' --project=@. --startup-file=no --history-file=no -e ' . - \ ale#Escape('using LanguageServer; using Pkg; import StaticLint; import SymbolServer; server = LanguageServer.LanguageServerInstance(isdefined(Base, :stdin) ? stdin : STDIN, isdefined(Base, :stdout) ? stdout : STDOUT, dirname(Pkg.Types.Context().env.project_file)); server.runlinter = true; run(server);') - -Execute(The project root should be detected correctly): - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/julia/test.jl') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/julia') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_kotlin_languageserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_kotlin_languageserver.vader deleted file mode 100644 index 97b867ab..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_kotlin_languageserver.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('kotlin', 'languageserver') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'kotlin-language-server', ale#Escape('kotlin-language-server') - -Execute(Gradle project roots with build.gradle should be detected correctly): - call ale#test#SetFilename('../test-files/gradle/build-gradle-project/src/main/kotlin/dummy.kt') - - AssertLSPProject ale#test#GetFilename('../test-files/gradle/build-gradle-project') - -Execute(Maven project roots with pom.xml should be detected correctly): - call ale#test#SetFilename('../test-files/maven/maven-kotlin-project/src/main/kotlin/dummy.kt') - - AssertLSPProject ale#test#GetFilename('../test-files/maven/maven-kotlin-project') - -Execute(No root should be detected if configuration files can't be found): - call ale#test#SetFilename('../test-files/gradle/non-gradle-project/src/main/kotlin/dummy.kt') - - AssertLSPProject '' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_kotlinc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_kotlinc.vader deleted file mode 100644 index fe94bffa..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_kotlinc.vader +++ /dev/null @@ -1,9 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('kotlin', 'kotlinc') - call ale#test#SetFilename('test.kt') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'kotlinc', 'kotlinc ' . ale#Escape(expand('%:p')) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_languagetool.vader b/dotfiles/.vim/plugged/ale/test/linter/test_languagetool.vader deleted file mode 100644 index ff6b2064..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_languagetool.vader +++ /dev/null @@ -1,22 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('text', 'languagetool') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'languagetool', ale#Escape('languagetool') - \ . ' --autoDetect %s' - -Execute(Should be able to set a custom executable): - let g:ale_languagetool_executable = 'foobar' - - AssertLinter 'foobar' , ale#Escape('foobar') - \ . ' --autoDetect %s' - -Execute(Should be able to include custom languagetool options): - let g:ale_languagetool_options = '--language en' - - " is now 'foobar' based on above global - AssertLinter 'foobar', ale#Escape('foobar') - \ . ' --language en %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_less_stylelint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_less_stylelint.vader deleted file mode 100644 index c27af79e..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_less_stylelint.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('less', 'stylelint') - unlet! b:executable - -After: - unlet! b:executable - call ale#assert#TearDownLinterTest() - -Execute(node_modules directories should be discovered): - call ale#test#SetFilename('../test-files/stylelint/nested/testfile.less') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/stylelint/node_modules/.bin/stylelint' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' --stdin-filename %s' - -Execute(The global override should work): - let b:ale_less_stylelint_executable = 'foobar' - let b:ale_less_stylelint_use_global = 1 - - call ale#test#SetFilename('../test-files/stylelint/nested/testfile.less') - - AssertLinter 'foobar', ale#Escape('foobar') . ' --stdin-filename %s' - -Execute(Extra options should be configurable): - let b:ale_less_stylelint_options = '--whatever' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'stylelint', - \ ale#Escape('stylelint') . ' --whatever --stdin-filename %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_lessc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_lessc.vader deleted file mode 100644 index b7d664c6..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_lessc.vader +++ /dev/null @@ -1,46 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('less', 'lessc') - call ale#test#SetFilename('testfile.less') - - unlet! b:executable - -After: - unlet! b:executable - - call ale#assert#TearDownLinterTest() - -Execute(node_modules directories should be discovered): - call ale#test#SetFilename('../test-files/lessc/nested/testfile.less') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/lessc/node_modules/.bin/lessc' - \) - - AssertLinter b:executable, ale#Escape(b:executable) - \ . ' --no-color --lint' - \ . ' --include-path=' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/lessc/nested')) - \ . ' -' - -Execute(The global override should work): - let b:ale_less_lessc_executable = 'foobar' - let b:ale_less_lessc_use_global = 1 - - call ale#test#SetFilename('../test-files/lessc/nested/testfile.less') - - AssertLinter 'foobar', ale#Escape('foobar') - \ . ' --no-color --lint' - \ . ' --include-path=' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/lessc/nested')) - \ . ' -' - -Execute(Extra options should be configurable): - let b:ale_less_lessc_options = '--whatever' - - AssertLinter 'lessc', ale#Escape('lessc') - \ . ' --no-color --lint' - \ . ' --include-path=' - \ . ale#Escape(ale#path#Simplify(g:dir)) - \ . ' --whatever' - \ . ' -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_lintr.vader b/dotfiles/.vim/plugged/ale/test/linter/test_lintr.vader deleted file mode 100644 index 8f6fb88f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_lintr.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('r', 'lintr') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default lintr command should be correct): - AssertLinterCwd '%s:h' - AssertLinter 'Rscript', - \ 'Rscript --no-save --no-restore --no-site-file --no-init-file -e ' - \ . ale#Escape('suppressPackageStartupMessages(library(lintr));' - \ . 'lint(cache = FALSE, commandArgs(TRUE), ' - \ . 'with_defaults())') - \ . ' %t' - -Execute(The lintr options should be configurable): - let b:ale_r_lintr_options = 'with_defaults(object_usage_linter = NULL)' - - AssertLinter 'Rscript', - \ 'Rscript --no-save --no-restore --no-site-file --no-init-file -e ' - \ . ale#Escape('suppressPackageStartupMessages(library(lintr));' - \ . 'lint(cache = FALSE, commandArgs(TRUE), ' - \ . 'with_defaults(object_usage_linter = NULL))') - \ . ' %t' - -Execute(If the lint_package flag is set, lintr::lint_package should be called): - let b:ale_r_lintr_lint_package = 1 - - AssertLinter 'Rscript', - \ 'Rscript --no-save --no-restore --no-site-file --no-init-file -e ' - \ . ale#Escape('suppressPackageStartupMessages(library(lintr));' - \ . 'lint_package(cache = FALSE, ' - \ . 'linters = with_defaults())') - \ . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_llc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_llc.vader deleted file mode 100644 index a0caaa48..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_llc.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('llvm', 'llc') - - function! AssertHasPrefix(str, prefix) abort - let msg = printf("'%s' is expected to be prefixed with '%s'", a:str, a:prefix) - AssertEqual stridx(a:str, a:prefix), 0, msg - endfunction - -After: - delfunction AssertHasPrefix - - call ale#assert#TearDownLinterTest() - -Execute(The llc command should be customizable): - AssertLinter 'llc', - \ ale#Escape('llc') . ' -filetype=null -o=' . g:ale#util#nul_file - - let g:ale_llvm_llc_executable = 'llc-5.0' - - AssertLinter 'llc-5.0', - \ ale#Escape('llc-5.0') . ' -filetype=null -o=' . g:ale#util#nul_file diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_lua_selene.vader b/dotfiles/.vim/plugged/ale/test/linter/test_lua_selene.vader deleted file mode 100644 index 7387bace..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_lua_selene.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('lua', 'selene') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The lua selene command callback should return the correct default string): - AssertLinter 'selene', ale#Escape('selene') . ' --display-style=json -' - -Execute(The lua selene command callback should let you set options): - let g:ale_lua_selene_options = '--num-threads 2' - - AssertLinter 'selene', - \ ale#Escape('selene') . ' --num-threads 2 --display-style=json -' - -Execute(The selene executable should be configurable): - let g:ale_lua_selene_executable = 'selene.sh' - - AssertLinter 'selene.sh', ale#Escape('selene.sh') . ' --display-style=json -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_luac.vader b/dotfiles/.vim/plugged/ale/test/linter/test_luac.vader deleted file mode 100644 index 55f39cba..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_luac.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('lua', 'luac') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'luac', ale#Escape('luac') . ' -p -' - -Execute(The luac executable should be configurable): - let g:ale_lua_luac_executable = 'luac.sh' - - AssertLinter 'luac.sh', ale#Escape('luac.sh') . ' -p -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_luacheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_luacheck.vader deleted file mode 100644 index f0ef221c..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_luacheck.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('lua', 'luacheck') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The lua luacheck command callback should return the correct default string): - AssertLinter 'luacheck', - \ ale#Escape('luacheck') . ' --formatter plain --codes --filename %s -' - -Execute(The lua luacheck command callback should let you set options): - let g:ale_lua_luacheck_options = '--config filename' - - AssertLinter 'luacheck', - \ ale#Escape('luacheck') - \ . ' --config filename' - \ . ' --formatter plain --codes --filename %s -' - -Execute(The luacheck executable should be configurable): - let g:ale_lua_luacheck_executable = 'luacheck.sh' - - AssertLinter 'luacheck.sh', - \ ale#Escape('luacheck.sh') . ' --formatter plain --codes --filename %s -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_markdown_markdownlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_markdown_markdownlint.vader deleted file mode 100644 index 12766cfd..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_markdown_markdownlint.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('markdown', 'markdownlint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'markdownlint', ale#Escape('markdownlint') . ' %s' - -Execute(The options should be configurable): - let g:ale_markdown_markdownlint_options = '--config ~/custom/.markdownlintrc' - - AssertLinter 'markdownlint', ale#Escape('markdownlint') . ' --config ~/custom/.markdownlintrc %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_markdown_mdl.vader b/dotfiles/.vim/plugged/ale/test/linter/test_markdown_mdl.vader deleted file mode 100644 index 1ce4db1a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_markdown_mdl.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('markdown', 'mdl') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'mdl', ale#Escape('mdl') . ' -j' - -Execute(The executable and options should be configurable): - let g:ale_markdown_mdl_executable = 'foo bar' - let g:ale_markdown_mdl_options = '--wat' - - AssertLinter 'foo bar', ale#Escape('foo bar') . ' -j --wat' - -Execute(Setting bundle appends 'exec mdl'): - let g:ale_markdown_mdl_executable = 'path to/bundle' - - AssertLinter 'path to/bundle', ale#Escape('path to/bundle') . ' exec mdl -j' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_markdown_vale.vader b/dotfiles/.vim/plugged/ale/test/linter/test_markdown_vale.vader deleted file mode 100644 index 5300805b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_markdown_vale.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('markdown', 'vale') - call ale#test#SetFilename('dummy.md') - - let g:ale_markdown_vale_executable = 'vale' - let g:ale_markdown_vale_input_file = '%t' - let g:ale_markdown_vale_options = '' - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to vale): - AssertLinter 'vale', ale#Escape('vale') - \ . ' --output=JSON %t' - -Execute(Should be able to set a custom executable): - let g:ale_markdown_vale_executable = 'bin/vale' - - AssertLinter 'bin/vale' , ale#Escape('bin/vale') - \ . ' --output=JSON %t' - -Execute(Should be able to set custom options): - let g:ale_markdown_vale_options = '--foo --bar' - - AssertLinter 'vale', ale#Escape('vale') - \ . ' --output=JSON --foo --bar %t' - -Execute(Should be able to set a custom input file): - let g:ale_markdown_vale_input_file = '%s' - - AssertLinter 'vale', ale#Escape('vale') - \ . ' --output=JSON %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_mercury_mmc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_mercury_mmc.vader deleted file mode 100644 index 5ab5e74f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_mercury_mmc.vader +++ /dev/null @@ -1,22 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('mercury', 'mmc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinterCwd '%s:h' - AssertLinter 'mmc', - \ ale#Escape('mmc') . ' --errorcheck-only --make --output-compile-error-lines 100 %s:t:r' - -Execute(The executable should be configurable): - let b:ale_mercury_mmc_executable = 'foo' - - AssertLinter 'foo', - \ ale#Escape('foo') . ' --errorcheck-only --make --output-compile-error-lines 100 %s:t:r' - -Execute(The options should be configurable): - let b:ale_mercury_mmc_options = '--bar' - - AssertLinter 'mmc', - \ ale#Escape('mmc') . ' --errorcheck-only --bar %s:t:r' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_mypy.vader b/dotfiles/.vim/plugged/ale/test/linter/test_mypy.vader deleted file mode 100644 index bac59d92..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_mypy.vader +++ /dev/null @@ -1,106 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'mypy') - call ale#test#SetFilename('test.py') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - unlet! b:executable - - call ale#assert#TearDownLinterTest() - -Execute(The mypy callbacks should return the correct default values): - AssertLinterCwd g:dir - AssertLinter 'mypy', - \ ale#Escape('mypy') - \ . ' --show-column-numbers' - \ . ' --shadow-file %s %t %s' - -Execute(The mypy executable should be configurable, and escaped properly): - let g:ale_python_mypy_executable = 'executable with spaces' - - AssertLinter 'executable with spaces', - \ ale#Escape('executable with spaces') - \ . ' --show-column-numbers' - \ . ' --shadow-file %s %t %s' - -Execute(The mypy command callback should let you set options): - let g:ale_python_mypy_options = '--some-option' - - AssertLinter 'mypy', - \ ale#Escape('mypy') - \ . ' --some-option' - \ . ' --show-column-numbers' - \ . ' --shadow-file %s %t %s' - -Execute(The mypy command should switch directories to the detected project root): - call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir') - AssertLinter 'mypy', - \ ale#Escape('mypy') - \ . ' --show-column-numbers' - \ . ' --shadow-file %s %t %s' - -Execute(The mypy callbacks should detect virtualenv directories and switch to the project root): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:executable = ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/mypy') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/subdir') - AssertLinter b:executable, - \ ale#Escape(b:executable) - \ . ' --show-column-numbers' - \ . ' --shadow-file %s %t %s' - -Execute(The mypy callbacks should cd to directory containing mypy.ini if found): - call ale#test#SetFilename('../test-files/python/with_mypy_ini_and_pytest_ini/tests/testsubfolder/my_tests.py') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/with_mypy_ini_and_pytest_ini') - AssertLinter 'mypy', - \ ale#Escape('mypy') - \ . ' --show-column-numbers' - \ . ' --shadow-file %s %t %s' - -Execute(You should able able to use the global mypy instead): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - let g:ale_python_mypy_use_global = 1 - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/subdir') - AssertLinter 'mypy', - \ ale#Escape('mypy') - \ . ' --show-column-numbers' - \ . ' --shadow-file %s %t %s' - -Execute(Setting executable to 'pipenv' appends 'run mypy'): - let g:ale_python_mypy_executable = 'path/to/pipenv' - - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run mypy' - \ . ' --show-column-numbers --shadow-file %s %t %s' - -Execute(Pipenv is detected when python_mypy_auto_pipenv is set): - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - let g:ale_python_mypy_auto_pipenv = 1 - - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'pipenv', - \ ale#Escape('pipenv') . ' run mypy --show-column-numbers --shadow-file %s %t %s' - -Execute(Setting executable to 'poetry' appends 'run mypy'): - let g:ale_python_mypy_executable = 'path/to/poetry' - - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run mypy' - \ . ' --show-column-numbers --shadow-file %s %t %s' - -Execute(Poetry is detected when python_mypy_auto_poetry is set): - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - let g:ale_python_mypy_auto_poetry = 1 - - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'poetry', - \ ale#Escape('poetry') . ' run mypy --show-column-numbers --shadow-file %s %t %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_naga.vader b/dotfiles/.vim/plugged/ale/test/linter/test_naga.vader deleted file mode 100644 index bf91604b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_naga.vader +++ /dev/null @@ -1,10 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('wgsl', 'naga') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The naga command should be customizable): - let g:ale_wgsl_naga_executable = '/path/to/naga' - AssertLinter '/path/to/naga', - \ ale#Escape('/path/to/naga') . ' --stdin-file-path %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_nagelfar.vader b/dotfiles/.vim/plugged/ale/test/linter/test_nagelfar.vader deleted file mode 100644 index 94bb1d53..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_nagelfar.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('tcl', 'nagelfar') - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'nagelfar.tcl', ale#Escape('nagelfar.tcl') . ' %s' - - let b:ale_tcl_nagelfar_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' %s' - -Execute(The options should be configurable): - let b:ale_tcl_nagelfar_options = '--something' - - AssertLinter 'nagelfar.tcl', ale#Escape('nagelfar.tcl') . ' --something %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_nasm_nasm.vader b/dotfiles/.vim/plugged/ale/test/linter/test_nasm_nasm.vader deleted file mode 100644 index 2bfe2b0d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_nasm_nasm.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('nasm', 'nasm') - - let b:command_tail = - \ ' -X gnu -I %s:h' . (has('win32') ? '\' : '/') . ' %s -o ' . (has('win32') ? 'NUL' : '/dev/null') - let b:command_tail_opt = - \ ' -X gnu -I %s:h' . (has('win32') ? '\' : '/') . ' -w+orphan-labels %s -o ' . (has('win32') ? 'NUL' : '/dev/null') - -After: - unlet! b:command_tail - unlet! b:command_tail_opt - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'nasm', ale#Escape('nasm') . b:command_tail, - - let b:ale_nasm_nasm_executable = '~/nasm' - - AssertLinter '~/nasm', ale#Escape('~/nasm') . b:command_tail - -Execute(The options should be configurable): - let b:ale_nasm_nasm_options = '-w-macro-params' - - AssertLinter 'nasm', ale#Escape('nasm') - \ . ' -X gnu -I %s:h' . (has('win32') ? '\' : '/') - \ . ' -w-macro-params %s -o ' . (has('win32') ? 'NUL' : '/dev/null') - -Execute(The options should be used in command): - let b:ale_nasm_nasm_options = '-w+orphan-labels' - - AssertLinter 'nasm', ale#Escape('nasm') . b:command_tail_opt diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_nimlsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_nimlsp.vader deleted file mode 100644 index c109deef..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_nimlsp.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('nim', 'nimlsp') - -After: - call ale#assert#TearDownLinterTest() - -Execute(It does not set nim sources by default): - AssertLinter 'nimlsp', ale#Escape('nimlsp') - -Execute(Sets nimlsp and escapes sources from g:ale_nim_nimlsp_nim_sources): - let g:ale_nim_nimlsp_nim_sources = '/path/to /Nim' - AssertLinter 'nimlsp', ale#Escape('nimlsp') . ' ' . ale#Escape('/path/to /Nim') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_nix_statix.vader b/dotfiles/.vim/plugged/ale/test/linter/test_nix_statix.vader deleted file mode 100644 index 8ee4c027..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_nix_statix.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('nix', 'statix') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The statix command should be correct): - AssertLinter 'statix', ale#Escape('statix') . ' check -o errfmt --stdin' - -Execute(Additional statix options should be configurable): - let g:ale_nix_statix_check_options = '--foobar' - - AssertLinter 'statix', - \ ale#Escape('statix') . ' check -o errfmt --stdin --foobar' - -Execute(The statix command should be configurable): - let g:ale_nix_statix_check_executable = 'foo/bar' - - AssertLinter 'foo/bar', ale#Escape('foo/bar') . ' check -o errfmt --stdin' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_objc_ccls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_objc_ccls.vader deleted file mode 100644 index 58d824c5..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_objc_ccls.vader +++ /dev/null @@ -1,66 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('objc', 'ccls') - - Save b:ale_c_build_dir_names - Save b:ale_objc_ccls_executable - Save b:ale_objc_ccls_init_options - -After: - call ale#assert#TearDownLinterTest() - -Execute(The project root should be detected correctly using compile_commands.json file): - call ale#test#SetFilename(tempname() . '/dummy.m') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_compile_commands_json/dummy.m') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_compile_commands_json') - -Execute(The project root should be detected correctly using .ccls file): - call ale#test#SetFilename(tempname() . '/dummy.m') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_ccls/dummy.m') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_ccls') - -Execute(The project root should be detected correctly using .ccls-root file): - call ale#test#SetFilename(tempname() . '/dummy.m') - - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ccls/with_ccls-root/dummy.m') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ccls/with_ccls-root') - -Execute(The executable should be configurable): - AssertLinter 'ccls', ale#Escape('ccls') - - let b:ale_objc_ccls_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - -Execute(The initialization options should be configurable): - AssertLSPOptions {} - - let b:ale_objc_ccls_init_options = { 'cacheDirectory': '/tmp/ccls' } - - AssertLSPOptions { 'cacheDirectory': '/tmp/ccls' } - -Execute(The compile command database should be detected correctly): - call ale#test#SetFilename('../test-files/ccls/with_ccls/dummy.c') - - AssertLSPOptions {} - - call ale#test#SetFilename('../test-files/ccls/with_compile_commands_json/dummy.c') - - AssertLSPOptions { 'compilationDatabaseDirectory': - \ ale#path#Simplify(g:dir . '/../test-files/ccls/with_compile_commands_json') } - - call ale#test#SetFilename('../test-files/ccls/with_build_dir/dummy.c') - let b:ale_c_build_dir_names = ['unusual_build_dir_name'] - - AssertLSPOptions { 'compilationDatabaseDirectory': - \ ale#path#Simplify(g:dir . '/../test-files/ccls/with_build_dir/unusual_build_dir_name') } diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ocamllsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ocamllsp.vader deleted file mode 100644 index 4f33af18..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ocamllsp.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ocaml', 'ocamllsp') - - Save &filetype - let &filetype = 'ocaml' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'ocaml' - -Execute(The project root should be detected correctly): - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ocamllsp/file.ml') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ocamllsp') - -Execute(The executable should be run using opam exec by default): - call ale#test#SetFilename('../test-files/ocamllsp/file.ml') - - AssertLinter 'ocamllsp', 'opam config exec -- ocamllsp' - -Execute(The executable should be run directly if use_opam flag is disabled): - let g:ale_ocaml_ocamllsp_use_opam = 0 - call ale#test#SetFilename('../test-files/ocamllsp/file.ml') - - AssertLinter 'ocamllsp', 'ocamllsp' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ols.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ols.vader deleted file mode 100644 index 89734dce..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ocaml_ols.vader +++ /dev/null @@ -1,41 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ocaml', 'ols') - - Save &filetype - let &filetype = 'ocaml' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'ocaml' - -Execute(The default executable should be correct): - AssertLinter 'ocaml-language-server', - \ ale#Escape('ocaml-language-server') . ' --stdio' - -Execute(The project root should be detected correctly): - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ols/file.ml') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ols') - -Execute(The local executable should be used when available): - call ale#test#SetFilename('../test-files/ols/file.ml') - - AssertLinter ale#path#Simplify(g:dir . '/../test-files/ols/node_modules/.bin/ocaml-language-server'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/ols/node_modules/.bin/ocaml-language-server')) . ' --stdio' - -Execute(The gloabl executable should always be used when use_global is set): - let g:ale_ocaml_ols_use_global = 1 - call ale#test#SetFilename('../test-files/ols/file.ml') - - AssertLinter 'ocaml-language-server', - \ ale#Escape('ocaml-language-server') . ' --stdio' - -Execute(The executable should be configurable): - let g:ale_ocaml_ols_executable = 'foobar' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'foobar', ale#Escape('foobar') . ' --stdio' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ocamlinterface_ocamllsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ocamlinterface_ocamllsp.vader deleted file mode 100644 index aa0b2100..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ocamlinterface_ocamllsp.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ocamlinterface', 'ocamllsp') - - Save &filetype - let &filetype = 'ocamlinterface' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'ocaml.interface' - -Execute(The project root should be detected correctly): - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ocamllsp/file.ml') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ocamllsp') - -Execute(The executable should be run using opam exec by default): - call ale#test#SetFilename('../test-files/ocamllsp/file.ml') - - AssertLinter 'ocamllsp', 'opam config exec -- ocamllsp' - -Execute(The executable should be run directly if use_opam flag is disabled): - let g:ale_ocaml_ocamllsp_use_opam = 0 - call ale#test#SetFilename('../test-files/ocamllsp/file.ml') - - AssertLinter 'ocamllsp', 'ocamllsp' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_openscad_sca2d.vader b/dotfiles/.vim/plugged/ale/test/linter/test_openscad_sca2d.vader deleted file mode 100644 index c2409f55..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_openscad_sca2d.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('openscad', 'sca2d') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The options should be used in the command): - AssertLinter 'sca2d', ale#Escape('sca2d') . ' %s' - - let b:ale_openscad_sca2d_options = '--foobar' - - AssertLinter 'sca2d', ale#Escape('sca2d') . ' --foobar %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_perl.vader b/dotfiles/.vim/plugged/ale/test/linter/test_perl.vader deleted file mode 100644 index 3c4b661c..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_perl.vader +++ /dev/null @@ -1,14 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('perl', 'perl') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default Perl command callback should be correct): - AssertLinter 'perl', ale#Escape('perl') . ' -c -Mwarnings -Ilib %t' - -Execute(Overriding the executable and command should work): - let b:ale_perl_perl_executable = 'foobar' - let b:ale_perl_perl_options = '-w' - - AssertLinter 'foobar', ale#Escape('foobar') . ' -w %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_perl6.vader b/dotfiles/.vim/plugged/ale/test/linter/test_perl6.vader deleted file mode 100644 index d3ec6e17..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_perl6.vader +++ /dev/null @@ -1,14 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('perl6', 'perl6') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default Perl6 command callback should be correct): - AssertLinter 'perl6', 'perl6' . ' -c -Ilib %t' - -Execute(Overriding the executable and command should work): - let b:ale_perl6_perl6_executable = 'foobar' - let b:ale_perl6_perl6_options = '-w' - - AssertLinter 'foobar', 'foobar' . ' -w %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_perlcritic.vader b/dotfiles/.vim/plugged/ale/test/linter/test_perlcritic.vader deleted file mode 100644 index 0f1e2856..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_perlcritic.vader +++ /dev/null @@ -1,36 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('perl', 'perlcritic') - call ale#test#SetFilename('test.pl') - let g:ale_perl_perlcritic_profile = '' - -After: - unlet! b:readme_path - call ale#assert#TearDownLinterTest() - -Execute(The command should be correct with g:ale_perl_perlcritic_showrules off): - let b:ale_perl_perlcritic_showrules = 0 - - AssertLinter 'perlcritic', ale#Escape('perlcritic') - \ . ' --verbose ' . ale#Escape('%l:%c %m\n') . ' --nocolor' - -Execute(The command should be correct with g:ale_perl_perlcritic_showrules on): - let b:ale_perl_perlcritic_showrules = 1 - - AssertLinter 'perlcritic', ale#Escape('perlcritic') - \ . ' --verbose ' . ale#Escape('%l:%c %m [%p]\n') . ' --nocolor' - -Execute(The command search for the profile file when set): - let b:ale_perl_perlcritic_profile = 'README.md' - - let b:readme_path = ale#path#Simplify(expand('%:p:h:h:h') . '/README.md') - - AssertLinter 'perlcritic', ale#Escape('perlcritic') - \ . ' --verbose ' . ale#Escape('%l:%c %m\n') . ' --nocolor' - \ . ' --profile ' . ale#Escape(b:readme_path) - -Execute(Extra options should be set appropriately): - let b:ale_perl_perlcritic_options = 'beep boop' - - AssertLinter 'perlcritic', ale#Escape('perlcritic') - \ . ' --verbose ' . ale#Escape('%l:%c %m\n') . ' --nocolor' - \ . ' beep boop' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_php.vader b/dotfiles/.vim/plugged/ale/test/linter/test_php.vader deleted file mode 100644 index 670d7196..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_php.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('php', 'php') - let b:command_tail = ' -l -d error_reporting=E_ALL -d display_errors=1' - \ . ' -d log_errors=0 --' - -After: - unlet! b:command_tail - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'php', ale#Escape('php') . b:command_tail - - let b:ale_php_php_executable = '/path/to/php' - - AssertLinter '/path/to/php', ale#Escape('/path/to/php') . b:command_tail diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_php_intelephense.vader b/dotfiles/.vim/plugged/ale/test/linter/test_php_intelephense.vader deleted file mode 100644 index d6e2469d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_php_intelephense.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('php', 'intelephense') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'intelephense', - \ ale#Escape('intelephense') . ' --stdio' - -Execute(The project path should be correct for .git directories): - call ale#test#SetFilename('../test-files/php/with-git/test.php') - silent! call mkdir('../test-files/php/with-git/.git', 'p') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/php/with-git') - -Execute(The project path should be correct for composer.json file): - call ale#test#SetFilename('../test-files/php/with-composer/test.php') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/php/with-composer') - -Execute(The project cache should be saved in a temp dir): - call ale#test#SetFilename('../test-files/php/with-composer/test.php') - let g:ale_php_intelephense_config = { 'storagePath': '/tmp/intelephense' } - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/php/with-composer') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_php_langserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_php_langserver.vader deleted file mode 100644 index 28741713..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_php_langserver.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('php', 'langserver') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'php-language-server.php', - \ 'php ' . ale#Escape('php-language-server.php') - -Execute(Vendor executables should be detected): - call ale#test#SetFilename('../test-files/php/test.php') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/php/vendor/bin/php-language-server.php'), - \ 'php ' . ale#Escape(ale#path#Simplify( - \ g:dir - \ . '/../test-files/php/vendor/bin/php-language-server.php' - \ )) - -Execute(The project path should be correct for .git directories): - call ale#test#SetFilename('../test-files/php/with-git/test.php') - silent! call mkdir('../test-files/php/with-git/.git') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/php/with-git') - -Execute(The project path should be correct for composer.json file): - call ale#test#SetFilename('../test-files/php/with-composer/test.php') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/php/with-composer') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_phpactor.vader b/dotfiles/.vim/plugged/ale/test/linter/test_phpactor.vader deleted file mode 100644 index 8968bba1..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_phpactor.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('php', 'phpactor') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'phpactor', - \ ale#Escape('phpactor') . ' language-server' - -Execute(The project path should be correct for .git directories): - call ale#test#SetFilename('../test-files/php/with-git/test.php') - silent! call mkdir('../test-files/php/with-git/.git') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/php/with-git') - -Execute(The project path should be correct for composer.json file): - call ale#test#SetFilename('../test-files/php/with-composer/test.php') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/php/with-composer') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_phpcs.vader b/dotfiles/.vim/plugged/ale/test/linter/test_phpcs.vader deleted file mode 100644 index afb88e32..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_phpcs.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('php', 'phpcs') - -After: - unlet! g:executable - - call ale#assert#TearDownLinterTest() - -Execute(The local phpcs executable should be used): - call ale#test#SetFilename('../test-files/phpcs/project-with-phpcs/foo/test.php') - - let g:executable = ale#path#Simplify(g:dir . '/../test-files/phpcs/project-with-phpcs/vendor/bin/phpcs') - - AssertLinterCwd '%s:h' - AssertLinter g:executable, ale#Escape(g:executable) - \ . ' -s --report=emacs --stdin-path=%s' - -Execute(use_global should override local executable detection): - let g:ale_php_phpcs_use_global = 1 - - call ale#test#SetFilename('../test-files/phpcs/project-with-phpcs/foo/test.php') - - AssertLinter 'phpcs', ale#Escape('phpcs') - \ . ' -s --report=emacs --stdin-path=%s' - -Execute(Projects without local executables should use the global one): - call ale#test#SetFilename('../test-files/phpcs/project-without-phpcs/foo/test.php') - - AssertLinter 'phpcs', ale#Escape('phpcs') - \ . ' -s --report=emacs --stdin-path=%s' - -Execute(User provided options should be used): - let g:ale_php_phpcs_options = '--my-user-provided-option my-value' - - AssertLinter 'phpcs', ale#Escape('phpcs') - \ . ' -s --report=emacs --stdin-path=%s --my-user-provided-option my-value' - -Execute(The _standard option should be used): - let g:ale_php_phpcs_standard = 'foobar' - - AssertLinter 'phpcs', ale#Escape('phpcs') - \ . ' -s --report=emacs --stdin-path=%s --standard=' . ale#Escape('foobar') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_phpmd.vader b/dotfiles/.vim/plugged/ale/test/linter/test_phpmd.vader deleted file mode 100644 index 64922820..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_phpmd.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('php', 'phpmd') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Custom executables should be used for the executable and command): - let g:ale_php_phpmd_executable = 'phpmd_test' - - AssertLinter 'phpmd_test', - \ ale#Escape('phpmd_test') - \ . ' %s text cleancode,codesize,controversial,design,naming,unusedcode --ignore-violations-on-exit %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_phpstan.vader b/dotfiles/.vim/plugged/ale/test/linter/test_phpstan.vader deleted file mode 100644 index dbeb1bd1..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_phpstan.vader +++ /dev/null @@ -1,121 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('php', 'phpstan') - - let g:old_dir = g:dir - - " Create a temporary directory and work within it, otherwise these tests - " cannot be run in parallel. - let g:dir = tempname() - call mkdir(g:dir, '', 0750) - silent! execute 'cd ' . fnameescape(g:dir) - silent! noautocmd execute 'file ' . fnameescape(ale#path#Simplify(g:dir . '/test.php')) - - call delete('./phpstan.neon') - - GivenCommandOutput ['0.10.2'] - -After: - silent! execute 'cd ' . fnameescape(g:old_dir) - call delete(g:dir, 'rf') - let g:dir = g:old_dir - unlet! g:old_dir - call ale#assert#TearDownLinterTest() - -Execute(The local phpstan executable should be used): - call mkdir('vendor/bin', 'p', 0750) - call writefile([''], 'vendor/bin/phpstan') - call ale#test#SetFilename('phpstan-test-files/foo/test.php') - - let g:executable = ale#path#Simplify(g:dir . '/vendor/bin/phpstan') - - AssertLinter g:executable, - \ ale#Escape(g:executable) . ' analyze --no-progress --errorFormat json -l ' . ale#Escape('4') . ' %s' - -Execute(use_global should override local executable detection): - let g:ale_php_phpstan_use_global = 1 - - call mkdir('vendor/bin', 'p', 0750) - call writefile([''], 'vendor/bin/phpstan') - call ale#test#SetFilename('phpstan-test-files/foo/test.php') - - AssertLinter 'phpstan', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json -l ' . ale#Escape('4') . ' %s' - -Execute(Custom executables should be used for the executable and command): - let g:ale_php_phpstan_executable = 'phpstan_test' - - AssertLinter 'phpstan_test', - \ ale#Escape('phpstan_test') . ' analyze --no-progress --errorFormat json -l ' . ale#Escape('4') . ' %s' - -Execute(project with level set to 3): - call ale#test#SetFilename('phpstan-test-files/foo/test.php') - let g:ale_php_phpstan_level = 3 - - AssertLinter 'phpstan', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json -l ' . ale#Escape('3') . ' %s' - -Execute(Custom phpstan configuration file): - let g:ale_php_phpstan_configuration = 'phpstan_config' - - AssertLinter 'phpstan', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json -c ' . ale#Escape('phpstan_config') . ' -l ' . ale#Escape('4') . ' %s' - -Execute(Choose the right format for error format param): - GivenCommandOutput ['0.10.3'] - - AssertLinter 'phpstan', [ - \ ale#Escape('phpstan') . ' --version', - \ ale#Escape('phpstan') . ' analyze --no-progress --error-format json -l ' . ale#Escape('4') . ' %s' - \ ] - -Execute(Configuration file exists in current directory): - call writefile(['parameters:', ' level: 7'], './phpstan.neon') - let g:ale_php_phpstan_level = '' - let g:ale_php_phpstan_configuration = '' - - AssertLinter 'phpstan', [ - \ ale#Escape('phpstan') . ' --version', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json %s' - \ ] - -Execute(Configuration dist file exists in current directory): - call writefile(['parameters:', ' level: 7'], './phpstan.neon.dist') - let g:ale_php_phpstan_level = '' - let g:ale_php_phpstan_configuration = '' - - AssertLinter 'phpstan', [ - \ ale#Escape('phpstan') . ' --version', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json %s' - \ ] - -Execute(Configuration file exists in current directory, but force phpstan level): - call writefile(['parameters:', ' level: 7'], './phpstan.neon') - let g:ale_php_phpstan_configuration = '' - let g:ale_php_phpstan_level = '7' - - AssertLinter 'phpstan', [ - \ ale#Escape('phpstan') . ' --version', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json -l ' . ale#Escape('7') . ' %s' - \ ] - -Execute(Configuration file exists in current directory, but force phpstan configuration): - call writefile(['parameters:', ' level: 7'], './phpstan.neon') - let g:ale_php_phpstan_level = '' - let g:ale_php_phpstan_configuration = 'phpstan.custom.neon' - - AssertLinter 'phpstan', [ - \ ale#Escape('phpstan') . ' --version', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json -c ' . ale#Escape('phpstan.custom.neon') . ' %s' - \ ] - -Execute(Autoload parameter is added to the command): - let g:ale_php_phpstan_autoload = 'autoload.php' - - AssertLinter 'phpstan', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json -a ' . ale#Escape('autoload.php') . ' -l ' . ale#Escape('4') . ' %s' - -Execute(Memory limit parameter is added to the command): - let g:ale_php_phpstan_memory_limit = '500M' - - AssertLinter 'phpstan', - \ ale#Escape('phpstan') . ' analyze --no-progress --errorFormat json -l ' . ale#Escape('4') . ' --memory-limit ' . ale#Escape('500M') . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pony_ponyc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pony_ponyc.vader deleted file mode 100644 index 3a3b32ec..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pony_ponyc.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('pony', 'ponyc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The options should be used in the command): - AssertLinter 'ponyc', ale#Escape('ponyc') . ' --pass paint' - - let b:ale_pony_ponyc_options = 'foobar' - - AssertLinter 'ponyc', ale#Escape('ponyc') . ' foobar' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_prospector.vader b/dotfiles/.vim/plugged/ale/test/linter/test_prospector.vader deleted file mode 100644 index 82e1596d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_prospector.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'prospector') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Setting executable to 'pipenv' appends 'run prospector'): - let g:ale_python_prospector_executable = 'path/to/pipenv' - - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run prospector' - \ . ' --messages-only --absolute-paths --zero-exit --output-format json %s' - -Execute(Pipenv is detected when python_prospector_auto_pipenv is set): - let g:ale_python_prospector_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinter 'pipenv', - \ ale#Escape('pipenv') . ' run prospector' - \ . ' --messages-only --absolute-paths --zero-exit --output-format json %s' - -Execute(Setting executable to 'poetry' appends 'run prospector'): - let g:ale_python_prospector_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run prospector' - \ . ' --messages-only --absolute-paths --zero-exit --output-format json %s' - -Execute(Poetry is detected when python_prospector_auto_poetry is set): - let g:ale_python_prospector_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinter 'poetry', - \ ale#Escape('poetry') . ' run prospector' - \ . ' --messages-only --absolute-paths --zero-exit --output-format json %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_proto.vader b/dotfiles/.vim/plugged/ale/test/linter/test_proto.vader deleted file mode 100644 index 726588c0..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_proto.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('proto', 'protoc_gen_lint') - call ale#test#SetFilename('test.proto') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'protoc', - \ 'protoc' . ' -I ' . ale#Escape(getcwd()) . ' --lint_out=. ' . '%s' - -Execute(The callback should include any additional options): - let b:ale_proto_protoc_gen_lint_options = '--some-option' - - AssertLinter 'protoc', - \ 'protoc' . ' -I ' . ale#Escape(getcwd()) . ' --some-option --lint_out=. ' . '%s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_protolint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_protolint.vader deleted file mode 100644 index 4463b629..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_protolint.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('proto', 'protolint') - call ale#test#SetFilename('test.proto') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'protolint', - \ ale#Escape('protolint') - \ . ' lint' - \ . ' -reporter=unix' - \ . ' %s' - -Execute(The callback should include any additional options): - let b:ale_proto_protolint_executable = '/tmp/protolint' - let b:ale_proto_protolint_config = '/tmp/protolint.yaml' - - AssertLinter '/tmp/protolint', - \ ale#Escape('/tmp/protolint') - \ . ' lint' - \ . ' -config_path=' . ale#Escape('/tmp/protolint.yaml') - \ . ' -reporter=unix' - \ . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_psalm.vader b/dotfiles/.vim/plugged/ale/test/linter/test_psalm.vader deleted file mode 100644 index 94e718d4..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_psalm.vader +++ /dev/null @@ -1,44 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('php', 'psalm') - -After: - unlet! g:i - unlet! g:matched - - if isdirectory(g:dir . '/.git') - call delete(g:dir . '/.git', 'd') - endif - - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'psalm', - \ ale#Escape('psalm') . ' --language-server' - -Execute(Vendor executables should be detected): - call ale#test#SetFilename('../test-files/psalm/test.php') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/psalm/vendor/bin/psalm'), - \ ale#Escape(ale#path#Simplify( - \ g:dir - \ . '/../test-files/psalm/vendor/bin/psalm' - \ )) . ' --language-server' - - let g:ale_php_psalm_use_global = 1 - - AssertLinter 'psalm', - \ ale#Escape('psalm') . ' --language-server' - -Execute(User provided options should be used): - let g:ale_php_psalm_options = '--my-user-provided-option my-value' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'psalm', - \ ale#Escape('psalm') - \ . ' --language-server --my-user-provided-option my-value' - -Execute(The project path should be correct for composer.json file): - call ale#test#SetFilename('../test-files/php/with-composer/test.php') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/php/with-composer') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_puglint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_puglint.vader deleted file mode 100644 index 8a445408..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_puglint.vader +++ /dev/null @@ -1,48 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('pug', 'puglint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(puglint should detect local executables and package.json): - call ale#test#SetFilename('../test-files/puglint/test.pug') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/puglint/node_modules/.bin/pug-lint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/node_modules/.bin/pug-lint')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/package.json')) - \ . ' -r inline %t' - -Execute(puglint should use global executables if configured): - let g:ale_pug_puglint_use_global = 1 - - call ale#test#SetFilename('../test-files/puglint/test.pug') - - AssertLinter 'pug-lint', - \ ale#Escape('pug-lint') - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/package.json')) - \ . ' -r inline %t' - -Execute(puglint should detect .pug-lintrc): - call ale#test#SetFilename('../test-files/puglint/puglint_rc_dir/subdir/test.pug') - - AssertLinter ale#path#Simplify(g:dir . '/../test-files/puglint/node_modules/.bin/pug-lint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/node_modules/.bin/pug-lint')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/puglint_rc_dir/.pug-lintrc')) - \ . ' -r inline %t' - -Execute(puglint should detect .pug-lintrc.js): - call ale#test#SetFilename('../test-files/puglint/puglint_rc_js_dir/subdir/test.pug') - - AssertLinter ale#path#Simplify(g:dir . '/../test-files/puglint/node_modules/.bin/pug-lint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/node_modules/.bin/pug-lint')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/puglint_rc_js_dir/.pug-lintrc.js')) - \ . ' -r inline %t' - -Execute(puglint should detect .pug-lintrc.json): - call ale#test#SetFilename('../test-files/puglint/puglint_rc_json_dir/subdir/test.pug') - - AssertLinter ale#path#Simplify(g:dir . '/../test-files/puglint/node_modules/.bin/pug-lint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/node_modules/.bin/pug-lint')) - \ . ' -c ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/puglint/puglint_rc_json_dir/.pug-lintrc.json')) - \ . ' -r inline %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_purescript_ls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_purescript_ls.vader deleted file mode 100644 index 3ef9707a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_purescript_ls.vader +++ /dev/null @@ -1,31 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('purescript', 'ls') - -After: - call ale#assert#TearDownLinterTest() - -Execute(should set correct defaults): - AssertLinter 'purescript-language-server', ale#Escape('purescript-language-server') . ' --stdio' - -Execute(should set correct LSP values): - call ale#test#SetFilename('../test-files/purescript/spago/Foo.purs') - - AssertLSPLanguage 'purescript' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/purescript/spago') - -Execute(should set correct project for bower): - call ale#test#SetFilename('../test-files/purescript/bower/Foo.purs') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/purescript/bower') - -Execute(should set correct project for psc-package): - call ale#test#SetFilename('../test-files/purescript/psc-package/Foo.purs') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/purescript/psc-package') - -Execute(should accept configuration settings): - AssertLSPConfig {} - let b:ale_purescript_ls_config = {'purescript': {'addSpagoSources': v:true}} - AssertLSPConfig {'purescript': {'addSpagoSources': v:true}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pycodestyle.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pycodestyle.vader deleted file mode 100644 index fac53d9f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pycodestyle.vader +++ /dev/null @@ -1,46 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'pycodestyle') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The pycodestyle command callback should return default string): - AssertLinter 'pycodestyle', ale#Escape('pycodestyle') . ' -' - -Execute(The pycodestyle command callback should allow options): - let g:ale_python_pycodestyle_options = '--exclude=test*.py' - - AssertLinter 'pycodestyle', - \ ale#Escape('pycodestyle') . ' --exclude=test*.py -' - -Execute(The pycodestyle executable should be configurable): - let g:ale_python_pycodestyle_executable = '~/.local/bin/pycodestyle' - - AssertLinter '~/.local/bin/pycodestyle', - \ ale#Escape('~/.local/bin/pycodestyle') . ' -' - -Execute(Setting executable to 'pipenv' appends 'run pycodestyle'): - let g:ale_python_pycodestyle_executable = 'path/to/pipenv' - - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run pycodestyle -' - -Execute(Pipenv is detected when python_pycodestyle_auto_pipenv is set): - let g:ale_python_pycodestyle_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinter 'pipenv', - \ ale#Escape('pipenv') . ' run pycodestyle -' - -Execute(Setting executable to 'poetry' appends 'run pycodestyle'): - let g:ale_python_pycodestyle_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run pycodestyle -' - -Execute(Poetry is detected when python_pycodestyle_auto_poetry is set): - let g:ale_python_pycodestyle_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinter 'poetry', - \ ale#Escape('poetry') . ' run pycodestyle -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pydocstyle.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pydocstyle.vader deleted file mode 100644 index fc7fbbf2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pydocstyle.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'pydocstyle') - call ale#test#SetFilename('example/test.py') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The pydocstyle command callback should return default string): - AssertLinterCwd '%s:h' - AssertLinter 'pydocstyle', ale#Escape('pydocstyle') . ' %s' - -Execute(The pydocstyle command callback should allow options): - let g:ale_python_pydocstyle_options = '--verbose' - - AssertLinter 'pydocstyle', ale#Escape('pydocstyle') . ' --verbose %s' - -Execute(The pydocstyle executable should be configurable): - let g:ale_python_pydocstyle_executable = '~/.local/bin/pydocstyle' - - AssertLinter '~/.local/bin/pydocstyle', - \ ale#Escape('~/.local/bin/pydocstyle') . ' %s' - -Execute(Setting executable to 'pipenv' appends 'run pydocstyle'): - let g:ale_python_pydocstyle_executable = 'path/to/pipenv' - - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run pydocstyle %s' - -Execute(Pipenv is detected when python_pydocstyle_auto_pipenv is set): - let g:ale_python_pydocstyle_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinter 'pipenv', ale#Escape('pipenv') . ' run pydocstyle %s' - -Execute(Setting executable to 'poetry' appends 'run pydocstyle'): - let g:ale_python_pydocstyle_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run pydocstyle %s' - -Execute(Poetry is detected when python_pydocstyle_auto_poetry is set): - let g:ale_python_pydocstyle_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinter 'poetry', ale#Escape('poetry') . ' run pydocstyle %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pyflakes.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pyflakes.vader deleted file mode 100644 index 61aee562..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pyflakes.vader +++ /dev/null @@ -1,60 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'pyflakes') - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - unlet! b:executable - call ale#assert#TearDownLinterTest() - -Execute(The pyflakes command callback should return default string): - AssertLinter 'pyflakes', ale#Escape('pyflakes') . ' %t' - -Execute(The pyflakes executable should be configurable): - let g:ale_python_pyflakes_executable = '~/.local/bin/pyflakes' - - AssertLinter '~/.local/bin/pyflakes', - \ ale#Escape('~/.local/bin/pyflakes') . ' %t' - -Execute(The pyflakes executable should be run from the virtualenv path): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/pyflakes' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' %t' - -Execute(You should be able to override the pyflakes virtualenv lookup): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let g:ale_python_pyflakes_use_global = 1 - - AssertLinter 'pyflakes', ale#Escape('pyflakes') . ' %t' - -Execute(Setting executable to 'pipenv' appends 'run pyflakes'): - let g:ale_python_pyflakes_executable = 'path/to/pipenv' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run pyflakes %t', - -Execute(Pipenv is detected when python_pyflakes_auto_pipenv is set): - let g:ale_python_pyflakes_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinter 'pipenv', - \ ale#Escape('pipenv') . ' run pyflakes %t' - -Execute(Setting executable to 'poetry' appends 'run pyflakes'): - let g:ale_python_pyflakes_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run pyflakes %t', - -Execute(Poetry is detected when python_pyflakes_auto_poetry is set): - let g:ale_python_pyflakes_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinter 'poetry', - \ ale#Escape('poetry') . ' run pyflakes %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pylama.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pylama.vader deleted file mode 100644 index 3c6a6efa..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pylama.vader +++ /dev/null @@ -1,88 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'pylama') - call ale#test#SetFilename('test.py') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - let b:command_tail = ' %s' - -After: - unlet! b:bin_dir - unlet! b:executable - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The default pylama command should be correct): - AssertLinterCwd ale#path#Simplify(g:dir) - AssertLinter 'pylama', ale#Escape('pylama') . b:command_tail - -Execute(The option for disabling changing directories should work): - let g:ale_python_pylama_change_directory = 0 - - AssertLinterCwd '' - AssertLinter 'pylama', ale#Escape('pylama') . b:command_tail - -Execute(The pylama executable should be configurable, and escaped properly): - let g:ale_python_pylama_executable = 'executable with spaces' - - AssertLinterCwd ale#path#Simplify(g:dir) - AssertLinter 'executable with spaces', - \ ale#Escape('executable with spaces') . b:command_tail - -Execute(The pylama command callback should let you set options): - let g:ale_python_pylama_options = '--some-option' - - AssertLinterCwd ale#path#Simplify(g:dir) - AssertLinter 'pylama', ale#Escape('pylama') . ' --some-option' . b:command_tail - -Execute(The pylama command callback should switch directories to the detected project root): - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/no_virtualenv/subdir/foo/bar.py') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir') - AssertLinter 'pylama', ale#Escape('pylama') . b:command_tail - -Execute(The pylama command callback shouldn't detect virtualenv directories where they don't exist): - call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir') - AssertLinter 'pylama', ale#Escape('pylama') . b:command_tail - -Execute(The pylama command callback should detect virtualenv directories and switch to the project root): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/pylama' - \) - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/subdir') - AssertLinter b:executable, ale#Escape(b:executable) . b:command_tail - -Execute(You should able able to use the global pylama instead): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - let g:ale_python_pylama_use_global = 1 - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/subdir') - AssertLinter 'pylama', ale#Escape('pylama') . b:command_tail - -Execute(Setting executable to 'pipenv' appends 'run pylama'): - let g:ale_python_pylama_executable = 'path/to/pipenv' - - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run pylama' . b:command_tail - -Execute(Pipenv is detected when python_pylama_auto_pipenv is set): - let g:ale_python_pylama_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinter 'pipenv', ale#Escape('pipenv') . ' run pylama' . b:command_tail - -Execute(Setting executable to 'poetry' appends 'run pylama'): - let g:ale_python_pylama_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run pylama' . b:command_tail - -Execute(poetry is detected when python_pylama_auto_poetry is set): - let g:ale_python_pylama_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinter 'poetry', ale#Escape('poetry') . ' run pylama' . b:command_tail diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pylint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pylint.vader deleted file mode 100644 index d15161e6..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pylint.vader +++ /dev/null @@ -1,96 +0,0 @@ -Before: - Save g:ale_python_auto_pipenv - - let g:ale_python_auto_pipenv = 0 - - call ale#assert#SetUpLinterTest('python', 'pylint') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - let b:command_tail = ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n %s' - - GivenCommandOutput ['pylint 2.3.0'] - -After: - unlet! b:bin_dir - unlet! b:executable - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The pylint callbacks should return the correct default values): - AssertLinterCwd expand('%:p:h') - AssertLinter 'pylint', ale#Escape('pylint') . b:command_tail - -Execute(Pylint should run with the --from-stdin in new enough versions): - GivenCommandOutput ['pylint 2.4.0'] - - AssertLinterCwd expand('%:p:h') - AssertLinter 'pylint', ale#Escape('pylint') . b:command_tail[:-3] . '--from-stdin %s' - -Execute(The option for disabling changing directories should work): - let g:ale_python_pylint_change_directory = 0 - - AssertLinterCwd '' - AssertLinter 'pylint', ale#Escape('pylint') . b:command_tail - -Execute(The pylint executable should be configurable, and escaped properly): - let g:ale_python_pylint_executable = 'executable with spaces' - - AssertLinter 'executable with spaces', ale#Escape('executable with spaces') . b:command_tail - -Execute(The pylint command callback should let you set options): - let g:ale_python_pylint_options = '--some-option' - - AssertLinter 'pylint', ale#Escape('pylint') . ' --some-option' . b:command_tail - -Execute(The pylint callbacks shouldn't detect virtualenv directories where they don't exist): - call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir') - AssertLinter 'pylint', ale#Escape('pylint') . b:command_tail - -Execute(The pylint callbacks should detect virtualenv directories): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/pylint' - \) - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/subdir') - AssertLinter b:executable, ale#Escape(b:executable) . b:command_tail - -Execute(You should able able to use the global pylint instead): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - let g:ale_python_pylint_use_global = 1 - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/subdir') - AssertLinter 'pylint', ale#Escape('pylint') . b:command_tail - -Execute(Setting executable to 'pipenv' appends 'run pylint'): - let g:ale_python_pylint_executable = 'path/to/pipenv' - let g:ale_python_pylint_use_global = 1 - - AssertLinter 'path/to/pipenv', ale#Escape('path/to/pipenv') . ' run pylint' - \ . ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n %s' - -Execute(Pipenv is detected when python_pylint_auto_pipenv is set): - let g:ale_python_pylint_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinterCwd expand('%:p:h') - AssertLinter 'pipenv', ale#Escape('pipenv') . ' run pylint' - \ . ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n %s' - -Execute(Setting executable to 'poetry' appends 'run pylint'): - let g:ale_python_pylint_executable = 'path/to/poetry' - let g:ale_python_pylint_use_global = 1 - - AssertLinter 'path/to/poetry', ale#Escape('path/to/poetry') . ' run pylint' - \ . ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n %s' - -Execute(poetry is detected when python_pylint_auto_poetry is set): - let g:ale_python_pylint_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinterCwd expand('%:p:h') - AssertLinter 'poetry', ale#Escape('poetry') . ' run pylint' - \ . ' --output-format text --msg-template="{path}:{line}:{column}: {msg_id} ({symbol}) {msg}" --reports n %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pylsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pylsp.vader deleted file mode 100644 index 290fdbf3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pylsp.vader +++ /dev/null @@ -1,70 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'pylsp') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - unlet! b:executable - - call ale#assert#TearDownLinterTest() - -Execute(The pylsp command callback should return default string): - AssertLinter 'pylsp', ale#Escape('pylsp') - -Execute(The pylsp executable should be configurable): - let g:ale_python_pylsp_executable = '~/.local/bin/pylsp' - - AssertLinter '~/.local/bin/pylsp' , ale#Escape('~/.local/bin/pylsp') - -Execute(The pylsp command callback should let you set options): - let g:ale_python_pylsp_options = '--some-option' - - AssertLinter 'pylsp', ale#Escape('pylsp') . ' --some-option' - -Execute(The pylsp executable should be run from the virtualenv path): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/pylsp' - \) - - AssertEqual ale#Escape(b:executable), - \ ale_linters#python#pylsp#GetCommand(bufnr('')) - -Execute(You should be able to override the pylsp virtualenv lookup): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let g:ale_python_pylsp_use_global = 1 - - AssertLinter 'pylsp', ale#Escape('pylsp') - -Execute(Setting executable to 'pipenv' appends 'run pylsp'): - let g:ale_python_pylsp_executable = 'path/to/pipenv' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'path/to/pipenv', ale#Escape('path/to/pipenv') . ' run pylsp' - -Execute(Pipenv is detected when python_pylsp_auto_pipenv is set): - let g:ale_python_pylsp_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinter 'pipenv', - \ ale#Escape('pipenv') . ' run pylsp' - -Execute(Setting executable to 'poetry' appends 'run pylsp'): - let g:ale_python_pylsp_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', ale#Escape('path/to/poetry') . ' run pylsp' - -Execute(poetry is detected when python_pylsp_auto_poetry is set): - let g:ale_python_pylsp_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinter 'poetry', - \ ale#Escape('poetry') . ' run pylsp' - -Execute(Should accept configuration settings): - AssertLSPConfig {} - let b:ale_python_pylsp_config = {'pylsp': {'plugins': {'preload': {'enabled': v:false}}}} - AssertLSPConfig {'pylsp': {'plugins': {'preload': {'enabled': v:false}}}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pyre.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pyre.vader deleted file mode 100644 index 331d97ed..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pyre.vader +++ /dev/null @@ -1,67 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'pyre') - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - unlet! b:executable - call ale#assert#TearDownLinterTest() - -Execute(The pyre command callback should return default string): - AssertLinter 'pyre', ale#Escape('pyre') . ' persistent' - -Execute(The pyre executable should be configurable): - let g:ale_python_pyre_executable = '~/.local/bin/pyre' - - AssertLinter '~/.local/bin/pyre', - \ ale#Escape('~/.local/bin/pyre') . ' persistent' - -Execute(The pyre executable should be run from the virtualenv path): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/pyre' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' persistent' - -Execute(You should be able to override the pyre virtualenv lookup): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let g:ale_python_pyre_use_global = 1 - - AssertLinter 'pyre', ale#Escape('pyre') . ' persistent' - -Execute(Setting executable to 'pipenv' appends 'run pyre'): - let g:ale_python_pyre_executable = 'path/to/pipenv' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'path/to/pipenv', - \ ale#Escape('path/to/pipenv') . ' run pyre persistent' - -Execute(Pipenv is detected when python_pyre_auto_pipenv is set): - let g:ale_python_pyre_auto_pipenv = 1 - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - - AssertLinter 'pipenv', - \ ale#Escape('pipenv') . ' run pyre persistent' - -Execute(Setting executable to 'poetry' appends 'run pyre'): - let g:ale_python_pyre_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', - \ ale#Escape('path/to/poetry') . ' run pyre persistent' - -Execute(Poetry is detected when python_pyre_auto_poetry is set): - let g:ale_python_pyre_auto_poetry = 1 - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - - AssertLinter 'poetry', - \ ale#Escape('poetry') . ' run pyre persistent' - -Execute(The FindProjectRoot should detect the project root directory for namespace package via .pyre_configuration.local): - silent execute 'file ' . fnameescape(g:dir . '/../test-files/python/pyre_configuration_dir/foo/bar.py') - - AssertEqual - \ ale#path#Simplify(g:dir . '/../test-files/python/pyre_configuration_dir'), - \ ale#python#FindProjectRoot(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pyrex_cython.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pyrex_cython.vader deleted file mode 100644 index af86366a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pyrex_cython.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('pyrex', 'cython') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default cython command should be correct): - AssertLinter 'cython', ale#Escape('cython') - \ . ' --working %s:h' - \ . ' --include-dir %s:h' - \ . ' --warning-extra' - \ . ' --output-file ' . g:ale#util#nul_file . ' %t' - -Execute(The cython executable should be configurable): - let b:ale_pyrex_cython_executable = 'cython_foobar' - - AssertLinter 'cython_foobar', ale#Escape('cython_foobar') - \ . ' --working %s:h' - \ . ' --include-dir %s:h' - \ . ' --warning-extra' - \ . ' --output-file ' . g:ale#util#nul_file . ' %t' - -Execute(Additional cython options should be configurable): - let b:ale_pyrex_cython_options = '--foobar' - - AssertLinter 'cython', ale#Escape('cython') - \ . ' --working %s:h' - \ . ' --include-dir %s:h' - \ . ' --foobar' - \ . ' --output-file ' . g:ale#util#nul_file . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_pyright.vader b/dotfiles/.vim/plugged/ale/test/linter/test_pyright.vader deleted file mode 100644 index 51510cf2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_pyright.vader +++ /dev/null @@ -1,116 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'pyright') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - unlet! b:executable - - call ale#assert#TearDownLinterTest() - -Execute(The command callback should return the correct default string): - AssertLinter - \ 'pyright-langserver', - \ ale#Escape('pyright-langserver') . ' --stdio' - -Execute(The executable should be configurable): - let g:ale_python_pyright_executable = '/bin/foo-bar' - - AssertLinter - \ '/bin/foo-bar', - \ ale#Escape('/bin/foo-bar') . ' --stdio' - -Execute(The default configuration should be mostly empty): - " The default configuration needs to have at least one key in it, - " or the server won't start up properly. - AssertLSPConfig {'python': {}} - - let b:ale_python_pyright_config = {} - - AssertLSPConfig {'python': {}} - -Execute(virtualenv paths should be set in configuration by default): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - AssertLSPConfig { - \ 'python': { - \ 'pythonPath': ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/python'), - \ 'venvPath': ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env'), - \ }, - \} - -Execute(The pythonPath should be set based on whatever the ovveride for the venvPath is set to): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - " This overrides the default detection of the path. - let b:ale_python_pyright_config = { - \ 'python': { - \ 'venvPath': '/foo/bar', - \ }, - \} - - AssertLSPConfig { - \ 'python': { - \ 'pythonPath': ale#path#Simplify('/foo/bar/' . b:bin_dir . '/python'), - \ 'venvPath': '/foo/bar', - \ }, - \} - -Execute(You should be able to override pythonPath when venvPath is detected): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - " This overrides the default detection of the path. - let b:ale_python_pyright_config = { - \ 'python': { - \ 'pythonPath': '/bin/python', - \ }, - \} - - AssertLSPConfig { - \ 'python': { - \ 'pythonPath': '/bin/python', - \ 'venvPath': ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env'), - \ }, - \} - -Execute(You should be able to override both pythonPath and venvPath): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - " This overrides the default detection of the path. - let b:ale_python_pyright_config = { - \ 'python': { - \ 'pythonPath': '/bin/python', - \ 'venvPath': '/other/dir', - \ }, - \} - - AssertLSPConfig { - \ 'python': { - \ 'pythonPath': '/bin/python', - \ 'venvPath': '/other/dir', - \ }, - \} - -Execute(You should be able to define other settings): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:ale_python_pyright_config = { - \ 'python': { - \ 'analysis': {'logLevel': 'warning'}, - \ }, - \ 'pyright': { - \ 'disableLanguageServices': v:true, - \ }, - \} - - AssertLSPConfig { - \ 'python': { - \ 'analysis': {'logLevel': 'warning'}, - \ 'pythonPath': ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/python'), - \ 'venvPath': ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/env'), - \ }, - \ 'pyright': { - \ 'disableLanguageServices': v:true, - \ }, - \} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_qmlfmt.vader b/dotfiles/.vim/plugged/ale/test/linter/test_qmlfmt.vader deleted file mode 100644 index 53502f4d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_qmlfmt.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('qml', 'qmlfmt') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The qml qmlfmt command callback should return the correct default string): - AssertLinter 'qmlfmt', ale#Escape('qmlfmt') . ' -e', - -Execute(The qmlfmt executable should be configurable): - let g:ale_qml_qmlfmt_executable = '~/.local/bin/qmlfmt' - - AssertLinter '~/.local/bin/qmlfmt', ale#Escape('~/.local/bin/qmlfmt') . ' -e' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_r_languageserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_r_languageserver.vader deleted file mode 100644 index 1a6fe851..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_r_languageserver.vader +++ /dev/null @@ -1,22 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('r', 'languageserver') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'Rscript', 'Rscript --no-save --no-restore --no-site-file --no-init-file -e ' . ale#Escape('languageserver::run()') - -Execute(The project root should be detected correctly): - AssertLSPProject '.' - - call ale#test#SetFilename('../test-files/r/dummy/test.R') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/r') - -Execute(Should accept configuration settings): - AssertLSPConfig {} - - let b:ale_r_languageserver_config = {'r': {'lsp': {'debug': 'true', 'diagnostics': 'true'}}} - - AssertLSPConfig {'r': {'lsp': {'debug': 'true', 'diagnostics': 'true'}}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_racket_langserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_racket_langserver.vader deleted file mode 100644 index 021eb565..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_racket_langserver.vader +++ /dev/null @@ -1,45 +0,0 @@ -" Author: D. Ben Knoble -" Description: Tests for racket-langserver lsp linter. -Before: - call ale#assert#SetUpLinterTest('racket', 'langserver') - -After: - call ale#assert#TearDownLinterTest() - -Execute(command callback should return default string): - AssertLinter 'racket', ale#Escape('racket').' -l racket-langserver' - -Execute(should set racket-langserver for deep module 3): - call ale#test#SetFilename('../test-files/racket/many-inits/a/b/c/foo.rkt') - AssertLSPLanguage 'racket' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#test#GetFilename('../test-files/racket/many-inits') - -Execute(should set racket-langserver for deep module 2): - call ale#test#SetFilename('../test-files/racket/many-inits/a/b/foo.rkt') - AssertLSPLanguage 'racket' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#test#GetFilename('../test-files/racket/many-inits') - -Execute(should set racket-langserver for deep module 1): - call ale#test#SetFilename('../test-files/racket/many-inits/a/foo.rkt') - AssertLSPLanguage 'racket' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#test#GetFilename('../test-files/racket/many-inits') - -Execute(should set racket-langserver for top-level module): - call ale#test#SetFilename('../test-files/racket/many-inits/foo.rkt') - AssertLSPLanguage 'racket' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#test#GetFilename('../test-files/racket/many-inits') - -Execute(should set racket-langserver for non-package module or script): - call ale#test#SetFilename('../test-files/racket/simple-script/foo.rkt') - AssertLSPLanguage 'racket' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#test#GetFilename('../test-files/racket/simple-script') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_racket_raco.vader b/dotfiles/.vim/plugged/ale/test/linter/test_racket_raco.vader deleted file mode 100644 index fb83ffa1..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_racket_raco.vader +++ /dev/null @@ -1,10 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('racket', 'raco') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command and executable should be correct): - AssertLinter 'raco', 'raco expand %s' - - diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rails_best_practices.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rails_best_practices.vader deleted file mode 100644 index 6a6f7a53..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rails_best_practices.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ruby', 'rails_best_practices') - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/db/test.rb') - - let b:args = '--silent -f json' - \ . ' --output-file ' . (has('win32') ? '%t' : '/dev/stdout') - let b:app_path = ale#path#Simplify(g:dir . '/../test-files/ruby/valid_rails_app') - let b:suffix = has('win32') ? '; type %t' : '' - -After: - unlet! b:args - unlet! b:app_path - unlet! b:suffix - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to rails_best_practices): - AssertLinter 'rails_best_practices', ale#Escape('rails_best_practices') - \ . ' ' . b:args - \ . ' ' . ale#Escape(b:app_path) - \ . b:suffix - -Execute(Should be able to set a custom executable): - let g:ale_ruby_rails_best_practices_executable = 'bin/rails_best_practices' - - AssertLinter 'bin/rails_best_practices', ale#Escape('bin/rails_best_practices') - \ . ' ' . b:args - \ . ' ' . ale#Escape(b:app_path) - \ . b:suffix - -Execute(Setting bundle appends 'exec rails_best_practices'): - let g:ale_ruby_rails_best_practices_executable = 'path to/bundle' - - AssertLinter 'path to/bundle', ale#Escape('path to/bundle') - \ . ' exec rails_best_practices' - \ . ' ' . b:args - \ . ' ' . ale#Escape(b:app_path) - \ . b:suffix - -Execute(Command callback should be empty when not in a valid Rails app): - call ale#test#SetFilename('../test-files/ruby/not_a_rails_app/test.rb') - - AssertLinter 'rails_best_practices', '' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_reason_ls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_reason_ls.vader deleted file mode 100644 index 57ea7302..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_reason_ls.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('reason', 'ls') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The linter should not be run by default): - AssertLinterNotExecuted - -Execute(The executable should be configurable): - let b:ale_reason_ls_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - -Execute(There should be no default project root): - AssertLSPProject '' - -Execute(The project root should be detected using bsconfig.json): - call ale#test#SetFilename('../test-files/reasonml/test.ml') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/reasonml') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_reason_ols.vader b/dotfiles/.vim/plugged/ale/test/linter/test_reason_ols.vader deleted file mode 100644 index fb90e36f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_reason_ols.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('reason', 'ols') - - Save &filetype - let &filetype = 'reason' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'reason' - -Execute(The default executable should be correct): - AssertLinter 'ocaml-language-server', - \ ale#Escape('ocaml-language-server') . ' --stdio' - -Execute(The project root should be detected correctly): - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/ols/file.re') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/ols') - -Execute(The local executable should be used when available): - call ale#test#SetFilename('../test-files/ols/file.re') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/ols/node_modules/.bin/ocaml-language-server'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/ols/node_modules/.bin/ocaml-language-server')) . ' --stdio' - -Execute(The gloabl executable should always be used when use_global is set): - let g:ale_reason_ols_use_global = 1 - call ale#test#SetFilename('../test-files/ols/file.re') - - AssertLinter 'ocaml-language-server', - \ ale#Escape('ocaml-language-server') . ' --stdio' - -Execute(The executable should be configurable): - let g:ale_reason_ols_executable = 'foobar' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'foobar', ale#Escape('foobar') . ' --stdio' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_reek.vader b/dotfiles/.vim/plugged/ale/test/linter/test_reek.vader deleted file mode 100644 index 798c3314..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_reek.vader +++ /dev/null @@ -1,49 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ruby', 'reek') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The reek callbacks should return the correct default values): - GivenCommandOutput ['reek 5.0.0'] - AssertLinter 'reek', [ - \ ale#Escape('reek') . ' --version', - \ ale#Escape('reek') . ' -f json --no-progress --no-color --force-exclusion --stdin-filename %s', - \] - - " Try with older versions. - call ale#semver#ResetVersionCache() - - GivenCommandOutput ['reek 4.8.2'] - AssertLinter 'reek', [ - \ ale#Escape('reek') . ' --version', - \ ale#Escape('reek') . ' -f json --no-progress --no-color --force-exclusion', - \] - -Execute(Setting bundle appends 'exec reek'): - let g:ale_ruby_reek_executable = 'bundle' - - GivenCommandOutput ['reek 5.0.0'] - AssertLinter 'bundle', ale#Escape('bundle') - \ . ' exec reek' - \ . ' -f json --no-progress --no-color --force-exclusion --stdin-filename %s', - - " Try with older versions. - call ale#semver#ResetVersionCache() - - GivenCommandOutput ['reek 4.8.2'] - AssertLinter 'bundle', ale#Escape('bundle') - \ . ' exec reek' - \ . ' -f json --no-progress --no-color --force-exclusion' - -Execute(The reek version check should be cached): - GivenCommandOutput ['reek 5.0.0'] - AssertLinter 'reek', [ - \ ale#Escape('reek') . ' --version', - \ ale#Escape('reek') . ' -f json --no-progress --no-color --force-exclusion --stdin-filename %s', - \] - - GivenCommandOutput [] - AssertLinter 'reek', [ - \ ale#Escape('reek') . ' -f json --no-progress --no-color --force-exclusion --stdin-filename %s', - \] diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rego_opacheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rego_opacheck.vader deleted file mode 100644 index 886a9339..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rego_opacheck.vader +++ /dev/null @@ -1,16 +0,0 @@ - -" Based upon :help ale-development -Before: - call ale#assert#SetUpLinterTest('rego', 'opacheck') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'opa', - \ ale#Escape('opa') . ' check %s --format json ' - -Execute(The default command should be overriden): - let b:ale_rego_opacheck_executable = '/bin/other/opa' - AssertLinter '/bin/other/opa', - \ ale#Escape('/bin/other/opa') . ' check %s --format json ' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_remark_lint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_remark_lint.vader deleted file mode 100644 index a34f0a90..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_remark_lint.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - " This is just one language for the linter. - call ale#assert#SetUpLinterTest('markdown', 'remark_lint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'remark', - \ ale#Escape('remark') . ' --no-stdout --no-color' - -Execute(The executable should be configurable): - let b:ale_markdown_remark_lint_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' --no-stdout --no-color' - -Execute(The options should be configurable): - let b:ale_markdown_remark_lint_options = '--something' - - AssertLinter 'remark', - \ ale#Escape('remark') . ' --something --no-stdout --no-color' - -Execute(The local executable from .bin should be used if available): - call ale#test#SetFilename('../test-files/remark_lint/with_bin_path/foo.md') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/remark_lint/with_bin_path/node_modules/.bin/remark'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/remark_lint/with_bin_path/node_modules/.bin/remark')) - \ . ' --no-stdout --no-color' - -Execute(The global executable should be uesd if the option is set): - let b:ale_markdown_remark_lint_use_global = 1 - call ale#test#SetFilename('../test-files/remark_lint/with_bin_path/foo.md') - - AssertLinter 'remark', ale#Escape('remark') - \ . ' --no-stdout --no-color' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_revive.vader b/dotfiles/.vim/plugged/ale/test/linter/test_revive.vader deleted file mode 100644 index 172294f3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_revive.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - Save g:ale_go_go111module - - call ale#assert#SetUpLinterTest('go', 'revive') - -After: - Restore - - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The default revive command should be correct): - AssertLinter 'revive', ale#Escape('revive') . ' %t' - -Execute(The revive executable should be configurable): - let b:ale_go_revive_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' %t' - -Execute(The revive options should be configurable): - let b:ale_go_revive_options = '--foo' - - AssertLinter 'revive', ale#Escape('revive') . ' --foo %t' - -Execute(The revive command should support Go environment variables): - let b:ale_go_go111module = 'on' - - AssertLinter 'revive', - \ ale#Env('GO111MODULE', 'on') . ale#Escape('revive') . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rflint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rflint.vader deleted file mode 100644 index 0ee97b30..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rflint.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('robot', 'rflint') - let b:rflint_format = ' --format' - \ . ' "{filename}:{severity}:{linenumber}:{char}:{rulename}:{message}" %s' - -After: - call ale#assert#TearDownLinterTest() - unlet! b:rflint_format - -Execute(The rflint command callback should return default string): - AssertLinter 'rflint', - \ 'rflint' - \ . b:rflint_format - -Execute(The rflint executable should be configurable): - let g:ale_robot_rflint_executable = '~/.local/bin/rflint' - - AssertLinter '~/.local/bin/rflint', - \ '~/.local/bin/rflint' - \ . b:rflint_format diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rnix.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rnix.vader deleted file mode 100644 index 8970ee99..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rnix.vader +++ /dev/null @@ -1,12 +0,0 @@ -" Author: jD91mZM2 -" Description: Tests for rnix-lsp language client -Before: - call ale#assert#SetUpLinterTest('nix', 'rnix_lsp') - -After: - call ale#assert#TearDownLinterTest() - -Execute(should start rnix-lsp): - AssertLSPLanguage 'nix' - AssertLSPOptions {} - AssertLSPProject ale#path#Simplify('.') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rst_textlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rst_textlint.vader deleted file mode 100644 index b2d99636..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rst_textlint.vader +++ /dev/null @@ -1,65 +0,0 @@ -" Author: januswel, w0rp - -Before: - " This is just one language for the linter. - call ale#assert#SetUpLinterTest('rst', 'textlint') - - " The configuration is shared between many languages. - Save g:ale_textlint_executable - Save g:ale_textlint_use_global - Save g:ale_textlint_options - - let g:ale_textlint_executable = 'textlint' - let g:ale_textlint_use_global = 0 - let g:ale_textlint_options = '' - - unlet! b:ale_textlint_executable - unlet! b:ale_textlint_use_global - unlet! b:ale_textlint_options - -After: - unlet! b:command_tail - unlet! b:ale_textlint_executable - unlet! b:ale_textlint_use_global - unlet! b:ale_textlint_options - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'textlint', - \ ale#Escape('textlint') . ' -f json --stdin --stdin-filename %s' - -Execute(The executable should be configurable): - let b:ale_textlint_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -f json --stdin --stdin-filename %s' - -Execute(The options should be configurable): - let b:ale_textlint_options = '--something' - - AssertLinter 'textlint', - \ ale#Escape('textlint') . ' --something -f json --stdin --stdin-filename %s' - -Execute(The local executable from .bin should be used if available): - call ale#test#SetFilename('../test-files/textlint/with_bin_path/foo.txt') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_bin_path/node_modules/.bin/textlint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_bin_path/node_modules/.bin/textlint')) - \ . ' -f json --stdin --stdin-filename %s' - -Execute(The local executable from textlint/bin should be used if available): - call ale#test#SetFilename('../test-files/textlint/with_textlint_bin_path/foo.txt') - - if has('win32') - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#Escape('node.exe') . ' ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s' - else - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s' - endif diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rubocop.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rubocop.vader deleted file mode 100644 index e7cc32e8..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rubocop.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ruby', 'rubocop') - call ale#test#SetFilename('dummy.rb') - - let g:ale_ruby_rubocop_executable = 'rubocop' - let g:ale_ruby_rubocop_options = '' - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to rubocop): - AssertLinter 'rubocop', ale#Escape('rubocop') - \ . ' --format json --force-exclusion --stdin %s' - -Execute(Should be able to set a custom executable): - let g:ale_ruby_rubocop_executable = 'bin/rubocop' - - AssertLinter 'bin/rubocop' , ale#Escape('bin/rubocop') - \ . ' --format json --force-exclusion --stdin %s' - -Execute(Setting bundle appends 'exec rubocop'): - let g:ale_ruby_rubocop_executable = 'path to/bundle' - - AssertLinter 'path to/bundle', ale#Escape('path to/bundle') - \ . ' exec rubocop' - \ . ' --format json --force-exclusion --stdin %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ruby.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ruby.vader deleted file mode 100644 index d957079d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ruby.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ruby', 'ruby') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'ruby', ale#Escape('ruby') . ' -w -c %t' - -Execute(The executable should be configurable): - let g:ale_ruby_ruby_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' -w -c %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ruby_debride.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ruby_debride.vader deleted file mode 100644 index f7628432..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ruby_debride.vader +++ /dev/null @@ -1,8 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ruby', 'debride') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'debride', ale#Escape('debride') . ' %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ruby_solargraph.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ruby_solargraph.vader deleted file mode 100644 index 1ae67f50..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ruby_solargraph.vader +++ /dev/null @@ -1,43 +0,0 @@ -" Author: Horacio Sanson -" Description: Tests for solargraph lsp linter. -Before: - call ale#assert#SetUpLinterTest('ruby', 'solargraph') - -After: - call ale#assert#TearDownLinterTest() - -Execute(command callback should return default string): - AssertLinter 'solargraph', ale#Escape('solargraph') . ' stdio' - -Execute(command callback executable can be overridden): - let g:ale_ruby_solargraph_executable = 'foobar' - AssertLinter 'foobar', ale#Escape('foobar') . ' stdio' - -Execute(should set solargraph for rails app): - call ale#test#SetFilename('../test-files/ruby/valid_rails_app/app/models/thing.rb') - AssertLSPLanguage 'ruby' - AssertLSPOptions {} - AssertLSPProject ale#test#GetFilename('../test-files/ruby/valid_rails_app') - -Execute(should set solargraph for ruby app1): - call ale#test#SetFilename('../test-files/ruby/valid_ruby_app1/lib/file.rb') - AssertLSPLanguage 'ruby' - AssertLSPOptions {} - AssertLSPProject ale#test#GetFilename('../test-files/ruby/valid_ruby_app1') - -Execute(should set solargraph for ruby app2): - call ale#test#SetFilename('../test-files/ruby/valid_ruby_app2/lib/file.rb') - AssertLSPLanguage 'ruby' - AssertLSPOptions {} - AssertLSPProject ale#test#GetFilename('../test-files/ruby/valid_ruby_app2') - -Execute(should set solargraph for ruby app3): - call ale#test#SetFilename('../test-files/ruby/valid_ruby_app3/lib/file.rb') - AssertLSPLanguage 'ruby' - AssertLSPOptions {} - AssertLSPProject ale#test#GetFilename('../test-files/ruby/valid_ruby_app3') - -Execute(should accept initialization options): - AssertLSPOptions {} - let b:ale_ruby_solargraph_options = { 'diagnostics': 'true' } - AssertLSPOptions { 'diagnostics': 'true' } diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rust_analyzer.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rust_analyzer.vader deleted file mode 100644 index 1dd2c780..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rust_analyzer.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('rust', 'analyzer') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'rust-analyzer', ale#Escape('rust-analyzer') - -Execute(The project root should be detected correctly in cargo projects): - call ale#test#SetFilename('../test-files/rust/cargo/testfile.rs') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/rust/cargo') - -Execute(The project root should be detected correctly in non-cargo projects): - call ale#test#SetFilename('../test-files/rust/rust-project/testfile.rs') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/rust/rust-project') - -Execute(The project root should be empty when no project files can be detected): - call ale#test#SetFilename('../test-files/dummy') - - AssertLSPProject '' - -Execute(Should accept configuration settings): - AssertLSPConfig {} - let b:ale_rust_analyzer_config = {'diagnostics': {'disabled': ['unresolved-import']}} - AssertLSPOptions {'diagnostics': {'disabled': ['unresolved-import']}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rust_rls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rust_rls.vader deleted file mode 100644 index 62c90d61..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rust_rls.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('rust', 'rls') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'rls', ale#Escape('rls') - -Execute(The toolchain should be configurable): - let g:ale_rust_rls_toolchain = 'stable' - - AssertLinter 'rls', ale#Escape('rls') . ' +' . ale#Escape('stable') - -Execute(The toolchain should be ommitted if not given): - let g:ale_rust_rls_toolchain = '' - - AssertLinter 'rls', ale#Escape('rls') - -Execute(The project root should be detected correctly for cargo projects): - call ale#test#SetFilename('../test-files/rust/cargo/testfile.rs') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/rust/cargo') - -Execute(The project root should be empty when no project files can be detected): - call ale#test#SetFilename('../test-files/dummy') - - AssertLSPProject '' - -Execute(Should accept configuration settings): - AssertLSPConfig {} - let b:ale_rust_rls_config = {'rust': {'clippy_preference': 'on'}} - AssertLSPConfig {'rust': {'clippy_preference': 'on'}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_rustc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_rustc.vader deleted file mode 100644 index 92d9fa14..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_rustc.vader +++ /dev/null @@ -1,25 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('rust', 'rustc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'rustc', 'rustc --error-format=json --emit=mir -o /dev/null -' - -Execute(The options should be configurable): - call ale#test#SetFilename('../test-files/dummy') - - let b:ale_rust_rustc_options = '--foo' - - AssertLinter 'rustc', 'rustc --error-format=json --foo -' - -Execute(Some default paths should be included when the project is a Cargo project): - call ale#test#SetFilename('../test-files/rust/cargo/testfile.rs') - - AssertLinter 'rustc', 'rustc --error-format=json --emit=mir -o /dev/null' - \ . ' -L ' . ale#Escape(ale#path#GetAbsPath(g:dir, '../test-files/rust/cargo/target/debug/deps')) - \ . ' -L ' . ale#Escape(ale#path#GetAbsPath(g:dir, '../test-files/rust/cargo/target/release/deps')) - \ . ' -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_ruumba.vader b/dotfiles/.vim/plugged/ale/test/linter/test_ruumba.vader deleted file mode 100644 index 9fa48903..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_ruumba.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('eruby', 'ruumba') - call ale#test#SetFilename('dummy.html.erb') - - let g:ale_eruby_ruumba_executable = 'ruumba' - let g:ale_eruby_ruumba_options = '' - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to ruumba): - AssertLinter 'ruumba', ale#Escape('ruumba') - \ . ' --format json --force-exclusion --stdin %s' - -Execute(Should be able to set a custom executable): - let g:ale_eruby_ruumba_executable = 'bin/ruumba' - - AssertLinter 'bin/ruumba' , ale#Escape('bin/ruumba') - \ . ' --format json --force-exclusion --stdin %s' - -Execute(Setting bundle appends 'exec ruumba'): - let g:ale_eruby_ruumba_executable = 'path to/bundle' - - AssertLinter 'path to/bundle', ale#Escape('path to/bundle') - \ . ' exec ruumba' - \ . ' --format json --force-exclusion --stdin %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_sass_sasslint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_sass_sasslint.vader deleted file mode 100644 index 87f0c8ad..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_sass_sasslint.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('sass', 'sasslint') - call ale#test#SetFilename('test.sass') - unlet! b:executable - -After: - call ale#assert#TearDownLinterTest() - -Execute(should default to source, bin/sass-lint.js): - call ale#test#SetFilename('../test-files/sasslint/with-source/test.sass') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/sasslint/with-source/node_modules/sass-lint/bin/sass-lint.js' - \) - - AssertLinter b:executable, - \ (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(b:executable) - \ . ' -v -q -f compact %t' - -Execute(should fallback to bin, .bin/sass-lint): - call ale#test#SetFilename('../test-files/sasslint/with-bin/test.sass') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/sasslint/with-bin/node_modules/.bin/sass-lint' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' -v -q -f compact %t' - -Execute(should fallback to global bin): - AssertLinter 'sass-lint', ale#Escape('sass-lint') . ' -v -q -f compact %t' - -Execute(The global executable should be configurable): - let b:ale_sass_sasslint_executable = 'foo' - - AssertLinter 'foo', ale#Escape('foo') . ' -v -q -f compact %t' - -Execute(The options should be configurable): - let b:ale_sass_sasslint_options = '--bar' - - AssertLinter 'sass-lint', ale#Escape('sass-lint') . ' --bar -v -q -f compact %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_scala_metals.vader b/dotfiles/.vim/plugged/ale/test/linter/test_scala_metals.vader deleted file mode 100644 index b14e3e02..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_scala_metals.vader +++ /dev/null @@ -1,21 +0,0 @@ -" Author: Jeffrey Lau https://github.com/zoonfafer -" Description: Tests for the Scala Metals linter -Before: - call ale#assert#SetUpLinterTest('scala', 'metals') - -After: - call ale#assert#TearDownLinterTest() - -Execute(should set metals for sbt project with build.sbt): - call ale#test#SetFilename('../test-files/scala/valid_sbt_project/Main.scala') - AssertLSPLanguage 'scala' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#test#GetFilename('../test-files/scala/valid_sbt_project') - -Execute(should not set metals for sbt project without build.sbt): - call ale#test#SetFilename('../test-files/scala/invalid_sbt_project/Main.scala') - AssertLSPLanguage 'scala' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject '' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_scala_sbtserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_scala_sbtserver.vader deleted file mode 100644 index 118e090f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_scala_sbtserver.vader +++ /dev/null @@ -1,23 +0,0 @@ -" Author: ophirr33 -" Description: Tests for the sbt Server lsp linter -Before: - call ale#assert#SetUpLinterTest('scala', 'sbtserver') - -After: - call ale#assert#TearDownLinterTest() - -Execute(should set sbtserver for sbt project with build.sbt): - call ale#test#SetFilename('../test-files/scala/valid_sbt_project/Main.scala') - AssertLSPLanguage 'scala' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#test#GetFilename('../test-files/scala/valid_sbt_project') - AssertLSPAddress '127.0.0.1:4273' - -Execute(should not set sbtserver for sbt project without build.sbt): - call ale#test#SetFilename('../test-files/scala/invalid_sbt_project/Main.scala') - AssertLSPLanguage 'scala' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject '' - AssertLSPAddress '127.0.0.1:4273' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_scalac.vader b/dotfiles/.vim/plugged/ale/test/linter/test_scalac.vader deleted file mode 100644 index ea5ae109..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_scalac.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('scala', 'scalac') - -After: - call ale#assert#TearDownLinterTest() - -Given scala(An empty Scala file): -Execute(The default executable and command should be correct): - AssertLinter 'scalac', ale#Escape('scalac') . ' -Ystop-after:parser %t' - -Given scala.sbt(An empty SBT file): -Execute(scalac should not be run for sbt files): - AssertLinterNotExecuted diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_scalastyle.vader b/dotfiles/.vim/plugged/ale/test/linter/test_scalastyle.vader deleted file mode 100644 index 3c28f7a3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_scalastyle.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('scala', 'scalastyle') - -After: - unlet! g:ale_scalastyle_config_loc - call ale#linter#Reset() - -Execute(Should return the correct default command): - AssertLinter 'scalastyle', 'scalastyle %t' - -Execute(Should allow using a custom config file): - let b:ale_scala_scalastyle_config = '/dooper/config.xml' - - AssertLinter 'scalastyle', 'scalastyle' - \ . ' --config ' . ale#Escape('/dooper/config.xml') - \ . ' %t' - -Execute(Should support a legacy option for the scalastyle config): - unlet! g:ale_scala_scalastyle_config - let g:ale_scalastyle_config_loc = '/dooper/config.xml' - - call ale#linter#Reset() - runtime ale_linters/scala/scalastyle.vim - - AssertLinter 'scalastyle', 'scalastyle' - \ . ' --config ' . ale#Escape('/dooper/config.xml') - \ . ' %t' - -Execute(Should allow using custom options): - let b:ale_scala_scalastyle_options = '--warnings false --quiet true' - - AssertLinter 'scalastyle', 'scalastyle' - \ . ' --warnings false --quiet true' - \ . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_scss_sasslint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_scss_sasslint.vader deleted file mode 100644 index 839761c2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_scss_sasslint.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('scss', 'sasslint') - call ale#test#SetFilename('test.scss') - unlet! b:executable - -After: - call ale#assert#TearDownLinterTest() - -Execute(should default to source, bin/sass-lint.js): - call ale#test#SetFilename('../test-files/sasslint/with-source/test.scss') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/sasslint/with-source/node_modules/sass-lint/bin/sass-lint.js' - \) - - AssertLinter b:executable, - \ (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(b:executable) - \ . ' -v -q -f compact %t' - -Execute(should fallback to bin, .bin/sass-lint): - call ale#test#SetFilename('../test-files/sasslint/with-bin/test.scss') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/sasslint/with-bin/node_modules/.bin/sass-lint' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' -v -q -f compact %t' - -Execute(should fallback to global bin): - AssertLinter 'sass-lint', ale#Escape('sass-lint') . ' -v -q -f compact %t' - -Execute(The global executable should be configurable): - let b:ale_scss_sasslint_executable = 'foo' - - AssertLinter 'foo', ale#Escape('foo') . ' -v -q -f compact %t' - -Execute(The options should be configurable): - let b:ale_scss_sasslint_options = '--bar' - - AssertLinter 'sass-lint', ale#Escape('sass-lint') . ' --bar -v -q -f compact %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_scss_stylelint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_scss_stylelint.vader deleted file mode 100644 index bf45ccd0..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_scss_stylelint.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('scss', 'stylelint') - unlet! b:executable - -After: - unlet! b:executable - call ale#assert#TearDownLinterTest() - -Execute(node_modules directories should be discovered): - call ale#test#SetFilename('../test-files/stylelint/nested/testfile.scss') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/stylelint/node_modules/.bin/stylelint' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' --stdin-filename %s' - -Execute(The global override should work): - let b:ale_scss_stylelint_executable = 'foobar' - let b:ale_scss_stylelint_use_global = 1 - - call ale#test#SetFilename('../test-files/stylelint/nested/testfile.scss') - - AssertLinter 'foobar', ale#Escape('foobar') . ' --stdin-filename %s' - -Execute(Extra options should be configurable): - call ale#test#SetFilename('../test-files/dummy') - - let b:ale_scss_stylelint_options = '--configFile ''/absolute/path/to/file''' - - AssertLinter 'stylelint', - \ ale#Escape('stylelint') . ' --configFile ''/absolute/path/to/file'' --stdin-filename %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_shellcheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_shellcheck.vader deleted file mode 100644 index 40995755..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_shellcheck.vader +++ /dev/null @@ -1,106 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('sh', 'shellcheck') - call ale#test#SetFilename('test.sh') - - let b:suffix = ' -f gcc -' - -After: - unlet! b:is_bash - unlet! b:suffix - call ale#assert#TearDownLinterTest() - -Execute(The default shellcheck command should be correct): - AssertLinterCwd '%s:h' - AssertLinter 'shellcheck', ale#Escape('shellcheck') . b:suffix - -Execute(The option disabling changing directories should work): - let g:ale_sh_shellcheck_change_directory = 0 - - AssertLinterCwd '' - AssertLinter 'shellcheck', ale#Escape('shellcheck') . b:suffix - -Execute(The shellcheck command should accept options): - let b:ale_sh_shellcheck_options = '--foobar' - - AssertLinter 'shellcheck', ale#Escape('shellcheck') . ' --foobar' . b:suffix - -Execute(The shellcheck command should accept options and exclusions): - let b:ale_sh_shellcheck_options = '--foobar' - let b:ale_sh_shellcheck_exclusions = 'foo,bar' - - AssertLinter 'shellcheck', - \ ale#Escape('shellcheck') . ' --foobar -e foo,bar' . b:suffix - -Execute(The shellcheck command should include the dialect): - let b:is_bash = 1 - - AssertLinter 'shellcheck', ale#Escape('shellcheck') . ' -s bash' . b:suffix - -Execute(The shellcheck command should use ale_sh_shellcheck_dialect): - let b:ale_sh_shellcheck_dialect = 'ksh93' - - AssertLinter 'shellcheck', ale#Escape('shellcheck') . ' -s ksh93' . b:suffix - -Execute(The shellcheck command should allow unspecified dialect): - let b:ale_sh_shellcheck_dialect = '' - - AssertLinter 'shellcheck', ale#Escape('shellcheck') . b:suffix - -Execute(The shellcheck command should include the dialect before options and exclusions): - let b:is_bash = 1 - let b:ale_sh_shellcheck_options = '--foobar' - let b:ale_sh_shellcheck_exclusions = 'foo,bar' - - AssertLinter 'shellcheck', ale#Escape('shellcheck') - \ . ' -s bash --foobar -e foo,bar' - \ . b:suffix - -Execute(The -x option should be added when the version is new enough): - AssertLinter 'shellcheck', [ - \ ale#Escape('shellcheck') . ' --version', - \ ale#Escape('shellcheck') . b:suffix, - \] - - GivenCommandOutput [ - \ 'ShellCheck - shell script analysis tool', - \ 'version: 0.4.4', - \ 'license: GNU General Public License, version 3', - \ 'website: http://www.shellcheck.net', - \] - AssertLinter 'shellcheck', [ - \ ale#Escape('shellcheck') . ' --version', - \ ale#Escape('shellcheck') . ' -x' . b:suffix, - \] - - " We should cache the version check - GivenCommandOutput [] - AssertLinter 'shellcheck', [ - \ ale#Escape('shellcheck') . ' -x' . b:suffix, - \] - -Execute(The -x option should not be added when the version is too old): - GivenCommandOutput [ - \ 'ShellCheck - shell script analysis tool', - \ 'version: 0.3.9', - \ 'license: GNU General Public License, version 3', - \ 'website: http://www.shellcheck.net', - \] - AssertLinter 'shellcheck', [ - \ ale#Escape('shellcheck') . ' --version', - \ ale#Escape('shellcheck') . b:suffix, - \] - -Execute(The version check shouldn't be run again for old versions): - GivenCommandOutput [ - \ 'ShellCheck - shell script analysis tool', - \ 'version: 0.3.9', - \ 'license: GNU General Public License, version 3', - \ 'website: http://www.shellcheck.net', - \] - AssertLinter 'shellcheck', [ - \ ale#Escape('shellcheck') . ' --version', - \ ale#Escape('shellcheck') . b:suffix, - \] - AssertLinter 'shellcheck', [ - \ ale#Escape('shellcheck') . b:suffix, - \] diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_slimlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_slimlint.vader deleted file mode 100644 index 33df9ac0..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_slimlint.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('slim', 'slimlint') - let g:default_command = 'slim-lint %t' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'slim-lint', 'slim-lint %t' - -Execute(The command should have the .rubocop.yml prepended as an env var if one exists): - call ale#test#SetFilename('../test-files/slimlint/subdir/file.slim') - - AssertLinter 'slim-lint', - \ ale#Env( - \ 'SLIM_LINT_RUBOCOP_CONF', - \ ale#path#Simplify(g:dir . '/../test-files/slimlint/.rubocop.yml') - \ ) - \ . 'slim-lint %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_solc.vader b/dotfiles/.vim/plugged/ale/test/linter/test_solc.vader deleted file mode 100644 index 23521f6a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_solc.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('solidity', 'solc') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'solc', 'solc %s' - -Execute(The options should be configurable): - let g:ale_solidity_solc_options = '--foobar' - - AssertLinter 'solc', 'solc --foobar %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_solc_commit.vader b/dotfiles/.vim/plugged/ale/test/linter/test_solc_commit.vader deleted file mode 100644 index e25c47e7..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_solc_commit.vader +++ /dev/null @@ -1,14 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('solidity', 'solc') - let g:ale_solidity_solc_executable = 'solc-v0.8.4+commit.c7e474f2' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The executable command should be configurable): - AssertLinter 'solc-v0.8.4+commit.c7e474f2', 'solc-v0.8.4+commit.c7e474f2 %s' - -Execute(The options should be configurable): - let g:ale_solidity_solc_options = '--foobar' - - AssertLinter 'solc-v0.8.4+commit.c7e474f2', 'solc-v0.8.4+commit.c7e474f2 --foobar %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_solhint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_solhint.vader deleted file mode 100644 index fc5afa9b..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_solhint.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('solidity', 'solhint') - runtime autoload/ale/handlers/solhint.vim - - let b:args = ' --formatter compact %s' - -After: - unlet! b:args - unlet! b:executable - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinterCwd '' - AssertLinter 'solhint', ale#Escape('solhint') . b:args - -Execute(The options should be configurable): - let g:ale_solidity_solhint_options = '--foobar' - - AssertLinter 'solhint', ale#Escape('solhint') . ' --foobar' . b:args - - -Execute(solhint should be run from a containing project with solhint executable): - call ale#test#SetFilename('../test-files/solhint/Contract.sol') - - let b:executable = ale#path#Simplify(g:dir . '/../test-files/solhint/node_modules/.bin/solhint') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/solhint') - AssertLinter b:executable, ale#Escape(b:executable) . b:args diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_sorbet.vader b/dotfiles/.vim/plugged/ale/test/linter/test_sorbet.vader deleted file mode 100644 index fe758635..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_sorbet.vader +++ /dev/null @@ -1,34 +0,0 @@ - -Before: - call ale#assert#SetUpLinterTest('ruby', 'sorbet') - call ale#test#SetFilename('dummy.rb') - - let g:ale_ruby_sorbet_executable = 'srb' - let g:ale_ruby_sorbet_options = '' - let g:ale_ruby_sorbet_enable_watchman = 0 - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to srb): - AssertLinter 'srb', ale#Escape('srb') - \ . ' tc --lsp --disable-watchman' - -Execute(Able to enable watchman): - let g:ale_ruby_sorbet_enable_watchman = 1 - - AssertLinter 'srb', ale#Escape('srb') - \ . ' tc --lsp' - -Execute(Should be able to set a custom executable): - let g:ale_ruby_sorbet_executable = 'bin/srb' - - AssertLinter 'bin/srb' , ale#Escape('bin/srb') - \ . ' tc --lsp --disable-watchman' - -Execute(Setting bundle appends 'exec srb tc'): - let g:ale_ruby_sorbet_executable = 'path to/bundle' - - AssertLinter 'path to/bundle', ale#Escape('path to/bundle') - \ . ' exec srb' - \ . ' tc --lsp --disable-watchman' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_spectral.vader b/dotfiles/.vim/plugged/ale/test/linter/test_spectral.vader deleted file mode 100644 index cfcf0987..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_spectral.vader +++ /dev/null @@ -1,31 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('yaml', 'spectral') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The yaml spectral command callback should return the correct default string): - AssertLinter 'spectral', ale#Escape('spectral') . ' lint --ignore-unknown-format -q -f text %t' - -Execute(The yaml spectral command callback should be configurable): - let g:ale_yaml_spectral_executable = '~/.local/bin/spectral' - - AssertLinter '~/.local/bin/spectral', - \ ale#Escape('~/.local/bin/spectral') - \ . ' lint --ignore-unknown-format -q -f text %t' - -Execute(The yaml spectral command callback should allow a global installation to be used): - let g:ale_yaml_spectral_executable = '/usr/local/bin/spectral' - let g:ale_yaml_spectral_use_global = 1 - - AssertLinter '/usr/local/bin/spectral', - \ ale#Escape('/usr/local/bin/spectral') - \ . ' lint --ignore-unknown-format -q -f text %t' - -Execute(The yaml spectral command callback should allow a local installation to be used): - call ale#test#SetFilename('../test-files/spectral/openapi.yaml') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/spectral/node_modules/.bin/spectral'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/spectral/node_modules/.bin/spectral')) - \ . ' lint --ignore-unknown-format -q -f text %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_sqllint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_sqllint.vader deleted file mode 100644 index eea9b4e0..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_sqllint.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - " Load the linter and set up a series of commands, reset linter variables, - " clear caches, etc. - " - " Vader's 'Save' command will be called here for linter variables. - call ale#assert#SetUpLinterTest('sql', 'sqllint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'sql-lint', ['sql-lint'] diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_standard.vader b/dotfiles/.vim/plugged/ale/test/linter/test_standard.vader deleted file mode 100644 index 4722cd4a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_standard.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('javascript', 'standard') - call ale#test#SetFilename('testfile.js') - unlet! b:executable - -After: - call ale#assert#TearDownLinterTest() - -Execute(bin/cmd.js paths should be preferred): - call ale#test#SetFilename('../test-files/standard/with-cmd/testfile.js') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/standard/with-cmd/node_modules/standard/bin/cmd.js' - \) - - AssertLinter b:executable, - \ (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(b:executable) - \ . ' --stdin %s' - -Execute(.bin directories should be used too): - call ale#test#SetFilename('../test-files/standard/with-bin/testfile.js') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/standard/with-bin/node_modules/.bin/standard' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' --stdin %s' - -Execute(The global executable should be used otherwise): - AssertLinter 'standard', ale#Escape('standard') . ' --stdin %s' - -Execute(The global executable should be configurable): - let b:ale_javascript_standard_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --stdin %s' - -Execute(The options should be configurable): - let b:ale_javascript_standard_options = '--wat' - - AssertLinter 'standard', ale#Escape('standard') . ' --wat --stdin %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_standardrb.vader b/dotfiles/.vim/plugged/ale/test/linter/test_standardrb.vader deleted file mode 100644 index 108dd870..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_standardrb.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('ruby', 'standardrb') - call ale#test#SetFilename('dummy.rb') - - let g:ale_ruby_standardrb_executable = 'standardrb' - let g:ale_ruby_standardrb_options = '' - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to standardrb): - AssertLinter 'standardrb', ale#Escape('standardrb') - \ . ' --format json --force-exclusion --stdin %s' - -Execute(Should be able to set a custom executable): - let g:ale_ruby_standardrb_executable = 'bin/standardrb' - - AssertLinter 'bin/standardrb' , ale#Escape('bin/standardrb') - \ . ' --format json --force-exclusion --stdin %s' - -Execute(Setting bundle appends 'exec standardrb'): - let g:ale_ruby_standardrb_executable = 'path to/bundle' - - AssertLinter 'path to/bundle', ale#Escape('path to/bundle') - \ . ' exec standardrb' - \ . ' --format json --force-exclusion --stdin %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_standardts.vader b/dotfiles/.vim/plugged/ale/test/linter/test_standardts.vader deleted file mode 100644 index 33ca8b25..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_standardts.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('typescript', 'standard') - call ale#test#SetFilename('testfile.js') - unlet! b:executable - -After: - call ale#assert#TearDownLinterTest() - -Execute(bin/cmd.js paths should be preferred): - call ale#test#SetFilename('../test-files/standard/with-cmd/testfile.js') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/standard/with-cmd/node_modules/standard/bin/cmd.js' - \) - - AssertLinter b:executable, - \ (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(b:executable) - \ . ' --stdin %s' - -Execute(.bin directories should be used too): - call ale#test#SetFilename('../test-files/standard/with-bin/testfile.js') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/standard/with-bin/node_modules/.bin/standard' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' --stdin %s' - -Execute(The global executable should be used otherwise): - AssertLinter 'standard', ale#Escape('standard') . ' --stdin %s' - -Execute(The global executable should be configurable): - let b:ale_typescript_standard_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --stdin %s' - -Execute(The options should be configurable): - let b:ale_typescript_standard_options = '--wat' - - AssertLinter 'standard', ale#Escape('standard') . ' --wat --stdin %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_starknet.vader b/dotfiles/.vim/plugged/ale/test/linter/test_starknet.vader deleted file mode 100644 index 368ab702..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_starknet.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('cairo', 'starknet') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'starknet-compile', 'starknet-compile %s' - -Execute(Extra options should be supported): - let g:ale_cairo_starknet_options = '--config' - - AssertLinter 'starknet-compile', 'starknet-compile --config %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_staticcheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_staticcheck.vader deleted file mode 100644 index 94f24a54..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_staticcheck.vader +++ /dev/null @@ -1,49 +0,0 @@ -Before: - Save g:ale_go_go111module - Save $GOPATH - - let $GOPATH = '/non/existent/directory' - - call ale#assert#SetUpLinterTest('go', 'staticcheck') - call ale#test#SetFilename('test.go') - -After: - unlet! b:ale_go_go111module - - call ale#assert#TearDownLinterTest() - -Execute(The staticcheck callback should return the right defaults): - AssertLinterCwd '%s:h' - AssertLinter 'staticcheck', ale#Escape('staticcheck') . ' .' - -Execute(staticcheck should be found in GOPATH): - " This is a directory with a fake executable - let $GOPATH = ale#test#GetFilename('../test-files/go/gopath') - - AssertLinter - \ ale#test#GetFilename('../test-files/go/gopath/bin/staticcheck'), - \ ale#Escape(ale#test#GetFilename('../test-files/go/gopath/bin/staticcheck')) - \ . ' .' - -Execute(The staticcheck callback should use configured options): - let b:ale_go_staticcheck_options = '-test' - - AssertLinter 'staticcheck', ale#Escape('staticcheck') . ' -test .' - -Execute(Unset the staticcheck `lint_package` option should use the correct command): - let b:ale_go_staticcheck_lint_package = 0 - - AssertLinterCwd '%s:h' - AssertLinter 'staticcheck', ale#Escape('staticcheck') . ' %s:t' - -Execute(The staticcheck callback should use the `GO111MODULE` option if set): - let b:ale_go_go111module = 'off' - - AssertLinter 'staticcheck', - \ ale#Env('GO111MODULE', 'off') . ale#Escape('staticcheck') . ' .' - - " Test with lint_package option set - let b:ale_go_staticcheck_lint_package = 0 - - AssertLinter 'staticcheck', - \ ale#Env('GO111MODULE', 'off') . ale#Escape('staticcheck') . ' %s:t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_sugarss_stylelint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_sugarss_stylelint.vader deleted file mode 100644 index c6000a9a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_sugarss_stylelint.vader +++ /dev/null @@ -1,33 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('sugarss', 'stylelint') - unlet! b:executable - -After: - unlet! b:executable - call ale#assert#TearDownLinterTest() - -Execute(node_modules directories should be discovered): - call ale#test#SetFilename('../test-files/stylelint/nested/testfile.sss') - - let b:executable = ale#path#Simplify( - \ g:dir - \ . '/../test-files/stylelint/node_modules/.bin/stylelint' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' --syntax=sugarss --stdin-filename %s' - -Execute(The global override should work): - let b:ale_sugarss_stylelint_executable = 'foobar' - let b:ale_sugarss_stylelint_use_global = 1 - - call ale#test#SetFilename('../test-files/stylelint/nested/testfile.sss') - - AssertLinter 'foobar', ale#Escape('foobar') . ' --syntax=sugarss --stdin-filename %s' - -Execute(Extra options should be configurable): - call ale#test#SetFilename('../test-files/dummy') - - let b:ale_sugarss_stylelint_options = '--configFile ''/absolute/path/to/file''' - - AssertLinter 'stylelint', - \ ale#Escape('stylelint') . ' --configFile ''/absolute/path/to/file'' --syntax=sugarss --stdin-filename %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_svelteserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_svelteserver.vader deleted file mode 100644 index c09f1682..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_svelteserver.vader +++ /dev/null @@ -1,8 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('svelte', 'svelteserver') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'svelteserver', ale#Escape('svelteserver') . ' --stdio' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_swaglint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_swaglint.vader deleted file mode 100644 index 98f0c594..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_swaglint.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('yaml', 'swaglint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The yaml swaglint command callback should return the correct default string): - AssertLinter 'swaglint', ale#Escape('swaglint') . ' -r compact --stdin' - -Execute(The yaml swaglint command callback should be configurable): - let g:ale_yaml_swaglint_executable = '~/.local/bin/swaglint' - - AssertLinter '~/.local/bin/swaglint', - \ ale#Escape('~/.local/bin/swaglint') . ' -r compact --stdin' - -Execute(The yaml swaglint command callback should allow a global installation to be used): - let g:ale_yaml_swaglint_executable = '/usr/local/bin/swaglint' - let g:ale_yaml_swaglint_use_global = 1 - - AssertLinter '/usr/local/bin/swaglint', - \ ale#Escape('/usr/local/bin/swaglint') . ' -r compact --stdin' - -Execute(The yaml swaglint command callback should allow a local installation to be used): - call ale#test#SetFilename('../test-files/swaglint/docs/swagger.yaml') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/swaglint/node_modules/.bin/swaglint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/swaglint/node_modules/.bin/swaglint')) - \ . ' -r compact --stdin' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_swift_appleswiftformat.vader b/dotfiles/.vim/plugged/ale/test/linter/test_swift_appleswiftformat.vader deleted file mode 100644 index 3dbae8ff..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_swift_appleswiftformat.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('swift', 'appleswiftformat') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Should use default command when use_swiftpm is not set): - call ale#test#SetFilename('../test-files/swift/non-swift-package-project/src/folder/dummy.swift') - - let g:ale_swift_appleswiftformat_executable = 'swift-format' - let g:ale_swift_appleswiftformat_use_swiftpm = 0 - - AssertLinter 'swift-format', ale#Escape('swift-format') . ' lint %t' - -Execute(Should use default command and available configuration when use_swiftpm is not set): - call ale#test#SetDirectory('/testplugin/test/test-files/swift/swift-package-project-with-config') - call ale#test#SetFilename('src/folder/dummy.swift') - - let g:ale_swift_appleswiftformat_executable = 'swift-format' - let g:ale_swift_appleswiftformat_use_swiftpm = 0 - - AssertLinter 'swift-format', - \ ale#Escape('swift-format') . ' lint %t ' . '--configuration ' - \ . glob(g:dir . '/.swift-format') - - call ale#test#RestoreDirectory() - -Execute(Should use swift run when use_swiftpm is set to 1): - call ale#test#SetFilename('../test-files/swift/swift-package-project/src/folder/dummy.swift') - - let g:ale_swift_appleswiftformat_use_swiftpm = 1 - - AssertLinter 'swift', ale#Escape('swift') . ' run swift-format lint %t' - -Execute(Should use the provided global executable): - call ale#test#SetFilename('../test-files/swift/swift-package-project/src/folder/dummy.swift') - - let g:ale_swift_appleswiftformat_executable = '/path/to/custom/swift-format' - let g:ale_swift_appleswiftformat_use_swiftpm = 0 - - AssertLinter '/path/to/custom/swift-format', - \ ale#Escape('/path/to/custom/swift-format') . ' lint %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_swift_sourcekitlsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_swift_sourcekitlsp.vader deleted file mode 100644 index 1040d590..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_swift_sourcekitlsp.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('swift', 'sourcekitlsp') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - call ale#test#SetFilename('../test-files/swift/swift-package-project/src/folder/dummy.swift') - - AssertLinter 'sourcekit-lsp', ale#Escape('sourcekit-lsp') - -Execute(Should let users configure a global executable and override local paths): - call ale#test#SetFilename('../test-files/swift/swift-package-project/src/folder/dummy.swift') - - let g:ale_sourcekit_lsp_executable = '/path/to/custom/sourcekitlsp' - - AssertLinter '/path/to/custom/sourcekitlsp', - \ ale#Escape('/path/to/custom/sourcekitlsp') - -Execute(The language should be correct): - AssertLSPLanguage 'swift' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_swiftlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_swiftlint.vader deleted file mode 100644 index d2442b0a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_swiftlint.vader +++ /dev/null @@ -1,43 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('swift', 'swiftlint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Global installation should be the default executable): - call ale#test#SetFilename('../test-files/swiftlint/global/testfile.swift') - - AssertEqual - \ 'swiftlint', - \ ale_linters#swift#swiftlint#GetExecutable(bufnr('')) - -Execute(React Native apps using CocoaPods should take precedence over the default executable): - call ale#test#SetFilename('../test-files/swiftlint/react-native/testfile.swift') - - AssertEqual - \ tolower(ale#test#GetFilename('../test-files/swiftlint/react-native/ios/Pods/SwiftLint/swiftlint')), - \ tolower(ale_linters#swift#swiftlint#GetExecutable(bufnr(''))) - -Execute(CocoaPods installation should take precedence over the default executable): - call ale#test#SetFilename('../test-files/swiftlint/cocoapods/testfile.swift') - - AssertEqual - \ tolower(ale#test#GetFilename('../test-files/swiftlint/cocoapods/Pods/SwiftLint/swiftlint')), - \ tolower(ale_linters#swift#swiftlint#GetExecutable(bufnr(''))) - -Execute(Top level CocoaPods installation should take precedence over React Native installation): - call ale#test#SetFilename('../test-files/swiftlint/cocoapods-and-react-native/testfile.swift') - - AssertEqual - \ tolower(ale#test#GetFilename('../test-files/swiftlint/cocoapods-and-react-native/Pods/SwiftLint/swiftlint')), - \ tolower(ale_linters#swift#swiftlint#GetExecutable(bufnr(''))) - -Execute(use-global should override other versions): - let g:ale_swift_swiftlint_use_global = 1 - let g:ale_swift_swiftlint_executable = 'swiftlint_d' - - call ale#test#SetFilename('../test-files/swiftlint/cocoapods-and-react-native/testfile.swift') - - AssertEqual - \ 'swiftlint_d', - \ ale_linters#swift#swiftlint#GetExecutable(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_systemd_analyze.vader b/dotfiles/.vim/plugged/ale/test/linter/test_systemd_analyze.vader deleted file mode 100644 index d97c87be..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_systemd_analyze.vader +++ /dev/null @@ -1,9 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('systemd', 'systemd_analyze') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'systemd-analyze', - \ 'SYSTEMD_LOG_COLOR=0 ' . ale#Escape('systemd-analyze') . ' --user verify %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_ls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_terraform_ls.vader deleted file mode 100644 index 983bc104..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_ls.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('terraform', 'terraform_ls') - -After: - unlet! b:ale_terraform_terraform_executable - unlet! b:ale_terraform_ls_executable - unlet! b:ale_terraform_ls_options - - call ale#assert#TearDownLinterTest() - -Execute(Should send correct LSP language): - AssertLSPLanguage 'terraform' - -Execute(Should load default executable): - AssertLinter 'terraform-ls', - \ ale#Escape('terraform-ls') . ' serve' - -Execute(Should configure custom executable): - let b:ale_terraform_ls_executable = 'foo' - AssertLinter 'foo', - \ ale#Escape('foo') . ' serve' - -Execute(Should ignore non-absolute custom terraform executable): - let b:ale_terraform_terraform_executable = 'terraform' - AssertLinter 'terraform-ls', - \ ale#Escape('terraform-ls') . ' serve' - -Execute(Should set absolute custom terraform executable): - let b:ale_terraform_terraform_executable = '/bin/terraform' - AssertLinter 'terraform-ls', - \ ale#Escape('terraform-ls') . ' serve -tf-exec /bin/terraform' - -Execute(Should set custom options): - let b:ale_terraform_ls_options = '--bar' - - AssertLinter 'terraform-ls', - \ ale#Escape('terraform-ls') . ' serve --bar' - -Execute(Should return nearest directory with .terraform if found in parent directory): - call ale#test#SetFilename('../test-files/terraform/main.tf') - - AssertLSPProject ale#test#GetFilename('../test-files/terraform') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_lsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_terraform_lsp.vader deleted file mode 100644 index 27f27ffb..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_lsp.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('terraform', 'terraform_lsp') - -After: - unlet! b:ale_terraform_langserver_executable - unlet! b:ale_terraform_langserver_options - - call ale#assert#TearDownLinterTest() - -Execute(Should send correct LSP language): - AssertLSPLanguage 'terraform' - -Execute(Should load default executable): - AssertLinter 'terraform-lsp', ale#Escape('terraform-lsp') - -Execute(Should configure custom executable): - let b:ale_terraform_langserver_executable = 'foo' - AssertLinter 'foo', ale#Escape('foo') - -Execute(Should set custom options): - let b:ale_terraform_langserver_options = '--bar' - - AssertLinter 'terraform-lsp', - \ ale#Escape('terraform-lsp') . ' --bar' - -Execute(Should return nearest directory with .terraform if found in parent directory): - call ale#test#SetFilename('../test-files/terraform/main.tf') - - AssertLSPProject ale#test#GetFilename('../test-files/terraform') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_terraform.vader b/dotfiles/.vim/plugged/ale/test/linter/test_terraform_terraform.vader deleted file mode 100644 index 25ca652a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_terraform.vader +++ /dev/null @@ -1,15 +0,0 @@ -" Based upon :help ale-development -Before: - call ale#assert#SetUpLinterTest('terraform', 'terraform') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'terraform', - \ ale#Escape('terraform') . ' validate -no-color -json ' - -Execute(The default command should be overriden): - let b:ale_terraform_terraform_executable = '/bin/other/terraform' - AssertLinter '/bin/other/terraform', - \ ale#Escape('/bin/other/terraform') . ' validate -no-color -json ' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_tflint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_terraform_tflint.vader deleted file mode 100644 index b1963a77..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_tflint.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('terraform', 'tflint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'tflint', ale#Escape('tflint') . ' -f json' - -Execute(The default executable should be configurable): - let b:ale_terraform_tflint_executable = 'asdf' - - AssertLinter 'asdf', ale#Escape('asdf') . ' -f json' - -Execute(Overriding options should work): - let g:ale_terraform_tflint_executable = 'fnord' - let g:ale_terraform_tflint_options = '--whatever' - - AssertLinter 'fnord', ale#Escape('fnord') . ' --whatever -f json' - -Execute(Configuration files should be found): - call ale#test#SetFilename('../test-files/tflint/foo/bar.tf') - - AssertLinter 'tflint', - \ ale#Escape('tflint') - \ . ' --config ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/tflint/foo/.tflint.hcl')) - \ . ' -f json' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_tfsec.vader b/dotfiles/.vim/plugged/ale/test/linter/test_terraform_tfsec.vader deleted file mode 100644 index c3a7eae2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_terraform_tfsec.vader +++ /dev/null @@ -1,38 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('terraform', 'tfsec') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'tfsec', ale#Escape('tfsec') . ' --format json' - -Execute(The default executable should be configurable): - let b:ale_terraform_tfsec_executable = '/usr/bin/tfsec' - - AssertLinter '/usr/bin/tfsec', ale#Escape('/usr/bin/tfsec') . ' --format json' - -Execute(Overriding options should work): - let g:ale_terraform_tfsec_executable = '/usr/local/bin/tfsec' - let g:ale_terraform_tfsec_options = '--minimum-severity MEDIUM' - - AssertLinter '/usr/local/bin/tfsec', - \ ale#Escape('/usr/local/bin/tfsec') . ' --minimum-severity MEDIUM --format json' - -Execute(Configuration yml file should be found): - call ale#test#SetFilename('../test-files/tfsec/yml/main.tf') - - AssertLinter 'tfsec', - \ ale#Escape('tfsec') - \ . ' --config-file ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/tfsec/yml/.tfsec/config.yml')) - \ . ' --format json' - -Execute(Configuration json file should be found): - call ale#test#SetFilename('../test-files/tfsec/json/main.tf') - - AssertLinter 'tfsec', - \ ale#Escape('tfsec') - \ . ' --config-file ' - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/tfsec/json/.tfsec/config.json')) - \ . ' --format json' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_tex_lacheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_tex_lacheck.vader deleted file mode 100644 index b404cc78..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_tex_lacheck.vader +++ /dev/null @@ -1,13 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('tex', 'lacheck') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Executable should default to lacheck): - AssertLinter 'lacheck', ale#Escape('lacheck') . ' %t' - -Execute(Should be able to set a custom executable): - let g:ale_tex_lacheck_executable = 'bin/foo' - - AssertLinter 'bin/foo' , ale#Escape('bin/foo') . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_tex_textlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_tex_textlint.vader deleted file mode 100644 index f99e0fd0..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_tex_textlint.vader +++ /dev/null @@ -1,65 +0,0 @@ -" Author: januswel, w0rp - -Before: - " This is just one language for the linter. - call ale#assert#SetUpLinterTest('tex', 'textlint') - - " The configuration is shared between many languages. - Save g:ale_textlint_executable - Save g:ale_textlint_use_global - Save g:ale_textlint_options - - let g:ale_textlint_executable = 'textlint' - let g:ale_textlint_use_global = 0 - let g:ale_textlint_options = '' - - unlet! b:ale_textlint_executable - unlet! b:ale_textlint_use_global - unlet! b:ale_textlint_options - -After: - unlet! b:command_tail - unlet! b:ale_textlint_executable - unlet! b:ale_textlint_use_global - unlet! b:ale_textlint_options - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'textlint', - \ ale#Escape('textlint') . ' -f json --stdin --stdin-filename %s' - -Execute(The executable should be configurable): - let b:ale_textlint_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -f json --stdin --stdin-filename %s' - -Execute(The options should be configurable): - let b:ale_textlint_options = '--something' - - AssertLinter 'textlint', - \ ale#Escape('textlint') . ' --something -f json --stdin --stdin-filename %s' - -Execute(The local executable from .bin should be used if available): - call ale#test#SetFilename('../test-files/textlint/with_bin_path/foo.txt') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_bin_path/node_modules/.bin/textlint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_bin_path/node_modules/.bin/textlint')) - \ . ' -f json --stdin --stdin-filename %s' - -Execute(The local executable from textlint/bin should be used if available): - call ale#test#SetFilename('../test-files/textlint/with_textlint_bin_path/foo.txt') - - if has('win32') - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#Escape('node.exe') . ' ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s' - else - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s' - endif diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_texlab.vader b/dotfiles/.vim/plugged/ale/test/linter/test_texlab.vader deleted file mode 100644 index 72b78745..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_texlab.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('tex', 'texlab') - - Save &filetype - let &filetype = 'tex' - -After: - call ale#assert#TearDownLinterTest() - -Execute(The language string should be correct): - AssertLSPLanguage 'tex' - -Execute(The default executable path should be correct): - AssertLinter 'texlab', ale#Escape('texlab') - -Execute(The project root should be detected correctly): - call ale#test#SetFilename('../test-files/tex/sample1.tex') - silent! call mkdir('../test-files/tex/.git') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/tex') - -Execute(The executable should be configurable): - let b:ale_tex_texlab_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - -Execute(The options should be configurable): - let b:ale_tex_texlab_options = '-v' - - AssertLinter 'texlab', ale#Escape('texlab') . ' ' . b:ale_tex_texlab_options - -Execute(Should accpet configuration settings): - AssertLSPConfig {} - let b:ale_tex_texlab_config = {'build':{'onSave':v:true}} - AssertLSPConfig {'build':{'onSave':v:true}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_textlint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_textlint.vader deleted file mode 100644 index 6ec42b2d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_textlint.vader +++ /dev/null @@ -1,65 +0,0 @@ -" Author: januswel, w0rp - -Before: - " This is just one language for the linter. - call ale#assert#SetUpLinterTest('markdown', 'textlint') - - " The configuration is shared between many languages. - Save g:ale_textlint_executable - Save g:ale_textlint_use_global - Save g:ale_textlint_options - - let g:ale_textlint_executable = 'textlint' - let g:ale_textlint_use_global = 0 - let g:ale_textlint_options = '' - - unlet! b:ale_textlint_executable - unlet! b:ale_textlint_use_global - unlet! b:ale_textlint_options - -After: - unlet! b:command_tail - unlet! b:ale_textlint_executable - unlet! b:ale_textlint_use_global - unlet! b:ale_textlint_options - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'textlint', - \ ale#Escape('textlint') . ' -f json --stdin --stdin-filename %s' - -Execute(The executable should be configurable): - let b:ale_textlint_executable = 'foobar' - - AssertLinter 'foobar', - \ ale#Escape('foobar') . ' -f json --stdin --stdin-filename %s' - -Execute(The options should be configurable): - let b:ale_textlint_options = '--something' - - AssertLinter 'textlint', - \ ale#Escape('textlint') . ' --something -f json --stdin --stdin-filename %s' - -Execute(The local executable from .bin should be used if available): - call ale#test#SetFilename('../test-files/textlint/with_bin_path/foo.txt') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_bin_path/node_modules/.bin/textlint'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_bin_path/node_modules/.bin/textlint')) - \ . ' -f json --stdin --stdin-filename %s' - -Execute(The local executable from textlint/bin should be used if available): - call ale#test#SetFilename('../test-files/textlint/with_textlint_bin_path/foo.txt') - - if has('win32') - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#Escape('node.exe') . ' ' . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s' - else - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js')) - \ . ' -f json --stdin --stdin-filename %s' - endif diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_thrift.vader b/dotfiles/.vim/plugged/ale/test/linter/test_thrift.vader deleted file mode 100644 index cbada818..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_thrift.vader +++ /dev/null @@ -1,53 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('thrift', 'thrift') - let b:suffix = ' -out ' . ale#Escape('TEMP_DIR') . ' %t' - - function! GetCommand(buffer) abort - call ale#engine#InitBufferInfo(a:buffer) - let l:command = ale_linters#thrift#thrift#GetCommand(a:buffer) - call ale#engine#Cleanup(a:buffer) - - let l:split_command = split(l:command) - let l:index = index(l:split_command, '-out') - - if l:index >= 0 - let l:split_command[l:index + 1] = 'TEMP' - endif - - return join(l:split_command) - endfunction - -After: - unlet! b:suffix - delfunction GetCommand - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'thrift', ale#Escape('thrift') . ' --gen cpp -I . -strict' . b:suffix - -Execute(The executable should be configurable): - let b:ale_thrift_thrift_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --gen cpp -I . -strict' . b:suffix - -Execute(The list of generators should be configurable): - let b:ale_thrift_thrift_generators = ['java', 'py:dynamic'] - - AssertLinter 'thrift', ale#Escape('thrift') - \ . ' --gen java --gen py:dynamic -I . -strict' . b:suffix - - let b:ale_thrift_thrift_generators = [] - - AssertLinter 'thrift', ale#Escape('thrift') . ' --gen cpp -I . -strict' . b:suffix - -Execute(The list of include paths should be configurable): - let b:ale_thrift_thrift_includes = ['included/path'] - - AssertLinter 'thrift', ale#Escape('thrift') - \ . ' --gen cpp -I included/path -strict' . b:suffix - -Execute(The string of compiler options should be configurable): - let b:ale_thrift_thrift_options = '-strict --allow-64bit-consts' - - AssertLinter 'thrift', ale#Escape('thrift') - \ . ' --gen cpp -I . -strict --allow-64bit-consts' . b:suffix diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_thriftcheck.vader b/dotfiles/.vim/plugged/ale/test/linter/test_thriftcheck.vader deleted file mode 100644 index 0da3bd6d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_thriftcheck.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('thrift', 'thriftcheck') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'thriftcheck', ale#Escape('thriftcheck') - \ . ' --stdin-filename %s %t' - -Execute(The executable should be configurable): - let b:ale_thrift_thriftcheck_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') - \ . ' --stdin-filename %s %t' - -Execute(The string of options should be configurable): - let b:ale_thrift_thriftcheck_options = '--errors-only' - - AssertLinter 'thriftcheck', ale#Escape('thriftcheck') - \ . ' --errors-only --stdin-filename %s %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_tslint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_tslint.vader deleted file mode 100644 index 1b291d9f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_tslint.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('typescript', 'tslint') - call ale#test#SetFilename('test.ts') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default tslint command should be correct): - AssertLinterCwd '%s:h' - AssertLinter 'tslint', ale#Escape('tslint') . ' --format json %t' - -Execute(The rules directory option should be included if set): - let b:ale_typescript_tslint_rules_dir = '/foo/bar' - - AssertLinter 'tslint', - \ ale#Escape('tslint') . ' --format json' - \ . ' -r ' . ale#Escape('/foo/bar') - \ . ' %t' - -Execute(The executable should be configurable and escaped): - let b:ale_typescript_tslint_executable = 'foo bar' - - AssertLinter 'foo bar', ale#Escape('foo bar') . ' --format json %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_typescript_deno_lsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_typescript_deno_lsp.vader deleted file mode 100644 index 944f6a0a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_typescript_deno_lsp.vader +++ /dev/null @@ -1,79 +0,0 @@ -Before: - let g:ale_deno_importMap = 'import_map.json' - let g:ale_deno_unstable = 0 - let g:ale_deno_executable = 'deno' - let g:ale_deno_lsp_project_root = '' - - runtime autoload/ale/handlers/deno.vim - call ale#assert#SetUpLinterTest('typescript', 'deno') - -After: - call ale#assert#TearDownLinterTest() - -Execute(Should set deno lsp for TypeScript projects using stable Deno API): - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:false, - \ 'importMap': '' - \} - -Execute(Should set deno lsp using unstable Deno API if enabled by user): - let g:ale_deno_unstable = 1 - - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:true, - \ 'importMap': '' - \} - -Execute(Should set the default importMap filepath): - call ale#test#SetFilename('../test-files/typescript/test.ts') - - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:false, - \ 'importMap': ale#path#Simplify(g:dir . '/../test-files/typescript/import_map.json') - \} - -Execute(Should set the importMap filepath from user defined importMap): - let g:ale_deno_importMap = 'custom_import_map.json' - call ale#test#SetFilename('../test-files/typescript/test.ts') - - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:false, - \ 'importMap': ale#path#Simplify(g:dir . '/../test-files/typescript/custom_import_map.json') - \} - -Execute(Should set the importMap filepath from user defined importMap with unstable API): - let g:ale_deno_importMap = 'custom_import_map.json' - let g:ale_deno_unstable = 1 - call ale#test#SetFilename('../test-files/typescript/test.ts') - - AssertLSPOptions { - \ 'enable': v:true, - \ 'lint': v:true, - \ 'unstable': v:true, - \ 'importMap': ale#path#Simplify(g:dir . '/../test-files/typescript/custom_import_map.json') - \} - -Execute(Should find project root containing tsconfig.json): - call ale#test#SetFilename('../test-files/typescript/test.ts') - - AssertLSPLanguage 'typescript' - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/typescript') - -Execute(Should use user-specified project root): - let g:ale_deno_lsp_project_root = '/' - - call ale#test#SetFilename('../test-files/typescript/test.ts') - - AssertLSPLanguage 'typescript' - AssertLSPProject '/' - -Execute(Check Deno LSP command): - AssertLinter 'deno', ale#Escape('deno') . ' lsp' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_typescript_tsserver.vader b/dotfiles/.vim/plugged/ale/test/linter/test_typescript_tsserver.vader deleted file mode 100644 index 719ac184..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_typescript_tsserver.vader +++ /dev/null @@ -1,8 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('typescript', 'tsserver') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'tsserver', ale#Escape('tsserver') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_unimport.vader b/dotfiles/.vim/plugged/ale/test/linter/test_unimport.vader deleted file mode 100644 index a5607ce9..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_unimport.vader +++ /dev/null @@ -1,71 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'unimport') - call ale#test#SetFilename('test.py') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:executable - unlet! b:bin_dir - - call ale#assert#TearDownLinterTest() - -Execute(The unimport callbacks should return the correct default values): - AssertLinter 'unimport', ale#Escape('unimport') . ' --check %t' - -Execute(The unimport executable should be configurable, and escaped properly): - let b:ale_python_unimport_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --check %t' - -Execute(The unimport command callback should let you set options): - let b:ale_python_unimport_options = '--gitignore' - - AssertLinter 'unimport', ale#Escape('unimport') . ' --gitignore --check %t' - -Execute(The unimport command should switch directories to the detected project root): - call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir') - AssertLinter 'unimport', ale#Escape('unimport') . ' --check %t' - -Execute(The unimport callbacks should detect virtualenv directories and switch to the project root): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/unimport' - \) - - AssertLinter b:executable, ale#Escape(b:executable) . ' --check %t' - -Execute(You should able able to use the global unimport instead): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - let g:ale_python_unimport_use_global = 1 - - AssertLinter 'unimport', ale#Escape('unimport') . ' --check %t' - -Execute(Setting executable to 'pipenv' appends 'run unimport'): - let g:ale_python_unimport_executable = 'path/to/pipenv' - - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'path/to/pipenv', ale#Escape('path/to/pipenv') . ' run unimport --check %t' - -Execute(Pipenv is detected when python_unimport_auto_pipenv is set): - call ale#test#SetFilename('../test-files/python/pipenv/whatever.py') - let g:ale_python_unimport_auto_pipenv = 1 - - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'pipenv', ale#Escape('pipenv') . ' run unimport --check %t' - -Execute(Setting executable to 'poetry' appends 'run unimport'): - let g:ale_python_unimport_executable = 'path/to/poetry' - - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'path/to/poetry', ale#Escape('path/to/poetry') . ' run unimport --check %t' - -Execute(Poetry is detected when python_unimport_auto_poetry is set): - call ale#test#SetFilename('../test-files/python/poetry/whatever.py') - let g:ale_python_unimport_auto_poetry = 1 - - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'poetry', ale#Escape('poetry') . ' run unimport --check %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_v_command_callback.vader b/dotfiles/.vim/plugged/ale/test/linter/test_v_command_callback.vader deleted file mode 100644 index 17f24ad7..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_v_command_callback.vader +++ /dev/null @@ -1,25 +0,0 @@ -Before: - Save g:ale_v_v_executable - - call ale#assert#SetUpLinterTest('v', 'v') - - GivenCommandOutput ['/foo/bar', '/foo/baz'] - -After: - Restore - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'v', 'v . -o /tmp/vim-ale-v' - -Execute(Extra options should be supported): - let g:ale_v_v_options = '--foo-bar' - - AssertLinter 'v', 'v --foo-bar . -o /tmp/vim-ale-v' - - let g:ale_v_vbuild_options = '' - -Execute(The executable should be configurable): - let g:ale_v_v_executable = 'foobar' - - AssertLinter 'foobar', 'foobar . -o /tmp/vim-ale-v' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_vcom.vader b/dotfiles/.vim/plugged/ale/test/linter/test_vcom.vader deleted file mode 100644 index 77218f74..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_vcom.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('vhdl', 'vcom') - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'vcom', ale#Escape('vcom') . ' -2008 -quiet -lint %t' - - let b:ale_vhdl_vcom_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' -2008 -quiet -lint %t' - -Execute(The options should be configurable): - let b:ale_vhdl_vcom_options = '--something' - - AssertLinter 'vcom', ale#Escape('vcom') . ' --something %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_verilator.vader b/dotfiles/.vim/plugged/ale/test/linter/test_verilator.vader deleted file mode 100644 index b65f3459..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_verilator.vader +++ /dev/null @@ -1,14 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('verilog', 'verilator') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default verilator command should be correct): - AssertLinter 'verilator', 'verilator --lint-only -Wall -Wno-DECLFILENAME -I%s:h %t' - -Execute(verilator options should be configurable): - " Additional args for the linter - let g:ale_verilog_verilator_options = '-sv --default-language "1800-2012"' - - AssertLinter 'verilator', 'verilator --lint-only -Wall -Wno-DECLFILENAME -I%s:h -sv --default-language "1800-2012" %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_vim_vimls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_vim_vimls.vader deleted file mode 100644 index eb9239a2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_vim_vimls.vader +++ /dev/null @@ -1,77 +0,0 @@ -" Author: Jeffrey Lau https://github.com/zoonfafer -" Description: Tests for the Vim vimls linter - -Before: - call ale#assert#SetUpLinterTest('vim', 'vimls') - -After: - if isdirectory(g:dir . '/.git') - call delete(g:dir . '/.git', 'd') - endif - - call ale#assert#TearDownLinterTest() - -Execute(should set correct defaults): - AssertLinter 'vim-language-server', ale#Escape('vim-language-server') . ' --stdio' - -Execute(should set correct LSP values): - call ale#test#SetFilename('../test-files/vim/path_with_autoload/test.vim') - AssertLSPLanguage 'vim' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/vim/path_with_autoload') - -Execute(should set correct project for .git/): - let b:parent_dir = ale#path#Simplify(g:dir . '/..') - let b:git_dir = b:parent_dir . '/.git' - - call ale#test#SetFilename('../test-files/vim/test.vim') - - if !isdirectory(b:git_dir) - call mkdir(b:git_dir) - endif - - AssertLSPProject ale#path#Simplify(b:parent_dir) - - call delete(b:git_dir, 'd') - unlet! b:git_dir - -Execute(should set correct project for plugin/): - call ale#test#SetFilename('../test-files/vim/path_with_plugin/test.vim') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/vim/path_with_plugin') - -Execute(should accept configuration settings): - AssertLSPConfig {} - - let b:ale_vim_vimls_config = {'vim': {'foobar': v:true}} - AssertLSPConfig {'vim': {'foobar': v:true}} - -Execute(should set correct project for .vimrc): - call ale#test#SetFilename('../test-files/vim/path_with_vimrc/.vimrc') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/vim/path_with_vimrc') - -Execute(should set correct project for init.vim): - call ale#test#SetFilename('../test-files/vim/path_with_initvim/init.vim') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/vim/path_with_initvim') - -Execute(should use the local executable when available): - call ale#test#SetFilename('../test-files/vim/file.vim') - - AssertLinter ale#path#Simplify(g:dir . '/../test-files/vim/node_modules/.bin/vim-language-server'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/vim/node_modules/.bin/vim-language-server')) . ' --stdio' - -Execute(should let the global executable to be used): - let g:ale_vim_vimls_use_global = 1 - call ale#test#SetFilename('../test-files/vim/file.vim') - - AssertLinter 'vim-language-server', - \ ale#Escape('vim-language-server') . ' --stdio' - -Execute(should allow the executable to be configured): - let g:ale_vim_vimls_executable = 'foobar' - call ale#test#SetFilename('../test-files/dummy') - - AssertLinter 'foobar', ale#Escape('foobar') . ' --stdio' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_vint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_vint.vader deleted file mode 100644 index 4a224d01..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_vint.vader +++ /dev/null @@ -1,34 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('vim', 'vint') - let b:common_flags = (has('nvim') ? ' --enable-neovim' : '') - \ . ' -f "{file_path}:{line_number}:{column_number}: {severity}: {policy_name} - {description} (see {reference})"' - -After: - unlet! b:common_flags - - call ale#assert#TearDownLinterTest() - -Execute(The default command should be correct): - AssertLinter 'vint', [ - \ ale#Escape('vint') .' --version', - \ ale#Escape('vint') .' -s --no-color' . b:common_flags . ' %t', - \] - -Execute(The executable should be configurable): - let g:ale_vim_vint_executable = 'foobar' - - AssertLinter 'foobar', [ - \ ale#Escape('foobar') .' --version', - \ ale#Escape('foobar') .' -s --no-color' . b:common_flags . ' %t', - \] - -Execute(The --no-color flag should not be used for older Vint versions): - GivenCommandOutput ['v0.3.5'] - - AssertLinter 'vint', ale#Escape('vint') .' -s' . b:common_flags . ' %t' - -Execute(--stdin-display-name should be used in newer versions): - GivenCommandOutput ['v0.4.0'] - - AssertLinter 'vint', ale#Escape('vint') .' -s --no-color' . b:common_flags - \ . ' --stdin-display-name %s -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_vlog.vader b/dotfiles/.vim/plugged/ale/test/linter/test_vlog.vader deleted file mode 100644 index a07944f7..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_vlog.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('verilog', 'vlog') - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'vlog', ale#Escape('vlog') . ' -quiet -lint %t' - - let b:ale_verilog_vlog_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' -quiet -lint %t' - -Execute(The options should be configurable): - let b:ale_verilog_vlog_options = '--something' - - AssertLinter 'vlog', ale#Escape('vlog') . ' --something %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_volar.vader b/dotfiles/.vim/plugged/ale/test/linter/test_volar.vader deleted file mode 100644 index bef094be..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_volar.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('vue', 'volar') - - let g:tsserver_path = '' - let g:actual_path = '' - let g:init_opts = {} - -After: - call ale#assert#TearDownLinterTest() - - unlet g:tsserver_path - unlet g:actual_path - unlet g:init_opts - -Execute(Assert Volar LSP for Vue Project): - call ale#test#SetFilename('../test-files/volar/src/App.vue') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/volar') - -Execute(Assert proper tsserverlibrary for Volar LSP): - call ale#test#SetFilename('../test-files/volar/src/App.vue') - - let g:init_opts = ale_linters#vue#volar#GetInitializationOptions(bufnr('')) - let g:tsserver_path = init_opts.typescript.serverPath - let g:actual_path = ale#path#Simplify(g:dir . '/../test-files/volar/node_modules/typescript/lib/tsserverlibrary.js') - - AssertEqual g:tsserver_path, g:actual_path diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_vulture.vader b/dotfiles/.vim/plugged/ale/test/linter/test_vulture.vader deleted file mode 100644 index 78655bd7..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_vulture.vader +++ /dev/null @@ -1,62 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('python', 'vulture') - call ale#test#SetFilename('test.py') - - let b:bin_dir = has('win32') ? 'Scripts' : 'bin' - -After: - unlet! b:bin_dir - unlet! b:executable - - call ale#assert#TearDownLinterTest() - -Execute(The vulture command callback should lint file directory by default): - AssertLinterCwd expand('#' . bufnr('') . ':p:h') - AssertLinter 'vulture', ale#Escape('vulture') . ' .' - -Execute(The vulture command callback should lint project root, when present): - call ale#test#SetFilename('../test-files/python/no_virtualenv/subdir/foo/bar.py') - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/no_virtualenv/subdir') - AssertLinter 'vulture', ale#Escape('vulture') . ' .' - -Execute(The option for disabling change directory works and only lints file): - let g:ale_python_vulture_change_directory = 0 - - AssertLinterCwd '' - AssertLinter 'vulture', ale#Escape('vulture') . ' %s' - -Execute(The vulture executable should be configurable, and escaped properly): - let g:ale_python_vulture_executable = 'executable with spaces' - - AssertLinter 'executable with spaces', ale#Escape('executable with spaces') . ' .' - -Execute(The vulture command callback should let you set options): - let g:ale_python_vulture_options = '--some-option' - - AssertLinter 'vulture', ale#Escape('vulture') . ' --some-option .' - -Execute(The vulture command callback should detect virtualenv directories and switch to the project root): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - - let b:executable = ale#path#Simplify( - \ g:dir . '/../test-files/python/with_virtualenv/env/' . b:bin_dir . '/vulture' - \) - - AssertLinterCwd ale#path#Simplify(g:dir . '/../test-files/python/with_virtualenv/subdir') - AssertLinter b:executable, ale#Escape(b:executable) . ' .' - -Execute(You should able able to use the global vulture instead): - call ale#test#SetFilename('../test-files/python/with_virtualenv/subdir/foo/bar.py') - let g:ale_python_vulture_use_global = 1 - - AssertLinter 'vulture', ale#Escape('vulture') . ' .' - -Execute(Setting executable to 'pipenv' appends 'run vulture'): - let g:ale_python_vulture_executable = 'path/to/pipenv' - - AssertLinter 'path/to/pipenv', ale#Escape('path/to/pipenv') . ' run vulture' . ' .' -Execute(Setting executable to 'poetry' appends 'run vulture'): - let g:ale_python_vulture_executable = 'path/to/poetry' - - AssertLinter 'path/to/poetry', ale#Escape('path/to/poetry') . ' run vulture' . ' .' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_write_good.vader b/dotfiles/.vim/plugged/ale/test/linter/test_write_good.vader deleted file mode 100644 index 8958dd6a..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_write_good.vader +++ /dev/null @@ -1,55 +0,0 @@ -Before: - " This is just one example of a language using the linter. - call ale#assert#SetUpLinterTest('markdown', 'writegood') - - " The options are shared between many languages. - Save g:ale_writegood_options - Save g:ale_writegood_executable - Save g:ale_writegood_use_global - - unlet! g:ale_writegood_options - unlet! g:ale_writegood_executable - unlet! g:ale_writegood_use_global - - call ale#test#SetFilename('testfile.txt') - call ale#handlers#writegood#ResetOptions() - -After: - call ale#assert#TearDownLinterTest() - -Execute(The global executable should be used when the local one cannot be found): - AssertLinter - \ 'write-good', - \ ale#Escape('write-good') . ' %t', - -Execute(The options should be used in the command): - let g:ale_writegood_options = '--foo --bar' - - AssertLinter - \ 'write-good', - \ ale#Escape('write-good') . ' --foo --bar %t', - -Execute(Should use the node_modules/.bin executable, if available): - call ale#test#SetFilename('../test-files/write-good/node-modules/test.txt') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/write-good/node-modules/node_modules/.bin/write-good'), - \ ale#Escape(ale#path#Simplify(g:dir . '/../test-files/write-good/node-modules/node_modules/.bin/write-good')) - \ . ' %t', - -Execute(Should use the node_modules/write-good executable, if available): - call ale#test#SetFilename('../test-files/write-good/node-modules-2/test.txt') - - AssertLinter - \ ale#path#Simplify(g:dir . '/../test-files/write-good/node-modules-2/node_modules/write-good/bin/write-good.js'), - \ (has('win32') ? 'node.exe ' : '') - \ . ale#Escape(ale#path#Simplify(g:dir . '/../test-files/write-good/node-modules-2/node_modules/write-good/bin/write-good.js')) - \ . ' %t', - -Execute(Should let users configure a global executable and override local paths): - call ale#test#SetFilename('../test-files/write-good/node-modules-2/test.txt') - - let g:ale_writegood_executable = 'foo-bar' - let g:ale_writegood_use_global = 1 - - AssertLinter 'foo-bar', ale#Escape('foo-bar') . ' %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_xmllint.vader b/dotfiles/.vim/plugged/ale/test/linter/test_xmllint.vader deleted file mode 100644 index 5a2377c2..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_xmllint.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('xml', 'xmllint') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The xml xmllint command callback should return the correct default string): - AssertLinter 'xmllint', ale#Escape('xmllint') . ' --noout -' - -Execute(The xml xmllint command callback should let you set options): - let g:ale_xml_xmllint_options = '--xinclude --postvalid' - - AssertLinter 'xmllint', - \ ale#Escape('xmllint') . ' --xinclude --postvalid --noout -' - -Execute(The xmllint executable should be configurable): - let g:ale_xml_xmllint_executable = '~/.local/bin/xmllint' - - AssertLinter '~/.local/bin/xmllint', - \ ale#Escape('~/.local/bin/xmllint') . ' --noout -' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_xo.vader b/dotfiles/.vim/plugged/ale/test/linter/test_xo.vader deleted file mode 100644 index 1aa4c3f1..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_xo.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('javascript', 'xo') - call ale#test#SetFilename('testfile.jsx') - unlet! b:executable - - set filetype=javascriptreact - runtime autoload/ale/handlers/xo.vim - -After: - call ale#assert#TearDownLinterTest() - -Execute(The XO executable should be called): - AssertLinter 'xo', ale#Escape('xo') . ' --reporter json --stdin --stdin-filename %s' - -Execute(The XO executable should be configurable): - let b:ale_javascript_xo_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --reporter json --stdin --stdin-filename %s' - -Execute(The XO options should be configurable): - let b:ale_javascript_xo_options = '--wat' - - AssertLinter 'xo', ale#Escape('xo') . ' --wat --reporter json --stdin --stdin-filename %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_xots.vader b/dotfiles/.vim/plugged/ale/test/linter/test_xots.vader deleted file mode 100644 index cc38ff02..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_xots.vader +++ /dev/null @@ -1,23 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('typescript', 'xo') - call ale#test#SetFilename('testfile.tsx') - unlet! b:executable - - set filetype=typescriptreact - runtime autoload/ale/handlers/xo.vim - -After: - call ale#assert#TearDownLinterTest() - -Execute(The XO executable should be called): - AssertLinter 'xo', ale#Escape('xo') . ' --reporter json --stdin --stdin-filename %s' - -Execute(The XO executable should be configurable): - let b:ale_typescript_xo_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --reporter json --stdin --stdin-filename %s' - -Execute(The XO options should be configurable): - let b:ale_typescript_xo_options = '--wat' - - AssertLinter 'xo', ale#Escape('xo') . ' --wat --reporter json --stdin --stdin-filename %s' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_xvhdl.vader b/dotfiles/.vim/plugged/ale/test/linter/test_xvhdl.vader deleted file mode 100644 index 86f9a32d..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_xvhdl.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('vhdl', 'xvhdl') - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'xvhdl', ale#Escape('xvhdl') . ' --2008 %t' - - let b:ale_vhdl_xvhdl_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' --2008 %t' - -Execute(The options should be configurable): - let b:ale_vhdl_xvhdl_options = '--something' - - AssertLinter 'xvhdl', ale#Escape('xvhdl') . ' --something %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_xvlog.vader b/dotfiles/.vim/plugged/ale/test/linter/test_xvlog.vader deleted file mode 100644 index 564ac979..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_xvlog.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('verilog', 'xvlog') - -After: - unlet! b:command_tail - - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'xvlog', ale#Escape('xvlog') . ' %t' - - let b:ale_verilog_xvlog_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') . ' %t' - -Execute(The options should be configurable): - let b:ale_verilog_xvlog_options = '--something' - - AssertLinter 'xvlog', ale#Escape('xvlog') . ' --something %t' diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_yaml_ls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_yaml_ls.vader deleted file mode 100644 index 449ce8c3..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_yaml_ls.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('yaml', 'ls') - -After: - call ale#assert#TearDownLinterTest() - -Execute(should set correct defaults): - AssertLinter 'yaml-language-server', ale#Escape('yaml-language-server') . ' --stdio' - -Execute(should set correct LSP values): - call ale#test#SetFilename('../test-files/yaml/test.yaml') - - AssertLSPLanguage 'yaml' - AssertLSPOptions {} - AssertLSPConfig {} - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/yaml') - -Execute(should accept configuration settings): - AssertLSPConfig {} - let b:ale_yaml_ls_config = {'yaml': {'hover': v:false, 'completion': v:true}} - AssertLSPConfig {'yaml': {'hover': v:false, 'completion': v:true}} diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_yang_lsp.vader b/dotfiles/.vim/plugged/ale/test/linter/test_yang_lsp.vader deleted file mode 100644 index 5be7501f..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_yang_lsp.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('yang', 'yang_lsp') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The executable should be configurable): - AssertLinter 'yang-language-server', ale#Escape('yang-language-server') - - let b:ale_yang_lsp_executable = 'foobar' - - AssertLinter 'foobar', ale#Escape('foobar') diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_zeek.vader b/dotfiles/.vim/plugged/ale/test/linter/test_zeek.vader deleted file mode 100644 index af58a414..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_zeek.vader +++ /dev/null @@ -1,17 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('zeek', 'zeek') - - let b:command_tail = ' --parse-only %s' - -After: - call ale#assert#TearDownLinterTest() - - unlet! b:command_tail - -Execute(The default command should be correct): - AssertLinter 'zeek', ale#Escape('zeek') . b:command_tail - -Execute(The zeek executable should be configurable, and escaped properly): - let g:ale_zeek_zeek_executable = 'executable with spaces' - - AssertLinter 'executable with spaces', ale#Escape('executable with spaces') . b:command_tail diff --git a/dotfiles/.vim/plugged/ale/test/linter/test_zig_zls.vader b/dotfiles/.vim/plugged/ale/test/linter/test_zig_zls.vader deleted file mode 100644 index 6d814be4..00000000 --- a/dotfiles/.vim/plugged/ale/test/linter/test_zig_zls.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#assert#SetUpLinterTest('zig', 'zls') - -After: - call ale#assert#TearDownLinterTest() - -Execute(The default executable path should be correct): - AssertLinter 'zls', ale#Escape('zls') - -Execute(The project root should be detected correctly): - AssertLSPProject '' - - call ale#test#SetFilename('../test-files/zig/main.zig') - - AssertLSPProject ale#path#Simplify(g:dir . '/../test-files/zig') diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_closing_documents.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_closing_documents.vader deleted file mode 100644 index b9f2f824..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_closing_documents.vader +++ /dev/null @@ -1,176 +0,0 @@ -Before: - runtime autoload/ale/lsp.vim - - let g:message_list = [] - - function! MarkAllConnectionsInitialized() abort - for l:conn in values(ale#lsp#GetConnections()) - let l:conn.initialized = 1 - endfor - endfunction - - function! MarkDocumentOpened() abort - for l:conn in values(ale#lsp#GetConnections()) - let l:conn.open_documents[bufnr('')] = 1 - endfor - endfunction - - function! ale#lsp#Send(conn_id, message) abort - let l:connections = ale#lsp#GetConnections() - - if !l:connections[a:conn_id].initialized - throw 'LSP server not initialized yet!' - endif - - call add(g:message_list, [a:conn_id] + a:message) - endfunction - - call ale#lsp#ResetConnections() - -After: - unlet! g:message_list - delfunction MarkAllConnectionsInitialized - delfunction MarkDocumentOpened - - call ale#lsp#ResetConnections() - - runtime autoload/ale/lsp.vim - -Execute(No errors should be thrown if the connection is not initialized): - call ale#lsp#Register('command', '/foo', {}) - call MarkDocumentOpened() - - call ale#engine#Cleanup(bufnr('')) - AssertEqual [], g:message_list - -Execute(No messages should be sent if the document wasn't opened): - call ale#lsp#Register('command', '/foo', {}) - call MarkAllConnectionsInitialized() - - call ale#engine#Cleanup(bufnr('')) - AssertEqual [], g:message_list - -Execute(A message should be sent if the document was opened): - call ale#lsp#Register('command', '/foo', {}) - call MarkAllConnectionsInitialized() - - call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang') - call ale#engine#Cleanup(bufnr('')) - " We should only send the message once. - call ale#engine#Cleanup(bufnr('')) - - AssertEqual - \ [ - \ ['command:/foo', 1, 'textDocument/didOpen', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ 'languageId': 'lang', - \ 'text': "\n", - \ }, - \ }], - \ ['command:/foo', 1, 'textDocument/didClose', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ }, - \ }], - \ ], - \ g:message_list - -Execute(A message should be sent if the document was opened for tsserver): - call ale#lsp#Register('command', '/foo', {}) - call ale#lsp#MarkConnectionAsTsserver('command:/foo') - - call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang') - call ale#engine#Cleanup(bufnr('')) - " We should only send the message once. - call ale#engine#Cleanup(bufnr('')) - - AssertEqual - \ [ - \ ['command:/foo', 1, 'ts@open', {'file': expand('%:p')}], - \ ['command:/foo', 1, 'ts@close', {'file': expand('%:p')}], - \ ], - \ g:message_list - -Execute(Re-opening and closing the documents should work): - call ale#lsp#Register('command', '/foo', {}) - call MarkAllConnectionsInitialized() - - call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang') - call ale#engine#Cleanup(bufnr('')) - call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang') - call ale#engine#Cleanup(bufnr('')) - - AssertEqual - \ [ - \ ['command:/foo', 1, 'textDocument/didOpen', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 2, - \ 'languageId': 'lang', - \ 'text': "\n", - \ }, - \ }], - \ ['command:/foo', 1, 'textDocument/didClose', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ }, - \ }], - \ ['command:/foo', 1, 'textDocument/didOpen', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ 'languageId': 'lang', - \ 'text': "\n", - \ }, - \ }], - \ ['command:/foo', 1, 'textDocument/didClose', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ }, - \ }], - \ ], - \ g:message_list - -Execute(Messages for closing documents should be sent to each server): - call ale#lsp#Register('command', '/foo', {}) - call ale#lsp#Register('command', '/bar', {}) - call MarkAllConnectionsInitialized() - - call ale#lsp#OpenDocument('command:/foo', bufnr(''), 'lang') - call ale#lsp#OpenDocument('command:/bar', bufnr(''), 'lang') - call ale#engine#Cleanup(bufnr('')) - " We should only send the message once. - call ale#engine#Cleanup(bufnr('')) - - AssertEqual - \ [ - \ ['command:/foo', 1, 'textDocument/didOpen', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 2, - \ 'languageId': 'lang', - \ 'text': "\n", - \ }, - \ }], - \ ['command:/bar', 1, 'textDocument/didOpen', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ 'languageId': 'lang', - \ 'text': "\n", - \ }, - \ }], - \ ['command:/bar', 1, 'textDocument/didClose', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ }, - \ }], - \ ['command:/foo', 1, 'textDocument/didClose', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ }, - \ }], - \ ], - \ g:message_list diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_did_save_event.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_did_save_event.vader deleted file mode 100644 index fc73c4d6..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_did_save_event.vader +++ /dev/null @@ -1,147 +0,0 @@ -Before: - Save g:ale_lint_on_save - Save g:ale_enabled - Save g:ale_linters - Save g:ale_run_synchronously - Save g:ale_disable_lsp - - call ale#test#SetDirectory('/testplugin/test/completion') - call ale#test#SetFilename('dummy.txt') - - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - - let g:ale_disable_lsp = 0 - unlet! b:ale_disable_lsp - let g:ale_lint_on_save = 1 - let b:ale_enabled = 1 - let g:ale_lsp_next_message_id = 1 - let g:ale_run_synchronously = 1 - let g:conn_id = v:null - let g:message_list = [] - - function! LanguageCallback() abort - return 'foobar' - endfunction - - function! ProjectRootCallback() abort - return expand('.') - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'dummy_linter', - \ 'lsp': 'stdio', - \ 'command': 'cat - > /dev/null', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'language': function('LanguageCallback'), - \ 'project_root': function('ProjectRootCallback'), - \ }) - let g:ale_linters = {'foobar': ['dummy_linter']} - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - let l:details = { - \ 'command': 'foobar', - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': '/foo/bar', - \} - - call a:Callback(a:linter, l:details) - - return 1 - endfunction - - " Replace the Send function for LSP, so we can monitor calls to it. - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - endfunction - -After: - Restore - - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - unlet! b:ale_enabled - unlet! b:ale_linters - unlet! g:message_list - unlet! b:ale_save_event_fired - - delfunction LanguageCallback - delfunction ProjectRootCallback - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - " Stop any timers we left behind. - " This stops the tests from failing randomly. - call ale#completion#StopTimer() - - runtime autoload/ale/completion.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - -Given foobar (Some imaginary filetype): - - -Execute(Server should be notified on save): - call ale#events#SaveEvent(bufnr('')) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}], - \ }], - \ ], - \ g:message_list - -Execute(Server should be notified on save with didSave is supported by server): - - " Replace has capability function to simulate didSave server capability - function! ale#lsp#HasCapability(conn_id, capability) abort - if a:capability == 'did_save' - return 1 - endif - return 0 - endfunction - - call ale#events#SaveEvent(bufnr('')) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}], - \ }], - \ [1, 'textDocument/didSave', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ }, - \ }], - \ ], - \ g:message_list - -Execute(Server should be notified on change): - call ale#events#FileChangedEvent(bufnr('')) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}], - \ }], - \ ], - \ g:message_list diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_engine_lsp_response_handling.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_engine_lsp_response_handling.vader deleted file mode 100644 index 50ceef4d..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_engine_lsp_response_handling.vader +++ /dev/null @@ -1,428 +0,0 @@ -Before: - Save g:ale_set_lists_synchronously - Save g:ale_buffer_info - Save g:ale_lsp_error_messages - Save g:ale_set_loclist - Save g:ale_set_signs - Save g:ale_set_quickfix - Save g:ale_set_highlights - Save g:ale_echo_cursor - Save g:ale_disable_lsp - Save g:ale_history_enabled - Save g:ale_history_log_output - - let g:ale_disable_lsp = 0 - let g:ale_set_lists_synchronously = 1 - let g:ale_buffer_info = {} - let g:ale_set_loclist = 1 - " Disable features we don't need for these tests. - let g:ale_set_signs = 0 - let g:ale_set_quickfix = 0 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 0 - let g:ale_history_enabled = 1 - let g:ale_history_log_output = 1 - - unlet! g:ale_lsp_error_messages - unlet! b:ale_linters - unlet! b:ale_disable_lsp - - call ale#linter#Reset() - call ale#test#SetDirectory('/testplugin/test') - call setloclist(0, []) - -After: - Restore - - unlet! b:ale_linters - - call setloclist(0, []) - call ale#test#RestoreDirectory() - call ale#linter#Reset() - call ale#lsp_linter#ClearLSPData() - -Given foobar(An empty file): -Execute(tsserver syntax error responses should be handled correctly): - runtime ale_linters/typescript/tsserver.vim - - if has('win32') - call ale#test#SetFilename('filename,[]^$.ts') - else - call ale#test#SetFilename('filename*?,{}[]^$.ts') - endif - - call ale#engine#InitBufferInfo(bufnr('')) - - if has('win32') - AssertEqual 'filename,[]^$.ts', expand('%:p:t') - else - AssertEqual 'filename*?,{}[]^$.ts', expand('%:p:t') - endif - - " When we get syntax errors and no semantic errors, we should keep the - " syntax errors. - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'syntaxDiag', - \ 'body': { - \ 'file': expand('%:p'), - \ 'diagnostics':[ - \ { - \ 'start': { - \ 'line':2, - \ 'offset':14, - \ }, - \ 'end': { - \ 'line':2, - \ 'offset':15, - \ }, - \ 'text': ''','' expected.', - \ "code":1005 - \ }, - \ ], - \ }, - \}) - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'semanticDiag', - \ 'body': { - \ 'file': expand('%:p'), - \ 'diagnostics':[ - \ ], - \ }, - \}) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 14, - \ 'vcol': 0, - \ 'nr': 1005, - \ 'type': 'E', - \ 'text': '1005: '','' expected.', - \ 'valid': 1, - \ 'pattern': '', - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - - " After we get empty syntax errors, we should clear them. - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'syntaxDiag', - \ 'body': { - \ 'file': expand('%:p'), - \ 'diagnostics':[ - \ ], - \ }, - \}) - - AssertEqual - \ [ - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - - " Syntax errors on the project root should not populate the LocList. - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'syntaxDiag', - \ 'body': { - \ 'file': g:dir, - \ 'diagnostics':[ - \ { - \ 'start': { - \ 'line':2, - \ 'offset':14, - \ }, - \ 'end': { - \ 'line':2, - \ 'offset':15, - \ }, - \ 'text': ''','' expected.', - \ "code":1005 - \ }, - \ ], - \ }, - \}) - - AssertEqual - \ [ - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - -Execute(tsserver semantic error responses should be handled correctly): - runtime ale_linters/typescript/tsserver.vim - - if has('win32') - call ale#test#SetFilename('filename,[]^$.ts') - else - call ale#test#SetFilename('filename*?,{}[]^$.ts') - endif - - call ale#engine#InitBufferInfo(bufnr('')) - - if has('win32') - AssertEqual 'filename,[]^$.ts', expand('%:p:t') - else - AssertEqual 'filename*?,{}[]^$.ts', expand('%:p:t') - endif - - " When we get syntax errors and no semantic errors, we should keep the - " syntax errors. - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'syntaxDiag', - \ 'body': { - \ 'file': expand('%:p'), - \ 'diagnostics':[ - \ ], - \ }, - \}) - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'semanticDiag', - \ 'body': { - \ 'file': expand('%:p'), - \ 'diagnostics':[ - \ { - \ 'start': { - \ 'line':2, - \ 'offset':14, - \ }, - \ 'end': { - \ 'line':2, - \ 'offset':15, - \ }, - \ 'text': 'Some semantic error', - \ "code":1005 - \ }, - \ ], - \ }, - \}) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 14, - \ 'vcol': 0, - \ 'nr': 1005, - \ 'type': 'E', - \ 'text': '1005: Some semantic error', - \ 'valid': 1, - \ 'pattern': '', - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - - " After we get empty syntax errors, we should clear them. - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'semanticDiag', - \ 'body': { - \ 'file': expand('%:p'), - \ 'diagnostics':[ - \ ], - \ }, - \}) - - AssertEqual - \ [ - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - - " Semantic errors on the project root should not populate the LocList. - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'semanticDiag', - \ 'body': { - \ 'file': g:dir, - \ 'diagnostics':[ - \ { - \ 'start': { - \ 'line':2, - \ 'offset':14, - \ }, - \ 'end': { - \ 'line':2, - \ 'offset':15, - \ }, - \ 'text': 'Some semantic error', - \ "code":1005 - \ }, - \ ], - \ }, - \}) - - AssertEqual - \ [ - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - -Execute(tsserver errors should mark tsserver no longer active): - let b:ale_linters = ['tsserver'] - runtime ale_linters/typescript/tsserver.vim - call ale#test#SetFilename('filename.ts') - call ale#engine#InitBufferInfo(bufnr('')) - - let g:ale_buffer_info[bufnr('')].active_linter_list = ale#linter#Get('typescript') - Assert !empty(g:ale_buffer_info[bufnr('')].active_linter_list) - - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'semanticDiag', - \ 'body': { - \ 'file': g:dir . '/filename.ts', - \ 'diagnostics':[], - \ }, - \}) - - AssertEqual [], g:ale_buffer_info[bufnr('')].active_linter_list - -Execute(LSP diagnostics responses should be handled correctly): - let b:ale_linters = ['eclipselsp'] - runtime ale_linters/java/eclipselsp.vim - - if has('win32') - call ale#test#SetFilename('filename,[]^$.ts') - else - call ale#test#SetFilename('filename*?,{}[]^$.java') - endif - - call ale#engine#InitBufferInfo(bufnr('')) - call ale#lsp_linter#SetLSPLinterMap({'1': 'eclipselsp'}) - - if has('win32') - AssertEqual 'filename,[]^$.ts', expand('%:p:t') - else - AssertEqual 'filename*?,{}[]^$.java', expand('%:p:t') - endif - - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'jsonrpc':'2.0', - \ 'method':'textDocument/publishDiagnostics', - \ 'params': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'diagnostics': [ - \ { - \ 'range': { - \ 'start': { - \ 'line': 0, - \ 'character':0 - \ }, - \ 'end': { - \ 'line': 0, - \ 'character':0 - \ } - \ }, - \ 'severity': 2, - \ 'code': "", - \ 'source': 'Java', - \ 'message': 'Missing JRE 1-8' - \ } - \ ] - \ } - \}) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 1, - \ 'pattern': '', - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': -1, - \ 'type': 'W', - \ 'text': 'Missing JRE 1-8' - \ } - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - -Execute(LSP diagnostics responses on project root should not populate loclist): - let b:ale_linters = ['eclipselsp'] - runtime ale_linters/java/eclipselsp.vim - call ale#test#SetFilename('filename.java') - call ale#engine#InitBufferInfo(bufnr('')) - call ale#lsp_linter#SetLSPLinterMap({'1': 'eclipselsp'}) - - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'jsonrpc':'2.0', - \ 'method':'textDocument/publishDiagnostics', - \ 'params': { - \ 'uri':'file://' . g:dir, - \ 'diagnostics': [ - \ { - \ 'range': { - \ 'start': { - \ 'line': 0, - \ 'character':0 - \ }, - \ 'end': { - \ 'line': 0, - \ 'character':0 - \ } - \ }, - \ 'severity': 2, - \ 'code': "", - \ 'source': 'Java', - \ 'message': 'Missing JRE 1-8' - \ } - \ ] - \ } - \}) - - AssertEqual - \ [ - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - -Execute(LSP errors should mark linters no longer active): - let b:ale_linters = ['pylsp'] - runtime ale_linters/python/pylsp.vim - call ale#test#SetFilename('filename.py') - call ale#engine#InitBufferInfo(bufnr('')) - call ale#lsp_linter#SetLSPLinterMap({1: 'pylsp'}) - - let g:ale_buffer_info[bufnr('')].active_linter_list = ale#linter#Get('python') - Assert !empty(g:ale_buffer_info[bufnr('')].active_linter_list) - - call ale#lsp_linter#HandleLSPResponse(1, { - \ 'method': 'textDocument/publishDiagnostics', - \ 'params': { - \ 'uri': ale#path#ToFileURI(g:dir . '/filename.py'), - \ 'diagnostics': [], - \ }, - \}) - - AssertEqual [], g:ale_buffer_info[bufnr('')].active_linter_list - -Execute(LSP errors should be logged in the history): - call ale#lsp_linter#SetLSPLinterMap({'347': 'foobar'}) - call ale#lsp_linter#HandleLSPResponse(347, { - \ 'jsonrpc': '2.0', - \ 'error': { - \ 'code': -32602, - \ 'message': 'xyz', - \ 'data': { - \ 'traceback': ['123', '456'], - \ }, - \ }, - \}) - - AssertEqual - \ {'foobar': ["xyz\n123\n456"]}, - \ get(g:, 'ale_lsp_error_messages', {}) diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_handling_window_requests.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_handling_window_requests.vader deleted file mode 100644 index 551d5975..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_handling_window_requests.vader +++ /dev/null @@ -1,94 +0,0 @@ -Before: - let g:expr_list = [] - let g:linter_name = 'some_linter' - let g:format = '%severity%:%linter%: %s' - " Get the default value to restore it - let g:default_severity = g:ale_lsp_show_message_severity - let g:ale_lsp_show_message_severity = 'information' - - function! ale#util#ShowMessage(expr) abort - call add(g:expr_list, a:expr) - endfunction - -After: - unlet! g:expr_list - unlet! g:linter_name - unlet! g:format - let g:ale_lsp_show_message_severity = g:default_severity - unlet! g:default_severity - -Execute(ale#lsp_window#HandleShowMessage() should only show errors when severity is set to "error"): - let g:ale_lsp_show_message_severity = 'error' - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':1,'message':'an error'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':2,'message':'a warning'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':3,'message':'an info'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':4,'message':'a log'}) - AssertEqual ['Error:some_linter: an error'], g:expr_list - -Execute(ale#lsp_window#HandleShowMessage() should only show errors and warnings when severity is set to "warning"): - let g:ale_lsp_show_message_severity = 'warning' - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':1,'message':'an error'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':2,'message':'a warning'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':3,'message':'an info'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':4,'message':'a log'}) - AssertEqual ['Error:some_linter: an error', 'Warning:some_linter: a warning'], g:expr_list - -Execute(ale#lsp_window#HandleShowMessage() should only show errors, warnings and infos when severity is set to "information"): - let g:ale_lsp_show_message_severity = 'information' - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':1,'message':'an error'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':2,'message':'a warning'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':3,'message':'an info'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':4,'message':'a log'}) - AssertEqual [ - \ 'Error:some_linter: an error', - \ 'Warning:some_linter: a warning', - \ 'Info:some_linter: an info'], - \ g:expr_list - -Execute(ale#lsp_window#HandleShowMessage() should only show errors, warnings and infos when severity is set to "info"): - let g:ale_lsp_show_message_severity = 'info' - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':1,'message':'an error'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':2,'message':'a warning'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':3,'message':'an info'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':4,'message':'a log'}) - AssertEqual [ - \ 'Error:some_linter: an error', - \ 'Warning:some_linter: a warning', - \ 'Info:some_linter: an info'], - \ g:expr_list - -Execute(ale#lsp_window#HandleShowMessage() should show all messages is severity is set to "log"): - let g:ale_lsp_show_message_severity = 'log' - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':1,'message':'an error'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':2,'message':'a warning'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':3,'message':'an info'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':4,'message':'a log'}) - AssertEqual [ - \ 'Error:some_linter: an error', - \ 'Warning:some_linter: a warning', - \ 'Info:some_linter: an info', - \ 'Log:some_linter: a log'], - \ g:expr_list - -Execute(ale#lsp_window#HandleShowMessage() should not show anything if severity is configured as disabled): - let g:ale_lsp_show_message_severity = 'disabled' - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':1,'message':'an error'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':2,'message':'a warning'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':3,'message':'an info'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':4,'message':'a log'}) - AssertEqual [], g:expr_list - -Execute(ale#lsp_window#HandleShowMessage() should use "warning" when severity is set to an invalid value): - let g:ale_lsp_show_message_severity = 'foo' - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':1,'message':'an error'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':2,'message':'a warning'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':3,'message':'an info'}) - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':4,'message':'a log'}) - AssertEqual [ - \ 'Error:some_linter: an error', - \ 'Warning:some_linter: a warning'], - \ g:expr_list - -Execute(ale#lsp_window#HandleShowMessage() should escape quotes on messages): - call ale#lsp_window#HandleShowMessage(g:linter_name, g:format, {'type':3,'message':"this is an 'info'"}) - AssertEqual ['Info:some_linter: this is an ''info'''], g:expr_list diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_client_messages.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_client_messages.vader deleted file mode 100644 index 4d897b51..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_client_messages.vader +++ /dev/null @@ -1,389 +0,0 @@ -Before: - let g:ale_lsp_next_version_id = 1 - - call ale#test#SetDirectory('/testplugin/test/lsp') - call ale#test#SetFilename('foo/bar.ts') - -After: - call ale#test#RestoreDirectory() - -Execute(ale#lsp#message#Initialize() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'initialize', - \ { - \ 'processId': getpid(), - \ 'rootPath': '/foo/bar', - \ 'capabilities': {}, - \ 'initializationOptions': {'foo': 'bar'}, - \ 'rootUri': 'file:///foo/bar', - \ } - \ ], - \ ale#lsp#message#Initialize('/foo/bar', {'foo': 'bar'}, {}) - -Execute(ale#lsp#message#Initialized() should return correct messages): - AssertEqual [1, 'initialized', {}], ale#lsp#message#Initialized() - -Execute(ale#lsp#message#Shutdown() should return correct messages): - AssertEqual [0, 'shutdown'], ale#lsp#message#Shutdown() - -Execute(ale#lsp#message#Exit() should return correct messages): - AssertEqual [1, 'exit'], ale#lsp#message#Exit(), - -Given typescript(A TypeScript file with 3 lines): - foo() - bar() - baz() - -Execute(ale#lsp#message#DidOpen() should return correct messages): - let g:ale_lsp_next_version_id = 12 - AssertEqual - \ [ - \ 1, - \ 'textDocument/didOpen', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ 'languageId': 'typescript', - \ 'version': 12, - \ 'text': "foo()\nbar()\nbaz()\n", - \ }, - \ } - \ ], - \ ale#lsp#message#DidOpen(bufnr(''), 'typescript') - -Execute(ale#lsp#message#DidChange() should return correct messages): - let g:ale_lsp_next_version_id = 34 - - AssertEqual - \ [ - \ 1, - \ 'textDocument/didChange', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ 'version': 34, - \ }, - \ 'contentChanges': [{'text': "foo()\nbar()\nbaz()\n"}], - \ } - \ ], - \ ale#lsp#message#DidChange(bufnr('')) - " The version numbers should increment. - AssertEqual - \ 35, - \ ale#lsp#message#DidChange(bufnr(''))[2].textDocument.version - AssertEqual - \ 36, - \ ale#lsp#message#DidChange(bufnr(''))[2].textDocument.version - -Execute(ale#lsp#message#DidSave() should return correct messages): - AssertEqual - \ [ - \ 1, - \ 'textDocument/didSave', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ } - \ ], - \ ale#lsp#message#DidSave(bufnr(''), v:false) - -Execute(ale#lsp#message#DidSave() should return correct message with includeText capability): - AssertEqual - \ [ - \ 1, - \ 'textDocument/didSave', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ 'version': 1, - \ }, - \ 'text': ale#util#GetBufferContents(bufnr('')), - \ } - \ ], - \ ale#lsp#message#DidSave(bufnr(''), v:true) - -Execute(ale#lsp#message#DidClose() should return correct messages): - AssertEqual - \ [ - \ 1, - \ 'textDocument/didClose', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ } - \ ], - \ ale#lsp#message#DidClose(bufnr('')) - -Execute(ale#lsp#message#Completion() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'textDocument/completion', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ 'position': {'line': 11, 'character': 33}, - \ } - \ ], - \ ale#lsp#message#Completion(bufnr(''), 12, 34, '') - -Execute(ale#lsp#message#Completion() should return correct messages with a trigger charaacter): - AssertEqual - \ [ - \ 0, - \ 'textDocument/completion', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ 'position': {'line': 11, 'character': 33}, - \ 'context': {'triggerKind': 2, 'triggerCharacter': '.'}, - \ } - \ ], - \ ale#lsp#message#Completion(bufnr(''), 12, 34, '.') - \ -Execute(ale#lsp#message#Definition() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'textDocument/definition', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ 'position': {'line': 11, 'character': 33}, - \ } - \ ], - \ ale#lsp#message#Definition(bufnr(''), 12, 34) - -Execute(ale#lsp#message#TypeDefinition() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'textDocument/typeDefinition', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ 'position': {'line': 11, 'character': 33}, - \ } - \ ], - \ ale#lsp#message#TypeDefinition(bufnr(''), 12, 34) - -Execute(ale#lsp#message#Implementation() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'textDocument/implementation', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ 'position': {'line': 11, 'character': 33}, - \ } - \ ], - \ ale#lsp#message#Implementation(bufnr(''), 12, 34) - -Execute(ale#lsp#message#References() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'textDocument/references', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ 'position': {'line': 11, 'character': 33}, - \ 'context': {'includeDeclaration': v:false}, - \ } - \ ], - \ ale#lsp#message#References(bufnr(''), 12, 34) - -Execute(ale#lsp#message#Symbol() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'workspace/symbol', - \ { - \ 'query': 'foobar', - \ } - \ ], - \ ale#lsp#message#Symbol('foobar') - -Execute(ale#lsp#message#Hover() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'textDocument/hover', - \ { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(g:dir . '/foo/bar.ts'), - \ }, - \ 'position': {'line': 11, 'character': 33}, - \ } - \ ], - \ ale#lsp#message#Hover(bufnr(''), 12, 34) - -Execute(ale#lsp#message#DidChangeConfiguration() should return correct messages): - let g:ale_lsp_configuration = { - \ 'foo': 'bar' - \ } - AssertEqual - \ [ - \ 1, - \ 'workspace/didChangeConfiguration', - \ { - \ 'settings': { - \ 'foo': 'bar', - \ } - \ } - \ ], - \ ale#lsp#message#DidChangeConfiguration(bufnr(''), g:ale_lsp_configuration) - -Execute(ale#lsp#tsserver_message#Open() should return correct messages): - AssertEqual - \ [ - \ 1, - \ 'ts@open', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ } - \ ], - \ ale#lsp#tsserver_message#Open(bufnr('')) - -Execute(ale#lsp#tsserver_message#Close() should return correct messages): - AssertEqual - \ [ - \ 1, - \ 'ts@close', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ } - \ ], - \ ale#lsp#tsserver_message#Close(bufnr('')) - -Execute(ale#lsp#tsserver_message#Change() should return correct messages): - AssertEqual - \ [ - \ 1, - \ 'ts@change', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ 'line': 1, - \ 'offset': 1, - \ 'endLine': 1073741824, - \ 'endOffset': 1, - \ 'insertString': "foo()\nbar()\nbaz()\n", - \ } - \ ], - \ ale#lsp#tsserver_message#Change(bufnr('')) - -Execute(ale#lsp#tsserver_message#Geterr() should return correct messages): - AssertEqual - \ [ - \ 1, - \ 'ts@geterr', - \ { - \ 'files': [ale#path#Simplify(g:dir . '/foo/bar.ts')], - \ } - \ ], - \ ale#lsp#tsserver_message#Geterr(bufnr('')) - -Execute(ale#lsp#tsserver_message#Completions() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'ts@completions', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ 'line': 347, - \ 'offset': 12, - \ 'prefix': 'abc', - \ 'includeExternalModuleExports': 1, - \ } - \ ], - \ ale#lsp#tsserver_message#Completions(bufnr(''), 347, 12, 'abc', 1) - -Execute(ale#lsp#tsserver_message#CompletionEntryDetails() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'ts@completionEntryDetails', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ 'line': 347, - \ 'offset': 12, - \ 'entryNames': ['foo', 'bar'], - \ } - \ ], - \ ale#lsp#tsserver_message#CompletionEntryDetails(bufnr(''), 347, 12, ['foo', 'bar']) - -Execute(ale#lsp#tsserver_message#Definition() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'ts@definition', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ 'line': 347, - \ 'offset': 12, - \ } - \ ], - \ ale#lsp#tsserver_message#Definition(bufnr(''), 347, 12) - -Execute(ale#lsp#tsserver_message#TypeDefinition() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'ts@typeDefinition', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ 'line': 347, - \ 'offset': 12, - \ } - \ ], - \ ale#lsp#tsserver_message#TypeDefinition(bufnr(''), 347, 12) - -Execute(ale#lsp#tsserver_message#Implementation() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'ts@implementation', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ 'line': 347, - \ 'offset': 12, - \ } - \ ], - \ ale#lsp#tsserver_message#Implementation(bufnr(''), 347, 12) - -Execute(ale#lsp#tsserver_message#References() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'ts@references', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ 'line': 347, - \ 'offset': 12, - \ } - \ ], - \ ale#lsp#tsserver_message#References(bufnr(''), 347, 12) - -Execute(ale#lsp#tsserver_message#Quickinfo() should return correct messages): - AssertEqual - \ [ - \ 0, - \ 'ts@quickinfo', - \ { - \ 'file': ale#path#Simplify(g:dir . '/foo/bar.ts'), - \ 'line': 347, - \ 'offset': 12, - \ } - \ ], - \ ale#lsp#tsserver_message#Quickinfo(bufnr(''), 347, 12) diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_command_formatting.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_command_formatting.vader deleted file mode 100644 index e99e1dad..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_command_formatting.vader +++ /dev/null @@ -1,44 +0,0 @@ -Before: - Save g:ale_command_wrapper - - runtime autoload/ale/lsp.vim - - let g:ale_command_wrapper = '' - - let g:args = [] - - " Mock the StartProgram function so we can just capture the arguments. - function! ale#lsp#StartProgram(...) abort - let g:args = a:000[1:] - endfunction - -After: - Restore - - unlet! g:args - - runtime autoload/ale/lsp.vim - -Execute(Command formatting should be applied correctly for LSP linters): - call ale#lsp_linter#StartLSP( - \ bufnr(''), - \ { - \ 'name': 'linter', - \ 'language': {-> 'x'}, - \ 'project_root': {-> '/foo/bar'}, - \ 'lsp': 'stdio', - \ 'executable': has('win32') ? 'cmd': 'true', - \ 'command': '%e --foo', - \ }, - \ {-> 0} - \) - - if has('win32') - AssertEqual - \ ['cmd', 'cmd /s/c "cmd --foo"'], - \ g:args - else - AssertEqual - \ ['true', [&shell, '-c', '''true'' --foo']], - \ g:args - endif diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_connections.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_connections.vader deleted file mode 100644 index 1c2fceab..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_connections.vader +++ /dev/null @@ -1,227 +0,0 @@ -Before: - let g:ale_lsp_next_message_id = 1 - -After: - if exists('b:conn') && has_key(b:conn, 'id') - call ale#lsp#RemoveConnectionWithID(b:conn.id) - endif - - unlet! b:data - unlet! b:conn - -Execute(GetNextMessageID() should increment appropriately): - " We should get the initial ID, and increment a bit. - AssertEqual 1, ale#lsp#GetNextMessageID() - AssertEqual 2, ale#lsp#GetNextMessageID() - AssertEqual 3, ale#lsp#GetNextMessageID() - - " Set the maximum ID. - let g:ale_lsp_next_message_id = 9223372036854775807 - - " When we hit the maximum ID, the next ID afterwards should be 1. - AssertEqual 9223372036854775807, ale#lsp#GetNextMessageID() - AssertEqual 1, ale#lsp#GetNextMessageID() - -Execute(ale#lsp#CreateMessageData() should create an appropriate message): - " NeoVim outputs JSON with spaces, so the output is a little different. - if has('nvim') - " 79 is the size in bytes for UTF-8, not the number of characters. - AssertEqual - \ [ - \ 1, - \ "Content-Length: 79\r\n\r\n" - \ . '{"method": "someMethod", "jsonrpc": "2.0", "id": 1, "params": {"foo": "barÜ"}}', - \ ], - \ ale#lsp#CreateMessageData([0, 'someMethod', {'foo': 'barÜ'}]) - " Check again to ensure that we use the next ID. - AssertEqual - \ [ - \ 2, - \ "Content-Length: 79\r\n\r\n" - \ . '{"method": "someMethod", "jsonrpc": "2.0", "id": 2, "params": {"foo": "barÜ"}}', - \ ], - \ ale#lsp#CreateMessageData([0, 'someMethod', {'foo': 'barÜ'}]) - else - AssertEqual - \ [ - \ 1, - \ "Content-Length: 71\r\n\r\n" - \ . '{"method":"someMethod","jsonrpc":"2.0","id":1,"params":{"foo":"barÜ"}}', - \ ], - \ ale#lsp#CreateMessageData([0, 'someMethod', {'foo': 'barÜ'}]) - AssertEqual - \ [ - \ 2, - \ "Content-Length: 71\r\n\r\n" - \ . '{"method":"someMethod","jsonrpc":"2.0","id":2,"params":{"foo":"barÜ"}}', - \ ], - \ ale#lsp#CreateMessageData([0, 'someMethod', {'foo': 'barÜ'}]) - endif - -Execute(ale#lsp#CreateMessageData() should create messages without params): - if has('nvim') - AssertEqual - \ [ - \ 1, - \ "Content-Length: 56\r\n\r\n" - \ . '{"method": "someOtherMethod", "jsonrpc": "2.0", "id": 1}', - \ ], - \ ale#lsp#CreateMessageData([0, 'someOtherMethod']) - else - AssertEqual - \ [ - \ 1, - \ "Content-Length: 51\r\n\r\n" - \ . '{"method":"someOtherMethod","jsonrpc":"2.0","id":1}', - \ ], - \ ale#lsp#CreateMessageData([0, 'someOtherMethod']) - endif - -Execute(ale#lsp#CreateMessageData() should create notifications): - if has('nvim') - AssertEqual - \ [ - \ 0, - \ "Content-Length: 48\r\n\r\n" - \ . '{"method": "someNotification", "jsonrpc": "2.0"}', - \ ], - \ ale#lsp#CreateMessageData([1, 'someNotification']) - AssertEqual - \ [ - \ 0, - \ "Content-Length: 74\r\n\r\n" - \ . '{"method": "someNotification", "jsonrpc": "2.0", "params": {"foo": "bar"}}', - \ ], - \ ale#lsp#CreateMessageData([1, 'someNotification', {'foo': 'bar'}]) - else - AssertEqual - \ [ - \ 0, - \ "Content-Length: 45\r\n\r\n" - \ . '{"method":"someNotification","jsonrpc":"2.0"}', - \ ], - \ ale#lsp#CreateMessageData([1, 'someNotification']) - AssertEqual - \ [ - \ 0, - \ "Content-Length: 68\r\n\r\n" - \ . '{"method":"someNotification","jsonrpc":"2.0","params":{"foo":"bar"}}', - \ ], - \ ale#lsp#CreateMessageData([1, 'someNotification', {'foo': 'bar'}]) - endif - -Execute(ale#lsp#CreateMessageData() should create tsserver notification messages): - if has('nvim') - AssertEqual - \ [ - \ 0, - \ '{"seq": null, "type": "request", "command": "someNotification"}' - \ . "\n", - \ ], - \ ale#lsp#CreateMessageData([1, 'ts@someNotification']) - AssertEqual - \ [ - \ 0, - \ '{"seq": null, "arguments": {"foo": "bar"}, "type": "request", "command": "someNotification"}' - \ . "\n", - \ ], - \ ale#lsp#CreateMessageData([1, 'ts@someNotification', {'foo': 'bar'}]) - else - AssertEqual - \ [ - \ 0, - \ '{"seq":null,"type":"request","command":"someNotification"}' - \ . "\n", - \ ], - \ ale#lsp#CreateMessageData([1, 'ts@someNotification']) - AssertEqual - \ [ - \ 0, - \ '{"seq":null,"arguments":{"foo":"bar"},"type":"request","command":"someNotification"}' - \ . "\n", - \ ], - \ ale#lsp#CreateMessageData([1, 'ts@someNotification', {'foo': 'bar'}]) - endif - -Execute(ale#lsp#CreateMessageData() should create tsserver messages expecting responses): - if has('nvim') - AssertEqual - \ [ - \ 1, - \ '{"seq": 1, "type": "request", "command": "someMessage"}' - \ . "\n", - \ ], - \ ale#lsp#CreateMessageData([0, 'ts@someMessage']) - AssertEqual - \ [ - \ 2, - \ '{"seq": 2, "arguments": {"foo": "bar"}, "type": "request", "command": "someMessage"}' - \ . "\n", - \ ], - \ ale#lsp#CreateMessageData([0, 'ts@someMessage', {'foo': 'bar'}]) - else - AssertEqual - \ [ - \ 1, - \ '{"seq":1,"type":"request","command":"someMessage"}' - \ . "\n", - \ ], - \ ale#lsp#CreateMessageData([0, 'ts@someMessage']) - AssertEqual - \ [ - \ 2, - \ '{"seq":2,"arguments":{"foo":"bar"},"type":"request","command":"someMessage"}' - \ . "\n", - \ ], - \ ale#lsp#CreateMessageData([0, 'ts@someMessage', {'foo': 'bar'}]) - endif - -Execute(ale#lsp#ReadMessageData() should read single whole messages): - AssertEqual - \ ['', [{'id': 2, 'jsonrpc': '2.0', 'result': {'foo': 'barÜ'}}]], - \ ale#lsp#ReadMessageData( - \ "Content-Length: 49\r\n\r\n" - \ . '{"id":2,"jsonrpc":"2.0","result":{"foo":"barÜ"}}' - \ ) - -Execute(ale#lsp#ReadMessageData() should ignore other headers): - AssertEqual - \ ['', [{'id': 2, 'jsonrpc': '2.0', 'result': {'foo': 'barÜ'}}]], - \ ale#lsp#ReadMessageData( - \ "First-Header: 49\r\n" - \ . "Content-Length: 49\r\n" - \ . "Other-Header: 49\r\n" - \ . "\r\n" - \ . '{"id":2,"jsonrpc":"2.0","result":{"foo":"barÜ"}}' - \ ) - -Execute(ale#lsp#ReadMessageData() should handle partial messages): - let b:data = "Content-Length: 49\r\n\r\n" . '{"id":2,"jsonrpc":"2.0","result":' - - AssertEqual [b:data, []], ale#lsp#ReadMessageData(b:data) - -Execute(ale#lsp#ReadMessageData() should handle multiple messages): - AssertEqual - \ ['', [ - \ {'id': 2, 'jsonrpc': '2.0', 'result': {'foo': 'barÜ'}}, - \ {'id': 2, 'jsonrpc': '2.0', 'result': {'foo123': 'barÜ'}}, - \ ]], - \ ale#lsp#ReadMessageData( - \ "Content-Length: 49\r\n\r\n" - \ . '{"id":2,"jsonrpc":"2.0","result":{"foo":"barÜ"}}' - \ . "Content-Length: 52\r\n\r\n" - \ . '{"id":2,"jsonrpc":"2.0","result":{"foo123":"barÜ"}}' - \ ) - -Execute(ale#lsp#ReadMessageData() should handle a message with part of a second message): - let b:data = "Content-Length: 52\r\n\r\n" . '{"id":2,"jsonrpc":"2.' - - AssertEqual - \ [b:data, [ - \ {'id': 2, 'jsonrpc': '2.0', 'result': {'foo': 'barÜ'}}, - \ ]], - \ ale#lsp#ReadMessageData( - \ "Content-Length: 49\r\n\r\n" - \ . '{"id":2,"jsonrpc":"2.0","result":{"foo":"barÜ"}}' - \ . b:data - \ ) diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_custom_request.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_custom_request.vader deleted file mode 100644 index c8767e59..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_custom_request.vader +++ /dev/null @@ -1,158 +0,0 @@ -Before: - runtime autoload/ale/linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - - let g:address = 'ccls_address' - let g:conn_id = -1 - let g:executable = 'ccls' - let g:executable_or_address = '' - let g:linter_name = 'ccls' - let g:magic_number = 42 - let g:no_result = 0 - let g:message_list = [] - let g:message_id = 1 - let g:method = '$ccls/call' - let g:parameters = {} - let g:project_root = '/project/root' - let g:response = '' - let g:return_value = -1 - - let g:linter_list = [{ - \ 'output_stream': 'stdout', - \ 'lint_file': 0, - \ 'language': 'cpp', - \ 'name': g:linter_name, - \ 'project_root': {b -> g:project_root}, - \ 'aliases': [], - \ 'read_buffer': 1, - \ 'command': '%e' - \ }] - - let g:callback_result = g:no_result - - " Encode dictionary to jsonrpc - function! Encode(obj) abort - let l:body = json_encode(a:obj) - return 'Content-Length: ' . strlen(l:body) . "\r\n\r\n" . l:body - endfunction - - " Replace the StartLSP function to mock an LSP linter - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register(g:executable_or_address, g:project_root, {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - call ale#lsp#HandleMessage(g:conn_id, Encode({'method': 'initialize'})) - - let l:details = { - \ 'command': g:executable, - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': g:project_root, - \} - - call ale#lsp_linter#OnInit(a:linter, l:details, a:Callback) - endfunction - - " Dummy callback - function! Callback(response) abort - let g:callback_result = a:response.result.value - endfunction - - " Replace the GetAll function to mock an LSP linter - function! ale#linter#GetAll(filetype) abort - return g:linter_list - endfunction - - " Replace the Send function to mock an LSP linter - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - return g:message_id - endfunction - - " Code for a test case - function! TestCase(is_notification) abort - " Test sending a custom request - let g:return_value = ale#lsp_linter#SendRequest( - \ bufnr('%'), - \ g:linter_name, - \ [a:is_notification, g:method, g:parameters], - \ function('Callback')) - - Assert index(g:message_list, [a:is_notification, g:method, g:parameters]) >= 0 - - " Mock an incoming response to the request - let g:response = Encode({ - \ 'id': g:message_id, - \ 'jsonrpc': '2.0', - \ 'result': {'value': g:magic_number} - \ }) - call ale#lsp#HandleMessage(g:conn_id, g:response) - - AssertEqual - \ a:is_notification ? g:no_result : g:magic_number, - \ g:callback_result - endfunction - -After: - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - unlet! g:callback_result - unlet! g:conn_id - unlet! g:executable - unlet! g:is_notification - unlet! g:linter_name - unlet! g:magic_number - unlet! g:message_list - unlet! g:message_id - unlet! g:method - unlet! g:no_result - unlet! g:parameters - unlet! g:project_root - unlet! g:response - unlet! g:return_value - - delfunction Encode - delfunction Callback - delfunction TestCase - - runtime autoload/ale/linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - -Given cpp(Empty cpp file): -Execute(Test custom request to server identified by executable): - let g:executable_or_address = g:executable - let g:linter_list[0].executable = {b -> g:executable} - let g:linter_list[0].lsp = 'stdio' - let g:is_notification = 0 - - call TestCase(g:is_notification) - -Given cpp(Empty cpp file): -Execute(Test custom notification to server identified by executable): - let g:executable_or_address = g:executable - let g:linter_list[0].executable = {b -> g:executable} - let g:linter_list[0].lsp = 'stdio' - let g:is_notification = 1 - - call TestCase(g:is_notification) - -Given cpp(Empty cpp file): -Execute(Test custom request to server identified by address): - let g:executable_or_address = g:address - let g:linter_list[0].address = {b -> g:address} - let g:linter_list[0].lsp = 'socket' - let g:is_notification = 0 - - call TestCase(g:is_notification) - -Given cpp(Empty cpp file): -Execute(Test custom notification to server identified by address): - let g:executable_or_address = g:address - let g:linter_list[0].address = {b -> g:address} - let g:linter_list[0].lsp = 'socket' - let g:is_notification = 1 - - call TestCase(g:is_notification) diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_error_parsing.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_error_parsing.vader deleted file mode 100644 index 44169c80..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_error_parsing.vader +++ /dev/null @@ -1,74 +0,0 @@ -Execute(Invalid responses should be handled): - AssertEqual '', ale#lsp#response#GetErrorMessage({}) - AssertEqual '', ale#lsp#response#GetErrorMessage({'error': 0}) - AssertEqual '', ale#lsp#response#GetErrorMessage({'error': {}}) - AssertEqual '', ale#lsp#response#GetErrorMessage({ - \ 'error': { - \ 'code': 0, - \ 'message': 'x', - \ }, - \}) - AssertEqual '', ale#lsp#response#GetErrorMessage({'error': {'code': -32602}}) - AssertEqual '', ale#lsp#response#GetErrorMessage({'error': {'code': -32603}}) - -Execute(Messages without tracebacks should be handled): - AssertEqual 'xyz', ale#lsp#response#GetErrorMessage({ - \ 'error': { - \ 'code': -32602, - \ 'message': 'xyz', - \ }, - \}) - AssertEqual 'abc', ale#lsp#response#GetErrorMessage({ - \ 'error': { - \ 'code': -32603, - \ 'message': 'abc', - \ }, - \}) - -Execute(Invalid traceback data should be tolerated): - AssertEqual 'xyz', ale#lsp#response#GetErrorMessage({ - \ 'error': { - \ 'code': -32602, - \ 'message': 'xyz', - \ 'data': { - \ }, - \ }, - \}) - AssertEqual 'xyz', ale#lsp#response#GetErrorMessage({ - \ 'error': { - \ 'code': -32602, - \ 'message': 'xyz', - \ 'data': { - \ 'traceback': 0, - \ }, - \ }, - \}) - AssertEqual 'xyz', ale#lsp#response#GetErrorMessage({ - \ 'error': { - \ 'code': -32602, - \ 'message': 'xyz', - \ 'data': { - \ 'traceback': [], - \ }, - \ }, - \}) - -Execute(Messages with tracebacks should be handled): - AssertEqual "xyz\n123\n456", ale#lsp#response#GetErrorMessage({ - \ 'error': { - \ 'code': -32602, - \ 'message': 'xyz', - \ 'data': { - \ 'traceback': ['123', '456'], - \ }, - \ }, - \}) - -Execute(Messages with string data should be handled): - AssertEqual "xyz\nUncaught Exception", ale#lsp#response#GetErrorMessage({ - \ 'error': { - \ 'code': -32602, - \ 'message': 'xyz', - \ 'data': 'Uncaught Exception', - \ }, - \}) diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_root_detection.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_root_detection.vader deleted file mode 100644 index 291300f0..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_root_detection.vader +++ /dev/null @@ -1,90 +0,0 @@ -Before: - Save g:ale_lsp_root - Save g:ale_root - Save b:ale_lsp_root - Save b:ale_root - - unlet! g:ale_lsp_root - let g:ale_root = {} - - call ale#assert#SetUpLinterTest('c', 'clangd') - - function! Hook1(buffer) - return 'abc123' - endfunction - -After: - Restore - - delfunction Hook1 - - call ale#assert#TearDownLinterTest() - -Execute(The buffer-specific variable can be a string): - let b:ale_root = '/some/path' - call ale#test#SetFilename('other-file.c') - - AssertLSPProject '/some/path' - -Execute(The buffer-specific variable can be a dictionary): - let b:ale_root = {'clangd': '/some/path', 'golangserver': '/other/path'} - call ale#test#SetFilename('other-file.c') - - AssertLSPProject '/some/path' - -Execute(The buffer-specific variable can have funcrefs): - let b:ale_root = {'clangd': function('Hook1'), 'golangserver': '/path'} - call ale#test#SetFilename('other-file.c') - - AssertLSPProject 'abc123' - -Execute(The buffer-specific variable can be the old ale_lsp_root setting): - let b:ale_lsp_root = '/some/path' - call ale#test#SetFilename('other-file.c') - - AssertLSPProject '/some/path' - -Execute(The global variable can be a dictionary): - let g:ale_root = {'clangd': '/some/path', 'golangserver': '/other/path'} - call ale#test#SetFilename('other-file.c') - - AssertLSPProject '/some/path' - -Execute(The global variable can have funcrefs): - let g:ale_root = {'clangd': function('Hook1'), 'golangserver': '/path'} - call ale#test#SetFilename('other-file.c') - - AssertLSPProject 'abc123' - -Execute(The buffer-specific variable overrides the global variable): - let b:ale_root = {'clangd': '/some/path', 'golangserver': '/other/path'} - let g:ale_root = {'clangd': '/not/this/path', 'golangserver': '/elsewhere'} - call ale#test#SetFilename('other-file.c') - - AssertLSPProject '/some/path' - -Execute(The global variable is queried if the buffer-specific has no value): - let b:ale_root = {'golangserver': '/other/path'} - let g:ale_root = {'clangd': '/some/path', 'golangserver': '/elsewhere'} - call ale#test#SetFilename('other-file.c') - - AssertLSPProject '/some/path' - -Execute(The global variable can be the old ale_lsp_root setting): - let g:ale_root = {} - let g:ale_lsp_root = {'clangd': '/some/path', 'golangserver': '/other/path'} - call ale#test#SetFilename('other-file.c') - - AssertLSPProject '/some/path' - -Execute(A non-empty ale_root setting should replace the old ale_lsp_root): - let g:ale_root = {'clangd': '/some/path', 'golangserver': '/other/path'} - let g:ale_lsp_root = {'clangd': '/xxx', 'golangserver': '/xxx'} - call ale#test#SetFilename('other-file.c') - - AssertLSPProject '/some/path' - -Execute(No path should be returned by default): - call ale#test#SetFilename(tempname() . '/other-file.c') - - AssertLSPProject '' diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_startup.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_startup.vader deleted file mode 100644 index 7417dbcb..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_lsp_startup.vader +++ /dev/null @@ -1,492 +0,0 @@ -Before: - Save g:ale_run_synchronously - - let g:ale_run_synchronously = 1 - unlet! g:ale_run_synchronously_callbacks - unlet! g:ale_run_synchronously_emulate_commands - - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/engine.vim - runtime autoload/ale/job.vim - runtime autoload/ale/socket.vim - - let g:job_map = {} - let g:emulate_job_failure = 0 - let g:next_job_id = 1 - let g:lsp_started = 0 - - let g:socket_map = {} - let g:emulate_socket_failure = 0 - let g:next_channel_id = 0 - - let g:message_buffer = '' - let g:calls = [] - - function! ale#engine#IsExecutable(buffer, executable) abort - return !empty(a:executable) - endfunction - - function! ale#job#HasOpenChannel(job_id) abort - return has_key(g:job_map, a:job_id) - endfunction - - function! ale#job#Stop(job_id) abort - if has_key(g:job_map, a:job_id) - call remove(g:job_map, a:job_id) - endif - endfunction - - function! ale#job#Start(command, options) abort - if g:emulate_job_failure - return 0 - endif - - let l:job_id = g:next_job_id - let g:next_job_id += 1 - let g:job_map[l:job_id] = [a:command, a:options] - - return l:job_id - endfunction - - function! ale#job#SendRaw(job_id, data) abort - let g:message_buffer .= a:data - endfunction - - function! ale#socket#IsOpen(channel_id) abort - return has_key(g:socket_map, a:channel_id) - endfunction - - function! ale#socket#Close(channel_id) abort - if has_key(g:socket_map, a:channel_id) - call remove(g:socket_map, a:channel_id) - endif - endfunction - - function! ale#socket#Open(address, options) abort - if g:emulate_socket_failure - return -1 - endif - - let l:channel_id = g:next_channel_id - let g:next_channel_id += 1 - let g:socket_map[l:channel_id] = [a:address, a:options] - - return l:channel_id - endfunction - - function! ale#socket#Send(channel_id, data) abort - let g:message_buffer .= a:data - endfunction - - function! PopMessages() abort - let l:message_list = [] - - for l:line in split(g:message_buffer, '\(\r\|\n\|Content-Length\)\+') - if l:line[:0] is '{' - let l:data = json_decode(l:line) - - call add(l:message_list, l:data) - endif - endfor - - let g:message_buffer = '' - - return l:message_list - endfunction - - function! SendMessage(message) abort - let l:conn_id = keys(ale#lsp#GetConnections())[0] - let l:body = json_encode(a:message) - let l:data = 'Content-Length: ' . strlen(l:body) . "\r\n\r\n" . l:body - - call ale#lsp#HandleMessage(l:conn_id, l:data) - endfunction - - function! Start(buffer) abort - let l:linter = values(ale#linter#GetLintersLoaded())[0][0] - - return ale#lsp_linter#StartLSP( - \ a:buffer, - \ l:linter, - \ {linter, details -> add(g:calls, [linter.name, details])}, - \) - endfunction - - function! AssertInitSuccess(linter_name, conn_prefix, language, root, command, buffer) abort - let l:messages = PopMessages() - - if a:linter_name is# 'tsserver' - AssertEqual - \ [ - \ { - \ 'seq': v:null, - \ 'arguments': { - \ 'file': expand('#' . a:buffer . ':p'), - \ }, - \ 'type': 'request', - \ 'command': 'open', - \ }, - \ ], - \ l:messages - else - AssertEqual - \ [ - \ { - \ 'method': 'initialize', - \ 'jsonrpc': '2.0', - \ 'id': 1, - \ 'params': { - \ 'initializationOptions': {}, - \ 'rootUri': ale#path#ToFileURI(a:root), - \ 'rootPath': a:root, - \ 'processId': getpid(), - \ 'capabilities': { - \ 'workspace': { - \ 'applyEdit': v:false, - \ 'didChangeConfiguration': { - \ 'dynamicRegistration': v:false, - \ }, - \ 'symbol': { - \ 'dynamicRegistration': v:false, - \ }, - \ 'workspaceFolders': v:false, - \ 'configuration': v:false, - \ }, - \ 'textDocument': { - \ 'synchronization': { - \ 'dynamicRegistration': v:false, - \ 'willSave': v:false, - \ 'willSaveWaitUntil': v:false, - \ 'didSave': v:true, - \ }, - \ 'completion': { - \ 'dynamicRegistration': v:false, - \ 'completionItem': { - \ 'snippetSupport': v:false, - \ 'commitCharactersSupport': v:false, - \ 'documentationFormat': ['plaintext'], - \ 'deprecatedSupport': v:false, - \ 'preselectSupport': v:false, - \ }, - \ 'contextSupport': v:false, - \ }, - \ 'hover': { - \ 'dynamicRegistration': v:false, - \ 'contentFormat': ['plaintext'], - \ }, - \ 'references': { - \ 'dynamicRegistration': v:false, - \ }, - \ 'documentSymbol': { - \ 'dynamicRegistration': v:false, - \ 'hierarchicalDocumentSymbolSupport': v:false, - \ }, - \ 'definition': { - \ 'dynamicRegistration': v:false, - \ 'linkSupport': v:false, - \ }, - \ 'typeDefinition': { - \ 'dynamicRegistration': v:false, - \ }, - \ 'implementation': { - \ 'dynamicRegistration': v:false, - \ 'linkSupport': v:false, - \ }, - \ 'publishDiagnostics': { - \ 'relatedInformation': v:true, - \ }, - \ 'codeAction': { - \ 'dynamicRegistration': v:false, - \ 'codeActionLiteralSupport': { - \ 'codeActionKind': { - \ 'valueSet': [] - \ } - \ } - \ }, - \ 'rename': { - \ 'dynamicRegistration': v:false, - \ }, - \ }, - \ }, - \ }, - \ }, - \ ], - \ l:messages - - call SendMessage({ - \ 'jsonrpc': '2.0', - \ 'id': 1, - \ 'result': { - \ 'capabilities': { - \ 'renameProvider': v:true, - \ 'executeCommandProvider': { - \ 'commands': [], - \ }, - \ 'hoverProvider': v:true, - \ 'documentSymbolProvider': v:true, - \ 'documentRangeFormattingProvider': v:true, - \ 'codeLensProvider': { - \ 'resolveProvider': v:false - \ }, - \ 'referencesProvider': v:true, - \ 'textDocumentSync': 2, - \ 'documentFormattingProvider': v:true, - \ 'codeActionProvider': v:true, - \ 'signatureHelpProvider': { - \ 'triggerCharacters': ['(', ','], - \ }, - \ 'completionProvider': { - \ 'triggerCharacters': ['.'], - \ 'resolveProvider': v:false - \ }, - \ 'definitionProvider': v:true, - \ 'experimental': {}, - \ 'documentHighlightProvider': v:true, - \ 'workspaceSymbolProvider': v:true, - \ }, - \ }, - \}) - - let l:messages = PopMessages() - - AssertEqual - \ [ - \ { - \ 'method': 'initialized', - \ 'jsonrpc': '2.0', - \ 'params': {}, - \ }, - \ { - \ 'method': 'textDocument/didOpen', - \ 'jsonrpc': '2.0', - \ 'params': { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('#' . a:buffer . ':p')), - \ 'version': ale#lsp#message#GetNextVersionID() - 1, - \ 'languageId': a:language, - \ 'text': "\n", - \ }, - \ }, - \ }, - \ ], - \ l:messages - endif - - AssertEqual - \ [ - \ [ - \ a:linter_name, - \ { - \ 'connection_id': a:conn_prefix . ':' . a:root, - \ 'project_root': a:root, - \ 'buffer': a:buffer, - \ 'command': !empty(a:command) ? ale#job#PrepareCommand(a:buffer, a:command) : '', - \ }, - \ ], - \ ], - \ g:calls - endfunction - - function! AssertInitFailure() abort - let l:messages = PopMessages() - - AssertEqual [], l:messages - AssertEqual [], g:calls - endfunction - - call ale#linter#Reset() - -After: - Restore - - call ale#linter#Reset() - call ale#lsp#ResetConnections() - - unlet! g:ale_run_synchronously_callbacks - unlet! g:job_map - unlet! g:emulate_job_failure - unlet! g:next_job_id - unlet! g:lsp_started - - unlet! g:socket_map - unlet! g:emulate_socket_failure - unlet! g:next_channel_id - - unlet! g:message_buffer - unlet! g:calls - - augroup VaderTest - autocmd! - augroup END - - augroup! VaderTest - - delfunction PopMessages - delfunction Start - delfunction AssertInitSuccess - delfunction AssertInitFailure - - runtime autoload/ale/engine.vim - runtime autoload/ale/job.vim - runtime autoload/ale/socket.vim - -Execute(tsserver should be started correctly): - runtime ale_linters/typescript/tsserver.vim - - Assert Start(bufnr('')) - call AssertInitSuccess('tsserver', 'tsserver', '', '', ale#Escape('tsserver'), bufnr('')) - -Execute(tsserver failures should be handled appropriately): - runtime ale_linters/typescript/tsserver.vim - - let g:emulate_job_failure = 1 - - Assert !Start(bufnr('')) - call AssertInitFailure() - -Execute(LSP jobs should start correctly): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'stdio', - \ 'executable': 'foo', - \ 'command': 'foo', - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - Assert Start(bufnr('')) - call AssertInitSuccess('foo', 'foo', 'foobar', '/foo/bar', 'foo', bufnr('')) - -Execute(LSP job failures should be handled): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'stdio', - \ 'executable': 'foo', - \ 'command': 'foo', - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - let g:emulate_job_failure = 1 - - Assert !Start(bufnr('')) - call AssertInitFailure() - -Execute(LSP TCP connections should start correctly): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': 'foo', - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - Assert Start(bufnr('')) - call AssertInitSuccess('foo', 'foo', 'foobar', '/foo/bar', '', bufnr('')) - -Execute(LSP TCP connection failures should be handled): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': 'foo', - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - let g:emulate_socket_failure = 1 - - Assert !Start(bufnr('')) - call AssertInitFailure() - -Execute(Deferred executables should be handled correctly): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'stdio', - \ 'executable': {b -> ale#command#Run(b, 'echo', {-> 'foo'})}, - \ 'command': '%e -c', - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - Assert Start(bufnr('')) - call ale#test#FlushJobs() - call AssertInitSuccess('foo', 'foo', 'foobar', '/foo/bar', ale#Escape('foo') . ' -c', bufnr('')) - -Execute(Deferred commands should be handled correctly): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'stdio', - \ 'executable': 'foo', - \ 'command': {b -> ale#command#Run(b, 'echo', {-> '%e -c'})}, - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - Assert Start(bufnr('')) - call ale#test#FlushJobs() - call AssertInitSuccess('foo', 'foo', 'foobar', '/foo/bar', ale#Escape('foo') . ' -c', bufnr('')) - -Execute(Deferred addresses should be handled correctly): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': {b -> ale#command#Run(b, 'echo', {-> 'localhost:1234'})}, - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - Assert Start(bufnr('')) - call ale#test#FlushJobs() - call AssertInitSuccess('foo', 'localhost:1234', 'foobar', '/foo/bar', '', bufnr('')) - -Execute(Servers that have crashed should be restarted): - call ale#lsp#Register('foo', '/foo/bar', {}) - call extend(ale#lsp#GetConnections()['foo:/foo/bar'], {'initialized': 1}) - - " Starting the program again should reset initialized to `0`. - call ale#lsp#StartProgram('foo:/foo/bar', 'foobar', 'foobar --start') - - AssertEqual 0, ale#lsp#GetConnections()['foo:/foo/bar']['initialized'] - AssertEqual ['initialize'], map(PopMessages(), 'v:val[''method'']') - -Execute(Current LSP buffer should receive ALELSPStarted): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': 'foo', - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - augroup VaderTest - autocmd! - autocmd User ALELSPStarted let g:lsp_started = 1 - augroup END - - Assert Start(bufnr('')) - call AssertInitSuccess('foo', 'foo', 'foobar', '/foo/bar', '', bufnr('')) - AssertEqual g:lsp_started, 1 - -Execute(Target LSP buffer should receive ALELSPStarted): - call ale#linter#Define('foobar', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': 'foo', - \ 'project_root': '/foo/bar', - \ 'initialization_options': {}, - \}) - - augroup VaderTest - autocmd! - autocmd User ALELSPStarted let g:lsp_started = 1 - augroup END - - let buffer = bufnr('') - - enew! - Assert Start(buffer) - call AssertInitSuccess('foo', 'foo', 'foobar', '/foo/bar', '', buffer) - execute 'buffer' . buffer - - AssertEqual g:lsp_started, 1 diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_other_initialize_message_handling.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_other_initialize_message_handling.vader deleted file mode 100644 index 6711c746..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_other_initialize_message_handling.vader +++ /dev/null @@ -1,216 +0,0 @@ -Before: - runtime autoload/ale/lsp.vim - - let g:message_list = [] - let b:conn = { - \ 'id': 1, - \ 'is_tsserver': 0, - \ 'data': '', - \ 'root': '/foo/bar', - \ 'open_documents': {}, - \ 'initialized': 0, - \ 'init_request_id': 0, - \ 'init_options': {}, - \ 'config': {}, - \ 'callback_list': [], - \ 'message_queue': [], - \ 'init_queue': [], - \ 'capabilities': { - \ 'hover': 0, - \ 'rename': 0, - \ 'references': 0, - \ 'completion': 0, - \ 'completion_trigger_characters': [], - \ 'definition': 0, - \ 'symbol_search': 0, - \ 'code_actions': 0, - \ }, - \} - - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 42 - endfunction - -After: - unlet! b:conn - unlet! g:message_list - - runtime autoload/ale/lsp.vim - -Execute(Messages with no method and capabilities should initialize projects): - call ale#lsp#HandleInitResponse(b:conn, { - \ 'result': {'capabilities': {}}, - \}) - - AssertEqual 1, b:conn.initialized - AssertEqual [[1, 'initialized', {}]], g:message_list - -Execute(Other messages should not initialize projects): - call ale#lsp#HandleInitResponse(b:conn, {'method': 'lolwat'}) - - AssertEqual 0, b:conn.initialized - AssertEqual [], g:message_list - - call ale#lsp#HandleInitResponse(b:conn, {'result': {'x': {}}}) - - AssertEqual 0, b:conn.initialized - AssertEqual [], g:message_list - -Execute(Capabilities should bet set up correctly): - call ale#lsp#HandleInitResponse(b:conn, { - \ 'jsonrpc': '2.0', - \ 'id': 1, - \ 'result': { - \ 'capabilities': { - \ 'renameProvider': v:true, - \ 'executeCommandProvider': { - \ 'commands': [], - \ }, - \ 'hoverProvider': v:true, - \ 'documentSymbolProvider': v:true, - \ 'documentRangeFormattingProvider': v:true, - \ 'codeLensProvider': { - \ 'resolveProvider': v:false - \ }, - \ 'referencesProvider': v:true, - \ 'textDocumentSync': 2, - \ 'documentFormattingProvider': v:true, - \ 'codeActionProvider': v:true, - \ 'signatureHelpProvider': { - \ 'triggerCharacters': ['(', ','], - \ }, - \ 'completionProvider': { - \ 'triggerCharacters': ['.'], - \ 'resolveProvider': v:false - \ }, - \ 'definitionProvider': v:true, - \ 'experimental': {}, - \ 'documentHighlightProvider': v:true, - \ 'workspaceSymbolProvider': v:true - \ }, - \ }, - \}) - - AssertEqual 1, b:conn.initialized - AssertEqual - \ { - \ 'completion_trigger_characters': ['.'], - \ 'completion': 1, - \ 'references': 1, - \ 'hover': 1, - \ 'definition': 1, - \ 'symbol_search': 1, - \ 'rename': 1, - \ 'code_actions': 1, - \ }, - \ b:conn.capabilities - AssertEqual [[1, 'initialized', {}]], g:message_list - -Execute(Disabled capabilities should be recognised correctly): - call ale#lsp#HandleInitResponse(b:conn, { - \ 'jsonrpc': '2.0', - \ 'id': 1, - \ 'result': { - \ 'capabilities': { - \ 'renameProvider': v:false, - \ 'executeCommandProvider': { - \ 'commands': [], - \ }, - \ 'hoverProvider': v:false, - \ 'documentSymbolProvider': v:true, - \ 'documentRangeFormattingProvider': v:true, - \ 'codeLensProvider': { - \ 'resolveProvider': v:false - \ }, - \ 'referencesProvider': v:false, - \ 'textDocumentSync': 2, - \ 'documentFormattingProvider': v:true, - \ 'codeActionProvider': v:false, - \ 'signatureHelpProvider': { - \ 'triggerCharacters': ['(', ','], - \ }, - \ 'definitionProvider': v:false, - \ 'experimental': {}, - \ 'documentHighlightProvider': v:true, - \ }, - \ }, - \}) - - AssertEqual 1, b:conn.initialized - AssertEqual - \ { - \ 'completion_trigger_characters': [], - \ 'completion': 0, - \ 'references': 0, - \ 'hover': 0, - \ 'definition': 0, - \ 'symbol_search': 0, - \ 'rename': 0, - \ 'code_actions': 0, - \ }, - \ b:conn.capabilities - AssertEqual [[1, 'initialized', {}]], g:message_list - -Execute(Capabilities should be enabled when send as Dictionaries): - call ale#lsp#HandleInitResponse(b:conn, { - \ 'jsonrpc': '2.0', - \ 'id': 1, - \ 'result': { - \ 'capabilities': { - \ 'renameProvider': {}, - \ 'executeCommandProvider': { - \ 'commands': [], - \ }, - \ 'hoverProvider': {}, - \ 'documentSymbolProvider': v:true, - \ 'documentRangeFormattingProvider': v:true, - \ 'codeLensProvider': { - \ 'resolveProvider': v:false - \ }, - \ 'completionProvider': { - \ 'triggerCharacters': ['.'], - \ 'resolveProvider': v:false - \ }, - \ 'referencesProvider': {}, - \ 'textDocumentSync': 2, - \ 'documentFormattingProvider': v:true, - \ 'codeActionProvider': v:true, - \ 'signatureHelpProvider': { - \ 'triggerCharacters': ['(', ','], - \ }, - \ 'definitionProvider': {}, - \ 'typeDefinitionProvider': {}, - \ 'implementationProvider': {}, - \ 'experimental': {}, - \ 'documentHighlightProvider': v:true, - \ 'workspaceSymbolProvider': {} - \ }, - \ }, - \}) - - AssertEqual 1, b:conn.initialized - AssertEqual - \ { - \ 'completion_trigger_characters': ['.'], - \ 'completion': 1, - \ 'references': 1, - \ 'hover': 1, - \ 'definition': 1, - \ 'typeDefinition': 1, - \ 'implementation': 1, - \ 'symbol_search': 1, - \ 'rename': 1, - \ 'code_actions': 1, - \ }, - \ b:conn.capabilities - AssertEqual [[1, 'initialized', {}]], g:message_list - -Execute(Results that are not dictionaries should be handled correctly): - call ale#lsp#HandleInitResponse(b:conn, { - \ 'jsonrpc': '2.0', - \ 'id': 1, - \ 'result': v:null, - \}) - AssertEqual [], g:message_list diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_read_lsp_diagnostics.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_read_lsp_diagnostics.vader deleted file mode 100644 index 61ffc73f..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_read_lsp_diagnostics.vader +++ /dev/null @@ -1,257 +0,0 @@ -Before: - function Range(start_line, start_char, end_line, end_char) abort - return { - \ 'start': {'line': a:start_line, 'character': a:start_char}, - \ 'end': {'line': a:end_line, 'character': a:end_char}, - \} - endfunction - -After: - delfunction Range - -Execute(ale#lsp#response#ReadDiagnostics() should handle errors): - AssertEqual [ - \ { - \ 'type': 'E', - \ 'text': 'Something went wrong!', - \ 'lnum': 3, - \ 'col': 11, - \ 'end_lnum': 5, - \ 'end_col': 15, - \ 'code': 'some-error', - \ } - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'severity': 1, - \ 'range': Range(2, 10, 4, 15), - \ 'code': 'some-error', - \ 'message': 'Something went wrong!', - \ }, - \ ]}}) - -Execute(ale#lsp#response#ReadDiagnostics() should handle warnings): - AssertEqual [ - \ { - \ 'type': 'W', - \ 'text': 'Something went wrong!', - \ 'lnum': 2, - \ 'col': 4, - \ 'end_lnum': 2, - \ 'end_col': 3, - \ 'code': 'some-warning', - \ } - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'severity': 2, - \ 'range': Range(1, 3, 1, 3), - \ 'code': 'some-warning', - \ 'message': 'Something went wrong!', - \ }, - \ ]}}) - -Execute(ale#lsp#response#ReadDiagnostics() should treat messages with missing severity as errors): - AssertEqual [ - \ { - \ 'type': 'E', - \ 'text': 'Something went wrong!', - \ 'lnum': 3, - \ 'col': 11, - \ 'end_lnum': 5, - \ 'end_col': 15, - \ 'code': 'some-error', - \ } - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'range': Range(2, 10, 4, 15), - \ 'code': 'some-error', - \ 'message': 'Something went wrong!', - \ }, - \ ]}}) - -Execute(ale#lsp#response#ReadDiagnostics() should handle messages without codes): - AssertEqual [ - \ { - \ 'type': 'E', - \ 'text': 'Something went wrong!', - \ 'lnum': 3, - \ 'col': 11, - \ 'end_lnum': 5, - \ 'end_col': 15, - \ } - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'range': Range(2, 10, 4, 15), - \ 'message': 'Something went wrong!', - \ }, - \ ]}}) - -Execute(ale#lsp#response#ReadDiagnostics() should include sources in detail): - AssertEqual [ - \ { - \ 'type': 'E', - \ 'text': 'Something went wrong!', - \ 'detail': '[tslint] Something went wrong!', - \ 'lnum': 10, - \ 'col': 15, - \ 'end_lnum': 12, - \ 'end_col': 22, - \ } - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'range': Range(9, 14, 11, 22), - \ 'message': 'Something went wrong!', - \ 'source': 'tslint', - \ } - \ ]}}) - -Execute(ale#lsp#response#ReadDiagnostics() should keep detail with line breaks but replace with spaces in text): - AssertEqual [ - \ { - \ 'type': 'E', - \ 'text': 'cannot borrow `cap` as mutable more than once at a time mutable borrow starts here in previous iteration of loop', - \ 'detail': "[rustc] cannot borrow `cap` as mutable\r\nmore than once at a time\n\nmutable borrow starts here\rin previous iteration of loop", - \ 'lnum': 10, - \ 'col': 15, - \ 'end_lnum': 12, - \ 'end_col': 22, - \ } - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'range': Range(9, 14, 11, 22), - \ 'message': "cannot borrow `cap` as mutable\r\nmore than once at a time\n\nmutable borrow starts here\rin previous iteration of loop", - \ 'source': 'rustc', - \ } - \ ]}}) - -Execute(ale#lsp#response#ReadDiagnostics() should consider -1 to be a meaningless code): - AssertEqual [ - \ { - \ 'type': 'E', - \ 'text': 'Something went wrong!', - \ 'lnum': 3, - \ 'col': 11, - \ 'end_lnum': 5, - \ 'end_col': 15, - \ } - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'range': Range(2, 10, 4, 15), - \ 'message': 'Something went wrong!', - \ 'code': -1, - \ }, - \ ]}}) - -Execute(ale#lsp#response#ReadDiagnostics() should handle multiple messages): - AssertEqual [ - \ { - \ 'type': 'E', - \ 'text': 'Something went wrong!', - \ 'lnum': 1, - \ 'col': 3, - \ 'end_lnum': 1, - \ 'end_col': 2, - \ }, - \ { - \ 'type': 'W', - \ 'text': 'A warning', - \ 'lnum': 2, - \ 'col': 5, - \ 'end_lnum': 2, - \ 'end_col': 4, - \ }, - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'range': Range(0, 2, 0, 2), - \ 'message': 'Something went wrong!', - \ }, - \ { - \ 'severity': 2, - \ 'range': Range(1, 4, 1, 4), - \ 'message': 'A warning', - \ }, - \ ]}}) - -Execute(ale#lsp#response#ReadDiagnostics() should use relatedInformation for detail): - AssertEqual [ - \ { - \ 'type': 'E', - \ 'text': 'Something went wrong!', - \ 'lnum': 1, - \ 'col': 3, - \ 'end_lnum': 1, - \ 'end_col': 2, - \ 'detail': "Something went wrong!\n/tmp/someotherfile.txt:43:80:\n\tmight be this" - \ } - \ ], - \ ale#lsp#response#ReadDiagnostics({'params': {'uri': 'filename.ts', 'diagnostics': [ - \ { - \ 'range': Range(0, 2, 0, 2), - \ 'message': 'Something went wrong!', - \ 'relatedInformation': [{ - \ 'message': 'might be this', - \ 'location': { - \ 'uri': 'file:///tmp/someotherfile.txt', - \ 'range': { - \ 'start': { 'line': 42, 'character': 79 }, - \ 'end': { 'line': 142, 'character': 179}, - \ } - \ } - \ }] - \ } - \ ]}}) - -Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle tsserver responses): - AssertEqual - \ [ - \ { - \ 'type': 'E', - \ 'nr': 2365, - \ 'code': '2365', - \ 'text': 'Operator ''''+'''' cannot be applied to types ''''3'''' and ''''{}''''.', - \ 'lnum': 1, - \ 'col': 11, - \ 'end_lnum': 1, - \ 'end_col': 16, - \ }, - \ ], - \ ale#lsp#response#ReadTSServerDiagnostics({"seq":0,"type":"event","event":"semanticDiag","body":{"file":"/bar/foo.ts","diagnostics":[{"start":{"line":1,"offset":11},"end":{"line":1,"offset":17},"text":"Operator ''+'' cannot be applied to types ''3'' and ''{}''.","code":2365}]}}) - -Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle warnings from tsserver): - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'col': 3, - \ 'nr': 2515, - \ 'code': '2515', - \ 'end_lnum': 27, - \ 'type': 'W', - \ 'end_col': 13, - \ 'text': 'Calls to ''console.log'' are not allowed. (no-console)', - \ } - \ ], - \ ale#lsp#response#ReadTSServerDiagnostics({"seq":0,"type":"event","event":"semanticDiag","body":{"file":"","diagnostics":[{"start":{"line":27,"offset":3},"end":{"line":27,"offset":14},"text":"Calls to 'console.log' are not allowed. (no-console)","code":2515,"category":"warning","source":"tslint"}]}}) - -Execute(ale#lsp#response#ReadTSServerDiagnostics() should handle suggestions from tsserver): - AssertEqual - \ [ - \ { - \ 'lnum': 27, - \ 'col': 3, - \ 'nr': 2515, - \ 'code': '2515', - \ 'end_lnum': 27, - \ 'type': 'I', - \ 'end_col': 13, - \ 'text': 'Some info', - \ } - \ ], - \ ale#lsp#response#ReadTSServerDiagnostics({"seq":0,"type":"event","event":"semanticDiag","body":{"file":"","diagnostics":[{"start":{"line":27,"offset":3},"end":{"line":27,"offset":14},"text":"Some info","code":2515,"category":"suggestion","source":"tslint"}]}}) diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_reset_lsp.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_reset_lsp.vader deleted file mode 100644 index 310b3d62..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_reset_lsp.vader +++ /dev/null @@ -1,98 +0,0 @@ -Before: - Save g:ale_enabled - Save g:ale_set_signs - Save g:ale_set_quickfix - Save g:ale_set_loclist - Save g:ale_set_highlights - Save g:ale_echo_cursor - - let g:ale_enabled = 0 - let g:ale_set_signs = 0 - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 0 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 0 - - function EmptyString() abort - return '' - endfunction - - call ale#engine#InitBufferInfo(bufnr('')) - " Call this function first, so we can be sure the module is loaded before we - " check if it exists. - call ale#lsp_linter#ClearLSPData() - - call ale#linter#Define('testft', { - \ 'name': 'lsplinter', - \ 'lsp': 'tsserver', - \ 'executable': function('EmptyString'), - \ 'command': function('EmptyString'), - \ 'project_root': function('EmptyString'), - \ 'language': function('EmptyString'), - \}) - - call ale#linter#Define('testft', { - \ 'name': 'otherlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd': 'true', - \ 'command': 'true', - \ 'read_buffer': 0, - \}) - -After: - Restore - - unlet! b:ale_save_event_fired - - delfunction EmptyString - call ale#linter#Reset() - -Given testft(Some file with an imaginary filetype): -Execute(ALEStopAllLSPs should clear the loclist): - let g:ale_buffer_info[bufnr('')].loclist = [ - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 0, - \ 'bufnr': bufnr(''), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'lsplinter', - \ }, - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 0, - \ 'bufnr': bufnr(''), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'otherlinter', - \ }, - \] - let g:ale_buffer_info[bufnr('')].active_linter_list = [ - \ {'name': 'lsplinter'}, - \ {'name': 'otherlinter'}, - \] - - ALEStopAllLSPs - - " The loclist should be updated. - AssertEqual g:ale_buffer_info[bufnr('')].loclist, [ - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 0, - \ 'bufnr': bufnr(''), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'otherlinter', - \ }, - \] - - " The LSP linter should be removed from the active linter list. - AssertEqual - \ ['otherlinter'], - \ map(copy(g:ale_buffer_info[bufnr('')].active_linter_list), 'v:val.name') diff --git a/dotfiles/.vim/plugged/ale/test/lsp/test_update_config.vader b/dotfiles/.vim/plugged/ale/test/lsp/test_update_config.vader deleted file mode 100644 index 698477ec..00000000 --- a/dotfiles/.vim/plugged/ale/test/lsp/test_update_config.vader +++ /dev/null @@ -1,21 +0,0 @@ -Before: - runtime autoload/ale/lsp.vim - - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - - " Stub out this function, so we test updating configs. - function! ale#lsp#Send(conn_id, message) abort - endfunction - -After: - Restore - - unlet! g:conn_id - - runtime autoload/ale/lsp.vim - -Execute(Only send updates when the configuration dictionary changes): - AssertEqual 0, ale#lsp#UpdateConfig(g:conn_id, bufnr(''), {}) - AssertEqual 1, ale#lsp#UpdateConfig(g:conn_id, bufnr(''), {'a': 1}) - AssertEqual 0, ale#lsp#UpdateConfig(g:conn_id, bufnr(''), {'a': 1}) - AssertEqual 1, ale#lsp#UpdateConfig(g:conn_id, bufnr(''), {}) diff --git a/dotfiles/.vim/plugged/ale/test/python/test_deoplete_source.py b/dotfiles/.vim/plugged/ale/test/python/test_deoplete_source.py deleted file mode 100644 index 74a42dc2..00000000 --- a/dotfiles/.vim/plugged/ale/test/python/test_deoplete_source.py +++ /dev/null @@ -1,121 +0,0 @@ -import unittest -import imp - -ale_module = imp.load_source( - 'deoplete.sources.ale', - '/testplugin/rplugin/python3/deoplete/sources/ale.py', -) - - -class VimMock(object): - def __init__(self, call_list, call_results, commands): - self.__call_list = call_list - self.__call_results = call_results - - self.__commands = commands - - def call(self, function, *args): - self.__call_list.append((function, args)) - - return self.__call_results.get(function, 0) - - def command(self, command): - self.__commands.append(command) - - -class DeopleteSourceTest(unittest.TestCase): - def setUp(self): - super(DeopleteSourceTest, self).setUp() - - self.call_list = [] - self.call_results = {'ale#completion#CanProvideCompletions': 1} - self.commands = [] - self.source = ale_module.Source('vim') - self.source.vim = VimMock( - self.call_list, self.call_results, self.commands) - - def test_attributes(self): - """ - Check all of the attributes we set. - """ - attributes = dict( - (key, getattr(self.source, key)) - for key in - dir(self.source) - if not key.startswith('__') - and key != 'vim' - and not hasattr(getattr(self.source, key), '__self__') - ) - - self.assertEqual(attributes, { - 'input_patterns': { - '_': r'\.\w*$', - 'rust': r'(\.|::)\w*$', - 'typescript': r'(\.|\'|")\w*$', - 'cpp': r'(\.|::|->)\w*$', - 'c': r'(\.|->)\w*$', - }, - 'is_bytepos': True, - 'is_volatile': True, - 'mark': '[L]', - 'min_pattern_length': 1, - 'name': 'ale', - 'rank': 1000, - }) - - def test_complete_position(self): - self.call_results['ale#completion#GetCompletionPositionForDeoplete'] = 2 - context = {'input': 'foo'} - - self.assertEqual(self.source.get_complete_position(context), 2) - self.assertEqual(self.call_list, [ - ('ale#completion#GetCompletionPositionForDeoplete', ('foo',)), - ]) - - def test_request_completion_results(self): - context = {'event': 'TextChangedI', 'is_refresh': True} - - self.assertEqual(self.source.gather_candidates(context), []) - self.assertEqual(self.call_list, [ - ('ale#completion#CanProvideCompletions', ()), - ]) - self.assertEqual(self.commands, [ - "call ale#completion#GetCompletions('ale-callback', " + \ - "{'callback': {completions -> deoplete#auto_complete() }})" - ]) - - def test_request_completion_results_from_buffer_without_providers(self): - self.call_results['ale#completion#CanProvideCompletions'] = 0 - context = {'event': 'TextChangedI', 'is_refresh': True} - - self.assertIsNone(self.source.gather_candidates(context), []) - self.assertEqual(self.call_list, [ - ('ale#completion#CanProvideCompletions', ()), - ]) - - def test_async_event(self): - context = {'event': 'Async', 'is_refresh': True} - self.call_results['ale#completion#GetCompletionResult'] = [ - { - 'word': 'foobar', - 'kind': 'v', - 'icase': 1, - 'menu': '', - 'info': '', - }, - ] - - self.assertEqual(self.source.gather_candidates(context), [ - { - 'word': 'foobar', - 'kind': 'v', - 'icase': 1, - 'menu': '', - 'info': '', - }, - ]) - - self.assertEqual(self.call_list, [ - ('ale#completion#CanProvideCompletions', ()), - ('ale#completion#GetCompletionResult', ()), - ]) diff --git a/dotfiles/.vim/plugged/ale/test/script/block-padding-checker b/dotfiles/.vim/plugged/ale/test/script/block-padding-checker deleted file mode 100755 index 2feab6d0..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/block-padding-checker +++ /dev/null @@ -1,145 +0,0 @@ -#!/usr/bin/env python -""" -This script checks for missing or forbidden blank lines before or after -particular Vim commands. This script ensures that VimL scripts are padded -correctly, so they are easier to read. -""" - -import sys -import re - -INDENTATION_RE = re.compile(r'^ *') -COMMENT_LINE_RE = re.compile(r'^ *"') -COMMAND_RE = re.compile(r'^ *([a-zA-Z\\]+)') -OPERATOR_END_RE = re.compile(r'(&&|\|\||\+|-|\*\| /)$') - -START_BLOCKS = set(['if', 'for', 'while', 'try', 'function']) -END_BLOCKS = set(['endif', 'endfor', 'endwhile', 'endtry', 'endfunction']) -MIDDLE_BLOCKS = set(['else', 'elseif', 'catch', 'finally']) -TERMINATORS = set(['return', 'throw']) - -WHITESPACE_BEFORE_SET = START_BLOCKS | TERMINATORS -WHITESPACE_FORBIDDEN_BEFORE_SET = END_BLOCKS | MIDDLE_BLOCKS -WHITESPACE_AFTER_SET = END_BLOCKS -WHITESPACE_FORBIDDEN_AFTER_SET = START_BLOCKS | MIDDLE_BLOCKS -SAME_INDENTATION_SET = set(['\\']) - - -def remove_comment_lines(line_iter): - for line_number, line in enumerate(line_iter, 1): - if not COMMENT_LINE_RE.match(line): - yield (line_number, line) - - -def check_lines(line_iter): - previous_indentation_level = None - previous_command = None - previous_line_blank = False - - for line_number, line in remove_comment_lines(line_iter): - if len(line) == 0: - # Check for commands where we shouldn't have blank lines after - # them, like `else` or the start of blocks like `function`. - if ( - previous_command is not None - and previous_command in WHITESPACE_FORBIDDEN_AFTER_SET - ): - yield ( - line_number, - 'Blank line forbidden after `%s`' % (previous_command,) - ) - - previous_line_blank = True - previous_command = None - else: - indentation_level = INDENTATION_RE.match(line).end() - command_match = COMMAND_RE.match(line) - - if command_match: - command = command_match.group(1) - - if ( - command in SAME_INDENTATION_SET - and previous_indentation_level is not None - and indentation_level != previous_indentation_level - ): - yield ( - line_number, - 'Line continuation should match previous indentation' - ) - - if ( - previous_indentation_level is not None - and indentation_level != previous_indentation_level - and abs(indentation_level - previous_indentation_level) != 4 # noqa - ): - yield ( - line_number, - 'Indentation should be 4 spaces' - ) - - # Check for commands requiring blank lines before them, if they - # aren't at the start of a block. - if ( - command in WHITESPACE_BEFORE_SET - and previous_indentation_level is not None - and indentation_level == previous_indentation_level - and previous_line_blank is False - ): - yield ( - line_number, - 'Blank line required before `%s`' % (command,) - ) - - # Check for commands where we shouldn't have blank lines before - # them, like `else` or the end of blocks like `endfunction`. - if ( - command in WHITESPACE_FORBIDDEN_BEFORE_SET - and previous_line_blank is True - ): - yield ( - line_number - 1, - 'Blank line forbidden before `%s`' % (command,) - ) - - # Check for commands requiring blank lines after them, if they - # aren't at the end of a block. - if ( - previous_command is not None - and previous_command in WHITESPACE_AFTER_SET - and previous_indentation_level is not None - and indentation_level == previous_indentation_level - and previous_line_blank is False - ): - yield ( - line_number - 1, - 'Blank line required after `%s`' % (command,) - ) - - previous_command = command - previous_line_blank = False - previous_indentation_level = indentation_level - - if OPERATOR_END_RE.search(line): - yield ( - line_number, - 'Put operators at the start of lines instead' - ) - - -def main(): - status = 0 - - for filename in sys.argv[1:]: - with open(filename) as vim_file: - line_iter = (line.rstrip() for line in vim_file) - - for line_number, message in check_lines(line_iter): - print('%s:%d %s' % (filename, line_number, message)) - status = 1 - - sys.exit(status) - - -if __name__ == "__main__": - main() diff --git a/dotfiles/.vim/plugged/ale/test/script/check-duplicate-tags b/dotfiles/.vim/plugged/ale/test/script/check-duplicate-tags deleted file mode 100755 index ec1de788..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/check-duplicate-tags +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -set -e - -grep --exclude=tags -roh '\*.*\*$' doc | sort | uniq -d diff --git a/dotfiles/.vim/plugged/ale/test/script/check-supported-tools-tables b/dotfiles/.vim/plugged/ale/test/script/check-supported-tools-tables deleted file mode 100755 index d238e77f..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/check-supported-tools-tables +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -u - -# This script compares the table of supported tools in both supported-tools.md -# (for GitHub) and doc/ale-supported-languages-and-tools.txt (for vim), so we -# can complain if they don't match up. - -doc_file="$(mktemp -t doc.XXXXXXXX)" -doc_sorted_file="$(mktemp -t doc-sorted.XXXXXXXX)" -readme_file="$(mktemp -t readme.XXXXXXXX)" - -while read -r; do - if [[ "$REPLY" =~ ^! ]]; then - language="${REPLY/!/}" - else - echo "$language - $REPLY" - fi -done < <( - grep '^\*\|^ *\*' doc/ale-supported-languages-and-tools.txt \ - | sed -e '1,2d' \ - | sed 's/^\* */!/' \ - | sed -E 's/^ *\* *|!!|\^|\(.*\)|`//g' \ - | sed 's/ *$//' -) > "$doc_file" - -while read -r; do - if [[ "$REPLY" =~ ^! ]]; then - language="${REPLY/!/}" - else - echo "$language - $REPLY" - fi -done < <( - grep '^\*\|^ *\*' supported-tools.md \ - | sed 's/^\* */!/' \ - | sed -E 's/^ *\* *|:floppy_disk:|:warning:|\(.*\)|\[|\].*|-n flag//g' \ - | sed 's/ *$//' -) > "$readme_file" - -exit_code=0 - -# Sort the tools ignoring case, and complain when things are out of order. -LC_ALL=en_US.UTF-8 sort -f -k1,2 "$doc_file" -o "$doc_sorted_file" - -diff -U0 "$doc_sorted_file" "$doc_file" || exit_code=$? - -if ((exit_code)); then - echo - echo "The supported tools list isn't sorted properly" - echo -fi - -diff -U0 "$readme_file" "$doc_file" || exit_code=$? - -rm "$doc_file" -rm "$doc_sorted_file" -rm "$readme_file" - -exit "$exit_code" diff --git a/dotfiles/.vim/plugged/ale/test/script/check-tag-alignment b/dotfiles/.vim/plugged/ale/test/script/check-tag-alignment deleted file mode 100755 index d41db160..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/check-tag-alignment +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -exit_code=0 - -# Documentation tags need to be aligned to the right margin, so look for -# tags which aren't at the right margin. -grep ' \*[^*]\+\*$' doc/ -r \ - | awk '{ sep = index($0, ":"); if (length(substr($0, sep + 1 )) < 79) { print } }' \ - | grep . && exit_code=1 - -exit $exit_code diff --git a/dotfiles/.vim/plugged/ale/test/script/check-tag-references b/dotfiles/.vim/plugged/ale/test/script/check-tag-references deleted file mode 100755 index 45e741fb..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/check-tag-references +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -e - -exit_code=0 -tag_regex='[gb]\?:\?\(ale\|ALE\)[a-zA-Z_\-]\+' - -tags="$(mktemp -t tags.XXXXXXXX)" -refs="$(mktemp -t refs.XXXXXXXX)" -# Grep for tags and references, and complain if we find a reference without -# a tag for the reference. Only our tags will be included. -grep --exclude=tags -roh "\\*$tag_regex\\*" doc | sed 's/*//g' | sort -u > "$tags" -grep --exclude=tags -roh "|$tag_regex|" doc | sed 's/|//g' | sort -u > "$refs" - -exit_code=0 - -if ! [[ $(comm -23 $refs $tags | wc -l) -eq 0 ]]; then - exit_code=1 -fi - -rm "$tags" -rm "$refs" diff --git a/dotfiles/.vim/plugged/ale/test/script/check-toc b/dotfiles/.vim/plugged/ale/test/script/check-toc deleted file mode 100755 index f3f8a9ea..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/check-toc +++ /dev/null @@ -1,90 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -u - -# This script checks that the table of contents for the supported tools is -# sorted, and that the table matches the files. - -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_section_start_line" + "$toc_start_offset" - 1)" -toc_section_size="$( \ - tail -n +"$toc_start_line" doc/ale.txt \ - | grep -m1 -n '^===*$' \ - | sed 's/\([0-9]*\).*/\1/' \ -)" -# shellcheck disable=SC2003 -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)" -tagged_toc_file="$(mktemp -t ale.txt.XXXXXXXX)" -sorted_toc_file="$(mktemp -t sorted-ale.txt.XXXXXXXX)" - -sed -n "$toc_start_line,$toc_end_line"p doc/ale.txt \ - | sed 's/^ \( *[^.][^.]*\)\.\.*|\(..*\)|/\1, \2/' \ - > "$toc_file" - -# Get all of the doc files in a natural sorted order. -doc_files="$(/usr/bin/env ls -1v doc | grep '^ale-' | sed 's/^/doc\//' | paste -sd ' ' -)" - -# shellcheck disable=SC2086 -grep -h '\*ale-.*-options\|^[a-z].*\*ale-.*\*$' $doc_files \ - | sed 's/^/ /' \ - | sed 's/ALE Shell Integration/ALE sh Integration/' \ - | sed 's/ALE BibTeX Integration/ALE bib Integration/' \ - | sed 's/ ALE \(.*\) Integration/\1/' \ - | sed 's/ *\*\(..*\)\*$/, \1/' \ - | tr '[:upper:]' '[:lower:]' \ - | sed 's/objective-c/objc/' \ - | sed 's/c++/cpp/' \ - > "$heading_file" - -exit_code=0 -in_section=0 -section_index=0 - -# Prefix numbers to table of contents entries so that sections aren't mixed up -# with sub-sections when they are sorted. -while read -r; do - if [[ "$REPLY" =~ ^\ ]]; then - if ! ((in_section)); then - let section_index='section_index + 1' - in_section=1 - fi - else - if ((in_section)); then - let section_index='section_index + 1' - in_section=0 - fi - fi - - echo "$section_index $REPLY" >> "$tagged_toc_file" -done < "$toc_file" - -# Sort the sections and sub-sections and remove the tags. -sort -sn "$tagged_toc_file" | sed 's/[0-9][0-9]* //' > "$sorted_toc_file" - -echo 'Check for bad ToC sorting:' -echo -diff -U2 "$sorted_toc_file" "$toc_file" || exit_code=$? - -echo 'Check for mismatched ToC and headings:' -echo -diff -U3 "$toc_file" "$heading_file" || exit_code=$? - -rm "$toc_file" -rm "$heading_file" -rm "$tagged_toc_file" -rm "$sorted_toc_file" - -exit "$exit_code" diff --git a/dotfiles/.vim/plugged/ale/test/script/custom-checks b/dotfiles/.vim/plugged/ale/test/script/custom-checks deleted file mode 100755 index 83afb28c..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/custom-checks +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -u - -exit_code=0 -docker_flags=(--rm -v "$PWD:/testplugin" -v "$PWD/test:/home" -w /testplugin "$DOCKER_RUN_IMAGE") - -echo '========================================' -echo 'Running custom linting rules' -echo '========================================' -echo 'Custom warnings/errors follow:' -echo - -set -o pipefail -docker run "${docker_flags[@]}" test/script/custom-linting-rules . || exit_code=$? -set +o pipefail -echo - -echo '========================================' -echo 'Checking for duplicate tags' -echo '========================================' -echo 'Duplicate tags follow:' -echo - -set -o pipefail -docker run "${docker_flags[@]}" test/script/check-duplicate-tags . || exit_code=$? -set +o pipefail -echo - -echo '========================================' -echo 'Checking for invalid tag references' -echo '========================================' -echo 'Invalid tag references tags follow:' -echo - -set -o pipefail -docker run "${docker_flags[@]}" test/script/check-tag-references || exit_code=$? -set +o pipefail - -echo '========================================' -echo 'diff supported-tools.md and doc/ale-supported-languages-and-tools.txt tables' -echo '========================================' -echo 'Differences follow:' -echo - -set -o pipefail -docker run "${docker_flags[@]}" test/script/check-supported-tools-tables || exit_code=$? -set +o pipefail - -echo '========================================' -echo 'Look for badly aligned doc tags' -echo '========================================' -echo 'Badly aligned tags follow:' -echo - -set -o pipefail -docker run "${docker_flags[@]}" test/script/check-tag-alignment || exit_code=$? -set +o pipefail - -echo '========================================' -echo 'Look for table of contents issues' -echo '========================================' -echo - -set -o pipefail -docker run "${docker_flags[@]}" test/script/check-toc || exit_code=$? -set +o pipefail - -echo '========================================' -echo 'Check Python code' -echo '========================================' -echo - -docker run --rm -v "$PWD:/testplugin" "$DOCKER_RUN_IMAGE" \ - python -W ignore -m unittest discover /testplugin/test/python \ - || exit_code=$? -echo - -exit $exit_code diff --git a/dotfiles/.vim/plugged/ale/test/script/custom-linting-rules b/dotfiles/.vim/plugged/ale/test/script/custom-linting-rules deleted file mode 100755 index 486a0db7..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/custom-linting-rules +++ /dev/null @@ -1,166 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -u - -# This Bash script implements custom sanity checks for scripts beyond what -# Vint covers, which are easy to check with regex. - -# A flag for automatically fixing some errors. -FIX_ERRORS=0 -RETURN_CODE=0 - -function print_help() { - echo "Usage: test/script/custom-linting-rules [--fix] [DIRECTORY]" 1>&2 - echo 1>&2 - echo " -h, --help Print this help text" 1>&2 - echo " --fix Automatically fix some errors" 1>&2 - exit 1 -} - -while [ $# -ne 0 ]; do - case $1 in - -h) ;& --help) - print_help - ;; - --fix) - FIX_ERRORS=1 - shift - ;; - --) - shift - break - ;; - -?*) - echo "Invalid argument: $1" 1>&2 - exit 1 - ;; - *) - break - ;; - esac -done - -if [ $# -eq 0 ] || [ -z "$1" ]; then - print_help -fi - -shopt -s globstar - -directories=("$@") - -check_errors() { - regex="$1" - message="$2" - include_arg='' - exclude_arg='' - - if [ $# -gt 2 ]; then - include_arg="--include $3" - fi - - if [ $# -gt 3 ]; then - shift - shift - shift - - while (( "$#" )); do - exclude_arg="$exclude_arg --exclude $1" - shift - done - fi - - for directory in "${directories[@]}"; do - # shellcheck disable=SC2086 - while read -r; do - line=$(cut -d ":" -f2 <<< "$REPLY") - - if ((line > 1)); then - line=$((line - 1)) - file=$(cut -d ":" -f1 <<< "$REPLY") - - if sed -n "${line},${line}p" $file | grep -q '^ *" *no-custom-checks$'; then - continue - fi - fi - - RETURN_CODE=1 - echo "$REPLY $message" - done < <(grep -H -n "$regex" $include_arg $exclude_arg "$directory"/**/*.vim \ - | grep -v 'no-custom-checks' \ - | grep -o '^[^:]\+:[0-9]\+' \ - | sed 's:^\./::') - done -} - -if (( FIX_ERRORS )); then - for directory in "${directories[@]}"; do - sed -i "s/^\(function.*)\) *$/\1 abort/" "$directory"/**/*.vim - sed -i "s/shellescape(/ale#Escape(/" "$directory"/**/*.vim - sed -i 's/==#/is#/g' "$directory"/**/*.vim - sed -i 's/==?/is?/g' "$directory"/**/*.vim - sed -i 's/!=#/isnot#/g' "$directory"/**/*.vim - sed -i 's/!=?/isnot?/g' "$directory"/**/*.vim - # Improving type checks. - sed -i $'s/\\(==.\\?\\|is\\) type([\'"]\+)/is v:t_string/g' "$directory"/**/*.vim - sed -i 's/\(==.\?\|is\) type([0-9]\+)/is v:t_number/g' "$directory"/**/*.vim - sed -i 's/\(==.\?\|is\) type(\[\])/is v:t_list/g' "$directory"/**/*.vim - sed -i 's/\(==.\?\|is\) type({})/is v:t_dict/g' "$directory"/**/*.vim - sed -i 's/\(==.\?\|is\) type(function([^)]\+))/is v:t_func/g' "$directory"/**/*.vim - sed -i $'s/\\(!=.\\?\\|isnot\\) type([\'"]\+)/isnot v:t_string/g' "$directory"/**/*.vim - sed -i 's/\(!=.\?\|isnot\) type([0-9]\+)/isnot v:t_number/g' "$directory"/**/*.vim - sed -i 's/\(!=.\?\|isnot\) type(\[\])/isnot v:t_list/g' "$directory"/**/*.vim - sed -i 's/\(!=.\?\|isnot\) type({})/isnot v:t_dict/g' "$directory"/**/*.vim - sed -i 's/\(!=.\?\|isnot\) type(function([^)]\+))/isnot v:t_func/g' "$directory"/**/*.vim - done -fi - -# The arguments are: regex, explanation, [filename_filter], [list, of, exclusions] -check_errors \ - '^function.*) *$' \ - 'Function without abort keyword (See :help except-compat)' -check_errors '^function[^!]' 'function without !' -check_errors ' \+$' 'Trailing whitespace' -check_errors '^ * end\?i\? *$' 'Write endif, not en, end, or endi' -check_errors '^ [^ ]' 'Use four spaces, not two spaces' -check_errors $'\t' 'Use four spaces, not tabs' -# This check should prevent people from using a particular inconsistent name. -check_errors 'let g:ale_\w\+_\w\+_args =' 'Name your option g:ale___options instead' -check_errors 'shellescape(' 'Use ale#Escape instead of shellescape' -check_errors 'simplify(' 'Use ale#path#Simplify instead of simplify' -check_errors 'tempname(' 'Use ale#util#Tempname instead of tempname' -check_errors 'getcurpos(' "Use getpos('.') instead of getcurpos() if you don't need curswant, to avoid a bug that changes curswant" -check_errors "expand(['\"]%" "Use expand('#' . a:buffer . '...') instead. You might get a filename for the wrong buffer." -check_errors 'getcwd()' "Do not use getcwd(), as it could run from the wrong buffer. Use expand('#' . a:buffer . ':p:h') instead." -check_errors '==#' "Use 'is#' instead of '==#'. 0 ==# 'foobar' is true" -check_errors '==?' "Use 'is?' instead of '==?'. 0 ==? 'foobar' is true" -check_errors '!=#' "Use 'isnot#' instead of '!=#'. 0 !=# 'foobar' is false" -check_errors '!=?' "Use 'isnot?' instead of '!=?'. 0 !=? 'foobar' is false" -check_errors '^ *:\?echo' "Stray echo line. Ignore with \" no-custom-checks if needed" -check_errors '^ *:\?redir' 'User execute() instead of redir' -# Exclusions for grandfathered-in exceptions -exclusions="clojure/clj_kondo.vim elixir/elixir_ls.vim go/golangci_lint.vim swift/swiftformat.vim" -# shellcheck disable=SC2086 -check_errors $'name.:.*\'[a-z_]*[^a-z_0-9][a-z_0-9]*\',$' 'Use snake_case names for linters' '*/ale_linters/*' $exclusions -# Checks for improving type checks. -check_errors $'\\(==.\\?\\|is\\) type([\'"]\+)' "Use 'is v:t_string' instead" -check_errors '\(==.\?\|is\) type([0-9]\+)' "Use 'is v:t_number' instead" -check_errors '\(==.\?\|is\) type(\[\])' "Use 'is v:t_list' instead" -check_errors '\(==.\?\|is\) type({})' "Use 'is v:t_dict' instead" -check_errors '\(==.\?\|is\) type(function([^)]\+))' "Use 'is v:t_func' instead" -check_errors $'\\(!=.\\?\\|isnot\\) type([\'"]\+)' "Use 'isnot v:t_string' instead" -check_errors '\(!=.\?\|isnot\) type([0-9]\+)' "Use 'isnot v:t_number' instead" -check_errors '\(!=.\?\|isnot\) type(\[\])' "Use 'isnot v:t_list' instead" -check_errors '\(!=.\?\|isnot\) type({})' "Use 'isnot v:t_dict' instead" -check_errors '\(!=.\?\|isnot\) type(function([^)]\+))' "Use 'isnot v:t_func' instead" - -# Run a Python script to find lines that require padding around them. For -# users without Python installed, we'll skip these checks. GitHub Actions will -# run the script. -if command -v python > /dev/null; then - if ! test/script/block-padding-checker "$directory"/**/*.vim; then - RETURN_CODE=1 - fi -fi - -exit $RETURN_CODE diff --git a/dotfiles/.vim/plugged/ale/test/script/dumb_named_pipe_server.py b/dotfiles/.vim/plugged/ale/test/script/dumb_named_pipe_server.py deleted file mode 100644 index a77e538c..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/dumb_named_pipe_server.py +++ /dev/null @@ -1,42 +0,0 @@ -""" -This Python script creates a named pipe server that does nothing but send its input -back to the client that connects to it. Only one argument must be given, the path -of a named pipe to bind to. -""" -import os -import socket -import sys - - -def main(): - if len(sys.argv) < 2: - sys.exit('You must specify a filepath') - - sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - if os.path.exists(sys.argv[1]): - os.remove(sys.argv[1]) - sock.bind(sys.argv[1]) - sock.listen(0) - - pid = os.fork() - - if pid: - print(pid) - sys.exit() - - while True: - connection = sock.accept()[0] - connection.settimeout(5) - - while True: - try: - connection.send(connection.recv(1024)) - except socket.timeout: - break - - connection.close() - - -if __name__ == "__main__": - main() diff --git a/dotfiles/.vim/plugged/ale/test/script/dumb_tcp_client.py b/dotfiles/.vim/plugged/ale/test/script/dumb_tcp_client.py deleted file mode 100644 index 3a728b02..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/dumb_tcp_client.py +++ /dev/null @@ -1,33 +0,0 @@ -""" -This is just a script for testing that the dumb TCP server actually works -correctly, for verifying that problems with tests are in Vim. Pass the -same port number given to the test server to check that it's working. -""" -import socket -import sys - - -def main(): - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - result = sock.connect_ex(('127.0.0.1', int(sys.argv[1]))) - - if result: - sock.close() - sys.exit("Couldn't connect to the socket!") - - data_sent = 'x' * 1024 - - sock.send(data_sent) - data_received = sock.recv(1024) - - if data_sent != data_received: - sock.close() - sys.exit("Data sent didn't match data received.") - - sock.close() - - print("Everything was just fine.") - - -if __name__ == "__main__": - main() diff --git a/dotfiles/.vim/plugged/ale/test/script/dumb_tcp_server.py b/dotfiles/.vim/plugged/ale/test/script/dumb_tcp_server.py deleted file mode 100644 index c15db65e..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/dumb_tcp_server.py +++ /dev/null @@ -1,40 +0,0 @@ -""" -This Python script creates a TCP server that does nothing but send its input -back to the client that connects to it. Only one argument must be given, a port -to bind to. -""" -import os -import socket -import sys - - -def main(): - if len(sys.argv) < 2 or not sys.argv[1].isdigit(): - sys.exit('You must specify a port number') - - sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) - sock.bind(('127.0.0.1', int(sys.argv[1]))) - sock.listen(0) - - pid = os.fork() - - if pid: - print(pid) - sys.exit() - - while True: - connection = sock.accept()[0] - connection.settimeout(5) - - while True: - try: - connection.send(connection.recv(1024)) - except socket.timeout: - break - - connection.close() - - -if __name__ == "__main__": - main() diff --git a/dotfiles/.vim/plugged/ale/test/script/run-vader-tests b/dotfiles/.vim/plugged/ale/test/script/run-vader-tests deleted file mode 100755 index 15a4a91e..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/run-vader-tests +++ /dev/null @@ -1,167 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -u - -docker_flags=(--rm -v "$PWD:/testplugin" -v "$PWD/test:/home" -w /testplugin "$DOCKER_RUN_IMAGE") -red='\033[0;31m' -green='\033[0;32m' -nc='\033[0m' -verbose=0 -quiet=0 - -while [ $# -ne 0 ]; do - case $1 in - -v) - verbose=1 - shift - ;; - -q) - quiet=1 - shift - ;; - --) - shift - break - ;; - -?*) - echo "Invalid argument: $1" 1>&2 - exit 1 - ;; - *) - break - ;; - esac -done - -vim="$1" -tests="$2" - -echo "$vim" - -case $vim in - neovim-v0.2*) - headless='' - ;; - # Neovim 0.6+ requires headless argument to load Vader tests. - neovim*) - headless='--headless' - ;; - *) - headless='' - ;; -esac - -# This file will be used to track if tests ran or not. -# We can't use a variable, because we need to set a value in a sub-shell. -run_file="$(mktemp -t tests_ran.XXXXXXXX)" - -function filter-vader-output() { - local hit_first_vader_line=0 - # When verbose mode is off, suppress output until Vader starts. - local start_output="$verbose" - local filtered_data='' - - while read -r; do - # Search for the first Vader output line. - # We can try starting tests again if they don't start. - if ((!hit_first_vader_line)); then - if [[ "$REPLY" = *'Starting Vader:'* ]]; then - hit_first_vader_line=1 - fi - fi - - if ((!start_output)); then - if ((hit_first_vader_line)); then - start_output=1 - else - continue - fi - fi - - if ((quiet)); then - if [[ "$REPLY" = *'Starting Vader:'* ]]; then - filtered_data="$REPLY" - elif [[ "$REPLY" = *'Success/Total'* ]]; then - success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)" - total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)" - - if [ "$success" -lt "$total" ]; then - echo "$filtered_data" - echo "$REPLY" - fi - - filtered_data='' - else - filtered_data="$filtered_data"$'\n'"$REPLY" - fi - else - echo "$REPLY" - fi - done - - # Note that we managed to get the Vader tests started if we did. - if ((hit_first_vader_line)); then - echo 1 > "$run_file" - fi -} - -function color-vader-output() { - while read -r; do - if [[ "$REPLY" = *'[EXECUTE] (X)'* ]]; then - echo -en "$red" - elif [[ "$REPLY" = *'[EXECUTE]'* ]] || [[ "$REPLY" = *'[ GIVEN]'* ]]; then - echo -en "$nc" - fi - - if [[ "$REPLY" = *'Success/Total'* ]]; then - success="$(echo -n "$REPLY" | grep -o '[0-9]\+/' | head -n1 | cut -d/ -f1)" - total="$(echo -n "$REPLY" | grep -o '/[0-9]\+' | head -n1 | cut -d/ -f2)" - - if [ "$success" -lt "$total" ]; then - echo -en "$red" - else - echo -en "$green" - fi - - echo "$REPLY" - echo -en "$nc" - else - echo "$REPLY" - fi - done - - echo -en "$nc" -} - -echo -echo '========================================' -echo "Running tests for $vim" -echo '========================================' -echo - -tries=0 - -while [ "$tries" -lt 5 ]; do - tries=$((tries + 1)) - - exit_code=0 - set -o pipefail - docker run -a stderr -e VADER_OUTPUT_FILE=/dev/stderr "${docker_flags[@]}" \ - "/vim-build/bin/$vim" -u test/vimrc ${headless} \ - "+Vader! $tests" 2>&1 | filter-vader-output | color-vader-output || exit_code=$? - set +o pipefail - - if [ -s "$run_file" ]; then - break - fi -done - -if [ "$tries" -gt 1 ]; then - echo - echo "Tried to run tests $tries times" -fi - -rm "$run_file" - -exit "$exit_code" diff --git a/dotfiles/.vim/plugged/ale/test/script/run-vint b/dotfiles/.vim/plugged/ale/test/script/run-vint deleted file mode 100755 index ce42ad41..00000000 --- a/dotfiles/.vim/plugged/ale/test/script/run-vint +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -set -e -set -u - -exit_code=0 -docker_flags=(--rm -v "$PWD:/testplugin" -v "$PWD/test:/home" -w /testplugin "$DOCKER_RUN_IMAGE") - -echo '========================================' -echo 'Running Vint to lint our code' -echo '========================================' -echo 'Vint warnings/errors follow:' -echo - -set -o pipefail -docker run -a stdout "${docker_flags[@]}" vint -s . || exit_code=$? -set +o pipefail -echo - -exit $exit_code diff --git a/dotfiles/.vim/plugged/ale/test/sign/test_linting_sets_signs.vader b/dotfiles/.vim/plugged/ale/test/sign/test_linting_sets_signs.vader deleted file mode 100644 index 1624449a..00000000 --- a/dotfiles/.vim/plugged/ale/test/sign/test_linting_sets_signs.vader +++ /dev/null @@ -1,76 +0,0 @@ -Given foobar (Some imaginary filetype): - var y = 3+3; - var y = 3 - -Before: - Save g:ale_buffer_info - Save g:ale_echo_cursor - Save g:ale_run_synchronously - Save g:ale_set_highlights - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_set_signs - Save g:ale_command_wrapper - - let g:ale_command_wrapper = '' - let g:ale_buffer_info = {} - let g:ale_run_synchronously = 1 - unlet! g:ale_run_synchronously_callbacks - let g:ale_set_signs = 1 - " Disable features we don't need for these tests. - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 0 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 0 - - call ale#sign#Clear() - - function! TestCallback(buffer, output) - return [ - \ {'lnum': 1, 'text': 'foo', 'type': 'W'}, - \ {'lnum': 2, 'text': 'foo', 'type': 'E'}, - \] - endfunction - - function! CollectSigns() - redir => l:output - if has('nvim-0.4.2') || has('patch-8.1.614') - silent exec 'sign place group=ale' - else - silent exec 'sign place' - endif - redir END - - let l:actual_sign_list = [] - - for l:line in split(l:output, "\n") - let l:match = matchlist(l:line, ale#sign#ParsePattern()) - - if len(l:match) > 0 - call add(l:actual_sign_list, [l:match[1], l:match[3]]) - endif - endfor - - return l:actual_sign_list - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''', - \}) - -After: - delfunction TestCallback - delfunction CollectSigns - - unlet! g:ale_run_synchronously_callbacks - call ale#sign#Clear() - call ale#linter#Reset() - -Execute(The signs should be updated after linting is done): - ALELint - call ale#test#FlushJobs() - - AssertEqual [['1', 'ALEWarningSign'], ['2', 'ALEErrorSign']], CollectSigns() diff --git a/dotfiles/.vim/plugged/ale/test/sign/test_sign_column_highlighting.vader b/dotfiles/.vim/plugged/ale/test/sign/test_sign_column_highlighting.vader deleted file mode 100644 index 7ea5eb0f..00000000 --- a/dotfiles/.vim/plugged/ale/test/sign/test_sign_column_highlighting.vader +++ /dev/null @@ -1,68 +0,0 @@ -Before: - Save g:ale_change_sign_column_color - Save &verbose - - function! ParseHighlight(name) abort - redir => l:output - silent execute 'highlight ' . a:name - redir end - - return substitute(join(split(l:output)[2:]), ' Last set.*', '', '') - endfunction - - function! SetHighlight(name, syntax) abort - let l:match = matchlist(a:syntax, '\vlinks to (.+)$') - - if !empty(l:match) - execute 'highlight link ' . a:name . ' ' . l:match[1] - else - execute 'highlight ' . a:name . ' ' a:syntax - endif - endfunction - - let g:sign_highlight = ParseHighlight('SignColumn') - -After: - Restore - - delfunction ParseHighlight - call SetHighlight('SignColumn', g:sign_highlight) - delfunction SetHighlight - unlet! g:sign_highlight - - call ale#sign#Clear() - -Execute(The SignColumn highlight shouldn't be changed if the option is off): - let g:ale_change_sign_column_color = 0 - let b:sign_highlight = ParseHighlight('SignColumn') - - call ale#sign#SetSigns(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'W', 'text': 'x'}, - \]) - AssertEqual b:sign_highlight, ParseHighlight('SignColumn') - - call ale#sign#SetSigns(bufnr(''), []) - AssertEqual b:sign_highlight, ParseHighlight('SignColumn') - -Execute(The SignColumn highlight should be set and reset): - let g:ale_change_sign_column_color = 1 - - call ale#sign#SetSigns(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'W', 'text': 'x'}, - \]) - AssertEqual 'links to ALESignColumnWithErrors', ParseHighlight('SignColumn') - - call ale#sign#SetSigns(bufnr(''), []) - AssertEqual 'links to ALESignColumnWithoutErrors', ParseHighlight('SignColumn') - -Execute(The SignColumn should be correctly parsed when verbose=1): - set verbose=1 - highlight SignColumn ctermfg=246 ctermbg=7 guifg=#839496 guibg=Grey - - call ale#sign#SetUpDefaultColumnWithoutErrorsHighlight() - - AssertEqual - \ has('nvim') - \ ? 'ctermfg=246 ctermbg=7 guifg=#839496 guibg=Grey' - \ : 'term=standout ctermfg=246 ctermbg=7 guifg=#839496 guibg=Grey', - \ ParseHighlight('ALESignColumnWithoutErrors') diff --git a/dotfiles/.vim/plugged/ale/test/sign/test_sign_limits.vader b/dotfiles/.vim/plugged/ale/test/sign/test_sign_limits.vader deleted file mode 100644 index d7a4e2f5..00000000 --- a/dotfiles/.vim/plugged/ale/test/sign/test_sign_limits.vader +++ /dev/null @@ -1,57 +0,0 @@ -Before: - Save g:ale_max_signs - - let g:ale_max_signs = -1 - - function! SetNProblems(sign_count) - let l:loclist = [] - let l:range = range(1, a:sign_count) - call setline(1, l:range) - - for l:index in l:range - call add(l:loclist, { - \ 'bufnr': bufnr(''), - \ 'lnum': l:index, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'a', - \}) - endfor - - call ale#sign#SetSigns(bufnr(''), l:loclist) - - return sort(map(ale#sign#FindCurrentSigns(bufnr(''))[1], 'v:val[0]'), 'n') - endfunction - -After: - Restore - - unlet! b:ale_max_signs - - delfunction SetNProblems - - call ale#sign#Clear() - -Execute(There should be no limit on signs with negative numbers): - AssertEqual range(1, 42), SetNProblems(42) - -Execute(0 signs should be set when the max is 0): - let g:ale_max_signs = 0 - - AssertEqual [], SetNProblems(42) - -Execute(1 signs should be set when the max is 1): - let g:ale_max_signs = 1 - - AssertEqual [1], SetNProblems(42) - -Execute(10 signs should be set when the max is 10): - let g:ale_max_signs = 10 - - " We'll check that we set signs for the first 10 items, not other lines. - AssertEqual range(1, 10), SetNProblems(42) - -Execute(5 signs should be set when the max is 5 for the buffer): - let b:ale_max_signs = 5 - - AssertEqual range(1, 5), SetNProblems(42) diff --git a/dotfiles/.vim/plugged/ale/test/sign/test_sign_parsing.vader b/dotfiles/.vim/plugged/ale/test/sign/test_sign_parsing.vader deleted file mode 100644 index c0967f43..00000000 --- a/dotfiles/.vim/plugged/ale/test/sign/test_sign_parsing.vader +++ /dev/null @@ -1,88 +0,0 @@ -Execute (Parsing English signs should work): - if has('nvim-0.4.2') || has('patch-8.1.614') - AssertEqual - \ [0, [[9, 1000001, 'ALEWarningSign']]], - \ ale#sign#ParseSigns([ - \ 'Signs for app.js:', - \ ' line=9 id=1000001 group=ale name=ALEWarningSign', - \ ]) - else - AssertEqual - \ [0, [[9, 1000001, 'ALEWarningSign']]], - \ ale#sign#ParseSigns([ - \ 'Signs for app.js:', - \ ' line=9 id=1000001 name=ALEWarningSign', - \ ]) - endif - -Execute (Parsing Russian signs should work): - if has('nvim-0.4.2') || has('patch-8.1.614') - AssertEqual - \ [0, [[1, 1000001, 'ALEErrorSign']]], - \ ale#sign#ParseSigns([' строка=1 id=1000001 группа=ale имя=ALEErrorSign']) - else - AssertEqual - \ [0, [[1, 1000001, 'ALEErrorSign']]], - \ ale#sign#ParseSigns([' строка=1 id=1000001 имя=ALEErrorSign']) - endif - -Execute (Parsing Japanese signs should work): - if has('nvim-0.4.2') || has('patch-8.1.614') - AssertEqual - \ [0, [[1, 1000001, 'ALEWarningSign']]], - \ ale#sign#ParseSigns([' 行=1 識別子=1000001 グループ=ale 名前=ALEWarningSign']) - else - AssertEqual - \ [0, [[1, 1000001, 'ALEWarningSign']]], - \ ale#sign#ParseSigns([' 行=1 識別子=1000001 名前=ALEWarningSign']) - endif - -Execute (Parsing Spanish signs should work): - if has('nvim-0.4.2') || has('patch-8.1.614') - AssertEqual - \ [0, [[12, 1000001, 'ALEWarningSign']]], - \ ale#sign#ParseSigns([' línea=12 id=1000001 grupo=ale nombre=ALEWarningSign']) - else - AssertEqual - \ [0, [[12, 1000001, 'ALEWarningSign']]], - \ ale#sign#ParseSigns([' línea=12 id=1000001 nombre=ALEWarningSign']) - endif - -Execute (Parsing Italian signs should work): - if has('nvim-0.4.2') || has('patch-8.1.614') - AssertEqual - \ [0, [[1, 1000001, 'ALEWarningSign']]], - \ ale#sign#ParseSigns([' riga=1 id=1000001, gruppo=ale nome=ALEWarningSign']) - else - AssertEqual - \ [0, [[1, 1000001, 'ALEWarningSign']]], - \ ale#sign#ParseSigns([' riga=1 id=1000001, nome=ALEWarningSign']) - endif - -Execute (Parsing German signs should work): - if has('nvim-0.4.2') || has('patch-8.1.614') - AssertEqual - \ [0, [[235, 1000001, 'ALEErrorSign']]], - \ ale#sign#ParseSigns([' Zeile=235 id=1000001 Gruppe=ale Name=ALEErrorSign']) - else - AssertEqual - \ [0, [[235, 1000001, 'ALEErrorSign']]], - \ ale#sign#ParseSigns([' Zeile=235 id=1000001 Name=ALEErrorSign']) - endif - -Execute (The sign parser should indicate if the dummy sign is set): - if has('nvim-0.4.2') || has('patch-8.1.614') - AssertEqual - \ [1, [[1, 1000001, 'ALEErrorSign']]], - \ ale#sign#ParseSigns([ - \ ' строка=1 id=1000001 group=ale имя=ALEErrorSign', - \ ' line=1 id=1000000 group=ale name=ALEDummySign', - \ ]) - else - AssertEqual - \ [1, [[1, 1000001, 'ALEErrorSign']]], - \ ale#sign#ParseSigns([ - \ ' строка=1 id=1000001 имя=ALEErrorSign', - \ ' line=1 id=1000000 name=ALEDummySign', - \ ]) - endif diff --git a/dotfiles/.vim/plugged/ale/test/sign/test_sign_placement.vader b/dotfiles/.vim/plugged/ale/test/sign/test_sign_placement.vader deleted file mode 100644 index 7b80d83c..00000000 --- a/dotfiles/.vim/plugged/ale/test/sign/test_sign_placement.vader +++ /dev/null @@ -1,315 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_echo_cursor - Save g:ale_run_synchronously - Save g:ale_set_highlights - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_set_signs - Save g:ale_command_wrapper - - let g:ale_command_wrapper = '' - let g:ale_buffer_info = {} - let g:ale_run_synchronously = 1 - let g:ale_set_signs = 1 - " Disable features we don't need for these tests. - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 0 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 0 - - call ale#linter#Reset() - call ale#sign#Clear() - - function! GenerateResults(buffer, output) - return [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'foo', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'bar', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'baz', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'use this one', - \ }, - \ { - \ 'lnum': 4, - \ 'col': 2, - \ 'type': 'W', - \ 'text': 'ignore this one', - \ }, - \ { - \ 'lnum': 5, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'ignore this one', - \ }, - \ { - \ 'lnum': 5, - \ 'col': 2, - \ 'type': 'E', - \ 'text': 'use this one', - \ }, - \] - endfunction - - function! ParseSigns() - redir => l:output - if has('nvim-0.4.2') || has('patch-8.1.614') - silent sign place group=ale - else - silent sign place - endif - redir END - - return map( - \ split(l:output, '\n')[2:], - \ 'matchlist(v:val, ''' . ale#sign#ParsePattern() . ''')[1:3]', - \) - endfunction - - call ale#linter#Define('testft', { - \ 'name': 'x', - \ 'executable': has('win32') ? 'cmd' : 'true', - \ 'command': 'true', - \ 'callback': 'GenerateResults', - \}) - -After: - Restore - - unlet! g:ale_run_synchronously_callbacks - unlet! g:loclist - delfunction GenerateResults - delfunction ParseSigns - call ale#linter#Reset() - call ale#sign#Clear() - -Execute(ale#sign#GetSignName should return the right sign names): - AssertEqual 'ALEErrorSign', ale#sign#GetSignName([{'type': 'E'}]) - AssertEqual 'ALEStyleErrorSign', ale#sign#GetSignName([{'type': 'E', 'sub_type': 'style'}]) - AssertEqual 'ALEWarningSign', ale#sign#GetSignName([{'type': 'W'}]) - AssertEqual 'ALEStyleWarningSign', ale#sign#GetSignName([{'type': 'W', 'sub_type': 'style'}]) - AssertEqual 'ALEInfoSign', ale#sign#GetSignName([{'type': 'I'}]) - AssertEqual 'ALEErrorSign', ale#sign#GetSignName([ - \ {'type': 'E'}, - \ {'type': 'W'}, - \ {'type': 'I'}, - \ {'type': 'E', 'sub_type': 'style'}, - \ {'type': 'W', 'sub_type': 'style'}, - \]) - AssertEqual 'ALEWarningSign', ale#sign#GetSignName([ - \ {'type': 'W'}, - \ {'type': 'I'}, - \ {'type': 'E', 'sub_type': 'style'}, - \ {'type': 'W', 'sub_type': 'style'}, - \]) - AssertEqual 'ALEInfoSign', ale#sign#GetSignName([ - \ {'type': 'I'}, - \ {'type': 'E', 'sub_type': 'style'}, - \ {'type': 'W', 'sub_type': 'style'}, - \]) - AssertEqual 'ALEStyleErrorSign', ale#sign#GetSignName([ - \ {'type': 'E', 'sub_type': 'style'}, - \ {'type': 'W', 'sub_type': 'style'}, - \]) - AssertEqual 'ALEStyleWarningSign', ale#sign#GetSignName([ - \ {'type': 'W', 'sub_type': 'style'}, - \]) - -Given testft(A file with warnings/errors): - foo - bar - baz - fourth line - fifth line - -Execute(The current signs should be set for running a job): - ALELint - call ale#test#FlushJobs() - - AssertEqual - \ [ - \ ['1', '1000001', 'ALEErrorSign'], - \ ['2', '1000002', 'ALEWarningSign'], - \ ['3', '1000003', 'ALEErrorSign'], - \ ['4', '1000004', 'ALEErrorSign'], - \ ['5', '1000005', 'ALEErrorSign'], - \ ], - \ ParseSigns() - -Execute(Loclist items with sign_id values should be kept): - if has('nvim-0.4.2') || has('patch-8.1.614') - exec 'sign place 1000347 group=ale line=3 name=ALEErrorSign buffer=' . bufnr('') - exec 'sign place 1000348 group=ale line=15 name=ALEErrorSign buffer=' . bufnr('') - exec 'sign place 1000349 group=ale line=16 name=ALEWarningSign buffer=' . bufnr('') - else - exec 'sign place 1000347 line=3 name=ALEErrorSign buffer=' . bufnr('') - exec 'sign place 1000348 line=15 name=ALEErrorSign buffer=' . bufnr('') - exec 'sign place 1000349 line=16 name=ALEWarningSign buffer=' . bufnr('') - endif - - let g:loclist = [ - \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'E', 'text': 'a', 'sign_id': 1000348}, - \ {'bufnr': bufnr(''), 'lnum': 2, 'col': 1, 'type': 'W', 'text': 'b', 'sign_id': 1000349}, - \ {'bufnr': bufnr(''), 'lnum': 3, 'col': 1, 'type': 'E', 'text': 'c', 'sign_id': 1000347}, - \ {'bufnr': bufnr(''), 'lnum': 4, 'col': 1, 'type': 'W', 'text': 'd'}, - \ {'bufnr': bufnr(''), 'lnum': 15, 'col': 2, 'type': 'W', 'text': 'e'}, - \ {'bufnr': bufnr(''), 'lnum': 16, 'col': 2, 'type': 'E', 'text': 'f'}, - \] - - call ale#sign#SetSigns(bufnr(''), g:loclist) - - " Sign IDs from before should be kept, and new signs should use - " IDs that haven't been used yet. - AssertEqual - \ [ - \ {'bufnr': bufnr(''), 'lnum': 3, 'col': 1, 'type': 'E', 'text': 'c', 'sign_id': 1000347}, - \ {'bufnr': bufnr(''), 'lnum': 4, 'col': 1, 'type': 'W', 'text': 'd', 'sign_id': 1000350}, - \ {'bufnr': bufnr(''), 'lnum': 15, 'col': 1, 'type': 'E', 'text': 'a', 'sign_id': 1000348}, - \ {'bufnr': bufnr(''), 'lnum': 15, 'col': 2, 'type': 'W', 'text': 'e', 'sign_id': 1000348}, - \ {'bufnr': bufnr(''), 'lnum': 16, 'col': 1, 'type': 'W', 'text': 'b', 'sign_id': 1000351}, - \ {'bufnr': bufnr(''), 'lnum': 16, 'col': 2, 'type': 'E', 'text': 'f', 'sign_id': 1000351}, - \ ], - \ g:loclist - - " Items should be grouped again. We should see error signs, where there - " were warnings before, and errors where there were errors and where we - " now have new warnings. - AssertEqual - \ [ - \ ['15', '1000348', 'ALEErrorSign'], - \ ['16', '1000351', 'ALEErrorSign'], - \ ['3', '1000347', 'ALEErrorSign'], - \ ['4', '1000350', 'ALEWarningSign'], - \ ], - \ sort(ParseSigns()) - -Execute(Items for other buffers should be ignored): - let g:loclist = [ - \ {'bufnr': bufnr('') - 1, 'lnum': 1, 'col': 1, 'type': 'E', 'text': 'a'}, - \ {'bufnr': bufnr('') - 1, 'lnum': 2, 'col': 1, 'type': 'E', 'text': 'a', 'sign_id': 1000347}, - \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'E', 'text': 'a'}, - \ {'bufnr': bufnr(''), 'lnum': 2, 'col': 1, 'type': 'W', 'text': 'b'}, - \ {'bufnr': bufnr(''), 'lnum': 3, 'col': 1, 'type': 'E', 'text': 'c'}, - \ {'bufnr': bufnr(''), 'lnum': 4, 'col': 1, 'type': 'W', 'text': 'd'}, - \ {'bufnr': bufnr(''), 'lnum': 15, 'col': 2, 'type': 'W', 'text': 'e'}, - \ {'bufnr': bufnr(''), 'lnum': 16, 'col': 2, 'type': 'E', 'text': 'f'}, - \ {'bufnr': bufnr('') + 1, 'lnum': 1, 'col': 1, 'type': 'E', 'text': 'a'}, - \] - - call ale#sign#SetSigns(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ ['1', '1000001', 'ALEErrorSign'], - \ ['15', '1000005', 'ALEWarningSign'], - \ ['16', '1000006', 'ALEErrorSign'], - \ ['2', '1000002', 'ALEWarningSign'], - \ ['3', '1000003', 'ALEErrorSign'], - \ ['4', '1000004', 'ALEWarningSign'], - \ ], - \ sort(ParseSigns()) - -Execute(Signs should be downgraded correctly): - call ale#sign#SetSigns(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'E', 'text': 'x'}, - \ {'bufnr': bufnr(''), 'lnum': 2, 'col': 1, 'type': 'W', 'text': 'x'}, - \]) - - AssertEqual - \ [ - \ ['1', '1000001', 'ALEErrorSign'], - \ ['2', '1000002', 'ALEWarningSign'], - \ ], - \ sort(ParseSigns()) - - call ale#sign#SetSigns(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'W', 'text': 'x'}, - \ {'bufnr': bufnr(''), 'lnum': 2, 'col': 1, 'type': 'I', 'text': 'x'}, - \]) - - AssertEqual - \ [ - \ ['1', '1000003', 'ALEWarningSign'], - \ ['2', '1000004', 'ALEInfoSign'], - \ ], - \ sort(ParseSigns()) - -Execute(Signs should be upgraded correctly): - call ale#sign#SetSigns(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'W', 'text': 'x'}, - \ {'bufnr': bufnr(''), 'lnum': 2, 'col': 1, 'type': 'I', 'text': 'x'}, - \]) - - AssertEqual - \ [ - \ ['1', '1000001', 'ALEWarningSign'], - \ ['2', '1000002', 'ALEInfoSign'], - \ ], - \ sort(ParseSigns()) - - call ale#sign#SetSigns(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 1, 'col': 1, 'type': 'E', 'text': 'x'}, - \ {'bufnr': bufnr(''), 'lnum': 2, 'col': 1, 'type': 'W', 'text': 'x'}, - \]) - - AssertEqual - \ [ - \ ['1', '1000003', 'ALEErrorSign'], - \ ['2', '1000004', 'ALEWarningSign'], - \ ], - \ sort(ParseSigns()) - -Execute(It should be possible to clear signs with empty lists): - let g:loclist = [ - \ {'bufnr': bufnr(''), 'lnum': 16, 'col': 2, 'type': 'E', 'text': 'f'}, - \] - - call ale#sign#SetSigns(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ ['16', '1000001', 'ALEErrorSign'], - \ ], - \ sort(ParseSigns()) - - call ale#sign#SetSigns(bufnr(''), []) - - AssertEqual [], ParseSigns() - -Execute(No exceptions should be thrown when setting signs for invalid buffers): - call ale#sign#SetSigns(123456789, [{'lnum': 15, 'col': 2, 'type': 'W', 'text': 'e'}]) - -Execute(Signs should be removed when lines have multiple sign IDs on them): - " We can fail to remove signs if there are multiple signs on one line, - " say after deleting lines in Vim, etc. - if has('nvim-0.4.2') || has('patch-8.1.614') - exec 'sign place 1000347 group=ale line=3 name=ALEErrorSign buffer=' . bufnr('') - exec 'sign place 1000348 group=ale line=3 name=ALEWarningSign buffer=' . bufnr('') - exec 'sign place 1000349 group=ale line=10 name=ALEErrorSign buffer=' . bufnr('') - exec 'sign place 1000350 group=ale line=10 name=ALEWarningSign buffer=' . bufnr('') - else - exec 'sign place 1000347 line=3 name=ALEErrorSign buffer=' . bufnr('') - exec 'sign place 1000348 line=3 name=ALEWarningSign buffer=' . bufnr('') - exec 'sign place 1000349 line=10 name=ALEErrorSign buffer=' . bufnr('') - exec 'sign place 1000350 line=10 name=ALEWarningSign buffer=' . bufnr('') - endif - - call ale#sign#SetSigns(bufnr(''), []) - AssertEqual [], ParseSigns() diff --git a/dotfiles/.vim/plugged/ale/test/smoke_test.vader b/dotfiles/.vim/plugged/ale/test/smoke_test.vader deleted file mode 100644 index 1a984dec..00000000 --- a/dotfiles/.vim/plugged/ale/test/smoke_test.vader +++ /dev/null @@ -1,181 +0,0 @@ -Before: - Save g:ale_enabled - Save g:ale_set_lists_synchronously - Save g:ale_buffer_info - Save &shell - - let g:ale_enabled = 1 - let g:ale_buffer_info = {} - let g:ale_set_lists_synchronously = 1 - - function! TestCallback(buffer, output) - " Windows adds extra spaces to the text from echo. - return [{ - \ 'lnum': 2, - \ 'col': 3, - \ 'text': substitute(a:output[0], ' *$', '', ''), - \}] - endfunction - function! TestCallback2(buffer, output) - return [{ - \ 'lnum': 3, - \ 'col': 4, - \ 'text': substitute(a:output[0], ' *$', '', ''), - \}] - endfunction - - " Running the command in another subshell seems to help here. - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''', - \}) - -After: - Restore - - unlet! g:i - unlet! g:results - unlet! g:expected_results - - delfunction TestCallback - delfunction TestCallback2 - call ale#engine#Cleanup(bufnr('')) - call ale#linter#Reset() - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(Linters should run with the default options): - AssertEqual 'foobar', &filetype - - let g:expected_results = [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'foo bar', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \ }] - - " Try the test a few times over in NeoVim 0.3 or Windows or Vim 8.2, - " where tests fail randomly. - for g:i in range(has('nvim-0.3') || has('win32') || has('patch-8.2.2401') ? 5 : 1) - call ale#Queue(0, '') - call ale#test#WaitForJobs(2000) - - let g:results = ale#test#GetLoclistWithoutNewerKeys() - - if g:results == g:expected_results - break - endif - endfor - - AssertEqual g:expected_results, g:results - -Execute(Linters should run in PowerShell too): - if has('win32') - set shell=powershell - - AssertEqual 'foobar', &filetype - - " Replace the callback to handle two lines. - function! TestCallback(buffer, output) - " Windows adds extra spaces to the text from echo. - return [ - \ { - \ 'lnum': 1, - \ 'col': 3, - \ 'text': substitute(a:output[0], ' *$', '', ''), - \ }, - \ { - \ 'lnum': 2, - \ 'col': 3, - \ 'text': substitute(a:output[1], ' *$', '', ''), - \ }, - \] - endfunction - - " Recreate the command string to use &&, which PowerShell does not support. - call ale#linter#Reset() - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': 'cmd', - \ 'command': 'echo foo && echo bar', - \}) - - call ale#Queue(0, '') - call ale#test#WaitForJobs(4000) - - AssertEqual [ - \ { - \ 'bufnr': bufnr('%'), - \ 'lnum': 1, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'foo', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \ }, - \ { - \ 'bufnr': bufnr('%'), - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'bar', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \ }, - \], ale#test#GetLoclistWithoutNewerKeys() - endif - -Execute(Previous errors should be removed when linters change): - call ale#Queue(0, '') - call ale#test#WaitForJobs(2000) - - call ale#linter#Reset() - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter2', - \ 'callback': 'TestCallback2', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': has('win32') ? 'echo baz boz' : '/bin/sh -c ''echo baz boz''', - \}) - - let g:expected_results = [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 3, - \ 'vcol': 0, - \ 'col': 4, - \ 'text': 'baz boz', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \}] - - " Try the test a few times over in NeoVim 0.3 or VIm 8.2 or Windows, - " where tests fail randomly. - for g:i in range(has('nvim-0.3') || has('win32') || has('patch-8.2.2401') ? 5 : 1) - call ale#Queue(0, '') - call ale#test#WaitForJobs(2000) - - let g:results = ale#test#GetLoclistWithoutNewerKeys() - - if g:results == g:expected_results - break - endif - endfor - - AssertEqual g:expected_results, g:results diff --git a/dotfiles/.vim/plugged/ale/test/test-files/.circleci/config.yml b/dotfiles/.vim/plugged/ale/test/test-files/.circleci/config.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/.gitignore b/dotfiles/.vim/plugged/ale/test/test-files/.gitignore deleted file mode 100644 index 7d6563e0..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Don't ignore hidden files for this directory -!.* diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ada/testfile.adb b/dotfiles/.vim/plugged/ale/test/test-files/ada/testfile.adb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/alex/node-modules-2/node_modules/alex/cli.js b/dotfiles/.vim/plugged/ale/test/test-files/alex/node-modules-2/node_modules/alex/cli.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/alex/node-modules/node_modules/.bin/alex b/dotfiles/.vim/plugged/ale/test/test-files/alex/node-modules/node_modules/.bin/alex deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/angular/node_modules/@angular/language-server/bin/ngserver b/dotfiles/.vim/plugged/ale/test/test-files/angular/node_modules/@angular/language-server/bin/ngserver deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/angular/node_modules/@angular/language-service/dummy b/dotfiles/.vim/plugged/ale/test/test-files/angular/node_modules/@angular/language-service/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ant/ant-project/build.xml b/dotfiles/.vim/plugged/ale/test/test-files/ant/ant-project/build.xml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ant/bin/ant b/dotfiles/.vim/plugged/ale/test/test-files/ant/bin/ant deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ant/bin/ant.exe b/dotfiles/.vim/plugged/ale/test/test-files/ant/bin/ant.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/bazel/BUILD b/dotfiles/.vim/plugged/ale/test/test-files/bazel/BUILD deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/bazel/WORKSPACE b/dotfiles/.vim/plugged/ale/test/test-files/bazel/WORKSPACE deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/bazel/defs.bzl b/dotfiles/.vim/plugged/ale/test/test-files/bazel/defs.bzl deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/bib/dummy.bib b/dotfiles/.vim/plugged/ale/test/test-files/bib/dummy.bib deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/build_compile_commands_project/build/bad_folder_to_test_priority b/dotfiles/.vim/plugged/ale/test/test-files/c/build_compile_commands_project/build/bad_folder_to_test_priority deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/build_compile_commands_project/build/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/c/build_compile_commands_project/build/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/Makefile b/dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/Makefile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/configure b/dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/configure deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/include/test.h b/dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/include/test.h deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/subdir/Makefile b/dotfiles/.vim/plugged/ale/test/test-files/c/configure_project/subdir/Makefile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/dummy.c b/dotfiles/.vim/plugged/ale/test/test-files/c/dummy.c deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/git_and_nested_makefiles/include/test.h b/dotfiles/.vim/plugged/ale/test/test-files/c/git_and_nested_makefiles/include/test.h deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/git_and_nested_makefiles/src/Makefile b/dotfiles/.vim/plugged/ale/test/test-files/c/git_and_nested_makefiles/src/Makefile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/gnumakefile_project/GNUmakefile b/dotfiles/.vim/plugged/ale/test/test-files/c/gnumakefile_project/GNUmakefile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/gnumakefile_project/file.c b/dotfiles/.vim/plugged/ale/test/test-files/c/gnumakefile_project/file.c deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/Makefile b/dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/Makefile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/subdir/dummy b/dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/subdir/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/test.h b/dotfiles/.vim/plugged/ale/test/test-files/c/h_file_project/test.h deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/Makefile b/dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/Makefile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/subdir/dummy b/dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/subdir/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/test.hpp b/dotfiles/.vim/plugged/ale/test/test-files/c/hpp_file_project/test.hpp deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/json_project/build/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/c/json_project/build/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/json_project/include/test.h b/dotfiles/.vim/plugged/ale/test/test-files/c/json_project/include/test.h deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/json_project/subdir/dummy b/dotfiles/.vim/plugged/ale/test/test-files/c/json_project/subdir/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/Makefile b/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/Makefile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/_astylerc b/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/_astylerc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/args b/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/args deleted file mode 100644 index ccaf82ad..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/args +++ /dev/null @@ -1,3 +0,0 @@ -foolib.a --DARGS1 -@subdir/args diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/include/test.h b/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/include/test.h deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/args b/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/args deleted file mode 100644 index 3fe9c3fe..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/args +++ /dev/null @@ -1 +0,0 @@ --DARGS2 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/dummy b/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/file.c b/dotfiles/.vim/plugged/ale/test/test-files/c/makefile_project/subdir/file.c deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cargo/Cargo.toml b/dotfiles/.vim/plugged/ale/test/test-files/cargo/Cargo.toml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cargo/workspace_paths/Cargo.toml b/dotfiles/.vim/plugged/ale/test/test-files/cargo/workspace_paths/Cargo.toml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cargo/workspace_paths/subpath/Cargo.toml b/dotfiles/.vim/plugged/ale/test/test-files/cargo/workspace_paths/subpath/Cargo.toml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ccls/with_build_dir/unusual_build_dir_name/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/ccls/with_build_dir/unusual_build_dir_name/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ccls/with_ccls-root/.ccls-root b/dotfiles/.vim/plugged/ale/test/test-files/ccls/with_ccls-root/.ccls-root deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ccls/with_ccls/.ccls b/dotfiles/.vim/plugged/ale/test/test-files/ccls/with_ccls/.ccls deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ccls/with_compile_commands_json/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/ccls/with_compile_commands_json/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/checkstyle/other_config.xml b/dotfiles/.vim/plugged/ale/test/test-files/checkstyle/other_config.xml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/clangd/with_build_dir/unusual_build_dir_name/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/clangd/with_build_dir/unusual_build_dir_name/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/clangd/with_compile_commands/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/clangd/with_compile_commands/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/clangformat/with_clangformat/.clang-format b/dotfiles/.vim/plugged/ale/test/test-files/clangformat/with_clangformat/.clang-format deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cpp/.astylerc b/dotfiles/.vim/plugged/ale/test/test-files/cpp/.astylerc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cpp/dummy.cpp b/dotfiles/.vim/plugged/ale/test/test-files/cpp/dummy.cpp deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/two/three/file.c b/dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/two/three/file.c deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/two/three/file.cpp b/dotfiles/.vim/plugged/ale/test/test-files/cppcheck/one/two/three/file.cpp deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cppcheck/with_build_dir/build/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/cppcheck/with_build_dir/build/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cquery/build/compile_commands.json b/dotfiles/.vim/plugged/ale/test/test-files/cquery/build/compile_commands.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cquery/with_cquery/.cquery b/dotfiles/.vim/plugged/ale/test/test-files/cquery/with_cquery/.cquery deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cspell/node-modules-2/node_modules/cspell/bin.js b/dotfiles/.vim/plugged/ale/test/test-files/cspell/node-modules-2/node_modules/cspell/bin.js deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cspell/node-modules/node_modules/.bin/cspell b/dotfiles/.vim/plugged/ale/test/test-files/cspell/node-modules/node_modules/.bin/cspell deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/csslint/other-app/testfile.css b/dotfiles/.vim/plugged/ale/test/test-files/csslint/other-app/testfile.css deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/csslint/some-app/.csslintrc b/dotfiles/.vim/plugged/ale/test/test-files/csslint/some-app/.csslintrc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/csslint/some-app/subdir/testfile.css b/dotfiles/.vim/plugged/ale/test/test-files/csslint/some-app/subdir/testfile.css deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cucumber/features/cuke.feature b/dotfiles/.vim/plugged/ale/test/test-files/cucumber/features/cuke.feature deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/cucumber/features/step_definitions/base_steps.rb b/dotfiles/.vim/plugged/ale/test/test-files/cucumber/features/step_definitions/base_steps.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/d/test.d b/dotfiles/.vim/plugged/ale/test/test-files/d/test.d deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/dart/.packages b/dotfiles/.vim/plugged/ale/test/test-files/dart/.packages deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/dart/testfile.dart b/dotfiles/.vim/plugged/ale/test/test-files/dart/testfile.dart deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/dprint/blank.ts b/dotfiles/.vim/plugged/ale/test/test-files/dprint/blank.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/dprint/dprint.json b/dotfiles/.vim/plugged/ale/test/test-files/dprint/dprint.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/lib/app.ex b/dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/lib/app.ex deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/mix.exs b/dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/mix.exs deleted file mode 100644 index 419685ae..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/elixir/mix_project/mix.exs +++ /dev/null @@ -1,3 +0,0 @@ -defmodule Test.MixProject do - # fake mix project file -end diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elixir/testfile.ex b/dotfiles/.vim/plugged/ale/test/test-files/elixir/testfile.ex deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app1/lib/app.ex b/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app1/lib/app.ex deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app1/mix.exs b/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app1/mix.exs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app2/lib/app.ex b/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app2/lib/app.ex deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app2/mix.exs b/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/apps/app2/mix.exs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/mix.exs b/dotfiles/.vim/plugged/ale/test/test-files/elixir/umbrella_project/mix.exs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/elm.json b/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/elm.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/node_modules/.bin/elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/node_modules/.bin/elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/tests/TestMain.elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp-notests/tests/TestMain.elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/elm.json b/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/elm.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/node_modules/.bin/elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/node_modules/.bin/elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/node_modules/.bin/elm-test b/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/node_modules/.bin/elm-test deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/src/Main.elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/src/Main.elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/tests/TestSuite.elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/newapp/tests/TestSuite.elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/node_modules/.bin/elm-format b/dotfiles/.vim/plugged/ale/test/test-files/elm/node_modules/.bin/elm-format deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/elm-package.json b/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/elm-package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/node_modules/.bin/elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/node_modules/.bin/elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/node_modules/.bin/elm-test b/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/node_modules/.bin/elm-test deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/src/Main.elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/src/Main.elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/tests/TestSuite.elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/oldapp/tests/TestSuite.elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/elm/src/subdir/testfile.elm b/dotfiles/.vim/plugged/ale/test/test-files/elm/src/subdir/testfile.elm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eruby/dummy.html.erb b/dotfiles/.vim/plugged/ale/test/test-files/eruby/dummy.html.erb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/app-with-eslint-d/node_modules/.bin/eslint_d b/dotfiles/.vim/plugged/ale/test/test-files/eslint/app-with-eslint-d/node_modules/.bin/eslint_d deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/node_modules/.bin/eslint b/dotfiles/.vim/plugged/ale/test/test-files/eslint/node_modules/.bin/eslint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/other-app/subdir/testfile.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/other-app/subdir/testfile.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/package.json b/dotfiles/.vim/plugged/ale/test/test-files/eslint/package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/.eslintrc.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/.eslintrc.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/eslint/bin/eslint.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/eslint/bin/eslint.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/standard/bin/cmd.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/standard/bin/cmd.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/stylelint/bin/stylelint.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/stylelint/bin/stylelint.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/xo/cli.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/node_modules/xo/cli.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-config/.eslintrc b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-config/.eslintrc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-package-json/node_modules/.gitkeep b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-package-json/node_modules/.gitkeep deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-package-json/package.json b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir-with-package-json/package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.css b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.css deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.ts b/dotfiles/.vim/plugged/ale/test/test-files/eslint/react-app/subdir/testfile.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/yarn2-app/.yarn/sdks/eslint/bin/eslint.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/yarn2-app/.yarn/sdks/eslint/bin/eslint.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/eslint/yarn2-app/subdir/testfile.js b/dotfiles/.vim/plugged/ale/test/test-files/eslint/yarn2-app/subdir/testfile.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/fecs/fecs b/dotfiles/.vim/plugged/ale/test/test-files/fecs/fecs deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/fecs/fecs.exe b/dotfiles/.vim/plugged/ale/test/test-files/fecs/fecs.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/fish/testfile.fish b/dotfiles/.vim/plugged/ale/test/test-files/fish/testfile.fish deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/flow/a/.flowconfig b/dotfiles/.vim/plugged/ale/test/test-files/flow/a/.flowconfig deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/flow/a/sub/dummy b/dotfiles/.vim/plugged/ale/test/test-files/flow/a/sub/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/flow/b/sub/dummy b/dotfiles/.vim/plugged/ale/test/test-files/flow/b/sub/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/fortls-project/.fortls b/dotfiles/.vim/plugged/ale/test/test-files/fortls-project/.fortls deleted file mode 100644 index 2c63c085..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/fortls-project/.fortls +++ /dev/null @@ -1,2 +0,0 @@ -{ -} diff --git a/dotfiles/.vim/plugged/ale/test/test-files/go/go.mod b/dotfiles/.vim/plugged/ale/test/test-files/go/go.mod deleted file mode 100644 index 8b137891..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/go/go.mod +++ /dev/null @@ -1 +0,0 @@ - diff --git a/dotfiles/.vim/plugged/ale/test/test-files/go/go1/prj1/file.go b/dotfiles/.vim/plugged/ale/test/test-files/go/go1/prj1/file.go deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/go/go2/prj2/file.go b/dotfiles/.vim/plugged/ale/test/test-files/go/go2/prj2/file.go deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/go/gopath/bin/gopls b/dotfiles/.vim/plugged/ale/test/test-files/go/gopath/bin/gopls deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/go/gopath/bin/staticcheck b/dotfiles/.vim/plugged/ale/test/test-files/go/gopath/bin/staticcheck deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/go/testfile.go b/dotfiles/.vim/plugged/ale/test/test-files/go/testfile.go deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/go/testfile2.go b/dotfiles/.vim/plugged/ale/test/test-files/go/testfile2.go deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/build-gradle-project/build.gradle b/dotfiles/.vim/plugged/ale/test/test-files/gradle/build-gradle-project/build.gradle deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/build-gradle-project/src/main/kotlin/dummy.kt b/dotfiles/.vim/plugged/ale/test/test-files/gradle/build-gradle-project/src/main/kotlin/dummy.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/gradle b/dotfiles/.vim/plugged/ale/test/test-files/gradle/gradle deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/non-gradle-project/src/main/kotlin/dummy.kt b/dotfiles/.vim/plugged/ale/test/test-files/gradle/non-gradle-project/src/main/kotlin/dummy.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/settings-gradle-project/settings.gradle b/dotfiles/.vim/plugged/ale/test/test-files/gradle/settings-gradle-project/settings.gradle deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/settings-gradle-project/src/main/kotlin/dummy.kt b/dotfiles/.vim/plugged/ale/test/test-files/gradle/settings-gradle-project/src/main/kotlin/dummy.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/build.gradle b/dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/build.gradle deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/settings.gradle b/dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/settings.gradle deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/src/main/kotlin/dummy.kt b/dotfiles/.vim/plugged/ale/test/test-files/gradle/unwrapped-project/src/main/kotlin/dummy.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/build.gradle b/dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/build.gradle deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/gradlew b/dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/gradlew deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/settings.gradle b/dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/settings.gradle deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/src/main/kotlin/dummy.kt b/dotfiles/.vim/plugged/ale/test/test-files/gradle/wrapped-project/src/main/kotlin/dummy.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/.haml-lint.yml b/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/.haml-lint.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/.rubocop.yml b/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/.rubocop.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/subdir/file.haml b/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-and-rubocop/subdir/file.haml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-yml/.haml-lint.yml b/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-yml/.haml-lint.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-yml/subdir/file.haml b/dotfiles/.vim/plugged/ale/test/test-files/hamllint/haml-lint-yml/subdir/file.haml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hamllint/rubocop-yml/.rubocop.yml b/dotfiles/.vim/plugged/ale/test/test-files/hamllint/rubocop-yml/.rubocop.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hamllint/rubocop-yml/subdir/file.haml b/dotfiles/.vim/plugged/ale/test/test-files/hamllint/rubocop-yml/subdir/file.haml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/foo.vhd b/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/foo.vhd deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/.hdl_checker.config b/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/.hdl_checker.config deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/_hdl_checker.config b/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/_hdl_checker.config deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/foo.vhd b/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_config_file/foo.vhd deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_git/files/foo.vhd b/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_git/files/foo.vhd deleted file mode 100644 index 8b137891..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/hdl_server/with_git/files/foo.vhd +++ /dev/null @@ -1 +0,0 @@ - diff --git a/dotfiles/.vim/plugged/ale/test/test-files/hie_paths/file.hs b/dotfiles/.vim/plugged/ale/test/test-files/hie_paths/file.hs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/html_beautify/html-beautify b/dotfiles/.vim/plugged/ale/test/test-files/html_beautify/html-beautify deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/html_beautify/test.html b/dotfiles/.vim/plugged/ale/test/test-files/html_beautify/test.html deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/htmlhint/node_modules/.bin/htmlhint b/dotfiles/.vim/plugged/ale/test/test-files/htmlhint/node_modules/.bin/htmlhint deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/htmlhint/with_config/.htmlhintrc b/dotfiles/.vim/plugged/ale/test/test-files/htmlhint/with_config/.htmlhintrc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ink/story/main.ink b/dotfiles/.vim/plugged/ale/test/test-files/ink/story/main.ink deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/inko/test.inko b/dotfiles/.vim/plugged/ale/test/test-files/inko/test.inko deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/inko/tests/test/test_foo.inko b/dotfiles/.vim/plugged/ale/test/test-files/inko/tests/test/test_foo.inko deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/java/no_main/src/test/java/com/something/dummy b/dotfiles/.vim/plugged/ale/test/test-files/java/no_main/src/test/java/com/something/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/java/with_jaxb/src/main/java/com/something/dummy b/dotfiles/.vim/plugged/ale/test/test-files/java/with_jaxb/src/main/java/com/something/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/java/with_jaxb/src/main/jaxb/com/something/dummy b/dotfiles/.vim/plugged/ale/test/test-files/java/with_jaxb/src/main/jaxb/com/something/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/java/with_main/build/gen/main/java/com/something/dummy b/dotfiles/.vim/plugged/ale/test/test-files/java/with_main/build/gen/main/java/com/something/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/java/with_main/build/gen2/main/java/com/something/dummy b/dotfiles/.vim/plugged/ale/test/test-files/java/with_main/build/gen2/main/java/com/something/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/java/with_main/src/main/java/com/something/dummy b/dotfiles/.vim/plugged/ale/test/test-files/java/with_main/src/main/java/com/something/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/java/with_main/src/test/java/com/something/dummy b/dotfiles/.vim/plugged/ale/test/test-files/java/with_main/src/test/java/com/something/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/javascript/test.js b/dotfiles/.vim/plugged/ale/test/test-files/javascript/test.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/custom_import_map.json b/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/custom_import_map.json deleted file mode 100644 index 9f5a19a1..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/custom_import_map.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "imports": {} -} diff --git a/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/import_map.json b/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/import_map.json deleted file mode 100644 index 9f5a19a1..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/import_map.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "imports": {} -} diff --git a/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/main.js b/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/main.js deleted file mode 100644 index accefceb..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/main.js +++ /dev/null @@ -1 +0,0 @@ -console.log("Hello World"); diff --git a/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/tsconfig.json b/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/tsconfig.json deleted file mode 100644 index 152b034e..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/javascript_deno/tsconfig.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "compilerOptions": { - "allowJs": true, - "esModuleInterop": true, - "experimentalDecorators": true, - "inlineSourceMap": true, - "isolatedModules": true, - "jsx": "react", - "lib": ["deno.window"], - "module": "esnext", - "strict": true, - "target": "esnext", - "useDefineForClassFields": true - }, - "includes": ["main.js"] -} diff --git a/dotfiles/.vim/plugged/ale/test/test-files/json/testfile.json b/dotfiles/.vim/plugged/ale/test/test-files/json/testfile.json deleted file mode 100644 index fe317ebb..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/json/testfile.json +++ /dev/null @@ -1 +0,0 @@ -{"answer":42} diff --git a/dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app-without-jsonlint/src/app.json b/dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app-without-jsonlint/src/app.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app/node_modules/.bin/jsonlint b/dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app/node_modules/.bin/jsonlint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app/src/app.json b/dotfiles/.vim/plugged/ale/test/test-files/jsonlint/app/src/app.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/jsonlint/node_modules/jsonlint/lib/cli.js b/dotfiles/.vim/plugged/ale/test/test-files/jsonlint/node_modules/jsonlint/lib/cli.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/julia/REQUIRE b/dotfiles/.vim/plugged/ale/test/test-files/julia/REQUIRE deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/julia/test.jl b/dotfiles/.vim/plugged/ale/test/test-files/julia/test.jl deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/kotlin/testfile.kt b/dotfiles/.vim/plugged/ale/test/test-files/kotlin/testfile.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/lessc/node_modules/.bin/lessc b/dotfiles/.vim/plugged/ale/test/test-files/lessc/node_modules/.bin/lessc deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/long-line/setup.cfg b/dotfiles/.vim/plugged/ale/test/test-files/long-line/setup.cfg deleted file mode 100644 index 43d7a3a1..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/long-line/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -max-line-length = 90 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/lua/testfile.lua b/dotfiles/.vim/plugged/ale/test/test-files/lua/testfile.lua deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/markdown/testfile.md b/dotfiles/.vim/plugged/ale/test/test-files/markdown/testfile.md deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/mvnw b/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/mvnw deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/mvnw.cmd b/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/mvnw.cmd deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/pom.xml b/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/pom.xml deleted file mode 100644 index 8b137891..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/pom.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/src/main/java/dummy1.java b/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module1/src/main/java/dummy1.java deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/pom.xml b/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/pom.xml deleted file mode 100644 index 8b137891..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/pom.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/src/main/java/dummy2.java b/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-java-project/module2/src/main/java/dummy2.java deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/pom.xml b/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/pom.xml deleted file mode 100644 index 8b137891..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/pom.xml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/src/main/kotlin/dummy.kt b/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/src/main/kotlin/dummy.kt deleted file mode 100644 index 8b137891..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/maven/maven-kotlin-project/src/main/kotlin/dummy.kt +++ /dev/null @@ -1 +0,0 @@ - diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/mvn b/dotfiles/.vim/plugged/ale/test/test-files/maven/mvn deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/maven/non-maven-project/src/main/java/dummy.java b/dotfiles/.vim/plugged/ale/test/test-files/maven/non-maven-project/src/main/java/dummy.java deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/nim/with-git/src/source.nim b/dotfiles/.vim/plugged/ale/test/test-files/nim/with-git/src/source.nim deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ocaml/testfile.ml b/dotfiles/.vim/plugged/ale/test/test-files/ocaml/testfile.ml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ocamllsp/dune-project b/dotfiles/.vim/plugged/ale/test/test-files/ocamllsp/dune-project deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ols/.merlin b/dotfiles/.vim/plugged/ale/test/test-files/ols/.merlin deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ols/node_modules/.bin/ocaml-language-server b/dotfiles/.vim/plugged/ale/test/test-files/ols/node_modules/.bin/ocaml-language-server deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/pascal/test.pas b/dotfiles/.vim/plugged/ale/test/test-files/pascal/test.pas deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-php-cs-fixer/test.php b/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-php-cs-fixer/test.php deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-php-cs-fixer/vendor/bin/php-cs-fixer b/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-php-cs-fixer/vendor/bin/php-cs-fixer deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-phpcbf/foo/test.php b/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-phpcbf/foo/test.php deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-phpcbf/vendor/bin/phpcbf b/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-phpcbf/vendor/bin/phpcbf deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-pint/test.php b/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-pint/test.php deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-pint/vendor/bin/pint b/dotfiles/.vim/plugged/ale/test/test-files/php/project-with-pint/vendor/bin/pint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-without-php-cs-fixer/test.php b/dotfiles/.vim/plugged/ale/test/test-files/php/project-without-php-cs-fixer/test.php deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-without-phpcbf/foo/test.php b/dotfiles/.vim/plugged/ale/test/test-files/php/project-without-phpcbf/foo/test.php deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/project-without-pint/test.php b/dotfiles/.vim/plugged/ale/test/test-files/php/project-without-pint/test.php deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/vendor/bin/php-language-server.php b/dotfiles/.vim/plugged/ale/test/test-files/php/vendor/bin/php-language-server.php deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/with-composer/composer.json b/dotfiles/.vim/plugged/ale/test/test-files/php/with-composer/composer.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/with-composer/vendor/bin/php-language-server.php b/dotfiles/.vim/plugged/ale/test/test-files/php/with-composer/vendor/bin/php-language-server.php deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/php/with-git/vendor/bin/php-language-server.php b/dotfiles/.vim/plugged/ale/test/test-files/php/with-git/vendor/bin/php-language-server.php deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-with-phpcs/foo/test.php b/dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-with-phpcs/foo/test.php deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-with-phpcs/vendor/bin/phpcs b/dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-with-phpcs/vendor/bin/phpcs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-without-phpcs/foo/test.php b/dotfiles/.vim/plugged/ale/test/test-files/phpcs/project-without-phpcs/foo/test.php deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile b/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.css b/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.css deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.js b/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.json b/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.scss b/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.scss deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.ts b/dotfiles/.vim/plugged/ale/test/test-files/prettier/testfile.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/with_config/.prettierrc b/dotfiles/.vim/plugged/ale/test/test-files/prettier/with_config/.prettierrc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/with_config/testfile.js b/dotfiles/.vim/plugged/ale/test/test-files/prettier/with_config/testfile.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/with_prettierignore/.prettierignore b/dotfiles/.vim/plugged/ale/test/test-files/prettier/with_prettierignore/.prettierignore deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/prettier/with_prettierignore/src/testfile.js b/dotfiles/.vim/plugged/ale/test/test-files/prettier/with_prettierignore/src/testfile.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/proto/testfile.proto b/dotfiles/.vim/plugged/ale/test/test-files/proto/testfile.proto deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/psalm/vendor/bin/psalm b/dotfiles/.vim/plugged/ale/test/test-files/psalm/vendor/bin/psalm deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puglint/node_modules/.bin/pug-lint b/dotfiles/.vim/plugged/ale/test/test-files/puglint/node_modules/.bin/pug-lint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puglint/package.json b/dotfiles/.vim/plugged/ale/test/test-files/puglint/package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_dir/.pug-lintrc b/dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_dir/.pug-lintrc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_js_dir/.pug-lintrc.js b/dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_js_dir/.pug-lintrc.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_json_dir/.pug-lintrc.json b/dotfiles/.vim/plugged/ale/test/test-files/puglint/puglint_rc_json_dir/.pug-lintrc.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puppet/dummy.pp b/dotfiles/.vim/plugged/ale/test/test-files/puppet/dummy.pp deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/lib/puppet/types/exampletype.rb b/dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/lib/puppet/types/exampletype.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/metadata.json b/dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/metadata.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/template/template.epp b/dotfiles/.vim/plugged/ale/test/test-files/puppet/new-style-module/template/template.epp deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puppet/old-style-module/manifests/init.pp b/dotfiles/.vim/plugged/ale/test/test-files/puppet/old-style-module/manifests/init.pp deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/puppet/old-style-module/templates/template.epp b/dotfiles/.vim/plugged/ale/test/test-files/puppet/old-style-module/templates/template.epp deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/purescript/bower/Foo.purs b/dotfiles/.vim/plugged/ale/test/test-files/purescript/bower/Foo.purs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/purescript/bower/bower.json b/dotfiles/.vim/plugged/ale/test/test-files/purescript/bower/bower.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/purescript/psc-package/Foo.purs b/dotfiles/.vim/plugged/ale/test/test-files/purescript/psc-package/Foo.purs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/purescript/psc-package/psc-package.json b/dotfiles/.vim/plugged/ale/test/test-files/purescript/psc-package/psc-package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/purescript/spago/Foo.purs b/dotfiles/.vim/plugged/ale/test/test-files/purescript/spago/Foo.purs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/purescript/spago/spago.dhall b/dotfiles/.vim/plugged/ale/test/test-files/purescript/spago/spago.dhall deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/MANIFEST.in b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/MANIFEST.in deleted file mode 100644 index 4617b0eb..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/MANIFEST.in +++ /dev/null @@ -1,3 +0,0 @@ -include README.md -include *.ini *.cfg *.txt -include requirements/*.txt diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/namespace/foo/__init__.py b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/namespace/foo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/namespace/foo/bar.py b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_manifest/namespace/foo/bar.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/namespace/foo/__init__.py b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/namespace/foo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/namespace/foo/bar.py b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/namespace/foo/bar.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/pytest.ini b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/pytest.ini deleted file mode 100644 index 1433c6c6..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_pytest/pytest.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pytest] -DJANGO_SETTINGS_MODULE=foo.settings diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/namespace/foo/__init__.py b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/namespace/foo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/namespace/foo/bar.py b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/namespace/foo/bar.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/setup.cfg b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/setup.cfg deleted file mode 100644 index 791f075d..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_setup/setup.cfg +++ /dev/null @@ -1,2 +0,0 @@ -[flake8] -max-line-length = 119 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/namespace/foo/__init__.py b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/namespace/foo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/namespace/foo/bar.py b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/namespace/foo/bar.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/tox.ini b/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/tox.ini deleted file mode 100644 index edd8788c..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/python/namespace_package_tox/tox.ini +++ /dev/null @@ -1,3 +0,0 @@ -[tox] -envlist = - py352 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/COMMIT_EDITMSG b/dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/COMMIT_EDITMSG deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/__init__.py b/dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/bar.py b/dotfiles/.vim/plugged/ale/test/test-files/python/no_virtualenv/subdir/foo/bar.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/pipenv/Pipfile.lock b/dotfiles/.vim/plugged/ale/test/test-files/python/pipenv/Pipfile.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/poetry/poetry.lock b/dotfiles/.vim/plugged/ale/test/test-files/python/poetry/poetry.lock deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/.pyre_configuration.local b/dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/.pyre_configuration.local deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/foo/__init__.py b/dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/foo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/foo/bar.py b/dotfiles/.vim/plugged/ale/test/test-files/python/pyre_configuration_dir/foo/bar.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/python-package-project/.flake8 b/dotfiles/.vim/plugged/ale/test/test-files/python/python-package-project/.flake8 deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/python-package-project/package-name/module.py b/dotfiles/.vim/plugged/ale/test/test-files/python/python-package-project/package-name/module.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/.bandit b/dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/.bandit deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/namespace/foo/__init__.py b/dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/namespace/foo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/namespace/foo/bar.py b/dotfiles/.vim/plugged/ale/test/test-files/python/with_bandit/namespace/foo/bar.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/mypy.ini b/dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/mypy.ini deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/tests/pytest.ini b/dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/tests/pytest.ini deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/tests/testsubfolder/my_tests.py b/dotfiles/.vim/plugged/ale/test/test-files/python/with_mypy_ini_and_pytest_ini/tests/testsubfolder/my_tests.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/dir_with_yapf_config/.style.yapf b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/dir_with_yapf_config/.style.yapf deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/activate b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/activate deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autoflake.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autoflake.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autoimport.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autoimport.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autopep8.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/autopep8.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/black.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/black.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/flake8.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/flake8.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/flakehell.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/flakehell.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/gitlint.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/gitlint.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/isort.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/isort.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/mypy.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/mypy.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pyflakes.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pyflakes.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylama.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylama.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylint.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylint.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylsp.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pylsp.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pyre.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/pyre.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/reorder-python-imports.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/reorder-python-imports.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/tidy-imports.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/tidy-imports.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/unimport.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/unimport.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/vulture.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/vulture.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/yamlfix.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/yamlfix.exe deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/yapf.exe b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/Scripts/yapf.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/activate b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/activate deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autoflake b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autoflake deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autoimport b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autoimport deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autopep8 b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/autopep8 deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/black b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/black deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/flake8 b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/flake8 deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/flakehell b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/flakehell deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/gitlint b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/gitlint deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/isort b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/isort deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/mypy b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/mypy deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pyflakes b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pyflakes deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylama b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylama deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylint b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylint deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylsp b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pylsp deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pyre b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/pyre deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/reorder-python-imports b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/reorder-python-imports deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/tidy-imports b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/tidy-imports deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/unimport b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/unimport deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/vulture b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/vulture deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/yamlfix b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/yamlfix deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/yapf b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/env/bin/yapf deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/COMMIT_EDITMSG b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/COMMIT_EDITMSG deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/__init__.py b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/bar.py b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/bar.py deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/bar.pyi b/dotfiles/.vim/plugged/ale/test/test-files/python/with_virtualenv/subdir/foo/bar.pyi deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/r/.Rprofile b/dotfiles/.vim/plugged/ale/test/test-files/r/.Rprofile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/foo.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/foo.rkt deleted file mode 100644 index 622f3eea..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/foo.rkt +++ /dev/null @@ -1,3 +0,0 @@ -#lang racket/base - -(displayln "foo") diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/init.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/init.rkt deleted file mode 100644 index e0c94f27..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/c/init.rkt +++ /dev/null @@ -1 +0,0 @@ -#lang info diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/foo.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/foo.rkt deleted file mode 100644 index 622f3eea..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/foo.rkt +++ /dev/null @@ -1,3 +0,0 @@ -#lang racket/base - -(displayln "foo") diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/init.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/init.rkt deleted file mode 100644 index e0c94f27..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/b/init.rkt +++ /dev/null @@ -1 +0,0 @@ -#lang info diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/foo.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/foo.rkt deleted file mode 100644 index 622f3eea..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/foo.rkt +++ /dev/null @@ -1,3 +0,0 @@ -#lang racket/base - -(displayln "foo") diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/init.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/init.rkt deleted file mode 100644 index e0c94f27..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/a/init.rkt +++ /dev/null @@ -1 +0,0 @@ -#lang info diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/foo.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/foo.rkt deleted file mode 100644 index 622f3eea..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/foo.rkt +++ /dev/null @@ -1,3 +0,0 @@ -#lang racket/base - -(displayln "foo") diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/init.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/init.rkt deleted file mode 100644 index e0c94f27..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/many-inits/init.rkt +++ /dev/null @@ -1 +0,0 @@ -#lang info diff --git a/dotfiles/.vim/plugged/ale/test/test-files/racket/simple-script/foo.rkt b/dotfiles/.vim/plugged/ale/test/test-files/racket/simple-script/foo.rkt deleted file mode 100644 index 622f3eea..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/racket/simple-script/foo.rkt +++ /dev/null @@ -1,3 +0,0 @@ -#lang racket/base - -(displayln "foo") diff --git a/dotfiles/.vim/plugged/ale/test/test-files/reasonml/bsconfig.json b/dotfiles/.vim/plugged/ale/test/test-files/reasonml/bsconfig.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/reasonml/testfile.re b/dotfiles/.vim/plugged/ale/test/test-files/reasonml/testfile.re deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/remark_lint/with_bin_path/node_modules/.bin/remark b/dotfiles/.vim/plugged/ale/test/test-files/remark_lint/with_bin_path/node_modules/.bin/remark deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/dummy.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/dummy.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/not_a_rails_app/file.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/not_a_rails_app/file.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/dummy.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/dummy.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/models/thing.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/models/thing.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/views/my_great_view.html.erb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/app/views/my_great_view.html.erb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/config/dummy.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/config/dummy.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/db/dummy.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_rails_app/db/dummy.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app1/Rakefile b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app1/Rakefile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app1/lib/file.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app1/lib/file.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app2/Gemfile b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app2/Gemfile deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app2/lib/file.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app2/lib/file.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app3/.solargraph.yml b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app3/.solargraph.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app3/lib/file.rb b/dotfiles/.vim/plugged/ale/test/test-files/ruby/valid_ruby_app3/lib/file.rb deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/with_config/.rubocop.yml b/dotfiles/.vim/plugged/ale/test/test-files/ruby/with_config/.rubocop.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/ruby/with_config/.standard.yml b/dotfiles/.vim/plugged/ale/test/test-files/ruby/with_config/.standard.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/rust/cargo/Cargo.toml b/dotfiles/.vim/plugged/ale/test/test-files/rust/cargo/Cargo.toml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/rust/cargo/testfile.rs b/dotfiles/.vim/plugged/ale/test/test-files/rust/cargo/testfile.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/rust/rust-project/rust-project.json b/dotfiles/.vim/plugged/ale/test/test-files/rust/rust-project/rust-project.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/rust/rust-project/testfile.rs b/dotfiles/.vim/plugged/ale/test/test-files/rust/rust-project/testfile.rs deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/sasslint/with-bin/node_modules/.bin/sass-lint b/dotfiles/.vim/plugged/ale/test/test-files/sasslint/with-bin/node_modules/.bin/sass-lint deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/sasslint/with-source/node_modules/sass-lint/bin/sass-lint.js b/dotfiles/.vim/plugged/ale/test/test-files/sasslint/with-source/node_modules/sass-lint/bin/sass-lint.js deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/scala/dummy.scala b/dotfiles/.vim/plugged/ale/test/test-files/scala/dummy.scala deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/scala/invalid_sbt_project/Main.scala b/dotfiles/.vim/plugged/ale/test/test-files/scala/invalid_sbt_project/Main.scala deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/scala/valid_sbt_project/Main.scala b/dotfiles/.vim/plugged/ale/test/test-files/scala/valid_sbt_project/Main.scala deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/scala/valid_sbt_project/build.sbt b/dotfiles/.vim/plugged/ale/test/test-files/scala/valid_sbt_project/build.sbt deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/slimlint/.rubocop.yml b/dotfiles/.vim/plugged/ale/test/test-files/slimlint/.rubocop.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/slimlint/subdir/file.slim b/dotfiles/.vim/plugged/ale/test/test-files/slimlint/subdir/file.slim deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/foo.sml b/dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/foo.sml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/path/to/bar.sml b/dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/path/to/bar.sml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/sources.cm b/dotfiles/.vim/plugged/ale/test/test-files/smlnj/cm/sources.cm deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/smlnj/file/qux.sml b/dotfiles/.vim/plugged/ale/test/test-files/smlnj/file/qux.sml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/solhint/Contract.sol b/dotfiles/.vim/plugged/ale/test/test-files/solhint/Contract.sol deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/solhint/node_modules/.bin/solhint b/dotfiles/.vim/plugged/ale/test/test-files/solhint/node_modules/.bin/solhint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/solhint/node_modules/solhint/index.js b/dotfiles/.vim/plugged/ale/test/test-files/solhint/node_modules/solhint/index.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/solhint/package.json b/dotfiles/.vim/plugged/ale/test/test-files/solhint/package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/spectral/node_modules/.bin/spectral b/dotfiles/.vim/plugged/ale/test/test-files/spectral/node_modules/.bin/spectral deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/spectral/openapi.yaml b/dotfiles/.vim/plugged/ale/test/test-files/spectral/openapi.yaml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/stack/stack.yaml b/dotfiles/.vim/plugged/ale/test/test-files/stack/stack.yaml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/standard/with-bin/node_modules/.bin/standard b/dotfiles/.vim/plugged/ale/test/test-files/standard/with-bin/node_modules/.bin/standard deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/standard/with-cmd/node_modules/standard/bin/cmd.js b/dotfiles/.vim/plugged/ale/test/test-files/standard/with-cmd/node_modules/standard/bin/cmd.js deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/stylelint/node_modules/.bin/stylelint b/dotfiles/.vim/plugged/ale/test/test-files/stylelint/node_modules/.bin/stylelint deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swaglint/docs/swagger.yaml b/dotfiles/.vim/plugged/ale/test/test-files/swaglint/docs/swagger.yaml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swaglint/node_modules/.bin/swaglint b/dotfiles/.vim/plugged/ale/test/test-files/swaglint/node_modules/.bin/swaglint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swift/dummy.swift b/dotfiles/.vim/plugged/ale/test/test-files/swift/dummy.swift deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swift/non-swift-package-project/src/folder/dummy.swift b/dotfiles/.vim/plugged/ale/test/test-files/swift/non-swift-package-project/src/folder/dummy.swift deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/.swift-format b/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/.swift-format deleted file mode 100644 index 19fb8b96..00000000 --- a/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/.swift-format +++ /dev/null @@ -1,10 +0,0 @@ -{ - "version": 1, - "lineLength": 100, - "indentation": { - "spaces": 4 - }, - "respectsExistingLineBreaks": true, - "lineBreakBeforeControlFlowKeywords": true, - "lineBreakBeforeEachArgument": true -} diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/Package.swift b/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/Package.swift deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/src/folder/dummy.swift b/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project-with-config/src/folder/dummy.swift deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project/Package.swift b/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project/Package.swift deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project/src/folder/dummy.swift b/dotfiles/.vim/plugged/ale/test/test-files/swift/swift-package-project/src/folder/dummy.swift deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods-and-react-native/Pods/SwiftLint/swiftlint b/dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods-and-react-native/Pods/SwiftLint/swiftlint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods-and-react-native/ios/Pods/SwiftLint/swiftlint b/dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods-and-react-native/ios/Pods/SwiftLint/swiftlint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods/Pods/SwiftLint/swiftlint b/dotfiles/.vim/plugged/ale/test/test-files/swiftlint/cocoapods/Pods/SwiftLint/swiftlint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/swiftlint/react-native/ios/Pods/SwiftLint/swiftlint b/dotfiles/.vim/plugged/ale/test/test-files/swiftlint/react-native/ios/Pods/SwiftLint/swiftlint deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/terraform/.terraform/dummy b/dotfiles/.vim/plugged/ale/test/test-files/terraform/.terraform/dummy deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/terraform/main.tf b/dotfiles/.vim/plugged/ale/test/test-files/terraform/main.tf deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tex/sample1.tex b/dotfiles/.vim/plugged/ale/test/test-files/tex/sample1.tex deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tex/sample2.tex b/dotfiles/.vim/plugged/ale/test/test-files/tex/sample2.tex deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tex/testfile.tex b/dotfiles/.vim/plugged/ale/test/test-files/tex/testfile.tex deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/textlint/with_bin_path/node_modules/.bin/textlint b/dotfiles/.vim/plugged/ale/test/test-files/textlint/with_bin_path/node_modules/.bin/textlint deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js b/dotfiles/.vim/plugged/ale/test/test-files/textlint/with_textlint_bin_path/node_modules/textlint/bin/textlint.js deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tflint/foo/.tflint.hcl b/dotfiles/.vim/plugged/ale/test/test-files/tflint/foo/.tflint.hcl deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tflint/foo/bar.tf b/dotfiles/.vim/plugged/ale/test/test-files/tflint/foo/bar.tf deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tfsec/json/.tfsec/config.json b/dotfiles/.vim/plugged/ale/test/test-files/tfsec/json/.tfsec/config.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tfsec/json/main.tf b/dotfiles/.vim/plugged/ale/test/test-files/tfsec/json/main.tf deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tfsec/yml/.tfsec/config.yml b/dotfiles/.vim/plugged/ale/test/test-files/tfsec/yml/.tfsec/config.yml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tfsec/yml/main.tf b/dotfiles/.vim/plugged/ale/test/test-files/tfsec/yml/main.tf deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tidy/.tidyrc b/dotfiles/.vim/plugged/ale/test/test-files/tidy/.tidyrc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tidy/test.html b/dotfiles/.vim/plugged/ale/test/test-files/tidy/test.html deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tidy/tidy b/dotfiles/.vim/plugged/ale/test/test-files/tidy/tidy deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tidy/tidy.exe b/dotfiles/.vim/plugged/ale/test/test-files/tidy/tidy.exe deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/top/ale-special-directory-name-dont-use-this-please/empty-file b/dotfiles/.vim/plugged/ale/test/test-files/top/ale-special-directory-name-dont-use-this-please/empty-file deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/top/example.ini b/dotfiles/.vim/plugged/ale/test/test-files/top/example.ini deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/top/middle/bottom/dummy.txt b/dotfiles/.vim/plugged/ale/test/test-files/top/middle/bottom/dummy.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/file1.ts b/dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/file1.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/file2.ts b/dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/file2.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/level-2/file3.ts b/dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/level-2/file3.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/tsconfig.json b/dotfiles/.vim/plugged/ale/test/test-files/tsserver/src/level-1/tsconfig.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/tsserver/tsconfig.json b/dotfiles/.vim/plugged/ale/test/test-files/tsserver/tsconfig.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/typescript/custom_import_map.json b/dotfiles/.vim/plugged/ale/test/test-files/typescript/custom_import_map.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/typescript/import_map.json b/dotfiles/.vim/plugged/ale/test/test-files/typescript/import_map.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/typescript/test.ts b/dotfiles/.vim/plugged/ale/test/test-files/typescript/test.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/typescript/tsconfig.json b/dotfiles/.vim/plugged/ale/test/test-files/typescript/tsconfig.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/vim/invalid_vim_project/test.vim b/dotfiles/.vim/plugged/ale/test/test-files/vim/invalid_vim_project/test.vim deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/vim/node_modules/.bin/vim-language-server b/dotfiles/.vim/plugged/ale/test/test-files/vim/node_modules/.bin/vim-language-server deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_autoload/autoload/test.vim b/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_autoload/autoload/test.vim deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_autoload/test.vim b/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_autoload/test.vim deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_initvim/init.vim b/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_initvim/init.vim deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_plugin/plugin/test.vim b/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_plugin/plugin/test.vim deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_plugin/test.vim b/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_plugin/test.vim deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_vimrc/.vimrc b/dotfiles/.vim/plugged/ale/test/test-files/vim/path_with_vimrc/.vimrc deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/volar/node_modules/.bin/vue-language-server b/dotfiles/.vim/plugged/ale/test/test-files/volar/node_modules/.bin/vue-language-server deleted file mode 100755 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/volar/node_modules/typescript/lib/tsserverlibrary.js b/dotfiles/.vim/plugged/ale/test/test-files/volar/node_modules/typescript/lib/tsserverlibrary.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/volar/package.json b/dotfiles/.vim/plugged/ale/test/test-files/volar/package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/volar/src/App.vue b/dotfiles/.vim/plugged/ale/test/test-files/volar/src/App.vue deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/write-good/node-modules-2/node_modules/write-good/bin/write-good.js b/dotfiles/.vim/plugged/ale/test/test-files/write-good/node-modules-2/node_modules/write-good/bin/write-good.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/write-good/node-modules/node_modules/.bin/write-good b/dotfiles/.vim/plugged/ale/test/test-files/write-good/node-modules/node_modules/.bin/write-good deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/node_modules/xo/cli.js b/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/node_modules/xo/cli.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/package.json b/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/index.js b/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/index.js deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/index.ts b/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/index.ts deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/package.json b/dotfiles/.vim/plugged/ale/test/test-files/xo/monorepo/packages/a/package.json deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/yaml/test.yaml b/dotfiles/.vim/plugged/ale/test/test-files/yaml/test.yaml deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test-files/zig/build.zig b/dotfiles/.vim/plugged/ale/test/test-files/zig/build.zig deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/test_ale_has.vader b/dotfiles/.vim/plugged/ale/test/test_ale_has.vader deleted file mode 100644 index ff5d640b..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ale_has.vader +++ /dev/null @@ -1,13 +0,0 @@ -Execute(Checks for versions below the current version should succeed): - AssertEqual 1, ale#Has('ale-3.2.0') - AssertEqual 1, ale#Has('ale-3.1.0') - AssertEqual 1, ale#Has('ale-3.0.0') - AssertEqual 1, ale#Has('ale-2.7.0') - AssertEqual 1, ale#Has('ale-2.6.0') - AssertEqual 1, ale#Has('ale-2.5.0') - AssertEqual 1, ale#Has('ale-2.4.0') - AssertEqual 1, ale#Has('ALE-2.2.1') - AssertEqual 1, ale#Has('ALE-1.0.0') - -Execute(Checks for newer versions should fail): - AssertEqual 0, ale#Has('ALE-20.0.0') diff --git a/dotfiles/.vim/plugged/ale/test/test_ale_info.vader b/dotfiles/.vim/plugged/ale/test/test_ale_info.vader deleted file mode 100644 index 2e0965a9..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ale_info.vader +++ /dev/null @@ -1,777 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_cache_executable_check_failures - Save g:ale_change_sign_column_color - Save g:ale_command_wrapper - Save g:ale_completion_delay - Save g:ale_completion_enabled - Save g:ale_completion_max_suggestions - Save g:ale_disable_lsp - Save g:ale_echo_cursor - Save g:ale_echo_msg_error_str - Save g:ale_echo_msg_format - Save g:ale_echo_msg_info_str - Save g:ale_echo_msg_warning_str - Save g:ale_fix_on_save - Save g:ale_fixers - Save g:ale_history_enabled - Save g:ale_history_log_output - Save g:ale_keep_list_window_open - Save g:ale_lint_delay - Save g:ale_lint_on_enter - Save g:ale_lint_on_filetype_changed - Save g:ale_lint_on_insert_leave - Save g:ale_lint_on_save - Save g:ale_lint_on_text_changed - Save g:ale_linters - Save g:ale_linters_explicit - Save g:ale_linters_ignore - Save g:ale_list_vertical - Save g:ale_list_window_size - Save g:ale_loclist_msg_format - Save g:ale_lsp_error_messages - Save g:ale_max_buffer_history_size - Save g:ale_max_signs - Save g:ale_maximum_file_size - Save g:ale_open_list - Save g:ale_pattern_options - Save g:ale_pattern_options_enabled - Save g:ale_root - Save g:ale_set_balloons - Save g:ale_set_highlights - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_set_signs - Save g:ale_sign_column_always - Save g:ale_sign_error - Save g:ale_sign_info - Save g:ale_sign_offset - Save g:ale_sign_style_error - Save g:ale_sign_style_warning - Save g:ale_sign_warning - Save g:ale_sign_highlight_linenrs - Save g:ale_statusline_format - Save g:ale_type_map - Save g:ale_use_global_executables - Save g:ale_virtualtext_cursor - Save g:ale_warn_about_trailing_blank_lines - Save g:ale_warn_about_trailing_whitespace - - unlet! b:ale_history - - let g:ale_buffer_info = {} - let g:ale_cache_executable_check_failures = 0 - let g:ale_change_sign_column_color = 0 - let g:ale_command_wrapper = '' - let g:ale_completion_delay = 100 - let g:ale_completion_enabled = 0 - let g:ale_completion_max_suggestions = 50 - let g:ale_disable_lsp = 0 - let g:ale_echo_cursor = 1 - let g:ale_echo_msg_error_str = 'Error' - let g:ale_echo_msg_format = '%code: %%s' - let g:ale_echo_msg_info_str = 'Info' - let g:ale_echo_msg_warning_str = 'Warning' - let g:ale_fix_on_save = 0 - let g:ale_history_enabled = 1 - let g:ale_history_log_output = 1 - let g:ale_keep_list_window_open = 0 - let g:ale_lint_delay = 200 - let g:ale_lint_on_enter = 1 - let g:ale_lint_on_filetype_changed = 1 - let g:ale_lint_on_insert_leave = 1 - let g:ale_lint_on_save = 1 - let g:ale_lint_on_text_changed = 'normal' - let g:ale_linters_explicit = 0 - let g:ale_linters_ignore = {'python': ['pyright']} - let g:ale_list_vertical = 0 - let g:ale_list_window_size = 10 - let g:ale_loclist_msg_format = '%code: %%s' - let g:ale_lsp_error_messages = {} - let g:ale_max_buffer_history_size = 20 - let g:ale_max_signs = -1 - let g:ale_maximum_file_size = 0 - let g:ale_open_list = 0 - let g:ale_pattern_options = {} - let g:ale_pattern_options_enabled = 0 - let g:ale_root = {} - let g:ale_set_balloons = 0 - let g:ale_set_highlights = 1 - let g:ale_set_loclist = 1 - let g:ale_set_quickfix = 0 - let g:ale_set_signs = 1 - let g:ale_sign_column_always = 0 - let g:ale_sign_error = '>>' - let g:ale_sign_info = '--' - let g:ale_sign_offset = 1000000 - let g:ale_sign_style_error = '>>' - let g:ale_sign_style_warning = '--' - let g:ale_sign_warning = '--' - let g:ale_sign_highlight_linenrs = 0 - let g:ale_statusline_format = ['%d error(s)', '%d warning(s)', 'OK'] - let g:ale_type_map = {} - let g:ale_use_global_executables = v:null - let g:ale_virtualtext_cursor = 0 - let g:ale_warn_about_trailing_blank_lines = 1 - let g:ale_warn_about_trailing_whitespace = 1 - - let g:testlinter1 = {'name': 'testlinter1', 'executable': 'testlinter1', 'command': 'testlinter1', 'callback': 'testCB1', 'output_stream': 'stdout'} - let g:testlinter2 = {'name': 'testlinter2', 'executable': 'testlinter2', 'command': 'testlinter2', 'callback': 'testCB2', 'output_stream': 'stdout'} - - call ale#engine#ResetExecutableCache() - call ale#linter#Reset() - call ale#linter#PreventLoading('testft') - let g:ale_linters = {} - let g:ale_fixers = {} - let g:ale_linter_aliases = {} - let g:ale_buffer_info = {} - let g:fixer_lines = [ - \ ' Suggested Fixers: ', - \ ' ''foo'' - Fix things the foo way', - \] - let g:variables_lines = [ - \ ' Linter Variables:', - \ '', - \] - let g:globals_lines = [ - \ ' Global Variables:', - \ '', - \ 'let g:ale_cache_executable_check_failures = 0', - \ 'let g:ale_change_sign_column_color = 0', - \ 'let g:ale_command_wrapper = ''''', - \ 'let g:ale_completion_delay = 100', - \ 'let g:ale_completion_enabled = 0', - \ 'let g:ale_completion_max_suggestions = 50', - \ 'let g:ale_disable_lsp = 0', - \ 'let g:ale_echo_cursor = 1', - \ 'let g:ale_echo_msg_error_str = ''Error''', - \ 'let g:ale_echo_msg_format = ''%code: %%s''', - \ 'let g:ale_echo_msg_info_str = ''Info''', - \ 'let g:ale_echo_msg_warning_str = ''Warning''', - \ 'let g:ale_enabled = 1', - \ 'let g:ale_fix_on_save = 0', - \ 'let g:ale_fixers = {}', - \ 'let g:ale_history_enabled = 1', - \ 'let g:ale_history_log_output = 1', - \ 'let g:ale_keep_list_window_open = 0', - \ 'let g:ale_lint_delay = 200', - \ 'let g:ale_lint_on_enter = 1', - \ 'let g:ale_lint_on_filetype_changed = 1', - \ 'let g:ale_lint_on_insert_leave = 1', - \ 'let g:ale_lint_on_save = 1', - \ 'let g:ale_lint_on_text_changed = ''normal''', - \ 'let g:ale_linter_aliases = {}', - \ 'let g:ale_linters = {}', - \ 'let g:ale_linters_explicit = 0', - \ 'let g:ale_linters_ignore = {''python'': [''pyright'']}', - \ 'let g:ale_list_vertical = 0', - \ 'let g:ale_list_window_size = 10', - \ 'let g:ale_loclist_msg_format = ''%code: %%s''', - \ 'let g:ale_max_buffer_history_size = 20', - \ 'let g:ale_max_signs = -1', - \ 'let g:ale_maximum_file_size = 0', - \ 'let g:ale_open_list = 0', - \ 'let g:ale_pattern_options = {}', - \ 'let g:ale_pattern_options_enabled = 0', - \ 'let g:ale_root = {}', - \ 'let g:ale_set_balloons = 0', - \ 'let g:ale_set_highlights = 1', - \ 'let g:ale_set_loclist = 1', - \ 'let g:ale_set_quickfix = 0', - \ 'let g:ale_set_signs = 1', - \ 'let g:ale_sign_column_always = 0', - \ 'let g:ale_sign_error = ''>>''', - \ 'let g:ale_sign_info = ''--''', - \ 'let g:ale_sign_offset = 1000000', - \ 'let g:ale_sign_style_error = ''>>''', - \ 'let g:ale_sign_style_warning = ''--''', - \ 'let g:ale_sign_warning = ''--''', - \ 'let g:ale_sign_highlight_linenrs = 0', - \ 'let g:ale_statusline_format = [''%d error(s)'', ''%d warning(s)'', ''OK'']', - \ 'let g:ale_type_map = {}', - \ 'let g:ale_use_global_executables = v:null', - \ 'let g:ale_virtualtext_cursor = 0', - \ 'let g:ale_warn_about_trailing_blank_lines = 1', - \ 'let g:ale_warn_about_trailing_whitespace = 1', - \] - let g:command_header = [ - \ ' Command History:', - \] - - function CheckInfo(expected_list) abort - let l:output = '' - - redir => l:output - noautocmd silent ALEInfo - redir END - - AssertEqual a:expected_list, split(l:output, "\n") - endfunction - - call ale#test#SetDirectory('/testplugin/test') - - call ale#fix#registry#Clear() - call ale#fix#registry#Add('foo', 'x', [], 'Fix things the foo way') - -After: - Restore - - if exists('g:info_test_file') && filereadable(g:info_test_file) - call delete(g:info_test_file) - endif - - unlet! g:testlinter1 - unlet! g:testlinter2 - unlet! b:ale_history - unlet! b:ale_linters - unlet! g:output - unlet! g:fixer_lines - unlet! g:variables_lines - unlet! g:globals_string - unlet! g:command_header - unlet! g:ale_testft_testlinter1_foo - unlet! g:ale_testft_testlinter1_bar - unlet! g:ale_testft2_testlinter2_foo - unlet! b:ale_testft2_testlinter2_foo - unlet! g:ale_testft2_testlinter2_bar - unlet! g:info_test_file - unlet! g:ale_testft_build_dir_names - unlet! g:ale_testft_testlinter2_option - delfunction CheckInfo - - call ale#test#RestoreDirectory() - call ale#fix#registry#ResetToDefaults() - -Given nolintersft (Empty buffer with no linters): -Execute (ALEInfo with no linters should return the right output): - call CheckInfo( - \ [ - \ ' Current Filetype: nolintersft', - \ 'Available Linters: []', - \ ' Enabled Linters: []', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given (Empty buffer with no filetype): -Execute (ALEInfo should return buffer-local global ALE settings): - let b:ale_linters = {'x': ['y']} - - call insert( - \ g:globals_lines, - \ 'let b:ale_linters = {''x'': [''y'']}', - \ index(g:globals_lines, 'let g:ale_linters = {}') + 1 - \) - - call CheckInfo( - \ [ - \ ' Current Filetype: ', - \ 'Available Linters: []', - \ ' Enabled Linters: []', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given (Empty buffer with no filetype): -Execute (ALEInfo with no filetype should return the right output): - call CheckInfo( - \ [ - \ ' Current Filetype: ', - \ 'Available Linters: []', - \ ' Enabled Linters: []', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given testft (Empty buffer): -Execute (ALEInfo with a single linter should return the right output): - call ale#linter#Define('testft', g:testlinter1) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft', - \ 'Available Linters: [''testlinter1'']', - \ ' Enabled Linters: [''testlinter1'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given testft (Empty buffer): -Execute (ALEInfo with two linters should return the right output): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given testft (Empty buffer): -Execute (ALEInfo should calculate enabled linters correctly): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - let g:ale_linters = {'testft': ['testlinter2']} - - let g:globals_lines[index(g:globals_lines, 'let g:ale_linters = {}')] - \ = 'let g:ale_linters = {''testft'': [''testlinter2'']}' - - call CheckInfo( - \ [ - \ ' Current Filetype: testft', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given testft (Empty buffer): -Execute (ALEInfo should only return linters for current filetype): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft', - \ 'Available Linters: [''testlinter1'']', - \ ' Enabled Linters: [''testlinter1'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given testft.testft2 (Empty buffer with two filetypes): -Execute (ALEInfo with compound filetypes should return linters for both of them): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given testft.testft2 (Empty buffer with two filetypes): -Execute (ALEInfo should return appropriately named global variables): - let g:ale_testft_testlinter1_foo = 'abc' - let g:ale_testft_testlinter1_bar = ['abc'] - let g:ale_testft2_testlinter2_foo = 123 - let g:ale_testft2_testlinter2_bar = {'x': 'y'} - - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + [ - \ ' Linter Variables:', - \ '', - \ 'let g:ale_testft2_testlinter2_bar = {''x'': ''y''}', - \ 'let g:ale_testft2_testlinter2_foo = 123', - \ 'let g:ale_testft_testlinter1_bar = [''abc'']', - \ 'let g:ale_testft_testlinter1_foo = ''abc''', - \ ] - \ + g:globals_lines - \ + g:command_header - \) - -Execute (ALEInfoToFile should write to a file correctly): - let g:ale_testft_testlinter1_foo = 'abc' - let g:ale_testft_testlinter1_bar = ['abc'] - let g:ale_testft2_testlinter2_foo = 123 - let g:ale_testft2_testlinter2_bar = {'x': 'y'} - - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - let g:info_test_file = tempname() - execute 'ALEInfoToFile ' . fnameescape(g:info_test_file) - - AssertEqual - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + [ - \ ' Linter Variables:', - \ '', - \ 'let g:ale_testft2_testlinter2_bar = {''x'': ''y''}', - \ 'let g:ale_testft2_testlinter2_foo = 123', - \ 'let g:ale_testft_testlinter1_bar = [''abc'']', - \ 'let g:ale_testft_testlinter1_foo = ''abc''', - \ ] - \ + g:globals_lines - \ + g:command_header, - \ readfile(g:info_test_file) - -Given testft.testft2 (Empty buffer with two filetypes): -Execute (ALEInfo should buffer-local linter variables): - let g:ale_testft2_testlinter2_foo = 123 - let b:ale_testft2_testlinter2_foo = 456 - - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + [ - \ ' Linter Variables:', - \ '', - \ 'let g:ale_testft2_testlinter2_foo = 123', - \ 'let b:ale_testft2_testlinter2_foo = 456', - \ ] - \ + g:globals_lines - \ + g:command_header - \) - -Given testft.testft2 (Empty buffer with two filetypes): -Execute (ALEInfo should output linter aliases): - let g:testlinter1.aliases = ['testftalias1', 'testftalias2'] - let g:testlinter2.aliases = ['testftalias3', 'testftalias4'] - - let g:ale_testft2_testlinter2_foo = 123 - let b:ale_testft2_testlinter2_foo = 456 - - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Linter Aliases:', - \ '''testlinter1'' -> [''testftalias1'', ''testftalias2'']', - \ '''testlinter2'' -> [''testftalias3'', ''testftalias4'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + [ - \ ' Linter Variables:', - \ '', - \ 'let g:ale_testft2_testlinter2_foo = 123', - \ 'let b:ale_testft2_testlinter2_foo = 456', - \ ] - \ + g:globals_lines - \ + g:command_header - \) - -Given testft.testft2 (Empty buffer with two filetypes): -Execute (ALEInfo should return command history): - let b:ale_history = [ - \ {'status': 'started', 'job_id': 347, 'command': 'first command'}, - \ {'status': 'started', 'job_id': 347, 'command': ['/bin/bash', '\c', 'last command']}, - \] - - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \ + [ - \ '', - \ '(started) ''first command''', - \ '(started) [''/bin/bash'', ''\c'', ''last command'']', - \ ] - \) - -Given testft.testft2 (Empty buffer with two filetypes): -Execute (ALEInfo command history should print exit codes correctly): - let b:ale_history = [ - \ {'status': 'finished', 'exit_code': 0, 'job_id': 347, 'command': 'first command'}, - \ {'status': 'finished', 'exit_code': 1, 'job_id': 347, 'command': ['/bin/bash', '\c', 'last command']}, - \] - - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \ + [ - \ '', - \ '(finished - exit code 0) ''first command''', - \ '(finished - exit code 1) [''/bin/bash'', ''\c'', ''last command'']', - \ ] - \) - -Given testft.testft2 (Empty buffer with two filetypes): -Execute (ALEInfo command history should print command output if logging is on): - let g:ale_history_log_output = 1 - - let b:ale_history = [ - \ { - \ 'status': 'finished', - \ 'exit_code': 0, - \ 'job_id': 347, - \ 'command': 'first command', - \ 'output': ['some', 'first command output'], - \ }, - \ { - \ 'status': 'finished', - \ 'exit_code': 1, - \ 'job_id': 347, - \ 'command': ['/bin/bash', '\c', 'last command'], - \ 'output': ['different second command output'], - \ }, - \ { - \ 'status': 'finished', - \ 'exit_code': 0, - \ 'job_id': 347, - \ 'command': 'command with no output', - \ 'output': [], - \ }, - \] - - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \ + [ - \ '', - \ '(finished - exit code 0) ''first command''', - \ '', - \ '<<>>', - \ 'some', - \ 'first command output', - \ '<<>>', - \ '', - \ '(finished - exit code 1) [''/bin/bash'', ''\c'', ''last command'']', - \ '', - \ '<<>>', - \ 'different second command output', - \ '<<>>', - \ '', - \ '(finished - exit code 0) ''command with no output''', - \ '', - \ '<<>>', - \ ] - \) - -Execute (ALEInfo should include executable checks in the history): - call ale#linter#Define('testft', g:testlinter1) - call ale#engine#IsExecutable(bufnr(''), has('win32') ? 'cmd' : 'echo') - call ale#engine#IsExecutable(bufnr(''), has('win32') ? 'cmd' : 'echo') - call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable') - call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable') - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'']', - \ ' Enabled Linters: [''testlinter1'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \ + [ - \ '', - \ '(executable check - success) ' . (has('win32') ? 'cmd' : 'echo'), - \ '(executable check - failure) TheresNoWayThisIsExecutable', - \ '(executable check - failure) TheresNoWayThisIsExecutable', - \ ] - \) - -Execute (The option for caching failing executable checks should work): - let g:ale_cache_executable_check_failures = 1 - let g:globals_lines[2] = 'let g:ale_cache_executable_check_failures = 1' - - call ale#linter#Define('testft', g:testlinter1) - - call ale#engine#IsExecutable(bufnr(''), has('win32') ? 'cmd' : 'echo') - call ale#engine#IsExecutable(bufnr(''), has('win32') ? 'cmd' : 'echo') - call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable') - call ale#engine#IsExecutable(bufnr(''), 'TheresNoWayThisIsExecutable') - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'']', - \ ' Enabled Linters: [''testlinter1'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \ + [ - \ '', - \ '(executable check - success) ' . (has('win32') ? 'cmd' : 'echo'), - \ '(executable check - failure) TheresNoWayThisIsExecutable', - \ ] - \) - -Given testft (Empty buffer): -Execute (LSP errors for a linter should be outputted): - let g:ale_lsp_error_messages = {'testlinter1': ['foo', 'bar']} - call ale#linter#Define('testft', g:testlinter1) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft', - \ 'Available Linters: [''testlinter1'']', - \ ' Enabled Linters: [''testlinter1'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + [ - \ ' LSP Error Messages:', - \ '', - \ '(Errors for testlinter1)', - \ 'foo', - \ 'bar', - \ ] - \ + g:command_header - \) - -Given testft (Empty buffer): -Execute (LSP errors for other linters shouldn't appear): - let g:ale_lsp_error_messages = {'testlinter2': ['foo']} - call ale#linter#Define('testft', g:testlinter1) - - call CheckInfo( - \ [ - \ ' Current Filetype: testft', - \ 'Available Linters: [''testlinter1'']', - \ ' Enabled Linters: [''testlinter1'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given testft.testft2 (Empty buffer with two filetypes): -Execute (ALEInfo should include linter global options): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - " eg: like g:c_build_dir_names - let g:ale_testft_build_dir_names = ['build', 'bin'] - - call add(g:variables_lines, 'let g:ale_testft_build_dir_names = [''build'', ''bin'']') - - call CheckInfo( - \ [ - \ ' Current Filetype: testft.testft2', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'', ''testlinter2'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - -Given testft (Empty buffer with two filetypes): -Execute (ALEInfo should include linter global options for enabled linters): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - - let g:ale_linters = {'testft': ['testlinter1']} - - " should not appear, since not enabled - let g:ale_testft_testlinter2_option = 'test' - - let g:globals_lines[index(g:globals_lines, 'let g:ale_linters = {}')] - \ = 'let g:ale_linters = {''testft'': [''testlinter1'']}' - - call CheckInfo( - \ [ - \ ' Current Filetype: testft', - \ 'Available Linters: [''testlinter1'', ''testlinter2'']', - \ ' Enabled Linters: [''testlinter1'']', - \ ' Ignored Linters: []', - \ ] - \ + g:fixer_lines - \ + g:variables_lines - \ + g:globals_lines - \ + g:command_header - \) - - diff --git a/dotfiles/.vim/plugged/ale/test/test_ale_info_to_clipboard.vader b/dotfiles/.vim/plugged/ale/test/test_ale_info_to_clipboard.vader deleted file mode 100644 index 2014a310..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ale_info_to_clipboard.vader +++ /dev/null @@ -1,15 +0,0 @@ -After: - unlet! g:output - -Execute(ALEInfoToClipboard should that clipboard support is required): - " When run in the Docker image, there's no clipboard support, so this test - " will actually run. - if !has('clipboard') - let g:output = '' - - redir => g:output - :ALEInfoToClipboard - redir END - - AssertEqual 'clipboard not available. Try :ALEInfoToFile instead.', join(split(g:output)) - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_ale_lint_command.vader b/dotfiles/.vim/plugged/ale/test/test_ale_lint_command.vader deleted file mode 100644 index 800c0827..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ale_lint_command.vader +++ /dev/null @@ -1,77 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_enabled - - let g:ale_buffer_info = {} - let g:ale_enabled = 1 - - let g:expected_loclist = [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'foo bar', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \}] - - function! ToggleTestCallback(buffer, output) - return [{ - \ 'bufnr': a:buffer, - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': join(split(a:output[0])), - \ 'type': 'E', - \ 'nr': -1, - \}] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'ToggleTestCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': 'echo foo bar', - \}) - -After: - Restore - - unlet! g:expected_loclist - unlet! b:i - - call ale#engine#Cleanup(bufnr('')) - call ale#linter#Reset() - - let g:ale_buffer_info = {} - - delfunction ToggleTestCallback - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(ALELint should run the linters): - AssertEqual 'foobar', &filetype - - " Try to run the linter a few times, as it fails randomly in NeoVim. - for b:i in range(5) - ALELint - call ale#test#WaitForJobs(2000) - - if !has('nvim') - " Sleep so the delayed list function can run. - " This breaks the tests in NeoVim for some reason. - sleep 1ms - endif - - if ale#test#GetLoclistWithoutNewerKeys() == g:expected_loclist - break - endif - endfor - - " Check the loclist - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() diff --git a/dotfiles/.vim/plugged/ale/test/test_ale_lint_stop_command.vader b/dotfiles/.vim/plugged/ale/test/test_ale_lint_stop_command.vader deleted file mode 100644 index c50db5a8..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ale_lint_stop_command.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - Save g:ale_buffer_info - - let g:ale_buffer_info = {} - - call ale#linter#PreventLoading('testft') - call ale#linter#Define('testft', { - \ 'name': 'testlinter', - \ 'callback': {-> []}, - \ 'executable': has('win32') ? 'cmd' : 'true', - \ 'command': 'sleep 9001', - \}) - -After: - Restore - - call ale#linter#Reset() - -Given testft (An empty file): -Execute(ALELintStop should stop ALE from linting): - ALELint - - Assert ale#engine#IsCheckingBuffer(bufnr('')), 'ALE did not start checking the buffer' - - ALELintStop - - Assert !ale#engine#IsCheckingBuffer(bufnr('')), 'ALELintStop didn''t work' diff --git a/dotfiles/.vim/plugged/ale/test/test_ale_populate_command.vader b/dotfiles/.vim/plugged/ale/test/test_ale_populate_command.vader deleted file mode 100644 index 14789c72..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ale_populate_command.vader +++ /dev/null @@ -1,96 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_enabled - Save g:ale_set_quickfix - Save g:ale_set_loclist - Save g:ale_open_list - - let g:ale_buffer_info = {} - let g:ale_enabled = 1 - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 0 - let g:ale_open_list = 1 - - let g:expected_loclist = [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'foo bar', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \}] - - function! ToggleTestCallback(buffer, output) - return [{ - \ 'bufnr': a:buffer, - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': join(split(a:output[0])), - \ 'type': 'E', - \ 'nr': -1, - \}] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'ToggleTestCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': 'echo foo bar', - \}) - -After: - Restore - - unlet! g:expected_loclist - unlet! b:i - - call ale#engine#Cleanup(bufnr('')) - call ale#linter#Reset() - - " Not sure this is necessary since it was Save/Restore-d - let g:ale_buffer_info = {} - - delfunction ToggleTestCallback - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(ALEPopulateQuickfix should have results): - AssertEqual 'foobar', &filetype - - " Clear so we can check that they're unmodified. - call setqflist([]) - call setloclist(winnr(), []) - - " Try to run the linter a few times, as it fails randomly in NeoVim. - for b:i in range(5) - ALELint - call ale#test#WaitForJobs(2000) - - if !has('nvim') - " Sleep so the delayed list function can run. - " This breaks the tests in NeoVim for some reason. - sleep 1ms - endif - - if ale#test#GetLoclistWithoutNewerKeys() == g:expected_loclist - break - endif - endfor - - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - AssertEqual [], ale#test#GetQflistWithoutNewerKeys() - - ALEPopulateLocList - AssertNotEqual 0, get(getloclist(0, {'winid':0}), 'winid', 0) - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - - ALEPopulateQuickfix - AssertEqual g:expected_loclist, ale#test#GetQflistWithoutNewerKeys() diff --git a/dotfiles/.vim/plugged/ale/test/test_ale_toggle.vader b/dotfiles/.vim/plugged/ale/test/test_ale_toggle.vader deleted file mode 100644 index 98df3f75..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ale_toggle.vader +++ /dev/null @@ -1,444 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_set_signs - Save g:ale_set_lists_synchronously - Save g:ale_run_synchronously - Save g:ale_pattern_options - Save g:ale_pattern_options_enabled - Save g:ale_set_balloons - - let g:ale_set_signs = 1 - let g:ale_set_lists_synchronously = 1 - let g:ale_run_synchronously = 1 - unlet! g:ale_run_synchronously_callbacks - let g:ale_pattern_options = {} - let g:ale_pattern_options_enabled = 1 - let g:ale_set_balloons = - \ has('balloon_eval') && has('gui_running') || - \ has('balloon_eval_term') && !has('gui_running') - - unlet! b:ale_enabled - - let g:ale_buffer_info = {} - let g:expected_loclist = [{ - \ 'bufnr': bufnr('%'), - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'foo bar', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \}] - let g:expected_groups = [ - \ 'ALECleanupGroup', - \ 'ALEEvents', - \ 'ALEHighlightBufferGroup', - \] - let g:has_nvim_highlight = exists('*nvim_buf_add_highlight') && exists('*nvim_buf_clear_namespace') - - function! ToggleTestCallback(buffer, output) - return [{ - \ 'bufnr': a:buffer, - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'foo bar', - \ 'type': 'E', - \ 'nr': -1, - \}] - endfunction - - function! ParseAuGroups() - redir => l:output - silent exec 'autocmd' - redir end - - let l:results = [] - - for l:line in split(l:output, "\n") - let l:match = matchlist(l:line, '^ALE[a-zA-Z]\+') - - " We don't care about some groups here. - if !empty(l:match) - \&& l:match[0] !=# 'ALECompletionGroup' - \&& l:match[0] !=# 'ALEBufferFixGroup' - \&& l:match[0] !=# 'ALEPatternOptionsGroup' - call add(l:results, l:match[0]) - endif - endfor - - call uniq(sort(l:results)) - - return l:results - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'ToggleTestCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': 'echo', - \ 'read_buffer': 0, - \}) - - call ale#sign#Clear() - -After: - Restore - - unlet! g:ale_run_synchronously_callbacks - unlet! g:expected_loclist - unlet! g:expected_groups - unlet! b:ale_enabled - unlet! g:output - unlet! g:has_nvim_highlight - - call ale#linter#Reset() - - " Toggle ALE back on if we fail when it's disabled. - if !g:ale_enabled - ALEToggle - endif - - delfunction ToggleTestCallback - delfunction ParseAuGroups - - call setloclist(0, []) - call ale#sign#Clear() - call clearmatches() - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(ALEToggle should reset everything and then run again): - AssertEqual 'foobar', &filetype - - ALELint - call ale#test#FlushJobs() - - " First check that everything is there... - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%')) - - " Only check the legacy matches if not using the new NeoVIM API. - if !g:has_nvim_highlight - AssertEqual - \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}], - \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}') - endif - - AssertEqual g:expected_groups, ParseAuGroups() - AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist - - " Now Toggle ALE off. - ALEToggle - - " Everything should be cleared. - Assert !has_key(g:ale_buffer_info, bufnr('')), 'The g:ale_buffer_info Dictionary was not removed' - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys(), 'The loclist was not cleared' - AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared' - - if !g:has_nvim_highlight - AssertEqual [], getmatches(), 'The highlights were not cleared' - endif - - AssertEqual g:expected_groups, ParseAuGroups() - - " Toggle ALE on, everything should be set up and run again. - ALEToggle - call ale#test#FlushJobs() - - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%')) - - if !g:has_nvim_highlight - AssertEqual - \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}], - \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}') - endif - - AssertEqual g:expected_groups, ParseAuGroups() - AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist - -Execute(ALEToggle should skip filename keys and preserve them): - AssertEqual 'foobar', &filetype - - let g:ale_buffer_info['/foo/bar/baz.txt'] = { - \ 'job_list': [], - \ 'active_linter_list': [], - \ 'loclist': [], - \ 'temporary_file_list': [], - \ 'temporary_directory_list': [], - \ 'history': [], - \} - - ALELint - call ale#test#FlushJobs() - - " Now Toggle ALE off. - ALEToggle - - AssertEqual - \ { - \ 'job_list': [], - \ 'active_linter_list': [], - \ 'loclist': [], - \ 'temporary_file_list': [], - \ 'temporary_directory_list': [], - \ 'history': [], - \ }, - \ get(g:ale_buffer_info, '/foo/bar/baz.txt', {}) - - " Toggle ALE on again. - ALEToggle - call ale#test#FlushJobs() - - AssertEqual - \ { - \ 'job_list': [], - \ 'active_linter_list': [], - \ 'loclist': [], - \ 'temporary_file_list': [], - \ 'temporary_directory_list': [], - \ 'history': [], - \ }, - \ get(g:ale_buffer_info, '/foo/bar/baz.txt', {}) - -Execute(ALEDisable should reset everything and stay disabled): - ALELint - call ale#test#FlushJobs() - - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - - ALEDisable - call ale#test#FlushJobs() - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - AssertEqual 0, g:ale_enabled - - ALEDisable - call ale#test#FlushJobs() - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - AssertEqual 0, g:ale_enabled - -Execute(ALEEnable should enable ALE and lint again): - let g:ale_enabled = 0 - - ALEEnable - call ale#test#FlushJobs() - - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - AssertEqual 1, g:ale_enabled - -Execute(ALEReset should reset everything for a buffer): - AssertEqual 'foobar', &filetype - - ALELint - call ale#test#FlushJobs() - - " First check that everything is there... - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%')) - - if !g:has_nvim_highlight - AssertEqual - \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}], - \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}') - endif - - AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist - - " Now Toggle ALE off. - ALEReset - call ale#test#FlushJobs() - - " Everything should be cleared. - Assert !has_key(g:ale_buffer_info, bufnr('')), 'The g:ale_buffer_info Dictionary was not removed' - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys(), 'The loclist was not cleared' - AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared' - - if !g:has_nvim_highlight - AssertEqual [], getmatches(), 'The highlights were not cleared' - endif - - AssertEqual 1, g:ale_enabled - -Execute(ALEToggleBuffer should reset everything and then run again): - AssertEqual 'foobar', &filetype - - ALELint - call ale#test#FlushJobs() - - " First check that everything is there... - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%')) - - if !g:has_nvim_highlight - AssertEqual - \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}], - \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}') - endif - - AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist - - " Now Toggle ALE off. - ALEToggleBuffer - - " Everything should be cleared. - Assert !has_key(g:ale_buffer_info, bufnr('')), 'The g:ale_buffer_info Dictionary was not removed' - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys(), 'The loclist was not cleared' - AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared' - - if !g:has_nvim_highlight - AssertEqual [], getmatches(), 'The highlights were not cleared' - endif - - " Toggle ALE on, everything should be set up and run again. - ALEToggleBuffer - call ale#test#FlushJobs() - - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%')) - - if !g:has_nvim_highlight - AssertEqual - \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}], - \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}') - endif - - AssertEqual g:expected_groups, ParseAuGroups() - AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist - -Execute(ALEDisableBuffer should reset everything and stay disabled): - ALELint - call ale#test#FlushJobs() - - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - - ALEDisableBuffer - call ale#test#FlushJobs() - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - AssertEqual 0, b:ale_enabled - -Execute(ALEEnableBuffer should enable ALE and lint again): - let b:ale_enabled = 0 - - ALEEnableBuffer - call ale#test#FlushJobs() - - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - AssertEqual 1, b:ale_enabled - -Execute(ALEEnableBuffer should complain when ALE is disabled globally): - let g:ale_enabled = 0 - let b:ale_enabled = 0 - - redir => g:output - ALEEnableBuffer - redir END - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - AssertEqual 0, b:ale_enabled - AssertEqual 0, g:ale_enabled - AssertEqual - \ 'ALE cannot be enabled locally when disabled globally', - \ join(split(g:output)) - -Execute(ALEResetBuffer should reset everything for a buffer): - AssertEqual 'foobar', &filetype - - ALELint - call ale#test#FlushJobs() - - " First check that everything is there... - AssertEqual g:expected_loclist, ale#test#GetLoclistWithoutNewerKeys() - AssertEqual [0, [[2, 1000001, 'ALEErrorSign']]], ale#sign#FindCurrentSigns(bufnr('%')) - - if !g:has_nvim_highlight - AssertEqual - \ [{'group': 'ALEError', 'pos1': [2, 3, 1]}], - \ map(getmatches(), '{''group'': v:val.group, ''pos1'': v:val.pos1}') - endif - - AssertEqual [{'lnum': 2, 'bufnr': bufnr(''), 'col': 3, 'linter_name': 'testlinter', 'vcol': 0, 'nr': -1, 'type': 'E', 'text': 'foo bar', 'sign_id': 1000001}], g:ale_buffer_info[bufnr('')].loclist - - " Now Toggle ALE off. - ALEResetBuffer - call ale#test#FlushJobs() - - " Everything should be cleared. - Assert !has_key(g:ale_buffer_info, bufnr('')), 'The g:ale_buffer_info Dictionary was not removed' - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys(), 'The loclist was not cleared' - AssertEqual [0, []], ale#sign#FindCurrentSigns(bufnr('%')), 'The signs were not cleared' - - if !g:has_nvim_highlight - AssertEqual [], getmatches(), 'The highlights were not cleared' - endif - - AssertEqual 1, g:ale_enabled - AssertEqual 1, get(b:, 'ale_enabled', 1) - -Execute(Disabling ALE should disable balloons): - " These tests won't run in the console, but we can run them manually in GVim. - if has('balloon_eval') && has('gui_running') - \|| (has('balloon_eval_term') && !has('gui_running')) - call ale#linter#Reset() - - " Enable balloons, so we can check the expr value. - call ale#balloon#Enable() - - if has('balloon_eval') && has('gui_running') - AssertEqual 1, &ballooneval - else - AssertEqual 1, &balloonevalterm - endif - - AssertEqual 'ale#balloon#Expr()', &balloonexpr - - " Toggle ALE off. - ALEToggle - - " The balloon settings should be reset. - if has('balloon_eval') && has('gui_running') - AssertEqual 0, &ballooneval - else - AssertEqual 0, &balloonevalterm - endif - - AssertEqual '', &balloonexpr - endif - -Execute(Enabling ALE should enable balloons if the setting is on): - if has('balloon_eval') && has('gui_running') - \|| (has('balloon_eval_term') && !has('gui_running')) - call ale#linter#Reset() - call ale#balloon#Disable() - ALEDisable - let g:ale_set_balloons = 0 - ALEEnable - - if has('balloon_eval') && has('gui_running') - AssertEqual 0, &ballooneval - else - AssertEqual 0, &balloonevalterm - endif - - AssertEqual '', &balloonexpr - - ALEDisable - let g:ale_set_balloons = 1 - ALEEnable - - if has('balloon_eval') && has('gui_running') - AssertEqual 1, &ballooneval - else - AssertEqual 1, &balloonevalterm - endif - - AssertEqual 'ale#balloon#Expr()', &balloonexpr - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_ale_var.vader b/dotfiles/.vim/plugged/ale/test/test_ale_var.vader deleted file mode 100644 index 419a9983..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ale_var.vader +++ /dev/null @@ -1,24 +0,0 @@ -Before: - let g:ale_some_variable = 'abc' - -After: - unlet! g:ale_some_variable - unlet! b:undefined_variable_name - -Execute(ale#Var should return global variables): - AssertEqual 'abc', ale#Var(bufnr(''), 'some_variable') - -Execute(ale#Var should return buffer overrides): - let b:ale_some_variable = 'def' - - AssertEqual 'def', ale#Var(bufnr(''), 'some_variable') - -Execute(ale#Var should return buffer overrides for buffer numbers as strings): - let b:ale_some_variable = 'def' - - AssertEqual 'def', ale#Var(string(bufnr('')), 'some_variable') - -Execute(ale#Var should throw exceptions for undefined variables): - let b:undefined_variable_name = 'def' - - AssertThrows call ale#Var(bufnr(''), 'undefined_variable_name') diff --git a/dotfiles/.vim/plugged/ale/test/test_alejobstarted_autocmd.vader b/dotfiles/.vim/plugged/ale/test/test_alejobstarted_autocmd.vader deleted file mode 100644 index 6fa1ff8e..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_alejobstarted_autocmd.vader +++ /dev/null @@ -1,46 +0,0 @@ -Before: - Save g:ale_buffer_info - - let g:job_started_success = 0 - let g:ale_run_synchronously = 1 - - unlet! b:ale_linted - - function! TestCallback(buffer, output) - return [] - endfunction - - call ale#linter#PreventLoading('testft') - call ale#linter#Define('testft', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'true', - \ 'command': 'true', - \}) - -After: - Restore - - let g:ale_run_synchronously = 0 - - augroup VaderTest - autocmd! - augroup END - - augroup! VaderTest - - unlet! g:job_started_success - - delfunction TestCallback - call ale#linter#Reset() - -Given testft (An empty file): -Execute(Run a lint cycle with an actual job to check for ALEJobStarted): - augroup VaderTest - autocmd! - autocmd User ALEJobStarted let g:job_started_success = 1 - augroup END - - ALELint - - AssertEqual g:job_started_success, 1 diff --git a/dotfiles/.vim/plugged/ale/test/test_alelint_autocmd.vader b/dotfiles/.vim/plugged/ale/test/test_alelint_autocmd.vader deleted file mode 100644 index 332cb36f..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_alelint_autocmd.vader +++ /dev/null @@ -1,40 +0,0 @@ -Before: - let g:pre_success = 0 - let g:post_success = 0 - let g:ale_run_synchronously = 1 - - unlet! b:ale_linted - -After: - let g:ale_run_synchronously = 0 - let g:ale_buffer_info = {} - - augroup VaderTest - autocmd! - augroup END - - augroup! VaderTest - -Given testft(An empty file): -Execute(Run a lint cycle, and check that a variable is set in the autocmd): - augroup VaderTest - autocmd! - autocmd User ALELintPre let g:pre_success = 1 - autocmd User ALELintPost let g:post_success = 1 - augroup END - - call ale#Queue(0) - - AssertEqual g:pre_success, 1 - AssertEqual g:post_success, 1 - -Execute(b:ale_linted should be increased after each lint cycle): - AssertEqual get(b:, 'ale_linted'), 0 - - call ale#Queue(0) - - AssertEqual get(b:, 'ale_linted'), 1 - - call ale#Queue(0) - - AssertEqual get(b:, 'ale_linted'), 2 diff --git a/dotfiles/.vim/plugged/ale/test/test_ant_build_classpath_command.vader b/dotfiles/.vim/plugged/ale/test/test_ant_build_classpath_command.vader deleted file mode 100644 index b97dc594..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ant_build_classpath_command.vader +++ /dev/null @@ -1,27 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/java/javac.vim - - Save $PATH - let $PATH = ale#path#Simplify(g:dir . '/test-files/ant/bin') - -After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Should return `cd '[dir]' && 'ant' classpath -S -q`): - call ale#test#SetFilename('test-files/ant/ant-project/Main.java') - - AssertEqual - \ [ - \ ale#path#Simplify(g:dir . '/test-files/ant/ant-project'), - \ ale#Escape('ant') . ' classpath' . ' -S' . ' -q', - \ ], - \ ale#ant#BuildClasspathCommand(bufnr('')) - -Execute(Should return empty string if ant cannot be executed): - call ale#test#SetFilename('test-files/ant/not-an-ant-project/Main.java') - - AssertEqual ['', ''], ale#ant#BuildClasspathCommand(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_ant_find_project_root.vader b/dotfiles/.vim/plugged/ale/test/test_ant_find_project_root.vader deleted file mode 100644 index b0868ad7..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ant_find_project_root.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/java/javac.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Should return current directory if called on the project root): - call ale#test#SetFilename('test-files/ant/ant-project/Main.java') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/ant/ant-project'), - \ ale#ant#FindProjectRoot(bufnr('')) - -Execute(Should return root directory if called on a deeply nested source file): - call ale#test#SetFilename('test-files/ant/ant-project/src/several/namespace/layers/A.java') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/ant/ant-project'), - \ ale#ant#FindProjectRoot(bufnr('')) - -Execute(Should return empty string if called on a non-ant project): - call ale#test#SetFilename('test-files/ant/non-ant-project/Main.java') - - AssertEqual - \ '', - \ ale#ant#FindProjectRoot(bufnr('')) - -Execute(Should return empty string if called on a file in a non-ant project): - call ale#test#SetFilename('test-files/ant/non-ant-project/several/namespace/layers/A.java') - - AssertEqual - \ '', - \ ale#ant#FindProjectRoot(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_autocmd_commands.vader b/dotfiles/.vim/plugged/ale/test/test_autocmd_commands.vader deleted file mode 100644 index 2f0a893f..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_autocmd_commands.vader +++ /dev/null @@ -1,238 +0,0 @@ -Before: - function! CheckAutocmd(group) - call ale#events#Init() - - redir => l:output - execute 'silent! autocmd ' . a:group - redir END - - let l:matches = [] - let l:header = '' - " Some event names have aliases, and NeoVim and Vim produce - " different output. The names are remapped to fix this. - let l:event_name_corrections = { - \ 'BufWrite': 'BufWritePre', - \ 'BufRead': 'BufReadPost', - \} - - " autocmd commands are split across two lines in output, so we - " must merge the lines back into one simple line. - for l:line in split(l:output, "\n") - if l:line =~# '^ALE' && split(l:line)[0] ==# a:group - let l:header = split(l:line)[1] - let l:header = get(l:event_name_corrections, l:header, l:header) - elseif !empty(l:header) - " There's an extra line for buffer events, and we should only look - " for the one matching the current buffer. - if l:line =~# '' - let l:header .= ' ' - elseif l:line[:0] is# ' ' - call add(l:matches, join(split(l:header . l:line))) - else - let l:header = '' - endif - endif - endfor - - call sort(l:matches) - - return l:matches - endfunction - - Save g:ale_completion_enabled - Save g:ale_echo_cursor - Save g:ale_enabled - Save g:ale_fix_on_save - Save g:ale_lint_on_enter - Save g:ale_lint_on_filetype_changed - Save g:ale_lint_on_insert_leave - Save g:ale_lint_on_save - Save g:ale_lint_on_text_changed - Save g:ale_pattern_options_enabled - Save g:ale_hover_cursor - - " Turn everything on by defaul for these tests. - let g:ale_completion_enabled = 1 - let g:ale_echo_cursor = 1 - let g:ale_enabled = 1 - let g:ale_fix_on_save = 1 - let g:ale_lint_on_enter = 1 - let g:ale_lint_on_filetype_changed = 1 - let g:ale_lint_on_insert_leave = 1 - let g:ale_lint_on_save = 1 - let g:ale_lint_on_text_changed = 1 - let g:ale_pattern_options_enabled = 1 - let g:ale_hover_cursor = 1 - -After: - delfunction CheckAutocmd - Restore - - if g:ale_completion_enabled - call ale#completion#Enable() - else - call ale#completion#Disable() - endif - - call ale#events#Init() - -Execute (All events should be set up when everything is on): - let g:ale_echo_cursor = 1 - - AssertEqual - \ [ - \ 'BufEnter * call ale#events#ReadOrEnterEvent(str2nr(expand('''')))', - \ 'BufReadPost * call ale#events#ReadOrEnterEvent(str2nr(expand('''')))', - \ 'BufWinEnter * call ale#events#LintOnEnter(str2nr(expand('''')))', - \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand('''')))', - \ 'CursorHold * if exists(''*ale#engine#Cleanup'') | call ale#cursor#EchoCursorWarningWithDelay() | endif', - \ 'CursorHold if exists(''*ale#lsp#Send'') | call ale#hover#ShowTruncatedMessageAtCursor() | endif', - \ 'CursorMoved * if exists(''*ale#engine#Cleanup'') | call ale#cursor#EchoCursorWarningWithDelay() | endif', - \ 'FileChangedShellPost * call ale#events#FileChangedEvent(str2nr(expand('''')))', - \ 'FileType * call ale#events#FileTypeEvent( str2nr(expand('''')), expand(''''))', - \ 'InsertLeave * if ale#Var(str2nr(expand('''')), ''lint_on_insert_leave'') | call ale#Queue(0) | endif', - \ 'InsertLeave if exists(''*ale#engine#Cleanup'') | call ale#cursor#EchoCursorWarning() | endif', - \ 'TextChanged * call ale#Queue(ale#Var(str2nr(expand('''')), ''lint_delay''))', - \ 'TextChangedI * call ale#Queue(ale#Var(str2nr(expand('''')), ''lint_delay''))', - \ ], - \ CheckAutocmd('ALEEvents') - -Execute (Only the required events should be bound even if various settings are off): - let g:ale_enabled = 1 - let g:ale_completion_enabled = 0 - let g:ale_echo_cursor = 0 - let g:ale_fix_on_save = 0 - let g:ale_lint_on_enter = 0 - let g:ale_lint_on_filetype_changed = 0 - let g:ale_lint_on_insert_leave = 0 - let g:ale_lint_on_save = 0 - let g:ale_lint_on_text_changed = 0 - let g:ale_pattern_options_enabled = 0 - let g:ale_hover_cursor = 0 - - AssertEqual - \ [ - \ 'BufEnter * call ale#events#ReadOrEnterEvent(str2nr(expand('''')))', - \ 'BufReadPost * call ale#events#ReadOrEnterEvent(str2nr(expand('''')))', - \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand('''')))', - \ ], - \ CheckAutocmd('ALEEvents') - -Execute (The cursor hoever event should be enabled with g:ale_hover_cursor = 1): - let g:ale_enabled = 1 - let g:ale_completion_enabled = 0 - let g:ale_echo_cursor = 0 - let g:ale_fix_on_save = 0 - let g:ale_lint_on_enter = 0 - let g:ale_lint_on_filetype_changed = 0 - let g:ale_lint_on_insert_leave = 0 - let g:ale_lint_on_save = 0 - let g:ale_lint_on_text_changed = 0 - let g:ale_pattern_options_enabled = 0 - let g:ale_hover_cursor = 1 - - AssertEqual - \ [ - \ 'BufEnter * call ale#events#ReadOrEnterEvent(str2nr(expand('''')))', - \ 'BufReadPost * call ale#events#ReadOrEnterEvent(str2nr(expand('''')))', - \ 'BufWritePost * call ale#events#SaveEvent(str2nr(expand('''')))', - \ 'CursorHold * if exists(''*ale#lsp#Send'') | call ale#hover#ShowTruncatedMessageAtCursor() | endif', - \ ], - \ CheckAutocmd('ALEEvents') - -Execute (g:ale_lint_on_text_changed = 1 bind both events): - let g:ale_lint_on_text_changed = 1 - - AssertEqual - \ [ - \ 'TextChanged * call ale#Queue(ale#Var(str2nr(expand('''')), ''lint_delay''))', - \ 'TextChangedI * call ale#Queue(ale#Var(str2nr(expand('''')), ''lint_delay''))', - \ ], - \ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^TextChanged''') - -Execute (g:ale_lint_on_text_changed = 'always' should bind both events): - let g:ale_lint_on_text_changed = 'always' - - AssertEqual - \ [ - \ 'TextChanged * call ale#Queue(ale#Var(str2nr(expand('''')), ''lint_delay''))', - \ 'TextChangedI * call ale#Queue(ale#Var(str2nr(expand('''')), ''lint_delay''))', - \ ], - \ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^TextChanged''') - -Execute (g:ale_lint_on_text_changed = 'normal' should bind only TextChanged): - let g:ale_lint_on_text_changed = 'normal' - - AssertEqual - \ [ - \ 'TextChanged * call ale#Queue(ale#Var(str2nr(expand('''')), ''lint_delay''))', - \ ], - \ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^TextChanged''') - -Execute (g:ale_lint_on_text_changed = 'insert' should bind only TextChangedI): - let g:ale_lint_on_text_changed = 'insert' - - AssertEqual - \ [ - \ 'TextChangedI * call ale#Queue(ale#Var(str2nr(expand('''')), ''lint_delay''))', - \ ], - \ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^TextChanged''') - -Execute (g:ale_lint_on_insert_leave = 1 should bind InsertLeave): - let g:ale_lint_on_insert_leave = 1 - let g:ale_echo_cursor = 0 - - AssertEqual - \ [ - \ 'InsertLeave * if ale#Var(str2nr(expand('''')), ''lint_on_insert_leave'') | call ale#Queue(0) | endif', - \ ], - \ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''^InsertLeave''') - -Execute (g:ale_lint_on_filetype_changed = 1 should bind the FileType event): - let g:ale_lint_on_filetype_changed = 1 - - AssertEqual - \ [ - \ 'FileType * call ale#events#FileTypeEvent( ' - \ . 'str2nr(expand('''')), ' - \ . 'expand('''')' - \ . ')', - \ ], - \ filter(CheckAutocmd('ALEEvents'), 'v:val =~ ''\v^FileType''') - -Execute (ALECleanupGroup should include the right commands): - if exists('##VimSuspend') - AssertEqual [ - \ 'BufDelete * if exists(''*ale#engine#Cleanup'') | call ale#engine#Cleanup(str2nr(expand(''''))) | endif', - \ 'QuitPre * call ale#events#QuitEvent(str2nr(expand('''')))', - \ 'VimSuspend * if exists(''*ale#engine#CleanupEveryBuffer'') | call ale#engine#CleanupEveryBuffer() | endif', - \], CheckAutocmd('ALECleanupGroup') - else - AssertEqual [ - \ 'BufDelete * if exists(''*ale#engine#Cleanup'') | call ale#engine#Cleanup(str2nr(expand(''''))) | endif', - \ 'QuitPre * call ale#events#QuitEvent(str2nr(expand('''')))', - \], CheckAutocmd('ALECleanupGroup') - endif - -Execute(ALECompletionActions should always be set up): - AssertEqual [ - \ 'CompleteDone * call ale#completion#HandleUserData(v:completed_item)', - \], CheckAutocmd('ALECompletionActions') - -Execute(Enabling completion should set up autocmd events correctly): - let g:ale_completion_enabled = 0 - call ale#completion#Enable() - - AssertEqual [ - \ 'CompleteDone * call ale#completion#Done()', - \ 'TextChangedI * call ale#completion#Queue()', - \], CheckAutocmd('ALECompletionGroup') - AssertEqual 1, g:ale_completion_enabled - -Execute(Disabling completion should remove autocmd events correctly): - let g:ale_completion_enabled = 1 - call ale#completion#Enable() - call ale#completion#Disable() - - AssertEqual [], CheckAutocmd('ALECompletionGroup') - AssertEqual 0, g:ale_completion_enabled diff --git a/dotfiles/.vim/plugged/ale/test/test_backwards_compatibility.vader b/dotfiles/.vim/plugged/ale/test/test_backwards_compatibility.vader deleted file mode 100644 index e4e3756f..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_backwards_compatibility.vader +++ /dev/null @@ -1,19 +0,0 @@ -" These tests, and the code that it covers, may be removed upon a major release. - -After: - unlet! g:ale_linters_sh_shellcheck_exclusions - unlet! g:ale_sh_shellcheck_exclusions - unlet! g:ale_linters_sh_shell_default_shell - unlet! g:ale_sh_shell_default_shell - -Execute(Old variable name for the 'shellcheck' linter should still work): - let g:ale_linters_sh_shellcheck_exclusions = 'SC1234' - runtime ale_linters/sh/shellcheck.vim - - AssertEqual 'SC1234', g:ale_sh_shellcheck_exclusions - -Execute (Old variable name for the 'shell' linter should still work): - let g:ale_linters_sh_shell_default_shell = 'woosh' - runtime ale_linters/sh/shell.vim - - AssertEqual 'woosh', g:ale_sh_shell_default_shell diff --git a/dotfiles/.vim/plugged/ale/test/test_balloon_messages.vader b/dotfiles/.vim/plugged/ale/test/test_balloon_messages.vader deleted file mode 100644 index d0724c21..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_balloon_messages.vader +++ /dev/null @@ -1,87 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_enabled - Save g:ale_set_balloons - - let g:ale_set_balloons = 1 - - let g:ale_buffer_info[bufnr('')] = {'loclist': [ - \ { - \ 'bufnr': bufnr('%'), - \ 'lnum': 1, - \ 'col': 10, - \ 'linter_name': 'eslint', - \ 'type': 'W', - \ 'text': 'Ignore me.', - \ }, - \ { - \ 'bufnr': bufnr(''), - \ 'lnum': 1, - \ 'col': 10, - \ 'text': 'Missing semicolon. (semi)', - \ 'type': 'E', - \ }, - \ { - \ 'bufnr': bufnr(''), - \ 'lnum': 2, - \ 'col': 10, - \ 'text': 'Infix operators must be spaced. (space-infix-ops)' - \ }, - \ { - \ 'bufnr': bufnr(''), - \ 'lnum': 2, - \ 'col': 15, - \ 'text': 'Missing radix parameter (radix)' - \ }, - \]} - -After: - Restore - - unlet! b:ale_enabled - unlet! b:ale_set_balloons - -Execute(Balloon messages should be shown for the correct lines): - AssertEqual - \ 'Missing semicolon. (semi)', - \ ale#balloon#MessageForPos(bufnr(''), 1, 1) - -Execute(Balloon messages should be shown for earlier columns): - AssertEqual - \ 'Infix operators must be spaced. (space-infix-ops)', - \ ale#balloon#MessageForPos(bufnr(''), 2, 1) - -Execute(Balloon messages should be shown for later columns): - AssertEqual - \ 'Missing radix parameter (radix)', - \ ale#balloon#MessageForPos(bufnr(''), 2, 16) - -Execute(Balloon messages should be disabled if ALE is disabled globally): - let g:ale_enabled = 0 - " Enabling the buffer should not make a difference. - let b:ale_enabled = 1 - - AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1) - -Execute(Balloon messages should be disabled if ALE is disabled for a buffer): - let b:ale_enabled = 0 - - AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1) - -Execute(Balloon messages should be disabled if the global setting is off): - let g:ale_set_balloons = 0 - - AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1) - -Execute(Balloon messages should be disabled if the buffer setting is off): - let b:ale_set_balloons = 0 - - AssertEqual '', ale#balloon#MessageForPos(bufnr(''), 1, 1) - -Execute(The balloon buffer setting should override the global one): - let g:ale_set_balloons = 0 - let b:ale_set_balloons = 1 - - AssertEqual - \ 'Missing semicolon. (semi)', - \ ale#balloon#MessageForPos(bufnr(''), 1, 1) diff --git a/dotfiles/.vim/plugged/ale/test/test_c_flag_parsing.vader b/dotfiles/.vim/plugged/ale/test/test_c_flag_parsing.vader deleted file mode 100644 index c661651e..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_c_flag_parsing.vader +++ /dev/null @@ -1,689 +0,0 @@ -Before: - Save g:ale_c_parse_makefile - Save g:ale_c_always_make - Save b:ale_c_always_make - - call ale#test#SetDirectory('/testplugin/test') - - let g:ale_c_parse_makefile = 1 - let g:ale_c_always_make = 1 - let b:ale_c_always_make = 1 - - function SplitAndParse(path_prefix, command) abort - let l:args = ale#c#ShellSplit(a:command) - - return ale#c#ParseCFlags(a:path_prefix, 0, l:args) - endfunction - -After: - delfunction SplitAndParse - - Restore - - call ale#test#RestoreDirectory() - -Execute(The make command should be correct): - call ale#test#SetFilename('test-files/c/makefile_project/subdir/file.c') - - AssertEqual - \ [ - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 'make -n --always-make', - \ ], - \ ale#c#GetMakeCommand(bufnr('')) - - " You should be able to disable --always-make for a buffer. - let b:ale_c_always_make = 0 - - AssertEqual - \ [ - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 'make -n', - \ ], - \ ale#c#GetMakeCommand(bufnr('')) - -Execute(Should recognize GNUmakefile as a makefile): - call ale#test#SetFilename('test-files/c/gnumakefile_project/file.c') - - AssertEqual - \ [ - \ ale#path#Simplify(g:dir. '/test-files/c/gnumakefile_project'), - \ 'make -n --always-make', - \ ], - \ ale#c#GetMakeCommand(bufnr('')) - -Execute(The CFlags parser should be able to parse include directives): - call ale#test#SetFilename('test-files/c/makefile_project/subdir/file.c') - - AssertEqual - \ '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')), - \ ale#c#ParseCFlagsFromMakeOutput(bufnr(''), ['gcc -Isubdir -c file.c']) - - AssertEqual - \ '-isystem ' . ale#Escape('/usr/include/dir'), - \ ale#c#ParseCFlagsFromMakeOutput(bufnr(''), ['gcc -isystem /usr/include/dir -c file.c']) - -Execute(ParseCFlags should ignore -c and -o): - call ale#test#SetFilename('test-files/c/makefile_project/subdir/file.c') - - AssertEqual - \ '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')), - \ ale#c#ParseCFlagsFromMakeOutput(bufnr(''), ['gcc -Isubdir -c file.c -o a.out']) - -Execute(The CFlags parser should be able to parse macro directives): - call ale#test#SetFilename('test-files/c/makefile_project/subdir/file.c') - - AssertEqual - \ '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' -DTEST=1', - \ ale#c#ParseCFlagsFromMakeOutput(bufnr(''), ['gcc -Isubdir -DTEST=1 -c file.c']) - -Execute(The CFlags parser should be able to parse macro directives with spaces): - call ale#test#SetFilename('test-files/c/makefile_project/subdir/file.c') - - AssertEqual - \ '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' -DTEST=$(( 2 * 4 ))', - \ ale#c#ParseCFlagsFromMakeOutput(bufnr(''), ['gcc -Isubdir -DTEST=$(( 2 * 4 )) -c file.c']) - -Execute(The CFlags parser should be able to parse shell directives with spaces): - call ale#test#SetFilename('test-files/c/makefile_project/subdir/file.c') - - AssertEqual - \ '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' -DTEST=`date +%s`', - \ ale#c#ParseCFlagsFromMakeOutput(bufnr(''), ['gcc -Isubdir -DTEST=`date +%s` -c file.c']) - -Execute(ParseCFlags should be able to parse flags with relative paths): - AssertEqual - \ '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/kernel/include')) - \ . ' -DTEST=`date +%s`', - \ SplitAndParse( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 'gcc -Isubdir ' - \ . '-I'. ale#path#Simplify('kernel/include') - \ . ' -DTEST=`date +%s` -c file.c' - \ ) - -Execute(We should handle paths with spaces in double quotes): - AssertEqual - \ '-Dgoal=9' - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/dir with spaces')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/kernel/include')) - \ . ' -DTEST=`date +%s`', - \ SplitAndParse( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 'gcc -Dgoal=9 -Tlinkerfile.ld blabla -Isubdir ' - \ . '-I"dir with spaces"' . ' -I'. ale#path#Simplify('kernel/include') - \ . ' -DTEST=`date +%s` -c file.c' - \ ) - -Execute(ParseCFlags should handle paths with spaces in single quotes): - AssertEqual - \ '-Dgoal=9' - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/dir with spaces')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/kernel/include')) - \ . ' -DTEST=`date +%s`', - \ SplitAndParse( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 'gcc -Dgoal=9 -Tlinkerfile.ld blabla -Isubdir ' - \ . '-I''dir with spaces''' . ' -I'. ale#path#Simplify('kernel/include') - \ . ' -DTEST=`date +%s` -c file.c' - \ ) - -Execute(ParseCFlags should handle paths with minuses): - AssertEqual - \ '-Dgoal=9' - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/dir with spaces')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/dir-with-dash')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/kernel/include')) - \ . ' -DTEST=`date +%s`', - \ SplitAndParse( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 'gcc -Dgoal=9 -Tlinkerfile.ld blabla -Isubdir ' - \ . '-I''dir with spaces''' . ' -Idir-with-dash' - \ . ' -I'. ale#path#Simplify('kernel/include') - \ . ' -DTEST=`date +%s` -c file.c' - \ ) - -Execute(We should handle -D with minuses): - AssertEqual - \ '-Dgoal=9' - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' -Dmacro-with-dash' - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/dir with spaces')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/dir-with-dash')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/kernel/include')) - \ . ' -DTEST=`date +%s`', - \ SplitAndParse( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 'gcc -Dgoal=9 -Tlinkerfile.ld blabla -Isubdir ' - \ . '-Dmacro-with-dash ' - \ . '-I''dir with spaces''' . ' -Idir-with-dash' - \ . ' -I'. ale#path#Simplify('kernel/include') - \ . ' -DTEST=`date +%s` -c file.c' - \ ) - -Execute(We should handle flags at the end of the line): - AssertEqual - \ '-Dgoal=9' - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/subdir')) - \ . ' -Dmacro-with-dash' - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/dir with spaces')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/dir-with-dash')) - \ . ' ' . '-I' . ' ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/kernel/include')), - \ SplitAndParse( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 'gcc -Dgoal=9 -Tlinkerfile.ld blabla -Isubdir ' - \ . '-Dmacro-with-dash ' - \ . '-I''dir with spaces''' . ' -Idir-with-dash' - \ . ' -I'. ale#path#Simplify('kernel/include') - \ ) - -Execute(FlagsFromCompileCommands should tolerate empty values): - AssertEqual '', ale#c#FlagsFromCompileCommands(bufnr(''), '') - -Execute(ParseCompileCommandsFlags should tolerate empty values): - AssertEqual '', ale#c#ParseCompileCommandsFlags(bufnr(''), {}, {}) - -Execute(ParseCompileCommandsFlags should parse some basic flags): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c')) - - " We should read the absolute path filename entry, not the other ones. - AssertEqual - \ '-I ' . ale#Escape(ale#path#Simplify('/usr/include/xmms2')), - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ { - \ ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'): [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/xmms2') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ }, - \ ], - \ "xmms2-mpris.c": [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/ignoreme') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ }, - \ ], - \ }, - \ { - \ ale#path#Simplify('/foo/bar/xmms2-mpris/src'): [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris/src'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/ignoreme') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': 'other.c', - \ }, - \ ], - \ "src": [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/ignoreme') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': ale#path#Simplify((has('win32') ? 'C:' : '') . '/foo/bar/xmms2-mpris/src/xmms2-other.c'), - \ }, - \ ], - \ }, - \ ) - -Execute(ParseCompileCommandsFlags should fall back to files with the same name): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c')) - - " We should prefer the basename file flags, not the base dirname flags. - AssertEqual - \ '-I ' . ale#Escape(ale#path#Simplify('/usr/include/xmms2')), - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ { - \ "xmms2-mpris.c": [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/xmms2') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ }, - \ ], - \ }, - \ { - \ "src": [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/ignoreme') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': ale#path#Simplify((has('win32') ? 'C:' : '') . '/foo/bar/xmms2-mpris/src/xmms2-other.c'), - \ }, - \ ], - \ }, - \ ) - -Execute(ParseCompileCommandsFlags should parse flags for exact directory matches): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c')) - - " We should ues the exact directory flags, not the file basename flags. - AssertEqual - \ '-I ' . ale#Escape(ale#path#Simplify('/usr/include/xmms2')), - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ { - \ "xmms2-mpris.c": [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/ignoreme') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ }, - \ ], - \ }, - \ { - \ ale#path#Simplify('/foo/bar/xmms2-mpris/src'): [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris/src'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/xmms2') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': 'other.c', - \ }, - \ ], - \ "src": [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/ignoreme') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': ale#path#Simplify((has('win32') ? 'C:' : '') . '/foo/bar/xmms2-mpris/src/xmms2-other.c'), - \ }, - \ ], - \ }, - \ ) - -Execute(ParseCompileCommandsFlags should fall back to files in the same directory): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c')) - - AssertEqual - \ '-I ' . ale#Escape(ale#path#Simplify('/usr/include/xmms2')), - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ {}, - \ { - \ "src": [ - \ { - \ 'directory': ale#path#Simplify('/foo/bar/xmms2-mpris'), - \ 'command': '/usr/bin/cc -I' . ale#path#Simplify('/usr/include/xmms2') - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c'), - \ 'file': ale#path#Simplify((has('win32') ? 'C:' : '') . '/foo/bar/xmms2-mpris/src/xmms2-other.c'), - \ }, - \ ], - \ }, - \ ) - -Execute(ParseCompileCommandsFlags should tolerate items without commands): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.c')) - - AssertEqual - \ '', - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ { - \ "xmms2-mpris.c": [ - \ { - \ 'directory': '/foo/bar/xmms2-mpris', - \ 'file': '/foo/bar/xmms2-mpris/src/xmms2-mpris.c', - \ }, - \ ], - \ }, - \ {}, - \ ) - -Execute(ParseCompileCommandsFlags should take commands from matching .c files for .h files): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.h')) - - AssertEqual - \ '-I ' . ale#Escape('/usr/include/xmms2'), - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ { - \ 'xmms2-mpris.c': [ - \ { - \ 'directory': '/foo/bar/xmms2-mpris', - \ 'file': (has('win32') ? 'C:' : '') . '/foo/bar/xmms2-mpris/src/xmms2-mpris.c', - \ 'command': '/usr/bin/cc -I' . '/usr/include/xmms2' - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . '/foo/bar/xmms2-mpris/src/xmms2-mpris.c', - \ }, - \ ], - \ }, - \ {}, - \ ) - -Execute(ParseCompileCommandsFlags should take commands from matching .cpp files for .hpp files): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.hpp')) - - AssertEqual - \ '-I ' . ale#Escape('/usr/include/xmms2'), - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ { - \ 'xmms2-mpris.cpp': [ - \ { - \ 'directory': '/foo/bar/xmms2-mpris', - \ 'file': (has('win32') ? 'C:' : '') . '/foo/bar/xmms2-mpris/src/xmms2-mpris.cpp', - \ 'command': '/usr/bin/cc -I' . '/usr/include/xmms2' - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . '/foo/bar/xmms2-mpris/src/xmms2-mpris.cpp', - \ }, - \ ], - \ }, - \ { - \ }, - \ ) - -Execute(ParseCompileCommandsFlags should take commands from matching .cpp files for .h files): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/xmms2-mpris.h')) - - AssertEqual - \ '-I ' . ale#Escape('/usr/include/xmms2'), - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ { - \ 'xmms2-mpris.cpp': [ - \ { - \ 'directory': '/foo/bar/xmms2-mpris', - \ 'file': (has('win32') ? 'C:' : '') . '/foo/bar/xmms2-mpris/src/xmms2-mpris.cpp', - \ 'command': '/usr/bin/cc -I' . '/usr/include/xmms2' - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . '/foo/bar/xmms2-mpris/src/xmms2-mpris.cpp', - \ }, - \ ], - \ }, - \ { - \ }, - \ ) - -Execute(ParseCompileCommandsFlags should not take commands from .c files for .h files with different names): - silent noautocmd execute 'file! ' . fnameescape(ale#path#Simplify('/foo/bar/xmms2-mpris/src/other.h')) - - AssertEqual - \ '', - \ ale#c#ParseCompileCommandsFlags( - \ bufnr(''), - \ { - \ 'xmms2-mpris.c': [ - \ { - \ 'directory': '/foo/bar/xmms2-mpris', - \ 'file': (has('win32') ? 'C:' : '') . '/foo/bar/xmms2-mpris/src/xmms2-mpris.c', - \ 'command': '/usr/bin/cc -I' . '/usr/include/xmms2' - \ . ' -o CMakeFiles/xmms2-mpris.dir/src/xmms2-mpris.c.o' - \ . ' -c ' . '/foo/bar/xmms2-mpris/src/xmms2-mpris.c', - \ }, - \ ], - \ }, - \ { - \ }, - \ ) - -Execute(ShellSplit should not merge flags): - AssertEqual - \ [ - \ 'gcc', - \ '-Dgoal=9', - \ '-Tlinkerfile.ld', - \ 'blabla', - \ '-Isubdir', - \ 'subdir/somedep1.o', - \ 'subdir/somedep2.o', - \ '-I''dir with spaces''', - \ '-Idir-with-dash', - \ 'subdir/somedep3.o', - \ 'subdir/somedep4.o', - \ '-I' . ale#path#Simplify('kernel/include'), - \ 'subdir/somedep5.o', - \ 'subdir/somedep6.o', - \ ], - \ ale#c#ShellSplit( - \ 'gcc -Dgoal=9 -Tlinkerfile.ld blabla -Isubdir ' - \ . 'subdir/somedep1.o ' . 'subdir/somedep2.o ' - \ . '-I''dir with spaces''' . ' -Idir-with-dash ' - \ . 'subdir/somedep3.o ' . 'subdir/somedep4.o ' - \ . ' -I'. ale#path#Simplify('kernel/include') . ' ' - \ . 'subdir/somedep5.o ' . 'subdir/somedep6.o' - \ ) - -Execute(ShellSplit should handle parenthesis and quotes): - AssertEqual - \ [ - \ 'gcc', - \ '-Dgoal=9', - \ '-Tlinkerfile.ld', - \ 'blabla', - \ '-Dtest1="('' '')"', - \ 'file1.o', - \ '-Dtest2=''(` `)''', - \ 'file2.o', - \ '-Dtest3=`(" ")`', - \ 'file3.o', - \ ] , - \ ale#c#ShellSplit( - \ 'gcc -Dgoal=9 -Tlinkerfile.ld blabla ' - \ . '-Dtest1="('' '')" file1.o ' - \ . '-Dtest2=''(` `)'' file2.o ' - \ . '-Dtest3=`(" ")` file3.o' - \ ) - -Execute(We should include several important flags): - AssertEqual - \ '-I ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/inc')) - \ . ' -I ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/include')) - \ . ' -iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/incquote')) - \ . ' -isystem ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/incsystem')) - \ . ' -idirafter ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/incafter')) - \ . ' -iframework ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/incframework')) - \ . ' -include file.h' - \ . ' -imacros macros.h' - \ . ' -Dmacro="value"' - \ . ' -DGoal=9' - \ . ' -D macro2' - \ . ' -D macro3="value"' - \ . ' -Bbdir' - \ . ' -B bdir2' - \ . ' -iprefix prefix -iwithprefix prefix2 -iwithprefixbefore prefix3' - \ . ' -isysroot sysroot --sysroot=test --no-sysroot-suffix -imultilib multidir' - \ . ' -Wsome-warning -std=c89 -pedantic -pedantic-errors -ansi' - \ . ' -foption -O2 -C -CC -trigraphs -nostdinc -nostdinc++' - \ . ' -iplugindir=dir -march=native -w', - \ ale#c#ParseCFlags( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 0, - \ [ - \ 'gcc', - \ '-Iinc', - \ '-I', - \ 'include', - \ '-iquote', - \ 'incquote', - \ '-isystem', - \ 'incsystem', - \ '-idirafter', - \ 'incafter', - \ '-iframework', - \ 'incframework', - \ '-include', - \ 'file.h', - \ '-imacros', - \ 'macros.h', - \ '-Dmacro="value"', - \ '-DGoal=9', - \ '-D', - \ 'macro2', - \ '-D', - \ 'macro3="value"', - \ '-Bbdir', - \ '-B', - \ 'bdir2', - \ '-iprefix', - \ 'prefix', - \ '-iwithprefix', - \ 'prefix2', - \ '-iwithprefixbefore', - \ 'prefix3', - \ '-isysroot', - \ 'sysroot', - \ '--sysroot=test', - \ '--no-sysroot-suffix', - \ '-imultilib', - \ 'multidir', - \ '-Wsome-warning', - \ '-std=c89', - \ '-pedantic', - \ '-pedantic-errors', - \ '-ansi', - \ '-foption', - \ '-O2', - \ '-C', - \ '-CC', - \ '-trigraphs', - \ '-nostdinc', - \ '-nostdinc++', - \ '-iplugindir=dir', - \ '-march=native', - \ '-w', - \ ], - \ ) - -Execute(We should quote the flags we need to quote): - AssertEqual - \ '-I ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/inc')) - \ . ' -I ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/include')) - \ . ' -iquote ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/incquote')) - \ . ' -isystem ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/incsystem')) - \ . ' -idirafter ' . ale#Escape(ale#path#Simplify(g:dir. '/test-files/c/makefile_project/incafter')) - \ . ' -iframework ' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/c/makefile_project/incframework')) - \ . ' -include file.h' - \ . ' -imacros macros.h' - \ . ' ' . ale#Escape('-Dmacro="value"') - \ . ' -DGoal=9' - \ . ' -D macro2' - \ . ' -D ' . ale#Escape('macro3="value"') - \ . ' -Bbdir' - \ . ' -B bdir2' - \ . ' -iprefix prefix -iwithprefix prefix2 -iwithprefixbefore prefix3' - \ . ' -isysroot sysroot --sysroot=test' - \ . ' ' . ale#Escape('--sysroot="quoted"') - \ . ' ' . ale#Escape('--sysroot=foo bar') - \ . ' --no-sysroot-suffix -imultilib multidir' - \ . ' -Wsome-warning -std=c89 -pedantic -pedantic-errors -ansi' - \ . ' -foption -O2 -C -CC -trigraphs -nostdinc -nostdinc++' - \ . ' -iplugindir=dir -march=native -w', - \ ale#c#ParseCFlags( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 1, - \ [ - \ 'gcc', - \ '-Iinc', - \ '-I', - \ 'include', - \ '-iquote', - \ 'incquote', - \ '-isystem', - \ 'incsystem', - \ '-idirafter', - \ 'incafter', - \ '-iframework', - \ 'incframework', - \ '-include', - \ 'file.h', - \ '-imacros', - \ 'macros.h', - \ '-Dmacro="value"', - \ '-DGoal=9', - \ '-D', - \ 'macro2', - \ '-D', - \ 'macro3="value"', - \ '-Bbdir', - \ '-B', - \ 'bdir2', - \ '-iprefix', - \ 'prefix', - \ '-iwithprefix', - \ 'prefix2', - \ '-iwithprefixbefore', - \ 'prefix3', - \ '-isysroot', - \ 'sysroot', - \ '--sysroot=test', - \ '--sysroot="quoted"', - \ '--sysroot=foo bar', - \ '--no-sysroot-suffix', - \ '-imultilib', - \ 'multidir', - \ '-Wsome-warning', - \ '-std=c89', - \ '-pedantic', - \ '-pedantic-errors', - \ '-ansi', - \ '-foption', - \ '-O2', - \ '-C', - \ '-CC', - \ '-trigraphs', - \ '-nostdinc', - \ '-nostdinc++', - \ '-iplugindir=dir', - \ '-march=native', - \ '-w', - \ ], - \ ) - -Execute(We should exclude other flags that cause problems): - AssertEqual - \ '', - \ ale#c#ParseCFlags( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 0, - \ [ - \ 'gcc', - \ '-Wl,option', - \ '-Wa,option', - \ '-Wp,option', - \ '-c', - \ 'filename.c', - \ 'somelib.a', - \ '-fdump-file=name', - \ '-fdiagnostics-arg', - \ '-fno-show-column', - \ '-fstack-usage', - \ '-Tlinkerfile.ld', - \ ], - \ ) - -Execute(We should expand @file in CFlags): - AssertEqual - \ '-DARGS1 -DARGS2 -O2', - \ ale#c#ParseCFlags( - \ ale#path#Simplify(g:dir. '/test-files/c/makefile_project'), - \ 0, - \ [ - \ 'gcc', - \ '-g', - \ '@./args', - \ '-O2', - \ ], - \ ) diff --git a/dotfiles/.vim/plugged/ale/test/test_checkingbuffer_autocmd.vader b/dotfiles/.vim/plugged/ale/test/test_checkingbuffer_autocmd.vader deleted file mode 100644 index 9e642b15..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_checkingbuffer_autocmd.vader +++ /dev/null @@ -1,57 +0,0 @@ -Before: - Save g:ale_run_synchronously - Save g:ale_buffer_info - - let g:ale_run_synchronously = 1 - let g:ale_buffer_info = {} - - let g:checking_buffer = 0 - - unlet! b:ale_linted - - function! TestCallback(buffer, output) - return [] - endfunction - - call ale#linter#PreventLoading('testft') - call ale#linter#Define('testft', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'true', - \ 'command': 'true', - \}) - -After: - Restore - - unlet! g:checking_buffer - - delfunction TestCallback - call ale#linter#Reset() - - augroup VaderTest - autocmd! - augroup END - - augroup! VaderTest - -Given testft (An empty file): -Execute(ALELintPre should not return success on ale#engine#IsCheckingBuffer): - augroup VaderTest - autocmd! - autocmd User ALELintPre let g:checking_buffer = ale#engine#IsCheckingBuffer(bufnr('')) ? 1 : 0 - augroup END - - ALELint - - AssertEqual g:checking_buffer, 0 - -Execute(ALEJobStarted should return success on ale#engine#IsCheckingBuffer): - augroup VaderTest - autocmd! - autocmd User ALEJobStarted let g:checking_buffer = ale#engine#IsCheckingBuffer(bufnr('')) ? 1 : 0 - augroup END - - ALELint - - AssertEqual g:checking_buffer, 1 diff --git a/dotfiles/.vim/plugged/ale/test/test_cleanup.vader b/dotfiles/.vim/plugged/ale/test/test_cleanup.vader deleted file mode 100644 index 232874aa..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_cleanup.vader +++ /dev/null @@ -1,14 +0,0 @@ -After: - unlet! g:buffer - let g:ale_buffer_info = {} - -Execute('ALE globals should be cleared when the buffer is deleted): - new - - let g:ale_buffer_info = { - \ bufnr(''): {'temporary_file_list': [], 'temporary_directory_list': []}, - \ 10347: {'temporary_file_list': [], 'temporary_directory_list': []}, - \} - - bdelete - AssertEqual {10347: {'temporary_file_list': [], 'temporary_directory_list': []}}, g:ale_buffer_info diff --git a/dotfiles/.vim/plugged/ale/test/test_code_action.vader b/dotfiles/.vim/plugged/ale/test/test_code_action.vader deleted file mode 100644 index 80e2b1d8..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_code_action.vader +++ /dev/null @@ -1,605 +0,0 @@ -Before: - let g:notified_changes = [] - - runtime autoload/ale/lsp.vim - - function! ale#lsp#NotifyForChanges(conn_id, buffer) abort - call add(g:notified_changes, { - \ 'conn_id': a:conn_id, - \ 'buffer': a:buffer - \}) - endfunction - - Save g:ale_enabled - let g:ale_enabled = 0 - - let g:file1 = tempname() - let g:file2 = tempname() - let g:test = {} - - let g:test.create_change = {line, offset, end_line, end_offset, value -> - \{ - \ 'changes': [{ - \ 'fileName': g:file1, - \ 'textChanges': [{ - \ 'start': { - \ 'line': line, - \ 'offset': offset, - \ }, - \ 'end': { - \ 'line': end_line, - \ 'offset': end_offset, - \ }, - \ 'newText': value, - \ }], - \ }] - \}} - - function! WriteFileAndEdit() abort - let g:test.text = [ - \ 'class Name {', - \ ' value: string', - \ '}', - \] - call writefile(g:test.text, g:file1, 'S') - execute 'edit ' . g:file1 - endfunction! - -After: - " Close the extra buffers if we opened it. - if bufnr(g:file1) != -1 && buflisted(bufnr(g:file1)) - execute ':bp! | :bd! ' . bufnr(g:file1) - endif - if bufnr(g:file2) != -1 && buflisted(bufnr(g:file2)) - execute ':bp! | :bd! ' . bufnr(g:file2) - endif - - if filereadable(g:file1) - call delete(g:file1) - endif - if filereadable(g:file2) - call delete(g:file2) - endif - - unlet! g:notified_changes - " unlet! g:expected_notified_changes - unlet! g:file1 - unlet! g:file2 - unlet! g:test - unlet! g:changes - delfunction WriteFileAndEdit - - runtime autoload/ale/lsp.vim - - Restore - - -Execute(It should modify and save multiple files): - call writefile([ - \ 'class Name {', - \ ' value: string', - \ '}', - \ '', - \ 'class B {', - \ ' constructor(readonly a: Name) {}', - \ '}' - \], g:file1, 'S') - call writefile([ - \ 'import A from "A"', - \ 'import {', - \ ' B,', - \ ' C,', - \ '} from "module"', - \ 'import D from "D"', - \], g:file2, 'S') - - call ale#code_action#HandleCodeAction( - \ { - \ 'changes': [{ - \ 'fileName': g:file1, - \ 'textChanges': [{ - \ 'start': { - \ 'line': 1, - \ 'offset': 7, - \ }, - \ 'end': { - \ 'line': 1, - \ 'offset': 11, - \ }, - \ 'newText': 'Value', - \ }, { - \ 'start': { - \ 'line': 6, - \ 'offset': 27, - \ }, - \ 'end': { - \ 'line': 6, - \ 'offset': 31, - \ }, - \ 'newText': 'Value', - \ }], - \ }, { - \ 'fileName': g:file2, - \ 'textChanges': [{ - \ 'start': { - \ 'line': 2, - \ 'offset': 1, - \ }, - \ 'end': { - \ 'line': 6, - \ 'offset': 1, - \ }, - \ 'newText': "import {A, B} from 'module'\n\n", - \ }] - \ }], - \ }, - \ {'should_save': 1, 'conn_id': 'test_conn'}, - \) - - AssertEqual [ - \ 'class Value {', - \ ' value: string', - \ '}', - \ '', - \ 'class B {', - \ ' constructor(readonly a: Value) {}', - \ '}', - \ '', - \], readfile(g:file1, 'b') - - AssertEqual [ - \ 'import A from "A"', - \ 'import {A, B} from ''module''', - \ '', - \ 'import D from "D"', - \ '', - \], readfile(g:file2, 'b') - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(g:file1), - \}, { - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(g:file2), - \}], g:notified_changes - -Execute(Beginning of file can be modified): - let g:test.text = [ - \ 'class Name {', - \ ' value: string', - \ '}', - \] - call writefile(g:test.text, g:file1, 'S') - - call ale#code_action#HandleCodeAction( - \ { - \ 'changes': [{ - \ 'fileName': g:file1, - \ 'textChanges': [{ - \ 'start': { - \ 'line': 1, - \ 'offset': 1, - \ }, - \ 'end': { - \ 'line': 1, - \ 'offset': 1, - \ }, - \ 'newText': "type A: string\ntype B: number\n", - \ }], - \ }] - \ }, - \ {'should_save': 1, 'conn_id': 'test_conn'}, - \) - - AssertEqual [ - \ 'type A: string', - \ 'type B: number', - \] + g:test.text + [''], readfile(g:file1, 'b') - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(g:file1), - \}], g:notified_changes - - -Execute(End of file can be modified): - let g:test.text = [ - \ 'class Name {', - \ ' value: string', - \ '}', - \] - call writefile(g:test.text, g:file1, 'S') - - call ale#code_action#HandleCodeAction( - \ { - \ 'changes': [{ - \ 'fileName': g:file1, - \ 'textChanges': [{ - \ 'start': { - \ 'line': 4, - \ 'offset': 1, - \ }, - \ 'end': { - \ 'line': 4, - \ 'offset': 1, - \ }, - \ 'newText': "type A: string\ntype B: number\n", - \ }], - \ }] - \ }, - \ {'should_save': 1, 'conn_id': 'test_conn'}, - \) - - AssertEqual g:test.text + [ - \ 'type A: string', - \ 'type B: number', - \ '', - \], readfile(g:file1, 'b') - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(g:file1), - \}], g:notified_changes - - -Execute(Current buffer contents will be reloaded): - let g:test.text = [ - \ 'class Name {', - \ ' value: string', - \ '}', - \] - call writefile(g:test.text, g:file1, 'S') - - execute 'edit ' . g:file1 - let g:test.buffer = bufnr(g:file1) - - call ale#code_action#HandleCodeAction( - \ { - \ 'changes': [{ - \ 'fileName': g:file1, - \ 'textChanges': [{ - \ 'start': { - \ 'line': 1, - \ 'offset': 1, - \ }, - \ 'end': { - \ 'line': 1, - \ 'offset': 1, - \ }, - \ 'newText': "type A: string\ntype B: number\n", - \ }], - \ }] - \ }, - \ {'should_save': 1, 'conn_id': 'test_conn'}, - \) - - AssertEqual [ - \ 'type A: string', - \ 'type B: number', - \] + g:test.text + [''], readfile(g:file1, 'b') - - AssertEqual [ - \ 'type A: string', - \ 'type B: number', - \] + g:test.text, getbufline(g:test.buffer, 1, '$') - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(g:file1), - \}], g:notified_changes - - -Execute(Unlisted buffer contents will be modified correctly): - let g:test.text = [ - \ 'class Name {', - \ ' value: string', - \ '}', - \] - call writefile(g:test.text, g:file1, 'S') - - execute 'edit ' . g:file1 - let g:test.buffer = bufnr(g:file1) - - execute 'bd' - AssertEqual bufnr(g:file1), g:test.buffer - - call ale#code_action#HandleCodeAction( - \ { - \ 'changes': [{ - \ 'fileName': g:file1, - \ 'textChanges': [{ - \ 'start': { - \ 'line': 1, - \ 'offset': 1, - \ }, - \ 'end': { - \ 'line': 1, - \ 'offset': 1, - \ }, - \ 'newText': "type A: string\ntype B: number\n", - \ }], - \ }] - \ }, - \ {'should_save': 1, 'conn_id': 'test_conn'}, - \) - - AssertEqual [ - \ 'type A: string', - \ 'type B: number', - \] + g:test.text + [''], readfile(g:file1, 'b') - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(g:file1), - \}], g:notified_changes - -# Tests for cursor repositioning. In comments `=` designates change range, and -# `C` cursor position - -# C === -Execute(Cursor will not move when it is before text change): - call WriteFileAndEdit() - let g:test.changes = g:test.create_change(2, 3, 2, 8, 'value2') - - call setpos('.', [0, 1, 1, 0]) - call ale#code_action#HandleCodeAction(g:test.changes, { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \}) - AssertEqual [1, 1], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - - call setpos('.', [0, 2, 2, 0]) - call ale#code_action#HandleCodeAction(g:test.changes, { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \}) - AssertEqual [2, 2], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}, { - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - -# ====C==== -Execute(Cursor column will move to the change end when cursor between start/end): - let g:test.changes = g:test.create_change(2, 3, 2, 8, 'value2') - - for r in range(3, 8) - call WriteFileAndEdit() - call setpos('.', [0, 2, r, 0]) - AssertEqual ' value: string', getline('.') - call ale#code_action#HandleCodeAction(g:test.changes, { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \}) - AssertEqual ' value2: string', getline('.') - AssertEqual [2, 9], getpos('.')[1:2] - endfor - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}, { - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}, { - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}, { - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}, { - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}, { - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - - -# ====C -Execute(Cursor column will move back when new text is shorter): - call WriteFileAndEdit() - call setpos('.', [0, 2, 8, 0]) - AssertEqual ' value: string', getline('.') - call ale#code_action#HandleCodeAction( - \ g:test.create_change(2, 3, 2, 8, 'val'), - \ { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \ }) - AssertEqual ' val: string', getline('.') - AssertEqual [2, 6], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - - -# ==== C -Execute(Cursor column will move forward when new text is longer): - call WriteFileAndEdit() - - call setpos('.', [0, 2, 8, 0]) - AssertEqual ' value: string', getline('.') - call ale#code_action#HandleCodeAction( - \ g:test.create_change(2, 3, 2, 8, 'longValue'), - \ { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \ }) - AssertEqual ' longValue: string', getline('.') - AssertEqual [2, 12], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - -# ========= -# = -# C -Execute(Cursor line will move when updates are happening on lines above): - call WriteFileAndEdit() - call setpos('.', [0, 3, 1, 0]) - AssertEqual '}', getline('.') - call ale#code_action#HandleCodeAction( - \ g:test.create_change(1, 1, 2, 1, "test\ntest\n"), - \ { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \ }) - AssertEqual '}', getline('.') - AssertEqual [4, 1], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - - -# ========= -# =C -Execute(Cursor line and column will move when change on lines above and just before cursor column): - call WriteFileAndEdit() - call setpos('.', [0, 2, 2, 0]) - AssertEqual ' value: string', getline('.') - call ale#code_action#HandleCodeAction( - \ g:test.create_change(1, 1, 2, 1, "test\ntest\n123"), - \ { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \ }) - AssertEqual '123 value: string', getline('.') - AssertEqual [3, 5], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - -# ========= -# ======C== -# = -Execute(Cursor line and column will move at the end of changes): - call WriteFileAndEdit() - call setpos('.', [0, 2, 10, 0]) - AssertEqual ' value: string', getline('.') - call ale#code_action#HandleCodeAction( - \ g:test.create_change(1, 1, 3, 1, "test\n"), - \ { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \ }) - AssertEqual '}', getline('.') - AssertEqual [2, 1], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - -# C == -# === -Execute(Cursor will not move when changes happening on lines >= cursor, but after cursor): - call WriteFileAndEdit() - call setpos('.', [0, 2, 3, 0]) - AssertEqual ' value: string', getline('.') - call ale#code_action#HandleCodeAction( - \ g:test.create_change(2, 10, 3, 1, "number\n"), - \ { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \ }) - AssertEqual ' value: number', getline('.') - AssertEqual [2, 3], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - -Execute(Cursor will not move when change covers entire file): - call WriteFileAndEdit() - call setpos('.', [0, 2, 3, 0]) - call ale#code_action#HandleCodeAction( - \ g:test.create_change(1, 1, len(g:test.text) + 1, 1, - \ join(g:test.text + ['x'], "\n")), - \ { - \ 'should_save': 1, - \ 'conn_id': 'test_conn', - \ }) - AssertEqual [2, 3], getpos('.')[1:2] - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - -Execute(It should just modify file when should_save is set to v:false): - call WriteFileAndEdit() - let g:test.change = g:test.create_change(1, 1, 1, 1, "import { writeFile } from 'fs';\n") - call ale#code_action#HandleCodeAction(g:test.change, { - \ 'conn_id': 'test_conn', - \}) - AssertEqual 1, getbufvar(bufnr(''), '&modified') - AssertEqual [ - \ 'import { writeFile } from ''fs'';', - \ 'class Name {', - \ ' value: string', - \ '}', - \], getline(1, '$') - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - -Given typescript(An example TypeScript file): - type Foo = {} - - export interface ISomething { - fooLongName: Foo | null - } - - export class SomethingElse implements ISomething { - // Bindings - fooLongName!: ISomething['fooLongName'] - } - -Execute(): - let g:changes = [ - \ {'end': {'offset': 14, 'line': 4}, 'newText': 'foo', 'start': {'offset': 3, 'line': 4}}, - \ {'end': {'offset': 40, 'line': 9}, 'newText': 'foo', 'start': {'offset': 29, 'line': 9}}, - \ {'end': {'offset': 14, 'line': 9}, 'newText': 'foo', 'start': {'offset': 3, 'line': 9}}, - \] - - call ale#code_action#ApplyChanges(expand('%:p'), g:changes, { - \ 'conn_id': 'test_conn', - \}) - - AssertEqual [{ - \ 'conn_id': 'test_conn', - \ 'buffer': bufnr(''), - \}], g:notified_changes - -Expect(The changes should be applied correctly): - type Foo = {} - - export interface ISomething { - foo: Foo | null - } - - export class SomethingElse implements ISomething { - // Bindings - foo!: ISomething['foo'] - } diff --git a/dotfiles/.vim/plugged/ale/test/test_code_action_corner_cases.vader b/dotfiles/.vim/plugged/ale/test/test_code_action_corner_cases.vader deleted file mode 100644 index b5741d43..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_code_action_corner_cases.vader +++ /dev/null @@ -1,141 +0,0 @@ -" Tests for various corner cases of applying code changes from LSP. -" -" These can be verified against the reference vscode implementation using the -" following javascript program: -" -" const { TextDocument } = require('vscode-languageserver-textdocument'); -" const { TextEdit, Position, Range } = require('vscode-languageserver-types'); -" function MkPos(line, offset) { return Position.create(line - 1, offset - 1); } -" function MkInsert(pos, newText) { return TextEdit.insert(pos, newText); } -" function MkDelete(start, end) { return TextEdit.del(Range.create(start, end)); } -" function TestChanges(s, es) { -" return TextDocument.applyEdits(TextDocument.create(null, null, null, s), es); -" } -" -" const fs = require("fs"); -" const assert = require('assert').strict; -" const testRegex = /(? ale#lsp_linter#OnInit(a:linter, l:details, a:Callback)} - endfunction - - function! ale#lsp#HasCapability(conn_id, capability) abort - let g:capability_checked = a:capability - - return 1 - endfunction - - function! ale#lsp#RegisterCallback(conn_id, callback) abort - let g:Callback = a:callback - endfunction - - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 42 - endfunction - - function! ale#util#Execute(expr) abort - call add(g:expr_list, a:expr) - endfunction - - function! ale#code_action#HandleCodeAction(code_action, options) abort - let g:handle_code_action_called = 1 - Assert !get(a:options, 'should_save') - call add(g:code_actions, a:code_action) - endfunction - - function! ale#util#Input(message, value) abort - return '2' - endfunction - -After: - Restore - - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - unlet! g:capability_checked - unlet! g:InitCallback - unlet! g:old_filename - unlet! g:conn_id - unlet! g:Callback - unlet! g:message_list - unlet! g:expr_list - unlet! b:ale_linters - unlet! g:options - unlet! g:code_actions - unlet! g:handle_code_action_called - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/codefix.vim - runtime autoload/ale/code_action.vim - -Execute(Failed codefix responses should be handled correctly): - call ale#codefix#HandleTSServerResponse( - \ 1, - \ {'command': 'getCodeFixes', 'request_seq': 3} - \) - AssertEqual g:handle_code_action_called, 0 - -Given typescript(Some typescript file): - foo - somelongerline () - bazxyzxyzxyz - -Execute(getCodeFixes from tsserver should be handled): - call ale#codefix#SetMap({3: {}}) - call ale#codefix#HandleTSServerResponse(1, { - \ 'command': 'getCodeFixes', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'type': 'response', - \ 'body': [ - \ { - \ 'description': 'Import default "x" from module "./z"', - \ 'fixName': 'import', - \ 'changes': [ - \ { - \ 'fileName': "/foo/bar/file1.ts", - \ 'textChanges': [ - \ { - \ 'end': { - \ 'line': 2, - \ 'offset': 1, - \ }, - \ 'newText': 'import x from "./z";^@', - \ 'start': { - \ 'line': 2, - \ 'offset': 1, - \ } - \ } - \ ] - \ } - \ ] - \ } - \ ] - \}) - - AssertEqual g:handle_code_action_called, 1 - AssertEqual - \ [ - \ { - \ 'description': 'codefix', - \ 'changes': [ - \ { - \ 'fileName': "/foo/bar/file1.ts", - \ 'textChanges': [ - \ { - \ 'end': { - \ 'line': 2, - \ 'offset': 1 - \ }, - \ 'newText': 'import x from "./z";^@', - \ 'start': { - \ 'line': 2, - \ 'offset': 1 - \ } - \ } - \ ] - \ } - \ ] - \ } - \ ], - \ g:code_actions - -Execute(getCodeFixes from tsserver should be handled with user input if there are more than one action): - call ale#codefix#SetMap({3: {}}) - call ale#codefix#HandleTSServerResponse(1, { - \ 'command': 'getCodeFixes', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'type': 'response', - \ 'body': [ - \ { - \ 'description': 'Import default "x" from module "./z"', - \ 'fixName': 'import', - \ 'changes': [ - \ { - \ 'fileName': "/foo/bar/file1.ts", - \ 'textChanges': [ - \ { - \ 'end': { - \ 'line': 2, - \ 'offset': 1, - \ }, - \ 'newText': 'import x from "./z";^@', - \ 'start': { - \ 'line': 2, - \ 'offset': 1, - \ } - \ } - \ ] - \ } - \ ] - \ }, - \ { - \ 'description': 'Import default "x" from module "./y"', - \ 'fixName': 'import', - \ 'changes': [ - \ { - \ 'fileName': "/foo/bar/file1.ts", - \ 'textChanges': [ - \ { - \ 'end': { - \ 'line': 2, - \ 'offset': 1, - \ }, - \ 'newText': 'import x from "./y";^@', - \ 'start': { - \ 'line': 2, - \ 'offset': 1, - \ } - \ } - \ ] - \ } - \ ] - \ } - \ ] - \}) - - AssertEqual g:handle_code_action_called, 1 - AssertEqual - \ [ - \ { - \ 'description': 'codefix', - \ 'changes': [ - \ { - \ 'fileName': "/foo/bar/file1.ts", - \ 'textChanges': [ - \ { - \ 'end': { - \ 'line': 2, - \ 'offset': 1 - \ }, - \ 'newText': 'import x from "./y";^@', - \ 'start': { - \ 'line': 2, - \ 'offset': 1 - \ } - \ } - \ ] - \ } - \ ] - \ } - \ ], - \ g:code_actions - -Execute(Prints a tsserver error message when getCodeFixes unsuccessful): - call ale#codefix#SetMap({3: {}}) - call ale#codefix#HandleTSServerResponse(1, { - \ 'command': 'getCodeFixes', - \ 'request_seq': 3, - \ 'success': v:false, - \ 'message': 'something is wrong', - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''Error while getting code fixes. Reason: something is wrong'''], g:expr_list - -Execute(Does nothing when where are no code fixes): - call ale#codefix#SetMap({3: {}}) - call ale#codefix#HandleTSServerResponse(1, { - \ 'command': 'getCodeFixes', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': [] - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''No code fixes available.'''], g:expr_list - -Execute(tsserver codefix requests should be sent): - call ale#linter#Reset() - - runtime ale_linters/typescript/tsserver.vim - let g:ale_buffer_info = {bufnr(''): {'loclist': [{'lnum': 2, 'col': 5, 'code': 2304, 'linter_name': 'tsserver'}]}} - call setpos('.', [bufnr(''), 2, 16, 0]) - - " ALECodeAction - call ale#codefix#Execute(0) - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'code_actions', g:capability_checked - AssertEqual - \ 'function(''ale#codefix#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@getCodeFixes', { - \ 'startLine': 2, - \ 'startOffset': 16, - \ 'endLine': 2, - \ 'endOffset': 17, - \ 'file': expand('%:p'), - \ 'errorCodes': [2304], - \ }] - \ ], - \ g:message_list - -Execute(tsserver codefix requests should be sent only for error with code): - call ale#linter#Reset() - - runtime ale_linters/typescript/tsserver.vim - let g:ale_buffer_info = {bufnr(''): {'loclist': [{'lnum': 2, 'col': 16, 'linter_name': 'tsserver'}, {'lnum': 2, 'col': 16, 'code': 2304, 'linter_name': 'tsserver'}]}} - call setpos('.', [bufnr(''), 2, 16, 0]) - - " ALECodeAction - call ale#codefix#Execute(0) - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'code_actions', g:capability_checked - AssertEqual - \ 'function(''ale#codefix#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@getCodeFixes', { - \ 'startLine': 2, - \ 'startOffset': 16, - \ 'endLine': 2, - \ 'endOffset': 17, - \ 'file': expand('%:p'), - \ 'errorCodes': [2304], - \ }] - \ ], - \ g:message_list - -Execute(getApplicableRefactors from tsserver should be handled): - call ale#codefix#SetMap({3: { - \ 'buffer': expand('%:p'), - \ 'line': 1, - \ 'column': 2, - \ 'end_line': 3, - \ 'end_column': 4, - \ 'connection_id': 0, - \}}) - call ale#codefix#HandleTSServerResponse(1, - \ {'seq': 0, 'request_seq': 3, 'type': 'response', 'success': v:true, 'body': [{'actions': [{'description': 'Extract to constant in enclosing scope', 'name': 'constant_scope_0'}], 'description': 'Extract constant', 'name': 'Extract Symbol'}, {'actions': [{'description': 'Extract to function in module scope', 'name': 'function_scope_1'}], 'description': 'Extract function', 'name': 'Extract Symbol'}], 'command': 'getApplicableRefactors'}) - - AssertEqual - \ [ - \ [0, 'ts@getEditsForRefactor', { - \ 'startLine': 1, - \ 'startOffset': 2, - \ 'endLine': 3, - \ 'endOffset': 5, - \ 'file': expand('%:p'), - \ 'refactor': 'Extract Symbol', - \ 'action': 'function_scope_1', - \ }] - \ ], - \ g:message_list - -Execute(getApplicableRefactors should print error on failure): - call ale#codefix#SetMap({3: { - \ 'buffer': expand('%:p'), - \ 'line': 1, - \ 'column': 2, - \ 'end_line': 3, - \ 'end_column': 4, - \ 'connection_id': 0, - \}}) - call ale#codefix#HandleTSServerResponse(1, - \ {'seq': 0, 'request_seq': 3, 'type': 'response', 'success': v:false, 'message': 'oops', 'command': 'getApplicableRefactors'}) - - AssertEqual ['echom ''Error while getting applicable refactors. Reason: oops'''], g:expr_list - -Execute(getApplicableRefactors should do nothing if there are no refactors): - call ale#codefix#SetMap({3: { - \ 'buffer': expand('%:p'), - \ 'line': 1, - \ 'column': 2, - \ 'end_line': 3, - \ 'end_column': 4, - \ 'connection_id': 0, - \}}) - call ale#codefix#HandleTSServerResponse(1, - \ {'seq': 0, 'request_seq': 3, 'type': 'response', 'success': v:true, 'body': [], 'command': 'getApplicableRefactors'}) - - AssertEqual ['echom ''No applicable refactors available.'''], g:expr_list - -Execute(getEditsForRefactor from tsserver should be handled): - call ale#codefix#SetMap({3: {}}) - call ale#codefix#HandleTSServerResponse(1, - \{'seq': 0, 'request_seq': 3, 'type': 'response', 'success': v:true, 'body': {'edits': [{'fileName': '/foo/bar/file.ts', 'textChanges': [{'end': {'offset': 35, 'line': 9}, 'newText': 'newFunction(app);', 'start': {'offset': 3, 'line': 8}}, {'end': {'offset': 4, 'line': 19}, 'newText': '^@function newFunction(app: Router) {^@ app.use(booExpressCsrf());^@ app.use(booExpressRequireHttps);^@}^@', 'start': {'offset': 4, 'line': 19}}]}], 'renameLocation': {'offset': 3, 'line': 8}, 'renameFilename': '/foo/bar/file.ts'}, 'command': 'getEditsForRefactor' } - \) - - AssertEqual g:handle_code_action_called, 1 - AssertEqual - \ [ - \ { - \ 'description': 'editsForRefactor', - \ 'changes': [{'fileName': '/foo/bar/file.ts', 'textChanges': [{'end': {'offset': 35, 'line': 9}, 'newText': 'newFunction(app);', 'start': {'offset': 3, 'line': 8}}, {'end': {'offset': 4, 'line': 19}, 'newText': '^@function newFunction(app: Router) {^@ app.use(booExpressCsrf());^@ app.use(booExpressRequireHttps);^@}^@', 'start': {'offset': 4, 'line': 19}}]}], - \ } - \ ], - \ g:code_actions - -Execute(getEditsForRefactor should print error on failure): - call ale#codefix#SetMap({3: {}}) - call ale#codefix#HandleTSServerResponse(1, - \{'seq': 0, 'request_seq': 3, 'type': 'response', 'success': v:false, 'message': 'oops', 'command': 'getEditsForRefactor' } - \) - - AssertEqual ['echom ''Error while getting edits for refactor. Reason: oops'''], g:expr_list - -Execute(Failed LSP responses should be handled correctly): - call ale#codefix#HandleLSPResponse( - \ 1, - \ {'method': 'workspace/applyEdit', 'request_seq': 3} - \) - AssertEqual g:handle_code_action_called, 0 - -Given python(Some python file): - def main(): - a = 1 - b = a + 2 - -Execute("workspace/applyEdit" from LSP should be handled): - call ale#codefix#SetMap({3: {}}) - call ale#codefix#HandleLSPResponse(1, - \ {'id': 0, 'jsonrpc': '2.0', 'method': 'workspace/applyEdit', 'params': {'edit': {'changes': {'file:///foo/bar/file.ts': [{'range': {'end': {'character': 27, 'line': 7}, 'start': {'character': 27, 'line': 7}}, 'newText': ', Config'}, {'range': {'end': {'character': 12, 'line': 96}, 'start': {'character': 2, 'line': 94}}, 'newText': 'await newFunction(redis, imageKey, cover, config);'}, {'range': {'end': {'character': 2, 'line': 99}, 'start': {'character': 2, 'line': 99}}, 'newText': '^@async function newFunction(redis: IRedis, imageKey: string, cover: Buffer, config: Config) {^@ try {^@ await redis.set(imageKey, cover, ''ex'', parseInt(config.coverKeyTTL, 10));^@ }^@ catch { }^@}^@'}]}}}}) - - AssertEqual g:handle_code_action_called, 1 - AssertEqual - \ [{'description': 'applyEdit', 'changes': [{'fileName': '/foo/bar/file.ts', 'textChanges': [{'end': {'offset': 28, 'line': 8}, 'newText': ', Config', 'start': {'offset': 28, 'line': 8}}, {'end': {'offset': 13, 'line': 97}, 'newText': 'await newFunction(redis, imageKey, cover, config);', 'start': {'offset': 3, 'line': 95}}, {'end': {'offset': 3, 'line': 100}, 'newText': '^@async function newFunction(redis: IRedis, imageKey: string, cover: Buffer, config: Config) {^@ try {^@ await redis.set(imageKey, cover, ''ex'', parseInt(config.coverKeyTTL, 10));^@ }^@ catch { }^@}^@', 'start': {'offset': 3, 'line': 100}}]}]}], - \ g:code_actions - -Execute(Code Actions from LSP should be handled when returned with documentChanges): - call ale#codefix#SetMap({2: {}}) - call ale#codefix#HandleLSPResponse(1, - \ {'id': 2, 'jsonrpc': '2.0', 'result': [{'diagnostics': v:null, 'edit': {'changes': v:null, 'documentChanges': [{'edits': [{'range': {'end': {'character': 4, 'line': 2}, 'start': {'character': 4, 'line': 1}}, 'newText': ''}, {'range': {'end': {'character': 9, 'line': 2}, 'start': {'character': 8, 'line': 2}}, 'newText': '(1)'}], 'textDocument': {'uri': 'file:///foo/bar/test.py', 'version': v:null}}]}, 'kind': 'refactor.inline', 'title': 'Inline variable', 'command': v:null}, {'diagnostics': v:null, 'edit': {'changes': v:null, 'documentChanges': [{'edits': [{'range': {'end': {'character': 0, 'line': 0}, 'start': {'character': 0, 'line': 0}}, 'newText': 'def func_bomdjnxh():^@ a = 1return a^@^@^@'}, {'range': {'end': {'character': 9, 'line': 1}, 'start': {'character': 8, 'line': 1}}, 'newText': 'func_bomdjnxh()^@'}], 'textDocument': {'uri': 'file:///foo/bar/test.py', 'version': v:null}}]}, 'kind': 'refactor.extract', 'title': 'Extract expression into function ''func_bomdjnxh''', 'command': v:null}]}) - - AssertEqual g:handle_code_action_called, 1 - AssertEqual - \ [{'description': 'codeaction', 'changes': [{'fileName': '/foo/bar/test.py', 'textChanges': [{'end': {'offset': 1, 'line': 1}, 'newText': 'def func_bomdjnxh():^@ a = 1return a^@^@^@', 'start': {'offset': 1, 'line': 1}}, {'end': {'offset': 10, 'line': 2}, 'newText': 'func_bomdjnxh()^@', 'start': {'offset': 9, 'line': 2}}]}]}], - \ g:code_actions - -Execute(LSP Code Actions handles CodeAction responses): - call ale#codefix#SetMap({3: { - \ 'connection_id': 0, - \}}) - call ale#codefix#HandleLSPResponse(1, - \ {'id': 3, 'jsonrpc': '2.0', 'result': [{'kind': 'refactor', 'title': 'Extract to inner function in function ''getVideo''', 'command': {'arguments': [{'file': '/foo/bar/file.ts', 'endOffset': 0, 'action': 'function_scope_0', 'startOffset': 1, 'startLine': 65, 'refactor': 'Extract Symbol', 'endLine': 68}], 'title': 'Extract to inner function in function ''getVideo''', 'command': '_typescript.applyRefactoring'}}, {'kind': 'refactor', 'title': 'Extract to function in module scope', 'command': {'arguments': [{'file': '/foo/bar/file.ts', 'endOffset': 0, 'action': 'function_scope_1', 'startOffset': 1, 'startLine': 65, 'refactor': 'Extract Symbol', 'endLine': 68}], 'title': 'Extract to function in module scope', 'command': '_typescript.applyRefactoring'}}]}) - - AssertEqual - \ [[0, 'workspace/executeCommand', {'arguments': [{'file': '/foo/bar/file.ts', 'action': 'function_scope_1', 'endOffset': 0, 'refactor': 'Extract Symbol', 'endLine': 68, 'startLine': 65, 'startOffset': 1}], 'command': '_typescript.applyRefactoring'}]], - \ g:message_list - -Execute(LSP Code Actions handles Command responses): - call ale#codefix#SetMap({2: { - \ 'connection_id': 2, - \}}) - call ale#codefix#HandleLSPResponse(1, - \ {'id': 2, 'jsonrpc': '2.0', 'result': [{'title': 'fake for testing'}, {'arguments': [{'documentChanges': [{'edits': [{'range': {'end': {'character': 31, 'line': 2}, 'start': {'character': 31, 'line': 2}}, 'newText': ', createVideo'}], 'textDocument': {'uri': 'file:///foo/bar/file.ts', 'version': 1}}]}], 'title': 'Add ''createVideo'' to existing import declaration from "./video"', 'command': '_typescript.applyWorkspaceEdit'}]}) - - AssertEqual - \ [[0, 'workspace/executeCommand', {'arguments': [{'documentChanges': [{'edits': [{'range': {'end': {'character': 31, 'line': 2}, 'start': {'character': 31, 'line': 2}}, 'newText': ', createVideo'}], 'textDocument': {'uri': 'file:///foo/bar/file.ts', 'version': 1}}]}], 'command': '_typescript.applyWorkspaceEdit'}]], - \ g:message_list - -Execute(Prints message when LSP code action returns no results): - call ale#codefix#SetMap({3: {}}) - call ale#codefix#HandleLSPResponse(1, - \ {'id': 3, 'jsonrpc': '2.0', 'result': []}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''No code actions received from server'''], g:expr_list - -Execute(LSP code action requests should be sent): - call ale#linter#Reset() - - runtime ale_linters/python/jedils.vim - let g:ale_buffer_info = {bufnr(''): {'loclist': [{'lnum': 2, 'col': 5, 'end_lnum': 2, 'end_col': 6, 'code': 2304, 'text': 'oops'}]}} - call setpos('.', [bufnr(''), 2, 5, 0]) - - " ALECodeAction - call ale#codefix#Execute(0) - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'code_actions', g:capability_checked - AssertEqual - \ 'function(''ale#codefix#HandleLSPResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ [0, 'textDocument/codeAction', { - \ 'context': { - \ 'diagnostics': [{'range': {'end': {'character': 6, 'line': 1}, 'start': {'character': 4, 'line': 1}}, 'code': 2304, 'message': 'oops'}] - \ }, - \ 'range': {'end': {'character': 5, 'line': 1}, 'start': {'character': 4, 'line': 1}}, - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))} - \ }] - \ ], - \ g:message_list[-1:] - -Execute(LSP code action requests should be sent only for error with code): - call ale#linter#Reset() - - runtime ale_linters/python/jedils.vim - let g:ale_buffer_info = {bufnr(''): {'loclist': [{'lnum': 2, 'col': 5, 'end_lnum': 2, 'end_col': 6, 'code': 2304, 'text': 'oops'}]}} - call setpos('.', [bufnr(''), 2, 5, 0]) - - " ALECodeAction - call ale#codefix#Execute(0) - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'code_actions', g:capability_checked - AssertEqual - \ 'function(''ale#codefix#HandleLSPResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ [0, 'textDocument/codeAction', { - \ 'context': { - \ 'diagnostics': [{'range': {'end': {'character': 6, 'line': 1}, 'start': {'character': 4, 'line': 1}}, 'code': 2304, 'message': 'oops'}] - \ }, - \ 'range': {'end': {'character': 5, 'line': 1}, 'start': {'character': 4, 'line': 1}}, - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))} - \ }] - \ ], - \ g:message_list[-1:] diff --git a/dotfiles/.vim/plugged/ale/test/test_computed_lint_file_values.vader b/dotfiles/.vim/plugged/ale/test/test_computed_lint_file_values.vader deleted file mode 100644 index 6c3d209d..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_computed_lint_file_values.vader +++ /dev/null @@ -1,150 +0,0 @@ -Before: - Save g:ale_enabled - Save g:ale_run_synchronously - Save g:ale_set_lists_synchronously - Save g:ale_buffer_info - - let g:ale_enabled = 1 - let g:ale_buffer_info = {} - let g:ale_run_synchronously = 1 - let g:ale_set_lists_synchronously = 1 - - function! TestCallback(buffer, output) - " Windows adds extra spaces to the text from echo. - return [{ - \ 'lnum': 2, - \ 'col': 3, - \ 'text': 'testlinter1', - \}] - endfunction - function! TestCallback2(buffer, output) - " Windows adds extra spaces to the text from echo. - return [{ - \ 'lnum': 1, - \ 'col': 3, - \ 'text': 'testlinter2', - \}] - endfunction - function! TestCallback3(buffer, output) - " Windows adds extra spaces to the text from echo. - return [{ - \ 'lnum': 3, - \ 'col': 3, - \ 'text': 'testlinter3', - \}] - endfunction - - " These two linters computer their lint_file values after running commands. - call ale#linter#Define('foobar', { - \ 'name': 'testlinter1', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''', - \ 'lint_file': {b -> ale#command#Run(b, 'echo', {-> 1})}, - \}) - call ale#linter#Define('foobar', { - \ 'name': 'testlinter2', - \ 'callback': 'TestCallback2', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''', - \ 'lint_file': {b -> ale#command#Run(b, 'echo', {-> ale#command#Run(b, 'echo', {-> 1})})}, - \}) - " This one directly computes the result. - call ale#linter#Define('foobar', { - \ 'name': 'testlinter3', - \ 'callback': 'TestCallback3', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''', - \ 'lint_file': {b -> 1}, - \}) - - let g:filename = tempname() - call writefile([], g:filename) - call ale#test#SetFilename(g:filename) - -After: - delfunction TestCallback - - call ale#engine#Cleanup(bufnr('')) - Restore - call ale#linter#Reset() - - " Items and markers, etc. - call setloclist(0, []) - call clearmatches() - call ale#sign#Clear() - - if filereadable(g:filename) - call delete(g:filename) - endif - - unlet g:filename - -Given foobar(A file with some lines): - foo - bar - baz - -Execute(lint_file results where the result is eventually computed should be run): - call ale#Queue(0, 'lint_file') - call ale#test#FlushJobs() - - AssertEqual - \ [ - \ { - \ 'bufnr': bufnr('%'), - \ 'lnum': 1, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'testlinter2', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \ }, - \ { - \ 'bufnr': bufnr('%'), - \ 'lnum': 2, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'testlinter1', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \ }, - \ { - \ 'bufnr': bufnr('%'), - \ 'lnum': 3, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'testlinter3', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - -Execute(Linters where lint_file eventually evaluates to 1 shouldn't be run if we don't want to run them): - call ale#Queue(0, '') - call ale#test#FlushJobs() - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - -Execute(Keeping computed lint_file jobs running should work): - AssertEqual 'testlinter2', ale#linter#Get('foobar')[1].name - - call ale#engine#InitBufferInfo(bufnr('')) - - call ale#engine#MarkLinterActive( - \ g:ale_buffer_info[bufnr('')], - \ ale#linter#Get('foobar')[1] - \) - call ale#engine#RunLinters(bufnr(''), ale#linter#Get('foobar'), 0) - - Assert !empty(g:ale_buffer_info[bufnr('')].active_linter_list), - \ 'The active linter list was empty' - Assert ale#engine#IsCheckingBuffer(bufnr('')), - \ 'The IsCheckingBuffer function returned 0' diff --git a/dotfiles/.vim/plugged/ale/test/test_csslint_config_detection.vader b/dotfiles/.vim/plugged/ale/test/test_csslint_config_detection.vader deleted file mode 100644 index c8e5fa98..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_csslint_config_detection.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - - runtime ale_linters/css/csslint.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(--config should be set when the .csslintrc file is found): - call ale#test#SetFilename('test-files/csslint/some-app/subdir/testfile.js') - - AssertEqual - \ ( - \ 'csslint --format=compact ' - \ . '--config=' . ale#Escape(ale#path#Simplify(g:dir . '/test-files/csslint/some-app/.csslintrc')) - \ . ' %t' - \ ), - \ ale_linters#css#csslint#GetCommand(bufnr('')) - -Execute(--config should not be used when no .csslintrc file exists): - call ale#test#SetFilename('test-files/csslint/other-app/testfile.css') - - AssertEqual - \ ( - \ 'csslint --format=compact ' - \ . ' %t' - \ ), - \ ale_linters#css#csslint#GetCommand(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_cursor_warnings.vader b/dotfiles/.vim/plugged/ale/test/test_cursor_warnings.vader deleted file mode 100644 index b767d225..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_cursor_warnings.vader +++ /dev/null @@ -1,256 +0,0 @@ -Before: - Save g:ale_echo_msg_format - Save g:ale_echo_cursor - Save b:ale_lint_on_insert_leave - - let g:ale_echo_msg_format = '%code: %%s' - let b:ale_lint_on_insert_leave = 0 - - " We should prefer the error message at column 10 instead of the warning. - let g:ale_buffer_info = { - \ bufnr('%'): { - \ 'loclist': [ - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'bettercode', - \ 'nr': -1, - \ 'type': 'W', - \ 'code': 'semi', - \ 'text': 'Ignore me.', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'bettercode', - \ 'nr': -1, - \ 'type': 'E', - \ 'code': 'semi', - \ 'text': "Missing semicolon.\r", - \ 'detail': "Every statement should end with a semicolon\nsecond line", - \ }, - \ { - \ 'lnum': 1, - \ 'col': 14, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'bettercode', - \ 'nr': -1, - \ 'type': 'I', - \ 'text': 'Some information', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 10, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'bettercode', - \ 'nr': -1, - \ 'type': 'W', - \ 'code': 'space-infix-ops', - \ 'text': 'Infix operators must be spaced.', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 15, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'bettercode', - \ 'nr': -1, - \ 'type': 'E', - \ 'code': 'radix', - \ 'text': 'Missing radix parameter', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 1, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'bettercode', - \ 'nr': -1, - \ 'type': 'E', - \ 'text': 'lowercase error', - \ }, - \ ], - \ }, - \} - - " Turn off other features, we only care about this one feature in this test. - let g:ale_set_loclist = 0 - let g:ale_set_signs = 0 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 1 - - runtime autoload/ale/cursor.vim - - let g:last_message = '' - - function! ale#cursor#Echom(message) abort - let g:last_message = a:message - endfunction - - call ale#linter#Reset() - call ale#linter#PreventLoading('javascript') - -After: - Restore - - unlet! g:last_message - - runtime autoload/ale/cursor.vim - - call cursor(1, 1) - - let g:ale_set_loclist = 1 - let g:ale_set_signs = 1 - let g:ale_set_highlights = 1 - - let g:ale_buffer_info = {} - - unlet! g:output - unlet! b:ale_loclist_msg_format - - " Clearing the messages breaks tests on NeoVim for some reason, but all - " we need to do for these tests is just make it so the last message isn't - " carried over between test cases. - echomsg '' - - " Close the preview window if it's open. - if &filetype is# 'ale-preview' - noautocmd :q! - endif - - call ale#linter#Reset() - -Given javascript(A Javscript file with warnings/errors): - var x = 3 + 12345678 - var x = 5*2 + parseInt("10"); - // comment - -Execute(Messages should be shown for the correct lines): - call cursor(1, 1) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'semi: Missing semicolon.', g:last_message - -Execute(Messages should be shown for earlier columns): - call cursor(2, 1) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'space-infix-ops: Infix operators must be spaced.', g:last_message - -Execute(Messages should be shown for later columns): - call cursor(2, 16) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'radix: Missing radix parameter', g:last_message - -Execute(The message at the cursor should be shown when linting ends): - call cursor(1, 1) - call ale#engine#SetResults( - \ bufnr('%'), - \ g:ale_buffer_info[bufnr('%')].loclist, - \) - - AssertEqual 'semi: Missing semicolon.', g:last_message - -Execute(The message at the cursor should be shown on InsertLeave): - call cursor(2, 9) - doautocmd InsertLeave - - AssertEqual 'space-infix-ops: Infix operators must be spaced.', g:last_message - -Execute(ALEDetail should print 'detail' attributes): - call cursor(1, 1) - - ALEDetail - - AssertEqual - \ ['Every statement should end with a semicolon', 'second line'], - \ getline(1, '$') - -Execute(ALEDetail should print regular 'text' attributes): - call cursor(2, 10) - - ALEDetail - - " ALEDetail opens a window, so check the text in it. - AssertEqual - \ ['Infix operators must be spaced.'], - \ getline(1, '$') - -Execute(ALEDetail should not capitlise cursor messages): - call cursor(3, 1) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'lowercase error', g:last_message - -Execute(The linter name should be formatted into the message correctly): - let g:ale_echo_msg_format = '%linter%: %s' - - call cursor(2, 9) - call ale#cursor#EchoCursorWarning() - - AssertEqual - \ 'bettercode: Infix operators must be spaced.', - \ g:last_message - -Execute(The severity should be formatted into the message correctly): - let g:ale_echo_msg_format = '%severity%: %s' - - call cursor(2, 9) - call ale#cursor#EchoCursorWarning() - - AssertEqual - \ 'Warning: Infix operators must be spaced.', - \ g:last_message - - call cursor(1, 10) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'Error: Missing semicolon.', g:last_message - - call cursor(1, 14) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'Info: Some information', g:last_message - -Execute(The %code% and %ifcode% should show the code and some text): - let g:ale_echo_msg_format = '%(code) %%s' - - call cursor(2, 9) - call ale#cursor#EchoCursorWarning() - - AssertEqual - \ '(space-infix-ops) Infix operators must be spaced.', - \ g:last_message - -Execute(The %code% and %ifcode% should be removed when there's no code): - let g:ale_echo_msg_format = '%(code) %%s' - - call cursor(1, 14) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'Some information', g:last_message - -Execute(The buffer message format option should take precedence): - let g:ale_echo_msg_format = '%(code) %%s' - let b:ale_echo_msg_format = 'FOO %s' - - call cursor(1, 14) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'FOO Some information', g:last_message - -Execute(The cursor message shouldn't be echoed if the option is off): - let g:ale_echo_cursor = 0 - let g:last_message = 'foo' - - call cursor(1, 1) - call ale#cursor#EchoCursorWarning() - - AssertEqual 'foo', g:last_message diff --git a/dotfiles/.vim/plugged/ale/test/test_deferred_command_string.vader b/dotfiles/.vim/plugged/ale/test/test_deferred_command_string.vader deleted file mode 100644 index 173b6bb2..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_deferred_command_string.vader +++ /dev/null @@ -1,50 +0,0 @@ -Before: - Save g:ale_run_synchronously - Save g:ale_emulate_job_failure - Save g:ale_buffer_info - - let g:ale_run_synchronously = 1 - let g:ale_buffer_info = {} - let b:ale_history = [] - - call ale#linter#Reset() - call ale#assert#SetUpLinterTestCommands() - call ale#linter#Define('foobar', { - \ 'name': 'lint_file_linter', - \ 'callback': 'LintFileCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': {b -> ale#command#Run(b, 'echo', {-> ale#command#Run(b, 'echo', {-> 'foo'})})}, - \ 'read_buffer': 0, - \}) - - " Run the test commands in the shell. - let g:ale_run_synchronously_emulate_commands = 0 - -After: - Restore - - call ale#assert#TearDownLinterTest() - unlet! g:ale_run_synchronously_callbacks - -Given foobar (Some imaginary filetype): -Execute(It should be possible to compute an executable to check based on the result of commands): - AssertLinter has('win32') ? 'cmd' : 'echo', 'foo' - - ALELint - call ale#test#FlushJobs() - - AssertEqual - \ 1, - \ len(filter(copy(b:ale_history), 'string(v:val.command) =~# ''foo''')) - -Execute(It handle the deferred command failing): - let g:ale_emulate_job_failure = 1 - - AssertLinter has('win32') ? 'cmd' : 'echo', 0 - - ALELint - call ale#test#FlushJobs() - - AssertEqual - \ 0, - \ len(filter(copy(b:ale_history), 'string(v:val.command) =~# ''foo''')) diff --git a/dotfiles/.vim/plugged/ale/test/test_deferred_executable_string.vader b/dotfiles/.vim/plugged/ale/test/test_deferred_executable_string.vader deleted file mode 100644 index 3bdc5251..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_deferred_executable_string.vader +++ /dev/null @@ -1,46 +0,0 @@ -Before: - Save g:ale_run_synchronously - Save g:ale_emulate_job_failure - Save g:ale_buffer_info - - let g:ale_run_synchronously = 1 - let g:ale_buffer_info = {} - let b:ale_history = [] - - call ale#linter#Reset() - call ale#assert#SetUpLinterTestCommands() - call ale#linter#Define('foobar', { - \ 'name': 'lint_file_linter', - \ 'callback': 'LintFileCallback', - \ 'executable': {b -> ale#command#Run(b, 'echo', {-> ale#command#Run(b, 'echo', {-> 'foo'})})}, - \ 'command': 'echo', - \ 'read_buffer': 0, - \}) - -After: - Restore - - call ale#assert#TearDownLinterTest() - -Given foobar (Some imaginary filetype): -Execute(It should be possible to compute an executable to check based on the result of commands): - AssertLinter 'foo', 'echo' - - ALELint - call ale#test#FlushJobs() - - AssertEqual - \ [{'status': 0, 'job_id': 'executable', 'command': 'foo'}], - \ filter(copy(b:ale_history), 'v:val.job_id is# ''executable''') - -Execute(It handle the deferred command failing): - let g:ale_emulate_job_failure = 1 - - AssertLinter 0, 'echo' - - ALELint - call ale#test#FlushJobs() - - AssertEqual - \ [], - \ filter(copy(b:ale_history), 'v:val.job_id is# ''executable''') diff --git a/dotfiles/.vim/plugged/ale/test/test_deno_executable_detection.vader b/dotfiles/.vim/plugged/ale/test/test_deno_executable_detection.vader deleted file mode 100644 index 87690bfe..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_deno_executable_detection.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - Save g:ale_deno_executable - runtime autoload/ale/handlers/deno.vim - -After: - unlet! b:ale_deno_executable - - call ale#linter#Reset() - -Execute(Default executable should be detected correctly): - AssertEqual - \ 'deno', - \ ale#handlers#deno#GetExecutable(bufnr('')) - -Execute(User specified executable should override default): - let g:ale_deno_executable = '/path/to/deno-bin' - AssertEqual - \ '/path/to/deno-bin', - \ ale#handlers#deno#GetExecutable(bufnr('')) - diff --git a/dotfiles/.vim/plugged/ale/test/test_disabling_ale.vader b/dotfiles/.vim/plugged/ale/test/test_disabling_ale.vader deleted file mode 100644 index 6159f793..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_disabling_ale.vader +++ /dev/null @@ -1,119 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_enabled - Save b:ale_enabled - Save g:ale_maximum_file_size - Save b:ale_maximum_file_size - - function! SetUpCursorData() - let g:ale_buffer_info = { - \ bufnr('%'): { - \ 'loclist': [ - \ { - \ 'lnum': 2, - \ 'col': 10, - \ 'linter_name': 'testlinter', - \ 'type': 'W', - \ 'text': 'X' - \ }, - \ ], - \ }, - \} - - call cursor(2, 16) - endfunction - - function! TestCallback(buffer, output) - return [] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': 'echo', - \ 'command': 'true', - \}) - - function GetLastMessage() - redir => l:output - silent mess - redir END - - let l:lines = split(l:output, "\n") - - return empty(l:lines) ? '' : l:lines[-1] - endfunction - - echomsg '' - -After: - Restore - call ale#linter#Reset() - delfunction TestCallback - delfunction GetLastMessage - delfunction SetUpCursorData - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(Linting shouldn't happen when ALE is disabled globally): - let g:ale_enabled = 0 - let g:ale_buffer_info = {} - - call ale#Queue(0) - - AssertEqual {}, g:ale_buffer_info - -Execute(Linting shouldn't happen when the file is too large with a global options): - let g:ale_maximum_file_size = 12 - let g:ale_buffer_info = {} - - call ale#Queue(0) - - AssertEqual {}, g:ale_buffer_info - -Execute(Linting shouldn't happen when ALE is disabled locally): - let b:ale_enabled = 0 - let g:ale_buffer_info = {} - - call ale#Queue(0) - - AssertEqual {}, g:ale_buffer_info - -Execute(Linting shouldn't happen when the file is too large with a local options): - let b:ale_maximum_file_size = 12 - let g:ale_buffer_info = {} - - call ale#Queue(0) - - AssertEqual {}, g:ale_buffer_info - -Execute(Cursor warnings shouldn't be echoed when ALE is disabled globally): - let g:ale_enabled = 0 - - call SetUpCursorData() - call ale#cursor#EchoCursorWarning() - AssertEqual '', GetLastMessage() - -Execute(Cursor warnings shouldn't be echoed when the file is too large with global options): - let g:ale_maximum_file_size = 12 - - call SetUpCursorData() - call ale#cursor#EchoCursorWarning() - AssertEqual '', GetLastMessage() - -Execute(Cursor warnings shouldn't be echoed when ALE is disabled locally): - let b:ale_enabled = 0 - - call SetUpCursorData() - call ale#cursor#EchoCursorWarning() - AssertEqual '', GetLastMessage() - -Execute(Cursor warnings shouldn't be echoed when the file is too large with local options): - let b:ale_maximum_file_size = 12 - - call SetUpCursorData() - call ale#cursor#EchoCursorWarning() - AssertEqual '', GetLastMessage() diff --git a/dotfiles/.vim/plugged/ale/test/test_dockerfile_hadolint_linter.vader b/dotfiles/.vim/plugged/ale/test/test_dockerfile_hadolint_linter.vader deleted file mode 100644 index 6e02b212..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_dockerfile_hadolint_linter.vader +++ /dev/null @@ -1,90 +0,0 @@ -" NOTE: We use the 'b:' forms below to ensure that we're properly using -" ale#Var() - -Given dockerfile: - # - -Before: - Save g:ale_dockerfile_hadolint_use_docker - Save g:ale_dockerfile_hadolint_docker_image - silent! unlet g:ale_dockerfile_hadolint_use_docker - silent! unlet g:ale_dockerfile_hadolint_docker_image - - " enable loading inside test container - silent! cd /testplugin - source ale_linters/dockerfile/hadolint.vim - - -After: - Restore - silent! unlet b:ale_dockerfile_hadolint_use_docker - silent! unlet b:ale_dockerfile_hadolint_docker_image - - -Execute(linter honors ..._use_docker correctly): - - " default: never - AssertEqual - \ 'hadolint', - \ ale_linters#dockerfile#hadolint#GetExecutable(bufnr('')) - - " explicit never - let b:ale_dockerfile_hadolint_use_docker = 'never' - AssertEqual - \ 'hadolint', - \ ale_linters#dockerfile#hadolint#GetExecutable(bufnr('')) - - let b:ale_dockerfile_hadolint_use_docker = 'always' - AssertEqual - \ 'docker', - \ ale_linters#dockerfile#hadolint#GetExecutable(bufnr('')) - - " hadolint if present, otherwise docker - let command = 'docker' - if executable('hadolint') - let command = 'hadolint' - endif - - let b:ale_dockerfile_hadolint_use_docker = 'yes' - AssertEqual - \ command, - \ ale_linters#dockerfile#hadolint#GetExecutable(bufnr('')) - - -Execute(command is correct when using docker): - let b:ale_dockerfile_hadolint_use_docker = 'always' - - AssertEqual - \ "docker run --rm -i hadolint/hadolint hadolint --no-color -", - \ ale_linters#dockerfile#hadolint#GetCommand(bufnr('')) - - -Execute(command is correct when not docker): - let b:ale_dockerfile_hadolint_use_docker = 'never' - - AssertEqual - \ "hadolint --no-color -", - \ ale_linters#dockerfile#hadolint#GetCommand(bufnr('')) - -Execute(test warnings from hadolint): - AssertEqual - \ [{'lnum': 10, 'col': 0, 'type': 'W', 'code': 'DL3007', 'text': 'DL3007: Using latest is prone to errors', 'detail': "DL3007 ( https://github.com/hadolint/hadolint/wiki/DL3007 )\n\nUsing latest is prone to errors"}], - \ ale_linters#dockerfile#hadolint#Handle(bufnr(''), [ - \ '-:10 DL3007 warning: Using latest is prone to errors', - \ ]) - -Execute(test warnings from shellcheck): - AssertEqual - \ [{'lnum': 3, 'col': 0, 'type': 'W', 'code': 'SC2154', 'text': 'SC2154: bar is referenced but not assigned.', 'detail': "SC2154 ( https://github.com/koalaman/shellcheck/wiki/SC2154 )\n\nbar is referenced but not assigned."}], - \ ale_linters#dockerfile#hadolint#Handle(bufnr(''), [ - \ '-:3 SC2154 warning: bar is referenced but not assigned.', - \ ]) - -Execute(test errors from dockerfile parser): - AssertEqual - \ [{'lnum': 3, 'col': 4, 'type': 'E', 'text': 'unexpected "A" expecting at least one space after ''RUN''', 'detail': 'hadolint could not parse the file because of a syntax error.'}], - \ ale_linters#dockerfile#hadolint#Handle(bufnr(''), [ - \ "/dev/stdin:3:4 unexpected \"A\" expecting at least one space after 'RUN'", - \ ]) - -" fin... diff --git a/dotfiles/.vim/plugged/ale/test/test_env_function.vader b/dotfiles/.vim/plugged/ale/test/test_env_function.vader deleted file mode 100644 index 856a3f57..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_env_function.vader +++ /dev/null @@ -1,8 +0,0 @@ -Execute(ale#Env should produce the correct syntax): - if has('win32') - AssertEqual 'set name=xxx && ', ale#Env('name', 'xxx') - AssertEqual 'set name="foo bar" && ', ale#Env('name', 'foo bar') - else - AssertEqual 'name=''xxx'' ', ale#Env('name', 'xxx') - AssertEqual 'name=''foo bar'' ', ale#Env('name', 'foo bar') - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_errors_removed_after_filetype_changed.vader b/dotfiles/.vim/plugged/ale/test/test_errors_removed_after_filetype_changed.vader deleted file mode 100644 index 7c6c55af..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_errors_removed_after_filetype_changed.vader +++ /dev/null @@ -1,78 +0,0 @@ -Before: - Save &filetype - Save g:ale_buffer_info - Save g:ale_echo_cursor - Save g:ale_run_synchronously - Save g:ale_set_highlights - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_set_signs - - let g:ale_buffer_info = {} - - " Enable only the one feature we need. - let g:ale_set_signs = 0 - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 1 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 0 - - let g:ale_run_synchronously = 1 - unlet! g:ale_run_synchronously_callbacks - call setloclist(0, []) - - noautocmd let &filetype = 'foobar' - - function! TestCallback(buffer, output) - return [{'text': 'x', 'lnum': 1}] - endfunction - - call ale#linter#PreventLoading('foobar') - call ale#linter#Define('foobar', { - \ 'name': 'buffer_linter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd': 'true', - \ 'command': 'true', - \ 'read_buffer': 0, - \}) - call ale#linter#PreventLoading('foobar2') - call ale#linter#Define('foobar2', { - \ 'name': 'buffer_linter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd': 'true', - \ 'command': 'true', - \ 'read_buffer': 0, - \}) - -After: - Restore - - unlet! g:ale_run_synchronously_callbacks - delfunction TestCallback - - call ale#linter#Reset() - call setloclist(0, []) - -Execute(Error should be removed when the filetype changes to something else we cannot check): - call ale#Queue(0) - call ale#test#FlushJobs() - sleep 1ms - - AssertEqual 1, len(ale#test#GetLoclistWithoutNewerKeys()) - - noautocmd let &filetype = 'foobar2' - - call ale#Queue(0) - call ale#test#FlushJobs() - sleep 1ms - - " We should get some items from the second filetype. - AssertEqual 1, len(ale#test#GetLoclistWithoutNewerKeys()) - - noautocmd let &filetype = 'xxx' - - call ale#Queue(0) - call ale#test#FlushJobs() - sleep 1ms - - AssertEqual 0, len(ale#test#GetLoclistWithoutNewerKeys()) diff --git a/dotfiles/.vim/plugged/ale/test/test_filename_mapping.vader b/dotfiles/.vim/plugged/ale/test/test_filename_mapping.vader deleted file mode 100644 index e9af539a..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_filename_mapping.vader +++ /dev/null @@ -1,62 +0,0 @@ -Before: - Save g:ale_filename_mappings - Save b:ale_filename_mappings - - let g:ale_filename_mappings = {} - unlet! b:ale_filename_mappings - -After: - Restore - -Execute(ale#GetFilenameMappings should return the correct mappings for given linters/fixers): - let g:ale_filename_mappings = {'a': [['foo', 'bar']], 'b': [['baz', 'foo']]} - - AssertEqual [['foo', 'bar']], ale#GetFilenameMappings(bufnr(''), 'a') - AssertEqual [['baz', 'foo']], ale#GetFilenameMappings(bufnr(''), 'b') - AssertEqual [], ale#GetFilenameMappings(bufnr(''), 'c') - - let b:ale_filename_mappings = {'b': [['abc', 'xyz']]} - - AssertEqual [], ale#GetFilenameMappings(bufnr(''), 'a') - AssertEqual [['abc', 'xyz']], ale#GetFilenameMappings(bufnr(''), 'b') - AssertEqual [], ale#GetFilenameMappings(bufnr(''), 'c') - -Execute(ale#GetFilenameMappings should return Lists set for use with all tools): - let g:ale_filename_mappings = [['foo', 'bar']] - - AssertEqual [['foo', 'bar']], ale#GetFilenameMappings(bufnr(''), 'a') - AssertEqual [['foo', 'bar']], ale#GetFilenameMappings(bufnr(''), '') - AssertEqual [['foo', 'bar']], ale#GetFilenameMappings(bufnr(''), v:null) - - let b:ale_filename_mappings = [['abc', 'xyz']] - - AssertEqual [['abc', 'xyz']], ale#GetFilenameMappings(bufnr(''), 'a') - AssertEqual [['abc', 'xyz']], ale#GetFilenameMappings(bufnr(''), '') - AssertEqual [['abc', 'xyz']], ale#GetFilenameMappings(bufnr(''), v:null) - -Execute(ale#GetFilenameMappings should let you use * as a fallback): - let g:ale_filename_mappings = {'a': [['foo', 'bar']], '*': [['abc', 'xyz']]} - - AssertEqual [['foo', 'bar']], ale#GetFilenameMappings(bufnr(''), 'a') - AssertEqual [['abc', 'xyz']], ale#GetFilenameMappings(bufnr(''), 'b') - AssertEqual [['abc', 'xyz']], ale#GetFilenameMappings(bufnr(''), '') - AssertEqual [['abc', 'xyz']], ale#GetFilenameMappings(bufnr(''), v:null) - -Execute(ale#filename_mapping#Invert should invert filename mappings): - AssertEqual - \ [['b', 'a'], ['y', 'x']], - \ ale#filename_mapping#Invert([['a', 'b'], ['x', 'y']]) - \ -Execute(ale#filename_mapping#Map return the filename as-is if there are no mappings): - AssertEqual - \ '/foo//bar', - \ ale#filename_mapping#Map('/foo//bar', [['/bar', '/data/']]) - -Execute(ale#filename_mapping#Map should map filenames): - AssertEqual - \ '/data/bar', - \ ale#filename_mapping#Map('/foo//bar', [ - \ ['/data/', '/baz/'], - \ ['/foo/', '/data/'], - \ ['/foo/', '/xyz/'], - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/test_filerename.vader b/dotfiles/.vim/plugged/ale/test/test_filerename.vader deleted file mode 100644 index c91b3556..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_filerename.vader +++ /dev/null @@ -1,224 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('dummy.txt') - - let g:old_filename = expand('%:p') - let g:Callback = '' - let g:expr_list = [] - let g:message_list = [] - let g:handle_code_action_called = 0 - let g:code_actions = [] - let g:options = {} - let g:capability_checked = '' - let g:conn_id = v:null - let g:InitCallback = v:null - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/filerename.vim - runtime autoload/ale/code_action.vim - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - - if a:linter.lsp is# 'tsserver' - call ale#lsp#MarkConnectionAsTsserver(g:conn_id) - endif - - let l:details = { - \ 'command': 'foobar', - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': '/foo/bar', - \} - - let g:InitCallback = {-> ale#lsp_linter#OnInit(a:linter, l:details, a:Callback)} - endfunction - - function! ale#lsp#HasCapability(conn_id, capability) abort - let g:capability_checked = a:capability - - return 1 - endfunction - - function! ale#lsp#RegisterCallback(conn_id, callback) abort - let g:Callback = a:callback - endfunction - - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 42 - endfunction - - function! ale#util#Execute(expr) abort - call add(g:expr_list, a:expr) - endfunction - - function! ale#code_action#HandleCodeAction(code_action, options) abort - let g:handle_code_action_called = 1 - Assert get(a:options, 'should_save') - call add(g:code_actions, a:code_action) - endfunction - - function! ale#util#Input(message, value, completion) abort - return 'a-new-name' - endfunction - - call ale#filerename#SetMap({ - \ 3: { - \ 'old_name': 'oldName', - \ 'new_name': 'aNewName', - \ }, - \}) - -After: - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - call ale#filerename#SetMap({}) - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - unlet! g:capability_checked - unlet! g:InitCallback - unlet! g:old_filename - unlet! g:conn_id - unlet! g:Callback - unlet! g:message_list - unlet! g:expr_list - unlet! b:ale_linters - unlet! g:options - unlet! g:code_actions - unlet! g:handle_code_action_called - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/filerename.vim - runtime autoload/ale/code_action.vim - -Execute(Other messages for the tsserver handler should be ignored): - call ale#filerename#HandleTSServerResponse(1, {'command': 'foo'}) - AssertEqual g:handle_code_action_called, 0 - -Execute(Failed file rename responses should be handled correctly): - call ale#filerename#SetMap({3: {'old_name': 'oldName', 'new_name': 'a-test'}}) - call ale#filerename#HandleTSServerResponse( - \ 1, - \ {'command': 'getEditsForFileRename', 'request_seq': 3} - \) - AssertEqual g:handle_code_action_called, 0 - -Given typescript(Some typescript file): - foo - somelongerline - bazxyzxyzxyz - -Execute(Code actions from tsserver should be handled): - call ale#filerename#HandleTSServerResponse(1, { - \ 'command': 'getEditsForFileRename', - \ 'seq': 0, - \ 'request_seq': 3, - \ 'type': 'response', - \ 'success': v:true, - \ 'body': [ - \ { - \ 'fileName': '/foo/bar/file1.tsx', - \ 'textChanges': [ - \ { - \ 'end': {'offset': 55, 'line': 22}, - \ 'newText': './file2', - \ 'start': {'offset': 34, 'line': 22}, - \ } - \ ] - \ } - \ ], - \}) - - AssertEqual - \ [ - \ { - \ 'description': 'filerename', - \ 'changes': [ - \ { - \ 'fileName': '/foo/bar/file1.tsx', - \ 'textChanges': [ - \ { - \ 'end': {'offset': 55, 'line': 22}, - \ 'newText': './file2', - \ 'start': {'offset': 34, 'line': 22}, - \ } - \ ] - \ } - \ ], - \ } - \ ], - \ g:code_actions - -Execute(HandleTSServerResponse does nothing when no data in filerename_map): - call ale#filerename#HandleTSServerResponse(1, { - \ 'command': 'getEditsForFileRename', - \ 'request_seq': -9, - \ 'success': v:true, - \ 'body': {} - \}) - - AssertEqual g:handle_code_action_called, 0 - -Execute(Prints a tsserver error message when unsuccessful): - call ale#filerename#HandleTSServerResponse(1, { - \ 'command': 'getEditsForFileRename', - \ 'request_seq': 3, - \ 'success': v:false, - \ 'message': 'This file cannot be renamed', - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''Error renaming file "oldName" to "aNewName". ' . - \ 'Reason: This file cannot be renamed'''], g:expr_list - -Execute(Does nothing when no changes): - call ale#filerename#HandleTSServerResponse(1, { - \ 'command': 'getEditsForFileRename', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': [], - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''No changes while renaming "oldName" to "aNewName"'''], g:expr_list - -Execute(tsserver file rename requests should be sent): - call ale#filerename#SetMap({}) - call ale#linter#Reset() - - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEFileRename - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'filerename', g:capability_checked - AssertEqual - \ 'function(''ale#filerename#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@getEditsForFileRename', { - \ 'oldFilePath': expand('%:p'), - \ 'newFilePath': 'a-new-name', - \ }] - \ ], - \ g:message_list - AssertEqual {'42': {'old_name': expand('%:p'), 'new_name': 'a-new-name'}}, - \ ale#filerename#GetMap() diff --git a/dotfiles/.vim/plugged/ale/test/test_filetype_linter_defaults.vader b/dotfiles/.vim/plugged/ale/test/test_filetype_linter_defaults.vader deleted file mode 100644 index 0f463880..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_filetype_linter_defaults.vader +++ /dev/null @@ -1,137 +0,0 @@ -Before: - Save g:ale_linters - Save g:ale_linters_explicit - - let g:ale_linters_explicit = 0 - let g:ale_linters = {} - - function! GetLinterNames(filetype) abort - return sort(map(ale#linter#Get(a:filetype), 'v:val.name')) - endfunction - -After: - Restore - - call ale#linter#Reset() - -Execute(The defaults for the apkbuild filetype should be correct): - AssertEqual ['apkbuild_lint', 'secfixes_check'], GetLinterNames('apkbuild') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('apkbuild') - -Execute(The defaults for the csh filetype should be correct): - AssertEqual ['shell'], GetLinterNames('csh') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('csh') - -Execute(The defaults for the elixir filetype should be correct): - AssertEqual ['credo', 'dialyxir', 'dogma'], GetLinterNames('elixir') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('elixir') - -Execute(The defaults for the go filetype should be correct): - AssertEqual ['gofmt', 'golint', 'gopls', 'govet'], GetLinterNames('go') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('go') - -Execute(The defaults for the hack filetype should be correct): - AssertEqual ['hack'], GetLinterNames('hack') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('hack') - -Execute(The defaults for the help filetype should be correct): - AssertEqual [], GetLinterNames('help') - -Execute(The defaults for the inko filetype should be correct): - AssertEqual ['inko'], GetLinterNames('inko') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('inko') - -Execute(The defaults for the json filetype should be correct): - AssertEqual ['jsonlint', 'spectral', 'vscodejson'], GetLinterNames('json') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('json') - -Execute(The defaults for the json5 filetype should be correct): - AssertEqual [], GetLinterNames('json5') - -Execute(The defaults for the jsonc filetype should be correct): - AssertEqual [], GetLinterNames('jsonc') - -Execute(The defaults for the perl filetype should be correct): - AssertEqual ['perlcritic'], GetLinterNames('perl') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('perl') - -Execute(The defaults for the perl6 filetype should be correct): - AssertEqual [], GetLinterNames('perl6') - -Execute(The defaults for the python filetype should be correct): - AssertEqual ['flake8', 'mypy', 'pylint', 'pyright'], GetLinterNames('python') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('python') - -Execute(The defaults for the rust filetype should be correct): - AssertEqual ['cargo', 'rls'], GetLinterNames('rust') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('rust') - -Execute(The defaults for the spec filetype should be correct): - AssertEqual [], GetLinterNames('spec') - -Execute(The defaults for the text filetype should be correct): - AssertEqual [], GetLinterNames('text') - -Execute(The defaults for the vue filetype should be correct): - AssertEqual ['eslint', 'vls'], GetLinterNames('vue') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('vue') - -Execute(The defaults for the zsh filetype should be correct): - AssertEqual ['shell'], GetLinterNames('zsh') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('zsh') - -Execute(The defaults for the verilog filetype should be correct): - " This filetype isn't configured with default, so we can test loading all - " available linters with this. - AssertEqual ['hdl-checker', 'iverilog', 'verilator', 'vlog', 'xvlog', 'yosys'], GetLinterNames('verilog') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('verilog') - -Execute(The defaults for the vader filetype should be correct): - AssertEqual ['vimls'], GetLinterNames('vader') - - let g:ale_linters_explicit = 1 - - AssertEqual [], GetLinterNames('vader') - -Execute(Default aliases for React should be defined): - AssertEqual ['javascript', 'jsx'], ale#linter#ResolveFiletype('javascriptreact') - AssertEqual ['typescript', 'tsx'], ale#linter#ResolveFiletype('typescriptreact') diff --git a/dotfiles/.vim/plugged/ale/test/test_filetype_mapping.vader b/dotfiles/.vim/plugged/ale/test/test_filetype_mapping.vader deleted file mode 100644 index 2d72491d..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_filetype_mapping.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - augroup TestFiletypeGroup - autocmd! - autocmd BufEnter,BufRead *.x setf xfiletype - autocmd BufEnter,BufRead *.y set filetype=yfiletype - autocmd BufEnter,BufRead *.z setlocal filetype=zfiletype - autocmd BufEnter,BufRead *.jsx set filetype=javascript.jsx - augroup END - -After: - unlet! g:map - augroup TestFiletypeGroup - autocmd! - augroup END - augroup! TestFiletypeGroup - -Execute(ALE should parse autocmd filetypes correctly): - let g:map = ale#filetypes#LoadExtensionMap() - - AssertEqual '.x', g:map['xfiletype'] - AssertEqual '.y', g:map['yfiletype'] - AssertEqual '.z', g:map['zfiletype'] - AssertEqual '.jsx', g:map['javascript.jsx'] - -Execute(ALE should guess file extensions appropriately): - " The whole string should be used, if there's a match. - AssertEqual '.jsx', ale#filetypes#GuessExtension('javascript.jsx') - " The first part should be used. - AssertEqual '.x', ale#filetypes#GuessExtension('xfiletype.yfiletype') diff --git a/dotfiles/.vim/plugged/ale/test/test_find_nearest_directory.vader b/dotfiles/.vim/plugged/ale/test/test_find_nearest_directory.vader deleted file mode 100644 index 740668da..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_find_nearest_directory.vader +++ /dev/null @@ -1,17 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - -After: - call ale#test#RestoreDirectory() - -Execute(We should be able to find a directory some directory down): - call ale#test#SetFilename('test-files/top/middle/bottom/dummy.txt') - - AssertEqual - \ ale#path#Simplify(expand('%:p:h:h:h:h:h') . '/test-files/top/ale-special-directory-name-dont-use-this-please/'), - \ ale#path#FindNearestDirectory(bufnr('%'), 'ale-special-directory-name-dont-use-this-please') - -Execute(We shouldn't find anything for files which don't match): - AssertEqual - \ '', - \ ale#path#FindNearestDirectory(bufnr('%'), 'ale-this-should-never-match-anything') diff --git a/dotfiles/.vim/plugged/ale/test/test_find_references.vader b/dotfiles/.vim/plugged/ale/test/test_find_references.vader deleted file mode 100644 index 01c15469..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_find_references.vader +++ /dev/null @@ -1,480 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('dummy.txt') - - Save g:ale_default_navigation - - let g:old_filename = expand('%:p') - let g:Callback = '' - let g:expr_list = [] - let g:message_list = [] - let g:preview_called = 0 - let g:item_list = [] - let g:options = {} - let g:capability_checked = '' - let g:conn_id = v:null - let g:InitCallback = v:null - let g:ale_default_navigation = 'buffer' - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/preview.vim - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - - if a:linter.lsp is# 'tsserver' - call ale#lsp#MarkConnectionAsTsserver(g:conn_id) - endif - - let l:details = { - \ 'command': 'foobar', - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': '/foo/bar', - \} - - let g:InitCallback = {-> ale#lsp_linter#OnInit(a:linter, l:details, a:Callback)} - endfunction - - function! ale#lsp#HasCapability(conn_id, capability) abort - let g:capability_checked = a:capability - - return 1 - endfunction - - function! ale#lsp#RegisterCallback(conn_id, callback) abort - let g:Callback = a:callback - endfunction - - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 42 - endfunction - - function! ale#util#Execute(expr) abort - call add(g:expr_list, a:expr) - endfunction - - function! ale#preview#ShowSelection(item_list, options) abort - let g:preview_called = 1 - let g:item_list = a:item_list - let g:options = a:options - - call ale#preview#SetLastSelection(a:item_list, a:options) - endfunction - -After: - Restore - - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - call ale#references#SetMap({}) - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - unlet! g:capability_checked - unlet! g:InitCallback - unlet! g:old_filename - unlet! g:conn_id - unlet! g:Callback - unlet! g:message_list - unlet! g:expr_list - unlet! b:ale_linters - unlet! g:options - unlet! g:item_list - unlet! g:preview_called - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/preview.vim - -Execute(Other messages for the tsserver handler should be ignored): - call ale#references#HandleTSServerResponse(1, {'command': 'foo'}) - -Execute(Failed reference responses should be handled correctly): - call ale#references#SetMap({3: {}}) - call ale#references#HandleTSServerResponse( - \ 1, - \ {'command': 'references', 'request_seq': 3} - \) - AssertEqual {}, ale#references#GetMap() - -Given typescript(Some typescript file): - foo - somelongerline - bazxyzxyzxyz - -Execute(Results should be shown for tsserver responses): - " We should remember these options when we repeat the selection. - call ale#references#SetMap( - \ { - \ 3: { - \ 'ignorethis': 'x', - \ 'open_in': 'tab', - \ 'use_relative_paths': 1, - \ } - \ } - \) - call ale#references#HandleTSServerResponse(1, { - \ 'command': 'references', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': { - \ 'symbolStartOffset': 9, - \ 'refs': [ - \ { - \ 'file': '/foo/bar/app.ts', - \ 'isWriteAccess': v:true, - \ 'lineText': 'import {doSomething} from ''./whatever''', - \ 'end': {'offset': 24, 'line': 9}, - \ 'start': {'offset': 9, 'line': 9}, - \ 'isDefinition': v:true, - \ }, - \ { - \ 'file': '/foo/bar/app.ts', - \ 'isWriteAccess': v:false, - \ 'lineText': ' doSomething()', - \ 'end': {'offset': 18, 'line': 804}, - \ 'start': {'offset': 3, 'line': 804}, - \ 'isDefinition': v:false, - \ }, - \ { - \ 'file': '/foo/bar/other/app.ts', - \ 'isWriteAccess': v:false, - \ 'lineText': ' doSomething()', - \ 'end': {'offset': 18, 'line': 51}, - \ 'start': {'offset': 3, 'line': 51}, - \ 'isDefinition': v:false, - \ }, - \ ], - \ 'symbolDisplayString': 'import doSomething', - \ 'symbolName': 'doSomething()', - \ }, - \}) - - AssertEqual - \ [ - \ {'filename': '/foo/bar/app.ts', 'column': 9, 'line': 9, 'match': 'import {doSomething} from ''./whatever'''}, - \ {'filename': '/foo/bar/app.ts', 'column': 3, 'line': 804, 'match': 'doSomething()'}, - \ {'filename': '/foo/bar/other/app.ts', 'column': 3, 'line': 51, 'match': 'doSomething()'}, - \ ], - \ g:item_list - AssertEqual {}, ale#references#GetMap() - - " We should be able to repeat selections with ALERepeatSelection - let g:item_list = [] - ALERepeatSelection - - AssertEqual - \ [ - \ {'filename': '/foo/bar/app.ts', 'column': 9, 'line': 9, 'match': 'import {doSomething} from ''./whatever'''}, - \ {'filename': '/foo/bar/app.ts', 'column': 3, 'line': 804, 'match': 'doSomething()'}, - \ {'filename': '/foo/bar/other/app.ts', 'column': 3, 'line': 51, 'match': 'doSomething()'}, - \ ], - \ g:item_list - AssertEqual {}, ale#references#GetMap() - AssertEqual - \ { - \ 'open_in': 'tab', - \ 'use_relative_paths': 1, - \ }, - \ g:options - -Execute(Results should be put to quickfix for tsserver responses): - call ale#references#SetMap( - \ { - \ 3: { - \ 'ignorethis': 'x', - \ 'open_in': 'quickfix', - \ } - \ } - \) - call ale#references#HandleTSServerResponse(1, { - \ 'command': 'references', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': { - \ 'symbolStartOffset': 9, - \ 'refs': [ - \ { - \ 'file': '/foo/bar/app.ts', - \ 'isWriteAccess': v:true, - \ 'lineText': 'import {doSomething} from ''./whatever''', - \ 'end': {'offset': 24, 'line': 9}, - \ 'start': {'offset': 9, 'line': 9}, - \ 'isDefinition': v:true, - \ }, - \ { - \ 'file': '/foo/bar/app.ts', - \ 'isWriteAccess': v:false, - \ 'lineText': ' doSomething()', - \ 'end': {'offset': 18, 'line': 804}, - \ 'start': {'offset': 3, 'line': 804}, - \ 'isDefinition': v:false, - \ }, - \ { - \ 'file': '/foo/bar/other/app.ts', - \ 'isWriteAccess': v:false, - \ 'lineText': ' doSomething()', - \ 'end': {'offset': 18, 'line': 51}, - \ 'start': {'offset': 3, 'line': 51}, - \ 'isDefinition': v:false, - \ }, - \ ], - \ 'symbolDisplayString': 'import doSomething', - \ 'symbolName': 'doSomething()', - \ }, - \}) - - AssertEqual - \ 3, - \ len(getqflist()) - AssertEqual {}, ale#references#GetMap() - -Execute(The preview window should not be opened for empty tsserver responses): - call ale#references#SetMap({3: {}}) - call ale#references#HandleTSServerResponse(1, { - \ 'command': 'references', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': { - \ 'symbolStartOffset': 9, - \ 'refs': [ - \ ], - \ 'symbolDisplayString': 'import doSomething', - \ 'symbolName': 'doSomething()', - \ }, - \}) - - Assert !g:preview_called - AssertEqual {}, ale#references#GetMap() - AssertEqual ['echom ''No references found.'''], g:expr_list - -Execute(tsserver reference requests should be sent): - call ale#linter#Reset() - - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEFindReferences - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'references', g:capability_checked - AssertEqual - \ 'function(''ale#references#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@references', {'file': expand('%:p'), 'line': 2, 'offset': 5}] - \ ], - \ g:message_list - AssertEqual {'42': {'open_in': 'current-buffer', 'use_relative_paths': 0}}, ale#references#GetMap() - -Execute('-relative' argument should enable 'use_relative_paths' in HandleTSServerResponse): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEFindReferences -relative - - call g:InitCallback() - - AssertEqual {'42': {'open_in': 'current-buffer', 'use_relative_paths': 1}}, ale#references#GetMap() - -Execute(`-tab` should display results in tabs): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEFindReferences -tab - - call g:InitCallback() - - AssertEqual {'42': {'open_in': 'tab', 'use_relative_paths': 0}}, ale#references#GetMap() - -Execute(The default navigation type should be used): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - let g:ale_default_navigation = 'tab' - ALEFindReferences - - call g:InitCallback() - - AssertEqual {'42': {'open_in': 'tab', 'use_relative_paths': 0}}, ale#references#GetMap() - -Execute(`-split` should display results in splits): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEFindReferences -split - - call g:InitCallback() - - AssertEqual {'42': {'open_in': 'split', 'use_relative_paths': 0}}, ale#references#GetMap() - -Execute(`-vsplit` should display results in vsplits): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEFindReferences -vsplit - - call g:InitCallback() - - AssertEqual {'42': {'open_in': 'vsplit', 'use_relative_paths': 0}}, ale#references#GetMap() - -Execute(`-quickfix` should display results in quickfix): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEFindReferences -quickfix - - call g:InitCallback() - - AssertEqual {'42': {'open_in': 'quickfix', 'use_relative_paths': 0}}, ale#references#GetMap() - -Given python(Some Python file): - foo - somelongerline - bazxyzxyzxyz - -Execute(LSP reference responses should be handled): - call ale#references#SetMap({3: {}}) - call ale#references#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': [ - \ { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ 'range': { - \ 'start': {'line': 2, 'character': 7}, - \ }, - \ }, - \ { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/other_file')), - \ 'range': { - \ 'start': {'line': 7, 'character': 15}, - \ }, - \ }, - \ ], - \ } - \) - - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify(g:dir . '/completion_dummy_file'), - \ 'line': 3, - \ 'column': 8, - \ }, - \ { - \ 'filename': ale#path#Simplify(g:dir . '/other_file'), - \ 'line': 8, - \ 'column': 16, - \ }, - \ ], - \ g:item_list - AssertEqual {}, ale#references#GetMap() - -Execute(LSP reference responses should be put to quickfix): - call ale#references#SetMap({3: { 'open_in': 'quickfix' }}) - call ale#references#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': [ - \ { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ 'range': { - \ 'start': {'line': 2, 'character': 7}, - \ }, - \ }, - \ { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/other_file')), - \ 'range': { - \ 'start': {'line': 7, 'character': 15}, - \ }, - \ }, - \ ], - \ } - \) - - AssertEqual - \ 2, - \ len(getqflist()) - -Execute(Preview windows should not be opened for empty LSP reference responses): - call ale#references#SetMap({3: {}}) - call ale#references#HandleLSPResponse(1, {'id': 3, 'result': []}) - - Assert !g:preview_called - AssertEqual {}, ale#references#GetMap() - AssertEqual ['echom ''No references found.'''], g:expr_list - -Execute(LSP reference responses with a null result should be handled): - call ale#references#SetMap({3: {}}) - call ale#references#HandleLSPResponse(1, {'id': 3, 'result': v:null}) - - Assert !g:preview_called - AssertEqual {}, ale#references#GetMap() - AssertEqual ['echom ''No references found.'''], g:expr_list - -Execute(LSP reference requests should be sent): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALEFindReferences - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'references', g:capability_checked - AssertEqual - \ 'function(''ale#references#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/references', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ 'context': {'includeDeclaration': v:false}, - \ }], - \ ], - \ g:message_list - - AssertEqual {'42': {'open_in': 'current-buffer', 'use_relative_paths': 0}}, ale#references#GetMap() - -Execute('-relative' argument should enable 'use_relative_paths' in HandleLSPResponse): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALEFindReferences -relative - - call g:InitCallback() - - AssertEqual {'42': {'open_in': 'current-buffer', 'use_relative_paths': 1}}, ale#references#GetMap() diff --git a/dotfiles/.vim/plugged/ale/test/test_floating_preview.vader b/dotfiles/.vim/plugged/ale/test/test_floating_preview.vader deleted file mode 100644 index 43415556..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_floating_preview.vader +++ /dev/null @@ -1,92 +0,0 @@ -Before: - let g:ale_floating_preview = 0 - let g:ale_hover_to_floating_preview = 0 - let g:ale_detail_to_floating_preview = 0 - - runtime autoload/ale/floating_preview.vim - - let g:floated_lines = [] - let g:floating_preview_show_called = 0 - - " Stub out so we can track the call - function! ale#floating_preview#Show(lines, ...) abort - let g:floating_preview_show_called = 1 - let g:floated_lines = a:lines - endfunction - - let g:ale_buffer_info = { - \ bufnr('%'): { - \ 'loclist': [ - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'notalinter', - \ 'nr': -1, - \ 'type': 'E', - \ 'code': 'semi', - \ 'text': "Missing semicolon.\r", - \ 'detail': "Every statement should end with a semicolon\nsecond line", - \ }, - \ ], - \ } - \} - - call ale#linter#Reset() - call ale#linter#PreventLoading('javascript') - -After: - Restore - - let g:ale_floating_preview = 0 - let g:ale_hover_to_floating_preview = 0 - let g:ale_detail_to_floating_preview = 0 - - call cursor(1, 1) - - let g:ale_buffer_info = {} - - " Close the preview window if it's open. - if &filetype is# 'ale-preview' - noautocmd :q! - endif - - call ale#linter#Reset() - - -Given javascript(A file with warnings/errors): - var x = 3 + 12345678 - var x = 5*2 + parseInt("10"); - // comment - -Execute(Floating preview is used with ALEDetail when g:ale_floating_preview set): - let g:ale_floating_preview = 1 - - call cursor(1, 10) - - ALEDetail - - let expected = ["Every statement should end with a semicolon", "second line"] - - AssertEqual 1, g:floating_preview_show_called - AssertEqual expected, g:floated_lines - -Execute(Floating preview is used with ALEDetail when g:ale_detail_to_floating_preview set): - let g:ale_detail_to_floating_preview = 1 - - call cursor(1, 10) - - ALEDetail - - let expected = ["Every statement should end with a semicolon", "second line"] - - AssertEqual 1, g:floating_preview_show_called - AssertEqual expected, g:floated_lines - -Execute(Floating preview is not used with ALEDetail by default): - call cursor(1, 10) - - ALEDetail - - AssertEqual 0, g:floating_preview_show_called diff --git a/dotfiles/.vim/plugged/ale/test/test_format_command.vader b/dotfiles/.vim/plugged/ale/test/test_format_command.vader deleted file mode 100644 index b0440dcd..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_format_command.vader +++ /dev/null @@ -1,186 +0,0 @@ -Before: - silent! cd /testplugin/test - silent file top/middle/bottom/dummy.txt - - function! CheckTempFile(filename) abort - " Check every part of the temporary filename, except the random part. - AssertEqual fnamemodify(tempname(), ':h'), fnamemodify(a:filename, ':h:h') - AssertEqual 'dummy.txt', fnamemodify(a:filename, ':t') - endfunction - - runtime autoload/ale/command.vim - - function! ale#command#CreateTempFile(buffer, temporary_file, input) abort - return !empty(a:temporary_file) - endfunction - -After: - unlet! g:result - unlet! g:match - - delfunction CheckTempFile - - runtime autoload/ale/command.vim - -Execute(FormatCommand should do nothing to basic command strings): - AssertEqual - \ ['', 'awesome-linter do something', 0], - \ ale#command#FormatCommand(bufnr('%'), '', 'awesome-linter do something', 0, v:null, v:null, []) - -Execute(FormatCommand should handle %%, and ignore other percents): - AssertEqual - \ ['', '% %%d %%f %x %', 0], - \ ale#command#FormatCommand(bufnr('%'), '', '%% %%%d %%%f %x %', 0, v:null, v:null, []) - -Execute(FormatCommand should convert %s to the current filename): - AssertEqual - \ [ - \ '', - \ 'foo ' . ale#Escape(expand('%:p')) . ' bar ' . ale#Escape(expand('%:p')), - \ 0, - \ ], - \ ale#command#FormatCommand(bufnr('%'), '', 'foo %s bar %s', 0, v:null, v:null, []) - -Execute(FormatCommand should convert %t to a new temporary filename): - let g:result = ale#command#FormatCommand(bufnr('%'), '', 'foo %t bar %t', 0, v:null, v:null, []) - - call CheckTempFile(g:result[0]) - - let g:match = matchlist(g:result[1], '\v^foo (.*) bar (.*)$') - - Assert !empty(g:match), 'No match found! Result was: ' . g:result[1] - " The first item of the result should be a temporary filename, and it should - " be the same as the escaped name in the command string. - AssertEqual ale#Escape(g:result[0]), g:match[1] - " The two temporary filenames formatted in should be the same. - AssertEqual g:match[1], g:match[2] - -Execute(FormatCommand should not convert %t to a new temporary filename when the input is given as v:false): - let g:result = ale#command#FormatCommand(bufnr('%'), '', 'foo %t bar %t', 0, v:false, v:null, []) - - AssertEqual ['', 'foo %t bar %t', 0], g:result - -Execute(FormatCommand should signal that files are created when temporary files are needed): - AssertEqual - \ 1, - \ ale#command#FormatCommand(bufnr('%'), '', 'foo %t', 0, v:null, v:null, [])[2] - - AssertEqual - \ 0, - \ ale#command#FormatCommand(bufnr('%'), '', 'foo %s', 0, v:null, v:null, [])[2] - -Execute(FormatCommand should let you combine %s and %t): - let g:result = ale#command#FormatCommand(bufnr('%'), '', 'foo %t bar %s', 0, v:null, v:null, []) - - call CheckTempFile(g:result[0]) - - let g:match = matchlist(g:result[1], '\v^foo (.*) bar (.*)$') - - Assert !empty(g:match), 'No match found! Result was: ' . g:result[1] - " The first item of the result should be a temporary filename, and it should - " be the same as the escaped name in the command string. - AssertEqual ale#Escape(g:result[0]), g:match[1] - " The second item should be equal to the original filename. - AssertEqual ale#Escape(expand('%:p')), g:match[2] - -Execute(FormatCommand should replace %e with the escaped executable): - if has('win32') - AssertEqual - \ ['', 'foo foo', 0], - \ ale#command#FormatCommand(bufnr('%'), 'foo', '%e %e', 0, v:null, v:null, []) - AssertEqual - \ ['', '"foo bar"', 0], - \ ale#command#FormatCommand(bufnr('%'), 'foo bar', '%e', 0, v:null, v:null, []) - AssertEqual - \ ['', '%e %e', 0], - \ ale#command#FormatCommand(bufnr('%'), '', '%e %e', 0, v:null, v:null, []) - else - AssertEqual - \ ['', '''foo'' ''foo''', 0], - \ ale#command#FormatCommand(bufnr('%'), 'foo', '%e %e', 0, v:null, v:null, []) - AssertEqual - \ ['', '''foo bar''', 0], - \ ale#command#FormatCommand(bufnr('%'), 'foo bar', '%e', 0, v:null, v:null, []) - AssertEqual - \ ['', '%e %e', 0], - \ ale#command#FormatCommand(bufnr('%'), '', '%e %e', 0, v:null, v:null, []) - endif - -Execute(EscapeCommandPart should escape all percent signs): - AssertEqual '%%s %%t %%%% %%s %%t %%%%', ale#engine#EscapeCommandPart('%s %t %% %s %t %%') - -Execute(EscapeCommandPart should pipe in temporary files appropriately): - let g:result = ale#command#FormatCommand(bufnr('%'), '', 'foo bar', 1, v:null, v:null, []) - - call CheckTempFile(g:result[0]) - - let g:match = matchlist(g:result[1], '\v^foo bar \< (.*)$') - Assert !empty(g:match), 'No match found! Result was: ' . g:result[1] - AssertEqual ale#Escape(g:result[0]), g:match[1] - - let g:result = ale#command#FormatCommand(bufnr('%'), '', 'foo bar %t', 1, v:null, v:null, []) - - call CheckTempFile(g:result[0]) - - let g:match = matchlist(g:result[1], '\v^foo bar (.*)$') - Assert !empty(g:match), 'No match found! Result was: ' . g:result[1] - AssertEqual ale#Escape(g:result[0]), g:match[1] - -Execute(FormatCommand should apply filename modifiers to the current file): - AssertEqual - \ ale#Escape(expand('%:p:h')) - \ . ' ' . ale#Escape('dummy.txt') - \ . ' ' . ale#Escape(expand('%:p:h:t')) - \ . ' ' . ale#Escape('txt') - \ . ' ' . ale#Escape(expand('%:p:r')), - \ ale#command#FormatCommand(bufnr(''), '', '%s:h %s:t %s:h:t %s:e %s:r', 0, v:null, v:null, [])[1] - -Execute(FormatCommand should apply filename modifiers to the temporary file): - let g:result = ale#command#FormatCommand(bufnr(''), '', '%t:h %t:t %t:h:t %t:e %t:r', 0, v:null, v:null, []) - - AssertEqual - \ ale#Escape(fnamemodify(g:result[0], ':h')) - \ . ' ' . ale#Escape('dummy.txt') - \ . ' ' . ale#Escape(fnamemodify(g:result[0], ':h:t')) - \ . ' ' . ale#Escape('txt') - \ . ' ' . ale#Escape(fnamemodify(g:result[0], ':r')), - \ g:result[1] - -Execute(FormatCommand should apply filename mappings the current file): - let g:result = ale#command#FormatCommand(bufnr('%'), '', '%s', 0, v:null, v:null, [ - \ [expand('%:p:h'), '/foo/bar'], - \]) - - Assert g:result[1] =~# '/foo/bar' - -Execute(FormatCommand should apply filename mappings to temporary files): - let g:result = ale#command#FormatCommand(bufnr('%'), '', '%t', 0, v:null, v:null, [ - \ [fnamemodify(tempname(), ':h:h'), '/foo/bar'] - \]) - - Assert g:result[1] =~# '/foo/bar' - -Execute(FormatCommand should apply filename modifiers to mapped filenames): - let g:result = ale#command#FormatCommand(bufnr('%'), '', '%s:h', 0, v:null, v:null, [ - \ [expand('%:p:h'), '/foo/bar'], - \]) - - AssertEqual ale#Escape('/foo/bar'), g:result[1] - - let g:result = ale#command#FormatCommand(bufnr('%'), '', '%t:h:h:h', 0, v:null, v:null, [ - \ [fnamemodify(tempname(), ':h:h'), '/foo/bar'] - \]) - - AssertEqual ale#Escape('/foo/bar'), g:result[1] - -Execute(FormatCommand should apply regular cwd paths): - AssertEqual - \ 'cd ' . (has('unix') ? '' : '/d ') . ale#Escape('/foo /bar') . ' && abc', - \ ale#command#FormatCommand(bufnr('%'), '', 'abc', 0, v:null, '/foo /bar', [])[1] - \ -Execute(FormatCommand should apply cwd subsitution and formatting): - call ale#test#SetFilename('foo.txt') - - AssertEqual - \ 'cd ' . (has('unix') ? '' : '/d ') . ale#Escape(getcwd()) . ' && abc', - \ ale#command#FormatCommand(bufnr('%'), '', 'abc', 0, v:null, '%s:h', [])[1] diff --git a/dotfiles/.vim/plugged/ale/test/test_format_temporary_file_creation.vader b/dotfiles/.vim/plugged/ale/test/test_format_temporary_file_creation.vader deleted file mode 100644 index 10409400..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_format_temporary_file_creation.vader +++ /dev/null @@ -1,63 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_echo_cursor - Save g:ale_enabled - Save g:ale_run_synchronously - Save g:ale_set_highlights - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_set_signs - - " Disable the features we don't need to check. - let g:ale_buffer_info = {} - let g:ale_echo_cursor = 0 - let g:ale_enabled = 1 - let g:ale_run_synchronously = 1 - unlet! g:ale_run_synchronously_callbacks - let g:ale_set_highlights = 0 - let g:ale_set_loclist = 0 - let g:ale_set_quickfix = 0 - let g:ale_set_signs = 0 - - let g:output = [] - - function! TestCallback(buffer, output) - " Extract just letters from the output. - let g:output = filter( - \ map(a:output, 'matchstr(v:val, ''[a-zA-Z]\+'')'), - \ '!empty(v:val)' - \) - - return [] - endfunction - - call ale#linter#PreventLoading('foobar') - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'cat', - \ 'command': has('win32') ? 'type %t' : 'cat %t', - \}) - -After: - Restore - - unlet! g:ale_run_synchronously_callbacks - unlet! g:output - delfunction TestCallback - - call ale#engine#Cleanup(bufnr('')) - call ale#linter#Reset() - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(ALE should be able to read the %t file): - AssertEqual 'foobar', &filetype - - ALELint - call ale#test#FlushJobs() - - AssertEqual ['foo', 'bar', 'baz'], g:output diff --git a/dotfiles/.vim/plugged/ale/test/test_function_arg_count.vader b/dotfiles/.vim/plugged/ale/test/test_function_arg_count.vader deleted file mode 100644 index d256c403..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_function_arg_count.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - function! Func0() - endfunction - function! Func1(x) - endfunction - function! Func2(x,y) - endfunction - function! Func3(x,y,z) - endfunction - function! Func3a(x,y,z,...) - endfunction - -After: - delfunction Func0 - delfunction Func1 - delfunction Func2 - delfunction Func3 - delfunction Func3a - -Execute(We should be able to compute the argument count for function names): - AssertEqual 0, ale#util#FunctionArgCount('Func0') - AssertEqual 1, ale#util#FunctionArgCount('Func1') - AssertEqual 2, ale#util#FunctionArgCount('Func2') - AssertEqual 3, ale#util#FunctionArgCount('Func3') - AssertEqual 3, ale#util#FunctionArgCount('Func3a') - -Execute(We should be able to compute the argument count for Funcrefs): - AssertEqual 0, ale#util#FunctionArgCount(function('Func0')) - AssertEqual 1, ale#util#FunctionArgCount(function('Func1')) - AssertEqual 2, ale#util#FunctionArgCount(function('Func2')) - AssertEqual 3, ale#util#FunctionArgCount(function('Func3')) - AssertEqual 3, ale#util#FunctionArgCount(function('Func3a')) - -Execute(We should be able to compute the argument count for lambdas): - if has('lambda') - AssertEqual 0, ale#util#FunctionArgCount({->1}) - AssertEqual 1, ale#util#FunctionArgCount({x->1}) - AssertEqual 2, ale#util#FunctionArgCount({x,y->1}) - AssertEqual 3, ale#util#FunctionArgCount({x,y,z->1}) - AssertEqual 3, ale#util#FunctionArgCount({x,y,z,...->1}) - endif - -Execute(We should be able to compute the argument count autoload functions not yet loaded): - AssertEqual 1, ale#util#FunctionArgCount(function('ale#fixers#yapf#Fix')) - AssertEqual 1, ale#util#FunctionArgCount('ale#fixers#yapf#Fix') diff --git a/dotfiles/.vim/plugged/ale/test/test_fuzzy_json_decode.vader b/dotfiles/.vim/plugged/ale/test/test_fuzzy_json_decode.vader deleted file mode 100644 index 4b1c6088..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_fuzzy_json_decode.vader +++ /dev/null @@ -1,29 +0,0 @@ -Execute(FuzzyJSONDecode should return the default for empty Lists): - AssertEqual [], ale#util#FuzzyJSONDecode([], []) - AssertEqual {}, ale#util#FuzzyJSONDecode([], {}) - -Execute(FuzzyJSONDecode should return the default for empty Strings): - AssertEqual [], ale#util#FuzzyJSONDecode('', []) - AssertEqual {}, ale#util#FuzzyJSONDecode('', {}) - -Execute(FuzzyJSONDecode should return the default value for ['']): - AssertEqual [], ale#util#FuzzyJSONDecode([''], []) - AssertEqual {}, ale#util#FuzzyJSONDecode([''], {}) - -Execute(FuzzyJSONDecode should return the default value for only whitespace lines): - AssertEqual [], ale#util#FuzzyJSONDecode(['', "\n"], []) - AssertEqual {}, ale#util#FuzzyJSONDecode(['', "\n"], {}) - -Execute(FuzzyJSONDecode should return the default for Lists with invalid JSON): - AssertEqual [], ale#util#FuzzyJSONDecode(['x'], []) - AssertEqual {}, ale#util#FuzzyJSONDecode(['x'], {}) - -Execute(FuzzyJSONDecode should return the default for Strings with invalid JSON): - AssertEqual [], ale#util#FuzzyJSONDecode('x', []) - AssertEqual {}, ale#util#FuzzyJSONDecode('x', {}) - -Execute(FuzzyJSONDecode should return the JSON from the JSON string): - AssertEqual {'x': 3}, ale#util#FuzzyJSONDecode('{"x": 3}', []) - AssertEqual {'x': 3}, ale#util#FuzzyJSONDecode('{"x": 3}', {}) - AssertEqual {'x': 3}, ale#util#FuzzyJSONDecode(['{"x"', ': 3}'], []) - AssertEqual {'x': 3}, ale#util#FuzzyJSONDecode(['{"x"', ': 3}'], {}) diff --git a/dotfiles/.vim/plugged/ale/test/test_get_abspath.vader b/dotfiles/.vim/plugged/ale/test/test_get_abspath.vader deleted file mode 100644 index 7e1b5930..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_get_abspath.vader +++ /dev/null @@ -1,29 +0,0 @@ -Execute(Relative paths should be resolved correctly): - AssertEqual - \ has('win32') ? '\foo\bar\baz\whatever.txt' : '/foo/bar/baz/whatever.txt', - \ ale#path#GetAbsPath('/foo/bar/xyz', '../baz/whatever.txt') - AssertEqual - \ has('win32') ? '\foo\bar\xyz\whatever.txt' : '/foo/bar/xyz/whatever.txt', - \ ale#path#GetAbsPath('/foo/bar/xyz', './whatever.txt') - AssertEqual - \ has('win32') ? '\foo\bar\xyz\whatever.txt' : '/foo/bar/xyz/whatever.txt', - \ ale#path#GetAbsPath('/foo/bar/xyz', 'whatever.txt') - - if has('win32') - AssertEqual - \ 'C:\foo\bar\baz\whatever.txt', - \ ale#path#GetAbsPath('C:\foo\bar\baz\xyz', '../whatever.txt') - endif - -Execute(Absolute paths should be resolved correctly): - AssertEqual - \ has('win32') ? '\ding\dong' : '/ding/dong', - \ ale#path#GetAbsPath('/foo/bar/xyz', '/ding/dong') - - AssertEqual - \ has('win32') ? '\ding\dong' : '/ding/dong', - \ ale#path#GetAbsPath('/foo/bar/xyz', '//ding/dong') - - if has('win32') - AssertEqual '\ding', ale#path#GetAbsPath('/foo/bar/xyz', '\\ding') - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_get_loclist.vader b/dotfiles/.vim/plugged/ale/test/test_get_loclist.vader deleted file mode 100644 index 14696998..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_get_loclist.vader +++ /dev/null @@ -1,31 +0,0 @@ -Before: - let g:loclist = [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'eslint', - \ 'nr': -1, - \ 'type': 'E', - \ 'col': 10, - \ 'text': 'Missing semicolon. (semi)' - \ }, - \ { - \ 'lnum': 2, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'eslint', - \ 'nr': -1, - \ 'type': 'W', - \ 'col': 10, - \ 'text': 'Infix operators must be spaced. (space-infix-ops)' - \ }, - \] - let g:ale_buffer_info = {'1': {'loclist': g:loclist}} - -After: - unlet g:loclist - let g:ale_buffer_info = {} - -Execute(GetLoclist should return the loclist): - AssertEqual g:loclist, ale#engine#GetLoclist(1) diff --git a/dotfiles/.vim/plugged/ale/test/test_getmatches.vader b/dotfiles/.vim/plugged/ale/test/test_getmatches.vader deleted file mode 100644 index edf84f6e..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_getmatches.vader +++ /dev/null @@ -1,163 +0,0 @@ -Execute (ale#util#GetMatches should return matches for many lines): - AssertEqual - \ [ - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '47', - \ '14', - \ 'Missing trailing comma.', - \ 'Warning/comma-dangle', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], - \ [ - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ '56', - \ '41', - \ 'Missing semicolon.', - \ 'Error/semi', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], - \ ], - \ ale#util#GetMatches( - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ ], - \ [ - \ '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$', - \ ] - \ ) - -Execute (ale#util#GetMatches should accept a string for a single pattern): - AssertEqual - \ [ - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '47', - \ '14', - \ 'Missing trailing comma.', - \ 'Warning/comma-dangle', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], - \ [ - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ '56', - \ '41', - \ 'Missing semicolon.', - \ 'Error/semi', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], - \ ], - \ ale#util#GetMatches( - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ ], - \ '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$' - \ ) - -Execute (ale#util#MapMatches should map matches): - AssertEqual - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ ], - \ ale#util#MapMatches( - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ ], - \ '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$', - \ {match -> match[0]} - \ ) - -Execute (ale#util#GetMatches should accept a single line as a string): - AssertEqual - \ [ - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '47', - \ '14', - \ 'Missing trailing comma.', - \ 'Warning/comma-dangle', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], - \ ], - \ ale#util#GetMatches( - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ [ - \ '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$', - \ ] - \ ) - -Execute (ale#util#GetMatches should match multiple patterns correctly): - AssertEqual - \ [ - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '47', - \ '14', - \ 'Missing trailing comma.', - \ 'Warning/comma-dangle', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], - \ [ - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ '56', - \ '41', - \ 'Missing semicolon.', - \ 'Error/semi', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], - \ [ - \ '/path/to/some-filename.js:13:3: Parsing error: Unexpected token', - \ '13', - \ '3', - \ 'Parsing error: Unexpected token', - \ '', - \ '', - \ '', - \ '', - \ '', - \ '', - \ ], - \ ], - \ ale#util#GetMatches( - \ [ - \ '/path/to/some-filename.js:47:14: Missing trailing comma. [Warning/comma-dangle]', - \ '/path/to/some-filename.js:56:41: Missing semicolon. [Error/semi]', - \ '/path/to/some-filename.js:13:3: Parsing error: Unexpected token', - \ ], - \ [ - \ '^.*:\(\d\+\):\(\d\+\): \(.\+\) \[\(.\+\)\]$', - \ '^.*:\(\d\+\):\(\d\+\): \(.\+\)$', - \ ] - \ ) diff --git a/dotfiles/.vim/plugged/ale/test/test_go_to_definition.vader b/dotfiles/.vim/plugged/ale/test/test_go_to_definition.vader deleted file mode 100644 index 726de551..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_go_to_definition.vader +++ /dev/null @@ -1,689 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('dummy.txt') - - Save g:ale_default_navigation - - let g:old_filename = expand('%:p') - let g:Callback = '' - let g:message_list = [] - let g:expr_list = [] - let g:capability_checked = '' - let g:conn_id = v:null - let g:InitCallback = v:null - let g:ale_default_navigation = 'buffer' - - runtime autoload/ale/linter.vim - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - - if a:linter.lsp is# 'tsserver' - call ale#lsp#MarkConnectionAsTsserver(g:conn_id) - endif - - let l:details = { - \ 'command': 'foobar', - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': '/foo/bar', - \} - - let g:InitCallback = {-> ale#lsp_linter#OnInit(a:linter, l:details, a:Callback)} - endfunction - - function! ale#lsp#HasCapability(conn_id, capability) abort - let g:capability_checked = a:capability - - return 1 - endfunction - - function! ale#lsp#RegisterCallback(conn_id, callback) abort - let g:Callback = a:callback - endfunction - - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 42 - endfunction - - function! ale#util#Execute(expr) abort - call add(g:expr_list, a:expr) - endfunction - -After: - Restore - - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - call ale#definition#SetMap({}) - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - unlet! g:capability_checked - unlet! g:InitCallback - unlet! g:old_filename - unlet! g:conn_id - unlet! g:Callback - unlet! g:message_list - unlet! g:expr_list - unlet! b:ale_linters - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - -Execute(Other messages for the tsserver handler should be ignored): - call ale#definition#HandleTSServerResponse(1, {'command': 'foo'}) - -Execute(Tagstack should be incremented if supported): - if exists('*gettagstack') && exists('*settagstack') - let original_stack_depth = gettagstack().length - endif - call ale#definition#UpdateTagStack() - if exists('*gettagstack') && exists('*settagstack') - AssertEqual original_stack_depth + 1, gettagstack().length - endif - -Execute(Failed definition responses should be handled correctly): - call ale#definition#SetMap({3: {'open_in': 'current-buffer'}}) - call ale#definition#HandleTSServerResponse( - \ 1, - \ {'command': 'definition', 'request_seq': 3} - \) - AssertEqual {}, ale#definition#GetMap() - -Execute(Failed definition responses with no files should be handled correctly): - call ale#definition#SetMap({3: {'open_in': 'current-buffer'}}) - call ale#definition#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'definition', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': [], - \ } - \) - AssertEqual {}, ale#definition#GetMap() - -Given typescript(Some typescript file): - foo - somelongerline - bazxyzxyzxyz - -Execute(Other files should be jumped to for definition responses): - call ale#definition#SetMap({3: {'open_in': 'current-buffer'}}) - call ale#definition#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'definition', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': [ - \ { - \ 'file': ale#path#Simplify(g:dir . '/completion_dummy_file'), - \ 'start': {'line': 3, 'offset': 7}, - \ }, - \ ], - \ } - \) - - AssertEqual - \ [ - \ 'edit +3 ' . fnameescape(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ ], - \ g:expr_list - AssertEqual [3, 7], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(Other files should be jumped to for definition responses in tabs too): - call ale#definition#SetMap({3: {'open_in': 'tab'}}) - call ale#definition#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'definition', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': [ - \ { - \ 'file': ale#path#Simplify(g:dir . '/completion_dummy_file'), - \ 'start': {'line': 3, 'offset': 7}, - \ }, - \ ], - \ } - \) - - AssertEqual - \ [ - \ 'tabedit +3 ' . fnameescape(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ ], - \ g:expr_list - AssertEqual [3, 7], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(Other files should be jumped to for definition responses in splits too): - call ale#definition#SetMap({3: {'open_in': 'split'}}) - call ale#definition#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'definition', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': [ - \ { - \ 'file': ale#path#Simplify(g:dir . '/completion_dummy_file'), - \ 'start': {'line': 3, 'offset': 7}, - \ }, - \ ], - \ } - \) - - AssertEqual - \ [ - \ 'split +3 ' . fnameescape(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ ], - \ g:expr_list - AssertEqual [3, 7], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(Other files should be jumped to for definition responses in vsplits too): - call ale#definition#SetMap({3: {'open_in': 'vsplit'}}) - call ale#definition#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'definition', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': [ - \ { - \ 'file': ale#path#Simplify(g:dir . '/completion_dummy_file'), - \ 'start': {'line': 3, 'offset': 7}, - \ }, - \ ], - \ } - \) - - AssertEqual - \ [ - \ 'vsplit +3 ' . fnameescape(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ ], - \ g:expr_list - AssertEqual [3, 7], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(tsserver definition requests should be sent): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEGoToDefinition - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'definition', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@definition', {'file': expand('%:p'), 'line': 2, 'offset': 5}] - \ ], - \ g:message_list - AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap() - -Execute(tsserver type definition requests should be sent): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEGoToTypeDefinition - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'typeDefinition', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@typeDefinition', {'file': expand('%:p'), 'line': 2, 'offset': 5}] - \ ], - \ g:message_list - AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap() - -Execute(tsserver implementation requests should be sent): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEGoToImplementation - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'implementation', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@implementation', {'file': expand('%:p'), 'line': 2, 'offset': 5}] - \ ], - \ g:message_list - AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap() - -Execute(tsserver tab definition requests should be sent): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALEGoToDefinition -tab - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'definition', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@definition', {'file': expand('%:p'), 'line': 2, 'offset': 5}] - \ ], - \ g:message_list - AssertEqual {'42': {'open_in': 'tab'}}, ale#definition#GetMap() - -Execute(The default navigation type should be used): - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - let g:ale_default_navigation = 'tab' - ALEGoToDefinition - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'definition', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@definition', {'file': expand('%:p'), 'line': 2, 'offset': 5}] - \ ], - \ g:message_list - AssertEqual {'42': {'open_in': 'tab'}}, ale#definition#GetMap() - -Given python(Some Python file): - foo - somelongerline - bazxyzxyzxyz - -Execute(Other files should be jumped to for LSP definition responses): - call ale#definition#SetMap({3: {'open_in': 'current-buffer'}}) - call ale#definition#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ 'range': { - \ 'start': {'line': 2, 'character': 7}, - \ }, - \ }, - \ } - \) - - AssertEqual - \ [ - \ 'edit +3 ' . fnameescape(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ ], - \ g:expr_list - AssertEqual [3, 8], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(Newer LocationLink items should be supported): - call ale#definition#SetMap({3: {'open_in': 'current-buffer'}}) - call ale#definition#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': { - \ 'targetUri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ 'targetRange': { - \ 'start': {'line': 2, 'character': 7}, - \ }, - \ }, - \ } - \) - - AssertEqual - \ [ - \ 'edit +3 ' . fnameescape(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ ], - \ g:expr_list - AssertEqual [3, 8], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(Locations inside the same file should be jumped to without using :edit): - call ale#definition#SetMap({3: {'open_in': 'current-buffer'}}) - call ale#definition#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(expand('%:p'))), - \ 'range': { - \ 'start': {'line': 2, 'character': 7}, - \ }, - \ }, - \ } - \) - - AssertEqual - \ [ - \ ], - \ g:expr_list - AssertEqual [3, 8], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(Other files should be jumped to in tabs for LSP definition responses): - call ale#definition#SetMap({3: {'open_in': 'tab'}}) - call ale#definition#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ 'range': { - \ 'start': {'line': 2, 'character': 7}, - \ }, - \ }, - \ } - \) - - AssertEqual - \ [ - \ 'tabedit +3 ' . fnameescape(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ ], - \ g:expr_list - AssertEqual [3, 8], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(Definition responses with lists should be handled): - call ale#definition#SetMap({3: {'open_in': 'current-buffer'}}) - call ale#definition#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': [ - \ { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ 'range': { - \ 'start': {'line': 2, 'character': 7}, - \ }, - \ }, - \ { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/other_file')), - \ 'range': { - \ 'start': {'line': 20, 'character': 3}, - \ }, - \ }, - \ ], - \ } - \) - - AssertEqual - \ [ - \ 'edit +3 ' . fnameescape(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ ], - \ g:expr_list - AssertEqual [3, 8], getpos('.')[1:2] - AssertEqual {}, ale#definition#GetMap() - -Execute(Definition responses with null response should be handled): - call ale#definition#SetMap({3: {'open_in': 'current-buffer'}}) - call ale#definition#HandleLSPResponse(1, {'id': 3, 'result': v:null}) - - AssertEqual [], g:expr_list - -Execute(LSP definition requests should be sent): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALEGoToDefinition - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'definition', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/definition', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ }], - \ ], - \ g:message_list - - AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap() - -Execute(LSP type definition requests should be sent): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALEGoToTypeDefinition - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'typeDefinition', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/typeDefinition', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ }], - \ ], - \ g:message_list - - AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap() - -Execute(LSP implementation requests should be sent): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALEGoToImplementation - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'implementation', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/implementation', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ }], - \ ], - \ g:message_list - - AssertEqual {'42': {'open_in': 'current-buffer'}}, ale#definition#GetMap() - -Execute(LSP tab definition requests should be sent): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALEGoToDefinition -tab - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'definition', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/definition', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ }], - \ ], - \ g:message_list - - AssertEqual {'42': {'open_in': 'tab'}}, ale#definition#GetMap() - -Execute(LSP tab type definition requests should be sent): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALEGoToTypeDefinition -tab - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'typeDefinition', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/typeDefinition', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ }], - \ ], - \ g:message_list - - AssertEqual {'42': {'open_in': 'tab'}}, ale#definition#GetMap() - -Execute(LSP tab implementation requests should be sent): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALEGoToImplementation -tab - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'implementation', g:capability_checked - AssertEqual - \ 'function(''ale#definition#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/implementation', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ }], - \ ], - \ g:message_list - - AssertEqual {'42': {'open_in': 'tab'}}, ale#definition#GetMap() diff --git a/dotfiles/.vim/plugged/ale/test/test_gradle_build_classpath_command.vader b/dotfiles/.vim/plugged/ale/test/test_gradle_build_classpath_command.vader deleted file mode 100644 index 9557aa0d..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_gradle_build_classpath_command.vader +++ /dev/null @@ -1,52 +0,0 @@ -Before: - Save $PATH - Save $PATHEXT - - let $PATHEXT = '.' - - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/kotlin/kotlinc.vim - - let g:command_tail = ' -I ' . ale#Escape(ale#gradle#GetInitPath()) - \ . ' -q printClasspath' - - let g:gradle_init_path = ale#path#Simplify(g:dir . '../../autoload/ale/gradle/init.gradle') - -After: - Restore - - unlet! g:gradle_init_path - unlet! g:command_tail - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Should return 'gradlew' command if project includes gradle wapper): - call ale#test#SetFilename('test-files/gradle/wrapped-project/src/main/kotlin/dummy.kt') - - AssertEqual - \ [ - \ ale#path#Simplify(g:dir . '/test-files/gradle/wrapped-project'), - \ ale#Escape(ale#path#Simplify(g:dir . '/test-files/gradle/wrapped-project/gradlew')) - \ . g:command_tail, - \ ], - \ ale#gradle#BuildClasspathCommand(bufnr('')) - -Execute(Should return 'gradle' command if project does not include gradle wapper): - call ale#test#SetFilename('test-files/gradle/unwrapped-project/src/main/kotlin/dummy.kt') - let $PATH .= (has('win32') ? ';' : ':') - \ . ale#path#Simplify(g:dir . '/test-files/gradle') - - AssertEqual - \ [ - \ ale#path#Simplify(g:dir . '/test-files/gradle/unwrapped-project'), - \ ale#Escape('gradle') . g:command_tail - \ ], - \ ale#gradle#BuildClasspathCommand(bufnr('')) - -Execute(Should return empty string if gradle cannot be executed): - call ale#test#SetFilename('test-files/gradle/non-gradle-project/src/main/kotlin/dummy.kt') - - AssertEqual - \ ['', ''], - \ ale#gradle#BuildClasspathCommand(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_gradle_find_executable.vader b/dotfiles/.vim/plugged/ale/test/test_gradle_find_executable.vader deleted file mode 100644 index f874748c..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_gradle_find_executable.vader +++ /dev/null @@ -1,37 +0,0 @@ -Before: - Save $PATH - Save $PATHEXT - - " Count the gradle executable without .exe as executable on Windows - let $PATHEXT = '.' - - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/kotlin/kotlinc.vim - -After: - Restore - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Should return 'gradlew' if found in parent directory): - call ale#test#SetFilename('test-files/gradle/wrapped-project/src/main/kotlin/dummy.kt') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/gradle/wrapped-project/gradlew'), - \ ale#gradle#FindExecutable(bufnr('')) - -Execute(Should return 'gradle' if 'gradlew' not found in parent directory): - call ale#test#SetFilename('test-files/gradle/unwrapped-project/src/main/kotlin/dummy.kt') - let $PATH .= (has('win32') ? ';': ':') . ale#path#Simplify(g:dir . '/test-files/gradle') - - AssertEqual - \ 'gradle', - \ ale#gradle#FindExecutable(bufnr('')) - -Execute(Should return empty string if 'gradlew' not in parent directory and gradle not in path): - call ale#test#SetFilename('test-files/gradle/unwrapped-project/src/main/kotlin/dummy.kt') - - AssertEqual - \ '', - \ ale#gradle#FindExecutable(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_gradle_find_project_root.vader b/dotfiles/.vim/plugged/ale/test/test_gradle_find_project_root.vader deleted file mode 100644 index b6159188..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_gradle_find_project_root.vader +++ /dev/null @@ -1,35 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/kotlin/kotlinc.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Should return directory for 'gradlew' if found in parent directory): - call ale#test#SetFilename('test-files/gradle/wrapped-project/src/main/kotlin/dummy.kt') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/gradle/wrapped-project'), - \ ale#gradle#FindProjectRoot(bufnr('')) - -Execute(Should return directory for 'settings.gradle' if found in parent directory): - call ale#test#SetFilename('test-files/gradle/settings-gradle-project/src/main/kotlin/dummy.kt') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/gradle/settings-gradle-project'), - \ ale#gradle#FindProjectRoot(bufnr('')) - -Execute(Should return directory for 'build.gradle' if found in parent directory): - call ale#test#SetFilename('test-files/gradle/build-gradle-project/src/main/kotlin/dummy.kt') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/gradle/build-gradle-project'), - \ ale#gradle#FindProjectRoot(bufnr('')) - -Execute(Should return empty string if gradle files are not found in parent directory): - call ale#test#SetFilename('test-files/gradle/non-gradle-project/src/main/kotlin/dummy.kt') - - AssertEqual - \ '', - \ ale#gradle#FindProjectRoot(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_helptags.vader b/dotfiles/.vim/plugged/ale/test/test_helptags.vader deleted file mode 100644 index 8c9c5469..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_helptags.vader +++ /dev/null @@ -1,2 +0,0 @@ -Execute (helptags should run without issue): - helptags ALL diff --git a/dotfiles/.vim/plugged/ale/test/test_highlight_placement.vader b/dotfiles/.vim/plugged/ale/test/test_highlight_placement.vader deleted file mode 100644 index 44ae369b..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_highlight_placement.vader +++ /dev/null @@ -1,465 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_echo_cursor - Save g:ale_enabled - Save g:ale_run_synchronously - Save g:ale_set_highlights - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_set_signs - Save g:ale_exclude_highlights - Save b:ale_exclude_highlights - - runtime autoload/ale/virtualtext.vim - runtime autoload/ale/highlight.vim - - let g:ale_run_synchronously = 1 - unlet! g:ale_run_synchronously_callbacks - let g:ale_set_highlights = 1 - let g:ale_set_signs = 1 - let g:ale_buffer_info = {} - - " Disable features we don't need for these tests. - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 0 - let g:ale_echo_cursor = 0 - let g:ale_exclude_highlights = [] - let b:ale_exclude_highlights = [] - - function! GenerateResults(buffer, output) - return [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'text': 'foo', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'type': 'W', - \ 'text': 'bar', - \ }, - \ { - \ 'lnum': 3, - \ 'col': 5, - \ 'type': 'E', - \ 'text': 'wat', - \ }, - \] - endfunction - - let g:has_nvim_highlight = exists('*nvim_buf_add_highlight') && exists('*nvim_buf_clear_namespace') - let g:nvim_highlight_matches = {} - - function! ale#highlight#nvim_buf_clear_namespace(buffer, ns_id, line_start, line_end) abort - if a:line_end != -1 - throw 'nvim api behavior not supported' - endif - - let l:matches = get(g:nvim_highlight_matches, a:buffer, []) - call filter( - \ l:matches, - \ {_, val -> val.pos1[0] < (a:line_start + 1) }, - \) - endfunction - - function! ale#highlight#nvim_buf_add_highlight(buffer, ns_id, hl_group, line, col_start, col_end) abort - if a:col_end == -1 - throw 'nvim api behavior not supported' - endif - - let l:matches = get(g:nvim_highlight_matches, a:buffer, []) - let g:nvim_highlight_matches[a:buffer] = l:matches - - let l:new_match = { - \ 'group': a:hl_group, - \ 'priority': 10, - \ 'pos1': [a:line + 1, a:col_start + 1, a:col_end - a:col_start], - \} - - call add(l:matches, l:new_match) - " sort by line number to emulate getmatches faithfully - call sort(l:matches, {m1, m2 -> m1.pos1[0] - m2.pos1[0]}) - endfunction - - " We don't care what the IDs are, just that we have some matches. - " The IDs are generated. - function! GetMatchesWithoutIDs() abort - if g:has_nvim_highlight - return get(g:nvim_highlight_matches, bufnr(''), []) - else - let l:list = getmatches() - - for l:item in l:list - call remove(l:item, 'id') - endfor - - return l:list - endif - endfunction - - function! GetLinkedGroup(grp) abort - return synIDattr(synIDtrans(hlID(a:grp)), 'name') - endfunction - - call ale#linter#Define('testft', { - \ 'name': 'x', - \ 'executable': has('win32') ? 'cmd': 'echo', - \ 'command': has('win32') ? 'echo' : '/bin/sh -c ''echo''', - \ 'callback': 'GenerateResults', - \}) - highlight link SomeOtherGroup SpellBad - -After: - Restore - - unlet! g:ale_run_synchronously_callbacks - unlet! g:items - unlet! b:ale_enabled - unlet! g:has_nvim_highlight - unlet! g:nvim_highlight_matches - - delfunction GenerateResults - call ale#linter#Reset() - call clearmatches() - call ale#sign#Clear() - if has('textprop') && has('popupwin') - call prop_type_delete('ale') - endif - highlight clear SomeOtherGroup - - runtime autoload/ale/highlight.vim - -Given testft(A Javscript file with warnings/errors): - foo - bar - baz wat - line four - -" Autoloading virtualtext.vim first should still properly initialize hl-groups -Execute(Loading virtualtext first does not break highlight groups): - AssertEqual - \ "SpellBad", - \ GetLinkedGroup("ALEError") - AssertEqual - \ "SpellCap", - \ GetLinkedGroup("ALEWarning") - -Execute(Highlights should be set when a linter runs): - ALELint - call ale#test#FlushJobs() - - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]}, - \ {'group': 'ALEWarning', 'priority': 10, 'pos1': [2, 1, 1]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 5, 1]} - \ ], - \ GetMatchesWithoutIDs() - -" This test is important for preventing ALE from showing highlights for -" the wrong files. -Execute(Highlights set by ALE should be removed when buffer cleanup is done): - call ale#engine#InitBufferInfo(bufnr('%')) - - call ale#highlight#SetHighlights(bufnr('%'), [ - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2}, - \]) - - if !g:has_nvim_highlight - " This check doesn't work with the new API, for some reason. - AssertEqual - \ [{'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 1]}], - \ GetMatchesWithoutIDs() - endif - - call ale#engine#Cleanup(bufnr('%')) - - AssertEqual [], GetMatchesWithoutIDs() - -Execute(Highlights should be cleared when buffers are hidden): - call ale#engine#InitBufferInfo(bufnr('%')) - " The second item should be ignored, as it has no column infomration. - let g:ale_buffer_info[bufnr('%')].loclist = [ - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2}, - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 4, 'col': 0}, - \] - call ale#highlight#SetHighlights( - \ bufnr('%'), - \ g:ale_buffer_info[bufnr('%')].loclist - \) - - AssertEqual 1, len(GetMatchesWithoutIDs()), 'The highlights weren''t initially set!' - - call ale#highlight#BufferHidden(bufnr('%')) - - AssertEqual 0, len(GetMatchesWithoutIDs()), 'The highlights weren''t cleared!' - - call ale#highlight#UpdateHighlights() - - AssertEqual 1, len(GetMatchesWithoutIDs()), 'The highlights weren''t set again!' - -Execute(Only ALE highlights should be restored when buffers are restored): - call ale#engine#InitBufferInfo(bufnr('%')) - let g:ale_buffer_info[bufnr('%')].loclist = [ - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2}, - \] - call ale#highlight#SetHighlights( - \ bufnr('%'), - \ g:ale_buffer_info[bufnr('%')].loclist - \) - - call matchaddpos('SomeOtherGroup', [[1, 1, 1]]) - - " We should have both highlights. - if g:has_nvim_highlight - " When the newer NeoVim API is used, we don't have to worry about - " other highlights, namespacing is available. - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 1]}, - \ ], - \ GetMatchesWithoutIDs() - else - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 1]}, - \ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]}, - \ ], - \ sort(GetMatchesWithoutIDs(), {m1, m2 -> m1.group < m2.group ? -1 : 1}) - endif - - call ale#highlight#BufferHidden(bufnr('%')) - - " We should remove our highlight, but not the other one. - if g:has_nvim_highlight - AssertEqual [], GetMatchesWithoutIDs() - else - AssertEqual - \ [ - \ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]} - \ ], - \ GetMatchesWithoutIDs() - endif - - call ale#highlight#UpdateHighlights() - - " Our highlight should apper again. - if g:has_nvim_highlight - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 1]}, - \ ], - \ GetMatchesWithoutIDs() - else - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 1]}, - \ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]}, - \ ], - \ sort(GetMatchesWithoutIDs(), {m1, m2 -> m1.group < m2.group ? -1 : 1}) - endif - -Execute(Higlight end columns should set an appropriate size): - call ale#highlight#SetHighlights(bufnr('%'), [ - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2, 'end_col': 5}, - \ {'bufnr': bufnr('%'), 'type': 'W', 'lnum': 4, 'col': 1, 'end_col': 5}, - \]) - - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 2, 4]}, - \ {'group': 'ALEWarning', 'priority': 10, 'pos1': [4, 1, 5]}, - \ ], - \ GetMatchesWithoutIDs() - -Execute(Higlight end columns should set an appropriate size): - call ale#highlight#SetHighlights(bufnr('%'), [ - \ {'bufnr': bufnr('%') - 1, 'type': 'E', 'lnum': 1, 'col': 1}, - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 1, 'col': 1}, - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 2, 'col': 1}, - \ {'bufnr': bufnr('%'), 'type': 'E', 'sub_type': 'style', 'lnum': 3, 'col': 1}, - \ {'bufnr': bufnr('%'), 'type': 'W', 'lnum': 4, 'col': 1}, - \ {'bufnr': bufnr('%'), 'type': 'W', 'lnum': 5, 'col': 1}, - \ {'bufnr': bufnr('%'), 'type': 'W', 'sub_type': 'style', 'lnum': 6, 'col': 1}, - \ {'bufnr': bufnr('%'), 'type': 'I', 'lnum': 7, 'col': 1}, - \ {'bufnr': bufnr('%') + 1, 'type': 'E', 'lnum': 1, 'col': 1}, - \]) - - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [2, 1, 1]}, - \ {'group': 'ALEStyleError', 'priority': 10, 'pos1': [3, 1, 1]}, - \ {'group': 'ALEWarning', 'priority': 10, 'pos1': [4, 1, 1]}, - \ {'group': 'ALEWarning', 'priority': 10, 'pos1': [5, 1, 1]}, - \ {'group': 'ALEStyleWarning', 'priority': 10, 'pos1': [6, 1, 1]}, - \ {'group': 'ALEInfo', 'priority': 10, 'pos1': [7, 1, 1]}, - \ ], - \ GetMatchesWithoutIDs() - -Execute(Highlighting should support errors spanning many lines): - let g:items = [ - \ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1, 'end_lnum': 10, 'end_col': 3}, - \] - - call ale#highlight#SetHighlights(bufnr(''), g:items) - - if g:has_nvim_highlight - " The newer NeoVim highlight API produces different output. - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [2, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [3, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [4, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [5, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [6, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [7, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [8, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [9, 1, 1073741824]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [10, 1, 3]}, - \ ], - \ GetMatchesWithoutIDs() - else - " We should set 2 highlights for the item, as we can only add 8 at a time. - AssertEqual - \ [ - \ { - \ 'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1073741824], - \ 'pos2': [2], 'pos3': [3], 'pos4': [4], 'pos5': [5], 'pos6': [6], - \ 'pos7': [7], 'pos8': [8], - \ }, - \ { - \ 'group': 'ALEError', 'priority': 10, - \ 'pos1': [9], 'pos2': [10, 1, 3] - \ }, - \ ], - \ GetMatchesWithoutIDs() - endif - -Execute(Highlights should always be cleared when the buffer highlight list is empty): - if g:has_nvim_highlight - " The newer API uses namespacing. We'll emulate it here. - call ale#highlight#nvim_buf_add_highlight( - \ bufnr(''), - \ 1, - \ 'ALEError', - \ 0, - \ 0, - \ 1, - \) - - AssertEqual - \ [{'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]}], - \ GetMatchesWithoutIDs() - else - " Add our highlights and something else. - call matchaddpos('ALEError', [[1, 1, 1]]) - call matchaddpos('SomeOtherGroup', [[1, 1, 1]]) - - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]}, - \ {'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]}, - \ ], - \ GetMatchesWithoutIDs() - endif - - - " Set the List we use for holding highlights for buffers. - let b:ale_highlight_items = [] - - " Call the function for updating the highlights called when buffers - " are entered, or when problems are presented. - call ale#highlight#UpdateHighlights() - - " Check that we remove our highlights. - if g:has_nvim_highlight - AssertEqual [], GetMatchesWithoutIDs() - else - AssertEqual - \ [{'group': 'SomeOtherGroup', 'priority': 10, 'pos1': [1, 1, 1]}], - \ GetMatchesWithoutIDs() - endif - -Execute(Highlights should be hidden when excluded): - let b:ale_exclude_highlights = ['ig.*ore', 'nope'] - - call ale#highlight#SetHighlights(bufnr('%'), [ - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 1, 'col': 1, 'text': 'hello'}, - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 2, 'col': 1, 'text': 'ignore'}, - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 1, 'text': 'nope'}, - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 4, 'col': 1, 'text': 'world'}, - \]) - - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]}, - \ {'group': 'ALEError', 'priority': 10, 'pos1': [4, 1, 1]}, - \ ], - \ GetMatchesWithoutIDs() - -Execute(Highlights should be cleared when ALE is disabled): - let g:ale_enabled = 1 - call ale#highlight#SetHighlights(bufnr(''), [ - \ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1, 'end_lnum': 10, 'end_col': 3}, - \]) - - let g:ale_enabled = 0 - call ale#highlight#UpdateHighlights() - - AssertEqual [], GetMatchesWithoutIDs() - - let g:ale_enabled = 1 - call ale#highlight#SetHighlights(bufnr(''), [ - \ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1, 'end_lnum': 10, 'end_col': 3}, - \]) - - let b:ale_enabled = 0 - call ale#highlight#UpdateHighlights() - - AssertEqual [], GetMatchesWithoutIDs() - -Execute(Line highlights should be set when signs are disabled): - " This will mess with your settings, but it needs to be tested. - " We need to match highlights case-insenstive when removing them. - hi link aleerrorline spellbad - - let g:ale_set_signs = 0 - - call ale#highlight#SetHighlights(bufnr(''), [ - \ {'bufnr': bufnr(''), 'type': 'E', 'lnum': 1, 'col': 1}, - \ {'bufnr': bufnr(''), 'type': 'W', 'lnum': 2, 'col': 1}, - \ {'bufnr': bufnr(''), 'type': 'I', 'lnum': 3, 'col': 1}, - \]) - - if g:has_nvim_highlight - " The output is different with the newer NeoVIM highlight API. - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]}, - \ {'group': 'ALEErrorLine', 'priority': 10, 'pos1': [1, 1, 1073741824]}, - \ {'group': 'ALEWarning', 'priority': 10, 'pos1': [2, 1, 1]}, - \ {'group': 'ALEWarningLine', 'priority': 10, 'pos1': [2, 1, 1073741824]}, - \ {'group': 'ALEInfo', 'priority': 10, 'pos1': [3, 1, 1]}, - \ {'group': 'ALEInfoLine', 'priority': 10, 'pos1': [3, 1, 1073741824]} - \ ], - \ GetMatchesWithoutIDs() - else - AssertEqual - \ [ - \ {'group': 'ALEError', 'priority': 10, 'pos1': [1, 1, 1]}, - \ {'group': 'ALEWarning', 'priority': 10, 'pos1': [2, 1, 1]}, - \ {'group': 'ALEInfo', 'priority': 10, 'pos1': [3, 1, 1]}, - \ {'group': 'aleerrorline', 'priority': 10, 'pos1': [1]}, - \ {'group': 'ALEWarningLine', 'priority': 10, 'pos1': [2]}, - \ {'group': 'ALEInfoLine', 'priority': 10, 'pos1': [3]}, - \ ], - \ GetMatchesWithoutIDs() - endif - - " All of the highlights should be removed. - call ale#highlight#RemoveHighlights() - AssertEqual [], GetMatchesWithoutIDs() diff --git a/dotfiles/.vim/plugged/ale/test/test_highlight_position_chunking.vader b/dotfiles/.vim/plugged/ale/test/test_highlight_position_chunking.vader deleted file mode 100644 index cd9161b5..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_highlight_position_chunking.vader +++ /dev/null @@ -1,76 +0,0 @@ -Execute(CreatePositions() should support single character matches): - AssertEqual [[[1, 5, 1]]], ale#highlight#CreatePositions(1, 5, 1, 5) - " When the end column is behind the start column, ignore it. - AssertEqual [[[2, 5, 1]]], ale#highlight#CreatePositions(2, 5, 1, 5) - -Execute(CreatePositions() should support multiple character matches on a single line): - AssertEqual [[[1, 5, 6]]], ale#highlight#CreatePositions(1, 5, 1, 10) - " When the end column is behind the start column, ignore it. - AssertEqual [[[2, 5, 6]]], ale#highlight#CreatePositions(2, 5, 1, 10) - -Execute(CreatePositions() should support character matches two lines): - AssertEqual [[[1, 5, 1073741824], [2, 1, 10]]], ale#highlight#CreatePositions(1, 5, 2, 10) - -Execute(CreatePositions() should support character matches across many lines): - " Test chunks from 1,3 to 1,17 - AssertEqual [ - \ [[1, 5, 1073741824], 2, [3, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 3, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, [4, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 4, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, [5, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 5, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, [6, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 6, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, [7, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 7, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, [8, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 8, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [[9, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 9, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [9, [10, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 10, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [9, 10, [11, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 11, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [9, 10, 11, [12, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 12, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [9, 10, 11, 12, [13, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 13, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [9, 10, 11, 12, 13, [14, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 14, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [9, 10, 11, 12, 13, 14, [15, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 15, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [9, 10, 11, 12, 13, 14, 15, [16, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 16, 10) - AssertEqual [ - \ [[1, 5, 1073741824], 2, 3, 4, 5, 6, 7, 8], - \ [9, 10, 11, 12, 13, 14, 15, 16], - \ [[17, 1, 10]], - \], ale#highlight#CreatePositions(1, 5, 17, 10) - " Test another random sample at higher lines. - AssertEqual [ - \ [[21, 8, 1073741824], 22, 23, 24, 25, 26, 27, 28], - \ [29, 30, 31, 32, 33, 34, 35, 36], - \ [[37, 1, 2]], - \], ale#highlight#CreatePositions(21, 8, 37, 2) diff --git a/dotfiles/.vim/plugged/ale/test/test_history_saving.vader b/dotfiles/.vim/plugged/ale/test/test_history_saving.vader deleted file mode 100644 index 5d81c2a3..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_history_saving.vader +++ /dev/null @@ -1,177 +0,0 @@ -Before: - Save g:ale_max_buffer_history_size - Save g:ale_history_enabled - Save g:ale_history_log_output - Save g:ale_run_synchronously - Save g:ale_enabled - - let g:ale_enabled = 1 - let g:ale_run_synchronously = 1 - - unlet! b:ale_fixers - unlet! b:ale_enabled - unlet! b:ale_history - - " Temporarily set the shell to /bin/sh, if it isn't already set that way. - " This will make it so the test works when running it directly. - let g:current_shell = &shell - - if !has('win32') - let &shell = '/bin/sh' - endif - - let g:history = [] - let g:ale_buffer_info = {} - let g:ale_max_buffer_history_size = 20 - let g:ale_history_log_output = 0 - - function! TestFixer(buffer) - return {'command': 'echo foo'} - endfunction - - function! CollectResults(buffer, output) - return [] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'CollectResults', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': has('win32') - \ ? 'echo command history test' - \ : '/bin/sh -c ''echo command history test''', - \ 'read_buffer': 0, - \}) - -After: - Restore - - unlet! g:expected_results - unlet! b:ale_fixers - unlet! b:ale_enabled - " Clear the history we changed. - unlet! b:ale_history - - " Reset the shell back to what it was before. - let &shell = g:current_shell - unlet g:current_shell - unlet g:history - - call ale#engine#Cleanup(bufnr('')) - call ale#linter#Reset() - - let g:ale_buffer_info = {} - let g:ale_max_buffer_history_size = 20 - delfunction TestFixer - delfunction CollectResults - -Given foobar (Some imaginary filetype): - anything - -Execute(History should be set when commands are run): - AssertEqual 'foobar', &filetype - - let b:ale_history = [] - ALELint - call ale#test#FlushJobs() - - let g:history = filter( - \ copy(ale#history#Get(bufnr(''))), - \ 'v:val.job_id isnot# ''executable''', - \) - - AssertEqual 1, len(g:history) - AssertEqual - \ ['command', 'exit_code', 'job_id', 'status'], - \ sort(keys(g:history[0])) - - if has('win32') - AssertEqual 'cmd /s/c "echo command history test"', g:history[0].command - else - AssertEqual ['/bin/sh', '-c', '/bin/sh -c ''echo command history test'''], g:history[0].command - endif - - AssertEqual 'finished', g:history[0].status - AssertEqual 0, g:history[0].exit_code - " The Job ID will change each time, but we can check the type. - AssertEqual type(1), type(g:history[0].job_id) - -Execute(History should be not set when disabled): - AssertEqual 'foobar', &filetype - - let g:ale_history_enabled = 0 - - ALELint - call ale#test#FlushJobs() - - AssertEqual [], ale#history#Get(bufnr('')) - -Execute(History should include command output if logging is enabled): - AssertEqual 'foobar', &filetype - - let g:ale_history_log_output = 1 - - " Retry this test until it works. This one can randomly fail. - let b:ale_history = [] - ALELint - call ale#test#FlushJobs() - - let g:history = ale#history#Get(bufnr('')) - - AssertEqual 1, len(g:history) - AssertEqual - \ ['command history test'], - \ map( - \ copy(get(g:history[0], 'output', [])), - \ 'substitute(v:val, ''[\r ]*$'', '''', ''g'')' - \ ) - -Execute(History items should be popped after going over the max): - let b:ale_history = map(range(20), '{''status'': ''started'', ''job_id'': v:val, ''command'': ''foobar''}') - - call ale#history#Add(bufnr(''), 'started', 347, 'last command') - - AssertEqual - \ ( - \ map(range(1, 19), '{''status'': ''started'', ''job_id'': v:val, ''command'': ''foobar''}') - \ + [{'status': 'started', 'job_id': 347, 'command': 'last command'}] - \ ), - \ ale#history#Get(bufnr('')) - -Execute(Nothing should be added to history if the size is too low): - let g:ale_max_buffer_history_size = 0 - - call ale#history#Add(bufnr(''), 'started', 347, 'last command') - - AssertEqual [], ale#history#Get(bufnr('')) - - let g:ale_max_buffer_history_size = -2 - - call ale#history#Add(1, 'started', 347, 'last command') - - AssertEqual [], ale#history#Get(bufnr('')) - -Given foobar(Some file with an imaginary filetype): - a - b - c - -Execute(The history should be updated when fixers are run): - call ale#test#SetFilename('dummy.txt') - - let b:ale_fixers = {'foobar': ['TestFixer']} - let b:ale_enabled = 0 - - ALEFix - - AssertEqual ['started'], map(copy(b:ale_history), 'v:val.status') - - call ale#test#FlushJobs() - - AssertEqual ['finished'], map(copy(b:ale_history), 'v:val.status') - - if has('win32') - AssertEqual 'cmd /s/c "echo foo ', split(b:ale_history[0].command, '<')[0] - else - AssertEqual '/bin/sh -c echo foo ', split(join(b:ale_history[0].command), '<')[0] - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_hover.vader b/dotfiles/.vim/plugged/ale/test/test_hover.vader deleted file mode 100644 index 7a9c8d91..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_hover.vader +++ /dev/null @@ -1,272 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('dummy.txt') - - let g:Callback = 0 - let g:message_list = [] - let g:item_list = [] - let g:show_message_arg_list = [] - - let g:ale_floating_preview = 0 - let g:ale_hover_to_floating_preview = 0 - let g:ale_detail_to_floating_preview = 0 - - runtime autoload/ale/linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/util.vim - runtime autoload/ale/floating_preview.vim - runtime autoload/ale/hover.vim - - let g:floated_lines = [] - let g:floating_preview_show_called = 0 - - " Stub out so we can track the call - function! ale#floating_preview#Show(lines, ...) abort - let g:floating_preview_show_called = 1 - let g:floated_lines = a:lines - endfunction - - function! ale#lsp_linter#StartLSP(buffer, linter, callback) abort - let g:Callback = a:callback - - return { - \ 'command': 'foobar', - \ 'connection_id': 347, - \ 'project_root': '/foo/bar', - \} - endfunction - - function! ale#lsp#Send(conn_id, message, root) abort - call add(g:message_list, a:message) - - return 42 - endfunction - - function! ale#util#ShowMessage(string, ...) abort - call add(g:show_message_arg_list, [a:string] + a:000) - endfunction - - function! HandleValidLSPResult(result) abort - " The cursor is beyond the length of the line. - " We will clamp the cursor position with the line length. - call setpos('.', [bufnr(''), 1, 5, 0]) - - call ale#hover#SetMap({3: { - \ 'buffer': bufnr(''), - \ 'line': 1, - \ 'column': 5, - \}}) - call ale#hover#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': a:result, - \ } - \) - endfunction - - -After: - call ale#hover#SetMap({}) - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - unlet! g:Callback - unlet! g:message_list - unlet! b:ale_linters - unlet! g:show_message_arg_list - - delfunction HandleValidLSPResult - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/floating_preview.vim - -Given python(Some Python file): - foo - somelongerline - bazxyzxyzxyz - -Execute(Other messages for the tsserver handler should be ignored): - call ale#hover#HandleTSServerResponse(1, {'command': 'foo'}) - -Execute(Failed hover responses should be handled correctly): - call ale#hover#SetMap({3: {}}) - call ale#hover#HandleTSServerResponse( - \ 1, - \ {'command': 'quickinfo', 'request_seq': 3} - \) - AssertEqual {}, ale#hover#GetMap() - -Given typescript(Some typescript file): - foo - somelongerline - bazxyzxyzxyz - -Execute(tsserver quickinfo responses will null missing bodies should be handled): - call ale#hover#SetMap({3: {}}) - call ale#hover#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'quickinfo', - \ 'request_seq': 3, - \ 'success': v:true, - \ } - \) - - AssertEqual {}, ale#hover#GetMap() - -Execute(tsserver quickinfo displayString values should be displayed): - call ale#hover#SetMap({3: {'buffer': bufnr('')}}) - call ale#hover#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'quickinfo', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': {'displayString': 'foo bar'}, - \ } - \) - - AssertEqual [['foo bar']], g:show_message_arg_list - AssertEqual {}, ale#hover#GetMap() - -Execute(LSP hover responses with just a string should be handled): - call HandleValidLSPResult({'contents': 'foobar'}) - - AssertEqual [['foobar', {'commands': []}]], g:show_message_arg_list - AssertEqual {}, ale#hover#GetMap() - -Execute(LSP hover null responses should be handled): - call HandleValidLSPResult(v:null) - - AssertEqual [], g:show_message_arg_list - AssertEqual {}, ale#hover#GetMap() - -Execute(LSP hover responses with markup content should be handled): - call HandleValidLSPResult({'contents': {'kind': 'markdown', 'value': 'markup'}}) - - AssertEqual [['markup', {'commands': []}]], g:show_message_arg_list - AssertEqual {}, ale#hover#GetMap() - -Execute(LSP hover responses with markup content missing values should be handled): - call HandleValidLSPResult({'contents': {'kind': 'markdown'}}) - - AssertEqual [], g:show_message_arg_list - AssertEqual {}, ale#hover#GetMap() - -Execute(LSP hover response with lists of strings should be handled): - call HandleValidLSPResult({'contents': [ - \ "foo\n", - \ "bar\n", - \]}) - - AssertEqual [["foo\n\nbar", {'commands': []}]], g:show_message_arg_list - AssertEqual {}, ale#hover#GetMap() - -Execute(LSP hover response with lists of strings and marked strings should be handled): - call HandleValidLSPResult({'contents': [ - \ {'language': 'rust', 'value': 'foo'}, - \ "bar\n", - \]}) - - AssertEqual [ - \ [ - \ "foo\n\nbar", - \ { - \ 'commands': [ - \ 'unlet! b:current_syntax', - \ 'syntax include @ALE_hover_rust syntax/rust.vim', - \ 'syntax region ALE_hover_1 start=/\%1l/ end=/\%2l/ contains=@ALE_hover_rust', - \ ], - \ }, - \ ], - \], g:show_message_arg_list - AssertEqual {}, ale#hover#GetMap() - -Execute(LSP hover with ale_floating_preview should float): - let g:ale_floating_preview = 1 - - call HandleValidLSPResult({'contents': "the message\ncontinuing"}) - - AssertEqual 1, g:floating_preview_show_called - AssertEqual ["the message", "continuing"], g:floated_lines - -Execute(LSP hover ale_hover_to_floating_preview should float): - let g:ale_hover_to_floating_preview = 1 - - call HandleValidLSPResult({'contents': "the message\ncontinuing"}) - - AssertEqual 1, g:floating_preview_show_called - AssertEqual ["the message", "continuing"], g:floated_lines - - -Execute(LSP hover by default should not float): - call HandleValidLSPResult({'contents': "the message\ncontinuing"}) - - AssertEqual 0, g:floating_preview_show_called - -Execute(tsserver responses for documentation requests should be handled): - call ale#hover#SetMap({3: {'show_documentation': 1, 'buffer': bufnr('')}}) - - call ale#hover#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'quickinfo', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': { - \ 'documentation': 'foo is a very good method', - \ 'displayString': 'foo bar', - \ }, - \ } - \) - - " The preview window should show the text. - AssertEqual ['foo is a very good method'], ale#test#GetPreviewWindowText() - silent! pclose - -Execute(hover with show_documentation should be in the preview window, not floating): - let g:ale_hover_to_floating_preview = 1 - let g:ale_floating_preview = 1 - - call ale#hover#SetMap({3: {'show_documentation': 1, 'buffer': bufnr('')}}) - - call ale#hover#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'quickinfo', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': { - \ 'documentation': 'foo is a very good method', - \ 'displayString': 'foo bar ', - \ }, - \ } - \) - - let expected = ["Every statement should end with a semicolon", "second line"] - - AssertEqual 0, g:floating_preview_show_called - -Execute(TSServer hover without show_documentation and ale_floating_preview should float): - let g:ale_floating_preview = 1 - - call ale#hover#SetMap({3: {'buffer': bufnr('')}}) - - call ale#hover#HandleTSServerResponse( - \ 1, - \ { - \ 'command': 'quickinfo', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': { - \ 'displayString': "the message\ncontinuing", - \ }, - \ } - \) - - AssertEqual 1, g:floating_preview_show_called - AssertEqual ["the message", "continuing"], g:floated_lines diff --git a/dotfiles/.vim/plugged/ale/test/test_hover_parsing.vader b/dotfiles/.vim/plugged/ale/test/test_hover_parsing.vader deleted file mode 100644 index 4129c26a..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_hover_parsing.vader +++ /dev/null @@ -1,173 +0,0 @@ -Execute(Invalid results should be handled): - AssertEqual [[], []], ale#hover#ParseLSPResult(0) - AssertEqual [[], []], ale#hover#ParseLSPResult([0]) - AssertEqual [[], []], ale#hover#ParseLSPResult('') - AssertEqual [[], []], ale#hover#ParseLSPResult({}) - AssertEqual [[], []], ale#hover#ParseLSPResult([{}]) - AssertEqual [[], []], ale#hover#ParseLSPResult(['']) - AssertEqual [[], []], ale#hover#ParseLSPResult({'value': ''}) - AssertEqual [[], []], ale#hover#ParseLSPResult([{'value': ''}]) - AssertEqual [[], []], ale#hover#ParseLSPResult({'kind': 'markdown'}) - AssertEqual [[], []], ale#hover#ParseLSPResult({'kind': 'plaintext'}) - AssertEqual [[], []], ale#hover#ParseLSPResult({'kind': 'x', 'value': 'xxx'}) - -Execute(A string with a code fence should be handled): - AssertEqual - \ [ - \ [ - \ 'unlet! b:current_syntax', - \ 'syntax include @ALE_hover_python syntax/python.vim', - \ 'syntax region ALE_hover_1 start=/\%1l/ end=/\%3l/ contains=@ALE_hover_python', - \ ], - \ [ - \ 'def foo():', - \ ' pass', - \ ], - \ ], - \ ale#hover#ParseLSPResult(join([ - \ '```python', - \ 'def foo():', - \ ' pass', - \ '```', - \ ], "\n")) - - AssertEqual - \ [ - \ [ - \ 'unlet! b:current_syntax', - \ 'syntax include @ALE_hover_python syntax/python.vim', - \ 'unlet! b:current_syntax', - \ 'syntax include @ALE_hover_typescript syntax/typescript.vim', - \ 'syntax region ALE_hover_1 start=/\%1l/ end=/\%3l/ contains=@ALE_hover_python', - \ 'syntax region ALE_hover_2 start=/\%5l/ end=/\%8l/ contains=@ALE_hover_python', - \ 'syntax region ALE_hover_3 start=/\%8l/ end=/\%10l/ contains=@ALE_hover_typescript', - \ ], - \ [ - \ 'def foo():', - \ ' pass', - \ '', - \ 'middle line', - \ '', - \ 'def bar():', - \ ' pass', - \ '', - \ 'const baz = () => undefined', - \ ], - \ ], - \ ale#hover#ParseLSPResult(join([ - \ '```python', - \ 'def foo():', - \ ' pass', - \ '```', - \ 'middle line', - \ '```python', - \ 'def bar():', - \ ' pass', - \ '```', - \ '```typescript', - \ 'const baz = () => undefined', - \ '```', - \ ], "\n")) - -Execute(Multiple strings with fences should be handled): - AssertEqual - \ [ - \ [ - \ 'unlet! b:current_syntax', - \ 'syntax include @ALE_hover_python syntax/python.vim', - \ 'unlet! b:current_syntax', - \ 'syntax include @ALE_hover_typescript syntax/typescript.vim', - \ 'syntax region ALE_hover_1 start=/\%1l/ end=/\%3l/ contains=@ALE_hover_python', - \ 'syntax region ALE_hover_2 start=/\%5l/ end=/\%8l/ contains=@ALE_hover_python', - \ 'syntax region ALE_hover_3 start=/\%8l/ end=/\%10l/ contains=@ALE_hover_typescript', - \ ], - \ [ - \ 'def foo():', - \ ' pass', - \ '', - \ 'middle line', - \ '', - \ 'def bar():', - \ ' pass', - \ '', - \ 'const baz = () => undefined', - \ ], - \ ], - \ ale#hover#ParseLSPResult([ - \ join([ - \ '```python', - \ 'def foo():', - \ ' pass', - \ '```', - \ ], "\n"), - \ join([ - \ 'middle line', - \ '```python', - \ 'def bar():', - \ ' pass', - \ '```', - \ '```typescript', - \ 'const baz = () => undefined', - \ '```', - \ ], "\n"), - \ ]) - -Execute(Objects with kinds should be handled): - AssertEqual - \ [ - \ [ - \ 'unlet! b:current_syntax', - \ 'syntax include @ALE_hover_python syntax/python.vim', - \ 'syntax region ALE_hover_1 start=/\%1l/ end=/\%3l/ contains=@ALE_hover_python', - \ ], - \ [ - \ 'def foo():', - \ ' pass', - \ '', - \ '```typescript', - \ 'const baz = () => undefined', - \ '```', - \ ], - \ ], - \ ale#hover#ParseLSPResult([ - \ { - \ 'kind': 'markdown', - \ 'value': join([ - \ '```python', - \ 'def foo():', - \ ' pass', - \ '```', - \ ], "\n"), - \ }, - \ { - \ 'kind': 'plaintext', - \ 'value': join([ - \ '```typescript', - \ 'const baz = () => undefined', - \ '```', - \ ], "\n"), - \ }, - \ ]) - -Execute(Simple markdown formatting should be handled): - AssertEqual - \ [ - \ [ - \ 'unlet! b:current_syntax', - \ 'syntax include @ALE_hover_python syntax/python.vim', - \ 'syntax region ALE_hover_1 start=/\%1l/ end=/\%3l/ contains=@ALE_hover_python', - \ ], - \ [ - \ 'def foo():', - \ ' pass', - \ '', - \ 'formatted _ line _', - \ ], - \ ], - \ ale#hover#ParseLSPResult(join([ - \ '```python', - \ 'def foo():', - \ ' pass', - \ '```', - \ 'formatted \_ line \_', - \ ], "\n")) diff --git a/dotfiles/.vim/plugged/ale/test/test_ignoring_linters.vader b/dotfiles/.vim/plugged/ale/test/test_ignoring_linters.vader deleted file mode 100644 index f97a0cf6..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_ignoring_linters.vader +++ /dev/null @@ -1,403 +0,0 @@ -Before: - Save g:ale_disable_lsp - -After: - Restore - - unlet! b:ale_disable_lsp - -Execute(GetList should ignore some invalid values): - AssertEqual [], ale#engine#ignore#GetList('', 'foo') - AssertEqual [], ale#engine#ignore#GetList('', 0) - AssertEqual [], ale#engine#ignore#GetList('', v:null) - -Execute(GetList should handle Lists): - AssertEqual ['foo', 'bar'], ale#engine#ignore#GetList('', ['foo', 'bar']) - -Execute(GetList should handle Dictionaries): - AssertEqual - \ ['linter1', 'linter2'], - \ uniq(sort(ale#engine#ignore#GetList('x.y.z', { - \ 'x': ['linter1'], - \ 'abc': ['linter3'], - \ 'z': ['linter2'], - \ }))) - -Execute(Exclude should ignore some invalid values): - AssertEqual - \ [ - \ {'name': 'linter1', 'aliases': []}, - \ {'name': 'linter2', 'aliases': ['alias1']}, - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ ale#engine#ignore#Exclude( - \ 'foo.bar', - \ [ - \ {'name': 'linter1', 'aliases': []}, - \ {'name': 'linter2', 'aliases': ['alias1']}, - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ 'foo', - \ 0, - \ ) - AssertEqual - \ [ - \ {'name': 'linter1', 'aliases': []}, - \ {'name': 'linter2', 'aliases': ['alias1']}, - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ ale#engine#ignore#Exclude( - \ 'foo.bar', - \ [ - \ {'name': 'linter1', 'aliases': []}, - \ {'name': 'linter2', 'aliases': ['alias1']}, - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ 0, - \ 0, - \ ) - AssertEqual - \ [ - \ {'name': 'linter1', 'aliases': []}, - \ {'name': 'linter2', 'aliases': ['alias1']}, - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ ale#engine#ignore#Exclude( - \ 'foo.bar', - \ [ - \ {'name': 'linter1', 'aliases': []}, - \ {'name': 'linter2', 'aliases': ['alias1']}, - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ v:null, - \ 0, - \ ) - -Execute(Exclude should handle Lists): - AssertEqual - \ [ - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ ale#engine#ignore#Exclude( - \ 'foo.bar', - \ [ - \ {'name': 'linter1', 'aliases': []}, - \ {'name': 'linter2', 'aliases': ['alias1']}, - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ ['linter1', 'alias1'], - \ 0, - \ ) - -Execute(Exclude should handle Dictionaries): - AssertEqual - \ [ - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ ale#engine#ignore#Exclude( - \ 'foo.bar', - \ [ - \ {'name': 'linter1', 'aliases': []}, - \ {'name': 'linter2', 'aliases': ['alias1']}, - \ {'name': 'linter3', 'aliases': []}, - \ ], - \ {'foo': ['linter1'], 'bar': ['alias1']}, - \ 0, - \ ) - -Execute(Exclude should filter LSP linters when g:ale_disable_lsp is set to 1): - AssertEqual - \ [ - \ {'name': 'linter1', 'aliases': [], 'lsp': ''}, - \ {'name': 'linter2', 'aliases': []}, - \ ], - \ ale#engine#ignore#Exclude( - \ 'foo', - \ [ - \ {'name': 'linter1', 'aliases': [], 'lsp': ''}, - \ {'name': 'linter2', 'aliases': []}, - \ {'name': 'linter3', 'aliases': [], 'lsp': 'stdio'}, - \ ], - \ [], - \ 1, - \ ) - -Execute(Exclude should filter LSP linters when b:ale_disable_lsp is set to 1): - AssertEqual - \ [ - \ {'name': 'linter1', 'aliases': [], 'lsp': ''}, - \ {'name': 'linter2', 'aliases': []}, - \ ], - \ ale#engine#ignore#Exclude( - \ 'foo', - \ [ - \ {'name': 'linter1', 'aliases': [], 'lsp': ''}, - \ {'name': 'linter2', 'aliases': []}, - \ {'name': 'linter3', 'aliases': [], 'lsp': 'stdio'}, - \ ], - \ [], - \ 1, - \ ) - -Before: - Save g:ale_linters_ignore - Save g:ale_buffer_info - Save g:ale_disable_lsp - - let g:ale_disable_lsp = 0 - - let g:linters = [] - let g:loclist = [] - let g:run_linters_called = 0 - - runtime autoload/ale/engine.vim - - " Mock the engine function so we can set it up. - function! ale#engine#RunLinters(buffer, linters, should_lint_file) abort - let g:linters = a:linters - let g:run_linters_called = 1 - endfunction - - function! ale#engine#HandleLoclist(linter_name, buffer, loclist, from_other_source) abort - let g:loclist = a:loclist - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'true', - \ 'command': has('win32') ? 'echo' : 'true', - \}) - call ale#test#SetDirectory('/testplugin/test') - -After: - Restore - - unlet! b:ale_linted - unlet! b:ale_linters_ignore - unlet! b:ale_quitting - unlet! b:ale_save_event_fired - unlet! b:ale_disable_lsp - unlet! g:linters - unlet! g:loclist - unlet! g:lsp_message - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - call ale#lsp_linter#ClearLSPData() - runtime autoload/ale/engine.vim - -Given foobar(An empty file): -Execute(Global ignore lists should be applied for linters): - " We have to set up buffer info so RunLinters is called. - let g:ale_buffer_info = {bufnr(''): {}} - - ALELint - Assert g:run_linters_called, "The mock callback wasn't called" - AssertEqual ['testlinter'], map(g:linters, 'v:val.name') - - let g:ale_linters_ignore = ['testlinter'] - ALELint - AssertEqual [], g:linters - -Execute(buffer ignore lists should be applied for linters): - " We have to set up buffer info so RunLinters is called. - let g:ale_buffer_info = {bufnr(''): {}} - - ALELint - Assert g:run_linters_called, "The mock callback wasn't called" - AssertEqual ['testlinter'], map(g:linters, 'v:val.name') - - let b:ale_linters_ignore = ['testlinter'] - ALELint - AssertEqual [], g:linters - -Execute(Buffer ignore lists should be applied for tsserver): - call ale#test#SetFilename('filename.ts') - call ale#engine#InitBufferInfo(bufnr('')) - - let g:lsp_message = { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'syntaxDiag', - \ 'body': { - \ 'file': g:dir . '/filename.ts', - \ 'diagnostics':[ - \ { - \ 'start': { - \ 'line':2, - \ 'offset':14, - \ }, - \ 'end': { - \ 'line':2, - \ 'offset':15, - \ }, - \ 'text': ''','' expected.', - \ "code":1005 - \ }, - \ ], - \ }, - \} - - call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) - - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 14, - \ 'nr': 1005, - \ 'code': '1005', - \ 'type': 'E', - \ 'end_col': 14, - \ 'end_lnum': 2, - \ 'text': ''','' expected.', - \ }, - \ ], - \ g:loclist - - let g:loclist = [] - let b:ale_linters_ignore = ['tsserver'] - call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) - - AssertEqual [], g:loclist - -Execute(Buffer ignore lists should be applied for LSP linters): - call ale#test#SetFilename('filename.py') - call ale#engine#InitBufferInfo(bufnr('')) - call ale#lsp_linter#SetLSPLinterMap({'347': 'lsplinter'}) - - let g:lsp_message = { - \ 'jsonrpc': '2.0', - \ 'method': 'textDocument/publishDiagnostics', - \ 'params': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'diagnostics': [ - \ { - \ 'severity': 1, - \ 'message': 'x', - \ 'range': { - \ 'start': {'line': 0, 'character': 9}, - \ 'end': {'line': 0, 'character': 9}, - \ }, - \ } - \ ], - \ }, - \} - - call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'type': 'E', - \ 'end_col': 9, - \ 'end_lnum': 1, - \ 'text': 'x', - \ } - \ ], - \ g:loclist - - let b:ale_linters_ignore = ['lsplinter'] - let g:loclist = [] - - call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) - - AssertEqual [], g:loclist - -Execute(ale_disable_lsp should be applied for tsserver): - call ale#test#SetFilename('filename.ts') - call ale#engine#InitBufferInfo(bufnr('')) - - let g:lsp_message = { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': 'syntaxDiag', - \ 'body': { - \ 'file': g:dir . '/filename.ts', - \ 'diagnostics':[ - \ { - \ 'start': { - \ 'line':2, - \ 'offset':14, - \ }, - \ 'end': { - \ 'line':2, - \ 'offset':15, - \ }, - \ 'text': ''','' expected.', - \ "code":1005 - \ }, - \ ], - \ }, - \} - - call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) - - AssertEqual - \ [ - \ { - \ 'lnum': 2, - \ 'col': 14, - \ 'nr': 1005, - \ 'code': '1005', - \ 'type': 'E', - \ 'end_col': 14, - \ 'end_lnum': 2, - \ 'text': ''','' expected.', - \ }, - \ ], - \ g:loclist - - let g:loclist = [] - let b:ale_disable_lsp = 1 - call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) - - AssertEqual [], g:loclist - -Execute(ale_disable_lsp should be applied for LSP linters): - call ale#test#SetFilename('filename.py') - call ale#engine#InitBufferInfo(bufnr('')) - call ale#lsp_linter#SetLSPLinterMap({'347': 'lsplinter'}) - - let g:lsp_message = { - \ 'jsonrpc': '2.0', - \ 'method': 'textDocument/publishDiagnostics', - \ 'params': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'diagnostics': [ - \ { - \ 'severity': 1, - \ 'message': 'x', - \ 'range': { - \ 'start': {'line': 0, 'character': 9}, - \ 'end': {'line': 0, 'character': 9}, - \ }, - \ } - \ ], - \ }, - \} - - call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 10, - \ 'type': 'E', - \ 'end_col': 9, - \ 'end_lnum': 1, - \ 'text': 'x', - \ } - \ ], - \ g:loclist - - let b:ale_disable_lsp = 1 - let g:loclist = [] - - call ale#lsp_linter#HandleLSPResponse(347, g:lsp_message) - - AssertEqual [], g:loclist diff --git a/dotfiles/.vim/plugged/ale/test/test_jq_linter.vader b/dotfiles/.vim/plugged/ale/test/test_jq_linter.vader deleted file mode 100644 index cbe23b96..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_jq_linter.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - runtime ale_linters/json/jq.vim - -After: - call ale#linter#Reset() - -Execute (Should parse error correctly): - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'col': 9, - \ 'text': 'Expected another array element', - \ } - \ ], - \ ale_linters#json#jq#Handle(0, [ - \ 'parse error: Expected another array element at line 1, column 9' - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/test_jsonlint_executable_detection.vader b/dotfiles/.vim/plugged/ale/test/test_jsonlint_executable_detection.vader deleted file mode 100644 index 60bc6d75..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_jsonlint_executable_detection.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - - runtime ale_linters/json/jsonlint.vim - -After: - let g:ale_json_jsonlint_executable = 'jsonlint' - let g:ale_json_jsonlint_use_global = 0 - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(local executable should be detected correctly): - call ale#test#SetFilename('test-files/jsonlint/app/src/app.json') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/jsonlint/app/node_modules/.bin/jsonlint'), - \ ale_linters#json#jsonlint#GetExecutable(bufnr('')) - -Execute(recursively executable should be detected correctly): - call ale#test#SetFilename('test-files/jsonlint/app-without-jsonlint/src/app.json') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/jsonlint/node_modules/jsonlint/lib/cli.js'), - \ ale_linters#json#jsonlint#GetExecutable(bufnr('')) - -Execute(use_global should override project executable): - let g:ale_json_jsonlint_use_global = 1 - - call ale#test#SetFilename('test-files/jsonlint/app/src/app.json') - - AssertEqual - \ 'jsonlint', - \ ale_linters#json#jsonlint#GetExecutable(bufnr('')) - -Execute(manually defined should override default executable): - let g:ale_json_jsonlint_use_global = 1 - let g:ale_json_jsonlint_executable = 'custom_jsonlint' - - call ale#test#SetFilename('test-files/jsonlint/app/src/app.json') - - AssertEqual - \ 'custom_jsonlint', - \ ale_linters#json#jsonlint#GetExecutable(bufnr('')) - diff --git a/dotfiles/.vim/plugged/ale/test/test_line_join.vader b/dotfiles/.vim/plugged/ale/test/test_line_join.vader deleted file mode 100644 index 9356a2b7..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_line_join.vader +++ /dev/null @@ -1,84 +0,0 @@ -Before: - let g:lines = [] - let g:data = '' - - function! LineCallback(job_id, line) abort - call add(g:lines, a:line) - endfunction - - function! RawCallback(job_id, some_data) abort - let g:data .= a:some_data - endfunction - -After: - unlet! g:last_line - unlet! g:lines - unlet! g:data - delfunction LineCallback - delfunction RawCallback - -Execute (ALE should handle empty Lists for the lines): - let g:last_line = ale#util#JoinNeovimOutput(1, '', [], 'nl', function('LineCallback')) - - AssertEqual [], g:lines - AssertEqual '', g:last_line - -Execute (ALE should pass on full lines for NeoVim): - let g:last_line = ale#util#JoinNeovimOutput(1, '', ['x', 'y', ''], 'nl', function('LineCallback')) - - AssertEqual ['x', 'y'], g:lines - AssertEqual '', g:last_line - -Execute (ALE should pass on a single long line): - let g:last_line = ale#util#JoinNeovimOutput(1, '', ['x'], 'nl', function('LineCallback')) - - AssertEqual [], g:lines - AssertEqual 'x', g:last_line - -Execute (ALE should handle just a single line of output): - let g:last_line = ale#util#JoinNeovimOutput(1, '', ['x', ''], 'nl', function('LineCallback')) - - AssertEqual ['x'], g:lines - AssertEqual '', g:last_line - -Execute (ALE should join two incomplete pieces of large lines together): - let g:last_line = ale#util#JoinNeovimOutput(1, 'x', ['y'], 'nl', function('LineCallback')) - - AssertEqual [], g:lines - AssertEqual 'xy', g:last_line - -Execute (ALE join incomplete lines, and set new ones): - let g:last_line = ale#util#JoinNeovimOutput(1, 'x', ['y', 'z', 'a'], 'nl', function('LineCallback')) - - AssertEqual ['xy', 'z'], g:lines - AssertEqual 'a', g:last_line - -Execute (ALE join incomplete lines, and set new ones, with two elements): - let g:last_line = ale#util#JoinNeovimOutput(1, 'x', ['y', 'z'], 'nl', function('LineCallback')) - - AssertEqual ['xy'], g:lines - AssertEqual 'z', g:last_line - -Execute (ALE should pass on full lines for NeoVim for raw data): - let g:last_line = ale#util#JoinNeovimOutput(1, '', ['x', 'y', ''], 'raw', function('RawCallback')) - - AssertEqual "x\ny\n", g:data - AssertEqual '', g:last_line - -Execute (ALE should pass on a single long line): - let g:last_line = ale#util#JoinNeovimOutput(1, '', ['x'], 'raw', function('RawCallback')) - - AssertEqual 'x', g:data - AssertEqual '', g:last_line - -Execute (ALE should handle just a single line of output): - let g:last_line = ale#util#JoinNeovimOutput(1, '', ['x', ''], 'raw', function('RawCallback')) - - AssertEqual "x\n", g:data - AssertEqual '', g:last_line - -Execute (ALE should pass on two lines and one incomplete one): - let g:last_line = ale#util#JoinNeovimOutput(1, '', ['y', 'z', 'a'], 'raw', function('RawCallback')) - - AssertEqual "y\nz\na", g:data - AssertEqual '', g:last_line diff --git a/dotfiles/.vim/plugged/ale/test/test_lint_file_linters.vader b/dotfiles/.vim/plugged/ale/test/test_lint_file_linters.vader deleted file mode 100644 index 682e4130..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_lint_file_linters.vader +++ /dev/null @@ -1,317 +0,0 @@ -Before: - Save g:ale_fix_on_save - Save g:ale_enabled - Save g:ale_run_synchronously - Save g:ale_set_lists_synchronously - Save g:ale_buffer_info - Save g:ale_linters - - let g:ale_buffer_info = {} - let g:ale_run_synchronously = 1 - unlet! g:ale_run_synchronously_callbacks - let g:ale_set_lists_synchronously = 1 - let b:ale_save_event_fired = 0 - - let g:buffer_result = [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'buffer error', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'text': 'buffer warning', - \ 'type': 'W', - \ }, - \] - - function! LintFileCallback(buffer, output) - return [ - \ { - \ 'lnum': 1, - \ 'col': 3, - \ 'text': 'file warning', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 3, - \ 'text': 'file error', - \ 'type': 'E', - \ }, - \] - endfunction - - function! BufferCallback(buffer, output) - return deepcopy(g:buffer_result) - endfunction - - function! GetSimplerLoclist() - let l:loclist = [] - - for l:item in ale#test#GetLoclistWithoutNewerKeys() - call add(l:loclist, { - \ 'lnum': l:item.lnum, - \ 'col': l:item.col, - \ 'text': l:item.text, - \ 'type': l:item.type, - \}) - endfor - - return l:loclist - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'lint_file_linter', - \ 'callback': 'LintFileCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': 'echo', - \ 'lint_file': 1, - \}) - - call ale#linter#Define('foobar', { - \ 'name': 'buffer_linter', - \ 'callback': 'BufferCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': 'echo', - \ 'read_buffer': 0, - \}) - - let g:filename = tempname() - call writefile([], g:filename) - call ale#test#SetFilename(g:filename) - -After: - if !g:ale_run_synchronously - call ale#engine#Cleanup(bufnr('')) - endif - - Restore - - unlet! g:ale_run_synchronously_callbacks - unlet! b:ale_save_event_fired - unlet! b:ale_enabled - unlet g:buffer_result - let g:ale_buffer_info = {} - call ale#linter#Reset() - call setloclist(0, []) - delfunction LintFileCallback - delfunction BufferCallback - - if filereadable(g:filename) - call delete(g:filename) - endif - - unlet g:filename - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(Running linters without 'lint_file' should run only buffer linters): - call ale#Queue(0) - call ale#test#FlushJobs() - - AssertEqual [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'buffer error', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'text': 'buffer warning', - \ 'type': 'W', - \ }, - \], GetSimplerLoclist() - -Execute(Running linters with 'lint_file' should run all linters): - Assert filereadable(expand('%:p')), 'The file was not readable' - - call ale#Queue(0, 'lint_file') - call ale#test#FlushJobs() - - AssertEqual [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'buffer error', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 3, - \ 'text': 'file warning', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 1, - \ 'text': 'buffer warning', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 3, - \ 'text': 'file error', - \ 'type': 'E', - \ }, - \], GetSimplerLoclist() - -Execute(Linter errors from files should be kept): - Assert filereadable(expand('%:p')), 'The file was not readable' - - call ale#Queue(0, 'lint_file') - call ale#test#FlushJobs() - - " Change the results for the buffer callback. - let g:buffer_result = [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'new buffer error', - \ 'type': 'E', - \ }, - \] - - call ale#Queue(0) - call ale#test#FlushJobs() - - AssertEqual [ - \ { - \ 'lnum': 1, - \ 'col': 1, - \ 'text': 'new buffer error', - \ 'type': 'E', - \ }, - \ { - \ 'lnum': 1, - \ 'col': 3, - \ 'text': 'file warning', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 3, - \ 'text': 'file error', - \ 'type': 'E', - \ }, - \], GetSimplerLoclist() - -Execute(Linter errors from files should be kept when no other linters are run): - let g:ale_linters = {'foobar': ['lint_file_linter']} - Assert filereadable(expand('%:p')), 'The file was not readable' - - call ale#Queue(0, 'lint_file') - call ale#test#FlushJobs() - - AssertEqual [ - \ { - \ 'lnum': 1, - \ 'col': 3, - \ 'text': 'file warning', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 3, - \ 'text': 'file error', - \ 'type': 'E', - \ }, - \], GetSimplerLoclist() - - call ale#Queue(0) - - AssertEqual [ - \ { - \ 'lnum': 1, - \ 'col': 3, - \ 'text': 'file warning', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 3, - \ 'text': 'file error', - \ 'type': 'E', - \ }, - \], GetSimplerLoclist() - -Execute(The Save event should respect the buffer number): - let g:ale_linters = {'foobar': ['lint_file_linter']} - Assert filereadable(expand('%:p')), 'The file was not readable' - - call ale#events#SaveEvent(bufnr('') + 1) - call ale#test#FlushJobs() - - " We shouldn't get any prblems yet. - AssertEqual [], GetSimplerLoclist() - - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - " We should get them now we used the right buffer number. - AssertEqual [ - \ { - \ 'lnum': 1, - \ 'col': 3, - \ 'text': 'file warning', - \ 'type': 'W', - \ }, - \ { - \ 'lnum': 2, - \ 'col': 3, - \ 'text': 'file error', - \ 'type': 'E', - \ }, - \], GetSimplerLoclist() - -Execute(The Save event should set b:ale_save_event_fired to 1): - let g:ale_lint_on_save = 1 - let b:ale_enabled = 1 - - call ale#linter#Reset() - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - " This flag needs to be set so windows can be opened, etc. - AssertEqual 1, b:ale_save_event_fired - -Execute(b:ale_save_event_fired should be set to 0 when results are set): - let b:ale_save_event_fired = 1 - - call ale#engine#SetResults(bufnr(''), []) - call ale#test#FlushJobs() - - AssertEqual 0, b:ale_save_event_fired - -Execute(lint_file linters should stay running after checking without them): - let g:ale_run_synchronously = 0 - - " Run all linters, then just the buffer linters. - call ale#Queue(0, 'lint_file') - call ale#Queue(0) - - " The lint_file linter should still be running. - AssertEqual - \ ['lint_file_linter', 'buffer_linter'], - \ map(copy(g:ale_buffer_info[bufnr('')].active_linter_list), 'v:val.name') - " We should have 1 job for each linter. - AssertEqual - \ 2, - \ len(keys(get(get(ale#command#GetData(), bufnr(''), {}), 'jobs', {}))) - - call ale#test#WaitForJobs(2000) - -Execute(The save event should not lint the buffer when ALE is disabled): - let g:ale_enabled = 0 - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual [], GetSimplerLoclist() - AssertEqual 0, b:ale_save_event_fired diff --git a/dotfiles/.vim/plugged/ale/test/test_lint_on_enter_when_file_changed.vader b/dotfiles/.vim/plugged/ale/test/test_lint_on_enter_when_file_changed.vader deleted file mode 100644 index 9d5e64e2..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_lint_on_enter_when_file_changed.vader +++ /dev/null @@ -1,84 +0,0 @@ -Before: - Save &filetype - Save g:ale_buffer_info - Save g:ale_lint_on_enter - Save g:ale_set_lists_synchronously - - let g:buf = bufnr('') - let g:ale_lint_on_enter = 1 - let g:ale_run_synchronously = 1 - let g:ale_set_lists_synchronously = 1 - - function! TestCallback(buffer, output) - return [{ - \ 'lnum': 1, - \ 'col': 3, - \ 'text': 'baz boz', - \}] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'true', - \ 'command': has('win32') ? 'echo' : 'true', - \}) - -After: - Restore - unlet! g:buf - let g:ale_run_synchronously = 0 - delfunction TestCallback - call ale#linter#Reset() - call setloclist(0, []) - -Execute(The file changed event function should set b:ale_file_changed): - let g:ale_lint_on_enter = 0 - - if has('gui_running') - new - else - e test - endif - - call ale#events#FileChangedEvent(g:buf) - close - - " We should set the flag in the other buffer - AssertEqual 1, getbufvar(g:buf, 'ale_file_changed') - -Execute(The file changed event function should lint the current buffer when it has changed): - set filetype=foobar - call ale#events#FileChangedEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual [{ - \ 'bufnr': bufnr(''), - \ 'lnum': 1, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'baz boz', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \ }], ale#test#GetLoclistWithoutNewerKeys() - -Execute(The buffer should be checked after entering it after the file has changed): - let b:ale_file_changed = 1 - - set filetype=foobar - call ale#events#ReadOrEnterEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual [{ - \ 'bufnr': bufnr(''), - \ 'lnum': 1, - \ 'vcol': 0, - \ 'col': 3, - \ 'text': 'baz boz', - \ 'type': 'E', - \ 'nr': -1, - \ 'pattern': '', - \ 'valid': 1, - \ }], ale#test#GetLoclistWithoutNewerKeys() diff --git a/dotfiles/.vim/plugged/ale/test/test_lint_on_filetype_changed.vader b/dotfiles/.vim/plugged/ale/test/test_lint_on_filetype_changed.vader deleted file mode 100644 index cfc99d58..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_lint_on_filetype_changed.vader +++ /dev/null @@ -1,77 +0,0 @@ -Before: - Save &filetype - Save g:ale_lint_on_filetype_changed - - let g:ale_lint_on_filetype_changed = 1 - let g:queue_calls = [] - - function! ale#Queue(...) - call add(g:queue_calls, a:000) - endfunction - -After: - Restore - - unlet! g:queue_calls - - " Reload the ALE code to load the real function again. - runtime autoload/ale.vim - - unlet! b:ale_original_filetype - -Execute(The original filetype should be set on BufEnter): - let &filetype = 'foobar' - - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 'foobar', b:ale_original_filetype - - let &filetype = 'bazboz' - - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 'bazboz', b:ale_original_filetype - -Execute(Linting should not be queued when the filetype is the same): - let b:ale_original_filetype = 'foobar' - let g:queue_calls = [] - - call ale#events#FileTypeEvent(bufnr(''), 'foobar') - - AssertEqual [], g:queue_calls - -Execute(Linting should be queued when the filetype changes): - let b:ale_original_filetype = 'foobar' - let g:queue_calls = [] - - call ale#events#FileTypeEvent(bufnr(''), 'bazboz') - - AssertEqual [[300, 'lint_file', bufnr('')]], g:queue_calls - " The original filetype should be updated, so we don't trigger linting - " by setting a filetype equal to what it already is. - AssertEqual 'bazboz', b:ale_original_filetype - -Execute(Linting should be done when the original filetype was blank): - let b:ale_original_filetype = '' - - call ale#events#FileTypeEvent(bufnr(''), 'bazboz') - - AssertEqual [[300, 'lint_file', bufnr('')]], g:queue_calls - AssertEqual 'bazboz', b:ale_original_filetype - -Execute(Linting should not be done when the setting is off): - let b:ale_original_filetype = 'foobar' - let g:ale_lint_on_filetype_changed = 0 - - call ale#events#FileTypeEvent(bufnr(''), 'bazboz') - - AssertEqual [], g:queue_calls - " We should still update the old filetype - AssertEqual 'bazboz', b:ale_original_filetype - -Execute(Linting should be done when the original filetype was not set): - unlet! b:ale_original_filetype - - call ale#events#FileTypeEvent(bufnr(''), 'bazboz') - - AssertEqual [], g:queue_calls diff --git a/dotfiles/.vim/plugged/ale/test/test_linter_defintion_processing.vader b/dotfiles/.vim/plugged/ale/test/test_linter_defintion_processing.vader deleted file mode 100644 index 4c096a5e..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_linter_defintion_processing.vader +++ /dev/null @@ -1,501 +0,0 @@ -Before: - Save g:ale_root - Save b:ale_root - - let g:ale_root = {} - unlet! b:ale_root - - let g:linter = {} - -After: - unlet g:linter - -Execute (PreProcess should throw when the linter object is not a Dictionary): - AssertThrows call ale#linter#PreProcess('testft', '') - AssertEqual 'The linter object must be a Dictionary', g:vader_exception - -Execute (PreProcess should throw when there is no name): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': 'echo', - \}) - AssertEqual '`name` must be defined to name the linter', g:vader_exception - -Execute (PreProcess should throw when there is no callback): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'executable': 'echo', - \ 'command': 'echo', - \}) - AssertEqual '`callback` must be defined with a callback to accept output', g:vader_exception - -Execute (PreProcess should throw when then callback is not a function): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 1, - \ 'executable': 'echo', - \ 'command': 'echo', - \}) - AssertEqual '`callback` must be defined with a callback to accept output', g:vader_exception - -Execute (PreProcess should throw when there is no executable): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'command': 'echo', - \}) - AssertEqual '`executable` must be defined', g:vader_exception - -Execute (PreProcess should throw when executable is not a string): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 123, - \ 'command': 'echo', - \}) - AssertEqual '`executable` must be a String or Function if defined', g:vader_exception - -Execute (PreProcess should allow executable to be a callback): - call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': function('type'), - \ 'command': 'echo', - \}) - -Execute (PreProcess should throw when there is no command): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \}) - AssertEqual '`command` must be defined', g:vader_exception - -Execute (PreProcess should throw when command is not a string): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': [], - \}) - AssertEqual '`command` must be a String or Function if defined', g:vader_exception - -Execute (PreProcess should allow command to be a callback): - call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': function('type'), - \}) - -Execute (PreProcess should throw when cwd is not a string): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'cwd': [], - \ 'command': 'echo', - \}) - AssertEqual '`cwd` must be a String or Function if defined', g:vader_exception - -Execute (PreProcess should allow cwd to be a callback): - call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'cwd': function('type'), - \ 'command': 'echo', - \}) - -Execute (PreProcess should allow cwd to be a string): - call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'cwd': '/foo/bar', - \ 'command': 'echo', - \}) - -Execute (PreProcess should when the output stream isn't a valid string): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': 'echo', - \ 'output_stream': 'xxx', - \}) - AssertEqual "`output_stream` must be 'stdout', 'stderr', or 'both'", g:vader_exception - -Execute (PreProcess should not throw when everything is correct): - call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': 'echo', - \}) - -Execute (PreProcess should accept an stdout output_stream): - call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': 'echo', - \ 'output_stream': 'stdout', - \}) - -Execute (PreProcess should accept an stderr output_stream): - call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': 'echo', - \ 'output_stream': 'stderr', - \}) - -Execute (PreProcess should accept a 'both' output_stream): - call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': 'echo', - \ 'output_stream': 'both', - \}) - -Execute(PreProcess should process the read_buffer option correctly): - let g:linter = { - \ 'name': 'x', - \ 'callback': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \ 'read_buffer': '0', - \} - - AssertThrows call ale#linter#PreProcess('testft', g:linter) - AssertEqual '`read_buffer` must be `0` or `1`', g:vader_exception - - let g:linter.read_buffer = 0 - - call ale#linter#PreProcess('testft', g:linter) - - let g:linter.read_buffer = 1 - - call ale#linter#PreProcess('testft', g:linter) - -Execute(PreProcess should set a default value for read_buffer): - let g:linter = { - \ 'name': 'x', - \ 'callback': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \} - - AssertEqual 1, ale#linter#PreProcess('testft', g:linter).read_buffer - -Execute(PreProcess should process the lint_file option correctly): - let g:linter = { - \ 'name': 'x', - \ 'callback': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \ 'lint_file': 'x', - \} - - AssertThrows call ale#linter#PreProcess('testft', g:linter) - AssertEqual '`lint_file` must be `0`, `1`, or a Function', g:vader_exception - - let g:linter.lint_file = 0 - - AssertEqual 0, ale#linter#PreProcess('testft', g:linter).lint_file - " The default for read_buffer should be 1 when lint_file is 0 - AssertEqual 1, ale#linter#PreProcess('testft', g:linter).read_buffer - - let g:linter.lint_file = 1 - - AssertEqual 1, ale#linter#PreProcess('testft', g:linter).lint_file - " The default for read_buffer should still be 1 - AssertEqual 1, ale#linter#PreProcess('testft', g:linter).read_buffer - - let g:linter.read_buffer = 1 - - " We should be able to set `read_buffer` and `lint_file` at the same time. - AssertEqual 1, ale#linter#PreProcess('testft', g:linter).read_buffer - - let g:linter.lint_file = function('type') - - Assert type(ale#linter#PreProcess('testft', g:linter).lint_file) is v:t_func - -Execute(PreProcess should set a default value for lint_file): - let g:linter = { - \ 'name': 'x', - \ 'callback': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \} - - AssertEqual 0, ale#linter#PreProcess('testft', g:linter).lint_file - -Execute(PreProcess should set a default value for aliases): - let g:linter = { - \ 'name': 'x', - \ 'callback': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \} - - AssertEqual [], ale#linter#PreProcess('testft', g:linter).aliases - -Execute(PreProcess should complain about invalid `aliases` values): - let g:linter = { - \ 'name': 'x', - \ 'callback': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \ 'aliases': 'foo', - \} - - AssertThrows call ale#linter#PreProcess('testft', g:linter) - AssertEqual '`aliases` must be a List of String values', g:vader_exception - - let g:linter.aliases = [1] - - AssertThrows call ale#linter#PreProcess('testft', g:linter) - AssertEqual '`aliases` must be a List of String values', g:vader_exception - -Execute(PreProcess should accept `aliases` lists): - let g:linter = { - \ 'name': 'x', - \ 'callback': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \ 'aliases': [], - \} - - AssertEqual [], ale#linter#PreProcess('testft', g:linter).aliases - - let g:linter.aliases = ['foo', 'bar'] - - AssertEqual ['foo', 'bar'], ale#linter#PreProcess('testft', g:linter).aliases - -Execute(PreProcess should accept tsserver LSP configuration): - let g:linter = { - \ 'name': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \ 'lsp': 'tsserver', - \ 'language': 'x', - \ 'project_root': 'x', - \} - - AssertEqual 'tsserver', ale#linter#PreProcess('testft', g:linter).lsp - -Execute(PreProcess should accept stdio LSP configuration): - let g:linter = { - \ 'name': 'x', - \ 'executable': 'x', - \ 'command': 'x', - \ 'lsp': 'stdio', - \ 'language': 'x', - \ 'project_root': 'x', - \} - - AssertEqual 'stdio', ale#linter#PreProcess('testft', g:linter).lsp - -Execute(PreProcess should accept LSP server configurations): - let g:linter = { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': 'foobar', - \ 'project_root': 'x', - \} - - AssertEqual 'socket', ale#linter#PreProcess('testft', g:linter).lsp - -Execute(PreProcess should accept let you specify the `language` as a Function): - let g:linter = { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': {-> 'foobar'}, - \ 'project_root': 'x', - \} - - AssertEqual 'foobar', ale#linter#PreProcess('testft', g:linter).language(bufnr('')) - -Execute(PreProcess should complain about invalid language values): - let g:linter = { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': 0, - \ 'project_root': 'x', - \} - - AssertThrows call ale#linter#PreProcess('testft', g:linter) - AssertEqual '`language` must be a String or Function if defined', g:vader_exception - -Execute(PreProcess should use the filetype as the language string by default): - let g:linter = { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'project_root': 'x', - \} - - AssertEqual 'testft', ale#linter#PreProcess('testft', g:linter).language - -Execute(PreProcess should require an `address` for LSP socket configurations): - let g:linter = { - \ 'name': 'x', - \ 'lsp': 'socket', - \} - - AssertThrows call ale#linter#PreProcess('testft', g:linter) - AssertEqual '`address` must be defined for getting the LSP address', g:vader_exception - -Execute(PreProcess should complain about `address` for non-LSP linters): - let g:linter = { - \ 'name': 'x', - \ 'callback': 'SomeFunction', - \ 'executable': 'echo', - \ 'command': 'echo', - \ 'address': 'X', - \} - - AssertThrows call ale#linter#PreProcess('testft', g:linter) - AssertEqual '`address` cannot be used when lsp != ''socket''', g:vader_exception - -Execute(PreProcess accept `address` as a String): - let g:linter = ale#linter#PreProcess('testft', { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'foo:123', - \ 'language': 'x', - \ 'project_root': 'x', - \}) - - AssertEqual 'foo:123', ale#linter#GetAddress(0, g:linter) - -Execute(PreProcess accept address as a Function): - let g:linter = ale#linter#PreProcess('testft', { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': {-> 'foo:123'}, - \ 'language': 'x', - \ 'project_root': 'x', - \}) - - AssertEqual 'foo:123', ale#linter#GetAddress(0, g:linter) - -Execute(PreProcess should complain about invalid address values): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 0, - \ 'language': 'x', - \ 'project_root': 'x', - \}) - AssertEqual '`address` must be a String or Function if defined', g:vader_exception - -Execute(PreProcess should allow the `project_root` to be set as a String): - let g:linter = ale#linter#PreProcess('testft', { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'foo:123', - \ 'language': 'x', - \ 'project_root': '/foo/bar', - \}) - - AssertEqual '/foo/bar', ale#lsp_linter#FindProjectRoot(0, g:linter) - -Execute(PreProcess should `project_root` be set as a Function): - let g:linter = ale#linter#PreProcess('testft', { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'foo:123', - \ 'language': 'x', - \ 'project_root': {-> '/foo/bar'}, - \}) - - AssertEqual '/foo/bar', ale#lsp_linter#FindProjectRoot(0, g:linter) - -Execute(PreProcess should complain when `project_root` is invalid): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'foo:123', - \ 'language': 'x', - \ 'project_root': 0, - \}) - AssertEqual '`project_root` must be a String or Function', g:vader_exception - -Execute(PreProcess should throw when `initialization_options` is not a Dictionary or callback): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': 'x', - \ 'project_root': 'x', - \ 'initialization_options': 0, - \}) - AssertEqual '`initialization_options` must be a Dictionary or Function if defined', g:vader_exception - -Execute(PreProcess should accept `initialization_options` as a Dictionary): - let g:linter = ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': 'x', - \ 'project_root': 'x', - \ 'initialization_options': {'foo': v:true}, - \}) - - AssertEqual {'foo': v:true}, ale#lsp_linter#GetOptions(0, g:linter) - -Execute(PreProcess should accept `initialization_options` as a Function): - let g:linter = ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': 'x', - \ 'project_root': 'x', - \ 'initialization_options': {-> {'foo': v:true}}, - \}) - - AssertEqual {'foo': v:true}, ale#lsp_linter#GetOptions(0, g:linter) - -Execute(PreProcess should accept `lsp_config` as a Dictionary): - let g:linter = { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': 'x', - \ 'project_root': 'x', - \ 'lsp_config': {'foo': 'bar'}, - \} - - AssertEqual {'foo': 'bar'}, ale#lsp_linter#GetConfig(0, g:linter) - -Execute(PreProcess should accept `lsp_config` as a Function): - let g:linter = { - \ 'name': 'x', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': 'x', - \ 'project_root': 'x', - \ 'lsp_config': {-> {'foo': 'bar'}}, - \} - - AssertEqual {'foo': 'bar'}, ale#lsp_linter#GetConfig(0, g:linter) - -Execute(PreProcess should throw when `lsp_config` is not a Dictionary or Function): - AssertThrows call ale#linter#PreProcess('testft', { - \ 'name': 'foo', - \ 'lsp': 'socket', - \ 'address': 'X', - \ 'language': 'x', - \ 'project_root': 'x', - \ 'lsp_config': 'x', - \}) - AssertEqual '`lsp_config` must be a Dictionary or Function if defined', g:vader_exception diff --git a/dotfiles/.vim/plugged/ale/test/test_linter_retrieval.vader b/dotfiles/.vim/plugged/ale/test/test_linter_retrieval.vader deleted file mode 100644 index 88885b71..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_linter_retrieval.vader +++ /dev/null @@ -1,190 +0,0 @@ -Before: - Save g:ale_linters - Save g:ale_linter_aliases - - let g:testlinter1 = {'name': 'testlinter1', 'executable': 'testlinter1', 'command': 'testlinter1', 'callback': 'testCB1', 'output_stream': 'stdout', 'read_buffer': 1, 'lint_file': 0, 'aliases': [], 'lsp': ''} - let g:testlinter2 = {'name': 'testlinter2', 'executable': 'testlinter2', 'command': 'testlinter2', 'callback': 'testCB2', 'output_stream': 'stdout', 'read_buffer': 0, 'lint_file': 1, 'aliases': [], 'lsp': ''} - call ale#linter#Reset() - call ale#linter#PreventLoading('testft') - call ale#linter#PreventLoading('javascript') - call ale#linter#PreventLoading('typescript') - -After: - Restore - - unlet! g:testlinter1 - unlet! g:testlinter2 - unlet! b:ale_linters - unlet! b:ale_linter_aliases - call ale#linter#Reset() - -Execute (You should be able to get a defined linter): - call ale#linter#Define('testft', g:testlinter1) - AssertEqual [g:testlinter1], ale#linter#Get('testft') - -Execute (You should be able get select a single linter): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - let g:ale_linters = {'testft': ['testlinter1']} - - AssertEqual [g:testlinter1], ale#linter#Get('testft') - -Execute (You should be able to select a linter by an alias): - let g:testlinter1.aliases = ['foo', 'linter1alias'] - - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - let g:ale_linters = {'testft': ['linter1alias']} - - AssertEqual [g:testlinter1], ale#linter#Get('testft') - -Execute (You should be able to select linters with a buffer option): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - let g:ale_linters = {'testft': ['testlinter1', 'testlinter2']} - let b:ale_linters = {'testft': ['testlinter1']} - - AssertEqual [g:testlinter1], ale#linter#Get('testft') - -Execute (b:ale_linters should work when set to a List): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - let g:ale_linters = {'testft': ['testlinter1', 'testlinter2']} - let b:ale_linters = ['testlinter1'] - - AssertEqual [g:testlinter1], ale#linter#Get('testft') - -Execute (b:ale_linters should disable all linters when set to an empty List): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - let g:ale_linters = {'testft': ['testlinter1', 'testlinter2']} - let b:ale_linters = [] - - AssertEqual [], ale#linter#Get('testft') - -Execute (b:ale_linters should enable all available linters when set to 'all'): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - let g:ale_linters = {'testft': ['testlinter1']} - let b:ale_linters = 'all' - - AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft') - -Execute (Buffer settings shouldn't completely replace global settings): - call ale#linter#Define('testft', g:testlinter1) - call ale#linter#Define('testft', g:testlinter2) - let g:ale_linters = {'testft': ['testlinter1']} - let b:ale_linters = {'testft2': ['testlinter1', 'testlinter2']} - - AssertEqual [g:testlinter1], ale#linter#Get('testft') - -Execute (You should be able to alias linters from one filetype to another): - call ale#linter#Define('testft1', g:testlinter1) - let g:ale_linter_aliases = {'testft2': 'testft1'} - - AssertEqual [g:testlinter1], ale#linter#Get('testft2') - -Execute (You should be able to filter aliased linters): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft1', g:testlinter2) - let g:ale_linters = {'testft1': ['testlinter1'], 'testft2': ['testlinter2']} - let g:ale_linter_aliases = {'testft2': 'testft1'} - - AssertEqual [g:testlinter1], ale#linter#Get('testft1') - AssertEqual [g:testlinter2], ale#linter#Get('testft2') - -Execute (Dot-separated filetypes should be handled correctly): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - - AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1.testft2') - -Execute (Linters for multiple aliases should be loaded): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - let ale_linter_aliases = {'testft3': ['testft1', 'testft2']} - - AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft3') - -Execute (You should be able to alias filetypes to themselves and another): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - let ale_linter_aliases = {'testft1': ['testft1', 'testft2']} - - AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1') - -Execute (Buffer-local overrides for aliases should be used): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - let g:ale_linter_aliases = {'testft1': ['testft2']} - let b:ale_linter_aliases = {'testft1': ['testft1', 'testft2']} - - AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1') - -Execute (The local alias option shouldn't completely replace the global one): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - let g:ale_linter_aliases = {'testft1': ['testft1', 'testft2']} - " This is a key set for a different filetype. - " We should look for a key in this Dictionary first, and then check the - " global Dictionary. - let b:ale_linter_aliases = {'testft3': ['testft1']} - - AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1') - -Execute (Lists should be accepted for local aliases): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - let g:ale_linter_aliases = {'testft1': ['testft1', 'testft2']} - " We should load the testft2 linters for this buffer, with no duplicates. - let b:ale_linter_aliases = ['testft2'] - - AssertEqual [g:testlinter2], ale#linter#Get('anything.else') - -Execute (Strings should be accepted for local aliases): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - let g:ale_linter_aliases = {'testft1': ['testft1', 'testft2']} - " We should load the testft2 linters for this buffer, with no duplicates. - let b:ale_linter_aliases = 'testft2' - - AssertEqual [g:testlinter2], ale#linter#Get('anything.else') - -Execute (Buffer-local overrides for aliases should be used): - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft2', g:testlinter2) - let g:ale_linter_aliases = {'testft1': ['testft2']} - let b:ale_linter_aliases = {'testft1': ['testft1', 'testft2']} - - AssertEqual [g:testlinter1, g:testlinter2], ale#linter#Get('testft1') - -Execute (Linters new linters with the same name should replace old ones): - let g:testlinter1.name = g:testlinter2.name - - call ale#linter#Define('testft1', g:testlinter1) - call ale#linter#Define('testft1', g:testlinter2) - - AssertEqual [g:testlinter2], ale#linter#GetAll(['testft1']) - -Execute (Linters should be loaded from disk appropriately): - call ale#linter#Reset() - AssertEqual [{'name': 'testlinter', 'output_stream': 'stdout', 'executable': 'testlinter', 'command': 'testlinter', 'callback': 'testCB', 'read_buffer': 1, 'lint_file': 0, 'aliases': [], 'lsp': ''}], ale#linter#Get('testft') - - -Execute (Linters for later filetypes should replace the former ones): - call ale#linter#Define('javascript', { - \ 'name': 'eslint', - \ 'executable': 'y', - \ 'command': 'y', - \ 'callback': 'y', - \}) - call ale#linter#Define('typescript', { - \ 'name': 'eslint', - \ 'executable': 'x', - \ 'command': 'x', - \ 'callback': 'x', - \}) - - AssertEqual [ - \ {'output_stream': 'stdout', 'lint_file': 0, 'read_buffer': 1, 'name': 'eslint', 'executable': 'x', 'lsp': '', 'aliases': [], 'command': 'x', 'callback': 'x'} - \], ale#linter#Get('javascript.typescript') diff --git a/dotfiles/.vim/plugged/ale/test/test_linter_type_mapping.vader b/dotfiles/.vim/plugged/ale/test/test_linter_type_mapping.vader deleted file mode 100644 index 0ec22a56..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_linter_type_mapping.vader +++ /dev/null @@ -1,120 +0,0 @@ -Before: - Save g:ale_type_map - -After: - Restore - unlet! b:ale_type_map - -Execute(It should be possible to remap errors to style errors): - let g:ale_type_map = {'foo': {'E': 'ES'}} - - AssertEqual - \ [ - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ ], - \ ale#engine#FixLocList(bufnr(''), 'foo', 0, [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ ]) - -Execute(It should be possible to remap errors to style errors with buffer-local variables): - let b:ale_type_map = {'foo': {'E': 'ES'}} - - AssertEqual - \ [ - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ ], - \ ale#engine#FixLocList(bufnr(''), 'foo', 0, [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ ]) - -Execute(It should be possible to remap warnings to style warnings): - let g:ale_type_map = {'foo': {'W': 'WS'}} - - AssertEqual - \ [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ ], - \ ale#engine#FixLocList(bufnr(''), 'foo', 0, [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ ]) - -Execute(It should be possible to remap style errors to errors): - let g:ale_type_map = {'foo': {'ES': 'E'}} - - AssertEqual - \ [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ ], - \ ale#engine#FixLocList(bufnr(''), 'foo', 0, [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ ]) - -Execute(It should be possible to remap style warnings to warnings): - let g:ale_type_map = {'foo': {'WS': 'W'}} - - AssertEqual - \ [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ ], - \ ale#engine#FixLocList(bufnr(''), 'foo', 0, [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ ]) - -Execute(It should be possible to info problems to warnings): - let g:ale_type_map = {'foo': {'I': 'W'}} - - AssertEqual - \ [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1, 'linter_name': 'foo'}, - \ ], - \ ale#engine#FixLocList(bufnr(''), 'foo', 0, [ - \ {'type': 'E', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'E', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'W', 'sub_type': 'style', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ {'type': 'I', 'lnum': 1, 'text': 'x', 'bufnr': bufnr(''), 'col': 0, 'vcol': 0, 'nr': -1}, - \ ]) diff --git a/dotfiles/.vim/plugged/ale/test/test_linting_blacklist.vader b/dotfiles/.vim/plugged/ale/test/test_linting_blacklist.vader deleted file mode 100644 index 2bcc9576..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_linting_blacklist.vader +++ /dev/null @@ -1,16 +0,0 @@ -Before: - let g:ale_buffer_info = {} - -After: - call ale#engine#Cleanup(bufnr('')) - - let g:ale_buffer_info = {} - -Given unite (A Unite.vim file): - anything - -Execute(Running ALE on a blacklisted file shouldn't change anything): - call ale#Queue(0) - call ale#test#WaitForJobs(2000) - - AssertEqual {}, g:ale_buffer_info diff --git a/dotfiles/.vim/plugged/ale/test/test_linting_updates_loclist.vader b/dotfiles/.vim/plugged/ale/test/test_linting_updates_loclist.vader deleted file mode 100644 index 41c86522..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_linting_updates_loclist.vader +++ /dev/null @@ -1,96 +0,0 @@ -Before: - Save g:ale_echo_cursor - Save g:ale_set_highlights - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_set_signs - Save g:ale_run_synchronously - Save g:ale_set_lists_synchronously - Save g:ale_buffer_info - Save g:ale_sign_offset - - " We want to check that sign IDs are set for this test. - let g:ale_set_signs = 1 - let g:ale_set_loclist = 1 - let g:ale_sign_offset = 2000000 - " Disable features we don't need for these tests. - let g:ale_set_quickfix = 0 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 0 - - let g:ale_run_synchronously = 1 - let g:ale_set_lists_synchronously = 1 - let g:ale_buffer_info = {} - - function! TestCallback(buffer, output) - return [ - \ { - \ 'lnum': 1, - \ 'type': 'W', - \ 'col': 10, - \ 'text': 'Infix operators must be spaced. [Warning/space-infix-ops]', - \ }, - \ { - \ 'lnum': 2, - \ 'type': 'E', - \ 'col': 10, - \ 'text': 'Missing semicolon. [Error/semi]', - \ } - \] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd': 'true', - \ 'command': 'true', - \ 'read_buffer': 0, - \}) - - sign unplace * - - call ale#engine#Cleanup(bufnr('')) - -After: - Restore - - delfunction TestCallback - - call ale#linter#Reset() - - sign unplace * - -Given foobar (Some JavaScript with problems): - var y = 3+3; - var y = 3 - -Execute(The loclist should be updated after linting is done): - ALELint - call ale#test#FlushJobs() - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'testlinter', - \ 'nr': -1, - \ 'type': 'W', - \ 'col': 10, - \ 'text': 'Infix operators must be spaced. [Warning/space-infix-ops]', - \ 'sign_id': 2000001, - \ }, - \ { - \ 'lnum': 2, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'linter_name': 'testlinter', - \ 'nr': -1, - \ 'type': 'E', - \ 'col': 10, - \ 'text': 'Missing semicolon. [Error/semi]', - \ 'sign_id': 2000002, - \ } - \ ], - \ get(get(g:ale_buffer_info, bufnr('%'), {}), 'loclist', []) diff --git a/dotfiles/.vim/plugged/ale/test/test_list_formatting.vader b/dotfiles/.vim/plugged/ale/test/test_list_formatting.vader deleted file mode 100644 index eaa67a9d..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_list_formatting.vader +++ /dev/null @@ -1,188 +0,0 @@ -Before: - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_loclist_msg_format - Save g:ale_open_list - Save g:ale_buffer_info - Save g:ale_set_lists_synchronously - - let g:ale_set_lists_synchronously = 1 - let g:ale_loclist_msg_format = '%code: %%s' - let g:ale_open_list = 0 - let g:loclist = [] - let g:ale_buffer_info = {bufnr(''): {'loclist': g:loclist}} - - function! AddItem(data) abort - let l:item = { - \ 'bufnr': bufnr(''), - \ 'lnum': 1, - \ 'col': 1, - \ 'type': 'E', - \ 'linter_name': 'some_linter', - \} - - call add(g:loclist, extend(l:item, a:data)) - endfunction - -After: - Restore - - unlet! g:loclist - unlet! b:ale_loclist_msg_format - - delfunction AddItem - - call setloclist(0, []) - call setqflist([]) - -Execute(Formatting with codes should work for the loclist): - call AddItem({'text': "nocode\r"}) - call ale#list#SetLists(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 1, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': 'nocode', - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - - call remove(g:loclist, 0) - call AddItem({'text': 'withcode', 'code': 'E123'}) - call ale#list#SetLists(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 1, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': 'E123: withcode', - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - -Execute(Formatting with codes should work for the quickfix list): - let g:ale_set_loclist = 0 - let g:ale_set_quickfix = 1 - - call AddItem({'text': "nocode\r"}) - call ale#list#SetLists(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 1, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': 'nocode', - \ }, - \ ], - \ ale#test#GetQflistWithoutNewerKeys() - - call remove(g:loclist, 0) - call AddItem({'text': 'withcode', 'code': 'E123'}) - call ale#list#SetLists(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 1, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': 'E123: withcode', - \ }, - \ ], - \ ale#test#GetQflistWithoutNewerKeys() - -Execute(Formatting with the linter name should work for the loclist): - let g:ale_loclist_msg_format = '(%linter%) %s' - - call AddItem({'text': 'whatever'}) - call ale#list#SetLists(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 1, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': '(some_linter) whatever', - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - -Execute(Formatting with the linter name should work for the quickfix list): - let g:ale_loclist_msg_format = '(%linter%) %s' - let g:ale_set_loclist = 0 - let g:ale_set_quickfix = 1 - - call AddItem({'text': 'whatever'}) - call ale#list#SetLists(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 1, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': '(some_linter) whatever', - \ }, - \ ], - \ ale#test#GetQflistWithoutNewerKeys() - -Execute(The buffer loclist format option should take precedence): - let g:ale_loclist_msg_format = '(%linter%) %s' - let b:ale_loclist_msg_format = 'FOO %s' - - call AddItem({'text': 'whatever'}) - call ale#list#SetLists(bufnr(''), g:loclist) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 1, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': 'FOO whatever', - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() diff --git a/dotfiles/.vim/plugged/ale/test/test_list_opening.vader b/dotfiles/.vim/plugged/ale/test/test_list_opening.vader deleted file mode 100644 index 44004182..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_list_opening.vader +++ /dev/null @@ -1,290 +0,0 @@ -" Author: Yann Fery -Before: - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_open_list - Save g:ale_keep_list_window_open - Save g:ale_list_window_size - Save g:ale_list_vertical - Save g:ale_buffer_info - Save g:ale_set_lists_synchronously - - let g:ale_set_loclist = 1 - let g:ale_set_quickfix = 0 - let g:ale_open_list = 0 - let g:ale_keep_list_window_open = 0 - let g:ale_list_window_size = 10 - let g:ale_list_vertical = 0 - let g:ale_set_lists_synchronously = 1 - - let g:loclist = [ - \ {'bufnr': bufnr(''), 'lnum': 5, 'col': 5, 'text': 'x'}, - \ {'bufnr': bufnr(''), 'lnum': 5, 'col': 4, 'text': 'x'}, - \ {'bufnr': bufnr(''), 'lnum': 2, 'col': 10, 'text': 'x'}, - \ {'bufnr': bufnr(''), 'lnum': 3, 'col': 2, 'text': 'x'}, - \] - let g:ale_buffer_info = {bufnr(''): {'loclist': g:loclist}} - - function GetQuickfixHeight() abort - for l:win in range(1, winnr('$')) - if getwinvar(l:win, '&buftype') ==# 'quickfix' - return winheight(l:win) - endif - endfor - - return 0 - endfunction - - " If the window is vertical, window size should match column size/width - function GetQuickfixIsVertical(cols) abort - for l:win in range(1, winnr('$')) - if getwinvar(l:win, '&buftype') is# 'quickfix' - return winwidth(l:win) == a:cols - endif - endfor - - return 0 - endfunction - -After: - Restore - - unlet! g:loclist - unlet! b:ale_list_vertical - unlet! b:ale_list_window_size - unlet! b:ale_open_list - unlet! b:ale_keep_list_window_open - unlet! b:ale_save_event_fired - - delfunction GetQuickfixHeight - delfunction GetQuickfixIsVertical - - " Close quickfix window after every execute block - lcl - ccl - call setloclist(0, []) - call setqflist([]) - -Execute(IsQuickfixOpen should return the right output): - AssertEqual 0, ale#list#IsQuickfixOpen() - call setloclist(0, g:loclist) - lopen - AssertEqual 1, ale#list#IsQuickfixOpen() - lcl - AssertEqual 0, ale#list#IsQuickfixOpen() - call setqflist(g:loclist) - copen - AssertEqual 1, ale#list#IsQuickfixOpen() - ccl - AssertEqual 0, ale#list#IsQuickfixOpen() - -Execute(The quickfix window should not open by default for the loclist): - call ale#list#SetLists(bufnr('%'), g:loclist) - Assert !ale#list#IsQuickfixOpen() - -Execute(The quickfix window should open for just the loclist): - let g:ale_open_list = 1 - - " It should not open for an empty list. - call ale#list#SetLists(bufnr('%'), []) - Assert !ale#list#IsQuickfixOpen() - - " With a non-empty loclist, the window must open. - call ale#list#SetLists(bufnr('%'), g:loclist) - Assert ale#list#IsQuickfixOpen() - - " Clear the list and it should close again. - call ale#list#SetLists(bufnr('%'), []) - Assert !ale#list#IsQuickfixOpen() - -Execute(The quickfix window should open on the correct threshold): - " The window should open for a value lower than number of entries. - let g:ale_open_list = len(g:loclist) - 1 - call ale#list#SetLists(bufnr('%'), g:loclist) - Assert ale#list#IsQuickfixOpen() - - " Clear the list to be ready for a new value. - call ale#list#SetLists(bufnr('%'), []) - Assert !ale#list#IsQuickfixOpen() - - " It should also open for a value equal to the number of entries. - let g:ale_open_list = len(g:loclist) - call ale#list#SetLists(bufnr('%'), g:loclist) - Assert ale#list#IsQuickfixOpen() - - " Clear the list again, preparing for a final value. - call ale#list#SetLists(bufnr('%'), []) - Assert !ale#list#IsQuickfixOpen() - - " Window should not open for values higher than number of loclist entries. - let g:ale_open_list = len(g:loclist) + 1 - call ale#list#SetLists(bufnr('%'), g:loclist) - Assert !ale#list#IsQuickfixOpen() - - " Clear the list just to clean up. - call ale#list#SetLists(bufnr('%'), []) - Assert !ale#list#IsQuickfixOpen() - -Execute(The quickfix window height should be correct for the loclist): - let g:ale_open_list = 1 - let g:ale_list_window_size = 7 - - call ale#list#SetLists(bufnr('%'), g:loclist) - - AssertEqual 7, GetQuickfixHeight() - -Execute(The quickfix window height should be correct for the loclist with buffer variables): - let g:ale_open_list = 1 - let b:ale_list_window_size = 8 - - call ale#list#SetLists(bufnr('%'), g:loclist) - - AssertEqual 8, GetQuickfixHeight() - -Execute(The quickfix window should be vertical for the loclist with appropriate variables): - let g:ale_open_list = 1 - let b:ale_list_window_size = 8 - let b:ale_list_vertical = 1 - - call ale#list#SetLists(bufnr('%'), g:loclist) - - AssertEqual 1, GetQuickfixIsVertical(8) - -Execute(The quickfix window should be horizontal for the loclist with appropriate variables): - let g:ale_open_list = 1 - let b:ale_list_window_size = 8 - let b:ale_list_vertical = 0 - - call ale#list#SetLists(bufnr('%'), g:loclist) - - AssertEqual 0, GetQuickfixIsVertical(8) - -Execute(The quickfix window should stay open for just the loclist): - let g:ale_open_list = 1 - let g:ale_keep_list_window_open = 1 - - " The window should stay open after even after it is made blank again. - call ale#list#SetLists(bufnr('%'), g:loclist) - call ale#list#SetLists(bufnr('%'), []) - Assert ale#list#IsQuickfixOpen() - -Execute(The quickfix window should not open by default when quickfix is on): - let g:ale_set_quickfix = 1 - - call ale#list#SetLists(bufnr('%'), g:loclist) - Assert !ale#list#IsQuickfixOpen() - -Execute(The quickfix window should open for the quickfix list): - let g:ale_set_quickfix = 1 - let g:ale_open_list = 1 - - let g:ale_buffer_info[bufnr('') + 1] = { - \ 'loclist': [{'bufnr': -1, 'filename': '/foo/bar', 'lnum': 5, 'col': 5, 'text': 'x'}], - \} - - " It should not open for an empty list. - call ale#list#SetLists(bufnr('%'), []) - Assert !ale#list#IsQuickfixOpen(), 'The quickfix window was opened when the list was empty' - - " With a non-empty quickfix list, the window must open. - call ale#list#SetLists(bufnr('%'), g:loclist) - Assert ale#list#IsQuickfixOpen(), 'The quickfix window was closed when the list was not empty' - - " Clear this List. The window should stay open, as there are other items. - let g:ale_buffer_info[bufnr('')].loclist = [] - call ale#list#SetLists(bufnr('%'), []) - Assert ale#list#IsQuickfixOpen(), 'The quickfix window closed even though there are items in another buffer' - - " Clear the other List now. Now the window should close. - call remove(g:ale_buffer_info, bufnr('') + 1) - call ale#list#SetLists(bufnr('%'), []) - Assert !ale#list#IsQuickfixOpen(), 'The quickfix window was not closed' - -Execute(The quickfix window should stay open for the quickfix list): - let g:ale_set_quickfix = 1 - let g:ale_open_list = 1 - let g:ale_keep_list_window_open = 1 - - " The window should stay open after even after it is made blank again. - call ale#list#SetLists(bufnr('%'), g:loclist) - call ale#list#SetLists(bufnr('%'), []) - Assert ale#list#IsQuickfixOpen() - -Execute(The quickfix window height should be correct for the quickfix list): - let g:ale_set_quickfix = 1 - let g:ale_open_list = 1 - let g:ale_list_window_size = 7 - - call ale#list#SetLists(bufnr('%'), g:loclist) - - AssertEqual 7, GetQuickfixHeight() - -Execute(The quickfix window height should be correct for the quickfix list with buffer variables): - let g:ale_set_quickfix = 1 - let g:ale_open_list = 1 - let b:ale_list_window_size = 8 - - call ale#list#SetLists(bufnr('%'), g:loclist) - - AssertEqual 8, GetQuickfixHeight() - -Execute(The quickfix window should be vertical for the quickfix with appropriate variables): - let g:ale_open_list = 1 - let b:ale_list_window_size = 8 - let b:ale_list_vertical = 1 - - call ale#list#SetLists(bufnr('%'), g:loclist) - - AssertEqual 1, GetQuickfixIsVertical(8) - -Execute(The quickfix window should be horizontal for the quickfix with appropriate variables): - let g:ale_open_list = 1 - let b:ale_list_window_size = 8 - let b:ale_list_vertical = 0 - - call ale#list#SetLists(bufnr('%'), g:loclist) - - AssertEqual 0, GetQuickfixIsVertical(8) - -Execute(The buffer ale_open_list option should be respected): - let b:ale_open_list = 1 - - call ale#list#SetLists(bufnr('%'), g:loclist) - Assert ale#list#IsQuickfixOpen() - -Execute(The buffer ale_keep_list_window_open option should be respected): - let b:ale_open_list = 1 - let b:ale_keep_list_window_open = 1 - - call ale#list#SetLists(bufnr('%'), g:loclist) - call ale#list#SetLists(bufnr('%'), []) - - Assert ale#list#IsQuickfixOpen() - -Execute(The ale_open_list='on_save' option should work): - let b:ale_open_list = 'on_save' - - call ale#list#SetLists(bufnr('%'), g:loclist) - " The list shouldn't open yet, the event wasn't fired. - Assert !ale#list#IsQuickfixOpen() - - " Turn this option off, to ensure that we update lists immediately when we - " save buffers. - let g:ale_set_lists_synchronously = 0 - let b:ale_save_event_fired = 1 - - call ale#list#SetLists(bufnr('%'), g:loclist) - " Now the list should have opened. - Assert ale#list#IsQuickfixOpen() - - call ale#list#SetLists(bufnr('%'), []) - " The window should close again when the loclist is empty. - Assert !ale#list#IsQuickfixOpen() - -Execute(The window shouldn't open on save when ale_open_list=0): - let b:ale_open_list = 0 - let b:ale_save_event_fired = 1 - - call ale#list#SetLists(bufnr('%'), g:loclist) - " Now the list should have opened. - Assert !ale#list#IsQuickfixOpen() diff --git a/dotfiles/.vim/plugged/ale/test/test_list_titles.vader b/dotfiles/.vim/plugged/ale/test/test_list_titles.vader deleted file mode 100644 index dfb042f5..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_list_titles.vader +++ /dev/null @@ -1,77 +0,0 @@ -Before: - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_buffer_info - Save g:ale_set_lists_synchronously - - let g:ale_buffer_info = {} - let g:ale_set_loclist = 0 - let g:ale_set_quickfix = 0 - let g:ale_set_lists_synchronously = 1 - - call ale#test#SetDirectory('/testplugin/test') - -After: - Restore - - call setloclist(0, []) - call setqflist([]) - - call ale#test#RestoreDirectory() - -Execute(The loclist titles should be set appropriately): - silent noautocmd file foo - - let g:ale_set_loclist = 1 - - call ale#list#SetLists(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 5, 'col': 5, 'text': 'x', 'type': 'E'}, - \]) - - AssertEqual [{ - \ 'lnum': 5, - \ 'bufnr': bufnr(''), - \ 'col': 5, - \ 'text': 'x', - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \}], ale#test#GetLoclistWithoutNewerKeys() - - if !has('nvim') - AssertEqual - \ {'title': ale#path#Simplify(getcwd() . '/foo')}, - \ getloclist(0, {'title': ''}) - endif - -Execute(The quickfix titles should be set appropriately): - silent noautocmd file foo - - let g:ale_set_quickfix = 1 - - let g:ale_buffer_info[bufnr('')] = { - \ 'loclist': [{'bufnr': bufnr(''), 'lnum': 5, 'col': 5, 'text': 'x', 'type': 'E'}], - \} - - call ale#list#SetLists(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 5, 'col': 5, 'text': 'x', 'type': 'E'}, - \]) - AssertEqual [{ - \ 'lnum': 5, - \ 'bufnr': bufnr(''), - \ 'col': 5, - \ 'text': 'x', - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \}], ale#test#GetQflistWithoutNewerKeys() - - if !has('nvim') - AssertEqual - \ {'title': ale#path#Simplify(getcwd() . '/foo')}, - \ getqflist({'title': ''}) - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_load_all_linters.vader b/dotfiles/.vim/plugged/ale/test/test_load_all_linters.vader deleted file mode 100644 index 6806719a..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_load_all_linters.vader +++ /dev/null @@ -1,6 +0,0 @@ -Execute(Exceptions shouldn't be thrown when loading all linters): - " This test will look for errors when loading any of the linter files. - runtime! ale_linters/*/*.vim - -After: - call ale#linter#Reset() diff --git a/dotfiles/.vim/plugged/ale/test/test_loclist_binary_search.vader b/dotfiles/.vim/plugged/ale/test/test_loclist_binary_search.vader deleted file mode 100644 index 219fb314..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_loclist_binary_search.vader +++ /dev/null @@ -1,66 +0,0 @@ -Before: - let g:loclist = [ - \ {'bufnr': 1, 'lnum': 2, 'col': 10}, - \ {'bufnr': 1, 'lnum': 3, 'col': 2}, - \ {'bufnr': 1, 'lnum': 3, 'col': 10}, - \ {'bufnr': 1, 'lnum': 3, 'col': 12}, - \ {'bufnr': 1, 'lnum': 3, 'col': 25}, - \ {'bufnr': 1, 'lnum': 5, 'col': 4}, - \ {'bufnr': 1, 'lnum': 5, 'col': 5}, - \ {'bufnr': 1, 'lnum': 9, 'col': 5}, - \ {'bufnr': 1, 'lnum': 10, 'col': 1}, - \ {'bufnr': 2, 'lnum': 7, 'col': 10}, - \ {'bufnr': 2, 'lnum': 9, 'col': 2}, - \ {'bufnr': 2, 'lnum': 10, 'col': 2}, - \ {'bufnr': 2, 'lnum': 11, 'col': 2}, - \] - -After: - unlet g:loclist - -Execute(Exact column matches should be correct): - AssertEqual 1, ale#util#BinarySearch(g:loclist, 1, 3, 2) - -Execute(Off lines, there should be no match): - AssertEqual -1, ale#util#BinarySearch(g:loclist, 1, 4, 2) - -Execute(Near column matches should be taken): - AssertEqual 2, ale#util#BinarySearch(g:loclist, 1, 3, 11) - AssertEqual 3, ale#util#BinarySearch(g:loclist, 1, 3, 13) - -Execute(Columns before should be taken when the cursor is far ahead): - AssertEqual 4, ale#util#BinarySearch(g:loclist, 1, 3, 300) - -Execute(The only problems on lines in later columns should be matched): - AssertEqual 7, ale#util#BinarySearch(g:loclist, 1, 9, 1) - -Execute(The only problems on lines in earlier columns should be matched): - AssertEqual 8, ale#util#BinarySearch(g:loclist, 1, 10, 30) - -Execute(Lines for other buffers should not be matched): - AssertEqual -1, ale#util#BinarySearch(g:loclist, 1, 7, 10) - -Execute(Searches for buffers later in the list should work): - AssertEqual 10, ale#util#BinarySearch(g:loclist, 2, 9, 10) - -Execute(Searches should work with just one item): - let g:loclist = [{'bufnr': 1, 'lnum': 3, 'col': 10}] - - AssertEqual 0, ale#util#BinarySearch(g:loclist, 1, 3, 2) - -Execute(Searches should return the last item on a single column): - let g:loclist = [ - \ {'bufnr': 1, 'lnum': 1, 'col': 10, 'type': 'W'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 10, 'type': 'E'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 11, 'type': 'W'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 11, 'type': 'E'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 20, 'type': 'W'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 20, 'type': 'E'}, - \] - - " We should return the index for the last item at some column to the right. - AssertEqual 1, ale#util#BinarySearch(g:loclist, 1, 1, 1) - " We should return the index for the last item at the column we are on. - AssertEqual 3, ale#util#BinarySearch(g:loclist, 1, 1, 11) - " We should prefer items to the left of the cursor, over the right. - AssertEqual 3, ale#util#BinarySearch(g:loclist, 1, 1, 19) diff --git a/dotfiles/.vim/plugged/ale/test/test_loclist_corrections.vader b/dotfiles/.vim/plugged/ale/test/test_loclist_corrections.vader deleted file mode 100644 index 60b1eba7..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_loclist_corrections.vader +++ /dev/null @@ -1,469 +0,0 @@ -Before: - Save g:ale_filename_mappings - - let g:ale_filename_mappings = {} - -After: - unlet! b:temp_name - unlet! b:other_bufnr - - Restore - - -Execute(FixLocList should map filenames): - " Paths converted back into temporary filenames shouldn't be included. - let g:ale_filename_mappings = { - \ 'linter2': [['/xxx/', '/data/']], - \ 'linter1': [ - \ ['/bar/', '/data/special/'], - \ ['/foo/', '/data/'], - \ [ - \ ale#path#Simplify(fnamemodify(ale#util#Tempname(), ':h:h')) . '/', - \ '/x-tmp/', - \ ], - \ ], - \} - - AssertEqual - \ [ - \ '/foo/file.txt', - \ v:null, - \ '/bar/file.txt', - \ ], - \ map( - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'linter1', - \ 0, - \ [ - \ {'text': 'x', 'lnum': 1, 'filename': '/data/file.txt'}, - \ {'text': 'x', 'lnum': 1, 'filename': '/x-tmp/file.txt'}, - \ {'text': 'x', 'lnum': 1, 'filename': '/data/special/file.txt'}, - \ ], - \ ), - \ 'get(v:val, ''filename'', v:null)', - \ ) - - -Given foo (Some file with lines to count): - foo12345678 - bar12345678 - baz12345678 - four12345678 - five12345678 - six12345678 - seven12345678 - eight12345678 - nine12345678 - ten12345678 - -Execute(FixLocList should set all the default values correctly): - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 2, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ { - \ 'text': 'b', - \ 'lnum': 2, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [{'text': 'a', 'lnum': 2}, {'text': 'b', 'lnum': 2}], - \ ) - -Execute(FixLocList should use the values we supply): - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 3, - \ 'col': 4, - \ 'bufnr': 10000, - \ 'vcol': 0, - \ 'type': 'W', - \ 'nr': 42, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [{ - \ 'text': 'a', - \ 'lnum': 3, - \ 'col': 4, - \ 'bufnr': 10000, - \ 'vcol': 1, - \ 'type': 'W', - \ 'nr': 42, - \ }], - \ ) - -Execute(FixLocList should set items with lines beyond the end to the last line): - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 0, - \ 'end_lnum': 10, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [{'text': 'a', 'lnum': 11, 'end_lnum': 12}], - \ ) - -Execute(FixLocList should move line 0 to line 1): - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 1, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [{'text': 'a', 'lnum': 0}], - \ ) - -Execute(FixLocList should convert line and column numbers correctly): - " The numbers should be 10, not 8 as octals. - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 10, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [{'text': 'a', 'lnum': '010', 'col': '010'}], - \ ) - -Execute(FixLocList should pass on end_col values): - " The numbers should be 10, not 8 as octals. - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 10, - \ 'end_col': 12, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 11, - \ 'end_col': 12, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [ - \ {'text': 'a', 'lnum': '010', 'col': '010', 'end_col': '012'}, - \ {'text': 'a', 'lnum': '010', 'col': '011', 'end_col': 12}, - \ ], - \ ) - -Execute(FixLocList should pass on end_lnum values): - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 7, - \ 'col': 10, - \ 'end_lnum': 10, - \ 'end_col': 12, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ { - \ 'text': 'a', - \ 'lnum': 7, - \ 'col': 11, - \ 'end_lnum': 10, - \ 'end_col': 12, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [ - \ {'text': 'a', 'lnum': '07', 'col': '010', 'end_col': '012', 'end_lnum': '010'}, - \ {'text': 'a', 'lnum': '07', 'col': '011', 'end_col': 12, 'end_lnum': 10}, - \ ], - \ ) - -Execute(FixLocList should allow subtypes to be set): - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'sub_type': 'style', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [{'text': 'a', 'lnum': 11, 'sub_type': 'style'}], - \ ) - -Execute(FixLocList should accept filenames): - let b:other_bufnr = bufnr('/foo/bar/baz', 1) - - " Make sure we actually get another buffer number, or the test is invalid. - AssertNotEqual -1, b:other_bufnr - - call ale#test#SetFilename('test.txt') - - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 2, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'filename': expand('%:p'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ { - \ 'text': 'a', - \ 'lnum': 3, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'filename': expand('%:p'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ { - \ 'text': 'a', - \ 'lnum': 4, - \ 'col': 0, - \ 'bufnr': b:other_bufnr, - \ 'filename': '/foo/bar/baz', - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ { - \ 'text': 'a', - \ 'lnum': 5, - \ 'col': 0, - \ 'bufnr': b:other_bufnr, - \ 'filename': '/foo/bar/baz', - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [ - \ {'text': 'a', 'lnum': 2, 'filename': expand('%:p')}, - \ {'text': 'a', 'lnum': 3, 'filename': expand('%:p')}, - \ {'text': 'a', 'lnum': 4, 'filename': '/foo/bar/baz'}, - \ {'text': 'a', 'lnum': 5, 'filename': '/foo/bar/baz'}, - \ ], - \ ) - -Execute(FixLocList should interpret temporary filenames as being the current buffer): - let b:temp_name = tempname() - - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 2, - \ 'col': 0, - \ 'bufnr': bufnr(''), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ { - \ 'text': 'a', - \ 'lnum': 3, - \ 'col': 0, - \ 'bufnr': bufnr(''), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr(''), - \ 'foobar', - \ 0, - \ [ - \ {'text': 'a', 'lnum': 2, 'filename': b:temp_name}, - \ {'text': 'a', 'lnum': 3, 'filename': substitute(b:temp_name, '\\', '/', 'g')}, - \ ], - \ ) - -Execute(The error code should be passed on): - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 10, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ 'code': 'some-code' - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [{'text': 'a', 'lnum': 11, 'code': 'some-code'}], - \ ) - -Execute(FixLocList should mark problems as coming from other sources if requested): - AssertEqual - \ [ - \ { - \ 'text': 'a', - \ 'lnum': 2, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ 'from_other_source': 1, - \ }, - \ { - \ 'text': 'b', - \ 'lnum': 2, - \ 'col': 0, - \ 'bufnr': bufnr('%'), - \ 'vcol': 0, - \ 'type': 'E', - \ 'nr': -1, - \ 'linter_name': 'foobar', - \ 'from_other_source': 1, - \ }, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 1, - \ [{'text': 'a', 'lnum': 2}, {'text': 'b', 'lnum': 2}], - \ ) - -Given(A file with Japanese multi-byte text): - はじめまして! - -私はワープです。 -Execute(character positions should be converted to byte positions): - AssertEqual - \ [ - \ {'lnum': 1, 'bufnr': bufnr(''), 'col': 0, 'linter_name': 'foobar', 'nr': -1, 'type': 'E', 'vcol': 0, 'text': 'a'}, - \ {'lnum': 1, 'bufnr': bufnr(''), 'col': 1, 'linter_name': 'foobar', 'nr': -1, 'type': 'E', 'vcol': 0, 'text': 'a'}, - \ {'lnum': 1, 'bufnr': bufnr(''), 'col': 4, 'linter_name': 'foobar', 'nr': -1, 'type': 'E', 'vcol': 0, 'text': 'a'}, - \ {'lnum': 1, 'bufnr': bufnr(''), 'col': 7, 'linter_name': 'foobar', 'nr': -1, 'type': 'E', 'vcol': 0, 'text': 'a'}, - \ {'lnum': 1, 'bufnr': bufnr(''), 'col': 7, 'end_col': 13, 'linter_name': 'foobar', 'nr': -1, 'type': 'E', 'vcol': 0, 'text': 'a'}, - \ {'lnum': 1, 'bufnr': bufnr(''), 'col': 7, 'end_col': 13, 'end_lnum': 1, 'linter_name': 'foobar', 'nr': -1, 'type': 'E', 'vcol': 0, 'text': 'a'}, - \ {'lnum': 1, 'bufnr': bufnr(''), 'col': 7, 'end_col': 17, 'end_lnum': 2, 'linter_name': 'foobar', 'nr': -1, 'type': 'E', 'vcol': 0, 'text': 'a'}, - \ {'lnum': 2, 'bufnr': bufnr(''), 'col': 17, 'linter_name': 'foobar', 'nr': -1, 'type': 'E', 'vcol': 0, 'text': 'a'}, - \ ], - \ ale#engine#FixLocList( - \ bufnr('%'), - \ 'foobar', - \ 0, - \ [ - \ {'text': 'a', 'lnum': 1, 'col': 0, 'vcol': 1}, - \ {'text': 'a', 'lnum': 1, 'col': 1, 'vcol': 1}, - \ {'text': 'a', 'lnum': 1, 'col': 2, 'vcol': 1}, - \ {'text': 'a', 'lnum': 1, 'col': 3, 'vcol': 1}, - \ {'text': 'a', 'lnum': 1, 'col': 3, 'end_col': 5, 'vcol': 1}, - \ {'text': 'a', 'lnum': 1, 'col': 3, 'end_col': 5, 'end_lnum': 1, 'vcol': 1}, - \ {'text': 'a', 'lnum': 1, 'col': 3, 'end_col': 7, 'end_lnum': 2, 'vcol': 1}, - \ {'text': 'a', 'lnum': 2, 'col': 7, 'vcol': 1}, - \ ], - \ ) diff --git a/dotfiles/.vim/plugged/ale/test/test_loclist_jumping.vader b/dotfiles/.vim/plugged/ale/test/test_loclist_jumping.vader deleted file mode 100644 index 8ec4e583..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_loclist_jumping.vader +++ /dev/null @@ -1,121 +0,0 @@ -Before: - let g:ale_buffer_info = { - \ bufnr(''): { - \ 'loclist': [ - \ {'type': 'E', 'bufnr': bufnr('') - 1, 'lnum': 3, 'col': 2}, - \ {'type': 'E', 'bufnr': bufnr(''), 'lnum': 1, 'col': 2}, - \ {'type': 'E', 'bufnr': bufnr(''), 'lnum': 1, 'col': 3}, - \ {'type': 'W', 'sub_type': 'style', 'bufnr': bufnr(''), 'lnum': 2, 'col': 1}, - \ {'type': 'E', 'bufnr': bufnr(''), 'lnum': 2, 'col': 2}, - \ {'type': 'W', 'sub_type': 'style', 'bufnr': bufnr(''), 'lnum': 2, 'col': 3}, - \ {'type': 'W', 'bufnr': bufnr(''), 'lnum': 2, 'col': 6}, - \ {'type': 'E', 'bufnr': bufnr(''), 'lnum': 2, 'col': 700}, - \ {'type': 'E', 'bufnr': bufnr('') + 1, 'lnum': 3, 'col': 2}, - \ ], - \ }, - \} - - function! TestJump(position, wrap, filter, subtype_filter, pos) - call cursor(a:pos) - - if type(a:position) == type(0) - call ale#loclist_jumping#JumpToIndex(a:position) - else - call ale#loclist_jumping#Jump(a:position, a:wrap, a:filter, - \ a:subtype_filter) - endif - - return getcurpos()[1:2] - endfunction - -After: - let g:ale_buffer_info = {} - delfunction TestJump - -Given foobar (Some imaginary filetype): - 12345678 - 12345678 - -Execute(loclist jumping should jump correctly when not wrapping): - AssertEqual [2, 1], TestJump('before', 0, 'any', 'any', [2, 2]) - AssertEqual [1, 3], TestJump('before', 0, 'any', 'any', [2, 1]) - AssertEqual [2, 3], TestJump('after', 0, 'any', 'any', [2, 2]) - AssertEqual [2, 1], TestJump('after', 0, 'any', 'any', [1, 3]) - AssertEqual [2, 6], TestJump('after', 0, 'any', 'any', [2, 4]) - AssertEqual [2, 8], TestJump('after', 0, 'any', 'any', [2, 6]) - -Execute(loclist jumping should jump correctly when wrapping): - AssertEqual [2, 1], TestJump('before', 1, 'any', 'any', [2, 2]) - AssertEqual [1, 3], TestJump('before', 1, 'any', 'any', [2, 1]) - AssertEqual [2, 3], TestJump('after', 1, 'any', 'any', [2, 2]) - AssertEqual [2, 1], TestJump('after', 1, 'any', 'any', [1, 3]) - AssertEqual [2, 6], TestJump('after', 1, 'any', 'any', [2, 4]) - - AssertEqual [1, 2], TestJump('after', 1, 'any', 'any', [2, 8]) - AssertEqual [2, 8], TestJump('before', 1, 'any', 'any', [1, 2]) - -Execute(loclist jumping should jump correctly with warning filters): - AssertEqual [2, 1], TestJump('after', 0, 'W', 'any', [1, 2]) - AssertEqual [2, 6], TestJump('after', 0, 'W', 'any', [2, 3]) - AssertEqual [2, 1], TestJump('after', 1, 'W', 'any', [2, 6]) - -Execute(loclist jumping should jump correctly with error filters): - AssertEqual [1, 2], TestJump('after', 1, 'E', 'any', [2, 700]) - AssertEqual [2, 2], TestJump('before', 0, 'E', 'any', [2, 700]) - AssertEqual [2, 2], TestJump('after', 1, 'E', 'any', [1, 3]) - -Execute(loclist jumping should jump correctly with sub type filters): - AssertEqual [2, 3], TestJump('after', 0, 'any', 'style', [2, 1]) - AssertEqual [2, 2], TestJump('after', 0, 'any', '', [1, 3]) - AssertEqual [2, 1], TestJump('after', 1, 'any', 'style', [2, 6]) - -Execute(loclist jumping not jump when the loclist is empty): - let g:ale_buffer_info[bufnr('%')].loclist = [] - - AssertEqual [1, 6], TestJump('before', 0, 'any', 'any', [1, 6]) - AssertEqual [1, 6], TestJump('before', 1, 'any', 'any', [1, 6]) - AssertEqual [1, 6], TestJump('after', 0, 'any', 'any', [1, 6]) - AssertEqual [1, 6], TestJump('after', 1, 'any', 'any', [1, 6]) - -Execute(We should be able to jump to the last item): - AssertEqual [2, 8], TestJump(-1, 0, 'any', 'any', [1, 6]) - -Execute(We shouldn't move when jumping to the last item where there are none): - let g:ale_buffer_info[bufnr('%')].loclist = [] - - AssertEqual [1, 6], TestJump(-1, 0, 'any', 'any', [1, 6]) - -Execute(We should be able to jump to the first item): - AssertEqual [1, 2], TestJump(0, 0, 'any', 'any', [1, 6]) - -Execute(We shouldn't move when jumping to the first item where there are none): - let g:ale_buffer_info[bufnr('%')].loclist = [] - - AssertEqual [1, 6], TestJump(0, 0, 'any', 'any', [1, 6]) - -Execute(We should be able to jump when the error line is blank): - " Add a blank line at the end. - call setline(1, getline('.', '$') + ['']) - " Add a problem on the blank line. - call add(g:ale_buffer_info[bufnr('%')].loclist, {'type': 'E', 'bufnr': bufnr(''), 'lnum': 3, 'col': 1}) - - AssertEqual 0, len(getline(3)) - AssertEqual [2, 8], TestJump('before', 0, 'any', 'any', [3, 1]) - AssertEqual [2, 8], TestJump('before', 1, 'any', 'any', [3, 1]) - AssertEqual [3, 1], TestJump('after', 0, 'any', 'any', [3, 1]) - AssertEqual [1, 2], TestJump('after', 1, 'any', 'any', [3, 1]) - -Execute(ALE should jump to column 1 instead of 0): - let g:ale_buffer_info = { - \ bufnr(''): { - \ 'loclist': [ - \ {'type': 'E', 'bufnr': bufnr(''), 'lnum': 1, 'col': 5}, - \ {'type': 'E', 'bufnr': bufnr(''), 'lnum': 2, 'col': 0}, - \ ], - \ }, - \} - - AssertEqual [2, 1], TestJump('after', 1, 'any', 'any', [1, 5]) - AssertEqual [1, 5], TestJump('after', 1, 'any', 'any', [2, 1]) - AssertEqual [2, 1], TestJump('before', 1, 'any', 'any', [1, 5]) - AssertEqual [1, 5], TestJump('before', 1, 'any', 'any', [2, 1]) diff --git a/dotfiles/.vim/plugged/ale/test/test_loclist_sorting.vader b/dotfiles/.vim/plugged/ale/test/test_loclist_sorting.vader deleted file mode 100644 index 376e743a..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_loclist_sorting.vader +++ /dev/null @@ -1,43 +0,0 @@ -Execute(loclist item should be sorted): - AssertEqual [ - \ {'bufnr': -1, 'filename': 'b', 'lnum': 4, 'col': 2}, - \ {'bufnr': -1, 'filename': 'b', 'lnum': 5, 'col': 2}, - \ {'bufnr': -1, 'filename': 'c', 'lnum': 3, 'col': 2}, - \ {'bufnr': 1, 'lnum': 2, 'col': 10}, - \ {'bufnr': 1, 'lnum': 3, 'col': 2}, - \ {'bufnr': 1, 'lnum': 5, 'col': 4}, - \ {'bufnr': 1, 'lnum': 5, 'col': 5}, - \ {'bufnr': 2, 'lnum': 1, 'col': 2}, - \ {'bufnr': 2, 'lnum': 1, 'col': 5}, - \ {'bufnr': 2, 'lnum': 5, 'col': 5}, - \ {'bufnr': 3, 'lnum': 1, 'col': 1}, - \ ], - \ sort([ - \ {'bufnr': 3, 'lnum': 1, 'col': 1}, - \ {'bufnr': -1, 'filename': 'b', 'lnum': 5, 'col': 2}, - \ {'bufnr': 1, 'lnum': 5, 'col': 5}, - \ {'bufnr': 2, 'lnum': 5, 'col': 5}, - \ {'bufnr': -1, 'filename': 'b', 'lnum': 4, 'col': 2}, - \ {'bufnr': 1, 'lnum': 5, 'col': 4}, - \ {'bufnr': 1, 'lnum': 2, 'col': 10}, - \ {'bufnr': 2, 'lnum': 1, 'col': 5}, - \ {'bufnr': 1, 'lnum': 3, 'col': 2}, - \ {'bufnr': 2, 'lnum': 1, 'col': 2}, - \ {'bufnr': -1, 'filename': 'c', 'lnum': 3, 'col': 2}, - \], 'ale#util#LocItemCompare') - -Execute(Items should be sorted in by their problem priority when they lie on the same column): - AssertEqual [ - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'W', 'sub_type': 'style'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'E', 'sub_type': 'style'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'I'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'W'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'E'}, - \ ], - \ sort([ - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'E'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'I'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'W'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'E', 'sub_type': 'style'}, - \ {'bufnr': 1, 'lnum': 1, 'col': 1, 'type': 'W', 'sub_type': 'style'}, - \], 'ale#util#LocItemCompare') diff --git a/dotfiles/.vim/plugged/ale/test/test_maven_build_classpath_command.vader b/dotfiles/.vim/plugged/ale/test/test_maven_build_classpath_command.vader deleted file mode 100644 index c10f457b..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_maven_build_classpath_command.vader +++ /dev/null @@ -1,53 +0,0 @@ -Before: - Save $PATH - Save $PATHEXT - - let $PATHEXT = '.' - - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/java/javac.vim - let g:expected_wrapper = '' - if has('unix') - let g:expected_wrapper = 'mvnw' - else - let g:expected_wrapper = 'mvnw.cmd' - endif - -After: - Restore - - unlet! g:expected_wrapper - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Should use 'mvnw' in classpath command if available): - call ale#test#SetFilename('test-files/maven/maven-java-project/module1/src/main/java/dummy1.java') - - AssertEqual - \ [ - \ ale#path#Simplify(g:dir . '/test-files/maven/maven-java-project/module1'), - \ ale#Escape(ale#path#Simplify(g:dir . '/test-files/maven/maven-java-project/module1/' . g:expected_wrapper)) - \ . ' dependency:build-classpath', - \ ], - \ ale#maven#BuildClasspathCommand(bufnr('')) - -Execute(Should use 'mvn' in classpath command if it is executable and 'mvnw' is unavailable): - call ale#test#SetFilename('test-files/maven/maven-java-project/module2/src/main/java/dummy2.java') - let $PATH .= (has('win32') ? ';' : ':') - \ . ale#path#Simplify(g:dir . '/test-files/maven') - - AssertEqual - \ [ - \ ale#path#Simplify(g:dir . '/test-files/maven/maven-java-project/module2'), - \ ale#Escape('mvn') - \ . ' dependency:build-classpath', - \ ], - \ ale#maven#BuildClasspathCommand(bufnr('')) - -Execute(Should return empty string if maven cannot be executed): - call ale#test#SetFilename('test-files/maven/non-maven-project/src/main/java/dummy.java') - - AssertEqual - \ ['', ''], - \ ale#maven#BuildClasspathCommand(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_maven_find_executable.vader b/dotfiles/.vim/plugged/ale/test/test_maven_find_executable.vader deleted file mode 100644 index f0f06b12..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_maven_find_executable.vader +++ /dev/null @@ -1,46 +0,0 @@ -Before: - Save $PATH - Save $PATHEXT - - " Count the maven executable without .exe as executable on Windows - let $PATHEXT = '.' - - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/java/javac.vim - let g:expected_wrapper = '' - if has('unix') - let g:expected_wrapper = 'mvnw' - else - let g:expected_wrapper = 'mvnw.cmd' - endif - -After: - Restore - - unlet! g:expected_wrapper - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Should return 'mvnw' if found in parent directory): - call ale#test#SetFilename('test-files/maven/maven-java-project/module1/src/main/java/dummy1.java') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/maven/maven-java-project/module1/' . g:expected_wrapper), - \ ale#maven#FindExecutable(bufnr('')) - -Execute(Should return 'mvn' if 'mvnw' not found in parent directory): - call ale#test#SetFilename('test-files/maven/maven-java-project/module2/src/main/java/dummy2.java') - let $PATH .= (has('win32') ? ';' : ':') - \ . ale#path#Simplify(g:dir . '/test-files/maven') - - AssertEqual - \ 'mvn', - \ ale#maven#FindExecutable(bufnr('')) - -Execute(Should return empty string if 'mvnw' not in parent directory and mvn not in path): - call ale#test#SetFilename('mvn-test-files/java-maven-project/module2/src/main/java/dummy2.java') - - AssertEqual - \ '', - \ ale#gradle#FindExecutable(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_maven_find_project_root.vader b/dotfiles/.vim/plugged/ale/test/test_maven_find_project_root.vader deleted file mode 100644 index f761b2ef..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_maven_find_project_root.vader +++ /dev/null @@ -1,28 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - runtime ale_linters/kotlin/javac.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(Should return directory for 'mvnw' if found in parent directory): - call ale#test#SetFilename('test-files/maven/maven-java-project/module1/src/main/java/dummy1.java') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/maven/maven-java-project/module1'), - \ ale#maven#FindProjectRoot(bufnr('')) - -Execute(Should return directory for 'pom.xml' if found in parent directory): - call ale#test#SetFilename('test-files/maven/maven-java-project/module2/src/main/java/dummy2.java') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/maven/maven-java-project/module2'), - \ ale#maven#FindProjectRoot(bufnr('')) - -Execute(Should return empty string if maven files are not found in parent directory): - call ale#test#SetFilename('test-files/maven/non-maven-project/src/main/java/dummy.java') - - AssertEqual - \ '', - \ ale#maven#FindProjectRoot(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_nearest_file_search.vader b/dotfiles/.vim/plugged/ale/test/test_nearest_file_search.vader deleted file mode 100644 index f5c12de4..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_nearest_file_search.vader +++ /dev/null @@ -1,15 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - -After: - call ale#test#RestoreDirectory() - -Execute(We should be able to find a configuration file further up): - call ale#test#SetFilename('test-files/top/middle/bottom/dummy.txt') - - AssertEqual - \ ale#path#Simplify(expand('%:p:h:h:h:h:h') . '/test-files/top/example.ini'), - \ ale#path#FindNearestFile(bufnr('%'), 'example.ini') - -Execute(We shouldn't find anything for files which don't match): - AssertEqual '', ale#path#FindNearestFile(bufnr('%'), 'cantfindthis') diff --git a/dotfiles/.vim/plugged/ale/test/test_nimlsp_project_root.vader b/dotfiles/.vim/plugged/ale/test/test_nimlsp_project_root.vader deleted file mode 100644 index d10989b3..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_nimlsp_project_root.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - runtime ale_linters/nim/nimlsp.vim - call ale#test#SetDirectory('/testplugin/test') - -After: - if isdirectory(g:dir . '/.git') - call delete(g:dir . '/.git', 'd') - endif - - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - -Execute(Detect root of nim project with .git/ correctly): - call ale#test#SetFilename('test-files/nim/with-git/src/source.nim') - call mkdir(g:dir . '/.git') - AssertEqual - \ ale#path#Simplify(g:dir), - \ ale_linters#nim#nimlsp#GetProjectRoot(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_no_linting_on_write_quit.vader b/dotfiles/.vim/plugged/ale/test/test_no_linting_on_write_quit.vader deleted file mode 100644 index 161e6165..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_no_linting_on_write_quit.vader +++ /dev/null @@ -1,118 +0,0 @@ -Before: - Save g:ale_echo_cursor - Save g:ale_fix_on_save - Save g:ale_fixers - Save g:ale_lint_on_save - Save g:ale_set_highlights - Save g:ale_set_lists_synchronously - Save g:ale_set_loclist - Save g:ale_set_quickfix - Save g:ale_set_signs - - let g:ale_run_synchronously = 1 - let g:ale_set_lists_synchronously = 1 - " Disable the things we don't need, but leave enabled what we do. - let g:ale_echo_cursor = 0 - let g:ale_set_signs = 0 - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 1 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 0 - - function! TestCallback(buffer, output) - return [{'lnum': 1, 'col': 1, 'text': 'xxx'}] - endfunction - - function AddLine(buffer, lines) abort - return a:lines + ['x'] - endfunction - - let g:ale_fixers = { - \ 'testft': ['AddLine'], - \} - - call ale#linter#PreventLoading('testft') - call ale#linter#Define('testft', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'true', - \ 'command': 'true', - \}) - -Given testft (An empty file): - -After: - Restore - - unlet! g:ale_run_synchronously - unlet! b:ale_quitting - delfunction TestCallback - delfunction AddLine - - call ale#linter#Reset() - call setloclist(0, []) - -Execute(No linting should be done on :wq or :x): - let g:ale_lint_on_save = 1 - let g:ale_fix_on_save = 0 - - " First try just the SaveEvent, to be sure that we set errors in the test. - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual 1, len(ale#test#GetLoclistWithoutNewerKeys()) - - " Now try doing it again, but where we run the quit event first. - call setloclist(0, []) - call ale#events#QuitEvent(bufnr('')) - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - -Execute(No linting should be for :w after :q fails): - let g:ale_lint_on_save = 1 - let g:ale_fix_on_save = 0 - - call ale#events#QuitEvent(bufnr('')) - call ale#test#FlushJobs() - - " Simulate 2 seconds passing. - let b:ale_quitting -= 1000 - - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual 1, len(ale#test#GetLoclistWithoutNewerKeys()) - -Execute(No linting should be done on :wq or :x after fixing files): - let g:ale_lint_on_save = 1 - let g:ale_fix_on_save = 1 - - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual 1, len(ale#test#GetLoclistWithoutNewerKeys()) - - " Now try doing it again, but where we run the quit event first. - call setloclist(0, []) - call ale#events#QuitEvent(bufnr('')) - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - -Execute(Linting should be done after :q fails and fixing files): - let g:ale_lint_on_save = 1 - let g:ale_fix_on_save = 1 - - call ale#events#QuitEvent(bufnr('')) - call ale#test#FlushJobs() - - " Simulate 2 seconds passing. - let b:ale_quitting -= 1000 - - call ale#events#SaveEvent(bufnr('')) - call ale#test#FlushJobs() - - AssertEqual 1, len(ale#test#GetLoclistWithoutNewerKeys()) diff --git a/dotfiles/.vim/plugged/ale/test/test_organize_imports.vader b/dotfiles/.vim/plugged/ale/test/test_organize_imports.vader deleted file mode 100644 index 87cd295a..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_organize_imports.vader +++ /dev/null @@ -1,172 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('dummy.txt') - - let g:old_filename = expand('%:p') - let g:Callback = '' - let g:expr_list = [] - let g:message_list = [] - let g:handle_code_action_called = 0 - let g:code_actions = [] - let g:options = {} - let g:capability_checked = '' - let g:conn_id = v:null - let g:InitCallback = v:null - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/organize_imports.vim - runtime autoload/ale/code_action.vim - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - - if a:linter.lsp is# 'tsserver' - call ale#lsp#MarkConnectionAsTsserver(g:conn_id) - endif - - let l:details = { - \ 'command': 'foobar', - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': '/foo/bar', - \} - - let g:InitCallback = {-> ale#lsp_linter#OnInit(a:linter, l:details, a:Callback)} - endfunction - - function! ale#lsp#HasCapability(conn_id, capability) abort - let g:capability_checked = a:capability - - return 1 - endfunction - - function! ale#lsp#RegisterCallback(conn_id, callback) abort - let g:Callback = a:callback - endfunction - - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 42 - endfunction - - function! ale#util#Execute(expr) abort - call add(g:expr_list, a:expr) - endfunction - - function! ale#code_action#HandleCodeAction(code_action, options) abort - let g:handle_code_action_called = 1 - AssertEqual !&hidden, get(a:options, 'should_save') - call add(g:code_actions, a:code_action) - endfunction - -After: - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - call ale#references#SetMap({}) - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - unlet! g:capability_checked - unlet! g:InitCallback - unlet! g:old_filename - unlet! g:conn_id - unlet! g:Callback - unlet! g:message_list - unlet! g:expr_list - unlet! b:ale_linters - unlet! g:options - unlet! g:code_actions - unlet! g:handle_code_action_called - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/organize_imports.vim - runtime autoload/ale/code_action.vim - -Execute(Other messages for the tsserver handler should be ignored): - call ale#organize_imports#HandleTSServerResponse(1, {'command': 'foo'}) - AssertEqual g:handle_code_action_called, 0 - -Execute(Failed organizeImports responses should be handled correctly): - call ale#organize_imports#HandleTSServerResponse( - \ 1, - \ {'command': 'organizeImports', 'request_seq': 3} - \) - AssertEqual g:handle_code_action_called, 0 - -Execute(Code actions from tsserver should be handled): - call ale#organize_imports#HandleTSServerResponse(1, { - \ 'command': 'organizeImports', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': [], - \}) - AssertEqual g:handle_code_action_called, 1 - AssertEqual [{ - \ 'description': 'Organize Imports', - \ 'changes': [], - \}], g:code_actions - -Given typescript(Some typescript file): - foo - somelongerline - bazxyzxyzxyz - -Execute(tsserver organize imports requests should be sent): - call ale#linter#Reset() - runtime ale_linters/typescript/tsserver.vim - - ALEOrganizeImports - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual - \ 'function(''ale#organize_imports#HandleTSServerResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@organizeImports', { - \ 'scope': { - \ 'type': 'file', - \ 'args': { - \ 'file': expand('%:p'), - \ }, - \ }, - \ }] - \ ], - \ g:message_list - -Given python(Some Python file): - foo - somelongerline - bazxyzxyzxyz - -Execute(Should result in error message): - call ale#linter#Reset() - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - - ALEOrganizeImports - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual [ - \ 'echom ''OrganizeImports currently only works with tsserver''', - \], g:expr_list diff --git a/dotfiles/.vim/plugged/ale/test/test_other_sources.vader b/dotfiles/.vim/plugged/ale/test/test_other_sources.vader deleted file mode 100644 index b397788d..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_other_sources.vader +++ /dev/null @@ -1,153 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_set_signs - Save g:ale_set_quickfix - Save g:ale_set_loclist - Save g:ale_set_highlights - Save g:ale_echo_cursor - - let g:ale_buffer_info = {} - let g:ale_run_synchronously = 1 - let g:ale_set_lists_synchronously = 1 - let g:ale_set_signs = 0 - let g:ale_set_quickfix = 0 - let g:ale_set_loclist = 1 - let g:ale_set_highlights = 0 - let g:ale_echo_cursor = 0 - - function! TestCallback(buffer, output) - return [] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'command': has('win32') ? 'echo foo bar' : '/bin/sh -c ''echo foo bar''', - \}) - -After: - Restore - - unlet! b:ale_linters - unlet! g:want_results_signaled - unlet! g:want_results_buffer_value - unlet! g:lint_pre_signaled - unlet! g:ale_run_synchronously - unlet! g:ale_set_lists_synchronously - - delfunction TestCallback - - augroup VaderTest - autocmd! - augroup END - - augroup! VaderTest - - call ale#linter#Reset() - call setloclist(0, []) - -Given foobar (Some imaginary filetype): -Execute(StartChecking should mark a buffer as being actively checked): - Assert !ale#engine#IsCheckingBuffer(bufnr('')) - - call ale#other_source#StartChecking(bufnr(''), 'other-source-linter') - - Assert ale#engine#IsCheckingBuffer(bufnr('')) - -Execute(ShowResults sould make a buffer inactive): - call ale#other_source#StartChecking(bufnr(''), 'other-source-linter') - call ale#other_source#StartChecking(bufnr(''), 'second-other-source-linter') - - call ale#other_source#ShowResults(bufnr(''), 'other-source-linter', []) - - Assert ale#engine#IsCheckingBuffer(bufnr('')) - - call ale#other_source#ShowResults(bufnr(''), 'second-other-source-linter', []) - - Assert !ale#engine#IsCheckingBuffer(bufnr('')) - -Execute(ShowResults should show results at any time): - call ale#other_source#ShowResults(bufnr(''), 'other-source-linter', [ - \ {'text': 'xyz', 'lnum': 1}, - \]) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 0, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': -1, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': 'xyz', - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - - call ale#other_source#ShowResults(bufnr(''), 'other-source-linter', []) - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - -Execute(A regular lint cycle shouldn't clear results from other sources): - call ale#other_source#ShowResults(bufnr(''), 'other-source-linter', [ - \ {'text': 'xyz', 'lnum': 1}, - \]) - ALELint - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 0, - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': -1, - \ 'type': 'E', - \ 'pattern': '', - \ 'text': 'xyz', - \ }, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() - -Execute(ALEWantResults should be signaled when a buffer is checked): - augroup VaderTest - autocmd! - autocmd User ALEWantResults let g:want_results_signaled = 1 - autocmd User ALELintPre let g:lint_pre_signaled = 1 - augroup END - - " Even when all linters are disabled, we should send the signal. - let b:ale_linters = [] - ALELint - - Assert get(g:, 'want_results_signaled') - Assert !get(g:, 'lint_pre_signaled') - -Execute(ALEWantResults should set a variable indicating which buffer is being checked): - augroup VaderTest - autocmd! - autocmd User ALEWantResults let g:want_results_buffer_value = g:ale_want_results_buffer - augroup END - - let b:ale_linters = [] - ALELint - - AssertEqual bufnr(''), g:want_results_buffer_value - -Execute(ALEWantResults should lead to an ALELintPre signal if another source responds): - augroup VaderTest - autocmd! - autocmd User ALEWantResults call ale#other_source#StartChecking(bufnr(''), 'other-source-linter') - autocmd User ALELintPre let g:lint_pre_signaled = 1 - augroup END - - " Even when all linters are disabled, we should send the signal. - let b:ale_linters = [] - ALELint - - Assert get(g:, 'lint_pre_signaled') diff --git a/dotfiles/.vim/plugged/ale/test/test_parse_command_args.vader b/dotfiles/.vim/plugged/ale/test/test_parse_command_args.vader deleted file mode 100644 index 0103b967..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_parse_command_args.vader +++ /dev/null @@ -1,52 +0,0 @@ -After: - unlet! b:parse_result - - if exists(':ParseTest') - delcommand ParseTest - endif - -Execute(ale#args#Parse should handle empty input): - AssertEqual - \ [{}, ''], - \ ale#args#Parse([], '') - AssertEqual - \ [{}, ''], - \ ale#args#Parse(['foo', 'bar'], '') - -Execute(ale#args#Parse should parse commands correctly): - AssertEqual - \ [{'foo': '', 'bar': ''}, 'leave these alone'], - \ ale#args#Parse(['foo', 'bar'], '-foo -bar leave these alone') - AssertEqual - \ [{'foo': ''}, 'leave these alone'], - \ ale#args#Parse(['foo', 'bar'], '-foo leave these alone') - -Execute(ale#args#Parse should raise errors for unknown arguments): - AssertThrows call ale#args#Parse(['foo', 'bar'], '-nope leave these alone') - AssertEqual 'Invalid argument: -nope', g:vader_exception - -Execute(ale#args#Parse should stop parsing arguments after --): - AssertEqual - \ [{'foo': ''}, ' --nope leave these alone'], - \ ale#args#Parse(['foo', 'bar'], '-foo -- --nope leave these alone') - AssertEqual - \ [{}, '--'], - \ ale#args#Parse(['foo', 'bar'], '-- --') - AssertEqual - \ [{}, ''], - \ ale#args#Parse(['foo', 'bar'], '--') - -Execute(ale#args#Parse should work for an example command): - command! -nargs=* ParseTest let b:parse_result = ale#args#Parse(['foo', 'bar'], ) - - ParseTest - AssertEqual [{}, ''], b:parse_result - - ParseTest -foo - AssertEqual [{'foo': ''}, ''], b:parse_result - - ParseTest -foo -bar - AssertEqual [{'foo': '', 'bar': ''}, ''], b:parse_result - - ParseTest -foo -bar leave these alone - AssertEqual [{'foo': '', 'bar': ''}, 'leave these alone'], b:parse_result diff --git a/dotfiles/.vim/plugged/ale/test/test_path_dirname.vader b/dotfiles/.vim/plugged/ale/test/test_path_dirname.vader deleted file mode 100644 index 818a62a8..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_path_dirname.vader +++ /dev/null @@ -1,13 +0,0 @@ -Execute(ale#path#Dirname should return empty strings should be returned for empty values): - AssertEqual '', ale#path#Dirname('') - AssertEqual '', ale#path#Dirname(0) - AssertEqual '', ale#path#Dirname(v:null) - -Execute(ale#path#Dirname should return the dirname of paths): - AssertEqual '/foo', ale#path#Dirname('/foo/bar') - AssertEqual '/foo', ale#path#Dirname('/foo/bar/') - - if has('win32') - AssertEqual 'C:\foo', ale#path#Dirname('C:\foo\bar') - AssertEqual 'C:\foo', ale#path#Dirname('C:\foo\bar\') - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_path_equality.vader b/dotfiles/.vim/plugged/ale/test/test_path_equality.vader deleted file mode 100644 index ee6ae2c5..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_path_equality.vader +++ /dev/null @@ -1,82 +0,0 @@ -Before: - function! CheckPath(path) abort - return ale#path#IsBufferPath(bufnr(''), ale#path#Simplify(a:path)) - endfunction - -After: - delfunction CheckPath - -Execute(ale#path#Simplify should adjust paths correctly): - if has('unix') - " Multiple slashes should be removed correctly. - AssertEqual '/foo/bar/baz', ale#path#Simplify('////foo///bar///baz') - " Back slashes should be converted to forward slashes. - " This means some valid filenames are adjusted incorrectly, but in practice - " no filenames for code should contain back slashes, and adjusting slashes - " like this makes ALE work in MSYS. - AssertEqual 'foo/bar/baz', ale#path#Simplify('foo\bar\baz') - else - " Multiple slashes should be removed correctly. - AssertEqual '\foo\bar\baz', ale#path#Simplify('\\\foo\bar\baz') - " Forward slashes should be replaced with back slashes. - AssertEqual 'foo\bar\baz', ale#path#Simplify('foo/bar/baz') - endif - -Execute(ale#path#IsBufferPath should match simple relative paths): - call ale#test#SetFilename('app/foo.txt') - - Assert CheckPath('app/foo.txt'), 'No match for foo.txt' - Assert !CheckPath('app/bar.txt'), 'Bad match for bar.txt' - -Execute(ale#path#IsBufferPath should match relative paths with dots): - call ale#test#SetFilename('app/foo.txt') - - " Skip these checks on Windows. - if !has('win32') - Assert CheckPath('../../app/foo.txt'), 'No match for ../../app/foo.txt' - endif - -Execute(ale#path#IsBufferPath should match absolute paths): - silent file! foo.txt - - Assert CheckPath(getcwd() . '/foo.txt'), 'No match for foo.txt' - Assert !CheckPath(getcwd() . '/bar.txt'), 'Bad match for bar.txt' - -Execute(ale#path#IsBufferPath should match paths beginning with ./): - silent file! foo.txt - - if !has('win32') - Assert ale#path#IsBufferPath(bufnr(''), './foo.txt'), 'No match for ./foo.txt' - endif - -Execute(ale#path#IsBufferPath should match if our path ends with the test path): - silent file! foo/bar/baz.txt - - Assert CheckPath('bar/baz.txt'), 'No match for bar/baz.txt' - -Execute(ale#path#IsBufferPath should match paths with redundant slashes): - silent file! foo.txt - - Assert CheckPath(getcwd() . '////foo.txt'), 'No match for foo.txt' - -Execute(ale#path#IsBufferPath should accept various names for stdin): - Assert ale#path#IsBufferPath(bufnr(''), '-') - Assert ale#path#IsBufferPath(bufnr(''), 'stdin') - Assert ale#path#IsBufferPath(bufnr(''), '') - Assert ale#path#IsBufferPath(bufnr(''), '') - -Execute(ale#path#IsBufferPath should match files in /tmp): - call ale#test#SetFilename('app/test.ts') - - Assert ale#path#IsBufferPath(bufnr(''), tempname() . '/test.ts') - -Execute(ale#path#IsBufferPath should match Windows paths on Unix): - " This test should pass Unix. - " - " Back slashes in paths should be replaced with forward slashes, even though - " back slashes are valid in filenames on Unix. - if has('unix') - call ale#test#SetFilename('app/foo/test.ts') - - Assert ale#path#IsBufferPath(bufnr(''), 'foo\test.ts') - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_path_upwards.vader b/dotfiles/.vim/plugged/ale/test/test_path_upwards.vader deleted file mode 100644 index cd461a28..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_path_upwards.vader +++ /dev/null @@ -1,48 +0,0 @@ -Execute(ale#path#Upwards should return the correct path components): - if has('unix') - " Absolute paths should include / on the end. - AssertEqual - \ ['/foo/bar/baz', '/foo/bar', '/foo', '/'], - \ ale#path#Upwards('/foo/bar/baz') - AssertEqual - \ ['/foo/bar/baz', '/foo/bar', '/foo', '/'], - \ ale#path#Upwards('/foo/bar/baz///') - " Relative paths do not. - AssertEqual - \ ['foo/bar/baz', 'foo/bar', 'foo'], - \ ale#path#Upwards('foo/bar/baz') - AssertEqual - \ ['foo2/bar', 'foo2'], - \ ale#path#Upwards('foo//..////foo2////bar') - " Expect an empty List for empty strings. - AssertEqual [], ale#path#Upwards('') - endif - - if has('win32') - AssertEqual - \ ['C:\foo\bar\baz', 'C:\foo\bar', 'C:\foo', 'C:\'], - \ ale#path#Upwards('C:\foo\bar\baz') - AssertEqual - \ ['C:\foo\bar\baz', 'C:\foo\bar', 'C:\foo', 'C:\'], - \ ale#path#Upwards('C:\foo\bar\baz\\\') - AssertEqual - \ ['/foo\bar\baz', '/foo\bar', '/foo', '/'], - \ ale#path#Upwards('/foo/bar/baz') - AssertEqual - \ ['foo\bar\baz', 'foo\bar', 'foo'], - \ ale#path#Upwards('foo/bar/baz') - AssertEqual - \ ['foo\bar\baz', 'foo\bar', 'foo'], - \ ale#path#Upwards('foo\bar\baz') - " simplify() is used internally, and should sort out \ paths when actually - " running Windows, which we can't test here. - AssertEqual - \ ['foo2\bar', 'foo2'], - \ ale#path#Upwards('foo//..///foo2////bar') - " Expect an empty List for empty strings. - AssertEqual [], ale#path#Upwards('') - " Paths starting with // return / - AssertEqual - \ ['/foo2\bar', '/foo2', '/'], - \ ale#path#Upwards('//foo//..///foo2////bar') - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_path_uri.vader b/dotfiles/.vim/plugged/ale/test/test_path_uri.vader deleted file mode 100644 index e2daccf4..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_path_uri.vader +++ /dev/null @@ -1,73 +0,0 @@ -Before: - scriptencoding utf-8 - -Execute(ale#path#ToFileURI should work for Windows paths): - AssertEqual 'file:///C:/foo/bar/baz.tst', ale#path#ToFileURI('C:\foo\bar\baz.tst') - AssertEqual 'foo/bar/baz.tst', ale#path#ToFileURI('foo\bar\baz.tst') - -Execute(ale#path#FromFileURI should work for Unix paths): - AssertEqual '/foo/bar/baz.tst', ale#path#FromFileURI('file:///foo/bar/baz.tst') - AssertEqual '/foo/bar/baz.tst', ale#path#FromFileURI('file:/foo/bar/baz.tst') - AssertEqual '/foo/bar/baz.tst', ale#path#FromFileURI('FILE:///foo/bar/baz.tst') - AssertEqual '/foo/bar/baz.tst', ale#path#FromFileURI('FILE:/foo/bar/baz.tst') - -Execute(ale#path#FromFileURI should work for Windows paths): - if has('win32') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('file:///C:/foo/bar/baz.tst') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('file:/C:/foo/bar/baz.tst') - AssertEqual 'c:\foo\bar\baz.tst', ale#path#FromFileURI('file:///c:/foo/bar/baz.tst') - AssertEqual 'c:\foo\bar\baz.tst', ale#path#FromFileURI('file:/c:/foo/bar/baz.tst') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('FILE:///C:/foo/bar/baz.tst') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('FILE:/C:/foo/bar/baz.tst') - else - AssertEqual '/C:/foo/bar/baz.tst', ale#path#FromFileURI('file:///C:/foo/bar/baz.tst') - AssertEqual '/C:/foo/bar/baz.tst', ale#path#FromFileURI('file:/C:/foo/bar/baz.tst') - AssertEqual '/c:/foo/bar/baz.tst', ale#path#FromFileURI('file:///c:/foo/bar/baz.tst') - AssertEqual '/c:/foo/bar/baz.tst', ale#path#FromFileURI('file:/c:/foo/bar/baz.tst') - AssertEqual '/C:/foo/bar/baz.tst', ale#path#FromFileURI('FILE:///C:/foo/bar/baz.tst') - AssertEqual '/C:/foo/bar/baz.tst', ale#path#FromFileURI('FILE:/C:/foo/bar/baz.tst') - endif - -Execute(ale#path#FromFileURI parse Windows paths with a pipe): - if has('win32') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('file:///C|/foo/bar/baz.tst') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('file:/C|/foo/bar/baz.tst') - AssertEqual 'c:\foo\bar\baz.tst', ale#path#FromFileURI('file:///c|/foo/bar/baz.tst') - AssertEqual 'c:\foo\bar\baz.tst', ale#path#FromFileURI('file:/c|/foo/bar/baz.tst') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('FILE:///C|/foo/bar/baz.tst') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('FILE:/C|/foo/bar/baz.tst') - else - AssertEqual '/C|/foo/bar/baz.tst', ale#path#FromFileURI('file:///C|/foo/bar/baz.tst') - AssertEqual '/C|/foo/bar/baz.tst', ale#path#FromFileURI('file:/C|/foo/bar/baz.tst') - AssertEqual '/c|/foo/bar/baz.tst', ale#path#FromFileURI('file:///c|/foo/bar/baz.tst') - AssertEqual '/c|/foo/bar/baz.tst', ale#path#FromFileURI('file:/c|/foo/bar/baz.tst') - AssertEqual '/C|/foo/bar/baz.tst', ale#path#FromFileURI('FILE:///C|/foo/bar/baz.tst') - AssertEqual '/C|/foo/bar/baz.tst', ale#path#FromFileURI('FILE:/C|/foo/bar/baz.tst') - endif - -Execute(ale#path#FromFileURI should handle the colon for the drive letter being encoded): - " These URIs shouldn't be created, but we'll handle them anyway. - if has('win32') - AssertEqual 'C:\foo\bar\baz.tst', ale#path#FromFileURI('file:///C%3A/foo/bar/baz.tst') - else - AssertEqual '/C:/foo/bar/baz.tst', ale#path#FromFileURI('file:///C%3A/foo/bar/baz.tst') - endif - -Execute(ale#path#ToFileURI should work for Unix paths): - AssertEqual 'file:///foo/bar/baz.tst', ale#path#ToFileURI('/foo/bar/baz.tst') - AssertEqual 'foo/bar/baz.tst', ale#path#ToFileURI('foo/bar/baz.tst') - -Execute(ale#path#ToFileURI should keep safe characters): - AssertEqual '//a-zA-Z0-9$-_.!*''(),', ale#path#ToFileURI('\/a-zA-Z0-9$-_.!*''(),') - -Execute(ale#path#ToFileURI should percent encode unsafe characters): - AssertEqual '%20%2b%3a%3f%26%3d', ale#path#ToFileURI(' +:?&=') - -Execute(ale#path#FromFileURI should decode percent encodings): - AssertEqual ' +:?&=', ale#path#FromFileURI('%20%2b%3a%3f%26%3d') - -Execute(ale#path#ToFileURI should handle UTF-8): - AssertEqual 'file:///T%c3%a9l%c3%a9chargement', ale#path#ToFileURI('/Téléchargement') - -Execute(ale#path#FromFileURI should handle UTF-8): - AssertEqual '/Téléchargement', ale#path#FromFileURI('file:///T%C3%A9l%C3%A9chargement') diff --git a/dotfiles/.vim/plugged/ale/test/test_pattern_options.vader b/dotfiles/.vim/plugged/ale/test/test_pattern_options.vader deleted file mode 100644 index 3b6500e5..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_pattern_options.vader +++ /dev/null @@ -1,107 +0,0 @@ -Before: - Save g:ale_pattern_options - Save g:ale_pattern_options_enabled - Save b:ale_quitting - Save b:ale_original_filetype - Save &filetype - - unlet! b:ale_file_changed - - let g:ale_pattern_options_enabled = 1 - let g:ale_pattern_options = {} - - let b:ale_enabled = 0 - let b:some_option = 0 - - call ale#test#SetDirectory('/testplugin/test') - -After: - Restore - - unlet! b:ale_enabled - unlet! b:some_option - - call ale#test#RestoreDirectory() - -Execute(The pattern options function should work when there are no patterns): - call ale#test#SetFilename('foobar.js') - call ale#events#ReadOrEnterEvent(bufnr('')) - -Execute(Buffer variables should be set when filename patterns match): - let g:ale_pattern_options = { - \ 'baz.*\.js': { - \ 'ale_enabled': 1, - \ 'some_option': 347, - \ '&filetype': 'pattern_option_set_filetype', - \ }, - \} - - call ale#test#SetFilename('foobar.js') - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 0, b:ale_enabled - AssertEqual 0, b:some_option - - call ale#test#SetFilename('bazboz.js') - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 1, b:ale_enabled - AssertEqual 347, b:some_option - AssertEqual 'pattern_option_set_filetype', &filetype - -Execute(Multiple pattern matches should be applied): - let g:ale_pattern_options = { - \ 'foo': { - \ 'some_option': 666, - \ }, - \ 'bar': { - \ 'ale_enabled': 1, - \ 'some_option': 123, - \ }, - \ 'notmatched': { - \ 'some_option': 489, - \ 'ale_enabled': 0, - \ }, - \} - - call ale#test#SetFilename('foobar.js') - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 1, b:ale_enabled - AssertEqual 666, b:some_option - -Execute(Patterns should not be applied when the setting is disabled): - let g:ale_pattern_options_enabled = 0 - let g:ale_pattern_options = {'foo': {'some_option': 666}} - - call ale#test#SetFilename('foobar.js') - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 0, b:some_option - -" This test is important for making sure we update the sorted items. -Execute(Patterns should be applied after the Dictionary changes): - call ale#test#SetFilename('foobar.js') - - let g:ale_pattern_options = {} - - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 0, b:some_option - - let g:ale_pattern_options['foo'] = {'some_option': 666} - - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 666, b:some_option - -Execute(SetOptions should tolerate settings being unset): - " This might happen if ALE is loaded in a weird way, so tolerate it. - unlet! g:ale_pattern_options - unlet! g:ale_pattern_options_enabled - - call ale#events#ReadOrEnterEvent(bufnr('')) - - let g:ale_pattern_options_enabled = 1 - - call ale#events#ReadOrEnterEvent(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_prepare_command.vader b/dotfiles/.vim/plugged/ale/test/test_prepare_command.vader deleted file mode 100644 index 4e963b82..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_prepare_command.vader +++ /dev/null @@ -1,96 +0,0 @@ -Before: - Save &shell - Save &shellcmdflag - Save g:ale_shell - Save g:ale_shell_arguments - - Save b:ale_shell - Save b:ale_shell_arguments - - unlet! b:ale_shell - unlet! b:ale_shell_arguments - - unlet! g:ale_shell - unlet! g:ale_shell_arguments - -After: - Restore - -Execute(sh should be used when the shell is fish): - if !has('win32') - " Set something else, so we will replace that too. - let &shellcmdflag = '-f' - let &shell = 'fish' - - AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar') - - let &shell = '/usr/bin/fish' - - AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar') - - let &shell = '/usr/local/bin/fish' - - AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar') - endif - -Execute(sh should be used when the shell is powershell): - if !has('win32') - " Set something else, so we will replace that too. - let &shellcmdflag = '-f' - let &shell = 'pwsh' - - AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar') - - let &shell = '/usr/bin/pwsh' - - AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar') - - let &shell = '/usr/local/bin/pwsh' - - AssertEqual ['/bin/sh', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar') - endif - -Execute(Other shells should be used when set): - if !has('win32') - let &shell = '/bin/bash' - let &shellcmdflag = '-c' - let g:ale_shell = &shell - - AssertEqual ['/bin/bash', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), 'foobar') - endif - -Execute(cmd /s/c as a string should be used on Windows): - if has('win32') - let &shell = 'who cares' - let &shellcmdflag = 'whatever' - - AssertEqual 'cmd /s/c "foobar"', ale#job#PrepareCommand(bufnr(''), 'foobar') - endif - -Execute(Setting g:ale_shell should cause ale#job#PrepareCommand to use set shell): - let g:ale_shell = '/foo/bar' - - if has('win32') - AssertEqual ['/foo/bar', '/c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar") - else - AssertEqual ['/foo/bar', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar") - endif - - let g:ale_shell_arguments = '-x' - - AssertEqual ['/foo/bar', '-x', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar") - -Execute(Setting b:ale_shell should cause ale#job#PrepareCommand to use set shell): - let g:ale_shell = '/wrong/foo/bar' - let b:ale_shell = '/foo/bar' - - if has('win32') - AssertEqual ['/foo/bar', '/c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar") - else - AssertEqual ['/foo/bar', '-c', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar") - endif - - let g:ale_shell_arguments = '--verbose -x' - let b:ale_shell_arguments = '-x' - - AssertEqual ['/foo/bar', '-x', 'foobar'], ale#job#PrepareCommand(bufnr(''), "foobar") diff --git a/dotfiles/.vim/plugged/ale/test/test_puppet_path_detection.vader b/dotfiles/.vim/plugged/ale/test/test_puppet_path_detection.vader deleted file mode 100644 index e918e916..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_puppet_path_detection.vader +++ /dev/null @@ -1,22 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - - runtime ale_linters/puppet/languageserver.vim - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(old-style module should find its root correctly): - call ale#test#SetFilename('test-files/puppet/old-style-module/manifests/init.pp') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/puppet/old-style-module'), - \ ale_linters#puppet#languageserver#GetProjectRoot(bufnr('')) - -Execute(new-style module should find its root correctly): - call ale#test#SetFilename('test-files/puppet/new-style-module/lib/puppet/types/exampletype.rb') - - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/puppet/new-style-module'), - \ ale_linters#puppet#languageserver#GetProjectRoot(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_python_find_project_root.vader b/dotfiles/.vim/plugged/ale/test/test_python_find_project_root.vader deleted file mode 100644 index e323c866..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_python_find_project_root.vader +++ /dev/null @@ -1,11 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - -After: - call ale#test#RestoreDirectory() - -Execute(Detect root of Python project with .flake8 correctly): - call ale#test#SetFilename('test-files/python/python-package-project/package-name/module.py') - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/python/python-package-project'), - \ ale#python#FindProjectRoot(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_python_pipenv.vader b/dotfiles/.vim/plugged/ale/test/test_python_pipenv.vader deleted file mode 100644 index 041e2874..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_python_pipenv.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - -After: - call ale#test#RestoreDirectory() - -Execute(ale#python#PipenvPresent is true when a pipenv environment is present): - call ale#test#SetFilename('test-files/python/pipenv/whatever.py') - - AssertEqual - \ ale#python#PipenvPresent(bufnr('%')), - \ 1 - -Execute(ale#python#PipenvPresent is false when no pipenv environment is present): - call ale#test#SetFilename('test-files/python/no_pipenv/whatever.py') - - AssertEqual - \ ale#python#PipenvPresent(bufnr('%')), - \ 0 diff --git a/dotfiles/.vim/plugged/ale/test/test_python_poetry.vader b/dotfiles/.vim/plugged/ale/test/test_python_poetry.vader deleted file mode 100644 index 8197b786..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_python_poetry.vader +++ /dev/null @@ -1,19 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - -After: - call ale#test#RestoreDirectory() - -Execute(ale#python#poetryPresent is true when a poetry environment is present): - call ale#test#SetFilename('test-files/python/poetry/whatever.py') - - AssertEqual - \ ale#python#PoetryPresent(bufnr('%')), - \ 1 - -Execute(ale#python#poetryPresent is false when no poetry environment is present): - call ale#test#SetFilename('test-files/python/no_poetry/whatever.py') - - AssertEqual - \ ale#python#PoetryPresent(bufnr('%')), - \ 0 diff --git a/dotfiles/.vim/plugged/ale/test/test_python_traceback.vader b/dotfiles/.vim/plugged/ale/test/test_python_traceback.vader deleted file mode 100644 index 6a659986..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_python_traceback.vader +++ /dev/null @@ -1,79 +0,0 @@ -Execute(ale#python#HandleTraceback returns empty List for empty lines): - AssertEqual - \ [], - \ ale#python#HandleTraceback([], 10) - -Execute(ale#python#HandleTraceback returns traceback, when present): - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'Exception: Example error (See :ALEDetail)', - \ 'detail': join([ - \ 'Traceback (most recent call last):', - \ ' File "./example.py", line 5, in ', - \ ' raise Exception(''Example message'')', - \ 'Exception: Example error', - \ ], "\n"), - \ }], - \ ale#python#HandleTraceback([ - \ 'Traceback (most recent call last):', - \ ' File "./example.py", line 5, in ', - \ ' raise Exception(''Example message'')', - \ 'Exception: Example error', - \ ], 1) - -" SyntaxError has extra output lines about the source -Execute(ale#python#HandleTraceback returns SyntaxError traceback): - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'SyntaxError: invalid syntax (See :ALEDetail)', - \ 'detail': join([ - \ 'Traceback (most recent call last):', - \ ' File "", line 1, in ', - \ ' File "example.py", line 5', - \ ' +', - \ ' ^', - \ 'SyntaxError: invalid syntax', - \ ], "\n"), - \ }], - \ ale#python#HandleTraceback([ - \ 'Traceback (most recent call last):', - \ ' File "", line 1, in ', - \ ' File "example.py", line 5', - \ ' +', - \ ' ^', - \ 'SyntaxError: invalid syntax', - \ ], 1) - -Execute(ale#python#HandleTraceback ignores traceback after line limit): - AssertEqual - \ [], - \ ale#python#HandleTraceback([ - \ '', - \ 'Traceback (most recent call last):', - \ ' File "./example.py", line 5, in ', - \ ' raise Exception(''Example message'')', - \ 'Exception: Example error', - \ ], 1) - -Execute(ale#python#HandleTraceback doesn't include later lines in detail): - AssertEqual - \ [{ - \ 'lnum': 1, - \ 'text': 'Exception: Example error (See :ALEDetail)', - \ 'detail': join([ - \ 'Traceback (most recent call last):', - \ ' File "./example.py", line 5, in ', - \ ' raise Exception(''Example message'')', - \ 'Exception: Example error', - \ ], "\n"), - \ }], - \ ale#python#HandleTraceback([ - \ 'Traceback (most recent call last):', - \ ' File "./example.py", line 5, in ', - \ ' raise Exception(''Example message'')', - \ 'Exception: Example error', - \ 'file:1:2: Style issue', - \ 'file:3:4: Non-style issue', - \ ], 1) diff --git a/dotfiles/.vim/plugged/ale/test/test_python_virtualenv.vader b/dotfiles/.vim/plugged/ale/test/test_python_virtualenv.vader deleted file mode 100644 index b44c5fa2..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_python_virtualenv.vader +++ /dev/null @@ -1,12 +0,0 @@ -Before: - Save $VIRTUAL_ENV - let $VIRTUAL_ENV = "/opt/example/" - -After: - Restore - -Execute(ale#python#FindVirtualenv falls back to $VIRTUAL_ENV when no directories match): - AssertEqual - \ ale#python#FindVirtualenv(bufnr('%')), - \ '/opt/example/', - \ 'Expected VIRTUAL_ENV environment variable to be used, but it was not' diff --git a/dotfiles/.vim/plugged/ale/test/test_quickfix_deduplication.vader b/dotfiles/.vim/plugged/ale/test/test_quickfix_deduplication.vader deleted file mode 100644 index 9cb8b931..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_quickfix_deduplication.vader +++ /dev/null @@ -1,50 +0,0 @@ -Before: - Save g:ale_buffer_info - -After: - Restore - -Execute: - " Results from multiple buffers should be gathered together. - " Equal problems should be de-duplicated. - let g:ale_buffer_info = { - \ '1': {'loclist': [ - \ {'type': 'E', 'bufnr': 2, 'lnum': 1, 'col': 2, 'text': 'foo'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 1, 'col': 5, 'text': 'bar'}, - \ {'type': 'E', 'bufnr': -1, 'filename': 'c', 'lnum': 3, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 5, 'col': 4, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 5, 'col': 5, 'text': 'foo'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 2, 'col': 10, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 3, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 5, 'col': 5, 'text': 'x'}, - \ {'type': 'E', 'bufnr': -1, 'filename': 'b', 'lnum': 4, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': -1, 'filename': 'b', 'lnum': 5, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 3, 'lnum': 1, 'col': 1, 'text': 'foo'}, - \ ]}, - \ '2': {'loclist': [ - \ {'type': 'E', 'bufnr': 1, 'lnum': 2, 'col': 10, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 5, 'col': 5, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 1, 'col': 2, 'text': 'foo'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 3, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 5, 'col': 4, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 1, 'col': 5, 'text': 'bar'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 5, 'col': 5, 'text': 'another error'}, - \ ]}, - \} - - AssertEqual - \ [ - \ {'type': 'E', 'bufnr': -1, 'filename': 'b', 'lnum': 4, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': -1, 'filename': 'b', 'lnum': 5, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': -1, 'filename': 'c', 'lnum': 3, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 2, 'col': 10, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 3, 'col': 2, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 5, 'col': 4, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 1, 'lnum': 5, 'col': 5, 'text': 'x'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 1, 'col': 2, 'text': 'foo'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 1, 'col': 5, 'text': 'bar'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 5, 'col': 5, 'text': 'another error'}, - \ {'type': 'E', 'bufnr': 2, 'lnum': 5, 'col': 5, 'text': 'foo'}, - \ {'type': 'E', 'bufnr': 3, 'lnum': 1, 'col': 1, 'text': 'foo'}, - \ ], - \ ale#list#GetCombinedList() diff --git a/dotfiles/.vim/plugged/ale/test/test_quitting_variable.vader b/dotfiles/.vim/plugged/ale/test/test_quitting_variable.vader deleted file mode 100644 index 32eb0c36..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_quitting_variable.vader +++ /dev/null @@ -1,39 +0,0 @@ -Before: - Save g:ale_enabled - - unlet! b:ale_quitting - let g:ale_enabled = 0 - -After: - Restore - - unlet! b:ale_quitting - unlet! b:time_before - -Execute(QuitEvent should set b:ale_quitting some time from the clock): - let b:time_before = ale#events#ClockMilliseconds() - - call ale#events#QuitEvent(bufnr('')) - - Assert b:ale_quitting >= b:time_before - Assert b:ale_quitting <= ale#events#ClockMilliseconds() - -Execute(ReadOrEnterEvent should set b:ale_quitting to 0): - let b:ale_quitting = 1 - - call ale#events#ReadOrEnterEvent(bufnr('')) - - AssertEqual 0, b:ale_quitting - -Execute(The QuitRecently function should work when the variable isn't set): - AssertEqual 0, ale#events#QuitRecently(bufnr('')) - -Execute(The QuitRecently function should return 1 when ALE quit recently): - let b:ale_quitting = ale#events#ClockMilliseconds() - - AssertEqual 1, ale#events#QuitRecently(bufnr('')) - -Execute(The QuitRecently function should return 0 when a second has passed): - let b:ale_quitting = ale#events#ClockMilliseconds() - 1001 - - AssertEqual 0, ale#events#QuitRecently(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_redundant_tsserver_rendering_avoided.vader b/dotfiles/.vim/plugged/ale/test/test_redundant_tsserver_rendering_avoided.vader deleted file mode 100644 index 05660d4e..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_redundant_tsserver_rendering_avoided.vader +++ /dev/null @@ -1,178 +0,0 @@ -Before: - Save g:ale_buffer_info - Save g:ale_disable_lsp - Save g:ale_lsp_suggestions - - let g:ale_disable_lsp = 0 - let g:ale_lsp_suggestions = 1 - unlet! b:ale_disable_lsp - - function! CreateError(type, message) abort - let l:diagnostics = [] - - if !empty(a:message) - let l:diagnostics = [{ - \ 'start': {'line': 1, 'offset': 1}, - \ 'end': {'line': 1, 'offset':1}, - \ 'text': a:message, - \ 'code': 1005, - \}] - endif - - return { - \ 'seq': 0, - \ 'type': 'event', - \ 'event': a:type, - \ 'body': {'file': expand('%:p'), 'diagnostics': l:diagnostics}, - \} - endfunction - - function! CreateLoclist(message) abort - let l:list = [] - - if !empty(a:message) - let l:list = [{ - \ 'lnum': 1, - \ 'col': 1, - \ 'end_lnum': 1, - \ 'end_col': 1, - \ 'text': a:message, - \}] - endif - - return l:list - endfunction - - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('filename.ts') - - runtime autoload/ale/engine.vim - - let g:ale_buffer_info = {bufnr(''): {'loclist': [], 'active_linter_list': []}} - let g:ale_handle_loclist_called = 0 - - function! ale#engine#HandleLoclist(linter_name, buffer, loclist, from_other_source) abort - let g:ale_handle_loclist_called = 1 - endfunction - -After: - Restore - - delfunction CreateError - delfunction CreateLoclist - - call ale#test#RestoreDirectory() - - runtime autoload/ale/engine.vim - -Execute(An initial empty list of syntax errors should be ignored): - call ale#lsp_linter#HandleLSPResponse(1, CreateError('syntaxDiag', '')) - - Assert !g:ale_handle_loclist_called - -Execute(An initial list of syntax errors should be handled): - call ale#lsp_linter#HandleLSPResponse(1, CreateError('syntaxDiag', 'x')) - - Assert g:ale_handle_loclist_called - -Execute(Subsequent empty lists should be ignored): - let g:ale_buffer_info[bufnr('')].syntax_loclist = [] - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('syntaxDiag', '')) - - Assert !g:ale_handle_loclist_called - -Execute(Empty then non-empty syntax errors should be handled): - let g:ale_buffer_info[bufnr('')].syntax_loclist = [] - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('syntaxDiag', 'x')) - - Assert g:ale_handle_loclist_called - -Execute(Non-empty then empty syntax errors should be handled): - let g:ale_buffer_info[bufnr('')].syntax_loclist = CreateLoclist('x') - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('syntaxDiag', '')) - - Assert g:ale_handle_loclist_called - -Execute(Non-empty then non-empty syntax errors should be handled): - let g:ale_buffer_info[bufnr('')].syntax_loclist = CreateLoclist('x') - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('syntaxDiag', 'x')) - - Assert g:ale_handle_loclist_called - -Execute(An initial empty list of semantic errors should be ignored): - call ale#lsp_linter#HandleLSPResponse(1, CreateError('semanticDiag', '')) - - Assert !g:ale_handle_loclist_called - -Execute(An initial list of semantic errors should be handled): - call ale#lsp_linter#HandleLSPResponse(1, CreateError('semanticDiag', 'x')) - - Assert g:ale_handle_loclist_called - -Execute(Subsequent empty lists should be ignored - semantic): - let g:ale_buffer_info[bufnr('')].semantic_loclist = [] - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('semanticDiag', '')) - - Assert !g:ale_handle_loclist_called - -Execute(Empty then non-empty semantic errors should be handled): - let g:ale_buffer_info[bufnr('')].semantic_loclist = [] - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('semanticDiag', 'x')) - - Assert g:ale_handle_loclist_called - -Execute(Non-empty then empty semantic errors should be handled): - let g:ale_buffer_info[bufnr('')].semantic_loclist = CreateLoclist('x') - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('semanticDiag', '')) - - Assert g:ale_handle_loclist_called - -Execute(Non-empty then non-empty semantic errors should be handled): - let g:ale_buffer_info[bufnr('')].semantic_loclist = CreateLoclist('x') - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('semanticDiag', 'x')) - - Assert g:ale_handle_loclist_called - -Execute(Subsequent empty lists should be ignored - suggestion): - let g:ale_buffer_info[bufnr('')].suggestion_loclist = [] - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', '')) - - Assert !g:ale_handle_loclist_called - -Execute(You should be able to disable suggestions): - let g:ale_lsp_suggestions = 0 - let g:ale_buffer_info[bufnr('')].suggestion_loclist = [] - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', 'x')) - - Assert !g:ale_handle_loclist_called - -Execute(Empty then non-empty suggestion messages should be handled): - let g:ale_buffer_info[bufnr('')].suggestion_loclist = [] - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', 'x')) - - Assert g:ale_handle_loclist_called - -Execute(Non-empty then empt suggestion messages should be handled): - let g:ale_buffer_info[bufnr('')].suggestion_loclist = CreateLoclist('x') - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', '')) - - Assert g:ale_handle_loclist_called - -Execute(Non-empty then non-empty suggestion messages should be handled): - let g:ale_buffer_info[bufnr('')].suggestion_loclist = CreateLoclist('x') - - call ale#lsp_linter#HandleLSPResponse(1, CreateError('suggestionDiag', 'x')) - - Assert g:ale_handle_loclist_called diff --git a/dotfiles/.vim/plugged/ale/test/test_regex_escaping.vader b/dotfiles/.vim/plugged/ale/test/test_regex_escaping.vader deleted file mode 100644 index b79b8c56..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_regex_escaping.vader +++ /dev/null @@ -1,4 +0,0 @@ -Execute(ale#util#EscapePCRE should escape strings for PCRE or RE2 appropriately): - AssertEqual '\\\^\$\*\+\?\.\(\)\|\{\}\[\]', ale#util#EscapePCRE('\^$*+?.()|{}[]') - AssertEqual 'abcABC09', ale#util#EscapePCRE('abcABC09') - AssertEqual '/', ale#util#EscapePCRE('/') diff --git a/dotfiles/.vim/plugged/ale/test/test_rename.vader b/dotfiles/.vim/plugged/ale/test/test_rename.vader deleted file mode 100644 index 83f0aa7e..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_rename.vader +++ /dev/null @@ -1,504 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('dummy.txt') - - let g:old_filename = expand('%:p') - let g:Callback = '' - let g:expr_list = [] - let g:message_list = [] - let g:handle_code_action_called = 0 - let g:code_actions = [] - let g:options = {} - let g:capability_checked = '' - let g:conn_id = v:null - let g:InitCallback = v:null - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/rename.vim - runtime autoload/ale/code_action.vim - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - - if a:linter.lsp is# 'tsserver' - call ale#lsp#MarkConnectionAsTsserver(g:conn_id) - endif - - let l:details = { - \ 'command': 'foobar', - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': '/foo/bar', - \} - - let g:InitCallback = {-> ale#lsp_linter#OnInit(a:linter, l:details, a:Callback)} - endfunction - - function! ale#lsp#HasCapability(conn_id, capability) abort - let g:capability_checked = a:capability - - return 1 - endfunction - - function! ale#lsp#RegisterCallback(conn_id, callback) abort - let g:Callback = a:callback - endfunction - - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 42 - endfunction - - function! ale#util#Execute(expr) abort - call add(g:expr_list, a:expr) - endfunction - - function! ale#code_action#HandleCodeAction(code_action, options) abort - let g:handle_code_action_called = 1 - AssertEqual !&hidden, get(a:options, 'should_save', 0) - call add(g:code_actions, a:code_action) - endfunction - - function! ale#util#Input(message, value) abort - return 'a-new-name' - endfunction - - call ale#rename#SetMap({ - \ 3: { - \ 'old_name': 'oldName', - \ 'new_name': 'aNewName', - \ }, - \}) - -After: - if g:conn_id isnot v:null - call ale#lsp#RemoveConnectionWithID(g:conn_id) - endif - - call ale#rename#SetMap({}) - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - unlet! g:capability_checked - unlet! g:InitCallback - unlet! g:old_filename - unlet! g:conn_id - unlet! g:Callback - unlet! g:message_list - unlet! g:expr_list - unlet! b:ale_linters - unlet! g:options - unlet! g:code_actions - unlet! g:handle_code_action_called - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/rename.vim - runtime autoload/ale/code_action.vim - -Execute(Other messages for the tsserver handler should be ignored): - call ale#rename#HandleTSServerResponse(1, {'command': 'foo'}) - AssertEqual g:handle_code_action_called, 0 - -Execute(Failed rename responses should be handled correctly): - call ale#rename#SetMap({3: {'old_name': 'oldName', 'new_name': 'a-test'}}) - call ale#rename#HandleTSServerResponse( - \ 1, - \ {'command': 'rename', 'request_seq': 3} - \) - AssertEqual g:handle_code_action_called, 0 - -Given typescript(Some typescript file): - foo - somelongerline - bazxyzxyzxyz - -Execute(Code actions from tsserver should be handled): - call ale#rename#HandleTSServerResponse(1, { - \ 'command': 'rename', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': { - \ 'locs': [ - \ { - \ 'file': '/foo/bar/file1.ts', - \ 'locs': [ - \ { - \ 'start': { - \ 'line': 1, - \ 'offset': 2, - \ }, - \ 'end': { - \ 'line': 3, - \ 'offset': 4, - \ }, - \ }, - \ ], - \ }, - \ { - \ 'file': '/foo/bar/file2.ts', - \ 'locs': [ - \ { - \ 'start': { - \ 'line': 10, - \ 'offset': 20, - \ }, - \ 'end': { - \ 'line': 30, - \ 'offset': 40, - \ }, - \ }, - \ ], - \ }, - \ ] - \ }, - \}) - - AssertEqual - \ [ - \ { - \ 'description': 'rename', - \ 'changes': [ - \ { - \ 'fileName': '/foo/bar/file1.ts', - \ 'textChanges': [ - \ { - \ 'start': { - \ 'line': 1, - \ 'offset': 2, - \ }, - \ 'end': { - \ 'line': 3, - \ 'offset': 4, - \ }, - \ 'newText': 'aNewName', - \ }, - \ ], - \ }, - \ { - \ 'fileName': '/foo/bar/file2.ts', - \ 'textChanges': [ - \ { - \ 'start': { - \ 'line': 10, - \ 'offset': 20, - \ }, - \ 'end': { - \ 'line': 30, - \ 'offset': 40, - \ }, - \ 'newText': 'aNewName', - \ }, - \ ], - \ }, - \ ], - \ } - \ ], - \ g:code_actions - -Execute(HandleTSServerResponse does nothing when no data in rename_map): - call ale#rename#HandleTSServerResponse(1, { - \ 'command': 'rename', - \ 'request_seq': -9, - \ 'success': v:true, - \ 'body': {} - \}) - - AssertEqual g:handle_code_action_called, 0 - -Execute(Prints a tsserver error message when unsuccessful): - call ale#rename#HandleTSServerResponse(1, { - \ 'command': 'rename', - \ 'request_seq': 3, - \ 'success': v:false, - \ 'message': 'This symbol cannot be renamed', - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''Error renaming "oldName" to: "aNewName". ' . - \ 'Reason: This symbol cannot be renamed'''], g:expr_list - -Execute(Does nothing when no changes): - call ale#rename#HandleTSServerResponse(1, { - \ 'command': 'rename', - \ 'request_seq': 3, - \ 'success': v:true, - \ 'body': { - \ 'locs': [] - \ } - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''Error renaming "oldName" to: "aNewName"'''], g:expr_list - -Execute(tsserver rename requests should be sent): - call ale#rename#SetMap({}) - call ale#linter#Reset() - - runtime ale_linters/typescript/tsserver.vim - call setpos('.', [bufnr(''), 2, 5, 0]) - - ALERename - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'rename', g:capability_checked - AssertEqual - \ 'function(''ale#rename#HandleTSServerResponse'')', - \ string(g:Callback) - AssertEqual - \ [ - \ ale#lsp#tsserver_message#Change(bufnr('')), - \ [0, 'ts@rename', { - \ 'file': expand('%:p'), - \ 'line': 2, - \ 'offset': 5, - \ 'arguments': { - \ 'findInComments': g:ale_rename_tsserver_find_in_comments, - \ 'findInStrings': g:ale_rename_tsserver_find_in_strings, - \ }, - \ }] - \ ], - \ g:message_list - AssertEqual {'42': {'old_name': 'somelongerline', 'new_name': 'a-new-name'}}, - \ ale#rename#GetMap() - -Given python(Some Python file): - foo - somelongerline - bazxyzxyzxyz - -Execute(Code actions from LSP should be handled): - call ale#rename#HandleLSPResponse(1, { - \ 'id': 3, - \ 'result': { - \ 'changes': { - \ 'file:///foo/bar/file1.ts': [ - \ { - \ 'range': { - \ 'start': { - \ 'line': 1, - \ 'character': 2, - \ }, - \ 'end': { - \ 'line': 3, - \ 'character': 4, - \ }, - \ }, - \ 'newText': 'bla123' - \ }, - \ ], - \ }, - \ }, - \}) - - AssertEqual - \ [ - \ { - \ 'description': 'rename', - \ 'changes': [ - \ { - \ 'fileName': '/foo/bar/file1.ts', - \ 'textChanges': [ - \ { - \ 'start': { - \ 'line': 2, - \ 'offset': 3, - \ }, - \ 'end': { - \ 'line': 4, - \ 'offset': 5, - \ }, - \ 'newText': 'bla123', - \ }, - \ ], - \ }, - \ ], - \ } - \ ], - \ g:code_actions - -Execute(DocumentChanges from LSP should be handled): - call ale#rename#HandleLSPResponse(1, { - \ 'id': 3, - \ 'result': { - \ 'documentChanges': [ - \ { - \ 'textDocument': { - \ 'version': 1.0, - \ 'uri': 'file:///foo/bar/file1.ts', - \ }, - \ 'edits': [ - \ { - \ 'range': { - \ 'start': { - \ 'line': 1, - \ 'character': 2, - \ }, - \ 'end': { - \ 'line': 3, - \ 'character': 4, - \ }, - \ }, - \ 'newText': 'bla123', - \ }, - \ ], - \ }, - \ ], - \ }, - \}) - - AssertEqual - \ [ - \ { - \ 'description': 'rename', - \ 'changes': [ - \ { - \ 'fileName': '/foo/bar/file1.ts', - \ 'textChanges': [ - \ { - \ 'start': { - \ 'line': 2, - \ 'offset': 3, - \ }, - \ 'end': { - \ 'line': 4, - \ 'offset': 5, - \ }, - \ 'newText': 'bla123', - \ }, - \ ], - \ }, - \ ], - \ } - \ ], - \ g:code_actions - -Execute(Single DocumentChange from LSP should be handled): - call ale#rename#HandleLSPResponse(1, { - \ 'id': 3, - \ 'result': { - \ 'documentChanges': { - \ 'textDocument': { - \ 'version': 1.0, - \ 'uri': 'file:///foo/bar/file1.ts', - \ }, - \ 'edits': [ - \ { - \ 'range': { - \ 'start': { - \ 'line': 1, - \ 'character': 2, - \ }, - \ 'end': { - \ 'line': 3, - \ 'character': 4, - \ }, - \ }, - \ 'newText': 'bla123', - \ }, - \ ], - \ }, - \ }, - \}) - - AssertEqual - \ [ - \ { - \ 'description': 'rename', - \ 'changes': [ - \ { - \ 'fileName': '/foo/bar/file1.ts', - \ 'textChanges': [ - \ { - \ 'start': { - \ 'line': 2, - \ 'offset': 3, - \ }, - \ 'end': { - \ 'line': 4, - \ 'offset': 5, - \ }, - \ 'newText': 'bla123', - \ }, - \ ], - \ }, - \ ], - \ } - \ ], - \ g:code_actions -Execute(LSP should perform no action when no result): - call ale#rename#HandleLSPResponse(1, { - \ 'id': 3, - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''No rename result received from server'''], g:expr_list - -Execute(LSP should perform no action when no changes): - call ale#rename#HandleLSPResponse(1, { - \ 'id': 3, - \ 'result': {}, - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''No changes received from server'''], g:expr_list - -Execute(LSP should perform no action when changes is empty): - call ale#rename#HandleLSPResponse(1, { - \ 'id': 3, - \ 'result': { - \ 'changes': [], - \ }, - \}) - - AssertEqual g:handle_code_action_called, 0 - AssertEqual ['echom ''No changes received from server'''], g:expr_list - -Execute(LSP rename requests should be sent): - call ale#rename#SetMap({}) - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALERename - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'rename', g:capability_checked - AssertEqual - \ 'function(''ale#rename#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [1, 'textDocument/didChange', { - \ 'textDocument': { - \ 'uri': ale#path#ToFileURI(expand('%:p')), - \ 'version': g:ale_lsp_next_version_id - 1, - \ }, - \ 'contentChanges': [{'text': join(getline(1, '$'), "\n") . "\n"}] - \ }], - \ [0, 'textDocument/rename', { - \ 'textDocument': {'uri': ale#path#ToFileURI(expand('%:p'))}, - \ 'position': {'line': 0, 'character': 2}, - \ 'newName': 'a-new-name', - \ }], - \ ], - \ g:message_list - - AssertEqual {'42': {'old_name': 'foo', 'new_name': 'a-new-name'}}, - \ ale#rename#GetMap() diff --git a/dotfiles/.vim/plugged/ale/test/test_resolve_local_path.vader b/dotfiles/.vim/plugged/ale/test/test_resolve_local_path.vader deleted file mode 100644 index d8a8ec52..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_resolve_local_path.vader +++ /dev/null @@ -1,17 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - -After: - call ale#test#RestoreDirectory() - -Execute(We should be able to find the local version of a file): - call ale#test#SetFilename('test-files/top/middle/bottom/dummy.txt') - - AssertEqual - \ ale#path#Simplify(expand('%:p:h:h:h:h:h') . '/test-files/top/example.ini'), - \ ale#path#ResolveLocalPath(bufnr('%'), 'example.ini', '/global/config.ini') - -Execute(We shouldn't find anything for files which don't match): - AssertEqual - \ '/global/config.ini', - \ ale#path#ResolveLocalPath(bufnr('%'), 'missing.ini', '/global/config.ini') diff --git a/dotfiles/.vim/plugged/ale/test/test_results_not_cleared_when_opening_loclist.vader b/dotfiles/.vim/plugged/ale/test/test_results_not_cleared_when_opening_loclist.vader deleted file mode 100644 index c586345a..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_results_not_cleared_when_opening_loclist.vader +++ /dev/null @@ -1,30 +0,0 @@ -Before: - Save g:ale_buffer_info - - call ale#linter#Reset() - -After: - Restore - - call setloclist(0, []) - call clearmatches() - call ale#sign#Clear() - -Given foobar (Some file): - abc - -Execute(The loclist shouldn't be cleared when opening the loclist): - call ale#engine#InitBufferInfo(bufnr('')) - let g:ale_buffer_info[bufnr('')].loclist = [ - \ {'bufnr': bufnr('%'), 'type': 'E', 'lnum': 3, 'col': 2}, - \] - call setloclist(0, g:ale_buffer_info[bufnr('')].loclist) - - " The cleanup function is called when the loclist window is closed. - " If some cleanup is done for this buffer, for which nothing is wrong, - " then the loclist for the window, which is the same window as the window - " we are checking, will be cleared. - :lopen - :q - - AssertEqual 1, len(ale#test#GetLoclistWithoutNewerKeys()), 'The loclist was cleared' diff --git a/dotfiles/.vim/plugged/ale/test/test_sandbox_execution.vader b/dotfiles/.vim/plugged/ale/test/test_sandbox_execution.vader deleted file mode 100644 index cf994ce8..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_sandbox_execution.vader +++ /dev/null @@ -1,103 +0,0 @@ -Before: - function! TestCallback(buffer, output) - return [ - \ { - \ 'lnum': 1, - \ 'bufnr': 1, - \ 'vcol': 0, - \ 'linter_name': 'testlinter', - \ 'nr': -1, - \ 'type': 'E', - \ 'col': 1, - \ 'text': 'Test Error', - \ }, - \] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'callback': 'TestCallback', - \ 'executable': 'echo', - \ 'command': 'echo', - \}) - - let g:ale_buffer_info = {} - -After: - unlet! b:in_sandbox - unlet! b:result - - delfunction TestCallback - call ale#linter#Reset() - let g:ale_buffer_info = {} - - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(ale#util#InSandbox should return 1 when in a sandbox): - sandbox let b:in_sandbox = ale#util#InSandbox() - - Assert b:in_sandbox, 'ale#util#InSandbox() returned 0 for a sandbox command' - -Execute(ALE shouldn't blow up when run from a sandbox): - AssertEqual 'foobar', &filetype - - sandbox call ale#Queue(0) - sandbox call ale#Queue(1) - -Execute(ALE shouldn't blow up if file cleanup happens in a sandbox): - " Make a call to an engine function first, so the function will be defined - " before we make the sandbox call. - " - " You are not allowed to define any functions in the sandbox. - call ale#engine#InitBufferInfo(3) - - let g:ale_buffer_info[3] = { - \ 'temporary_file_list': ['/tmp/foo'], - \ 'temporary_directory_list': ['/tmp/bar'], - \} - sandbox call ale#command#RemoveManagedFiles(3) - - AssertEqual ['/tmp/foo'], g:ale_buffer_info[3].temporary_file_list - AssertEqual ['/tmp/bar'], g:ale_buffer_info[3].temporary_directory_list - -Execute(You shouldn't be able to define linters from the sandbox): - call ale#linter#Reset() - call ale#linter#PreventLoading('testft') - - AssertThrows sandbox call ale#linter#Define('testft', { - \ 'name': 'testlinter', - \ 'output_stream': 'stdout', - \ 'executable': 'testlinter', - \ 'command': 'testlinter', - \ 'callback': 'testCB', - \}) - AssertEqual 'Vim(let):E48: Not allowed in sandbox', g:vader_exception - AssertEqual [], ale#linter#GetAll(['testft']) - -Execute(You shouldn't be able to register fixers from the sandbox): - call ale#fix#registry#Clear() - AssertThrows sandbox call ale#fix#registry#Add('prettier', '', ['javascript'], 'prettier') - AssertEqual 'Vim(let):E48: Not allowed in sandbox', g:vader_exception - AssertEqual [], ale#fix#registry#CompleteFixers('', 'ALEFix ', 7) - -Execute(You shouldn't be able to get linters from the sandbox, to prevent tampering): - AssertThrows sandbox call ale#linter#GetLintersLoaded() - AssertEqual 'Vim(let):E48: Not allowed in sandbox', g:vader_exception - - call ale#linter#Reset() - - sandbox let b:result = ale#linter#GetAll(['testft']) - - AssertEqual 0, len(b:result) - - let b:result = ale#linter#GetAll(['testft']) - - AssertEqual 1, len(b:result) - - sandbox let b:result = ale#linter#GetAll(['testft']) - - AssertEqual 0, len(b:result) diff --git a/dotfiles/.vim/plugged/ale/test/test_semver_utils.vader b/dotfiles/.vim/plugged/ale/test/test_semver_utils.vader deleted file mode 100644 index b38feb06..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_semver_utils.vader +++ /dev/null @@ -1,43 +0,0 @@ -After: - call ale#semver#ResetVersionCache() - -Execute(ParseVersion should return the version from the lines of output): - " We should be able to parse the semver string from flake8 - AssertEqual [3, 0, 4], ale#semver#ParseVersion([ - \ '3.0.4 (mccabe: 0.5.2, pyflakes: 1.2.3, pycodestyle: 2.0.0) CPython 2.7.12 on Linux', - \ '1.2.3', - \]) - -Execute(ParseVersion should return an empty list when no vesrion can be found): - AssertEqual [], ale#semver#ParseVersion(['x']) - AssertEqual [], ale#semver#ParseVersion([]) - -Execute(ParseVersion should tolerate missing patch numbers): - " This goes against the semver spec, but we handle it anyway. - AssertEqual [3, 4, 0], ale#semver#ParseVersion(['Version 3.4']) - -Execute(GTE should compare triples correctly): - Assert ale#semver#GTE([3, 0, 4], [3, 0, 0]) - Assert ale#semver#GTE([3, 0, 0], [3, 0, 0]) - Assert ale#semver#GTE([3, 0, 0], [2, 0, 0]) - Assert ale#semver#GTE([3, 1, 0], [3, 1, 0]) - Assert ale#semver#GTE([3, 2, 0], [3, 1, 0]) - Assert ale#semver#GTE([3, 2, 2], [3, 1, 6]) - Assert ale#semver#GTE([3, 2, 5], [3, 2, 5]) - Assert ale#semver#GTE([3, 2, 6], [3, 2, 5]) - Assert !ale#semver#GTE([2, 9, 1], [3, 0, 0]) - Assert !ale#semver#GTE([3, 2, 3], [3, 3, 3]) - Assert !ale#semver#GTE([3, 3, 2], [3, 3, 3]) - -Execute(GTE should compare pairs correctly): - Assert ale#semver#GTE([3, 0], [3, 0, 0]) - Assert ale#semver#GTE([3, 0], [3, 0]) - Assert ale#semver#GTE([3, 1], [3, 0]) - Assert ale#semver#GTE([3, 1], [3, 0, 0]) - Assert ale#semver#GTE([3, 0, 1], [3, 0]) - Assert !ale#semver#GTE([3, 0], [3, 0, 1]) - Assert !ale#semver#GTE([3, 0], [3, 1]) - Assert !ale#semver#GTE([2, 9, 11], [3, 0]) - -Execute(GTE should permit the LHS to be an empty List): - Assert !ale#semver#GTE([], [0, 0, 0]) diff --git a/dotfiles/.vim/plugged/ale/test/test_set_list_timers.vader b/dotfiles/.vim/plugged/ale/test/test_set_list_timers.vader deleted file mode 100644 index 07e0202d..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_set_list_timers.vader +++ /dev/null @@ -1,29 +0,0 @@ -Before: - Save g:ale_set_lists_synchronously - Save g:ale_open_list - - let g:ale_set_lists_synchronously = 0 - -After: - Restore - - sleep 1ms - call setloclist(0, []) - lclose - -Execute(The SetLists function should work when run in a timer): - call ale#list#SetLists(bufnr(''), [ - \ {'bufnr': bufnr(''), 'lnum': 5, 'col': 5, 'text': 'x', 'type': 'E'}, - \]) - sleep 1ms - AssertEqual [{ - \ 'lnum': 5, - \ 'bufnr': bufnr(''), - \ 'col': 5, - \ 'text': 'x', - \ 'valid': 1, - \ 'vcol': 0, - \ 'nr': 0, - \ 'type': 'E', - \ 'pattern': '', - \}], ale#test#GetLoclistWithoutNewerKeys() diff --git a/dotfiles/.vim/plugged/ale/test/test_setting_loclist_from_another_buffer.vader b/dotfiles/.vim/plugged/ale/test/test_setting_loclist_from_another_buffer.vader deleted file mode 100644 index d33fa075..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_setting_loclist_from_another_buffer.vader +++ /dev/null @@ -1,26 +0,0 @@ -Before: - Save g:ale_buffer_info - - let g:ale_buffer_info = { - \ bufnr(''): { - \ 'loclist': [{'bufnr': bufnr(''), 'lnum': 4, 'col': 1, 'text': 'foo'}] - \ }, - \} - - let g:original_buffer = bufnr('%') - noautocmd new - -After: - Restore - - unlet! g:original_buffer - -Execute(Errors should be set in the loclist for the original buffer, not the new one): - call ale#list#SetLists( - \ g:original_buffer, - \ g:ale_buffer_info[(g:original_buffer)].loclist, - \ ) - - AssertEqual [], ale#test#GetLoclistWithoutNewerKeys() - AssertEqual 1, len(getloclist(bufwinid(g:original_buffer))) - AssertEqual 'foo', getloclist(bufwinid(g:original_buffer))[0].text diff --git a/dotfiles/.vim/plugged/ale/test/test_setting_problems_found_in_previous_buffers.vader b/dotfiles/.vim/plugged/ale/test/test_setting_problems_found_in_previous_buffers.vader deleted file mode 100644 index f1a31fc1..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_setting_problems_found_in_previous_buffers.vader +++ /dev/null @@ -1,98 +0,0 @@ -Before: - Save g:ale_buffer_info - Save &filetype - Save g:ale_set_lists_synchronously - - let g:ale_set_lists_synchronously = 1 - - " Set up items in other buffers which should set in this one. - let g:ale_buffer_info = {} - call ale#engine#InitBufferInfo(bufnr('') + 1) - let g:ale_buffer_info[bufnr('') + 1].loclist = - \ ale#engine#FixLocList(bufnr('') + 1, 'linter_one', 0, [ - \ {'lnum': 1, 'filename': expand('%:p'), 'text': 'foo'}, - \ {'lnum': 2, 'filename': expand('%:p'), 'text': 'bar'}, - \ {'lnum': 2, 'text': 'ignore this one'}, - \ ]) - call ale#engine#InitBufferInfo(bufnr('') + 2) - let g:ale_buffer_info[bufnr('') + 2].loclist = - \ ale#engine#FixLocList(bufnr('') + 2, 'linter_one', 0, [ - \ {'lnum': 1, 'filename': expand('%:p'), 'text': 'foo'}, - \ {'lnum': 3, 'filename': expand('%:p'), 'text': 'baz'}, - \ {'lnum': 5, 'text': 'ignore this one'}, - \ ]) - - call ale#linter#Define('foobar', { - \ 'name': 'linter_one', - \ 'callback': 'WhoCares', - \ 'executable': 'echo', - \ 'command': 'sleep 1000', - \ 'lint_file': 1, - \}) - -After: - call ale#engine#Cleanup(bufnr('')) - Restore - call ale#linter#Reset() - - " Items and markers, etc. - call setloclist(0, []) - call clearmatches() - call ale#sign#Clear() - -Given foobar(A file with some lines): - foo - bar - baz - -Execute(Problems found from previously opened buffers should be set when linting for the first time): - call ale#engine#RunLinters(bufnr(''), ale#linter#Get(&filetype), 0) - - AssertEqual - \ [ - \ { - \ 'lnum': 1, - \ 'bufnr': bufnr(''), - \ 'col': 0, - \ 'filename': expand('%:p'), - \ 'linter_name': 'linter_one', - \ 'nr': -1, - \ 'type': 'E', - \ 'vcol': 0, - \ 'text': 'foo', - \ 'sign_id': 1000001, - \ }, - \ { - \ 'lnum': 2, - \ 'bufnr': bufnr(''), - \ 'col': 0, - \ 'filename': expand('%:p'), - \ 'linter_name': 'linter_one', - \ 'nr': -1, - \ 'type': 'E', - \ 'vcol': 0, - \ 'text': 'bar', - \ 'sign_id': 1000002, - \ }, - \ { - \ 'lnum': 3, - \ 'bufnr': bufnr(''), - \ 'col': 0, - \ 'filename': expand('%:p'), - \ 'linter_name': 'linter_one', - \ 'nr': -1, - \ 'type': 'E', - \ 'vcol': 0, - \ 'text': 'baz', - \ 'sign_id': 1000003, - \ }, - \ ], - \ g:ale_buffer_info[bufnr('')].loclist - - AssertEqual - \ [ - \ {'lnum': 1, 'bufnr': bufnr(''), 'col': 0, 'valid': 1, 'vcol': 0, 'nr': -1, 'type': 'E', 'pattern': '', 'text': 'foo'}, - \ {'lnum': 2, 'bufnr': bufnr(''), 'col': 0, 'valid': 1, 'vcol': 0, 'nr': -1, 'type': 'E', 'pattern': '', 'text': 'bar'}, - \ {'lnum': 3, 'bufnr': bufnr(''), 'col': 0, 'valid': 1, 'vcol': 0, 'nr': -1, 'type': 'E', 'pattern': '', 'text': 'baz'}, - \ ], - \ ale#test#GetLoclistWithoutNewerKeys() diff --git a/dotfiles/.vim/plugged/ale/test/test_shell_detection.vader b/dotfiles/.vim/plugged/ale/test/test_shell_detection.vader deleted file mode 100644 index 11d801c3..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_shell_detection.vader +++ /dev/null @@ -1,177 +0,0 @@ -Before: - runtime ale_linters/sh/shell.vim - runtime ale_linters/sh/shellcheck.vim - -After: - call ale#linter#Reset() - - unlet! b:is_bash - unlet! b:is_sh - unlet! b:is_kornshell - -Given(A file with a Bash hashbang): - #!/bin/bash - -Execute(/bin/bash should be detected appropriately): - AssertEqual 'bash', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'bash', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'bash', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with /bin/sh): - #!/usr/bin/env sh -eu --foobar - -Execute(/bin/sh should be detected appropriately): - AssertEqual 'sh', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'sh', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'sh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with bash as an argument to env): - #!/usr/bin/env bash - -Execute(/usr/bin/env bash should be detected appropriately): - AssertEqual 'bash', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'bash', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'bash', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a tcsh hash bang and arguments): - #!/usr/bin/env tcsh -eu --foobar - -Execute(tcsh should be detected appropriately): - AssertEqual 'tcsh', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'tcsh', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'tcsh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a zsh hash bang and arguments): - #!/usr/bin/env zsh -eu --foobar - -Execute(zsh should be detected appropriately): - AssertEqual 'zsh', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'zsh', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'zsh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a csh hash bang and arguments): - #!/usr/bin/env csh -eu --foobar - -Execute(csh should be detected appropriately): - AssertEqual 'csh', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'csh', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'csh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a ksh hashbang): - #!/bin/ksh - -Execute(/bin/ksh should be detected appropriately): - AssertEqual 'ksh', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'ksh', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'ksh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a ksh as an argument to env): - #!/usr/bin/env ksh - -Execute(ksh should be detected appropriately): - AssertEqual 'ksh', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'ksh', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'ksh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a sh hash bang and arguments): - #!/usr/bin/env sh -eu --foobar - -Execute(sh should be detected appropriately): - AssertEqual 'sh', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'sh', ale_linters#sh#shell#GetExecutable(bufnr('')) - AssertEqual 'sh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file without a hashbang): - -Execute(The bash dialect should be used for shellcheck if b:is_bash is 1): - let b:is_bash = 1 - - AssertEqual 'bash', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Execute(The sh dialect should be used for shellcheck if b:is_sh is 1): - let b:is_sh = 1 - - AssertEqual 'sh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Execute(The ksh dialect should be used for shellcheck if b:is_kornshell is 1): - let b:is_kornshell = 1 - - AssertEqual 'ksh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Execute(The filetype should be used as the default shell type when there is no hashbang line): - set filetype=zsh - AssertEqual 'zsh', ale#handlers#sh#GetShellType(bufnr('')) - - set filetype=tcsh - AssertEqual 'tcsh', ale#handlers#sh#GetShellType(bufnr('')) - - set filetype=python - AssertEqual '', ale#handlers#sh#GetShellType(bufnr('')) - -Given(A file with /bin/ash): - #!/bin/ash - -Execute(The ash dialect should be used for the shell and the base function): - AssertEqual 'ash', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'ash', ale_linters#sh#shell#GetExecutable(bufnr('')) - -Execute(dash should be used for shellcheck, which has no ash dialect): - AssertEqual 'dash', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with /bin/dash): - #!/bin/dash - -Execute(The dash dialect should be used for the shell and the base function): - AssertEqual 'dash', ale#handlers#sh#GetShellType(bufnr('')) - AssertEqual 'dash', ale_linters#sh#shell#GetExecutable(bufnr('')) - -Execute(dash should be used for shellcheck): - AssertEqual 'dash', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a Bash shellcheck shell directive): - # shellcheck shell=bash - -Execute(bash dialect should be detected appropriately): - AssertEqual 'bash', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a sh shellcheck shell directive): - #shellcheck shell=sh - -Execute(sh dialect should be detected appropriately): - AssertEqual 'sh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a tcsh shellcheck shell directive): - # shellcheck shell=tcsh - -Execute(tcsh dialect should be detected appropriately): - AssertEqual 'tcsh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a zsh shellcheck shell directive): - # shellcheck shell=zsh - -Execute(zsh dialect should be detected appropriately): - AssertEqual 'zsh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a csh shellcheck shell directive): - # shellcheck shell=csh - -Execute(zsh dialect should be detected appropriately): - AssertEqual 'csh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a ksh shellcheck shell directive): - # shellcheck shell=ksh - -Execute(ksh dialect should be detected appropriately): - AssertEqual 'ksh', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a dash shellcheck shell directive): - # shellcheck shell=dash - -Execute(dash dialect should be detected appropriately): - AssertEqual 'dash', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) - -Given(A file with a ash shellcheck shell directive): - # shellcheck shell=ash - -Execute(dash dialect should be detected for ash that shellcheck does not support): - AssertEqual 'dash', ale#handlers#shellcheck#GetDialectArgument(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_should_do_nothing_conditions.vader b/dotfiles/.vim/plugged/ale/test/test_should_do_nothing_conditions.vader deleted file mode 100644 index 6dfed555..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_should_do_nothing_conditions.vader +++ /dev/null @@ -1,88 +0,0 @@ -Before: - Save g:ale_filetype_blacklist - Save g:ale_maximum_file_size - Save g:ale_enabled - Save &l:statusline - - let b:fake_mode = 'n' - - call ale#test#SetDirectory('/testplugin/test') - - let b:funky_command_created = 0 - - runtime autoload/ale/util.vim - - function! ale#util#Mode(...) abort - return b:fake_mode - endfunction - - " We will test for the existence of this command, so create one if needed. - if !exists(':CtrlPFunky') - command CtrlPFunky echo - let b:funky_command_created = 1 - endif - -After: - Restore - - call ale#test#RestoreDirectory() - - if b:funky_command_created - delcommand CtrlPFunky - let b:funky_command_created = 0 - endif - - unlet! b:funky_command_created - unlet! b:fake_mode - - if &diff is 1 - let &diff = 0 - endif - - runtime autoload/ale/util.vim - -Given foobar(An empty file): -Execute(ALE shouldn't do much of anything for ctrlp-funky buffers): - Assert !ale#ShouldDoNothing(bufnr('')), 'The preliminary check failed' - - let &l:statusline = '%#CtrlPMode2# prt %*%#CtrlPMode1# line %* ={%#CtrlPMode1# funky %*}= <-> %=%<%#CtrlPMode2# %{getcwd()} %*' - - Assert ale#ShouldDoNothing(bufnr('')) - -Execute(ALE shouldn't try to check buffers with '.' as the filename): - AssertEqual - \ 0, - \ ale#ShouldDoNothing(bufnr('')), - \ 'ShouldDoNothing() was 1 for some other reason' - - silent! noautocmd file . - - Assert ale#ShouldDoNothing(bufnr('')) - -Execute(DoNothing should return 1 when the filetype is empty): - AssertEqual - \ 0, - \ ale#ShouldDoNothing(bufnr('')), - \ 'ShouldDoNothing() was 1 for some other reason' - - set filetype= - - AssertEqual 1, ale#ShouldDoNothing(bufnr('')) - -Execute(DoNothing should return 1 when an operator is pending): - let b:fake_mode = 'no' - - AssertEqual 1, ale#ShouldDoNothing(bufnr('')) - -Execute(DoNothing should return 1 for diff buffers): - let &diff = 1 - - AssertEqual 1, ale#ShouldDoNothing(bufnr('')) - -Execute(The DoNothing check should work if the ALE globals aren't defined): - unlet! g:ale_filetype_blacklist - unlet! g:ale_maximum_file_size - unlet! g:ale_enabled - - " This shouldn't throw exceptions. - call ale#ShouldDoNothing(bufnr('')) diff --git a/dotfiles/.vim/plugged/ale/test/test_sml_command.vader b/dotfiles/.vim/plugged/ale/test/test_sml_command.vader deleted file mode 100644 index e89486c4..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_sml_command.vader +++ /dev/null @@ -1,45 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - -Execute(smlnj finds CM file if it exists): - call ale#test#SetFilename('test-files/smlnj/cm/foo.sml') - - AssertEqual - \ ale#test#GetFilename('test-files/smlnj/cm/sources.cm'), - \ ale#handlers#sml#GetCmFile(bufnr('%')) - -Execute(smlnj finds CM file by searching upwards): - call ale#test#SetFilename('test-files/smlnj/cm/path/to/bar.sml') - - AssertEqual - \ ale#test#GetFilename('test-files/smlnj/cm/sources.cm'), - \ ale#handlers#sml#GetCmFile(bufnr('%')) - -Execute(smlnj returns '' when no CM file found): - call ale#test#SetFilename('test-files/smlnj/file/qux.sml') - - AssertEqual '', ale#handlers#sml#GetCmFile(bufnr('%')) - -Execute(CM-project mode enabled when CM file found): - call ale#test#SetFilename('test-files/smlnj/cm/foo.sml') - - AssertEqual 'sml', ale#handlers#sml#GetExecutableSmlnjCm(bufnr('%')) - -Execute(single-file mode disabled when CM file found): - call ale#test#SetFilename('test-files/smlnj/cm/foo.sml') - - AssertEqual '', ale#handlers#sml#GetExecutableSmlnjFile(bufnr('%')) - -Execute(CM-project mode disabled when CM file not found): - call ale#test#SetFilename('test-files/smlnj/file/qux.sml') - - AssertEqual '', ale#handlers#sml#GetExecutableSmlnjCm(bufnr('%')) - -Execute(single-file mode enabled when CM file found): - call ale#test#SetFilename('test-files/smlnj/file/qux.sml') - - AssertEqual 'sml', ale#handlers#sml#GetExecutableSmlnjFile(bufnr('%')) diff --git a/dotfiles/.vim/plugged/ale/test/test_socket_connections.vader b/dotfiles/.vim/plugged/ale/test/test_socket_connections.vader deleted file mode 100644 index c59b942d..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_socket_connections.vader +++ /dev/null @@ -1,139 +0,0 @@ -Before: - let g:can_run_socket_tests = !has('win32') - \ && (exists('*ch_close') || exists('*chanclose')) - - if g:can_run_socket_tests - call ale#test#SetDirectory('/testplugin/test') - - let g:channel_id_received = 0 - let g:data_received = '' - - function! WaitForData(expected_data, timeout) abort - let l:ticks = 0 - - while l:ticks < a:timeout - " Sleep first, so we can switch to the callback. - let l:ticks += 10 - sleep 10ms - - if g:data_received is# a:expected_data - break - endif - endwhile - endfunction - - function! TestCallback(channel_id, data) abort - let g:channel_id_received = a:channel_id - let g:data_received .= a:data - endfunction - - let g:port = 10347 - let g:pid_tcp = str2nr(system( - \ 'python' - \ . ' ' . ale#Escape(g:dir . '/script/dumb_tcp_server.py') - \ . ' ' . g:port - \)) - let g:pipe_path = tempname() - let g:pid_pipe = str2nr(system( - \ 'python' - \ . ' ' . ale#Escape(g:dir . '/script/dumb_named_pipe_server.py') - \ . ' ' . g:pipe_path - \)) - endif - -After: - if g:can_run_socket_tests - call ale#test#RestoreDirectory() - - unlet! g:channel_id_received - unlet! g:data_received - unlet! g:channel_id - - delfunction WaitForData - delfunction TestCallback - - if has_key(g:, 'pid_tcp') - call system('kill ' . g:pid_tcp) - endif - - if has_key(g:, 'pid_pipe') - call system('kill ' . g:pid_pipe) - endif - - unlet! g:pid_tcp - unlet! g:port - unlet! g:pid_pipe - unlet! g:pipe_path - endif - - unlet! g:can_run_socket_tests - -Execute(Sending and receiving connections to tcp sockets should work): - if g:can_run_socket_tests - let g:channel_id = ale#socket#Open( - \ '127.0.0.1:' . g:port, - \ {'callback': function('TestCallback')} - \) - - Assert g:channel_id >= 0, 'The socket was not opened!' - - call ale#socket#Send(g:channel_id, 'hello') - call ale#socket#Send(g:channel_id, ' world') - - AssertEqual 1, ale#socket#IsOpen(g:channel_id) - - " Wait up to 1 second for the expected data to arrive. - call WaitForData('hello world', 1000) - - AssertEqual g:channel_id, g:channel_id_received - AssertEqual 'hello world', g:data_received - AssertEqual '127.0.0.1:' . g:port, ale#socket#GetAddress(g:channel_id) - - call ale#socket#Close(g:channel_id) - - AssertEqual 0, ale#socket#IsOpen(g:channel_id) - AssertEqual '', ale#socket#GetAddress(g:channel_id) - endif - - " NeoVim versions which can't connect to sockets should just fail. - if has('nvim') && !exists('*chanclose') - AssertEqual -1, ale#socket#Open( - \ '127.0.0.1:1111', - \ {'callback': function('function')} - \) - endif - -Execute(Sending and receiving connections to named pipe sockets should work): - if g:can_run_socket_tests && has('nvim-0.4') - let g:channel_id = ale#socket#Open( - \ g:pipe_path, - \ {'callback': function('TestCallback')} - \) - - Assert g:channel_id >= 0, 'The socket was not opened!' - - call ale#socket#Send(g:channel_id, 'hello') - call ale#socket#Send(g:channel_id, ' world') - - AssertEqual 1, ale#socket#IsOpen(g:channel_id) - - " Wait up to 1 second for the expected data to arrive. - call WaitForData('hello world', 1000) - - AssertEqual g:channel_id, g:channel_id_received - AssertEqual 'hello world', g:data_received - AssertEqual g:pipe_path, ale#socket#GetAddress(g:channel_id) - - call ale#socket#Close(g:channel_id) - - AssertEqual 0, ale#socket#IsOpen(g:channel_id) - AssertEqual '', ale#socket#GetAddress(g:channel_id) - endif - - " NeoVim versions which can't connect to sockets should just fail. - if has('nvim-0.4') && !exists('*chanclose') - AssertEqual -1, ale#socket#Open( - \ g:pipe_path, - \ {'callback': function('function')} - \) - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_statusline.vader b/dotfiles/.vim/plugged/ale/test/test_statusline.vader deleted file mode 100644 index f76cbfa9..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_statusline.vader +++ /dev/null @@ -1,157 +0,0 @@ -Before: - Save g:ale_statusline_format - Save g:ale_buffer_info - - let g:ale_buffer_info = {} - - " A function for conveniently creating expected count objects. - function! Counts(data) abort - let l:res = { - \ '0': 0, - \ '1': 0, - \ 'error': 0, - \ 'warning': 0, - \ 'info': 0, - \ 'style_error': 0, - \ 'style_warning': 0, - \ 'total': 0, - \} - - for l:key in keys(a:data) - let l:res[l:key] = a:data[l:key] - endfor - - let l:res[0] = l:res.error + l:res.style_error - let l:res[1] = l:res.warning + l:res.style_warning + l:res.info - let l:res.total = l:res[0] + l:res[1] - - return l:res - endfunction - - " A test simplified loclist that will be used for some of the - " tests in this module. - let g:test_buffer_info = { - \ bufnr(''): { - \ 'loclist': [ - \ {'bufnr': bufnr('') - 1, 'type': 'E'}, - \ {'bufnr': bufnr('') - 1, 'type': 'E', 'sub_type': 'style'}, - \ {'bufnr': bufnr('') - 1, 'type': 'W'}, - \ {'bufnr': bufnr('') - 1, 'type': 'W', 'sub_type': 'style'}, - \ {'bufnr': bufnr('') - 1, 'type': 'I'}, - \ {'bufnr': bufnr(''), 'type': 'E'}, - \ {'bufnr': bufnr(''), 'type': 'E', 'sub_type': 'style'}, - \ {'bufnr': bufnr(''), 'type': 'E', 'sub_type': 'style'}, - \ {'bufnr': bufnr(''), 'type': 'W'}, - \ {'bufnr': bufnr(''), 'type': 'W'}, - \ {'bufnr': bufnr(''), 'type': 'W'}, - \ {'bufnr': bufnr(''), 'type': 'W', 'sub_type': 'style'}, - \ {'bufnr': bufnr(''), 'type': 'W', 'sub_type': 'style'}, - \ {'bufnr': bufnr(''), 'type': 'W', 'sub_type': 'style'}, - \ {'bufnr': bufnr(''), 'type': 'W', 'sub_type': 'style'}, - \ {'bufnr': bufnr(''), 'type': 'I'}, - \ {'bufnr': bufnr(''), 'type': 'I'}, - \ {'bufnr': bufnr(''), 'type': 'I'}, - \ {'bufnr': bufnr(''), 'type': 'I'}, - \ {'bufnr': bufnr(''), 'type': 'I'}, - \ {'bufnr': bufnr('') + 1, 'type': 'E'}, - \ {'bufnr': bufnr('') + 1, 'type': 'E', 'sub_type': 'style'}, - \ {'bufnr': bufnr('') + 1, 'type': 'W'}, - \ {'bufnr': bufnr('') + 1, 'type': 'W', 'sub_type': 'style'}, - \ {'bufnr': bufnr('') + 1, 'type': 'I'}, - \ ], - \ }, - \} -After: - Restore - - delfunction Counts - unlet g:test_buffer_info - -Execute (Count should be 0 when data is empty): - AssertEqual Counts({}), ale#statusline#Count(bufnr('')) - -Execute (FirstProblem should be 0 when data is empty): - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'error') - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'warning') - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'style_error') - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'style_warning') - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'info') - -Execute (Count should read data from the cache): - let g:ale_buffer_info = {'44': {'count': Counts({'error': 1, 'warning': 2})}} - AssertEqual Counts({'error': 1, 'warning': 2}), ale#statusline#Count(44) - -Execute (FirstProblem should read data from the cache): - let g:ale_buffer_info = - \{"44": - \{'count': 0, - \'first_problems': - \{'error': {'lnum': 3}, - \'warning': {'lnum': 44}, - \'style_error': {'lnum': 22}, - \'style_warning': {'lnum': 223}, - \'info': {'lnum': 2} - \} - \} - \} - AssertEqual {'lnum': 3}, ale#statusline#FirstProblem(44, 'error') - AssertEqual {'lnum': 44}, ale#statusline#FirstProblem(44, 'warning') - AssertEqual {'lnum': 223}, ale#statusline#FirstProblem(44, 'style_warning') - AssertEqual {'lnum': 22}, ale#statusline#FirstProblem(44, 'style_error') - AssertEqual {'lnum': 2}, ale#statusline#FirstProblem(44, 'info') - -Execute (The count should be correct after an update): - let g:ale_buffer_info = {'44': {}} - call ale#statusline#Update(44, []) - AssertEqual Counts({}), ale#statusline#Count(44) - -Execute (FirstProblem should be correct after an update): - let g:ale_buffer_info = {'44': {}} - call ale#statusline#Update(44, []) - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'error') - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'warning') - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'style_error') - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'style_warning') - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'info') - -Execute (Count should match the loclist): - let g:ale_buffer_info = g:test_buffer_info - AssertEqual { - \ 'error': 1, - \ 'style_error': 2, - \ 'warning': 3, - \ 'style_warning': 4, - \ 'info': 5, - \ '0': 3, - \ '1': 12, - \ 'total': 15, - \}, ale#statusline#Count(bufnr('')) - -Execute (FirstProblem should pull the first matching value from the loclist): - let g:ale_buffer_info = g:test_buffer_info - AssertEqual {'bufnr': bufnr(''), 'type': 'E'}, ale#statusline#FirstProblem(bufnr(''), 'error') - AssertEqual {'bufnr': bufnr(''), 'type': 'W'}, ale#statusline#FirstProblem(bufnr(''), 'warning') - AssertEqual {'bufnr': bufnr(''), 'type': 'E', 'sub_type': 'style'}, ale#statusline#FirstProblem(bufnr(''), 'style_error') - AssertEqual {'bufnr': bufnr(''), 'type': 'W', 'sub_type': 'style'}, ale#statusline#FirstProblem(bufnr(''), 'style_warning') - AssertEqual {'bufnr': bufnr(''), 'type': 'I'}, ale#statusline#FirstProblem(bufnr(''), 'info') - -Execute (Output should be empty for non-existent buffer): - let g:ale_buffer_info = g:test_buffer_info - AssertEqual Counts({}), ale#statusline#Count(9001) - AssertEqual {}, ale#statusline#FirstProblem(9001, 'error') - AssertEqual {}, ale#statusline#FirstProblem(9001, 'warning') - AssertEqual {}, ale#statusline#FirstProblem(9001, 'style_error') - AssertEqual {}, ale#statusline#FirstProblem(9001, 'style_warning') - AssertEqual {}, ale#statusline#FirstProblem(9001, 'info') - -Execute(ale#statusline#Update shouldn't blow up when globals are undefined): - unlet! g:ale_statusline_format - call ale#statusline#Update(1, []) - -Execute(ale#statusline#Count should return 0 counts when globals are undefined): - unlet! g:ale_statusline_format - AssertEqual Counts({}), ale#statusline#Count(1) - -Execute(FirstProblem should return an empty dict when globals are undefined): - unlet! g:ale_statusline_format - AssertEqual {}, ale#statusline#FirstProblem(bufnr(''), 'info') diff --git a/dotfiles/.vim/plugged/ale/test/test_swift_find_project_root.vader b/dotfiles/.vim/plugged/ale/test/test_swift_find_project_root.vader deleted file mode 100644 index 88a26021..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_swift_find_project_root.vader +++ /dev/null @@ -1,18 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - -After: - call ale#test#RestoreDirectory() - -Execute(Detect root of Swift project with Package.swift correctly): - call ale#test#SetFilename('test-files/swift/swift-package-project/src/folder/dummy.swift') - AssertEqual - \ ale#path#Simplify(g:dir . '/test-files/swift/swift-package-project'), - \ ale#swift#FindProjectRoot(bufnr('')) - -Execute(Detect no root in case of non-Package.swift project): - call ale#test#SetFilename('test-files/swift/non-swift-package-project/src/folder/dummy.swift') - AssertEqual - \ '', - \ ale#swift#FindProjectRoot(bufnr('')) - diff --git a/dotfiles/.vim/plugged/ale/test/test_symbol_search.vader b/dotfiles/.vim/plugged/ale/test/test_symbol_search.vader deleted file mode 100644 index 754826aa..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_symbol_search.vader +++ /dev/null @@ -1,189 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - call ale#test#SetFilename('dummy.txt') - - let g:Callback = '' - let g:expr_list = [] - let g:message_list = [] - let g:preview_called = 0 - let g:item_list = [] - let g:options = {} - let g:capability_checked = '' - let g:conn_id = v:null - let g:InitCallback = v:null - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/preview.vim - - function! ale#lsp_linter#StartLSP(buffer, linter, Callback) abort - let g:conn_id = ale#lsp#Register('executable', '/foo/bar', {}) - call ale#lsp#MarkDocumentAsOpen(g:conn_id, a:buffer) - let l:details = { - \ 'buffer': a:buffer, - \ 'connection_id': g:conn_id, - \ 'project_root': '/foo/bar', - \ 'language_id': 'python', - \} - - let g:InitCallback = {-> a:Callback(a:linter, l:details)} - endfunction - - function! ale#lsp#HasCapability(conn_id, capability) abort - let g:capability_checked = a:capability - - return 1 - endfunction - - function! ale#lsp#RegisterCallback(conn_id, callback) abort - let g:Callback = a:callback - endfunction - - function! ale#lsp#Send(conn_id, message) abort - call add(g:message_list, a:message) - - return 42 - endfunction - - function! ale#util#Execute(expr) abort - call add(g:expr_list, a:expr) - endfunction - - function! ale#preview#ShowSelection(item_list, options) abort - let g:preview_called = 1 - let g:item_list = a:item_list - let g:options = a:options - endfunction - -After: - call ale#test#RestoreDirectory() - call ale#linter#Reset() - - unlet! g:capability_checked - unlet! g:InitCallback - unlet! g:conn_id - unlet! g:Callback - unlet! g:message_list - unlet! g:expr_list - unlet! b:ale_linters - unlet! g:options - unlet! g:item_list - unlet! g:preview_called - - runtime autoload/ale/lsp_linter.vim - runtime autoload/ale/lsp.vim - runtime autoload/ale/util.vim - runtime autoload/ale/preview.vim - -Execute(Other messages for the LSP handler should be ignored): - call ale#symbol#HandleLSPResponse(1, {'command': 'foo'}) - -Execute(Failed symbol responses should be handled correctly): - call ale#symbol#SetMap({3: {}}) - call ale#symbol#HandleLSPResponse(1, {'id': 3}) - AssertEqual {}, ale#symbol#GetMap() - -Execute(LSP symbol responses should be handled): - call ale#symbol#SetMap({3: {}}) - call ale#symbol#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': [ - \ { - \ 'name': 'foo', - \ 'location': { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/completion_dummy_file')), - \ 'range': { - \ 'start': {'line': 2, 'character': 7}, - \ }, - \ }, - \ }, - \ { - \ 'name': 'foobar', - \ 'location': { - \ 'uri': ale#path#ToFileURI(ale#path#Simplify(g:dir . '/other_file')), - \ 'range': { - \ 'start': {'line': 7, 'character': 15}, - \ }, - \ }, - \ }, - \ ], - \ } - \) - - AssertEqual - \ [ - \ { - \ 'filename': ale#path#Simplify(g:dir . '/completion_dummy_file'), - \ 'line': 3, - \ 'column': 8, - \ 'match': 'foo', - \ }, - \ { - \ 'filename': ale#path#Simplify(g:dir . '/other_file'), - \ 'line': 8, - \ 'column': 16, - \ 'match': 'foobar', - \ }, - \ ], - \ g:item_list - AssertEqual {}, ale#symbol#GetMap() - -Execute(Preview windows should not be opened for empty LSP symbol responses): - call ale#symbol#SetMap({3: {}}) - call ale#symbol#HandleLSPResponse( - \ 1, - \ { - \ 'id': 3, - \ 'result': [ - \ ], - \ } - \) - - Assert !g:preview_called - AssertEqual {}, ale#symbol#GetMap() - AssertEqual ['echom ''No symbols found.'''], g:expr_list - -Given python(Some Python file): - foo - somelongerline - bazxyzxyzxyz - -Execute(LSP symbol requests should be sent): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALESymbolSearch foo bar - - " We shouldn't register the callback yet. - AssertEqual '''''', string(g:Callback) - - AssertEqual type(function('type')), type(g:InitCallback) - call g:InitCallback() - - AssertEqual 'symbol_search', g:capability_checked - AssertEqual - \ 'function(''ale#symbol#HandleLSPResponse'')', - \ string(g:Callback) - - AssertEqual - \ [ - \ [0, 'workspace/symbol', {'query': 'foo bar'}], - \ ], - \ g:message_list - - AssertEqual {'42': {'buffer': bufnr(''), 'use_relative_paths': 0}}, ale#symbol#GetMap() - -Execute('-relative' argument should enable 'use_relative_paths' in HandleLSPResponse): - runtime ale_linters/python/pylsp.vim - let b:ale_linters = ['pylsp'] - call setpos('.', [bufnr(''), 1, 5, 0]) - - ALESymbolSearch -relative foo bar - - call g:InitCallback() - - AssertEqual {'42': {'buffer': bufnr(''), 'use_relative_paths': 1}}, ale#symbol#GetMap() diff --git a/dotfiles/.vim/plugged/ale/test/test_temporary_file_management.vader b/dotfiles/.vim/plugged/ale/test/test_temporary_file_management.vader deleted file mode 100644 index bb735886..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_temporary_file_management.vader +++ /dev/null @@ -1,146 +0,0 @@ -Before: - Save g:ale_buffer_info - - let g:ale_buffer_info = {} - let g:ale_run_synchronously = 1 - - let g:command = 'echo test' - let g:filename = '' - let g:directory = '' - let g:preserved_directory = '' - - function! TestCommandCallback(buffer) abort - " We are registering a temporary file, so we should delete it. - let g:filename = tempname() - call writefile(['foo'], g:filename) - call ale#command#ManageFile(a:buffer, g:filename) - - " We are registering this directory appropriately, so we should delete - " the whole thing. - let g:directory = tempname() - call mkdir(g:directory) - call writefile(['foo'], g:directory . '/bar') - call ale#command#ManageDirectory(a:buffer, g:directory) - - " We are registering this directory as temporary file, so we - " shouldn't delete it. - let g:preserved_directory = tempname() - call mkdir(g:preserved_directory) - call writefile(['foo'], g:preserved_directory . '/bar') - call ale#command#ManageFile(a:buffer, g:preserved_directory) - - return g:command - endfunction - - function! TestCallback(buffer, output) abort - return [] - endfunction - - call ale#linter#Define('foobar', { - \ 'name': 'testlinter', - \ 'executable': has('win32') ? 'cmd' : 'echo', - \ 'callback': 'TestCallback', - \ 'command': function('TestCommandCallback'), - \}) - call ale#command#ClearData() - -After: - Restore - - if !empty(g:preserved_directory) - call delete(g:preserved_directory, 'rf') - endif - - unlet! g:ale_run_synchronously - unlet! g:command - unlet! g:filename - unlet! g:directory - unlet! g:preserved_directory - delfunction TestCommandCallback - delfunction TestCallback - call ale#linter#Reset() - call ale#command#ClearData() - -Given foobar (Some imaginary filetype): - foo - bar - baz - -Execute(ALE should delete managed files/directories appropriately after linting): - AssertEqual 'foobar', &filetype - - call ale#Queue(0) - call ale#test#FlushJobs() - - Assert !filereadable(g:filename), 'The temporary file was not deleted' - Assert !isdirectory(g:directory), 'The temporary directory was not deleted' - Assert isdirectory(g:preserved_directory), 'The temporary directory was not kept' - -Execute(ALE should delete managed files even if no command is run): - AssertEqual 'foobar', &filetype - - let g:command = '' - - call ale#Queue(0) - call ale#test#WaitForJobs(2000) - - Assert !filereadable(g:filename), 'The temporary file was not deleted' - Assert !isdirectory(g:directory), 'The temporary directory was not deleted' - Assert isdirectory(g:preserved_directory), 'The temporary directory was not kept' - -Execute(ALE should delete managed files when the buffer is removed): - call ale#engine#InitBufferInfo(bufnr('%')) - call TestCommandCallback(bufnr('%')) - call ale#engine#Cleanup(bufnr('%')) - - Assert !filereadable(g:filename), 'The temporary file was not deleted' - Assert !isdirectory(g:directory), 'The temporary directory was not deleted' - Assert isdirectory(g:preserved_directory), 'The tempoary directory was not kept' - -Execute(ALE should create and delete directories for ale#command#CreateDirectory()): - call ale#engine#InitBufferInfo(bufnr('%')) - - let b:dir = ale#command#CreateDirectory(bufnr('%')) - let b:dir2 = ale#command#CreateDirectory(bufnr('%')) - - Assert isdirectory(b:dir), 'The directory was not created' - - " We should get the correct file permissions. - " We want to ensure that the directory is not readable by 'other' - if has('unix') - AssertEqual 'rwxr-x---', getfperm(b:dir) - endif - - " The two directories shouldn't be the same. - AssertNotEqual b:dir2, b:dir - - call ale#engine#Cleanup(bufnr('%')) - - Assert !isdirectory(b:dir), 'The directory was not deleted' - Assert !isdirectory(b:dir2), 'The second directory was not deleted' - -Execute(ale#command#ManageFile should add the file even if the buffer info hasn't been set yet): - call ale#command#ManageFile(bufnr(''), '/foo/bar') - - AssertEqual - \ { - \ bufnr(''): { - \ 'jobs': {}, - \ 'file_list': ['/foo/bar'], - \ 'directory_list': [], - \ }, - \ }, - \ ale#command#GetData() - -Execute(ale#command#ManageDirectory should add the directory even if the buffer info hasn't been set yet): - call ale#command#ManageDirectory(bufnr(''), '/foo/bar') - - AssertEqual - \ { - \ bufnr(''): { - \ 'jobs': {}, - \ 'file_list': [], - \ 'directory_list': ['/foo/bar'], - \ }, - \ }, - \ ale#command#GetData() diff --git a/dotfiles/.vim/plugged/ale/test/test_tmpdir_wrapper.vader b/dotfiles/.vim/plugged/ale/test/test_tmpdir_wrapper.vader deleted file mode 100644 index 151b8943..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_tmpdir_wrapper.vader +++ /dev/null @@ -1,32 +0,0 @@ -Before: - let g:exists = exists('$TMPDIR') - let g:old_value = $TMPDIR - -After: - if g:exists - let $TMPDIR = g:old_value - else - silent! unlet! $TMPDIR - endif - - unlet! g:exists - unlet! g:old_value - -Execute(ale#util#Tempname shouldn't set $TMPDIR to an empty string if it isn't set): - " You can't run this test twice on old Vim versions. - if has('unix') - Assert ale#util#Tempname() =~# '^/tmp' - Assert !exists('$TMPDIR'), '$TMPDIR exists where it shouldn''t' - endif - -Execute(ale#util#Tempname shouldn't replace $TMPDIR and reset them to an empty string.): - if has('unix') - let $TMPDIR = '' - Assert ale#util#Tempname() =~# '^/tmp' - - if !has('nvim') - Assert exists('$TMPDIR'), '$TMPDIR doesn''t exist where it should' - endif - - AssertEqual '', $TMPDIR - endif diff --git a/dotfiles/.vim/plugged/ale/test/test_vim8_processid_parsing.vader b/dotfiles/.vim/plugged/ale/test/test_vim8_processid_parsing.vader deleted file mode 100644 index 26416b15..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_vim8_processid_parsing.vader +++ /dev/null @@ -1,5 +0,0 @@ -Execute(Vim8 Process ID parsing should work): - AssertEqual 123, ale#job#ParseVim8ProcessID('process 123 run') - AssertEqual 347, ale#job#ParseVim8ProcessID('process 347 failed') - AssertEqual 789, ale#job#ParseVim8ProcessID('process 789 dead') - AssertEqual 0, ale#job#ParseVim8ProcessID('no process') diff --git a/dotfiles/.vim/plugged/ale/test/test_windows_escaping.vader b/dotfiles/.vim/plugged/ale/test/test_windows_escaping.vader deleted file mode 100644 index 22cad888..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_windows_escaping.vader +++ /dev/null @@ -1,42 +0,0 @@ -Before: - Save &shell - let &shell = 'cmd.exe' - -After: - Restore - -Execute(ale#Escape for cmd.exe should allow not escape paths without special characters): - AssertEqual 'C:', ale#Escape('C:') - AssertEqual 'C:\', ale#Escape('C:\') - AssertEqual 'python', ale#Escape('python') - AssertEqual 'C:\foo\bar', ale#Escape('C:\foo\bar') - AssertEqual '/bar/baz', ale#Escape('/bar/baz') - AssertEqual 'nul', ale#Escape('nul') - AssertEqual '''foo''', ale#Escape('''foo''') - -Execute(ale#Escape for cmd.exe should escape Windows paths with spaces appropriately): - AssertEqual '"C:\foo bar\baz"', ale#Escape('C:\foo bar\baz') - AssertEqual '"^foo bar^"', ale#Escape('^foo bar^') - AssertEqual '"&foo bar&"', ale#Escape('&foo bar&') - AssertEqual '"|foo bar|"', ale#Escape('|foo bar|') - AssertEqual '"foo bar>"', ale#Escape('>foo bar>') - AssertEqual '"^foo bar^"', ale#Escape('^foo bar^') - AssertEqual '"''foo'' ''bar''"', ale#Escape('''foo'' ''bar''') - -Execute(ale#Escape for cmd.exe should use caret escapes on special characters): - AssertEqual '^^foo^^', ale#Escape('^foo^') - AssertEqual '^&foo^&', ale#Escape('&foo&') - AssertEqual '^|foo^|', ale#Escape('|foo|') - AssertEqual '^foo^>', ale#Escape('>foo>') - AssertEqual '^^foo^^', ale#Escape('^foo^') - AssertEqual '''foo''^^''bar''', ale#Escape('''foo''^''bar''') - -Execute(ale#Escape for cmd.exe should escape percent characters): - AssertEqual '%%foo%%', ale#Escape('%foo%') - AssertEqual 'C:\foo%%\bar\baz%%', ale#Escape('C:\foo%\bar\baz%') - AssertEqual '"C:\foo bar%%\baz%%"', ale#Escape('C:\foo bar%\baz%') - AssertEqual '^^%%foo%%', ale#Escape('^%foo%') - AssertEqual '"^%%foo%% %%bar%%"', ale#Escape('^%foo% %bar%') - AssertEqual '"^%%foo%% %%bar%% """""', ale#Escape('^%foo% %bar% ""') diff --git a/dotfiles/.vim/plugged/ale/test/test_wrap_comand.vader b/dotfiles/.vim/plugged/ale/test/test_wrap_comand.vader deleted file mode 100644 index 7ddb06a1..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_wrap_comand.vader +++ /dev/null @@ -1,48 +0,0 @@ -Before: - Save g:ale_command_wrapper - - let g:ale_command_wrapper = '' - - function! TestCommand(expected_part, input) abort - let l:expected = has('win32') - \ ? 'cmd /s/c "' . a:expected_part . '"' - \ : split(&shell) + split(&shellcmdflag) + [a:expected_part] - - AssertEqual l:expected, ale#job#PrepareCommand(bufnr(''), a:input) - endfunction - -After: - Restore - - unlet! b:ale_command_wrapper - - delfunction TestCommand - -Execute(The command wrapper should work with a nice command): - let b:ale_command_wrapper = 'nice -n 5' - - call TestCommand('nice -n 5 foo bar', 'foo bar') - -Execute(The command wrapper should work with a nice command with an explicit marker): - let b:ale_command_wrapper = 'nice -n 5 %*' - - call TestCommand('nice -n 5 foo bar', 'foo bar') - -Execute(Wrappers with spread arguments in the middle should be suppported): - let b:ale_command_wrapper = 'wrap %* --' - - call TestCommand('wrap foo bar --', 'foo bar') - -Execute(Wrappers with the command as one argument should be supported): - let b:ale_command_wrapper = 'wrap -c %@ -x' - - call TestCommand('wrap -c ' . ale#Escape('foo bar') . ' -x', 'foo bar') - -Execute(&& and ; should be moved to the front): - let b:ale_command_wrapper = 'wrap -c %@ -x' - - call TestCommand('foo && bar; wrap -c ' . ale#Escape('baz') . ' -x', 'foo && bar;baz') - - let b:ale_command_wrapper = 'nice -n 5' - - call TestCommand('foo && bar; nice -n 5 baz -z', 'foo && bar;baz -z') diff --git a/dotfiles/.vim/plugged/ale/test/test_writefile_function.vader b/dotfiles/.vim/plugged/ale/test/test_writefile_function.vader deleted file mode 100644 index 53a88331..00000000 --- a/dotfiles/.vim/plugged/ale/test/test_writefile_function.vader +++ /dev/null @@ -1,117 +0,0 @@ -Before: - call ale#test#SetDirectory('/testplugin/test') - - let g:new_line_test_file = tempname() - -After: - noautocmd :e! ++ff=unix - setlocal buftype=nofile - - if filereadable(g:new_line_test_file) - call delete(g:new_line_test_file) - endif - - unlet! g:new_line_test_file - - call ale#test#RestoreDirectory() - -Given(A file with Windows line ending characters): - first - second - third - -Execute(Carriage returns should be included for ale#util#Writefile): - call ale#test#SetFilename(g:new_line_test_file) - - setlocal buftype= - noautocmd :w - noautocmd :e! ++ff=dos - - call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file) - - AssertEqual - \ ["first\r", "second\r", "third\r", ''], - \ readfile(g:new_line_test_file, 'b') - -Given(A file with extra carriage returns): - first - second - third - fourth - -Execute(Carriage returns should be de-depulicated): - call ale#test#SetFilename(g:new_line_test_file) - - setlocal buftype= - noautocmd :w - noautocmd :e! ++ff=dos - - call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file) - - AssertEqual - \ ["first\r", "second\r", "third\r", "fourth\r", ''], - \ readfile(g:new_line_test_file, 'b') - -Given(A file with Unix line ending characters): - first - second - third - -Execute(Unix file lines should be written as normal): - call ale#test#SetFilename(g:new_line_test_file) - - setlocal buftype= - noautocmd :w - noautocmd :e! ++ff=unix - - call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file) - - AssertEqual - \ ['first', 'second', 'third', ''], - \ readfile(g:new_line_test_file, 'b') - -Execute(Newline at end of file should be preserved even when nofixeol): - call ale#test#SetFilename(g:new_line_test_file) - - setlocal buftype= - noautocmd :w - noautocmd :e! ++ff=unix - set eol - set nofixeol - - call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file) - - AssertEqual - \ ['first', 'second', 'third', ''], - \ readfile(g:new_line_test_file, 'b') - -Execute(Newline should not be appended on write when noeol and nofixeol): - call ale#test#SetFilename(g:new_line_test_file) - - setlocal buftype= - noautocmd :w - noautocmd :e! ++ff=unix - set noeol - set nofixeol - - call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file) - - AssertEqual - \ ['first', 'second', 'third'], - \ readfile(g:new_line_test_file, 'b') - -Execute(Newline should be appended on write when noeol and fixeol): - call ale#test#SetFilename(g:new_line_test_file) - - setlocal buftype= - noautocmd :w - noautocmd :e! ++ff=unix - set noeol - set fixeol - - call ale#util#Writefile(bufnr(''), getline(1, '$'), g:new_line_test_file) - - AssertEqual - \ ['first', 'second', 'third', ''], - \ readfile(g:new_line_test_file, 'b') - diff --git a/dotfiles/.vim/plugged/ale/test/util/test_cd_string_commands.vader b/dotfiles/.vim/plugged/ale/test/util/test_cd_string_commands.vader deleted file mode 100644 index d854214a..00000000 --- a/dotfiles/.vim/plugged/ale/test/util/test_cd_string_commands.vader +++ /dev/null @@ -1,20 +0,0 @@ -Before: - silent! cd /testplugin/test/util - let g:dir = getcwd() - -After: - silent execute 'cd ' . fnameescape(g:dir) - unlet! g:dir - -Execute(CdString should output the correct command string): - " We will check that escaping is done correctly for each platform. - AssertEqual - \ has('unix') ? 'cd ''/foo bar/baz'' && ' : 'cd /d "/foo bar/baz" && ', - \ ale#command#CdString('/foo bar/baz') - -Execute(CdString handle substitution and formatting): - call ale#test#SetFilename('foo.txt') - - AssertEqual - \ has('unix') ? 'cd %s:h && ' : 'cd /d %s:h && ', - \ ale#command#CdString('%s:h') diff --git a/dotfiles/.vim/plugged/ale/test/v_files/testfile.v b/dotfiles/.vim/plugged/ale/test/v_files/testfile.v deleted file mode 100644 index e69de29b..00000000 diff --git a/dotfiles/.vim/plugged/ale/test/vimrc b/dotfiles/.vim/plugged/ale/test/vimrc deleted file mode 100644 index 3f80c636..00000000 --- a/dotfiles/.vim/plugged/ale/test/vimrc +++ /dev/null @@ -1,42 +0,0 @@ -" vint: -ProhibitSetNoCompatible - -" Make most tests just set lists synchronously when run in Docker, etc. -let g:ale_set_lists_synchronously = 1 - -" This lowercase highlight definition is needed for highlight tests. -hi link aleerrorline spellbad - -" Load builtin plugins -" We need this because run_vim.sh sets -i NONE -if has('win32') - set runtimepath=$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,C:\vader,C:\testplugin -else - set runtimepath=/home/vim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,/testplugin,/vader -endif - -" The following is just an example -filetype plugin indent on -syntax on - -if !has('win32') - set shell=/bin/sh - set shellcmdflag=-c -endif - -set nocompatible -set tabstop=4 -set softtabstop=4 -set shiftwidth=4 -set expandtab -set backspace=2 -set nofoldenable -set foldmethod=syntax -set foldlevelstart=10 -set foldnestmax=10 -set ttimeoutlen=0 -" The encoding must be explicitly set for tests for Windows. -execute 'set encoding=utf-8' - -let g:mapleader=',' - -let g:ale_ignore_2_4_warnings = 1 diff --git a/dotfiles/.vim/plugged/ansible-vim/.gitrepo b/dotfiles/.vim/plugged/ansible-vim/.gitrepo deleted file mode 100644 index f075d5c9..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/.gitrepo +++ /dev/null @@ -1,12 +0,0 @@ -; DO NOT EDIT (unless you know what you are doing) -; -; This subdirectory is a git "subrepo", and this file is maintained by the -; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme -; -[subrepo] - remote = https://github.com/pearofducks/ansible-vim.git - branch = master - commit = 93798e8c89c441d29d4678da0c0d5e1429eb43b0 - parent = 1dcbe335e115f9620b426aa8a0ff2c6c31e29f69 - method = merge - cmdver = 0.4.3 diff --git a/dotfiles/.vim/plugged/ansible-vim/LICENSE b/dotfiles/.vim/plugged/ansible-vim/LICENSE deleted file mode 100644 index c0c8abe6..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Dave Honneffer - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/dotfiles/.vim/plugged/ansible-vim/README.md b/dotfiles/.vim/plugged/ansible-vim/README.md deleted file mode 100644 index 11dd67fa..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/README.md +++ /dev/null @@ -1,161 +0,0 @@ -## introduction - -This is a vim syntax plugin for Ansible 2.x, it supports YAML playbooks, Jinja2 templates, and Ansible's `hosts` files. - -- YAML playbooks are detected if: - - they are in the `group_vars` or `host_vars` folder - - they are in the `tasks`, `roles`, or `handlers` folder and have either a *.yml* or *.yaml* suffix - - they are named `playbook.y(a)ml`, `site.y(a)ml`, or `main.y(a)ml` -- Jinja2 templates are detected if they have a *.j2* suffix -- Files named `hosts` will be treated as Ansible hosts files - -You can also set the filetype to `yaml.ansible`, `*.jinja2`, or `ansible_hosts` if auto-detection does not work (e.g. `:set ft=yaml.ansible` or `:set ft=ruby.jinja2`). **Note**: If you want to detect a custom pattern of your own, you can easily add this in your `.vimrc` using something like this: - -```vim -au BufRead,BufNewFile */playbooks/*.yml set filetype=yaml.ansible -``` - -If you want to override the default file type detection you can easily do this in your `.vimrc`. For example if you use YAML syntax for `hosts` include something like this: - -```vim -augroup ansible_vim_fthosts - autocmd! - autocmd BufNewFile,BufRead hosts setfiletype yaml.ansible -augroup END -``` - -This plugin should be quite reliable, as it sources the original formats and simply modifies the highlights as appropriate. This also enables a focus on simplicity and configurability instead of patching bad syntax detection. - -##### examples (with [solarized](https://github.com/altercation/vim-colors-solarized) colorscheme) - -Bright (and selective highlight) | Dim -:-----------------------------------:|:-------------------------: -![](http://i.imgur.com/whBOZZK.png) | ![](http://i.imgur.com/XS0T00e.png) - -##### installation - -Use your favorite plugin manager, or try [vim-plug](https://github.com/junegunn/vim-plug) if you're looking for a really nice one! - -**vim-plug:** `Plug 'pearofducks/ansible-vim'` - -**vim-plug with post-update hook:** `Plug 'pearofducks/ansible-vim', { 'do': -'./UltiSnips/generate.sh' }` - -*Note: Because of Ansible API changes, `generate.sh` may require the latest (or near-latest) version of Ansible.* - -*Note2: `generate.sh` can receive some parameters, for more info see its [Readme](https://github.com/pearofducks/ansible-vim/tree/master/UltiSnips#script-parameters)* - -**vundle:** `Plugin 'pearofducks/ansible-vim'` - -**pathogen:** `git clone https://github.com/pearofducks/ansible-vim ~/.vim/bundle/ansible-vim` - -**Arch Linux:** Package [vim-ansible](https://www.archlinux.org/packages/community/any/vim-ansible/) is available in the *community* repository. - -**Fedora:** The [vim-ansible](https://src.fedoraproject.org/rpms/vim-ansible) package is available in the default repository. - -**RHEL/CentOS:** The [vim-ansible](https://src.fedoraproject.org/rpms/vim-ansible) package is available in the [EPEL](https://fedoraproject.org/wiki/EPEL) repository. - -## options - -##### g:ansible_unindent_after_newline - -`let g:ansible_unindent_after_newline = 1` - -When this variable is set, indentation will completely reset (unindent to column 0) after two newlines in insert-mode. The normal behavior of YAML is to always keep the previous indentation, even across multiple newlines with no content. - -##### g:ansible_yamlKeyName - -`let g:ansible_yamlKeyName = 'yamlKey'` - -This option exists to provide additional compatibility with [stephpy/vim-yaml](https://github.com/stephpy/vim-yaml). - -##### g:ansible_attribute_highlight -`let g:ansible_attribute_highlight = "ob"` - -Ansible modules use a `key=value` format for specifying module-attributes in playbooks. This highlights those as specified. This highlight option is also used when highlighting key/value pairs in `hosts` files. - -Available flags (bold are defaults): - -- **a**: highlight *all* instances of `key=` -- o: highlight *only* instances of `key=` found on newlines -- **d**: *dim* the instances of `key=` found -- b: *brighten* the instances of `key=` found -- n: turn this highlight off completely - -##### g:ansible_name_highlight -`let g:ansible_name_highlight = 'd'` - -Ansible modules commonly start with a `name:` key for self-documentation of playbooks. This option enables/changes highlight of this. - -Available flags (this feature is off by default): - -- d: *dim* the instances of `name:` found -- b: *brighten* the instances of `name:` found - -##### g:ansible_extra_keywords_highlight -`let g:ansible_extra_keywords_highlight = 1` - -*Note:* This option is enabled when set, and disabled when not set. - -Highlight the following additional keywords: `become become_exe become_flags become_method become_user become_pass prompt_l10n debugger always_run check_mode diff no_log args tags force_handlers vars vars_files vars_prompt delegate_facts delegate_to any_errors_fatal ignore_errors ignore_unreachable max_fail_percentage connection hosts port remote_user module_defaults environment fact_path gather_facts gather_subset gather_timeout async poll throttle timeout order run_once serial strategy`. - -By default we only highlight: `include include_role include_tasks include_vars import_role import_playbook import_tasks when changed_when failed_when block rescue always notify listen register action local_action post_tasks pre_tasks tasks handlers roles collections` and loop keywords `with_.+`, `loop`, `loop_control`, `until`, `retries`, `delay`. - -##### g:ansible_extra_keywords_highlight_group -`let g:ansible_extra_keywords_highlight_group = 'Statement'` - -Accepts any syntax group name from `:help E669` - e.g. _Comment_, _Constant_, _Identifier_ - -*Note:* Defaults to 'Structure' when not set. - -##### g:ansible_normal_keywords_highlight -`let g:ansible_normal_keywords_highlight = 'Constant'` - -Accepts any syntax group name from `:help E669` - e.g. _Comment_, _Constant_, _Identifier_ - -*Note:* Defaults to 'Statement' when not set. - -This option change the highlight of the following common keywords: `include include_role include_tasks include_vars import_role import_playbook import_tasks when changed_when failed_when block rescue always notify listen register action local_action post_tasks pre_tasks tasks handlers roles collections`. - -##### g:ansible_loop_keywords_highlight -`let g:ansible_loop_keywords_highlight = 'Constant'` - -Accepts any syntax group-name from `:help E669` - e.g. _Comment_, _Constant_, _Identifier_ - -*Note:* Defaults to 'Statement' when not set. - -This option changes the highlight of all `with_.+`, `loop`, `loop_control`, `until`, `retries` and `delay` keywords. - -##### g:ansible_template_syntaxes -`let g:ansible_template_syntaxes = { '*.rb.j2': 'ruby' }` - -Accepts a dictionary in the form of `'regex-for-file': 'filetype'`. -- _regex-for-file_ will receive the full filepath, so directory matching can be done. -- _filetype_ is the root filetype to be applied, `jinja2` will be automatically appended - -All files ending in `*.j2` that aren't matched will simply get the `jinja2` filetype. - -##### g:ansible_ftdetect_filename_regex -`let g:ansible_ftdetect_filename_regex = '\v(playbook|site|main|local|requirements)\.ya?ml$'` - -Accepts a regex string that is used to match the filename to determine if the file should use the Ansible filetype - -Can be used to avoid clashes with other files that are named the same - e.g. main.yaml used in github workflows by removing `main` from the regex - -## goto role under cursor (similar to gf) - -This behavior is not supported out of the box, but you can use [this snippet](https://gist.github.com/mtyurt/3529a999af675a0aff00eb14ab1fdde3) in your vimrc. - -You'll then be able to go to a role's definition with `gr`. - -## bugs, suggestions/requests, & contributions - -##### bugs - -It's unlikely that there will be bugs in highlighting that don't exist in the core format. Where appropriate these will be fixed in this plugin, but if the problem is with the original syntax we should probably focus on fixing that instead. - -Indenting a full document - e.g with `gg=G` - will not be supported and is not a goal of this plugin (unless someone else develops it!). Please do not file a bug report on this. - -##### suggestions/requests - -Suggestions for improvements are welcome, pull-requests with completed features even more so. :) diff --git a/dotfiles/.vim/plugged/ansible-vim/UltiSnips/.gitignore b/dotfiles/.vim/plugged/ansible-vim/UltiSnips/.gitignore deleted file mode 100644 index a36c6227..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/UltiSnips/.gitignore +++ /dev/null @@ -1 +0,0 @@ -ansible.snippets diff --git a/dotfiles/.vim/plugged/ansible-vim/UltiSnips/README.md b/dotfiles/.vim/plugged/ansible-vim/UltiSnips/README.md deleted file mode 100644 index 079ec902..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/UltiSnips/README.md +++ /dev/null @@ -1,35 +0,0 @@ -Generate Snippets Based on Ansible Modules -========================================== - -A script to generate `UltiSnips` based on ansible code on the fly. - -**Note:** Requires Ansible 2.4 or later. - -Script parameters ------------------ -There are a couple of optional arguments for the script. - - * --output: Output filename (Default: ansible.snippets) - * --style: YAML formatting style for snippets - Choices: multiline (default), dictionary - * --sort: Whether to sort module arguments (default: no) - -For Users ---------- -We display option description somewhere, however, there are some special formatters in it. -For your reference, we list them here and you can find them under `/ansible/repo/hacking/module_formatter.py`: - - * I: Italic - * B: Bold - * M: Module - * U: URL - * C: Const - -For Developers --------------- -* `pip install ansible` first - -Thanks ------- -* Based on (ansible)[https://github.com/ansible/ansible] Awesome Documentation -* Inspired by [bleader/ansible_snippet_generator](https://github.com/bleader/ansible_snippet_generator) diff --git a/dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.py b/dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.py deleted file mode 100755 index 35fe1caf..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.py +++ /dev/null @@ -1,389 +0,0 @@ -#!/usr/bin/env python3 -import argparse -import os -import os.path -import ansible -from packaging import version -import ansible.modules -from ansible.utils.plugin_docs import get_docstring -from ansible.plugins.loader import fragment_loader -from typing import Any, List - -OUTPUT_FILENAME = "ansible.snippets" -OUTPUT_STYLE = ["multiline", "dictionary"] -HEADER = [ - "# NOTE: This file is auto-generated. Modifications may be overwritten.", - "priority -50", -] -MAX_DESCRIPTION_LENGTH = 512 -ANSIBLE_VERSION = ansible.release.__version__ - - -def get_files_builtin() -> List[str]: - """Return the sorted list of all module files that ansible provides with the ansible package - - Returns - ------- - List[str] - A list of strings representing the Python module files provided by - Ansible - """ - - file_names: List[str] = [] - for root, dirs, files in os.walk(os.path.dirname(ansible.modules.__file__)): - files_without_symlinks = [] - for f in files: - if not os.path.islink(os.path.join(root, f)): - files_without_symlinks.append(f) - file_names += [ - f"{root}/{file_name}" - for file_name in files_without_symlinks - if file_name.endswith(".py") and not file_name.startswith("__init__") - ] - - return sorted(file_names) - - -def get_files_collections(user: bool = False) -> List[str]: - """Return the sorted list of all module files provided by collections installed in either - the system folder /usr/share/ansible/collections/ or user folder ~/.ansible/collections/ - - Parameters - ---------- - user: bool (default: False) - A boolean indicating whether to get collections installed in the user folder - - Returns - ------- - List[str] - A list of strings representing the Python module files provided by collections - """ - - if user: - collection_path = '~/.ansible/collections/ansible_collections/' - else: - collection_path = '/usr/share/ansible/collections/ansible_collections/' - - file_names: List[str] = [] - for root, dirs, files in os.walk(os.path.expanduser(collection_path)): - files_without_symlinks = [] - for f in files: - if not os.path.islink(os.path.join(root, f)): - files_without_symlinks.append(f) - file_names += [ - f"{root}/{file_name}" - for file_name in files_without_symlinks - if file_name.endswith(".py") and not file_name.startswith("__init__") and "plugins/modules" in root - ] - - return sorted(file_names) - - -def get_module_docstring(file_path: str) -> Any: - """Extract and return docstring information from a module file - - Parameters - ---------- - file_names: file_path[str] - string representing module file - - Returns - ------- - Any - An AnsibleMapping object, representing docstring information - (in dict form), excluding those that are marked as deprecated. - - """ - - docstring = get_docstring(file_path, fragment_loader)[0] - - if docstring and not docstring.get("deprecated"): - return docstring - - -def escape_strings(escapist: str) -> str: - """Escapes strings as required for ultisnips snippets - - Escapes instances of \\, `, {, }, $ - - Parameters - ---------- - escapist: str - A string to apply string replacement on - - Returns - ------- - str - The input string with all defined replacements applied - """ - - return ( - escapist.replace("\\", "\\\\") - .replace("`", r"\`") - .replace("{", r"\{") - .replace("}", r"\}") - .replace("$", r"\$") - .replace("\"", "'") - ) - - -def option_data_to_snippet_completion(option_data: Any) -> str: - """Convert Ansible option info into a string used for ultisnip completion - - Converts data about an Ansible module option (retrieved from an - AnsibleMapping object) into a formatted string that can be used within an - UltiSnip macro. - - Parameters - ---------- - option_data: Any - The option parameters - - Returns - ------- - str - A string representing one formatted option parameter - """ - - # join descriptions that are provided as lists and crop them - description = escape_strings( - "".join(option_data.get("description"))[0:MAX_DESCRIPTION_LENGTH] - ) - default = option_data.get("default") - choices = option_data.get("choices") - option_type = option_data.get("type") - - # if the option is of type "bool" return "yes" or "no" - if option_type and "bool" in option_type: - if default in [True, "True", "true", "yes"]: - return "true" - if default in [False, "False", "false", "no"]: - return "false" - - # if there is no default and no choices, return the description - if not choices and default is None and not args.no_description: - return f"# {description}" - - # if there is a default but no choices return the default as string - if default is not None and not choices: - if len(str(default)) == 0: - return '""' - else: - if isinstance(default, str) and "\\" in default: - return f'"{escape_strings(str(default))}"' - elif isinstance(default, str): - return escape_strings(str(default)) - else: - return default - - # if there is a default and there are choices return the list of choices - # with the default prefixed with # - if default is not None and choices: - if isinstance(default, list): - # prefix default choice(s) - prefixed_choices = [ - f"#{choice}" if choice in default else f"{choice}" for choice in choices - ] - return str(prefixed_choices) - else: - # prefix default choice - prefixed_choices = [ - f"#{choice}" if str(choice) == str(default) else f"{choice}" - for choice in choices - ] - return "|".join(prefixed_choices) - - # if there are choices but no default, return the choices as pipe separated - # list - if choices and default is None: - return "|".join([str(choice) for choice in choices]) - - # as fallback return empty string - return "" - - -def module_options_to_snippet_options(module_options: Any) -> List[str]: - """Convert module options to UltiSnips snippet options - - Parameters - ---------- - module_options: Any - The "options" attribute of an AnsibleMapping object - - Returns - ------- - List[str] - A list of strings representing converted options - """ - - options: List[str] = [] - delimiter = ": " if args.style == "dictionary" else "=" - - if not module_options: - return options - - # order by option name - module_options = sorted(module_options.items(), key=lambda x: x[0]) - # order by "required" attribute - module_options = sorted( - module_options, key=lambda x: x[1].get("required", False), reverse=True - ) - - # insert an empty option above the list of non-required options - for index, (_, option) in enumerate(module_options): - if not option.get("required") and not args.comment_non_required: - if index != 0: - module_options.insert(index, (None, None)) - break - - for index, (name, option_data) in enumerate(module_options, start=1): - # insert a line to separate required/non-required options - if not name and not option_data: - options += [""] - else: - # set comment character for non-required options - if not option_data.get("required") and args.comment_non_required: - comment = "#" - else: - comment = "" - # the free_form option in some modules are special - if name == "free_form": - options += [ - f"\t{comment}${{{index}:{name}{delimiter}{option_data_to_snippet_completion(option_data)}}}" - ] - else: - options += [ - f"\t{comment}{name}{delimiter}${{{index}:{option_data_to_snippet_completion(option_data)}}}" - ] - - return options - - -def convert_docstring_to_snippet(convert_docstring: Any, collection_name) -> List[str]: - """Converts data about an Ansible module into an UltiSnips snippet string - - Parameters - ---------- - convert_docstring: Any - An AnsibleMapping object representing the docstring for an Ansible - module - - Returns - ------- - str - A string representing an ultisnips compatible snippet of an Ansible - module - """ - - snippet: List[str] = [] - snippet_options = "b" - if "module" in convert_docstring.keys(): - module_name = convert_docstring["module"] - module_short_description = convert_docstring["short_description"] - - # use only the module name if ansible version < 2.10 - if version.parse(ANSIBLE_VERSION) < version.parse("2.10"): - snippet_module_name = f"{module_name}:" - # use FQCN if ansible version is 2.10 or higher - else: - snippet_module_name = f"{collection_name}.{module_name}:" - - snippet += [f'snippet {module_name} "{escape_strings(module_short_description)}" {snippet_options}'] - if args.style == "dictionary": - snippet += [f"{snippet_module_name}"] - else: - snippet += [f"{snippet_module_name}:{' >' if convert_docstring.get('options') else ''}"] - module_options = module_options_to_snippet_options(convert_docstring.get("options")) - snippet += module_options - snippet += ["endsnippet"] - - return snippet - -def get_collection_name(filepath:str) -> str: - """ Returns the collection name for a full file path """ - - path_splitted = filepath.split('/') - - collection_top_folder_index = path_splitted.index('ansible_collections') - collection_namespace = path_splitted[collection_top_folder_index + 1] - collection_name = path_splitted[collection_top_folder_index + 2] - - # print(f"{collection_namespace}.{collection_name}") - return f"{collection_namespace}.{collection_name}" - - -if __name__ == "__main__": - - parser = argparse.ArgumentParser() - parser.add_argument( - "--output", - help=f"Output filename (default: {OUTPUT_FILENAME})", - default=OUTPUT_FILENAME, - ) - parser.add_argument( - "--style", - help=f"YAML format used for snippets (default: {OUTPUT_STYLE[0]})", - choices=OUTPUT_STYLE, - default=OUTPUT_STYLE[0], - ) - parser.add_argument( - '--user', - help="Include user modules", - action="store_true", - default=False - ) - parser.add_argument( - '--no-description', - help="Remove options description", - action="store_true", - default=False - ) - parser.add_argument( - '--comment-non-required', - help="Comment non-required options", - action="store_true", - default=False - ) - args = parser.parse_args() - - - if version.parse(ANSIBLE_VERSION) < version.parse("2.10"): - print(f"ansible version {ANSIBLE_VERSION} doesn't support FQCN") - print("generated snippets will only use the module name e.g. 'yum' instead of 'ansible.builtin.yum'") - else: - print(f"ansible version {ANSIBLE_VERSION} supports using FQCN") - print("Generated snippets will use FQCN e.g. 'ansible.builtin.yum' instead of 'yum'") - print("Still, you only need to type 'yum' to trigger the snippet") - - modules_docstrings = [] - - builtin_modules_paths = get_files_builtin() - for f in builtin_modules_paths: - docstring_builtin = get_module_docstring(f) - if docstring_builtin and docstring_builtin not in modules_docstrings: - docstring_builtin['collection_name'] = "ansible.builtin" - modules_docstrings.append(docstring_builtin) - - system_modules_paths = get_files_collections() - for f in system_modules_paths: - docstring_system = get_module_docstring(f) - if docstring_system and docstring_system not in modules_docstrings: - collection_name = get_collection_name(f) - docstring_system['collection_name'] = collection_name - modules_docstrings.append(docstring_system) - - if args.user: - user_modules_paths = get_files_collections(user=True) - for f in user_modules_paths: - docstring_user = get_module_docstring(f) - if docstring_user and docstring_user not in modules_docstrings: - collection_name = get_collection_name(f) - docstring_user['collection_name'] = collection_name - modules_docstrings.append(docstring_user) - - with open(args.output, "w") as f: - f.writelines(f"{header}\n" for header in HEADER) - for docstring in modules_docstrings: - f.writelines( - f"{line}\n" for line in convert_docstring_to_snippet(docstring, docstring.get("collection_name")) - ) diff --git a/dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.sh b/dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.sh deleted file mode 100755 index 7ea9cbac..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/UltiSnips/generate.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -IFS=$'\n\t' - -cd "$(dirname "$0")" - -ANSIBLE_MODULE_LOCATION="$(ansible --version | grep "ansible python module location" | sed -E 's/ +ansible python module location += +//g')" -PYTHONPATH="$(dirname "$ANSIBLE_MODULE_LOCATION")" -PYTHON_VERSION=$(basename "$(dirname "$PYTHONPATH")") - -export PYTHONPATH -exec "$PYTHON_VERSION" generate.py $@ diff --git a/dotfiles/.vim/plugged/ansible-vim/ftdetect/ansible.vim b/dotfiles/.vim/plugged/ansible-vim/ftdetect/ansible.vim deleted file mode 100644 index 322b50a4..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/ftdetect/ansible.vim +++ /dev/null @@ -1,45 +0,0 @@ -function! s:isAnsible() - let filepath = expand("%:p") - let filename = expand("%:t") - if filepath =~ '\v/(tasks|roles|handlers)/.*\.ya?ml$' | return 1 | en - if filepath =~ '\v/(group|host)_vars/' | return 1 | en - let s:ftdetect_filename_regex = '\v(playbook|site|main|local|requirements)\.ya?ml$' - if exists("g:ansible_ftdetect_filename_regex") - let s:ftdetect_filename_regex = g:ansible_ftdetect_filename_regex - endif - - if filename =~ s:ftdetect_filename_regex | return 1 | en - - let shebang = getline(1) - if shebang =~# '^#!.*/bin/env\s\+ansible-playbook\>' | return 1 | en - if shebang =~# '^#!.*/bin/ansible-playbook\>' | return 1 | en - - return 0 -endfunction - -function! s:setupTemplate() - if exists("g:ansible_template_syntaxes") - let filepath = expand("%:p") - for syntax_name in items(g:ansible_template_syntaxes) - let s:syntax_string = '\v/'.syntax_name[0] - if filepath =~ s:syntax_string - execute 'set ft='.syntax_name[1].'.jinja2' - return - endif - endfor - endif - set ft=jinja2 -endfunction - -augroup ansible_vim_ftyaml_ansible - au! - au BufNewFile,BufRead * if s:isAnsible() | set ft=yaml.ansible | en -augroup END -augroup ansible_vim_ftjinja2 - au! - au BufNewFile,BufRead *.j2 call s:setupTemplate() -augroup END -augroup ansible_vim_fthosts - au! - au BufNewFile,BufRead hosts set ft=ansible_hosts -augroup END diff --git a/dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible.vim b/dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible.vim deleted file mode 100644 index 725fe980..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible.vim +++ /dev/null @@ -1,2 +0,0 @@ -set isfname+=@-@ -set path+=./../templates,./../files,templates,files diff --git a/dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible_hosts.vim b/dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible_hosts.vim deleted file mode 100644 index 393583b9..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/ftplugin/ansible_hosts.vim +++ /dev/null @@ -1,9 +0,0 @@ -if exists("b:did_ftplugin") - finish -else - let b:did_ftplugin = 1 -endif - -setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions-=c - -let b:undo_ftplugin = "setl comments< commentstring< formatoptions<" diff --git a/dotfiles/.vim/plugged/ansible-vim/indent/ansible.vim b/dotfiles/.vim/plugged/ansible-vim/indent/ansible.vim deleted file mode 100644 index 6a6c3e60..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/indent/ansible.vim +++ /dev/null @@ -1,63 +0,0 @@ -let s:save_cpo = &cpo -set cpo&vim - -setlocal indentexpr=GetAnsibleIndent(v:lnum) -setlocal indentkeys=!^F,o,O,0#,0},0],<:>,-,* -setlocal nosmartindent -setlocal expandtab -setlocal softtabstop=2 -setlocal shiftwidth=2 -setlocal commentstring=#%s -setlocal formatoptions+=cl -" c -> wrap long comments, including # -" l -> do not wrap long lines - -let s:comment = '\v^\s*#' " # comment -let s:array_entry = '\v^\s*-\s' " - foo -let s:named_module_entry = '\v^\s*-\s*(name|hosts|role):\s*\S' " - name: 'do stuff' -let s:dictionary_entry = '\v^\s*[^:-]+:\s*$' " with_items: -let s:key_value = '\v^\s*[^:-]+:\s*\S' " apt: name=package -let s:scalar_value = '\v:\s*[>|\|]\s*$' " shell: > -let s:blank = '\v^\s*$' " line with only spaces - -if exists('*GetAnsibleIndent') - finish -endif - -function GetAnsibleIndent(lnum) - if a:lnum == 1 || !prevnonblank(a:lnum-1) - return 0 - endif - if exists("g:ansible_unindent_after_newline") - if (a:lnum -1) != prevnonblank(a:lnum - 1) - return 0 - endif - endif - let prevlnum = prevnonblank(a:lnum - 1) - let default = GetYAMLIndent(a:lnum) - let increase = indent(prevlnum) + &sw - - let prevline = getline(prevlnum) - let line = getline(a:lnum) - if line !~ s:blank - return default " we only special case blank lines - elseif prevline =~ s:array_entry - if prevline =~ s:named_module_entry - return increase - else - return default - endif - elseif prevline =~ s:dictionary_entry - return increase - elseif prevline =~ s:key_value - if prevline =~ s:scalar_value - return increase - else - return default - endif - else - return default - endif -endfunction - -let &cpo = s:save_cpo diff --git a/dotfiles/.vim/plugged/ansible-vim/syntax/ansible.vim b/dotfiles/.vim/plugged/ansible-vim/syntax/ansible.vim deleted file mode 100644 index d17d75ac..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/syntax/ansible.vim +++ /dev/null @@ -1,126 +0,0 @@ -" Vim syntax file -" Language: Ansible YAML/Jinja templates -" Maintainer: Dave Honneffer -" Last Change: 2018.02.08 - -if !exists("main_syntax") - let main_syntax = 'yaml' -endif - -if exists('b:current_syntax') - let s:current_syntax=b:current_syntax - unlet b:current_syntax -endif - -syntax include @Jinja syntax/jinja2.vim - -if exists('s:current_syntax') - let b:current_syntax=s:current_syntax -endif - -" Jinja -" ================================ - -syn cluster jinjaSLSBlocks add=jinjaTagBlock,jinjaVarBlock,jinjaComment -" https://github.com/mitsuhiko/jinja2/blob/6b7c0c23/ext/Vim/jinja.vim -syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment,@jinjaSLSBlocks -syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,yamlComment,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment,@jinjaSLSBlocks -syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,@jinjaSLSBlocks -highlight link jinjaVariable Constant -highlight link jinjaVarDelim Delimiter - -" YAML -" ================================ - -if exists("g:ansible_yamlKeyName") - let s:yamlKey = g:ansible_yamlKeyName -else - let s:yamlKey = "yamlBlockMappingKey" -endif - -" Reset some YAML to plain styling -" the number 80 in Ansible isn't any more important than the word root -highlight link yamlInteger NONE -highlight link yamlBool NONE -highlight link yamlFlowString NONE -" but it does make sense we visualize quotes easily -highlight link yamlFlowStringDelimiter Delimiter -" This is only found in stephypy/vim-yaml, since it's one line it isn't worth -" making conditional -highlight link yamlConstant NONE - -fun! s:attribute_highlight(attributes) - if a:attributes =~ 'a' - syn match ansible_attributes "\v\w+\=" containedin=yamlPlainScalar - else - syn match ansible_attributes "\v^\s*\w+\=" containedin=yamlPlainScalar - endif - if a:attributes =~ 'n' - highlight link ansible_attributes NONE - elseif a:attributes =~ 'd' - highlight link ansible_attributes Comment - else - highlight default link ansible_attributes Structure - endif -endfun - -if exists("g:ansible_attribute_highlight") - call s:attribute_highlight(g:ansible_attribute_highlight) -else - call s:attribute_highlight('ad') -endif - -if exists("g:ansible_name_highlight") - execute 'syn keyword ansible_name name containedin='.s:yamlKey.' contained' - if g:ansible_name_highlight =~ 'd' - highlight link ansible_name Comment - else - highlight default link ansible_name Underlined - endif -endif - -execute 'syn keyword ansible_debug_keywords debug containedin='.s:yamlKey.' contained' -highlight default link ansible_debug_keywords Debug - -if exists("g:ansible_extra_keywords_highlight") - execute 'syn keyword ansible_extra_special_keywords - \ become become_exe become_flags become_method become_user become_pass prompt_l10n - \ debugger always_run check_mode diff no_log args tags force_handlers - \ vars vars_files vars_prompt delegate_facts delegate_to - \ any_errors_fatal ignore_errors ignore_unreachable max_fail_percentage - \ connection children hosts port remote_user module_defaults - \ environment fact_path gather_facts gather_subset gather_timeout - \ async poll throttle timeout order run_once serial strategy - \ containedin='.s:yamlKey.' contained' - if exists("g:ansible_extra_keywords_highlight_group") - execute 'highlight link ansible_extra_special_keywords '.g:ansible_extra_keywords_highlight_group - else - highlight link ansible_extra_special_keywords Structure - endif -endif - -execute 'syn keyword ansible_normal_keywords - \ include include_role include_tasks include_vars import_role import_playbook import_tasks - \ when changed_when failed_when block rescue always notify listen register - \ action local_action post_tasks pre_tasks tasks handlers roles collections - \ containedin='.s:yamlKey.' contained' -if exists("g:ansible_normal_keywords_highlight") - execute 'highlight link ansible_normal_keywords '.g:ansible_normal_keywords_highlight -else - highlight default link ansible_normal_keywords Statement -endif - -execute 'syn keyword ansible_loop_keywords - \ loop loop_control until retries delay - \ containedin='.s:yamlKey.' contained' -execute 'syn match ansible_loop_keywords "\vwith_.+" containedin='.s:yamlKey.' contained' -if exists("g:ansible_loop_keywords_highlight") - execute 'highlight link ansible_loop_keywords '.g:ansible_loop_keywords_highlight -" backward compatibility: ansible_with_keywords_highlight replaced by ansible_loop_keywords_highlight -elseif exists("g:ansible_with_keywords_highlight") - execute 'highlight link ansible_loop_keywords '.g:ansible_with_keywords_highlight -else - highlight default link ansible_loop_keywords Statement -endif - -let b:current_syntax = "ansible" diff --git a/dotfiles/.vim/plugged/ansible-vim/syntax/ansible_hosts.vim b/dotfiles/.vim/plugged/ansible-vim/syntax/ansible_hosts.vim deleted file mode 100644 index 2b87f2fb..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/syntax/ansible_hosts.vim +++ /dev/null @@ -1,31 +0,0 @@ -" Vim syntax file -" Language: Ansible hosts files -" Maintainer: Dave Honneffer -" Last Change: 2015.09.23 - -if exists("b:current_syntax") - finish -endif - -syn case ignore -syn match hostsFirstWord "\v^\S+" -syn match hostsAttributes "\v\S*\=" -syn region hostsHeader start="\v^\s*\[" end="\v\]" -syn keyword hostsHeaderSpecials children vars containedin=hostsHeader contained -syn match hostsComment "\v^[#;].*$" - -highlight default link hostsFirstWord Label -highlight default link hostsHeader Define -highlight default link hostsComment Comment -highlight default link hostsHeaderSpecials Identifier -highlight default link hostsAttributes Structure - -if exists("g:ansible_attribute_highlight") - if g:ansible_attribute_highlight =~ 'n' - highlight link hostsAttributes NONE - elseif g:ansible_attribute_highlight =~ 'd' - highlight link hostsAttributes Comment - endif -endif - -let b:current_syntax = "ansible_hosts" diff --git a/dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim b/dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim deleted file mode 100644 index 4b8e35c5..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim +++ /dev/null @@ -1,97 +0,0 @@ -" Vim syntax file -" Language: Jinja2 - with special modifications for compound-filetype -" compatibility -" Maintainer: Dave Honneffer -" Last Change: 2018.02.11 - -if !exists("main_syntax") - let main_syntax = 'jinja2' -endif - -let b:current_syntax = '' -unlet b:current_syntax - -syntax case match - -" Jinja template built-in tags and parameters (without filter, macro, is and raw, they -" have special threatment) -syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained and if else in not or recursive as import - -syn keyword jinjaStatement containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained is filter skipwhite nextgroup=jinjaFilter -syn keyword jinjaStatement containedin=jinjaTagBlock contained macro skipwhite nextgroup=jinjaFunction -syn keyword jinjaStatement containedin=jinjaTagBlock contained block skipwhite nextgroup=jinjaBlockName - -" Variable Names -syn match jinjaVariable containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[a-zA-Z_][a-zA-Z0-9_]*/ -syn keyword jinjaSpecial containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained false true none False True None loop super caller varargs kwargs - -" Filters -syn match jinjaOperator "|" containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained skipwhite nextgroup=jinjaFilter -syn match jinjaFilter contained /[a-zA-Z_][a-zA-Z0-9_]*/ -syn match jinjaFunction contained /[a-zA-Z_][a-zA-Z0-9_]*/ -syn match jinjaBlockName contained /[a-zA-Z_][a-zA-Z0-9_]*/ - -" Jinja template constants -syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/"/ skip=/\(\\\)\@\)*\\"/ end=/"/ -syn region jinjaString containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained start=/'/ skip=/\(\\\)\@\)*\\'/ end=/'/ -syn match jinjaNumber containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[0-9]\+\(\.[0-9]\+\)\?/ - -" Operators -syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[+\-*\/<>=!,:]/ -syn match jinjaPunctuation containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /[()\[\]]/ -syn match jinjaOperator containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained /\./ nextgroup=jinjaAttribute -syn match jinjaAttribute contained /[a-zA-Z_][a-zA-Z0-9_]*/ - -" Jinja template tag and variable blocks -syn region jinjaNested matchgroup=jinjaOperator start="(" end=")" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained -syn region jinjaNested matchgroup=jinjaOperator start="\[" end="\]" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained -syn region jinjaNested matchgroup=jinjaOperator start="{" end="}" transparent display containedin=jinjaVarBlock,jinjaTagBlock,jinjaNested contained -syn region jinjaTagBlock matchgroup=jinjaTagDelim start=/{%-\?/ end=/-\?%}/ containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment - -syn region jinjaVarBlock matchgroup=jinjaVarDelim start=/{{-\?/ end=/-\?}}/ containedin=ALLBUT,yamlComment,jinjaTagBlock,jinjaVarBlock,jinjaRaw,jinjaString,jinjaNested,jinjaComment - -" Jinja template 'raw' tag -syn region jinjaRaw matchgroup=jinjaRawDelim start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString,jinjaComment - -" Jinja comments -syn region jinjaComment matchgroup=jinjaCommentDelim start="{#" end="#}" containedin=ALLBUT,jinjaTagBlock,jinjaVarBlock,jinjaString - -" Block start keywords. A bit tricker. We only highlight at the start of a -" tag block and only if the name is not followed by a comma or equals sign -" which usually means that we have to deal with an assignment. -syn match jinjaStatement containedin=jinjaTagBlock contained /\({%-\?\s*\)\@<=\<[a-zA-Z_][a-zA-Z0-9_]*\>\(\s*[,=]\)\@!/ - -" and context modifiers -syn match jinjaStatement containedin=jinjaTagBlock contained /\/ - - -" Define the default highlighting. -if !exists("did_jinja_syn_inits") - command -nargs=+ HiLink hi def link - - HiLink jinjaPunctuation jinjaOperator - HiLink jinjaAttribute jinjaVariable - HiLink jinjaFunction jinjaFilter - - HiLink jinjaTagDelim jinjaTagBlock - HiLink jinjaVarDelim jinjaVarBlock - HiLink jinjaCommentDelim jinjaComment - HiLink jinjaRawDelim jinja - - HiLink jinjaSpecial Special - HiLink jinjaOperator Normal - HiLink jinjaRaw Normal - HiLink jinjaTagBlock PreProc - HiLink jinjaVarBlock PreProc - HiLink jinjaStatement Statement - HiLink jinjaFilter Function - HiLink jinjaBlockName Function - HiLink jinjaVariable Identifier - HiLink jinjaString Constant - HiLink jinjaNumber Constant - HiLink jinjaComment Comment - - delcommand HiLink -endif - -let b:current_syntax = "jinja2" diff --git a/dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim_LICENSE b/dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim_LICENSE deleted file mode 100644 index 31bf900e..00000000 --- a/dotfiles/.vim/plugged/ansible-vim/syntax/jinja2.vim_LICENSE +++ /dev/null @@ -1,31 +0,0 @@ -Copyright (c) 2009 by the Jinja Team, see AUTHORS for more details. - -Some rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - - * The names of the contributors may not be used to endorse or - promote products derived from this software without specific - prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/dotfiles/.vim/plugged/coc.nvim/.gitignore b/dotfiles/.vim/plugged/coc.nvim/.gitignore deleted file mode 100644 index f9ec5e3d..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -lib -*.map -coverage -__pycache__ -.pyc -.log -src -publish.sh -doc/tags -doc/tags-cn -node_modules -src/__tests__/tags -typings diff --git a/dotfiles/.vim/plugged/coc.nvim/.gitrepo b/dotfiles/.vim/plugged/coc.nvim/.gitrepo deleted file mode 100644 index b63de616..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/.gitrepo +++ /dev/null @@ -1,12 +0,0 @@ -; DO NOT EDIT (unless you know what you are doing) -; -; This subdirectory is a git "subrepo", and this file is maintained by the -; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme -; -[subrepo] - remote = https://github.com/neoclide/coc.nvim.git - branch = release - commit = 387b7850a23cb6bfb4ecdcee84c1d80ccb3965f1 - parent = 5ae4f6241617baf4341c098d40f714c35af8b1b7 - method = merge - cmdver = 0.4.3 diff --git a/dotfiles/.vim/plugged/coc.nvim/LICENSE.md b/dotfiles/.vim/plugged/coc.nvim/LICENSE.md deleted file mode 100644 index bee2bf1d..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/LICENSE.md +++ /dev/null @@ -1,7 +0,0 @@ -Copyright 2018-2018 by Qiming Zhao aaa - -Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/dotfiles/.vim/plugged/coc.nvim/Readme.md b/dotfiles/.vim/plugged/coc.nvim/Readme.md deleted file mode 100644 index 5999e569..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/Readme.md +++ /dev/null @@ -1,827 +0,0 @@ -

- - Logo - -

Make your Vim/Neovim as smart as VSCode.

-

- Software License - Actions - Codecov Coverage Status - Doc - Gitter -

-

- ---- - -Gif - -_Custom popup menu with snippet support_ - -## Why? - -- 🚀 **Fast**: separated NodeJS process that does not block your vim most of the time. -- 💎 **Reliable**: typed language, tested with CI. -- 🌟 **Featured**: all LSP 3.16 features are supported, see `:h coc-lsp`. -- ❤️ **Flexible**: [configured like VSCode](https://github.com/neoclide/coc.nvim/wiki/Using-the-configuration-file), [extensions work like in VSCode](https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions) - -## Quick Start - -Make sure use vim >= 8.1.1719 or neovim >= 0.4.0. - -Install [nodejs](https://nodejs.org/en/download/) >= 14.14: - -```bash -curl -sL install-node.vercel.app/lts | bash -``` - -For [vim-plug](https://github.com/junegunn/vim-plug) users: - -```vim -" Use release branch (recommend) -Plug 'neoclide/coc.nvim', {'branch': 'release'} - -" Or build from source code by using yarn: https://yarnpkg.com -Plug 'neoclide/coc.nvim', {'branch': 'master', 'do': 'yarn install --frozen-lockfile'} -``` - -in your `.vimrc` or `init.vim`, then restart Vim and run `:PlugInstall`. - -Checkout [Install -coc.nvim](https://github.com/neoclide/coc.nvim/wiki/Install-coc.nvim) for -more info. - -You **have to** install coc extension or configure language servers for -LSP support. - -Install extensions like: - - :CocInstall coc-json coc-tsserver - -Or configure language server in `coc-settings.json` opened by -`:CocConfig`, like: - -```json -{ - "languageserver": { - "go": { - "command": "gopls", - "rootPatterns": ["go.mod"], - "trace.server": "verbose", - "filetypes": ["go"] - } - } -} -``` - -Checkout wiki for more details: - -- [Completion with sources](https://github.com/neoclide/coc.nvim/wiki/Completion-with-sources) -- [Using the configuration file](https://github.com/neoclide/coc.nvim/wiki/Using-the-configuration-file) -- [Using coc extensions](https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions) -- [Configure language servers](https://github.com/neoclide/coc.nvim/wiki/Language-servers) -- [F.A.Q](https://github.com/neoclide/coc.nvim/wiki/F.A.Q) - -Checkout `:h coc-nvim` for vim interface. - -## Example vim configuration - -Configuration is required to make coc.nvim easier to work with, since it -doesn't change your key-mappings or Vim options. This is done as much as -possible to avoid conflict with your other plugins. - -**❗️Important**: Some Vim plugins could change key mappings. Please use -command like`:verbose imap ` to make sure that your keymap has taken effect. - -```vim - -" May need for vim (not neovim) since coc.nvim calculate byte offset by count -" utf-8 byte sequence. -set encoding=utf-8 -" Some servers have issues with backup files, see #649. -set nobackup -set nowritebackup - -" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable -" delays and poor user experience. -set updatetime=300 - -" Always show the signcolumn, otherwise it would shift the text each time -" diagnostics appear/become resolved. -set signcolumn=yes - -" Use tab for trigger completion with characters ahead and navigate. -" NOTE: There's always complete item selected by default, you may want to enable -" no select by `"suggest.noselect": true` in your configuration file. -" NOTE: Use command ':verbose imap ' to make sure tab is not mapped by -" other plugin before putting this into your config. -inoremap - \ coc#pum#visible() ? coc#pum#next(1) : - \ CheckBackspace() ? "\" : - \ coc#refresh() -inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" - -" Make to accept selected completion item or notify coc.nvim to format -" u breaks current undo, please make your own choice. -inoremap coc#pum#visible() ? coc#pum#confirm() - \: "\u\\=coc#on_enter()\" - -function! CheckBackspace() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' -endfunction - -" Use to trigger completion. -if has('nvim') - inoremap coc#refresh() -else - inoremap coc#refresh() -endif - -" Use `[g` and `]g` to navigate diagnostics -" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. -nmap [g (coc-diagnostic-prev) -nmap ]g (coc-diagnostic-next) - -" GoTo code navigation. -nmap gd (coc-definition) -nmap gy (coc-type-definition) -nmap gi (coc-implementation) -nmap gr (coc-references) - -" Use K to show documentation in preview window. -nnoremap K :call ShowDocumentation() - -function! ShowDocumentation() - if CocAction('hasProvider', 'hover') - call CocActionAsync('doHover') - else - call feedkeys('K', 'in') - endif -endfunction - -" Highlight the symbol and its references when holding the cursor. -autocmd CursorHold * silent call CocActionAsync('highlight') - -" Symbol renaming. -nmap rn (coc-rename) - -" Formatting selected code. -xmap f (coc-format-selected) -nmap f (coc-format-selected) - -augroup mygroup - autocmd! - " Setup formatexpr specified filetype(s). - autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') - " Update signature help on jump placeholder. - autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') -augroup end - -" Applying codeAction to the selected region. -" Example: `aap` for current paragraph -xmap a (coc-codeaction-selected) -nmap a (coc-codeaction-selected) - -" Remap keys for applying codeAction to the current buffer. -nmap ac (coc-codeaction) -" Apply AutoFix to problem on the current line. -nmap qf (coc-fix-current) - -" Run the Code Lens action on the current line. -nmap cl (coc-codelens-action) - -" Map function and class text objects -" NOTE: Requires 'textDocument.documentSymbol' support from the language server. -xmap if (coc-funcobj-i) -omap if (coc-funcobj-i) -xmap af (coc-funcobj-a) -omap af (coc-funcobj-a) -xmap ic (coc-classobj-i) -omap ic (coc-classobj-i) -xmap ac (coc-classobj-a) -omap ac (coc-classobj-a) - -" Remap and for scroll float windows/popups. -if has('nvim-0.4.0') || has('patch-8.2.0750') - nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" - nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" - inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" - inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" - vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" - vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" -endif - -" Use CTRL-S for selections ranges. -" Requires 'textDocument/selectionRange' support of language server. -nmap (coc-range-select) -xmap (coc-range-select) - -" Add `:Format` command to format current buffer. -command! -nargs=0 Format :call CocActionAsync('format') - -" Add `:Fold` command to fold current buffer. -command! -nargs=? Fold :call CocAction('fold', ) - -" Add `:OR` command for organize imports of the current buffer. -command! -nargs=0 OR :call CocActionAsync('runCommand', 'editor.action.organizeImport') - -" Add (Neo)Vim's native statusline support. -" NOTE: Please see `:h coc-status` for integrations with external plugins that -" provide custom statusline: lightline.vim, vim-airline. -set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} - -" Mappings for CoCList -" Show all diagnostics. -nnoremap a :CocList diagnostics -" Manage extensions. -nnoremap e :CocList extensions -" Show commands. -nnoremap c :CocList commands -" Find symbol of current document. -nnoremap o :CocList outline -" Search workspace symbols. -nnoremap s :CocList -I symbols -" Do default action for next item. -nnoremap j :CocNext -" Do default action for previous item. -nnoremap k :CocPrev -" Resume latest coc list. -nnoremap p :CocListResume -``` - -## Example lua configuration - -NOTE: This works in Neovim 0.7.0dev+ only. - -```lua --- Some servers have issues with backup files, see #649. -vim.opt.backup = false -vim.opt.writebackup = false - --- Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable --- delays and poor user experience. -vim.opt.updatetime = 300 - --- Always show the signcolumn, otherwise it would shift the text each time --- diagnostics appear/become resolved. -vim.opt.signcolumn = "yes" - -local keyset = vim.keymap.set --- Auto complete -function _G.check_back_space() - local col = vim.fn.col('.') - 1 - return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') ~= nil -end - --- Use tab for trigger completion with characters ahead and navigate. --- NOTE: There's always complete item selected by default, you may want to enable --- no select by `"suggest.noselect": true` in your configuration file. --- NOTE: Use command ':verbose imap ' to make sure tab is not mapped by --- other plugin before putting this into your config. -local opts = {silent = true, noremap = true, expr = true, replace_keycodes = false} -keyset("i", "", 'coc#pum#visible() ? coc#pum#next(1) : v:lua.check_back_space() ? "" : coc#refresh()', opts) -keyset("i", "", [[coc#pum#visible() ? coc#pum#prev(1) : "\"]], opts) - --- Make to accept selected completion item or notify coc.nvim to format --- u breaks current undo, please make your own choice. -keyset("i", "", [[coc#pum#visible() ? coc#pum#confirm() : "\u\\=coc#on_enter()\"]], opts) - --- Use to trigger snippets -keyset("i", "", "(coc-snippets-expand-jump)") --- Use to trigger completion. -keyset("i", "", "coc#refresh()", {silent = true, expr = true}) - --- Use `[g` and `]g` to navigate diagnostics --- Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. -keyset("n", "[g", "(coc-diagnostic-prev)", {silent = true}) -keyset("n", "]g", "(coc-diagnostic-next)", {silent = true}) - --- GoTo code navigation. -keyset("n", "gd", "(coc-definition)", {silent = true}) -keyset("n", "gy", "(coc-type-definition)", {silent = true}) -keyset("n", "gi", "(coc-implementation)", {silent = true}) -keyset("n", "gr", "(coc-references)", {silent = true}) - - --- Use K to show documentation in preview window. -function _G.show_docs() - local cw = vim.fn.expand('') - if vim.fn.index({'vim', 'help'}, vim.bo.filetype) >= 0 then - vim.api.nvim_command('h ' .. cw) - elseif vim.api.nvim_eval('coc#rpc#ready()') then - vim.fn.CocActionAsync('doHover') - else - vim.api.nvim_command('!' .. vim.o.keywordprg .. ' ' .. cw) - end -end -keyset("n", "K", 'lua _G.show_docs()', {silent = true}) - - --- Highlight the symbol and its references when holding the cursor. -vim.api.nvim_create_augroup("CocGroup", {}) -vim.api.nvim_create_autocmd("CursorHold", { - group = "CocGroup", - command = "silent call CocActionAsync('highlight')", - desc = "Highlight symbol under cursor on CursorHold" -}) - - --- Symbol renaming. -keyset("n", "rn", "(coc-rename)", {silent = true}) - - --- Formatting selected code. -keyset("x", "f", "(coc-format-selected)", {silent = true}) -keyset("n", "f", "(coc-format-selected)", {silent = true}) - - --- Setup formatexpr specified filetype(s). -vim.api.nvim_create_autocmd("FileType", { - group = "CocGroup", - pattern = "typescript,json", - command = "setl formatexpr=CocAction('formatSelected')", - desc = "Setup formatexpr specified filetype(s)." -}) - --- Update signature help on jump placeholder. -vim.api.nvim_create_autocmd("User", { - group = "CocGroup", - pattern = "CocJumpPlaceholder", - command = "call CocActionAsync('showSignatureHelp')", - desc = "Update signature help on jump placeholder" -}) - - --- Applying codeAction to the selected region. --- Example: `aap` for current paragraph -local opts = {silent = true, nowait = true} -keyset("x", "a", "(coc-codeaction-selected)", opts) -keyset("n", "a", "(coc-codeaction-selected)", opts) - --- Remap keys for applying codeAction to the current buffer. -keyset("n", "ac", "(coc-codeaction)", opts) - - --- Apply AutoFix to problem on the current line. -keyset("n", "qf", "(coc-fix-current)", opts) - - --- Run the Code Lens action on the current line. -keyset("n", "cl", "(coc-codelens-action)", opts) - - --- Map function and class text objects --- NOTE: Requires 'textDocument.documentSymbol' support from the language server. -keyset("x", "if", "(coc-funcobj-i)", opts) -keyset("o", "if", "(coc-funcobj-i)", opts) -keyset("x", "af", "(coc-funcobj-a)", opts) -keyset("o", "af", "(coc-funcobj-a)", opts) -keyset("x", "ic", "(coc-classobj-i)", opts) -keyset("o", "ic", "(coc-classobj-i)", opts) -keyset("x", "ac", "(coc-classobj-a)", opts) -keyset("o", "ac", "(coc-classobj-a)", opts) - - --- Remap and for scroll float windows/popups. ----@diagnostic disable-next-line: redefined-local -local opts = {silent = true, nowait = true, expr = true} -keyset("n", "", 'coc#float#has_scroll() ? coc#float#scroll(1) : ""', opts) -keyset("n", "", 'coc#float#has_scroll() ? coc#float#scroll(0) : ""', opts) -keyset("i", "", - 'coc#float#has_scroll() ? "=coc#float#scroll(1)" : ""', opts) -keyset("i", "", - 'coc#float#has_scroll() ? "=coc#float#scroll(0)" : ""', opts) -keyset("v", "", 'coc#float#has_scroll() ? coc#float#scroll(1) : ""', opts) -keyset("v", "", 'coc#float#has_scroll() ? coc#float#scroll(0) : ""', opts) - - --- Use CTRL-S for selections ranges. --- Requires 'textDocument/selectionRange' support of language server. -keyset("n", "", "(coc-range-select)", {silent = true}) -keyset("x", "", "(coc-range-select)", {silent = true}) - - --- Add `:Format` command to format current buffer. -vim.api.nvim_create_user_command("Format", "call CocAction('format')", {}) - --- " Add `:Fold` command to fold current buffer. -vim.api.nvim_create_user_command("Fold", "call CocAction('fold', )", {nargs = '?'}) - --- Add `:OR` command for organize imports of the current buffer. -vim.api.nvim_create_user_command("OR", "call CocActionAsync('runCommand', 'editor.action.organizeImport')", {}) - --- Add (Neo)Vim's native statusline support. --- NOTE: Please see `:h coc-status` for integrations with external plugins that --- provide custom statusline: lightline.vim, vim-airline. -vim.opt.statusline:prepend("%{coc#status()}%{get(b:,'coc_current_function','')}") - --- Mappings for CoCList --- code actions and coc stuff ----@diagnostic disable-next-line: redefined-local -local opts = {silent = true, nowait = true} --- Show all diagnostics. -keyset("n", "a", ":CocList diagnostics", opts) --- Manage extensions. -keyset("n", "e", ":CocList extensions", opts) --- Show commands. -keyset("n", "c", ":CocList commands", opts) --- Find symbol of current document. -keyset("n", "o", ":CocList outline", opts) --- Search workspace symbols. -keyset("n", "s", ":CocList -I symbols", opts) --- Do default action for next item. -keyset("n", "j", ":CocNext", opts) --- Do default action for previous item. -keyset("n", "k", ":CocPrev", opts) --- Resume latest coc list. -keyset("n", "p", ":CocListResume", opts) -``` - -## Articles - -- [coc.nvim 插件体系介绍](https://zhuanlan.zhihu.com/p/65524706) -- [CocList 入坑指南](https://zhuanlan.zhihu.com/p/71846145) -- [Create coc.nvim extension to improve Vim experience](https://medium.com/@chemzqm/create-coc-nvim-extension-to-improve-vim-experience-4461df269173) -- [How to write a coc.nvim extension (and why)](https://samroeca.com/coc-plugin.html) - -## Troubleshooting - -Try these steps when you have problem with coc.nvim. - -- Make sure your Vim version >= 8.0 by command `:version`. -- If service failed to start, use command `:CocInfo` or `:checkhealth` on Neovim. -- Checkout the log of coc.nvim by command `:CocOpenLog`. -- When you have issues with the language server, it's recommended to [checkout - the output](https://github.com/neoclide/coc.nvim/wiki/Debug-language-server#using-output-channel). - -## Feedback - -- If you think Coc is useful, consider giving it a star. -- If you have a question, [ask on gitter](https://gitter.im/neoclide/coc.nvim) -- 中文用户请到 [中文 gitter](https://gitter.im/neoclide/coc-cn) 讨论 -- If something is not working, [create an - issue](https://github.com/neoclide/coc.nvim/issues/new). - -## Backers - -[Become a backer](https://opencollective.com/cocnvim#backer) and get your image on our README on GitHub with a link to your site. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -## Contributors - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Qiming zhao

💻

Heyward Fann

💻

Raidou

💻

kevinhwang91

💻

年糕小豆汤

💻

Avi Dessauer

💻

最上川

💻

Yatao Li

💻

wongxy

💻

Sam McCall

💻

Samuel Roeca

💻

Amirali Esmaeili

💻

Jack Rowlingson

💻

Jaehwang Jung

💻

Antoine

💻

Cosmin Popescu

💻

Duc Nghiem Xuan

💻

Francisco Lopes

💻

daquexian

💻

dependabot[bot]

💻

greenkeeper[bot]

💻

Chris Kipp

💻

Dmytro Meleshko

💻

Kirill Bobyrev

💻

Gontran Baerts

💻

Andy

💻

Cheng JIANG

💻

Corin

💻

Daniel Zhang

💻

Ferdinand Bachmann

💻

Guangqing Chen

💻

Jade Meskill

💻

Jasper Poppe

💻

Jean Jordaan

💻

Kid

💻

Pieter van Loon

💻

Robert Liebowitz

💻

Seth Messer

💻

UncleBill

💻

ZERO

💻

fsouza

💻

XiaoZhang

💻

whyreal

💻

yehuohan

💻

バクダンくん

💻

Raphael

💻

tbodt

💻

Aaron McDaid

💻

Aasif Versi

💻

Abner Silva

💻

Adam Stankiewicz

💻

Adamansky Anton

💻

Ahmed El Gabri

💻

Alexandr Kondratev

💻

Andrew Shim

💻

Andy Lindeman

💻

Augustin

💻

Bastien Orivel

💻

Ben Lu

💻

Ben

💻

Brendan Roy

💻

brianembry

💻

br

💻

Cason Adams

💻

Chang Y

💻

Chayoung You

💻

Chen Lijun

💻

Chen Mulong

💻

Chris Weyl

💻

dezza

💻

Cody Allen

💻

Damien Rajon

💻

Daniel Eriksson

💻

Daniel Jenson

💻

David Mejorado

💻

Deric Pang

💻

Ding Tao

💻

Doron Behar

💻

Egor Kovetskiy

💻

ElKowar

💻

Emeliov Dmitrii

💻

Fabian Becker

💻

FallenWarrior2k

💻

Fausto Núñez Alberro

💻

Felipe Ramos

💻

Fredrik Borg

💻

Gavin Sim

💻

Gibson Fahnestock

💻

Giovanni Giordano

💻

Gopal Adhikari

💻

Hanh Le

💻

hedy

💻

Hendrik Lammers

💻

Henry Barreto

💻

Hugo

💻

Jackie Li

💻

Jakub Nowak

💻

James Pickard

💻

Jia Sui

💻

Ellie Hermaszewska

💻

Joel Bradshaw

💻

John Carlo Roberto

💻

Jonas Holst Damtoft

💻

Jonathan Lehman

💻

Joosep Alviste

💻

Josa Gesell

💻

Joshua Rubin

💻

Julian Grinblat

💻

Julian Valentin

💻

KabbAmine

💻

Kay Gosho

💻

Kenny Huynh

💻

Kevin Rambaud

💻

Kian Cross

💻

Kristijan Husak

💻

NullVoxPopuli

💻

Lasse Peters

💻

Noel Errenil

💻

LinArcX

💻

Liu-Cheng Xu

💻

Marc

💻

Marius Gawrisch

💻

Mark Hintz

💻

Mathieu Le Tiec

💻

Matt White

💻

Matthew Evans

💻

Me1onRind

💻

Qyriad

💻

Narcis B.

💻

Neur1n

💻

Nicolas Dermine

💻

Noah

💻

PENG Rui

💻

Paco

💻

Peng Guanwen

💻

Petter Wahlman

💻

Pooya Moradi

💻

Quade Morrison

💻

Ralf Vogler

💻

Ran Chen

💻

Ricardo García Vega

💻

Rick Jones

💻

Ryan Christian

💻

Salo

💻

Sam Nolan

💻

Saurav

💻

Sean Mackesey

💻

Sheel Patel

💻

Solomon Ng

💻

Sri Kadimisetty

💻

Stephen Prater

💻

Sune Kibsgaard

💻

Aquaakuma

💻

Takumi Kawase

💻

The Blob SCP

💻

Tomasz N

💻

Tomoyuki Harada

💻

Tony Fettes

💻

Tony Narlock

💻

Tony Wang

💻

Victor Quach

💻

Whisperity

💻

William Turner

💻

Xiaochao Dong

💻

Hugh Hou

💻

Jackie Li

💻

Zachary Freed

💻

akiyosi

💻

alexjg

💻

aste4

💻

clyfish

💻

dev7ba

💻

diartyz

💻

doza-daniel

💻

equal-l2

💻

fong

💻

hexh

💻

hhiraba

💻

ic-768

💻

javiertury

💻

karasu

💻

kevineato

💻

Eduardo Costa

💻

micchy326

💻

midchildan

💻

minefuto

💻

miyanokomiya

💻

miyaviee

💻

monkoose

💻 🐛

mujx

💻

mvilim

💻

naruaway

💻

piersy

💻

ryantig

💻

rydesun

💻

sc00ter

💻

smhc

💻

Sam Kaplan

💻

tasuten

💻

todesking

💻

typicode

💻

李鸣飞

💻

Ikko Ashimine

📖

Rammiah

🐛

Alisue

🐛

bigshans

📖

Robert Boyd III

🐛

Yuki Iwanaga

💻

SpringHack

🐛

Lucas Burns

📖

qiqiboy

💻

timsu92

📖

Shawn M Moore

💻

Aaron U'Ren

🐛

SeniorMars

📖

牧羊犬真Q

📖
- - - - - - - - - - - - -This project follows the [all-contributors](https://allcontributors.org) specification. -Contributions of any kind are welcome! - -## License - -Anti 996 diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc.vim deleted file mode 100644 index 310d87af..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc.vim +++ /dev/null @@ -1,183 +0,0 @@ -scriptencoding utf-8 -let g:coc#_context = {'start': 0, 'preselect': -1,'candidates': []} -let g:coc_user_config = get(g:, 'coc_user_config', {}) -let g:coc_global_extensions = get(g:, 'coc_global_extensions', []) -let g:coc_selected_text = '' -let g:coc_vim_commands = [] -let s:watched_keys = [] -let s:is_vim = !has('nvim') -let s:error_sign = get(g:, 'coc_status_error_sign', has('mac') ? '❌ ' : 'E') -let s:warning_sign = get(g:, 'coc_status_warning_sign', has('mac') ? '⚠️ ' : 'W') -let s:select_api = exists('*nvim_select_popupmenu_item') -let s:callbacks = {} -let s:hide_pum = has('nvim-0.6.1') || has('patch-8.2.3389') - -function! coc#expandable() abort - return coc#rpc#request('snippetCheck', [1, 0]) -endfunction - -function! coc#jumpable() abort - return coc#rpc#request('snippetCheck', [0, 1]) -endfunction - -function! coc#expandableOrJumpable() abort - return coc#rpc#request('snippetCheck', [1, 1]) -endfunction - -" add vim command to CocCommand list -function! coc#add_command(id, cmd, ...) - let config = {'id':a:id, 'cmd':a:cmd, 'title': get(a:,1,'')} - call add(g:coc_vim_commands, config) - if !coc#rpc#ready() | return | endif - call coc#rpc#notify('addCommand', [config]) -endfunction - -function! coc#on_enter() - call coc#rpc#notify('CocAutocmd', ['Enter', bufnr('%')]) - return '' -endfunction - -function! coc#_insert_key(method, key, ...) abort - let prefix = '' - if get(a:, 1, 1) - if pumvisible() - if s:hide_pum - let prefix = "\\" - else - let g:coc_disable_space_report = 1 - let prefix = "\\" - endif - endif - endif - return prefix."\=coc#rpc#".a:method."('doKeymap', ['".a:key."'])\" -endfunction - -function! coc#_complete() abort - let items = get(g:coc#_context, 'candidates', []) - let preselect = get(g:coc#_context, 'preselect', -1) - let startcol = g:coc#_context.start + 1 - if s:select_api && len(items) && preselect != -1 - noa call complete(startcol, items) - call nvim_select_popupmenu_item(preselect, v:false, v:false, {}) - " use specific key to preselect item at once - call feedkeys("\\" , 'i') - else - if pumvisible() - let g:coc_disable_complete_done = 1 - endif - call complete(startcol, items) - endif - return '' -endfunction - -function! coc#_do_complete(start, items, preselect, changedtick) - if b:changedtick != a:changedtick - return - endif - let g:coc#_context = { - \ 'start': a:start, - \ 'candidates': a:items, - \ 'preselect': a:preselect - \} - if mode() =~# 'i' - call coc#_complete() - endif -endfunction - -function! coc#_cancel(...) - call coc#pum#close() -endfunction - -" used for statusline -function! coc#status() - let info = get(b:, 'coc_diagnostic_info', {}) - let msgs = [] - if !empty(info) && get(info, 'error', 0) - call add(msgs, s:error_sign . info['error']) - endif - if !empty(info) && get(info, 'warning', 0) - call add(msgs, s:warning_sign . info['warning']) - endif - return coc#compat#trim(join(msgs, ' ') . ' ' . get(g:, 'coc_status', '')) -endfunction - -function! coc#config(section, value) - let g:coc_user_config[a:section] = a:value - call coc#rpc#notify('updateConfig', [a:section, a:value]) -endfunction - -function! coc#add_extension(...) - if a:0 == 0 | return | endif - call extend(g:coc_global_extensions, a:000) -endfunction - -function! coc#_watch(key) - if s:is_vim | return | endif - if index(s:watched_keys, a:key) == -1 - call add(s:watched_keys, a:key) - call dictwatcheradd(g:, a:key, function('s:GlobalChange')) - endif -endfunction - -function! coc#_unwatch(key) - if s:is_vim | return | endif - let idx = index(s:watched_keys, a:key) - if idx != -1 - call remove(s:watched_keys, idx) - call dictwatcherdel(g:, a:key, function('s:GlobalChange')) - endif -endfunction - -function! s:GlobalChange(dict, key, val) - call coc#rpc#notify('GlobalChange', [a:key, get(a:val, 'old', v:null), get(a:val, 'new', v:null)]) -endfunction - -function! coc#on_notify(id, method, Cb) - let key = a:id. '-'.a:method - let s:callbacks[key] = a:Cb - call coc#rpc#notify('registerNotification', [a:id, a:method]) -endfunction - -function! coc#do_notify(id, method, result) - let key = a:id. '-'.a:method - let Fn = s:callbacks[key] - if !empty(Fn) - call Fn(a:result) - endif -endfunction - -function! coc#start(...) - let opt = coc#util#get_complete_option() - call CocActionAsync('startCompletion', extend(opt, get(a:, 1, {}))) - return '' -endfunction - -function! coc#refresh() abort - return "\=coc#start()\" -endfunction - -function! coc#_select_confirm() abort - call timer_start(10, { -> coc#pum#select_confirm()}) - return s:is_vim || has('nvim-0.5.0') ? "\" : "\\" -endfunction - -function! coc#complete_indent() abort - let curpos = getcurpos() - let indent_len = len(matchstr(getline('.'), '^\s*')) - let startofline = &startofline - let virtualedit = &virtualedit - set nostartofline - set virtualedit=all - normal! == - let &startofline = startofline - let &virtualedit = virtualedit - let shift = len(matchstr(getline('.'), '^\s*')) - indent_len - let curpos[2] += shift - let curpos[4] += shift - call cursor(curpos[1:]) - if shift != 0 - if s:is_vim - call timer_start(0, { -> execute('redraw')}) - endif - endif -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/api.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/api.vim deleted file mode 100644 index d4c5f456..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/api.vim +++ /dev/null @@ -1,704 +0,0 @@ -" ============================================================================ -" Description: Client api used by vim8 -" Author: Qiming Zhao -" Licence: Anti 996 licence -" Last Modified: Jun 03, 2022 -" ============================================================================ -if has('nvim') | finish | endif -scriptencoding utf-8 -let s:funcs = {} -let s:prop_offset = get(g:, 'coc_text_prop_offset', 1000) -let s:namespace_id = 1 -let s:namespace_cache = {} -let s:max_src_id = 1000 -" bufnr => max textprop id -let s:buffer_id = {} -" srcId => list of types -let s:id_types = {} - -" helper {{ -function! s:buf_line_count(bufnr) abort - if bufnr('%') == a:bufnr - return line('$') - endif - if exists('*getbufinfo') - let info = getbufinfo(a:bufnr) - if empty(info) - return 0 - endif - " vim 8.1 has getbufinfo but no linecount - if has_key(info[0], 'linecount') - return info[0]['linecount'] - endif - endif - if exists('*getbufline') - let lines = getbufline(a:bufnr, 1, '$') - return len(lines) - endif - let curr = bufnr('%') - execute 'noa buffer '.a:bufnr - let n = line('$') - execute 'noa buffer '.curr - return n -endfunction - -function! s:execute(cmd) - if a:cmd =~# '^echo' - execute a:cmd - else - silent! execute a:cmd - endif -endfunction -" }}" - -" nvim client methods {{ -function! s:funcs.set_current_dir(dir) abort - execute 'cd '.a:dir -endfunction - -function! s:funcs.set_var(name, value) abort - execute 'let g:'.a:name.'= a:value' -endfunction - -function! s:funcs.del_var(name) abort - execute 'unlet g:'.a:name -endfunction - -function! s:funcs.set_option(name, value) abort - execute 'let &'.a:name.' = a:value' -endfunction - -function! s:funcs.set_current_buf(bufnr) abort - if !bufexists(a:bufnr) | return | endif - execute 'buffer '.a:bufnr -endfunction - -function! s:funcs.set_current_win(win_id) abort - let [tabnr, winnr] = win_id2tabwin(a:win_id) - if tabnr == 0 | return | endif - execute 'normal! '.tabnr.'gt' - execute winnr.' wincmd w' -endfunction - -function! s:funcs.set_current_tabpage(tabnr) abort - execute 'normal! '.a:tabnr.'gt' -endfunction - -function! s:funcs.list_wins() abort - return map(getwininfo(), 'v:val["winid"]') -endfunction - -function s:inspect_type(v) abort - let types = ['Number', 'String', 'Funcref', 'List', 'Dictionary', 'Float', 'Boolean', 'Null'] - return get(types, type(a:v), 'Unknown') -endfunction - -function! s:funcs.call_atomic(calls) - let res = [] - for i in range(len(a:calls)) - let [key, arglist] = a:calls[i] - let name = key[5:] - try - call add(res, call(s:funcs[name], arglist)) - catch /.*/ - return [res, [i, "VimException(".s:inspect_type(v:exception).")", v:exception . ' on '.v:throwpoint]] - endtry - endfor - return [res, v:null] -endfunction - -function! s:funcs.set_client_info(...) abort -endfunction - -function! s:funcs.subscribe(...) abort -endfunction - -function! s:funcs.unsubscribe(...) abort -endfunction - -function! s:funcs.call_function(method, args) abort - return call(a:method, a:args) -endfunction - -function! s:funcs.call_dict_function(dict, method, args) abort - return call(a:method, a:args, a:dict) -endfunction - -function! s:funcs.command(command) abort - " command that could cause cursor vanish - if a:command =~# '^echo' || a:command =~# '^redraw' || a:command =~# '^sign place' - call timer_start(0, {-> s:execute(a:command)}) - else - execute a:command - let err = get(g:, 'errmsg', '') - " get error from python script run. - if !empty(err) - unlet g:errmsg - throw err - endif - endif -endfunction - -function! s:funcs.eval(expr) abort - return eval(a:expr) -endfunction - -function! s:funcs.get_api_info() - let names = coc#api#func_names() - return [1, {'functions': map(names, '{"name": "nvim_".v:val}')}] -endfunction - -function! s:funcs.list_bufs() - return map(getbufinfo({'bufloaded': 1}), 'v:val["bufnr"]') -endfunction - -function! s:funcs.feedkeys(keys, mode, escape_csi) - call feedkeys(a:keys, a:mode) -endfunction - -function! s:funcs.list_runtime_paths() - return globpath(&runtimepath, '', 0, 1) -endfunction - -function! s:funcs.command_output(cmd) - return execute(a:cmd) -endfunction - -function! s:funcs.get_current_line() - return getline('.') -endfunction - -function! s:funcs.set_current_line(line) - call setline('.', a:line) -endfunction - -function! s:funcs.del_current_line(line) - execute 'normal! dd' -endfunction - -function! s:funcs.get_var(var) - return get(g:, a:var, v:null) -endfunction - -function! s:funcs.get_vvar(var) - return get(v:, a:var, v:null) -endfunction - -function! s:funcs.get_option(name) - return eval('&'.a:name) -endfunction - -function! s:funcs.get_current_buf() - return bufnr('%') -endfunction - -function! s:funcs.get_current_win() - return win_getid() -endfunction - -function! s:funcs.get_current_tabpage() - return tabpagenr() -endfunction - -function! s:funcs.list_tabpages() - return range(1, tabpagenr('$')) -endfunction - -function! s:funcs.get_mode() - return {'blocking': v:false, 'mode': mode()} -endfunction - -function! s:funcs.strwidth(str) - return strwidth(a:str) -endfunction - -function! s:funcs.out_write(str) - echon a:str - call timer_start(0, {-> s:execute('redraw')}) -endfunction - -function! s:funcs.err_write(str) - "echoerr a:str -endfunction - -function! s:funcs.err_writeln(str) - echohl ErrorMsg - echom a:str - echohl None - call timer_start(0, {-> s:execute('redraw')}) -endfunction - -function! s:funcs.create_namespace(name) abort - if empty(a:name) - let id = s:namespace_id - let s:namespace_id = s:namespace_id + 1 - return id - endif - let id = get(s:namespace_cache, a:name, 0) - if !id - let id = s:namespace_id - let s:namespace_id = s:namespace_id + 1 - let s:namespace_cache[a:name] = id - endif - return id -endfunction -" }} - -" buffer methods {{ -function! s:funcs.buf_set_option(bufnr, name, val) - let val = a:val - if val is v:true - let val = 1 - elseif val is v:false - let val = 0 - endif - return setbufvar(a:bufnr, '&'.a:name, val) -endfunction - -function! s:funcs.buf_get_changedtick(bufnr) - return getbufvar(a:bufnr, 'changedtick') -endfunction - -function! s:funcs.buf_is_valid(bufnr) - return bufloaded(a:bufnr) ? v:true : v:false -endfunction - -function! s:funcs.buf_get_mark(bufnr, name) - let nr = bufnr('%') - if a:bufnr != 0 || a:bufnr != nr - throw 'buf_get_mark support current buffer only' - endif - return [line("'" . a:name), col("'" . a:name)] -endfunction - -function! s:funcs.buf_add_highlight(bufnr, srcId, hlGroup, line, colStart, colEnd, ...) abort - if !has('patch-8.1.1719') - return - endif - if a:srcId == 0 - let srcId = s:max_src_id + 1 - let s:max_src_id = srcId - else - let srcId = a:srcId - endif - let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr - let type = srcId == -1 ? a:hlGroup : a:hlGroup.'_'.srcId - let types = get(s:id_types, srcId, []) - if index(types, type) == -1 - call add(types, type) - let s:id_types[srcId] = types - if empty(prop_type_get(type)) - call prop_type_add(type, extend({'highlight': a:hlGroup}, get(a:, 1, {}))) - endif - endif - let end = a:colEnd == -1 ? strlen(getbufline(bufnr, a:line + 1)[0]) + 1 : a:colEnd + 1 - if end < a:colStart + 1 - return - endif - let id = s:generate_id(a:bufnr) - try - call prop_add(a:line + 1, a:colStart + 1, {'bufnr': bufnr, 'type': type, 'id': id, 'end_col': end}) - catch /^Vim\%((\a\+)\)\=:E967/ - " ignore 967 - endtry - if a:srcId == 0 - " return generated srcId - return srcId - endif -endfunction - -function! s:funcs.buf_clear_namespace(bufnr, srcId, startLine, endLine) abort - if !has('patch-8.1.1719') - return - endif - let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr - let start = a:startLine + 1 - let end = a:endLine == -1 ? len(getbufline(bufnr, 1, '$')) : a:endLine - if a:srcId == -1 - if has_key(s:buffer_id, a:bufnr) - unlet s:buffer_id[a:bufnr] - endif - call prop_clear(start, end, {'bufnr' : bufnr}) - else - for type in get(s:id_types, a:srcId, []) - try - call prop_remove({'bufnr': bufnr, 'all': 1, 'type': type}, start, end) - catch /^Vim\%((\a\+)\)\=:E968/ - " ignore 968 - endtry - endfor - endif -endfunction - -function! s:funcs.buf_line_count(bufnr) abort - return s:buf_line_count(a:bufnr) -endfunction - -function! s:funcs.buf_attach(...) - " not supported - return 1 -endfunction - -function! s:funcs.buf_detach() - " not supported - return 1 -endfunction - -function! s:funcs.buf_get_lines(bufnr, start, end, strict) abort - let lines = getbufline(a:bufnr, 1, '$') - let start = a:start < 0 ? a:start + 1 : a:start - let end = a:end < 0 ? a:end + 1 : a:end - if a:strict && end > len(lines) - throw 'line number out of range: '. end - endif - return lines[start : end - 1] -endfunction - -function! s:funcs.buf_set_lines(bufnr, start, end, strict, ...) abort - let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr - if !bufloaded(bufnr) - return - endif - let replacement = get(a:, 1, []) - let lineCount = s:buf_line_count(bufnr) - let startLnum = a:start >= 0 ? a:start + 1 : lineCount + a:start + 2 - let end = a:end >= 0 ? a:end : lineCount + a:end + 1 - if end == lineCount + 1 - let end = lineCount - endif - let delCount = end - (startLnum - 1) - let changeBuffer = 0 - let curr = bufnr('%') - if bufnr != curr && !exists('*setbufline') - let changeBuffer = 1 - exe 'buffer '.bufnr - endif - if bufnr == curr || changeBuffer - " replace - let storeView = winsaveview() - if delCount == len(replacement) - call setline(startLnum, replacement) - else - if len(replacement) - call append(startLnum - 1, replacement) - endif - if delCount - let start = startLnum + len(replacement) - let saved_reg = @" - if has('clipboard') - let system_reg = @* - endif - if exists('*deletebufline') - silent call deletebufline(curr, start, start + delCount - 1) - else - silent execute start . ','.(start + delCount - 1).'d' - endif - let @" = saved_reg - if has('clipboard') - let @* = system_reg - endif - endif - endif - call winrestview(storeView) - if changeBuffer - exe 'buffer '.curr - endif - elseif exists('*setbufline') - " replace - if delCount == len(replacement) - " 8.0.1039 - call setbufline(bufnr, startLnum, replacement) - else - if len(replacement) - " 8.10037 - call appendbufline(bufnr, startLnum - 1, replacement) - endif - if delCount - let start = startLnum + len(replacement) - let saved_reg = @" - if has('clipboard') - let system_reg = @* - endif - "8.1.0039 - silent call deletebufline(bufnr, start, start + delCount - 1) - let @" = saved_reg - if has('clipboard') - let @* = system_reg - endif - endif - endif - endif -endfunction - -function! s:funcs.buf_set_name(bufnr, name) abort - let nr = bufnr('%') - if a:bufnr != nr - throw 'buf_set_name support current buffer only' - else - execute '0f' - execute 'file '.fnameescape(a:name) - endif -endfunction - -function! s:funcs.buf_get_var(bufnr, name) - return getbufvar(a:bufnr, a:name) -endfunction - -function! s:funcs.buf_set_var(bufnr, name, val) - if !bufloaded(a:bufnr) | return | endif - call setbufvar(a:bufnr, a:name, a:val) -endfunction - -function! s:funcs.buf_del_var(bufnr, name) - if bufnr == bufnr('%') - execute 'unlet! b:'.a:name - elseif exists('*win_execute') - let winid = coc#compat#buf_win_id(a:bufnr) - if winid != -1 - call win_execute(winid, 'unlet! b:'.a:name) - endif - endif -endfunction - -function! s:funcs.buf_get_option(bufnr, name) - return getbufvar(a:bufnr, '&'.a:name) -endfunction - -function! s:funcs.buf_get_name(bufnr) - return bufname(a:bufnr) -endfunction -" }} - -" window methods {{ -function! s:funcs.win_get_buf(winid) - return winbufnr(a:winid) -endfunction - -function! s:funcs.win_get_position(win_id) abort - let [row, col] = win_screenpos(a:win_id) - if row == 0 && col == 0 - throw 'Invalid window '.a:win_id - endif - return [row - 1, col - 1] -endfunction - -function! s:funcs.win_get_height(win_id) abort - return winheight(a:win_id) -endfunction - -function! s:funcs.win_get_width(win_id) abort - return winwidth(a:win_id) -endfunction - -if exists('*win_execute') - function! s:win_execute(win_id, cmd, ...) abort - let ref = get(a:000, 0, v:null) - let cmd = ref is v:null ? a:cmd : 'let ref["out"] = ' . a:cmd - call win_execute(a:win_id, cmd) - endfunction -else - function! s:win_execute(win_id, cmd, ...) abort - let ref = get(a:000, 0, v:null) - let cmd = ref is v:null ? a:cmd : 'let ref["out"] = ' . a:cmd - let winid = win_getid() - if winid == a:win_id - execute cmd - else - let goto_status = win_gotoid(a:win_id) - if !goto_status - return - endif - execute cmd - call win_gotoid(winid) - endif - endfunction -endif - -function! s:get_tabnr(winid) abort - let ref = {} - call s:win_execute(a:winid, 'tabpagenr()', ref) - return get(ref, 'out', 0) -endfunction - -function! s:funcs.win_get_cursor(win_id) abort - let ref = {} - call s:win_execute(a:win_id, "[line('.'), col('.')-1]", ref) - return get(ref, 'out', [1, 0]) -endfunction - -function! s:funcs.win_get_var(win_id, name, ...) abort - let tabnr = s:get_tabnr(a:win_id) - if tabnr - return gettabwinvar(tabnr, a:win_id, a:name, get(a:, 1, v:null)) - endif - throw 'window '.a:win_id. ' not a visible window' -endfunction - -function! s:funcs.win_set_width(win_id, width) abort - call s:win_execute(a:win_id, 'vertical resize '.a:width) -endfunction - -function! s:funcs.win_set_buf(win_id, buf_id) abort - call s:win_execute(a:win_id, 'buffer '.a:buf_id) -endfunction - -function! s:funcs.win_get_option(win_id, name) abort - let tabnr = s:get_tabnr(a:win_id) - if tabnr - return gettabwinvar(tabnr, a:win_id, '&'.a:name) - endif - throw 'window '.a:win_id. ' not a valid window' -endfunction - -function! s:funcs.win_set_height(win_id, height) abort - return s:win_execute(a:win_id, 'resize '.a:height) -endfunction - -function! s:funcs.win_set_option(win_id, name, value) abort - let val = a:value - if val is v:true - let val = 1 - elseif val is v:false - let val = 0 - endif - let tabnr = s:get_tabnr(a:win_id) - if tabnr - call settabwinvar(tabnr, a:win_id, '&'.a:name, val) - else - throw 'window '.a:win_id. ' not a valid window' - endif -endfunction - -function! s:funcs.win_set_var(win_id, name, value) abort - let tabnr = s:get_tabnr(a:win_id) - if tabnr - call settabwinvar(tabnr, a:win_id, a:name, a:value) - else - throw "Invalid window id ".a:win_id - endif -endfunction - -function! s:funcs.win_del_var(win_id, name) abort - call s:win_execute(a:win_id, 'unlet! w:'.a:name) -endfunction - -function! s:funcs.win_is_valid(win_id) abort - let info = getwininfo(a:win_id) - return empty(info) ? v:false : v:true -endfunction - -function! s:funcs.win_get_number(win_id) abort - let info = getwininfo(a:win_id) - if empty(info) - throw 'Invalid window id '.a:win_id - endif - return info[0]['winnr'] -endfunction - -function! s:funcs.win_set_cursor(win_id, pos) abort - let [line, col] = a:pos - call s:win_execute(a:win_id, 'call cursor('.line.','.(col + 1).')') -endfunction - -function! s:funcs.win_close(win_id, ...) abort - let force = get(a:, 1, 0) - call s:win_execute(a:win_id, 'close'.(force ? '!' : '')) -endfunction - -function! s:funcs.win_get_tabpage(win_id) abort - let tabnr = s:get_tabnr(a:win_id) - if !tabnr - throw 'Invalid window id '.a:win_id - endif - return tabnr -endfunction -" }} - -" tabpage methods {{ -function! s:funcs.tabpage_get_number(id) - return a:id -endfunction - -function! s:funcs.tabpage_list_wins(tabnr) - let info = getwininfo() - return map(filter(info, 'v:val["tabnr"] == a:tabnr'), 'v:val["winid"]') -endfunction - -function! s:funcs.tabpage_get_var(tabnr, name) - return gettabvar(a:tabnr, a:name, v:null) -endfunction - -function! s:funcs.tabpage_set_var(tabnr, name, value) - call settabvar(a:tabnr, a:name, a:value) -endfunction - -function! s:funcs.tabpage_del_var(tabnr, name) - call settabvar(a:tabnr, a:name, v:null) -endfunction - -function! s:funcs.tabpage_is_valid(tabnr) - let max = tabpagenr('$') - return a:tabnr <= max -endfunction - -function! s:funcs.tabpage_get_win(tabnr) - let wnr = tabpagewinnr(a:tabnr) - return win_getid(wnr, a:tabnr) -endfunction - -function! s:generate_id(bufnr) abort - let max = get(s:buffer_id, a:bufnr, s:prop_offset) - let id = max + 1 - let s:buffer_id[a:bufnr] = id - return id -endfunction -" }} - -function! coc#api#get_types(srcId) abort - return get(s:id_types, a:srcId, []) -endfunction - -function! coc#api#get_id_types() abort - return s:id_types -endfunction - -function! coc#api#create_type(srcId, hlGroup, opts) abort - let type = a:hlGroup.'_'.a:srcId - let types = get(s:id_types, a:srcId, []) - if index(types, type) == -1 - call add(types, type) - let s:id_types[a:srcId] = types - let combine = get(a:opts, 'hl_mode', 'combine') ==# 'combine' - call prop_type_add(type, {'highlight': a:hlGroup, 'combine': combine}) - endif - return type -endfunction - -function! coc#api#func_names() abort - return keys(s:funcs) -endfunction - -function! coc#api#call(method, args) abort - let err = v:null - let res = v:null - try - let res = call(s:funcs[a:method], a:args) - catch /.*/ - let err = v:exception .' on api "'.a:method.'" '.json_encode(a:args) - endtry - return [err, res] -endfunction - -function! coc#api#exec(method, args) abort - return call(s:funcs[a:method], a:args) -endfunction - -function! coc#api#notify(method, args) abort - try - call call(s:funcs[a:method], a:args) - catch /.*/ - let g:b = v:exception - call coc#rpc#notify('nvim_error_event', [0, v:exception.' on api "'.a:method.'" '.json_encode(a:args)]) - endtry -endfunction -" vim: set sw=2 ts=2 sts=2 et tw=78 foldmarker={{,}} foldmethod=marker foldlevel=0: diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/client.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/client.vim deleted file mode 100644 index e9a9d01e..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/client.vim +++ /dev/null @@ -1,371 +0,0 @@ -scriptencoding utf-8 -let s:root = expand(':h:h:h') -let s:is_vim = !has('nvim') -let s:is_win = has("win32") || has("win64") -let s:clients = {} - -if get(g:, 'node_client_debug', 0) - echohl WarningMsg | echo '[coc.nvim] Enable g:node_client_debug could impact your vim experience' | echohl None - let $NODE_CLIENT_LOG_LEVEL = 'debug' - if exists('$NODE_CLIENT_LOG_FILE') - let s:logfile = resolve($NODE_CLIENT_LOG_FILE) - else - let s:logfile = tempname() - let $NODE_CLIENT_LOG_FILE = s:logfile - endif -endif - -" create a client -function! coc#client#create(name, command) - let client = {} - let client['command'] = a:command - let client['name'] = a:name - let client['running'] = 0 - let client['async_req_id'] = 1 - let client['async_callbacks'] = {} - " vim only - let client['channel'] = v:null - " neovim only - let client['chan_id'] = 0 - let client['start'] = function('s:start', [], client) - let client['request'] = function('s:request', [], client) - let client['notify'] = function('s:notify', [], client) - let client['request_async'] = function('s:request_async', [], client) - let client['on_async_response'] = function('s:on_async_response', [], client) - let s:clients[a:name] = client - return client -endfunction - -function! s:start() dict - if self.running | return | endif - if !isdirectory(getcwd()) - echohl Error | echon '[coc.nvim] Current cwd is not a valid directory.' | echohl None - return - endif - let timeout = string(get(g:, 'coc_channel_timeout', 30)) - let tmpdir = fnamemodify(tempname(), ':p:h') - if s:is_vim - if get(g:, 'node_client_debug', 0) - let file = tmpdir . '/coc.log' - call ch_logfile(file, 'w') - echohl MoreMsg | echo '[coc.nvim] channel log to '.file | echohl None - endif - let options = { - \ 'in_mode': 'json', - \ 'out_mode': 'json', - \ 'err_mode': 'nl', - \ 'err_cb': {channel, message -> s:on_stderr(self.name, split(message, "\n"))}, - \ 'exit_cb': {channel, code -> s:on_exit(self.name, code)}, - \ 'env': { - \ 'NODE_NO_WARNINGS': '1', - \ 'VIM_NODE_RPC': '1', - \ 'COC_NVIM': '1', - \ 'COC_CHANNEL_TIMEOUT': timeout, - \ 'TMPDIR': tmpdir, - \ } - \} - if has("patch-8.1.350") - let options['noblock'] = 1 - endif - let job = job_start(self.command, options) - let status = job_status(job) - if status !=# 'run' - let self.running = 0 - echohl Error | echom 'Failed to start '.self.name.' service' | echohl None - return - endif - let self['running'] = 1 - let self['channel'] = job_getchannel(job) - else - let original = {} - let opts = { - \ 'rpc': 1, - \ 'on_stderr': {channel, msgs -> s:on_stderr(self.name, msgs)}, - \ 'on_exit': {channel, code -> s:on_exit(self.name, code)}, - \ } - if has('nvim-0.5.0') - " could use env option - let opts['env'] = { - \ 'COC_NVIM': '1', - \ 'NODE_NO_WARNINGS': '1', - \ 'COC_CHANNEL_TIMEOUT': timeout, - \ 'TMPDIR': tmpdir - \ } - else - if exists('*getenv') - let original = { - \ 'NODE_NO_WARNINGS': getenv('NODE_NO_WARNINGS'), - \ 'TMPDIR': getenv('TMPDIR'), - \ } - endif - if exists('*setenv') - call setenv('COC_NVIM', '1') - call setenv('NODE_NO_WARNINGS', '1') - call setenv('COC_CHANNEL_TIMEOUT', timeout) - call setenv('TMPDIR', tmpdir) - else - let $NODE_NO_WARNINGS = 1 - let $TMPDIR = tmpdir - endif - endif - let chan_id = jobstart(self.command, opts) - if !empty(original) - if exists('*setenv') - for key in keys(original) - call setenv(key, original[key]) - endfor - else - let $TMPDIR = original['TMPDIR'] - endif - endif - if chan_id <= 0 - echohl Error | echom 'Failed to start '.self.name.' service' | echohl None - return - endif - let self['chan_id'] = chan_id - let self['running'] = 1 - endif -endfunction - -function! s:on_stderr(name, msgs) - if get(g:, 'coc_vim_leaving', 0) | return | endif - let data = filter(copy(a:msgs), '!empty(v:val)') - if empty(data) | return | endif - let client = a:name ==# 'coc' ? '[coc.nvim]' : '['.a:name.']' - let data[0] = client.': '.data[0] - if a:name ==# 'coc' && len(filter(copy(data), 'v:val =~# "SyntaxError: Unexpected token"')) - call coc#client#check_version() - endif - if get(g:, 'coc_disable_uncaught_error', 0) | return | endif - call coc#ui#echo_messages('Error', data) -endfunction - -function! coc#client#check_version() abort - if (has_key(g:, 'coc_node_path')) - let node = expand(g:coc_node_path) - else - let node = $COC_NODE_PATH == '' ? 'node' : $COC_NODE_PATH - endif - let output = system(node . ' --version') - let msgs = [] - if v:shell_error - let msgs = ['Unexpected result from node --version'] + split(output, '\n') - else - let ms = matchlist(output, 'v\(\d\+\).\(\d\+\).\(\d\+\)') - if empty(ms) - let msgs = ['Unable to detect version of node, make sure your node executable is http://nodejs.org/'] - elseif str2nr(ms[1]) < 14 || (str2nr(ms[1]) == 14 && str2nr(ms[2]) < 14) - let msgs = ['Current Node.js version '.trim(output).' < 14.14.0 ', 'Please upgrade your node.js'] - endif - endif - if !empty(msgs) - call coc#notify#create(msgs, { - \ 'borderhighlight': 'CocErrorSign', - \ 'highlight': 'Normal', - \ 'timeout': 50000, - \ 'kind': 'error', - \ }) - endif -endfunction - -function! s:on_exit(name, code) abort - if get(g:, 'coc_vim_leaving', 0) | return | endif - let client = get(s:clients, a:name, v:null) - if empty(client) | return | endif - if client['running'] != 1 | return | endif - let client['running'] = 0 - let client['chan_id'] = 0 - let client['channel'] = v:null - let client['async_req_id'] = 1 - if a:code != 0 && a:code != 143 - echohl Error | echom 'client '.a:name. ' abnormal exit with: '.a:code | echohl None - endif -endfunction - -function! coc#client#get_client(name) abort - return get(s:clients, a:name, v:null) -endfunction - -function! coc#client#get_channel(client) - if s:is_vim - return a:client['channel'] - endif - return a:client['chan_id'] -endfunction - -function! s:request(method, args) dict - let channel = coc#client#get_channel(self) - if empty(channel) | return '' | endif - try - if s:is_vim - let res = ch_evalexpr(channel, [a:method, a:args], {'timeout': 60 * 1000}) - if type(res) == 1 && res ==# '' - throw 'request '.a:method. ' '.string(a:args).' timeout after 60s' - endif - let [l:errmsg, res] = res - if !empty(l:errmsg) - throw l:errmsg - else - return res - endif - else - return call('rpcrequest', [channel, a:method] + a:args) - endif - catch /.*/ - if v:exception =~# 'E475' - if get(g:, 'coc_vim_leaving', 0) | return | endif - echohl Error | echom '['.self.name.'] server connection lost' | echohl None - let name = self.name - call s:on_exit(name, 0) - execute 'silent do User ConnectionLost'.toupper(name[0]).name[1:] - elseif v:exception =~# 'E12' - " neovim's bug, ignore it - else - echohl Error | echo 'Error on request ('.a:method.'): '.v:exception | echohl None - endif - endtry -endfunction - -function! s:notify(method, args) dict - let channel = coc#client#get_channel(self) - if empty(channel) - return '' - endif - try - if s:is_vim - call ch_sendraw(channel, json_encode([0, [a:method, a:args]])."\n") - else - call call('rpcnotify', [channel, a:method] + a:args) - endif - catch /.*/ - if v:exception =~# 'E475' - if get(g:, 'coc_vim_leaving', 0) - return - endif - echohl Error | echom '['.self.name.'] server connection lost' | echohl None - let name = self.name - call s:on_exit(name, 0) - execute 'silent do User ConnectionLost'.toupper(name[0]).name[1:] - elseif v:exception =~# 'E12' - " neovim's bug, ignore it - else - echohl Error | echo 'Error on notify ('.a:method.'): '.v:exception | echohl None - endif - endtry -endfunction - -function! s:request_async(method, args, cb) dict - let channel = coc#client#get_channel(self) - if empty(channel) | return '' | endif - if type(a:cb) != 2 - echohl Error | echom '['.self['name'].'] Callback should be function' | echohl None - return - endif - let id = self.async_req_id - let self.async_req_id = id + 1 - let self.async_callbacks[id] = a:cb - call self['notify']('nvim_async_request_event', [id, a:method, a:args]) -endfunction - -function! s:on_async_response(id, resp, isErr) dict - let Callback = get(self.async_callbacks, a:id, v:null) - if empty(Callback) - " should not happen - echohl Error | echom 'callback not found' | echohl None - return - endif - call remove(self.async_callbacks, a:id) - if a:isErr - call call(Callback, [a:resp, v:null]) - else - call call(Callback, [v:null, a:resp]) - endif -endfunction - -function! coc#client#is_running(name) abort - let client = get(s:clients, a:name, v:null) - if empty(client) | return 0 | endif - if !client['running'] | return 0 | endif - if s:is_vim - let status = job_status(ch_getjob(client['channel'])) - return status ==# 'run' - else - let chan_id = client['chan_id'] - let [code] = jobwait([chan_id], 10) - return code == -1 - endif -endfunction - -function! coc#client#stop(name) abort - let client = get(s:clients, a:name, v:null) - if empty(client) | return 1 | endif - let running = coc#client#is_running(a:name) - if !running - echohl WarningMsg | echom 'client '.a:name. ' not running.' | echohl None - return 1 - endif - if s:is_vim - call job_stop(ch_getjob(client['channel']), 'term') - else - call jobstop(client['chan_id']) - endif - sleep 200m - if coc#client#is_running(a:name) - echohl Error | echom 'client '.a:name. ' stop failed.' | echohl None - return 0 - endif - call s:on_exit(a:name, 0) - echohl MoreMsg | echom 'client '.a:name.' stopped!' | echohl None - return 1 -endfunction - -function! coc#client#request(name, method, args) - let client = get(s:clients, a:name, v:null) - if !empty(client) - return client['request'](a:method, a:args) - endif -endfunction - -function! coc#client#notify(name, method, args) - let client = get(s:clients, a:name, v:null) - if !empty(client) - call client['notify'](a:method, a:args) - endif -endfunction - -function! coc#client#request_async(name, method, args, cb) - let client = get(s:clients, a:name, v:null) - if !empty(client) - call client['request_async'](a:method, a:args, a:cb) - endif -endfunction - -function! coc#client#on_response(name, id, resp, isErr) - let client = get(s:clients, a:name, v:null) - if !empty(client) - call client['on_async_response'](a:id, a:resp, a:isErr) - endif -endfunction - -function! coc#client#restart(name) abort - let stopped = coc#client#stop(a:name) - if !stopped | return | endif - let client = get(s:clients, a:name, v:null) - if !empty(client) - call client['start']() - endif -endfunction - -function! coc#client#restart_all() - for key in keys(s:clients) - call coc#client#restart(key) - endfor -endfunction - -function! coc#client#open_log() - if !get(g:, 'node_client_debug', 0) - echohl Error | echon '[coc.nvim] use let g:node_client_debug = 1 in your vimrc to enabled debug mode.' | echohl None - return - endif - execute 'vs '.s:logfile -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/color.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/color.vim deleted file mode 100644 index b5d569d8..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/color.vim +++ /dev/null @@ -1,626 +0,0 @@ -scriptencoding utf-8 - -let s:activate = "" -let s:quit = "" -if has("gui_macvim") && has('gui_running') - let s:app = "MacVim" -elseif $TERM_PROGRAM ==# "Apple_Terminal" - let s:app = "Terminal" -elseif $TERM_PROGRAM ==# "iTerm.app" - let s:app = "iTerm2" -elseif has('mac') - let s:app = "System Events" - let s:quit = "quit" - let s:activate = 'activate' -endif - -let s:patterns = {} -let s:patterns['hex'] = '\v#?(\x{2})(\x{2})(\x{2})' -let s:patterns['shortHex'] = '\v#(\x{1})(\x{1})(\x{1})' - -let s:xterm_colors = { - \ '0': '#000000', '1': '#800000', '2': '#008000', '3': '#808000', '4': '#000080', - \ '5': '#800080', '6': '#008080', '7': '#c0c0c0', '8': '#808080', '9': '#ff0000', - \ '10': '#00ff00', '11': '#ffff00', '12': '#0000ff', '13': '#ff00ff', '14': '#00ffff', - \ '15': '#ffffff', '16': '#000000', '17': '#00005f', '18': '#000087', '19': '#0000af', - \ '20': '#0000df', '21': '#0000ff', '22': '#005f00', '23': '#005f5f', '24': '#005f87', - \ '25': '#005faf', '26': '#005fdf', '27': '#005fff', '28': '#008700', '29': '#00875f', - \ '30': '#008787', '31': '#0087af', '32': '#0087df', '33': '#0087ff', '34': '#00af00', - \ '35': '#00af5f', '36': '#00af87', '37': '#00afaf', '38': '#00afdf', '39': '#00afff', - \ '40': '#00df00', '41': '#00df5f', '42': '#00df87', '43': '#00dfaf', '44': '#00dfdf', - \ '45': '#00dfff', '46': '#00ff00', '47': '#00ff5f', '48': '#00ff87', '49': '#00ffaf', - \ '50': '#00ffdf', '51': '#00ffff', '52': '#5f0000', '53': '#5f005f', '54': '#5f0087', - \ '55': '#5f00af', '56': '#5f00df', '57': '#5f00ff', '58': '#5f5f00', '59': '#5f5f5f', - \ '60': '#5f5f87', '61': '#5f5faf', '62': '#5f5fdf', '63': '#5f5fff', '64': '#5f8700', - \ '65': '#5f875f', '66': '#5f8787', '67': '#5f87af', '68': '#5f87df', '69': '#5f87ff', - \ '70': '#5faf00', '71': '#5faf5f', '72': '#5faf87', '73': '#5fafaf', '74': '#5fafdf', - \ '75': '#5fafff', '76': '#5fdf00', '77': '#5fdf5f', '78': '#5fdf87', '79': '#5fdfaf', - \ '80': '#5fdfdf', '81': '#5fdfff', '82': '#5fff00', '83': '#5fff5f', '84': '#5fff87', - \ '85': '#5fffaf', '86': '#5fffdf', '87': '#5fffff', '88': '#870000', '89': '#87005f', - \ '90': '#870087', '91': '#8700af', '92': '#8700df', '93': '#8700ff', '94': '#875f00', - \ '95': '#875f5f', '96': '#875f87', '97': '#875faf', '98': '#875fdf', '99': '#875fff', - \ '100': '#878700', '101': '#87875f', '102': '#878787', '103': '#8787af', '104': '#8787df', - \ '105': '#8787ff', '106': '#87af00', '107': '#87af5f', '108': '#87af87', '109': '#87afaf', - \ '110': '#87afdf', '111': '#87afff', '112': '#87df00', '113': '#87df5f', '114': '#87df87', - \ '115': '#87dfaf', '116': '#87dfdf', '117': '#87dfff', '118': '#87ff00', '119': '#87ff5f', - \ '120': '#87ff87', '121': '#87ffaf', '122': '#87ffdf', '123': '#87ffff', '124': '#af0000', - \ '125': '#af005f', '126': '#af0087', '127': '#af00af', '128': '#af00df', '129': '#af00ff', - \ '130': '#af5f00', '131': '#af5f5f', '132': '#af5f87', '133': '#af5faf', '134': '#af5fdf', - \ '135': '#af5fff', '136': '#af8700', '137': '#af875f', '138': '#af8787', '139': '#af87af', - \ '140': '#af87df', '141': '#af87ff', '142': '#afaf00', '143': '#afaf5f', '144': '#afaf87', - \ '145': '#afafaf', '146': '#afafdf', '147': '#afafff', '148': '#afdf00', '149': '#afdf5f', - \ '150': '#afdf87', '151': '#afdfaf', '152': '#afdfdf', '153': '#afdfff', '154': '#afff00', - \ '155': '#afff5f', '156': '#afff87', '157': '#afffaf', '158': '#afffdf', '159': '#afffff', - \ '160': '#df0000', '161': '#df005f', '162': '#df0087', '163': '#df00af', '164': '#df00df', - \ '165': '#df00ff', '166': '#df5f00', '167': '#df5f5f', '168': '#df5f87', '169': '#df5faf', - \ '170': '#df5fdf', '171': '#df5fff', '172': '#df8700', '173': '#df875f', '174': '#df8787', - \ '175': '#df87af', '176': '#df87df', '177': '#df87ff', '178': '#dfaf00', '179': '#dfaf5f', - \ '180': '#dfaf87', '181': '#dfafaf', '182': '#dfafdf', '183': '#dfafff', '184': '#dfdf00', - \ '185': '#dfdf5f', '186': '#dfdf87', '187': '#dfdfaf', '188': '#dfdfdf', '189': '#dfdfff', - \ '190': '#dfff00', '191': '#dfff5f', '192': '#dfff87', '193': '#dfffaf', '194': '#dfffdf', - \ '195': '#dfffff', '196': '#ff0000', '197': '#ff005f', '198': '#ff0087', '199': '#ff00af', - \ '200': '#ff00df', '201': '#ff00ff', '202': '#ff5f00', '203': '#ff5f5f', '204': '#ff5f87', - \ '205': '#ff5faf', '206': '#ff5fdf', '207': '#ff5fff', '208': '#ff8700', '209': '#ff875f', - \ '210': '#ff8787', '211': '#ff87af', '212': '#ff87df', '213': '#ff87ff', '214': '#ffaf00', - \ '215': '#ffaf5f', '216': '#ffaf87', '217': '#ffafaf', '218': '#ffafdf', '219': '#ffafff', - \ '220': '#ffdf00', '221': '#ffdf5f', '222': '#ffdf87', '223': '#ffdfaf', '224': '#ffdfdf', - \ '225': '#ffdfff', '226': '#ffff00', '227': '#ffff5f', '228': '#ffff87', '229': '#ffffaf', - \ '230': '#ffffdf', '231': '#ffffff', '232': '#080808', '233': '#121212', '234': '#1c1c1c', - \ '235': '#262626', '236': '#303030', '237': '#3a3a3a', '238': '#444444', '239': '#4e4e4e', - \ '240': '#585858', '241': '#606060', '242': '#666666', '243': '#767676', '244': '#808080', - \ '245': '#8a8a8a', '246': '#949494', '247': '#9e9e9e', '248': '#a8a8a8', '249': '#b2b2b2', - \ '250': '#bcbcbc', '251': '#c6c6c6', '252': '#d0d0d0', '253': '#dadada', '254': '#e4e4e4', - \ '255': '#eeeeee'} - -let s:xterm_16colors = { -\ 'black': '#000000', -\ 'darkblue': '#00008B', -\ 'darkgreen': '#00CD00', -\ 'darkcyan': '#00CDCD', -\ 'darkred': '#CD0000', -\ 'darkmagenta': '#8B008B', -\ 'brown': '#CDCD00', -\ 'darkyellow': '#CDCD00', -\ 'lightgrey': '#E5E5E5', -\ 'lightgray': '#E5E5E5', -\ 'gray': '#E5E5E5', -\ 'grey': '#E5E5E5', -\ 'darkgrey': '#7F7F7F', -\ 'darkgray': '#7F7F7F', -\ 'blue': '#5C5CFF', -\ 'lightblue': '#5C5CFF', -\ 'green': '#00FF00', -\ 'lightgreen': '#00FF00', -\ 'cyan': '#00FFFF', -\ 'lightcyan': '#00FFFF', -\ 'red': '#FF0000', -\ 'lightred': '#FF0000', -\ 'magenta': '#FF00FF', -\ 'lightmagenta': '#FF00FF', -\ 'yellow': '#FFFF00', -\ 'lightyellow': '#FFFF00', -\ 'white': '#FFFFFF', -\ } - -let s:w3c_color_names = { -\ 'aliceblue': '#F0F8FF', -\ 'antiquewhite': '#FAEBD7', -\ 'aqua': '#00FFFF', -\ 'aquamarine': '#7FFFD4', -\ 'azure': '#F0FFFF', -\ 'beige': '#F5F5DC', -\ 'bisque': '#FFE4C4', -\ 'black': '#000000', -\ 'blanchedalmond': '#FFEBCD', -\ 'blue': '#0000FF', -\ 'blueviolet': '#8A2BE2', -\ 'brown': '#A52A2A', -\ 'burlywood': '#DEB887', -\ 'cadetblue': '#5F9EA0', -\ 'chartreuse': '#7FFF00', -\ 'chocolate': '#D2691E', -\ 'coral': '#FF7F50', -\ 'cornflowerblue': '#6495ED', -\ 'cornsilk': '#FFF8DC', -\ 'crimson': '#DC143C', -\ 'cyan': '#00FFFF', -\ 'darkblue': '#00008B', -\ 'darkcyan': '#008B8B', -\ 'darkgoldenrod': '#B8860B', -\ 'darkgray': '#A9A9A9', -\ 'darkgreen': '#006400', -\ 'darkkhaki': '#BDB76B', -\ 'darkmagenta': '#8B008B', -\ 'darkolivegreen': '#556B2F', -\ 'darkorange': '#FF8C00', -\ 'darkorchid': '#9932CC', -\ 'darkred': '#8B0000', -\ 'darksalmon': '#E9967A', -\ 'darkseagreen': '#8FBC8F', -\ 'darkslateblue': '#483D8B', -\ 'darkslategray': '#2F4F4F', -\ 'darkturquoise': '#00CED1', -\ 'darkviolet': '#9400D3', -\ 'deeppink': '#FF1493', -\ 'deepskyblue': '#00BFFF', -\ 'dimgray': '#696969', -\ 'dodgerblue': '#1E90FF', -\ 'firebrick': '#B22222', -\ 'floralwhite': '#FFFAF0', -\ 'forestgreen': '#228B22', -\ 'fuchsia': '#FF00FF', -\ 'gainsboro': '#DCDCDC', -\ 'ghostwhite': '#F8F8FF', -\ 'gold': '#FFD700', -\ 'goldenrod': '#DAA520', -\ 'gray': '#808080', -\ 'green': '#008000', -\ 'greenyellow': '#ADFF2F', -\ 'honeydew': '#F0FFF0', -\ 'hotpink': '#FF69B4', -\ 'indianred': '#CD5C5C', -\ 'indigo': '#4B0082', -\ 'ivory': '#FFFFF0', -\ 'khaki': '#F0E68C', -\ 'lavender': '#E6E6FA', -\ 'lavenderblush': '#FFF0F5', -\ 'lawngreen': '#7CFC00', -\ 'lemonchiffon': '#FFFACD', -\ 'lightblue': '#ADD8E6', -\ 'lightcoral': '#F08080', -\ 'lightcyan': '#E0FFFF', -\ 'lightgoldenrodyellow': '#FAFAD2', -\ 'lightgray': '#D3D3D3', -\ 'lightgreen': '#90EE90', -\ 'lightpink': '#FFB6C1', -\ 'lightsalmon': '#FFA07A', -\ 'lightseagreen': '#20B2AA', -\ 'lightskyblue': '#87CEFA', -\ 'lightslategray': '#778899', -\ 'lightsteelblue': '#B0C4DE', -\ 'lightyellow': '#FFFFE0', -\ 'lime': '#00FF00', -\ 'limegreen': '#32CD32', -\ 'linen': '#FAF0E6', -\ 'magenta': '#FF00FF', -\ 'maroon': '#800000', -\ 'mediumaquamarine': '#66CDAA', -\ 'mediumblue': '#0000CD', -\ 'mediumorchid': '#BA55D3', -\ 'mediumpurple': '#9370D8', -\ 'mediumseagreen': '#3CB371', -\ 'mediumslateblue': '#7B68EE', -\ 'mediumspringgreen': '#00FA9A', -\ 'mediumturquoise': '#48D1CC', -\ 'mediumvioletred': '#C71585', -\ 'midnightblue': '#191970', -\ 'mintcream': '#F5FFFA', -\ 'mistyrose': '#FFE4E1', -\ 'moccasin': '#FFE4B5', -\ 'navajowhite': '#FFDEAD', -\ 'navy': '#000080', -\ 'oldlace': '#FDF5E6', -\ 'olive': '#808000', -\ 'olivedrab': '#6B8E23', -\ 'orange': '#FFA500', -\ 'orangered': '#FF4500', -\ 'orchid': '#DA70D6', -\ 'palegoldenrod': '#EEE8AA', -\ 'palegreen': '#98FB98', -\ 'paleturquoise': '#AFEEEE', -\ 'palevioletred': '#D87093', -\ 'papayawhip': '#FFEFD5', -\ 'peachpuff': '#FFDAB9', -\ 'peru': '#CD853F', -\ 'pink': '#FFC0CB', -\ 'plum': '#DDA0DD', -\ 'powderblue': '#B0E0E6', -\ 'purple': '#800080', -\ 'red': '#FF0000', -\ 'rosybrown': '#BC8F8F', -\ 'royalblue': '#4169E1', -\ 'saddlebrown': '#8B4513', -\ 'salmon': '#FA8072', -\ 'sandybrown': '#F4A460', -\ 'seagreen': '#2E8B57', -\ 'seashell': '#FFF5EE', -\ 'sienna': '#A0522D', -\ 'silver': '#C0C0C0', -\ 'skyblue': '#87CEEB', -\ 'slateblue': '#6A5ACD', -\ 'slategray': '#708090', -\ 'snow': '#FFFAFA', -\ 'springgreen': '#00FF7F', -\ 'steelblue': '#4682B4', -\ 'tan': '#D2B48C', -\ 'teal': '#008080', -\ 'thistle': '#D8BFD8', -\ 'tomato': '#FF6347', -\ 'turquoise': '#40E0D0', -\ 'violet': '#EE82EE', -\ 'wheat': '#F5DEB3', -\ 'white': '#FFFFFF', -\ 'whitesmoke': '#F5F5F5', -\ 'yellow': '#FFFF00', -\ 'yellowgreen': '#9ACD32' -\ } - -" Returns an approximate grey index for the given grey level -fun! s:grey_number(x) - if &t_Co == 88 - if a:x < 23 - return 0 - elseif a:x < 69 - return 1 - elseif a:x < 103 - return 2 - elseif a:x < 127 - return 3 - elseif a:x < 150 - return 4 - elseif a:x < 173 - return 5 - elseif a:x < 196 - return 6 - elseif a:x < 219 - return 7 - elseif a:x < 243 - return 8 - else - return 9 - endif - else - if a:x < 14 - return 0 - else - let l:n = (a:x - 8) / 10 - let l:m = (a:x - 8) % 10 - if l:m < 5 - return l:n - else - return l:n + 1 - endif - endif - endif -endfun - -" Returns the actual grey level represented by the grey index -fun! s:grey_level(n) - if &t_Co == 88 - if a:n == 0 - return 0 - elseif a:n == 1 - return 46 - elseif a:n == 2 - return 92 - elseif a:n == 3 - return 115 - elseif a:n == 4 - return 139 - elseif a:n == 5 - return 162 - elseif a:n == 6 - return 185 - elseif a:n == 7 - return 208 - elseif a:n == 8 - return 231 - else - return 255 - endif - else - if a:n == 0 - return 0 - else - return 8 + (a:n * 10) - endif - endif -endfun - -" Returns the palette index for the given grey index -fun! s:grey_colour(n) - if &t_Co == 88 - if a:n == 0 - return 16 - elseif a:n == 9 - return 79 - else - return 79 + a:n - endif - else - if a:n == 0 - return 16 - elseif a:n == 25 - return 231 - else - return 231 + a:n - endif - endif -endfun - -" Returns an approximate colour index for the given colour level -fun! s:rgb_number(x) - if &t_Co == 88 - if a:x < 69 - return 0 - elseif a:x < 172 - return 1 - elseif a:x < 230 - return 2 - else - return 3 - endif - else - if a:x < 75 - return 0 - else - let l:n = (a:x - 55) / 40 - let l:m = (a:x - 55) % 40 - if l:m < 20 - return l:n - else - return l:n + 1 - endif - endif - endif -endfun - -" Returns the palette index for the given R/G/B colour indices -fun! s:rgb_colour(x, y, z) - if &t_Co == 88 - return 16 + (a:x * 16) + (a:y * 4) + a:z - else - return 16 + (a:x * 36) + (a:y * 6) + a:z - endif -endfun - -" Returns the actual colour level for the given colour index -fun! s:rgb_level(n) - if &t_Co == 88 - if a:n == 0 - return 0 - elseif a:n == 1 - return 139 - elseif a:n == 2 - return 205 - else - return 255 - endif - else - if a:n == 0 - return 0 - else - return 55 + (a:n * 40) - endif - endif -endfun - -" Returns the palette index to approximate the given R/G/B colour levels -fun! s:colour(r, g, b) - " Get the closest grey - let l:gx = s:grey_number(a:r) - let l:gy = s:grey_number(a:g) - let l:gz = s:grey_number(a:b) - - " Get the closest colour - let l:x = s:rgb_number(a:r) - let l:y = s:rgb_number(a:g) - let l:z = s:rgb_number(a:b) - - if l:gx == l:gy && l:gy == l:gz - " There are two possibilities - let l:dgr = s:grey_level(l:gx) - a:r - let l:dgg = s:grey_level(l:gy) - a:g - let l:dgb = s:grey_level(l:gz) - a:b - let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) - let l:dr = s:rgb_level(l:gx) - a:r - let l:dg = s:rgb_level(l:gy) - a:g - let l:db = s:rgb_level(l:gz) - a:b - let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db) - if l:dgrey < l:drgb - " Use the grey - return s:grey_colour(l:gx) - else - " Use the colour - return s:rgb_colour(l:x, l:y, l:z) - endif - else - " Only one possibility - return s:rgb_colour(l:x, l:y, l:z) - endif -endfun - -function! coc#color#term2rgb(term) abort - if a:term < 0 || a:term > 255 - return '#000000' - endif - return s:xterm_colors[a:term] -endfunction - -function! coc#color#rgb2term(rgb) - let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0 - let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0 - let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0 - return s:colour(l:r, l:g, l:b) -endfunction - -function! coc#color#rgbToHex(...) - let [r, g, b] = ( a:0==1 ? a:1 : a:000 ) - let num = printf('%02x', float2nr(r)) . '' - \ . printf('%02x', float2nr(g)) . '' - \ . printf('%02x', float2nr(b)) . '' - return '#' . num -endfunction - -function! coc#color#hexToRgb(color) - if type(a:color) == 2 - let color = printf('%x', a:color) - else - let color = a:color - end - let matches = matchlist(color, s:patterns['hex']) - let factor = 0x1 - if empty(matches) - let matches = matchlist(color, s:patterns['shortHex']) - let factor = 0x10 - end - if len(matches) < 4 - echohl Error - echom 'Couldnt parse ' . string(color) . ' ' . string(matches) - echohl None - return - end - let r = str2nr(matches[1], 16) * factor - let g = str2nr(matches[2], 16) * factor - let b = str2nr(matches[3], 16) * factor - return [r, g, b] -endfunction - -" @params String color The color -" @params {Number|String|Float} [amount=5] The percentage of light -function! coc#color#lighten(color, ...) - let amount = a:0 ? - \(type(a:1) < 2 ? - \str2float(a:1) : a:1 ) - \: 5.0 - if(amount < 1.0) - let amount = 1.0 + amount - else - let amount = 1.0 + (amount / 100.0) - end - let rgb = coc#color#hexToRgb(a:color) - let rgb = map(rgb, 'v:val * amount') - let rgb = map(rgb, 'v:val > 255.0 ? 255.0 : v:val') - let rgb = map(rgb, 'float2nr(v:val)') - let hex = coc#color#rgbToHex(rgb) - return hex -endfunction - -" @params String color The color -" @params {Number|String|Float} [amount=5] The percentage of darkness -function! coc#color#darken(color, ...) - let amount = a:0 ? - \(type(a:1) < 2 ? - \str2float(a:1) : a:1 ) - \: 5.0 - if(amount < 1.0) - let amount = 1.0 - amount - else - let amount = 1.0 - (amount / 100.0) - end - if(amount < 0.0) - let amount = 0.0 | end - let rgb = coc#color#hexToRgb(a:color) - let rgb = map(rgb, 'v:val * amount') - let rgb = map(rgb, 'v:val > 255.0 ? 255.0 : v:val') - let rgb = map(rgb, 'float2nr(v:val)') - let hex = coc#color#rgbToHex(rgb) - return hex -endfu - -function! coc#color#luminance(rgb) abort - let vals = [] - for val in a:rgb - let val = (val + 0.0)/255 - if val <= 0.03928 - call add(vals, val/12.92) - else - call add(vals, pow((val + 0.055)/1.055, 2.4)) - endif - endfor - return vals[0] * 0.2126 + vals[1] * 0.7152 + vals[2] * 0.0722 -endfunction - -function! coc#color#contrast(rgb1, rgb2) abort - let lnum1 = coc#color#luminance(a:rgb1) - let lnum2 = coc#color#luminance(a:rgb2) - let brightest = lnum1 > lnum2 ? lnum1 : lnum2 - let darkest = lnum1 < lnum2 ? lnum1 : lnum2 - return (brightest + 0.05) / (darkest + 0.05) -endfunction - -function! coc#color#hex_contrast(hex1, hex2) abort - return coc#color#contrast(coc#color#hexToRgb(a:hex1), coc#color#hexToRgb(a:hex2)) -endfunction - -function! coc#color#nameToHex(name, term) abort - if a:term - return has_key(s:xterm_16colors, a:name) ? s:xterm_16colors[a:name] : v:null - endif - return has_key(s:w3c_color_names, a:name) ? s:w3c_color_names[a:name] : v:null -endfunction - -" [r, g, b] ['255', '255', '255'] -" return ['65535', '65535', '65535'] or return v:false to cancel -function! coc#color#pick_color(default_color) - if has('mac') - let default_color = map(a:default_color, {idx, val -> str2nr(val) * 65535 / 255 }) - " This is the AppleScript magic: - let ascrpt = ['-e "tell application \"' . s:app . '\""', - \ '-e "' . s:activate . '"', - \ "-e \"set AppleScript's text item delimiters to {\\\",\\\"}\"", - \ '-e "set theColor to (choose color default color {' . default_color[0] . ", " . default_color[1] . ", " . default_color[2] . '}) as text"', - \ '-e "' . s:quit . '"', - \ '-e "end tell"', - \ '-e "return theColor"'] - let res = trim(system("osascript " . join(ascrpt, ' ') . " 2>/dev/null")) - if empty(res) - return v:false - else - return split(trim(res), ',') - endif - endif - - let hex_color = printf('#%02x%02x%02x', a:default_color[0], a:default_color[1], a:default_color[2]) - - if has('unix') - if executable('zenity') - let res = trim(system('zenity --title="Select a color" --color-selection --color="' . hex_color . '" 2> /dev/null')) - if empty(res) - return v:false - else - " res format is rgb(255,255,255) - return map(split(res[4:-2], ','), {idx, val -> string(str2nr(trim(val)) * 65535 / 255)}) - endif - endif - endif - - let rgb = v:false - if !has('python') - echohl Error | echom 'python support required, checkout :echo has(''python'')' | echohl None - return - endif - try - execute 'py import gtk' - catch /.*/ - echohl Error | echom 'python gtk module not found' | echohl None - return - endtry -python << endpython - -import vim -import gtk, sys - -# message strings -wnd_title_insert = "Insert a color" - -csd = gtk.ColorSelectionDialog(wnd_title_insert) -cs = csd.colorsel - -cs.set_current_color(gtk.gdk.color_parse(vim.eval("hex_color"))) - -cs.set_current_alpha(65535) -cs.set_has_opacity_control(False) -# cs.set_has_palette(int(vim.eval("s:display_palette"))) - -if csd.run()==gtk.RESPONSE_OK: - c = cs.get_current_color() - s = [str(int(c.red)),',',str(int(c.green)),',',str(int(c.blue))] - thecolor = ''.join(s) - vim.command(":let rgb = split('%s',',')" % thecolor) - -csd.destroy() - -endpython - return rgb -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/compat.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/compat.vim deleted file mode 100644 index eb88e290..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/compat.vim +++ /dev/null @@ -1,222 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') - -" first window id for bufnr -" builtin bufwinid returns window of current tab only -function! coc#compat#buf_win_id(bufnr) abort - let info = filter(getwininfo(), 'v:val["bufnr"] =='.a:bufnr) - if empty(info) - return -1 - endif - return info[0]['winid'] -endfunction - -function! coc#compat#buf_set_lines(bufnr, start, end, replacement) abort - if s:is_vim - call coc#api#exec('buf_set_lines', [a:bufnr, a:start, a:end, 0, a:replacement]) - else - call nvim_buf_set_lines(a:bufnr, a:start, a:end, 0, a:replacement) - endif -endfunction - -function! coc#compat#buf_line_count(bufnr) abort - if exists('*nvim_buf_line_count') - return nvim_buf_line_count(a:bufnr) - endif - if bufnr('%') == a:bufnr - return line('$') - endif - if exists('*getbufinfo') - let info = getbufinfo(a:bufnr) - if empty(info) - return 0 - endif - " vim 8.1 has getbufinfo but no linecount - if has_key(info[0], 'linecount') - return info[0]['linecount'] - endif - endif - if exists('*getbufline') - let lines = getbufline(a:bufnr, 1, '$') - return len(lines) - endif - let curr = bufnr('%') - execute 'noa buffer '.a:bufnr - let n = line('$') - execute 'noa buffer '.curr - return n -endfunction - -function! coc#compat#prepend_lines(bufnr, replacement) abort - if exists('*appendbufline') - call appendbufline(a:bufnr, 0, a:replacement) - elseif !s:is_vim - call nvim_buf_set_lines(a:bufnr, 0, 0, 0, a:replacement) - else - throw 'appendbufline() required for prepend lines.' - endif -endfunction - -function! coc#compat#win_is_valid(winid) abort - if exists('*nvim_win_is_valid') - return nvim_win_is_valid(a:winid) - endif - return !empty(getwininfo(a:winid)) -endfunction - -" clear matches by window id, not throw on none exists window. -" may not work on vim < 8.1.1084 & neovim < 0.4.0 -function! coc#compat#clear_matches(winid) abort - if !coc#compat#win_is_valid(a:winid) - return - endif - let curr = win_getid() - if curr == a:winid - call clearmatches() - return - endif - if s:is_vim - if has('patch-8.1.1084') - call clearmatches(a:winid) - endif - else - if exists('*nvim_set_current_win') - noa call nvim_set_current_win(a:winid) - call clearmatches() - noa call nvim_set_current_win(curr) - endif - endif -endfunction - -function! coc#compat#matchaddpos(group, pos, priority, winid) abort - let curr = win_getid() - if curr == a:winid - call matchaddpos(a:group, a:pos, a:priority, -1) - else - if s:is_vim - if has('patch-8.1.0218') - call matchaddpos(a:group, a:pos, a:priority, -1, {'window': a:winid}) - endif - else - call matchaddpos(a:group, a:pos, a:priority, -1, {'window': a:winid}) - endif - endif -endfunction - -function! coc#compat#buf_del_var(bufnr, name) abort - if !bufloaded(a:bufnr) - return - endif - if exists('*nvim_buf_del_var') - silent! call nvim_buf_del_var(a:bufnr, a:name) - else - if a:bufnr == bufnr('%') - execute 'unlet! b:'.a:name - elseif exists('*win_execute') - let winid = coc#compat#buf_win_id(a:bufnr) - if winid != -1 - call win_execute(winid, 'unlet! b:'.a:name) - endif - endif - endif -endfunction - -" hlGroup, pos, priority -function! coc#compat#matchaddgroups(winid, groups) abort - for group in a:groups - call matchaddpos(group['hlGroup'], [group['pos']], group['priority'], -1, {'window': a:winid}) - endfor -endfunction - -function! coc#compat#del_var(name) abort - if exists('*nvim_del_var') - silent! call nvim_del_var(a:name) - else - execute 'unlet! '.a:name - endif -endfunction - -" remove keymap for specific buffer -function! coc#compat#buf_del_keymap(bufnr, mode, lhs) abort - if !bufloaded(a:bufnr) - return - endif - if exists('*nvim_buf_del_keymap') - try - call nvim_buf_del_keymap(a:bufnr, a:mode, a:lhs) - catch /^Vim\%((\a\+)\)\=:E5555/ - " ignore keymap doesn't exist - endtry - return - endif - if bufnr == a:bufnr - execute 'silent! '.a:mode.'unmap '.a:lhs - return - endif - if exists('*win_execute') - let winid = coc#compat#buf_win_id(a:bufnr) - if winid != -1 - call win_execute(winid, a:mode.'unmap '.a:lhs, 'silent!') - endif - endif -endfunction - -function! coc#compat#buf_add_keymap(bufnr, mode, lhs, rhs, opts) abort - if !bufloaded(a:bufnr) - return - endif - if exists('*nvim_buf_set_keymap') - call nvim_buf_set_keymap(a:bufnr, a:mode, a:lhs, a:rhs, a:opts) - else - let cmd = a:mode . 'noremap ' - for key in keys(a:opts) - if get(a:opts, key, 0) - let cmd .= '<'.key.'>' - endif - endfor - let cmd .= ' '.a:lhs.' '.a:rhs - if bufnr('%') == a:bufnr - execute cmd - elseif exists('*win_execute') - let winid = coc#compat#buf_win_id(a:bufnr) - if winid != -1 - call win_execute(winid, cmd) - endif - endif - endif -endfunction - -" execute command or list of commands in window -function! coc#compat#execute(winid, command, ...) abort - if exists('*win_execute') - if type(a:command) == v:t_string - keepalt call win_execute(a:winid, a:command, get(a:, 1, '')) - elseif type(a:command) == v:t_list - keepalt call win_execute(a:winid, join(a:command, "\n"), get(a:, 1, '')) - endif - elseif has('nvim') - if !nvim_win_is_valid(a:winid) - return - endif - let curr = nvim_get_current_win() - noa keepalt call nvim_set_current_win(a:winid) - if type(a:command) == v:t_string - exe get(a:, 1, '').' '.a:command - elseif type(a:command) == v:t_list - for cmd in a:command - exe get(a:, 1, '').' '.cmd - endfor - endif - noa keepalt call nvim_set_current_win(curr) - else - throw 'win_execute does not exist, please upgrade vim.' - endif -endfunc - -function! coc#compat#trim(str) - if exists('*trim') - return trim(a:str) - endif - " TODO trim from beginning - return substitute(a:str, '\s\+$', '', '') -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/cursor.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/cursor.vim deleted file mode 100644 index 74c81d95..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/cursor.vim +++ /dev/null @@ -1,59 +0,0 @@ -scriptencoding utf-8 - -" Position of cursor relative to screen cell -function! coc#cursor#screen_pos() abort - let nr = winnr() - let [row, col] = win_screenpos(nr) - return [row + winline() - 2, col + wincol() - 2] -endfunction - -function! coc#cursor#move_by_col(delta) - let pos = getcurpos() - call cursor(pos[1], pos[2] + a:delta) -endfunction - -" Get cursor position. -function! coc#cursor#position() - let line = getline('.') - return [line('.') - 1, coc#string#character_index(line, col('.') - 1)] -endfunction - -" Move cursor to position. -function! coc#cursor#move_to(line, character) abort - let content = getline(a:line + 1) - call cursor(a:line + 1, coc#string#byte_index(content, a:character) + 1) -endfunction - -" Character offset of current cursor, vim provide bytes offset only. -function! coc#cursor#char_offset() abort - let offset = 0 - let lnum = line('.') - for i in range(1, lnum) - if i == lnum - let offset += strchars(strpart(getline('.'), 0, col('.')-1)) - else - let offset += strchars(getline(i)) + 1 - endif - endfor - return offset -endfunction - -" Returns latest selection range -function! coc#cursor#get_selection(char) abort - let m = a:char ? 'char' : visualmode() - if empty(m) - return v:null - endif - let [_, sl, sc, soff] = getpos(m ==# 'char' ? "'[" : "'<") - let [_, el, ec, eoff] = getpos(m ==# 'char' ? "']" : "'>") - let start_idx = coc#string#character_index(getline(sl), sc - 1) - if m ==# 'V' - return [sl - 1, start_idx, el, 0] - endif - let line = getline(el) - let end_idx = coc#string#character_index(line, ec - 1) - if m !=# 'char' - let end_idx = end_idx == coc#string#character_length(line) ? end_idx : end_idx + 1 - endif - return [sl - 1, start_idx, el - 1, end_idx] -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/dialog.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/dialog.vim deleted file mode 100644 index 3f9e0c48..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/dialog.vim +++ /dev/null @@ -1,667 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:root = expand(':h:h:h') -let s:prompt_win_bufnr = 0 -let s:list_win_bufnr = 0 -let s:prompt_win_width = get(g:, 'coc_prompt_win_width', 32) -let s:frames = ['· ', '·· ', '···', ' ··', ' ·', ' '] -let s:sign_group = 'PopUpCocDialog' -let s:detail_bufnr = 0 - -" Float window aside pum -function! coc#dialog#create_pum_float(lines, config) abort - let winid = coc#float#get_float_by_kind('pumdetail') - if empty(a:lines) || !coc#pum#visible() - if winid - call coc#float#close(winid) - endif - return - endif - let pumbounding = coc#pum#info() - let border = get(a:config, 'border', []) - let pw = pumbounding['width'] + (pumbounding['border'] ? 0 : get(pumbounding, 'scrollbar', 0)) - let rp = &columns - pumbounding['col'] - pw - let showRight = pumbounding['col'] > rp ? 0 : 1 - let maxWidth = showRight ? coc#math#min(rp - 1, a:config['maxWidth']) : coc#math#min(pumbounding['col'] - 1, a:config['maxWidth']) - let bh = get(border, 0 ,0) + get(border, 2, 0) - let maxHeight = &lines - pumbounding['row'] - &cmdheight - 1 - bh - if maxWidth <= 2 || maxHeight < 1 - return v:null - endif - let width = 0 - for line in a:lines - let dw = max([1, strdisplaywidth(line)]) - let width = max([width, dw + 2]) - endfor - let width = float2nr(coc#math#min(maxWidth, width)) - let ch = coc#string#content_height(a:lines, width - 2) - let height = float2nr(coc#math#min(maxHeight, ch)) - let lines = map(a:lines, {_, s -> s =~# '^─' ? repeat('─', width - 2 + (s:is_vim && ch > height ? -1 : 0)) : s}) - let opts = { - \ 'lines': lines, - \ 'highlights': get(a:config, 'highlights', []), - \ 'relative': 'editor', - \ 'col': showRight ? pumbounding['col'] + pw : pumbounding['col'] - width, - \ 'row': pumbounding['row'], - \ 'height': height, - \ 'width': width - 2 + (s:is_vim && ch > height ? -1 : 0), - \ 'scrollinside': showRight ? 0 : 1, - \ 'codes': get(a:config, 'codes', []), - \ } - for key in ['border', 'highlight', 'borderhighlight', 'winblend', 'focusable', 'shadow', 'rounded'] - if has_key(a:config, key) - let opts[key] = a:config[key] - endif - endfor - call s:close_auto_hide_wins(winid) - let result = coc#float#create_float_win(winid, s:detail_bufnr, opts) - if empty(result) - return - endif - let s:detail_bufnr = result[1] - call setwinvar(result[0], 'kind', 'pumdetail') - if !s:is_vim - call coc#float#nvim_scrollbar(result[0]) - endif -endfunction - -" Float window below/above cursor -function! coc#dialog#create_cursor_float(winid, bufnr, lines, config) abort - if coc#prompt#activated() - return v:null - endif - let pumAlignTop = get(a:config, 'pumAlignTop', 0) - let modes = get(a:config, 'modes', ['n', 'i', 'ic', 's']) - let mode = mode() - let currbuf = bufnr('%') - let pos = [line('.'), col('.')] - if index(modes, mode) == -1 - return v:null - endif - if !s:is_vim && !has('nvim-0.5.0') && mode ==# 'i' - " helps to fix undo issue, don't know why. - call feedkeys("\u", 'n') - endif - if mode ==# 's' && has('patch-8.2.4969') && !has('patch-8.2.4996') - echohl WarningMsg | echon 'Popup not created to avoid issue #10466 on vim >= 8.2.4969' | echohl None - return v:null - endif - let dimension = coc#dialog#get_config_cursor(a:lines, a:config) - if empty(dimension) - return v:null - endif - if coc#pum#visible() && ((pumAlignTop && dimension['row'] <0)|| (!pumAlignTop && dimension['row'] > 0)) - return v:null - endif - let width = dimension['width'] - let lines = map(a:lines, {_, s -> s =~# '^─' ? repeat('─', width) : s}) - let config = extend(extend({'lines': lines, 'relative': 'cursor'}, a:config), dimension) - call s:close_auto_hide_wins(a:winid) - let res = coc#float#create_float_win(a:winid, a:bufnr, config) - if empty(res) - return v:null - endif - let alignTop = dimension['row'] < 0 - let winid = res[0] - let bufnr = res[1] - redraw - if has('nvim') - call coc#float#nvim_scrollbar(winid) - endif - return [currbuf, pos, winid, bufnr, alignTop] -endfunction - -" Create float window for input -function! coc#dialog#create_prompt_win(title, default, opts) abort - call s:close_auto_hide_wins() - let bufnr = has('nvim') ? s:prompt_win_bufnr : 0 - if s:is_vim - execute 'hi link CocPopupTerminal '.get(a:opts, 'highlight', 'CocFloating') - let node = expand(get(g:, 'coc_node_path', 'node')) - let bufnr = term_start([node, s:root . '/bin/prompt.js', a:default], { - \ 'term_rows': 1, - \ 'term_highlight': 'CocPopupTerminal', - \ 'hidden': 1, - \ 'term_finish': 'close' - \ }) - call term_setapi(bufnr, 'Coc') - call setbufvar(bufnr, 'current', type(a:default) == v:t_string ? a:default : '') - endif - let config = s:get_prompt_dimension(a:title, a:default, a:opts) - let res = coc#float#create_float_win(0, bufnr, extend(config, { - \ 'style': 'minimal', - \ 'border': get(a:opts, 'border', [1,1,1,1]), - \ 'rounded': get(a:opts, 'rounded', 1), - \ 'prompt': 1, - \ 'title': a:title, - \ 'lines': s:is_vim ? v:null : [a:default], - \ 'highlight': get(a:opts, 'highlight', 'CocFloating'), - \ 'borderhighlight': [get(a:opts, 'borderhighlight', 'CocFloating')], - \ })) - if empty(res) - return - endif - let winid = res[0] - let bufnr = res[1] - if has('nvim') - let s:prompt_win_bufnr = res[1] - call sign_unplace(s:sign_group, { 'buffer': s:prompt_win_bufnr }) - call nvim_set_current_win(winid) - inoremap - inoremap pumvisible() ? "\" : "\" - exe 'imap ' - exe 'nnoremap :call coc#float#close('.winid.')' - exe 'inoremap "\=coc#dialog#prompt_insert(getline(''.''))\\"' - if get(a:opts, 'list', 0) - for key in ['', '', '', '', '', '', '', '', ''] - " Can't use < in remap - let escaped = key ==# '' ? "C-@" : strcharpart(key, 1, strchars(key) - 2) - exe 'inoremap '.key.' call coc#rpc#notify("PromptKeyPress", ['.bufnr.', "'.escaped.'"])' - endfor - endif - call feedkeys('A', 'in') - endif - call coc#util#do_autocmd('CocOpenFloatPrompt') - if s:is_vim - let pos = popup_getpos(winid) - " width height row col - let dimension = [pos['width'], pos['height'], pos['line'] - 1, pos['col'] - 1] - else - let id = coc#float#get_related(winid, 'border') - if !has('nvim-0.6.0') - redraw - endif - let pos = nvim_win_get_position(id) - let dimension = [nvim_win_get_width(id), nvim_win_get_height(id), pos[0], pos[1]] - endif - return [bufnr, winid, dimension] -endfunction - -" Create list window under target window -function! coc#dialog#create_list(target, dimension, opts) abort - let maxHeight = get(a:opts, 'maxHeight', 10) - let height = max([1, len(get(a:opts, 'lines', []))]) - let height = min([maxHeight, height, &lines - &cmdheight - 1 - a:dimension['row'] + a:dimension['height']]) - let chars = get(a:opts, 'rounded', 1) ? ['╯', '╰'] : ['┘', '└'] - let config = extend(copy(a:opts), { - \ 'relative': 'editor', - \ 'row': a:dimension['row'] + a:dimension['height'], - \ 'col': a:dimension['col'], - \ 'width': a:dimension['width'] - 2, - \ 'height': height, - \ 'border': [1, 1, 1, 1], - \ 'scrollinside': 1, - \ 'borderchars': extend(['─', '│', '─', '│', '├', '┤'], chars) - \ }) - let bufnr = 0 - let result = coc#float#create_float_win(0, s:list_win_bufnr, config) - if empty(result) - return - endif - let winid = result[0] - call coc#float#add_related(winid, a:target) - call setwinvar(winid, 'auto_height', get(a:opts, 'autoHeight', 1)) - call setwinvar(winid, 'max_height', maxHeight) - call setwinvar(winid, 'target_winid', a:target) - call setwinvar(winid, 'kind', 'list') - call coc#dialog#check_scroll_vim(a:target) - return result -endfunction - -" Create menu picker for pick single item -function! coc#dialog#create_menu(lines, config) abort - call s:close_auto_hide_wins() - let highlight = get(a:config, 'highlight', 'CocFloating') - let borderhighlight = get(a:config, 'borderhighlight', [highlight]) - let relative = get(a:config, 'relative', 'cursor') - let lines = copy(a:lines) - let content = get(a:config, 'content', '') - let maxWidth = get(a:config, 'maxWidth', 80) - let highlights = get(a:config, 'highlights', []) - let contentCount = 0 - if !empty(content) - let contentLines = coc#string#reflow(split(content, '\r\?\n'), maxWidth) - let contentCount = len(contentLines) - let lines = extend(contentLines, lines) - if !empty(highlights) - for item in highlights - let item['lnum'] = item['lnum'] + contentCount - endfor - endif - endif - let opts = { - \ 'lines': lines, - \ 'highlight': highlight, - \ 'title': get(a:config, 'title', ''), - \ 'borderhighlight': borderhighlight, - \ 'maxWidth': maxWidth, - \ 'maxHeight': get(a:config, 'maxHeight', 80), - \ 'rounded': get(a:config, 'rounded', 0), - \ 'border': [1, 1, 1, 1], - \ 'highlights': highlights, - \ 'relative': relative, - \ } - if relative ==# 'editor' - let dimension = coc#dialog#get_config_editor(lines, opts) - else - let dimension = coc#dialog#get_config_cursor(lines, opts) - endif - call extend(opts, dimension) - let ids = coc#float#create_float_win(0, s:prompt_win_bufnr, opts) - if empty(ids) - return - endif - let s:prompt_win_bufnr = ids[1] - call coc#dialog#set_cursor(ids[0], ids[1], contentCount + 1) - redraw - if has('nvim') - call coc#float#nvim_scrollbar(ids[0]) - endif - return [ids[0], ids[1], contentCount] -endfunction - -" Create dialog at center of screen -function! coc#dialog#create_dialog(lines, config) abort - call s:close_auto_hide_wins() - " dialog always have borders - let title = get(a:config, 'title', '') - let buttons = get(a:config, 'buttons', []) - let highlight = get(a:config, 'highlight', 'CocFloating') - let borderhighlight = get(a:config, 'borderhighlight', [highlight]) - let opts = { - \ 'title': title, - \ 'rounded': get(a:config, 'rounded', 0), - \ 'relative': 'editor', - \ 'border': [1,1,1,1], - \ 'close': get(a:config, 'close', 1), - \ 'highlight': highlight, - \ 'highlights': get(a:config, 'highlights', []), - \ 'buttons': buttons, - \ 'borderhighlight': borderhighlight, - \ 'getchar': get(a:config, 'getchar', 0) - \ } - call extend(opts, coc#dialog#get_config_editor(a:lines, a:config)) - let bufnr = coc#float#create_buf(0, a:lines) - let res = coc#float#create_float_win(0, bufnr, opts) - if empty(res) - return - endif - if get(a:config, 'cursorline', 0) - call coc#dialog#place_sign(bufnr, 1) - endif - if has('nvim') - redraw - call coc#float#nvim_scrollbar(res[0]) - endif - return res -endfunction - -function! coc#dialog#prompt_confirm(title, cb) abort - call s:close_auto_hide_wins() - if s:is_vim && exists('*popup_dialog') - try - call popup_dialog(a:title. ' (y/n)?', { - \ 'highlight': 'Normal', - \ 'filter': 'popup_filter_yesno', - \ 'callback': {id, res -> a:cb(v:null, res)}, - \ 'borderchars': get(g:, 'coc_borderchars', ['─', '│', '─', '│', '╭', '╮', '╯', '╰']), - \ 'borderhighlight': ['MoreMsg'] - \ }) - catch /.*/ - call a:cb(v:exception) - endtry - return - endif - let text = ' '. a:title . ' (y/n)? ' - let maxWidth = coc#math#min(78, &columns - 2) - let width = coc#math#min(maxWidth, strdisplaywidth(text)) - let maxHeight = &lines - &cmdheight - 1 - let height = coc#math#min(maxHeight, float2nr(ceil(str2float(string(strdisplaywidth(text)))/width))) - let arr = coc#float#create_float_win(0, s:prompt_win_bufnr, { - \ 'col': &columns/2 - width/2 - 1, - \ 'row': maxHeight/2 - height/2 - 1, - \ 'width': width, - \ 'height': height, - \ 'border': [1,1,1,1], - \ 'focusable': v:false, - \ 'relative': 'editor', - \ 'highlight': 'Normal', - \ 'borderhighlight': 'MoreMsg', - \ 'style': 'minimal', - \ 'lines': [text], - \ }) - if empty(arr) - call a:cb('Window create failed!') - return - endif - let winid = arr[0] - let s:prompt_win_bufnr = arr[1] - call sign_unplace(s:sign_group, { 'buffer': s:prompt_win_bufnr }) - let res = 0 - redraw - " same result as vim - while 1 - let key = nr2char(getchar()) - if key == "\" - let res = -1 - break - elseif key == "\" || key == 'n' || key == 'N' - let res = 0 - break - elseif key == 'y' || key == 'Y' - let res = 1 - break - endif - endw - call coc#float#close(winid) - call a:cb(v:null, res) -endfunction - -function! coc#dialog#get_config_editor(lines, config) abort - let title = get(a:config, 'title', '') - let maxheight = min([get(a:config, 'maxHeight', 78), &lines - &cmdheight - 6]) - let maxwidth = min([get(a:config, 'maxWidth', 78), &columns - 2]) - let buttons = get(a:config, 'buttons', []) - let minwidth = s:min_btns_width(buttons) - if maxheight <= 0 || maxwidth <= 0 || minwidth > maxwidth - throw 'Not enough spaces for float window' - endif - let ch = 0 - let width = min([strdisplaywidth(title) + 1, maxwidth]) - for line in a:lines - let dw = max([1, strdisplaywidth(line)]) - if dw < maxwidth && dw > width - let width = dw - elseif dw >= maxwidth - let width = maxwidth - endif - let ch += float2nr(ceil(str2float(string(dw))/maxwidth)) - endfor - let width = max([minwidth, width]) - let height = coc#math#min(ch ,maxheight) - return { - \ 'row': &lines/2 - (height + 4)/2, - \ 'col': &columns/2 - (width + 2)/2, - \ 'width': width, - \ 'height': height, - \ } -endfunction - -function! coc#dialog#prompt_insert(text) abort - call coc#rpc#notify('PromptInsert', [a:text, bufnr('%')]) - return '' -endfunction - -" Dimension of window with lines relative to cursor -" Width & height excludes border & padding -function! coc#dialog#get_config_cursor(lines, config) abort - let preferTop = get(a:config, 'preferTop', 0) - let title = get(a:config, 'title', '') - let border = get(a:config, 'border', []) - if empty(border) && len(title) - let border = [1, 1, 1, 1] - endif - let bh = get(border, 0, 0) + get(border, 2, 0) - let vh = &lines - &cmdheight - 1 - if vh <= 0 - return v:null - endif - let maxWidth = coc#math#min(get(a:config, 'maxWidth', &columns - 1), &columns - 1) - if maxWidth < 3 - return v:null - endif - let maxHeight = coc#math#min(get(a:config, 'maxHeight', vh), vh) - let width = coc#math#min(40, strdisplaywidth(title)) + 3 - for line in a:lines - let dw = max([1, strdisplaywidth(line)]) - let width = max([width, dw + 2]) - endfor - let width = coc#math#min(maxWidth, width) - let ch = coc#string#content_height(a:lines, width - 2) - let [lineIdx, colIdx] = coc#cursor#screen_pos() - " How much we should move left - let offsetX = coc#math#min(get(a:config, 'offsetX', 0), colIdx) - let showTop = 0 - let hb = vh - lineIdx -1 - if lineIdx > bh + 2 && (preferTop || (lineIdx > hb && hb < ch + bh)) - let showTop = 1 - endif - let height = coc#math#min(maxHeight, ch + bh, showTop ? lineIdx - 1 : hb) - if height <= bh - return v:null - endif - let col = - max([offsetX, colIdx - (&columns - 1 - width)]) - let row = showTop ? - height + bh : 1 - return { - \ 'row': row, - \ 'col': col, - \ 'width': width - 2, - \ 'height': height - bh - \ } -endfunction - -function! coc#dialog#change_border_hl(winid, hlgroup) abort - if !hlexists(a:hlgroup) - return - endif - if s:is_vim - if coc#float#valid(a:winid) - call popup_setoptions(a:winid, {'borderhighlight': repeat([a:hlgroup], 4)}) - redraw - endif - else - let winid = coc#float#get_related(a:winid, 'border') - if winid > 0 - call setwinvar(winid, '&winhl', 'Normal:'.a:hlgroup) - endif - endif -endfunction - -function! coc#dialog#change_title(winid, title) abort - if s:is_vim - if coc#float#valid(a:winid) - call popup_setoptions(a:winid, {'title': a:title}) - redraw - endif - else - let winid = coc#float#get_related(a:winid, 'border') - if winid > 0 - let bufnr = winbufnr(winid) - let line = getbufline(bufnr, 1)[0] - let top = strcharpart(line, 0, 1) - \.repeat('─', strchars(line) - 2) - \.strcharpart(line, strchars(line) - 1, 1) - if !empty(a:title) - let top = coc#string#compose(top, 1, a:title.' ') - endif - call nvim_buf_set_lines(bufnr, 0, 1, v:false, [top]) - endif - endif -endfunction - -function! coc#dialog#change_loading(winid, loading) abort - if coc#float#valid(a:winid) - let winid = coc#float#get_related(a:winid, 'loading') - if !a:loading && winid > 0 - call coc#float#close(winid) - endif - if a:loading && winid == 0 - let bufnr = s:create_loading_buf() - if s:is_vim - let pos = popup_getpos(a:winid) - let winid = popup_create(bufnr, { - \ 'line': pos['line'] + 1, - \ 'col': pos['col'] + pos['width'] - 4, - \ 'maxheight': 1, - \ 'maxwidth': 3, - \ 'zindex': 999, - \ 'highlight': get(popup_getoptions(a:winid), 'highlight', 'CocFloating') - \ }) - else - let pos = nvim_win_get_position(a:winid) - let width = nvim_win_get_width(a:winid) - let opts = { - \ 'relative': 'editor', - \ 'row': pos[0], - \ 'col': pos[1] + width - 3, - \ 'focusable': v:false, - \ 'width': 3, - \ 'height': 1, - \ 'style': 'minimal', - \ } - if has('nvim-0.5.1') - let opts['zindex'] = 900 - endif - let winid = nvim_open_win(bufnr, v:false, opts) - call setwinvar(winid, '&winhl', getwinvar(a:winid, '&winhl')) - endif - call setwinvar(winid, 'kind', 'loading') - call setbufvar(bufnr, 'target_winid', a:winid) - call setbufvar(bufnr, 'popup', winid) - call coc#float#add_related(winid, a:winid) - endif - endif -endfunction - -" Update list with new lines and highlights -function! coc#dialog#update_list(winid, bufnr, lines, highlights) abort - if coc#window#tabnr(a:winid) == tabpagenr() - if getwinvar(a:winid, 'auto_height', 0) - let row = coc#float#get_row(a:winid) - " core height - let height = max([1, len(copy(a:lines))]) - let height = min([getwinvar(a:winid, 'max_height', 10), height, &lines - &cmdheight - 1 - row]) - let curr = s:is_vim ? popup_getpos(a:winid)['core_height'] : nvim_win_get_height(a:winid) - let delta = height - curr - if delta != 0 - call coc#float#change_height(a:winid, delta) - endif - endif - call coc#compat#buf_set_lines(a:bufnr, 0, -1, a:lines) - call coc#highlight#add_highlights(a:winid, [], a:highlights) - if s:is_vim - let target = getwinvar(a:winid, 'target_winid', -1) - if target != -1 - call coc#dialog#check_scroll_vim(target) - endif - call win_execute(a:winid, 'exe 1') - endif - endif -endfunction - -" Fix width of prompt window same as list window on scrollbar change -function! coc#dialog#check_scroll_vim(winid) abort - if s:is_vim && coc#float#valid(a:winid) - let winid = coc#float#get_related(a:winid, 'list') - if winid - redraw - let pos = popup_getpos(winid) - let width = pos['width'] + (pos['scrollbar'] ? 1 : 0) - if width != popup_getpos(a:winid)['width'] - call popup_move(a:winid, { - \ 'minwidth': width - 2, - \ 'maxwidth': width - 2, - \ }) - endif - endif - endif -endfunction - -function! coc#dialog#set_cursor(winid, bufnr, line) abort - if s:is_vim - call coc#compat#execute(a:winid, 'exe '.a:line, 'silent!') - call popup_setoptions(a:winid, {'cursorline' : 1}) - call popup_setoptions(a:winid, {'cursorline' : 0}) - else - call nvim_win_set_cursor(a:winid, [a:line, 0]) - endif - call coc#dialog#place_sign(a:bufnr, a:line) -endfunction - -function! coc#dialog#place_sign(bufnr, line) abort - call sign_unplace(s:sign_group, { 'buffer': a:bufnr }) - if a:line > 0 - call sign_place(6, s:sign_group, 'CocCurrentLine', a:bufnr, {'lnum': a:line}) - endif -endfunction - -" Could be center(with optional marginTop) or cursor -function! s:get_prompt_dimension(title, default, opts) abort - let relative = get(a:opts, 'position', 'cursor') ==# 'cursor' ? 'cursor' : 'editor' - let curr = win_screenpos(winnr())[1] + wincol() - 2 - let minWidth = get(a:opts, 'minWidth', s:prompt_win_width) - let width = min([max([strwidth(a:default) + 2, strwidth(a:title) + 2, minWidth]), &columns - 2]) - if get(a:opts, 'maxWidth', 0) - let width = min([width, a:opts['maxWidth']]) - endif - if relative ==# 'cursor' - let [lineIdx, colIdx] = coc#cursor#screen_pos() - if width == &columns - 2 - let col = 0 - curr - else - let col = curr + width <= &columns - 2 ? 0 : curr + width - &columns + 2 - endif - let config = { - \ 'row': lineIdx == 0 ? 1 : 0, - \ 'col': colIdx == 0 ? 0 : col - 1, - \ } - else - let marginTop = get(a:opts, 'marginTop', v:null) - if marginTop is v:null - let row = (&lines - &cmdheight - 2) / 2 - else - let row = marginTop < 2 ? 1 : min([marginTop, &columns - &cmdheight]) - endif - let config = { - \ 'col': float2nr((&columns - width) / 2), - \ 'row': row - s:is_vim, - \ } - endif - return extend(config, {'relative': relative, 'width': width, 'height': 1}) -endfunction - -function! s:min_btns_width(buttons) abort - if empty(a:buttons) - return 0 - endif - let minwidth = len(a:buttons)*3 - 1 - for txt in a:buttons - let minwidth = minwidth + strdisplaywidth(txt) - endfor - return minwidth -endfunction - -" Close windows that should auto hide -function! s:close_auto_hide_wins(...) abort - let winids = coc#float#get_float_win_list() - let except = get(a:, 1, 0) - for id in winids - if except && id == except - continue - endif - if coc#window#get_var(id, 'autohide', 0) - call coc#float#close(id) - endif - endfor -endfunction - -function! s:create_loading_buf() abort - let bufnr = coc#float#create_buf(0) - call s:change_loading_buf(bufnr, 0) - return bufnr -endfunction - -function! s:change_loading_buf(bufnr, idx) abort - if bufloaded(a:bufnr) - let target = getbufvar(a:bufnr, 'target_winid', v:null) - if !empty(target) && !coc#float#valid(target) - call coc#float#close(getbufvar(a:bufnr, 'popup')) - return - endif - let line = get(s:frames, a:idx, ' ') - call setbufline(a:bufnr, 1, line) - call coc#highlight#add_highlight(a:bufnr, -1, 'CocNotificationProgress', 0, 0, -1) - let idx = a:idx == len(s:frames) - 1 ? 0 : a:idx + 1 - call timer_start(100, { -> s:change_loading_buf(a:bufnr, idx)}) - endif -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/dict.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/dict.vim deleted file mode 100644 index 00c494b6..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/dict.vim +++ /dev/null @@ -1,32 +0,0 @@ -scriptencoding utf-8 - -function! coc#dict#equal(one, two) abort - for key in keys(a:one) - if a:one[key] != a:two[key] - return 0 - endif - endfor - return 1 -endfunction - -" Return new dict with keys removed -function! coc#dict#omit(dict, keys) abort - let res = {} - for key in keys(a:dict) - if index(a:keys, key) == -1 - let res[key] = a:dict[key] - endif - endfor - return res -endfunction - -" Return new dict with keys only -function! coc#dict#pick(dict, keys) abort - let res = {} - for key in keys(a:dict) - if index(a:keys, key) != -1 - let res[key] = a:dict[key] - endif - endfor - return res -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/float.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/float.vim deleted file mode 100644 index 8aec3685..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/float.vim +++ /dev/null @@ -1,1445 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:borderchars = get(g:, 'coc_borderchars', ['─', '│', '─', '│', '┌', '┐', '┘', '└']) -let s:rounded_borderchars = s:borderchars[0:3] + ['╭', '╮', '╯', '╰'] -let s:borderjoinchars = get(g:, 'coc_border_joinchars', ['┬', '┤', '┴', '├']) -let s:popup_list_api = exists('*popup_list') -" Popup ids, used when popup_list() doesn't exist -let s:popup_list = [] -let s:pad_bufnr = -1 - -" Check visible float/popup exists. -function! coc#float#has_float(...) abort - return len(coc#float#get_float_win_list(get(a:, 1, 0))) > 0 -endfunction - -function! coc#float#close_all(...) abort - let winids = coc#float#get_float_win_list(get(a:, 1, 0)) - for id in winids - try - call coc#float#close(id) - catch /E5555:/ - " ignore - endtry - endfor -endfunction - -function! coc#float#jump() abort - if has('nvim') - let winids = coc#float#get_float_win_list() - if !empty(winids) - call win_gotoid(winids[0]) - endif - endif -endfunction - -function! coc#float#valid(winid) abort - if a:winid <= 0 - return 0 - endif - if !s:is_vim - if !nvim_win_is_valid(a:winid) - return 0 - endif - return !empty(nvim_win_get_config(a:winid)['relative']) - endif - try - return !empty(popup_getpos(a:winid)) - catch /^Vim\%((\a\+)\)\=:E993/ - " not a popup window - return 0 - endtry -endfunction - -function! coc#float#get_height(winid) abort - if !s:is_vim - let borderwin = coc#float#get_related(a:winid, 'border') - if borderwin - return nvim_win_get_height(borderwin) - endif - return nvim_win_get_height(a:winid) - endif - return get(popup_getpos(a:winid), 'height', 0) -endfunction - -function! coc#float#change_height(winid, delta) abort - if s:is_vim - let curr = get(popup_getpos(a:winid), 'core_height', v:null) - if curr isnot v:null - call popup_move(a:winid, { - \ 'maxheight': max([1, curr + a:delta]), - \ 'minheight': max([1, curr + a:delta]), - \ }) - endif - else - let winids = copy(coc#window#get_var(a:winid, 'related', [])) - call filter(winids, 'index(["border","pad","scrollbar"],coc#window#get_var(v:val,"kind","")) >= 0') - call add(winids, a:winid) - for winid in winids - if coc#window#get_var(winid, 'kind', '') ==# 'border' - let bufnr = winbufnr(winid) - if a:delta > 0 - call appendbufline(bufnr, 1, repeat(getbufline(bufnr, 2), a:delta)) - else - call deletebufline(bufnr, 2, 2 - a:delta - 1) - endif - endif - let height = nvim_win_get_height(winid) - call nvim_win_set_height(winid, max([1, height + a:delta])) - endfor - endif -endfunction - -" create or config float window, returns [winid, bufnr], config including: -" - relative: could be 'editor' 'cursor' -" - row: line count relative to editor/cursor, nagetive number means abover cursor. -" - col: column count relative to editor/cursor, nagetive number means left of cursor. -" - width: content width without border and title. -" - height: content height without border and title. -" - lines: (optional) lines to insert, default to v:null. -" - title: (optional) title. -" - border: (optional) border as number list, like [1, 1, 1 ,1]. -" - cursorline: (optional) enable cursorline when is 1. -" - autohide: (optional) window should be closed on CursorMoved when is 1. -" - highlight: (optional) highlight of window, default to 'CocFloating' -" - borderhighlight: (optional) should be array or string for border highlights, -" highlight all borders with first value. -" - close: (optional) show close button when is 1. -" - highlights: (optional) highlight items. -" - buttons: (optional) array of button text for create buttons at bottom. -" - codes: (optional) list of CodeBlock. -" - winblend: (optional) winblend option for float window, neovim only. -" - shadow: (optional) use shadow as border style, neovim only. -" - focusable: (optional) neovim only, default to true. -" - scrollinside: (optional) neovim only, create scrollbar inside window. -" - rounded: (optional) use rounded borderchars, ignored when borderchars exists. -" - borderchars: (optional) borderchars, should be length of 8 -" - nopad: (optional) not add pad when 1 -" - index: (optional) line index -function! coc#float#create_float_win(winid, bufnr, config) abort - let lines = get(a:config, 'lines', v:null) - let bufnr = a:bufnr - try - let bufnr = coc#float#create_buf(a:bufnr, lines, 'hide') - catch /E523:/ - " happens when using getchar() #3921 - return [] - endtry - let lnum = max([1, get(a:config, 'index', 0) + 1]) - " use exists - if a:winid && coc#float#valid(a:winid) - if s:is_vim - let [line, col] = s:popup_position(a:config) - let opts = { - \ 'firstline': 1, - \ 'line': line, - \ 'col': col, - \ 'minwidth': a:config['width'], - \ 'minheight': a:config['height'], - \ 'maxwidth': a:config['width'], - \ 'maxheight': a:config['height'], - \ 'title': get(a:config, 'title', ''), - \ 'highlight': get(a:config, 'highlight', 'CocFloating'), - \ 'borderhighlight': [s:get_borderhighlight(a:config)], - \ } - if !s:empty_border(get(a:config, 'border', [])) - let opts['border'] = a:config['border'] - endif - call popup_setoptions(a:winid, opts) - call win_execute(a:winid, 'exe '.lnum) - call coc#float#vim_buttons(a:winid, a:config) - call s:add_highlights(a:winid, a:config, 0) - return [a:winid, winbufnr(a:winid)] - else - let config = s:convert_config_nvim(a:config, 0) - let hlgroup = get(a:config, 'highlight', 'CocFloating') - let current = getwinvar(a:winid, '&winhl', '') - let winhl = coc#util#merge_winhl(current, [['Normal', hlgroup], ['FoldColumn', hlgroup], ['Search', '']]) - if winhl !=# current - call setwinvar(a:winid, '&winhl', winhl) - endif - call nvim_win_set_buf(a:winid, bufnr) - call nvim_win_set_config(a:winid, config) - call nvim_win_set_cursor(a:winid, [lnum, 0]) - call coc#float#nvim_create_related(a:winid, config, a:config) - call s:add_highlights(a:winid, a:config, 0) - return [a:winid, bufnr] - endif - endif - let winid = 0 - if s:is_vim - let [line, col] = s:popup_position(a:config) - let title = get(a:config, 'title', '') - let buttons = get(a:config, 'buttons', []) - let hlgroup = get(a:config, 'highlight', 'CocFloating') - let nopad = get(a:config, 'nopad', 0) - let border = s:empty_border(get(a:config, 'border', [])) ? [0, 0, 0, 0] : a:config['border'] - let opts = { - \ 'title': title, - \ 'line': line, - \ 'col': col, - \ 'fixed': 1, - \ 'padding': [0, !nopad && !border[1], 0, !nopad && !border[3]], - \ 'borderchars': s:get_borderchars(a:config), - \ 'highlight': hlgroup, - \ 'minwidth': a:config['width'], - \ 'minheight': a:config['height'], - \ 'maxwidth': a:config['width'], - \ 'maxheight': a:config['height'], - \ 'close': get(a:config, 'close', 0) ? 'button' : 'none', - \ 'border': border, - \ 'callback': { -> coc#float#on_close(winid)}, - \ 'borderhighlight': [s:get_borderhighlight(a:config)], - \ 'scrollbarhighlight': 'CocFloatSbar', - \ 'thumbhighlight': 'CocFloatThumb', - \ } - let winid = popup_create(bufnr, opts) - if !s:popup_list_api - call add(s:popup_list, winid) - endif - call s:set_float_defaults(winid, a:config) - call win_execute(winid, 'exe '.lnum) - call coc#float#vim_buttons(winid, a:config) - else - let config = s:convert_config_nvim(a:config, 1) - let border = get(a:config, 'border', []) - if has('nvim-0.5.0') && get(a:config, 'shadow', 0) && empty(get(a:config, 'buttons', v:null)) && empty(get(border, 2, 0)) - let config['border'] = 'shadow' - endif - noa let winid = nvim_open_win(bufnr, 0, config) - if winid is 0 - return [] - endif - " cursorline highlight not work on old neovim - call s:set_float_defaults(winid, a:config) - call nvim_win_set_cursor(winid, [lnum, 0]) - call coc#float#nvim_create_related(winid, config, a:config) - call coc#float#nvim_set_winblend(winid, get(a:config, 'winblend', v:null)) - endif - call s:add_highlights(winid, a:config, 1) - let g:coc_last_float_win = winid - call coc#util#do_autocmd('CocOpenFloat') - return [winid, bufnr] -endfunction - -function! coc#float#nvim_create_related(winid, config, opts) abort - let related = getwinvar(a:winid, 'related', []) - let exists = !empty(related) - let border = get(a:opts, 'border', []) - let borderhighlight = s:get_borderhighlight(a:opts) - let buttons = get(a:opts, 'buttons', []) - let pad = !get(a:opts, 'nopad', 0) && (empty(border) || get(border, 1, 0) == 0) - let shadow = get(a:opts, 'shadow', 0) - if get(a:opts, 'close', 0) - call coc#float#nvim_close_btn(a:config, a:winid, border, borderhighlight, related) - elseif exists - call coc#float#close_related(a:winid, 'close') - endif - if !empty(buttons) - call coc#float#nvim_buttons(a:config, a:winid, buttons, get(a:opts, 'getchar', 0), get(border, 2, 0), pad, borderhighlight, shadow, related) - elseif exists - call coc#float#close_related(a:winid, 'buttons') - endif - if !s:empty_border(border) - let borderchars = s:get_borderchars(a:opts) - call coc#float#nvim_border_win(a:config, borderchars, a:winid, border, get(a:opts, 'title', ''), !empty(buttons), borderhighlight, shadow, related) - elseif exists - call coc#float#close_related(a:winid, 'border') - endif - " Check right border - if pad - call coc#float#nvim_right_pad(a:config, a:winid, shadow, related) - elseif exists - call coc#float#close_related(a:winid, 'pad') - endif - call setwinvar(a:winid, 'related', filter(related, 'nvim_win_is_valid(v:val)')) -endfunction - -" border window for neovim, content config with border -function! coc#float#nvim_border_win(config, borderchars, winid, border, title, hasbtn, hlgroup, shadow, related) abort - let winid = coc#float#get_related(a:winid, 'border') - let row = a:border[0] ? a:config['row'] - 1 : a:config['row'] - let col = a:border[3] ? a:config['col'] - 1 : a:config['col'] - let width = a:config['width'] + a:border[1] + a:border[3] - let height = a:config['height'] + a:border[0] + a:border[2] + (a:hasbtn ? 2 : 0) - let lines = coc#float#create_border_lines(a:border, a:borderchars, a:title, a:config['width'], a:config['height'], a:hasbtn) - let bufnr = winid ? winbufnr(winid) : 0 - let bufnr = coc#float#create_buf(bufnr, lines) - let opt = { - \ 'relative': a:config['relative'], - \ 'width': width, - \ 'height': height, - \ 'row': row, - \ 'col': col, - \ 'focusable': v:false, - \ 'style': 'minimal', - \ } - if has('nvim-0.5.0') && a:shadow && !a:hasbtn && a:border[2] - let opt['border'] = 'shadow' - let opt['noautocmd'] = 1 - endif - if winid - call nvim_win_set_config(winid, opt) - call setwinvar(winid, '&winhl', 'Normal:'.a:hlgroup.',Search:') - else - noa let winid = nvim_open_win(bufnr, 0, opt) - call setwinvar(winid, 'delta', -1) - let winhl = 'Normal:'.a:hlgroup.',Search:' - call s:nvim_add_related(winid, a:winid, 'border', winhl, a:related) - endif -endfunction - -" neovim only -function! coc#float#nvim_close_btn(config, winid, border, hlgroup, related) abort - let winid = coc#float#get_related(a:winid, 'close') - let config = { - \ 'relative': a:config['relative'], - \ 'width': 1, - \ 'height': 1, - \ 'row': get(a:border, 0, 0) ? a:config['row'] - 1 : a:config['row'], - \ 'col': a:config['col'] + a:config['width'], - \ 'focusable': v:true, - \ 'style': 'minimal', - \ } - if has('nvim-0.5.1') - let config['zindex'] = 300 - endif - if winid - call nvim_win_set_config(winid, coc#dict#pick(config, ['relative', 'row', 'col'])) - else - let bufnr = coc#float#create_buf(0, ['X']) - noa let winid = nvim_open_win(bufnr, 0, config) - let winhl = 'Normal:'.a:hlgroup.',Search:' - call s:nvim_add_related(winid, a:winid, 'close', winhl, a:related) - endif -endfunction - -" Create padding window by config of current window & border config -function! coc#float#nvim_right_pad(config, winid, shadow, related) abort - let winid = coc#float#get_related(a:winid, 'pad') - let config = { - \ 'relative': a:config['relative'], - \ 'width': 1, - \ 'height': a:config['height'], - \ 'row': a:config['row'], - \ 'col': a:config['col'] + a:config['width'], - \ 'focusable': v:false, - \ 'style': 'minimal', - \ } - if has('nvim-0.5.1') - let config['zindex'] = 300 - endif - if has('nvim-0.5.0') && a:shadow - let config['border'] = 'shadow' - endif - if winid && nvim_win_is_valid(winid) - if has('nvim-0.5.0') - call nvim_win_set_config(winid, coc#dict#pick(config, ['relative', 'row', 'col'])) - call nvim_win_set_height(winid, config['height']) - return - endif - noa call nvim_win_close(winid, 1) - endif - let s:pad_bufnr = bufloaded(s:pad_bufnr) ? s:pad_bufnr : coc#float#create_buf(0, repeat([''], &lines), 'hide') - noa let winid = nvim_open_win(s:pad_bufnr, 0, config) - call s:nvim_add_related(winid, a:winid, 'pad', '', a:related) -endfunction - -" draw buttons window for window with config -function! coc#float#nvim_buttons(config, winid, buttons, getchar, borderbottom, pad, borderhighlight, shadow, related) abort - let winid = coc#float#get_related(a:winid, 'buttons') - let width = a:config['width'] + (a:pad ? 1 : 0) - let config = { - \ 'row': a:config['row'] + a:config['height'], - \ 'col': a:config['col'], - \ 'width': width, - \ 'height': 2 + (a:borderbottom ? 1 : 0), - \ 'relative': a:config['relative'], - \ 'focusable': 1, - \ 'style': 'minimal', - \ } - if has('nvim-0.5.1') - let config['zindex'] = 300 - if a:shadow - let config['border'] = 'shadow' - endif - endif - if winid - let bufnr = winbufnr(winid) - call s:create_btns_buffer(bufnr, width, a:buttons, a:borderbottom) - call nvim_win_set_config(winid, config) - else - let bufnr = s:create_btns_buffer(0, width, a:buttons, a:borderbottom) - noa let winid = nvim_open_win(bufnr, 0, config) - if winid - call s:nvim_add_related(winid, a:winid, 'buttons', '', a:related) - call s:nvim_create_keymap(winid) - endif - endif - if bufnr - call nvim_buf_clear_namespace(bufnr, -1, 0, -1) - call nvim_buf_add_highlight(bufnr, 1, a:borderhighlight, 0, 0, -1) - if a:borderbottom - call nvim_buf_add_highlight(bufnr, 1, a:borderhighlight, 2, 0, -1) - endif - let vcols = getbufvar(bufnr, 'vcols', []) - " TODO need change vol to col - for col in vcols - call nvim_buf_add_highlight(bufnr, 1, a:borderhighlight, 1, col, col + 3) - endfor - if a:getchar - let keys = s:gen_filter_keys(getbufline(bufnr, 2)[0]) - call matchaddpos('MoreMsg', map(keys[0], "[2,v:val]"), 99, -1, {'window': winid}) - call timer_start(10, {-> coc#float#getchar(winid, keys[1])}) - endif - endif -endfunction - -function! coc#float#getchar(winid, keys) abort - let ch = coc#prompt#getc() - let target = getwinvar(a:winid, 'target_winid', 0) - if ch ==# "\" - call coc#float#close(target) - return - endif - if ch ==# "\" - if getwinvar(v:mouse_winid, 'kind', '') ==# 'close' - call coc#float#close(target) - return - endif - if v:mouse_winid == a:winid && v:mouse_lnum == 2 - let vcols = getbufvar(winbufnr(a:winid), 'vcols', []) - let col = v:mouse_col - 1 - if index(vcols, col) < 0 - let filtered = filter(vcols, 'v:val < col') - call coc#rpc#notify('FloatBtnClick', [winbufnr(target), len(filtered)]) - call coc#float#close(target) - return - endif - endif - else - let idx = index(a:keys, ch) - if idx >= 0 - call coc#rpc#notify('FloatBtnClick', [winbufnr(target), idx]) - call coc#float#close(target) - return - endif - endif - call coc#float#getchar(a:winid, a:keys) -endfunction - -" Create or refresh scrollbar for winid -" Need called on create, config, buffer change, scrolled -function! coc#float#nvim_scrollbar(winid) abort - if s:is_vim - return - endif - let winids = nvim_tabpage_list_wins(nvim_get_current_tabpage()) - if index(winids, a:winid) == -1 - return - endif - let config = nvim_win_get_config(a:winid) - let [row, column] = nvim_win_get_position(a:winid) - let relative = 'editor' - if row == 0 && column == 0 - " fix bad value when ext_multigrid is enabled. https://github.com/neovim/neovim/issues/11935 - let [row, column] = [config.row, config.col] - let relative = config.relative - endif - let width = nvim_win_get_width(a:winid) - let height = nvim_win_get_height(a:winid) - let bufnr = winbufnr(a:winid) - let cw = getwinvar(a:winid, '&foldcolumn', 0) ? width - 1 : width - let ch = coc#float#content_height(bufnr, cw, getwinvar(a:winid, '&wrap')) - let closewin = coc#float#get_related(a:winid, 'close') - let border = getwinvar(a:winid, 'border', []) - let scrollinside = getwinvar(a:winid, 'scrollinside', 0) && get(border, 1, 0) - let winblend = getwinvar(a:winid, '&winblend', 0) - let move_down = closewin && !get(border, 0, 0) - let id = coc#float#get_related(a:winid, 'scrollbar') - if ch <= height || height <= 1 - " no scrollbar, remove exists - if id - call s:close_win(id, 1) - endif - return - endif - if move_down - let height = height - 1 - endif - call coc#float#close_related(a:winid, 'pad') - let sbuf = id ? winbufnr(id) : 0 - let sbuf = coc#float#create_buf(sbuf, repeat([' '], height)) - let opts = { - \ 'row': move_down ? row + 1 : row, - \ 'col': column + width - scrollinside, - \ 'relative': relative, - \ 'width': 1, - \ 'height': height, - \ 'focusable': v:false, - \ 'style': 'minimal', - \ } - if has('nvim-0.5.1') - let opts['zindex'] = get(config, 'zindex', 50) - endif - if has('nvim-0.5.0') && s:has_shadow(config) - let opts['border'] = 'shadow' - endif - if id - call nvim_win_set_config(id, opts) - else - noa let id = nvim_open_win(sbuf, 0 , opts) - if id == 0 - return - endif - if winblend - call setwinvar(id, '&winblend', winblend) - endif - call setwinvar(id, 'kind', 'scrollbar') - call setwinvar(id, 'target_winid', a:winid) - call coc#float#add_related(id, a:winid) - endif - if !scrollinside - call coc#float#nvim_scroll_adjust(a:winid) - endif - let thumb_height = max([1, float2nr(floor(height * (height + 0.0)/ch))]) - let wininfo = getwininfo(a:winid)[0] - let start = 0 - if wininfo['topline'] != 1 - " needed for correct getwininfo - let firstline = wininfo['topline'] - let lastline = s:nvim_get_botline(firstline, height, cw, bufnr) - let linecount = nvim_buf_line_count(winbufnr(a:winid)) - if lastline >= linecount - let start = height - thumb_height - else - let start = max([1, float2nr(round((height - thumb_height + 0.0)*(firstline - 1.0)/(ch - height)))]) - endif - endif - " add highlights - call nvim_buf_clear_namespace(sbuf, -1, 0, -1) - for idx in range(0, height - 1) - if idx >= start && idx < start + thumb_height - call nvim_buf_add_highlight(sbuf, -1, 'CocFloatThumb', idx, 0, 1) - else - call nvim_buf_add_highlight(sbuf, -1, 'CocFloatSbar', idx, 0, 1) - endif - endfor -endfunction - -function! coc#float#create_border_lines(border, borderchars, title, width, height, hasbtn) abort - let borderchars = a:borderchars - let list = [] - if a:border[0] - let top = (a:border[3] ? borderchars[4]: '') - \.repeat(borderchars[0], a:width) - \.(a:border[1] ? borderchars[5] : '') - if !empty(a:title) - let top = coc#string#compose(top, 1, a:title.' ') - endif - call add(list, top) - endif - let mid = (a:border[3] ? borderchars[3]: '') - \.repeat(' ', a:width) - \.(a:border[1] ? borderchars[1] : '') - call extend(list, repeat([mid], a:height + (a:hasbtn ? 2 : 0))) - if a:hasbtn - let list[len(list) - 2] = (a:border[3] ? s:borderjoinchars[3]: '') - \.repeat(' ', a:width) - \.(a:border[1] ? s:borderjoinchars[1] : '') - endif - if a:border[2] - let bot = (a:border[3] ? borderchars[7]: '') - \.repeat(borderchars[2], a:width) - \.(a:border[1] ? borderchars[6] : '') - call add(list, bot) - endif - return list -endfunction - -" Close float window by id -function! coc#float#close(winid, ...) abort - let noautocmd = get(a:, 1, 0) - call coc#float#close_related(a:winid) - call s:close_win(a:winid, noautocmd) - return 1 -endfunction - -" Get visible float windows -function! coc#float#get_float_win_list(...) abort - let res = [] - let list_all = get(a:, 1, 0) - if s:is_vim - if s:popup_list_api - return filter(popup_list(), 'popup_getpos(v:val)["visible"]'.(list_all ? '' : '&& getwinvar(v:val, "float", 0)')) - endif - return filter(s:popup_list, 's:popup_visible(v:val)') - else - let res = [] - for i in range(1, winnr('$')) - let id = win_getid(i) - let config = nvim_win_get_config(id) - if empty(config) || empty(config['relative']) - continue - endif - " ignore border & button window & others - if list_all == 0 && !getwinvar(id, 'float', 0) - continue - endif - call add(res, id) - endfor - return res - endif - return [] -endfunction - -function! coc#float#get_float_by_kind(kind) abort - if s:is_vim - if s:popup_list_api - return get(filter(popup_list(), 'popup_getpos(v:val)["visible"] && getwinvar(v:val, "kind", "") ==# "'.a:kind.'"'), 0, 0) - endif - return get(filter(s:popup_list, 's:popup_visible(v:val) && getwinvar(v:val, "kind", "") ==# "'.a:kind.'"'), 0, 0) - else - let res = [] - for i in range(1, winnr('$')) - let winid = win_getid(i) - let config = nvim_win_get_config(winid) - if !empty(config['relative']) && getwinvar(winid, 'kind', '') ==# a:kind - return winid - endif - endfor - endif - return 0 -endfunction - -" Check if a float window is scrollable -function! coc#float#scrollable(winid) abort - let bufnr = winbufnr(a:winid) - if bufnr == -1 - return 0 - endif - if s:is_vim - let pos = popup_getpos(a:winid) - if get(pos, 'scrollbar', 0) - return 1 - endif - let ch = coc#float#content_height(bufnr, pos['core_width'], getwinvar(a:winid, '&wrap')) - return ch > pos['core_height'] - else - let height = nvim_win_get_height(a:winid) - let width = nvim_win_get_width(a:winid) - if width > 1 && getwinvar(a:winid, '&foldcolumn', 0) - " since we use foldcolumn for left padding - let width = width - 1 - endif - let ch = coc#float#content_height(bufnr, width, getwinvar(a:winid, '&wrap')) - return ch > height - endif -endfunction - -function! coc#float#has_scroll() abort - let win_ids = filter(coc#float#get_float_win_list(), 'coc#float#scrollable(v:val)') - return !empty(win_ids) -endfunction - -function! coc#float#scroll(forward, ...) - if !has('nvim-0.4.0') && !has('patch-8.2.0750') - throw 'coc#float#scroll() requires nvim >= 0.4.0 or vim >= 8.2.0750' - endif - let amount = get(a:, 1, 0) - let winids = filter(coc#float#get_float_win_list(), 'coc#float#scrollable(v:val) && getwinvar(v:val,"kind","") !=# "pum"') - if empty(winids) - return mode() =~ '^i' || mode() ==# 'v' ? "" : "\" - endif - for winid in winids - call s:scroll_win(winid, a:forward, amount) - endfor - return mode() =~ '^i' || mode() ==# 'v' ? "" : "\" -endfunction - -function! coc#float#scroll_win(winid, forward, amount) abort - let opts = s:get_options(a:winid) - let lines = getbufline(winbufnr(a:winid), 1, '$') - let maxfirst = s:max_firstline(lines, opts['height'], opts['width']) - let topline = opts['topline'] - let height = opts['height'] - let width = opts['width'] - let scrolloff = getwinvar(a:winid, '&scrolloff', 0) - if a:forward && topline >= maxfirst - return - endif - if !a:forward && topline == 1 - return - endif - if a:amount == 0 - let topline = s:get_topline(opts['topline'], lines, a:forward, height, width) - else - let topline = topline + (a:forward ? a:amount : - a:amount) - endif - let topline = a:forward ? min([maxfirst, topline]) : max([1, topline]) - let lnum = s:get_cursorline(topline, lines, scrolloff, width, height) - call s:win_setview(a:winid, topline, lnum) - let top = s:get_options(a:winid)['topline'] - " not changed - if top == opts['topline'] - if a:forward - call s:win_setview(a:winid, topline + 1, lnum + 1) - else - call s:win_setview(a:winid, topline - 1, lnum - 1) - endif - endif -endfunction - -function! coc#float#content_height(bufnr, width, wrap) abort - if !bufloaded(a:bufnr) - return 0 - endif - if !a:wrap - return coc#compat#buf_line_count(a:bufnr) - endif - let lines = has('nvim') ? nvim_buf_get_lines(a:bufnr, 0, -1, 0) : getbufline(a:bufnr, 1, '$') - return coc#string#content_height(lines, a:width) -endfunction - -function! coc#float#nvim_refresh_scrollbar(winid) abort - let id = coc#float#get_related(a:winid, 'scrollbar') - if id && nvim_win_is_valid(id) - call coc#float#nvim_scrollbar(a:winid) - endif -endfunction - -function! coc#float#on_close(winid) abort - let winids = coc#float#get_float_win_list() - for winid in winids - let target = getwinvar(winid, 'target_winid', -1) - if target == a:winid - call coc#float#close(winid) - endif - endfor -endfunction - -" Close related windows, or specific kind -function! coc#float#close_related(winid, ...) abort - if !coc#float#valid(a:winid) - return - endif - let timer = coc#window#get_var(a:winid, 'timer', 0) - if timer - call timer_stop(timer) - endif - let kind = get(a:, 1, '') - let winids = coc#window#get_var(a:winid, 'related', []) - for id in winids - let curr = coc#window#get_var(id, 'kind', '') - if empty(kind) || curr ==# kind - if curr == 'list' - call coc#float#close(id, 1) - elseif s:is_vim - " vim doesn't throw - noa call popup_close(id) - else - silent! noa call nvim_win_close(id, 1) - endif - endif - endfor -endfunction - -" Close related windows if target window is not visible. -function! coc#float#check_related() abort - let invalids = [] - let ids = coc#float#get_float_win_list(1) - for id in ids - let target = getwinvar(id, 'target_winid', 0) - if target && index(ids, target) == -1 - call add(invalids, id) - endif - endfor - if s:is_vim && !s:popup_list_api - let s:popup_list = filter(ids, "index(invalids, v:val) == -1") - endif - for id in invalids - call coc#float#close(id) - endfor -endfunction - -" Show float window/popup for user confirm. -" Create buttons popup on vim -function! coc#float#vim_buttons(winid, config) abort - if !has('patch-8.2.0750') - return - endif - let related = getwinvar(a:winid, 'related', []) - let winid = coc#float#get_related(a:winid, 'buttons') - let btns = get(a:config, 'buttons', []) - if empty(btns) - if winid - call s:close_win(winid, 1) - " fix padding - let opts = popup_getoptions(a:winid) - let padding = get(opts, 'padding', v:null) - if !empty(padding) - let padding[2] = padding[2] - 2 - endif - call popup_setoptions(a:winid, {'padding': padding}) - endif - return - endif - let border = get(a:config, 'border', v:null) - if !winid - " adjusting popup padding - let opts = popup_getoptions(a:winid) - let padding = get(opts, 'padding', v:null) - if type(padding) == 7 - let padding = [0, 0, 2, 0] - elseif len(padding) == 0 - let padding = [1, 1, 3, 1] - else - let padding[2] = padding[2] + 2 - endif - call popup_setoptions(a:winid, {'padding': padding}) - endif - let borderhighlight = get(get(a:config, 'borderhighlight', []), 0, '') - let pos = popup_getpos(a:winid) - let bw = empty(border) ? 0 : get(border, 1, 0) + get(border, 3, 0) - let borderbottom = empty(border) ? 0 : get(border, 2, 0) - let borderleft = empty(border) ? 0 : get(border, 3, 0) - let width = pos['width'] - bw + get(pos, 'scrollbar', 0) - let bufnr = s:create_btns_buffer(winid ? winbufnr(winid): 0,width, btns, borderbottom) - let height = 2 + (borderbottom ? 1 : 0) - let keys = s:gen_filter_keys(getbufline(bufnr, 2)[0]) - let options = { - \ 'filter': {id, key -> coc#float#vim_filter(id, key, keys[1])}, - \ 'highlight': get(opts, 'highlight', 'CocFloating') - \ } - let config = { - \ 'line': pos['line'] + pos['height'] - height, - \ 'col': pos['col'] + borderleft, - \ 'minwidth': width, - \ 'minheight': height, - \ 'maxwidth': width, - \ 'maxheight': height, - \ } - if winid != 0 - call popup_move(winid, config) - call popup_setoptions(winid, options) - call win_execute(winid, 'call clearmatches()') - else - let options = extend({ - \ 'filtermode': 'nvi', - \ 'padding': [0, 0, 0, 0], - \ 'fixed': 1, - \ 'zindex': 99, - \ }, options) - call extend(options, config) - let winid = popup_create(bufnr, options) - if !s:popup_list_api - call add(s:popup_list, winid) - endif - endif - if winid != 0 - if !empty(borderhighlight) - call coc#highlight#add_highlight(bufnr, -1, borderhighlight, 0, 0, -1) - call coc#highlight#add_highlight(bufnr, -1, borderhighlight, 2, 0, -1) - call win_execute(winid, 'call matchadd("'.borderhighlight.'", "'.s:borderchars[1].'")') - endif - call setwinvar(winid, 'kind', 'buttons') - call setwinvar(winid, 'target_winid', a:winid) - call add(related, winid) - call setwinvar(a:winid, 'related', related) - call matchaddpos('MoreMsg', map(keys[0], "[2,v:val]"), 99, -1, {'window': winid}) - endif -endfunction - -function! coc#float#nvim_float_click() abort - let kind = getwinvar(win_getid(), 'kind', '') - if kind == 'buttons' - if line('.') != 2 - return - endif - let vw = strdisplaywidth(strpart(getline('.'), 0, col('.') - 1)) - let vcols = getbufvar(bufnr('%'), 'vcols', []) - if index(vcols, vw) >= 0 - return - endif - let idx = 0 - if !empty(vcols) - let filtered = filter(vcols, 'v:val < vw') - let idx = idx + len(filtered) - endif - let winid = win_getid() - let target = getwinvar(winid, 'target_winid', 0) - if target - call coc#rpc#notify('FloatBtnClick', [winbufnr(target), idx]) - call coc#float#close(target) - endif - elseif kind == 'close' - let target = getwinvar(win_getid(), 'target_winid', 0) - call coc#float#close(target) - endif -endfunction - -" Add mapping if necessary -function! coc#float#nvim_win_enter(winid) abort - let kind = getwinvar(a:winid, 'kind', '') - if kind == 'buttons' || kind == 'close' - if empty(maparg('', 'n')) - nnoremap :call coc#float#nvim_float_click() - endif - endif -endfunction - -function! coc#float#vim_filter(winid, key, keys) abort - let key = tolower(a:key) - let idx = index(a:keys, key) - let target = getwinvar(a:winid, 'target_winid', 0) - if target && idx >= 0 - call coc#rpc#notify('FloatBtnClick', [winbufnr(target), idx]) - call coc#float#close(target) - return 1 - endif - return 0 -endfunction - -function! coc#float#get_related(winid, kind, ...) abort - if coc#float#valid(a:winid) - for winid in coc#window#get_var(a:winid, 'related', []) - if coc#window#get_var(winid, 'kind', '') ==# a:kind - return winid - endif - endfor - endif - return get(a:, 1, 0) -endfunction - -function! coc#float#get_row(winid) abort - let winid = s:is_vim ? a:winid : coc#float#get_related(a:winid, 'border', a:winid) - if coc#float#valid(winid) - if s:is_vim - let pos = popup_getpos(winid) - return pos['line'] - 1 - endif - let pos = nvim_win_get_position(winid) - return pos[0] - endif -endfunction - -" Create temporarily buffer with optional lines and &bufhidden -function! coc#float#create_buf(bufnr, ...) abort - if a:bufnr > 0 && bufloaded(a:bufnr) - let bufnr = a:bufnr - else - if s:is_vim - noa let bufnr = bufadd('') - noa call bufload(bufnr) - call setbufvar(bufnr, '&buflisted', 0) - else - noa let bufnr = nvim_create_buf(v:false, v:true) - endif - let bufhidden = get(a:, 2, 'wipe') - call setbufvar(bufnr, '&buftype', 'nofile') - call setbufvar(bufnr, '&bufhidden', bufhidden) - call setbufvar(bufnr, '&swapfile', 0) - call setbufvar(bufnr, '&undolevels', -1) - " neovim's bug - call setbufvar(bufnr, '&modifiable', 1) - endif - let lines = get(a:, 1, v:null) - if type(lines) == v:t_list - if has('nvim') - call nvim_buf_set_lines(bufnr, 0, -1, v:false, lines) - else - silent noa call setbufline(bufnr, 1, lines) - silent noa call deletebufline(bufnr, len(lines) + 1, '$') - endif - endif - return bufnr -endfunction - -" Change border window & close window when scrollbar is shown. -function! coc#float#nvim_scroll_adjust(winid) abort - let winid = coc#float#get_related(a:winid, 'border') - if !winid - return - endif - let bufnr = winbufnr(winid) - let lines = nvim_buf_get_lines(bufnr, 0, -1, 0) - if len(lines) >= 2 - let cw = nvim_win_get_width(a:winid) - let width = nvim_win_get_width(winid) - if width - cw != 1 + (strcharpart(lines[1], 0, 1) ==# s:borderchars[3] ? 1 : 0) - return - endif - call nvim_win_set_width(winid, width + 1) - let lastline = len(lines) - 1 - for i in range(0, lastline) - let line = lines[i] - if i == 0 - let add = s:borderchars[0] - elseif i == lastline - let add = s:borderchars[2] - else - let add = ' ' - endif - let prev = strcharpart(line, 0, strchars(line) - 1) - let lines[i] = prev . add . coc#string#last_character(line) - endfor - call nvim_buf_set_lines(bufnr, 0, -1, 0, lines) - " Move right close button - if coc#window#get_var(a:winid, 'right', 0) == 0 - let id = coc#float#get_related(a:winid, 'close') - if id - let [row, col] = nvim_win_get_position(id) - call nvim_win_set_config(id, { - \ 'relative': 'editor', - \ 'row': row, - \ 'col': col + 1, - \ }) - endif - elseif has('nvim-0.6.0') - " Move winid and all related left by 1 - let winids = [a:winid] + coc#window#get_var(a:winid, 'related', []) - for winid in winids - if nvim_win_is_valid(winid) - if coc#window#get_var(winid, 'kind', '') != 'close' - let config = nvim_win_get_config(winid) - let [row, column] = [config.row, config.col] - call nvim_win_set_config(winid, { - \ 'row': row, - \ 'col': column - 1, - \ 'relative': 'editor', - \ }) - endif - endif - endfor - endif - endif -endfunction - -function! coc#float#nvim_set_winblend(winid, winblend) abort - if a:winblend is v:null - return - endif - call coc#window#set_var(a:winid, '&winblend', a:winblend) - for winid in coc#window#get_var(a:winid, 'related', []) - call coc#window#set_var(winid, '&winblend', a:winblend) - endfor -endfunction - -function! s:popup_visible(id) abort - let pos = popup_getpos(a:id) - if !empty(pos) && get(pos, 'visible', 0) - return 1 - endif - return 0 -endfunction - -function! s:convert_config_nvim(config, create) abort - let valids = ['relative', 'win', 'anchor', 'width', 'height', 'bufpos', 'col', 'row', 'focusable'] - let result = coc#dict#pick(a:config, valids) - let border = get(a:config, 'border', []) - if !s:empty_border(border) - if result['relative'] ==# 'cursor' && result['row'] < 0 - " move top when has bottom border - if get(border, 2, 0) - let result['row'] = result['row'] - 1 - endif - else - " move down when has top border - if get(border, 0, 0) && !get(a:config, 'prompt', 0) - let result['row'] = result['row'] + 1 - endif - endif - " move right when has left border - if get(border, 3, 0) - let result['col'] = result['col'] + 1 - endif - let result['width'] = float2nr(result['width'] + 1 - get(border,3, 0)) - else - let result['width'] = float2nr(result['width'] + (get(a:config, 'nopad', 0) ? 0 : 1)) - endif - if has('nvim-0.5.1') && a:create - let result['noautocmd'] = v:true - endif - let result['height'] = float2nr(result['height']) - return result -endfunction - -function! s:create_btns_buffer(bufnr, width, buttons, borderbottom) abort - let n = len(a:buttons) - let spaces = a:width - n + 1 - let tw = 0 - for txt in a:buttons - let tw += strdisplaywidth(txt) - endfor - if spaces < tw - throw 'window is too small for buttons.' - endif - let ds = (spaces - tw)/n - let dl = ds/2 - let dr = ds%2 == 0 ? ds/2 : ds/2 + 1 - let btnline = '' - let idxes = [] - for idx in range(0, n - 1) - let txt = toupper(a:buttons[idx][0]).a:buttons[idx][1:] - let btnline .= repeat(' ', dl).txt.repeat(' ', dr) - if idx != n - 1 - call add(idxes, strdisplaywidth(btnline)) - let btnline .= s:borderchars[1] - endif - endfor - let lines = [repeat(s:borderchars[0], a:width), btnline] - if a:borderbottom - call add(lines, repeat(s:borderchars[0], a:width)) - endif - for idx in idxes - let lines[0] = strcharpart(lines[0], 0, idx).s:borderjoinchars[0].strcharpart(lines[0], idx + 1) - if a:borderbottom - let lines[2] = strcharpart(lines[0], 0, idx).s:borderjoinchars[2].strcharpart(lines[0], idx + 1) - endif - endfor - let bufnr = coc#float#create_buf(a:bufnr, lines) - call setbufvar(bufnr, 'vcols', idxes) - return bufnr -endfunction - -function! s:gen_filter_keys(line) abort - let cols = [] - let used = [] - let next = 1 - for idx in range(0, strchars(a:line) - 1) - let ch = strcharpart(a:line, idx, 1) - let nr = char2nr(ch) - if next - if (nr >= 65 && nr <= 90) || (nr >= 97 && nr <= 122) - let lc = tolower(ch) - if index(used, lc) < 0 && (!s:is_vim || empty(maparg(lc, 'n'))) - let col = len(strcharpart(a:line, 0, idx)) + 1 - call add(used, lc) - call add(cols, col) - let next = 0 - endif - endif - else - if ch == s:borderchars[1] - let next = 1 - endif - endif - endfor - return [cols, used] -endfunction - -function! s:close_win(winid, noautocmd) abort - if a:winid <= 0 - return - endif - " vim not throw for none exists winid - if s:is_vim - call popup_close(a:winid) - else - if nvim_win_is_valid(a:winid) - if a:noautocmd - noa call nvim_win_close(a:winid, 1) - else - call nvim_win_close(a:winid, 1) - endif - endif - endif -endfunction - -function! s:nvim_create_keymap(winid) abort - if exists('*nvim_buf_set_keymap') - let bufnr = winbufnr(a:winid) - call nvim_buf_set_keymap(bufnr, 'n', '', ':call coc#float#nvim_float_click()', { - \ 'silent': v:true, - \ 'nowait': v:true - \ }) - else - let curr = win_getid() - let m = mode() - if m == 'n' || m == 'i' || m == 'ic' - noa call win_gotoid(a:winid) - nnoremap :call coc#float#nvim_float_click() - noa call win_gotoid(curr) - endif - endif -endfunction - -" getwininfo is buggy on neovim, use topline, width & height should for content -function! s:nvim_get_botline(topline, height, width, bufnr) abort - let lines = getbufline(a:bufnr, a:topline, a:topline + a:height - 1) - let botline = a:topline - let count = 0 - for i in range(0, len(lines) - 1) - let w = max([1, strdisplaywidth(lines[i])]) - let lh = float2nr(ceil(str2float(string(w))/a:width)) - let count = count + lh - let botline = a:topline + i - if count >= a:height - break - endif - endfor - return botline -endfunction - -" get popup position for vim8 based on config of neovim float window -function! s:popup_position(config) abort - let relative = get(a:config, 'relative', 'editor') - let border = get(a:config, 'border', [0, 0, 0, 0]) - let delta = get(border, 0, 0) + get(border, 2, 0) - if relative ==# 'cursor' - if a:config['row'] < 0 - let delta = - delta - elseif a:config['row'] == 0 - let delta = - get(border, 0, 0) - else - let delta = 0 - endif - return [s:popup_cursor(a:config['row'] + delta), s:popup_cursor(a:config['col'])] - endif - return [a:config['row'] + 1, a:config['col'] + 1] -endfunction - -function! coc#float#add_related(winid, target) abort - let arr = coc#window#get_var(a:target, 'related', []) - if index(arr, a:winid) >= 0 - return - endif - call add(arr, a:winid) - call coc#window#set_var(a:target, 'related', arr) -endfunction - -function! s:popup_cursor(n) abort - if a:n == 0 - return 'cursor' - endif - if a:n < 0 - return 'cursor'.a:n - endif - return 'cursor+'.a:n -endfunction - -" max firstline of lines, height > 0, width > 0 -function! s:max_firstline(lines, height, width) abort - let max = len(a:lines) - let remain = a:height - for line in reverse(copy(a:lines)) - let w = max([1, strdisplaywidth(line)]) - let dh = float2nr(ceil(str2float(string(w))/a:width)) - if remain - dh < 0 - break - endif - let remain = remain - dh - let max = max - 1 - endfor - return min([len(a:lines), max + 1]) -endfunction - -" Get best lnum by topline -function! s:get_cursorline(topline, lines, scrolloff, width, height) abort - let lastline = len(a:lines) - if a:topline == lastline - return lastline - endif - let bottomline = a:topline - let used = 0 - for lnum in range(a:topline, lastline) - let w = max([1, strdisplaywidth(a:lines[lnum - 1])]) - let dh = float2nr(ceil(str2float(string(w))/a:width)) - if used + dh >= a:height || lnum == lastline - let bottomline = lnum - break - endif - let used += dh - endfor - let cursorline = a:topline + a:scrolloff - if cursorline + a:scrolloff > bottomline - " unable to satisfy scrolloff - let cursorline = (a:topline + bottomline)/2 - endif - return cursorline -endfunction - -" Get firstline for full scroll -function! s:get_topline(topline, lines, forward, height, width) abort - let used = 0 - let lnums = a:forward ? range(a:topline, len(a:lines)) : reverse(range(1, a:topline)) - let topline = a:forward ? len(a:lines) : 1 - for lnum in lnums - let w = max([1, strdisplaywidth(a:lines[lnum - 1])]) - let dh = float2nr(ceil(str2float(string(w))/a:width)) - if used + dh >= a:height - let topline = lnum - break - endif - let used += dh - endfor - if topline == a:topline - if a:forward - let topline = min([len(a:lines), topline + 1]) - else - let topline = max([1, topline - 1]) - endif - endif - return topline -endfunction - -" topline content_height content_width -function! s:get_options(winid) abort - if has('nvim') - let width = nvim_win_get_width(a:winid) - if coc#window#get_var(a:winid, '&foldcolumn', 0) - let width = width - 1 - endif - let info = getwininfo(a:winid)[0] - return { - \ 'topline': info['topline'], - \ 'height': nvim_win_get_height(a:winid), - \ 'width': width - \ } - else - let pos = popup_getpos(a:winid) - return { - \ 'topline': pos['firstline'], - \ 'width': pos['core_width'], - \ 'height': pos['core_height'] - \ } - endif -endfunction - -function! s:win_setview(winid, topline, lnum) abort - if has('nvim') - call coc#compat#execute(a:winid, 'call winrestview({"lnum":'.a:lnum.',"topline":'.a:topline.'})') - call timer_start(10, { -> coc#float#nvim_refresh_scrollbar(a:winid) }) - else - call coc#compat#execute(a:winid, 'exe '.a:lnum) - call popup_setoptions(a:winid, { - \ 'firstline': a:topline, - \ }) - endif -endfunction - -function! s:set_float_defaults(winid, config) abort - if !s:is_vim - let hlgroup = get(a:config, 'highlight', 'CocFloating') - call setwinvar(a:winid, '&winhl', 'Normal:'.hlgroup.',FoldColumn:'.hlgroup.',Search:') - call setwinvar(a:winid, 'border', get(a:config, 'border', [])) - call setwinvar(a:winid, 'scrollinside', get(a:config, 'scrollinside', 0)) - call setwinvar(a:winid, '&foldcolumn', s:nvim_get_foldcolumn(a:config)) - call setwinvar(a:winid, '&signcolumn', 'no') - call setwinvar(a:winid, '&cursorcolumn', 0) - else - call setwinvar(a:winid, '&foldcolumn', 0) - endif - if !s:is_vim || !has("patch-8.2.3100") - call setwinvar(a:winid, '&number', 0) - call setwinvar(a:winid, '&relativenumber', 0) - call setwinvar(a:winid, '&cursorline', 0) - endif - call setwinvar(a:winid, '&foldenable', 0) - call setwinvar(a:winid, '&colorcolumn', '') - call setwinvar(a:winid, '&spell', 0) - call setwinvar(a:winid, '&linebreak', 1) - call setwinvar(a:winid, '&conceallevel', 0) - call setwinvar(a:winid, '&list', 0) - call setwinvar(a:winid, '&wrap', !get(a:config, 'cursorline', 0)) - if s:is_vim || has('nvim-0.5.0') - call setwinvar(a:winid, '&scrolloff', 0) - endif - if has('nvim-0.6.0') || has("patch-8.1.2281") - call setwinvar(a:winid, '&showbreak', 'NONE') - endif - if exists('*win_execute') - call win_execute(a:winid, 'setl fillchars+=eob:\ ') - endif - if get(a:config, 'autohide', 0) - call setwinvar(a:winid, 'autohide', 1) - endif - call setwinvar(a:winid, 'float', 1) -endfunction - -function! s:nvim_add_related(winid, target, kind, winhl, related) abort - if a:winid <= 0 - return - endif - " minimal not work - if !has('nvim-0.4.3') - call setwinvar(a:winid, '&colorcolumn', '') - call setwinvar(a:winid, '&number', 0) - call setwinvar(a:winid, '&relativenumber', 0) - call setwinvar(a:winid, '&foldcolumn', 0) - call setwinvar(a:winid, '&signcolumn', 0) - call setwinvar(a:winid, '&list', 0) - endif - let winhl = empty(a:winhl) ? coc#window#get_var(a:target, '&winhl', '') : a:winhl - call setwinvar(a:winid, '&winhl', winhl) - call setwinvar(a:winid, 'target_winid', a:target) - call setwinvar(a:winid, 'kind', a:kind) - call add(a:related, a:winid) -endfunction - -function! s:nvim_get_foldcolumn(config) abort - let nopad = get(a:config, 'nopad', 0) - if nopad - return 0 - endif - let border = get(a:config, 'border', v:null) - if border is 1 || (type(border) == v:t_list && get(border, 3, 0) == 1) - return 0 - endif - return 1 -endfunction - -function! s:add_highlights(winid, config, create) abort - let codes = get(a:config, 'codes', []) - let highlights = get(a:config, 'highlights', []) - if empty(codes) && empty(highlights) && a:create - return - endif - let bgGroup = get(a:config, 'highlight', 'CocFloating') - for obj in codes - let hlGroup = get(obj, 'hlGroup', v:null) - if !empty(hlGroup) - let obj['hlGroup'] = coc#highlight#compose_hlgroup(hlGroup, bgGroup) - endif - endfor - call coc#highlight#add_highlights(a:winid, codes, highlights) -endfunction - -function! s:empty_border(border) abort - if empty(a:border) || empty(filter(copy(a:border), 'v:val != 0')) - return 1 - endif - return 0 -endfunction - -function! s:get_borderchars(config) abort - let borderchars = get(a:config, 'borderchars', []) - if !empty(borderchars) - return borderchars - endif - return get(a:config, 'rounded', 0) ? s:rounded_borderchars : s:borderchars -endfunction - -function! s:scroll_win(winid, forward, amount) abort - if s:is_vim - call coc#float#scroll_win(a:winid, a:forward, a:amount) - else - call timer_start(0, { -> coc#float#scroll_win(a:winid, a:forward, a:amount)}) - endif -endfunction - -function! s:get_borderhighlight(config) abort - let hlgroup = get(a:config, 'highlight', 'CocFloating') - let borderhighlight = get(a:config, 'borderhighlight', v:null) - if empty(borderhighlight) - return hlgroup - endif - let highlight = type(borderhighlight) == 3 ? borderhighlight[0] : borderhighlight - return coc#highlight#compose_hlgroup(highlight, hlgroup) -endfunction - -function! s:has_shadow(config) abort - let border = get(a:config, 'border', []) - let filtered = filter(copy(border), 'type(v:val) == 3 && get(v:val, 1, "") ==# "FloatShadow"') - return len(filtered) > 0 -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/helper.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/helper.vim deleted file mode 100644 index 8bdc9b86..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/helper.vim +++ /dev/null @@ -1,148 +0,0 @@ -scriptencoding utf-8 -" Helper methods for viml - -function! coc#helper#get_charactor(line, col) abort - return strchars(strpart(a:line, 0, a:col - 1)) -endfunction - -function! coc#helper#last_character(line) abort - return strcharpart(a:line, strchars(a:line) - 1, 1) -endfunction - -function! coc#helper#obj_equal(one, two) abort - for key in keys(a:one) - if a:one[key] != a:two[key] - return 0 - endif - endfor - return 1 -endfunction - -" get change between two lines -function! coc#helper#str_diff(curr, previous, col) abort - let end = strpart(a:curr, a:col - 1) - let start = strpart(a:curr, 0, a:col -1) - let endOffset = 0 - let startOffset = 0 - let currLen = strchars(a:curr) - let prevLen = strchars(a:previous) - if len(end) - let endLen = strchars(end) - for i in range(min([prevLen, endLen])) - if strcharpart(end, endLen - 1 - i, 1) ==# strcharpart(a:previous, prevLen -1 -i, 1) - let endOffset = endOffset + 1 - else - break - endif - endfor - endif - let remain = endOffset == 0 ? a:previous : strcharpart(a:previous, 0, prevLen - endOffset) - if len(remain) - for i in range(min([strchars(remain), strchars(start)])) - if strcharpart(remain, i, 1) ==# strcharpart(start, i ,1) - let startOffset = startOffset + 1 - else - break - endif - endfor - endif - return { - \ 'start': startOffset, - \ 'end': prevLen - endOffset, - \ 'text': strcharpart(a:curr, startOffset, currLen - startOffset - endOffset) - \ } -endfunction - -function! coc#helper#str_apply(content, diff) abort - let totalLen = strchars(a:content) - let endLen = totalLen - a:diff['end'] - return strcharpart(a:content, 0, a:diff['start']).a:diff['text'].strcharpart(a:content, a:diff['end'], endLen) -endfunction - -" insert inserted to line at position, use ... when result is too long -" line should only contains character has strwidth equals 1 -function! coc#helper#str_compose(line, position, inserted) abort - let width = strwidth(a:line) - let text = a:inserted - let res = a:line - let need_truncate = a:position + strwidth(text) + 1 > width - if need_truncate - let remain = width - a:position - 3 - if remain < 2 - " use text for full line, use first & end of a:line, ignore position - let res = strcharpart(a:line, 0, 1) - let w = strwidth(res) - for i in range(strchars(text)) - let c = strcharpart(text, i, 1) - let a = strwidth(c) - if w + a <= width - 1 - let w = w + a - let res = res.c - endif - endfor - let res = res.strcharpart(a:line, w) - else - let res = strcharpart(a:line, 0, a:position) - let w = strwidth(res) - for i in range(strchars(text)) - let c = strcharpart(text, i, 1) - let a = strwidth(c) - if w + a <= width - 3 - let w = w + a - let res = res.c - endif - endfor - let res = res.'..' - let w = w + 2 - let res = res.strcharpart(a:line, w) - endif - else - let first = strcharpart(a:line, 0, a:position) - let res = first.text.strcharpart(a:line, a:position + strwidth(text)) - endif - return res -endfunction - -" Return new dict with keys removed -function! coc#helper#dict_omit(dict, keys) abort - let res = {} - for key in keys(a:dict) - if index(a:keys, key) == -1 - let res[key] = a:dict[key] - endif - endfor - return res -endfunction - -" Return new dict with keys only -function! coc#helper#dict_pick(dict, keys) abort - let res = {} - for key in keys(a:dict) - if index(a:keys, key) != -1 - let res[key] = a:dict[key] - endif - endfor - return res -endfunction - -" support for float values -function! coc#helper#min(first, ...) abort - let val = a:first - for i in range(0, len(a:000) - 1) - if a:000[i] < val - let val = a:000[i] - endif - endfor - return val -endfunction - -" support for float values -function! coc#helper#max(first, ...) abort - let val = a:first - for i in range(0, len(a:000) - 1) - if a:000[i] > val - let val = a:000[i] - endif - endfor - return val -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/highlight.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/highlight.vim deleted file mode 100644 index 6bfda454..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/highlight.vim +++ /dev/null @@ -1,802 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:clear_match_by_window = has('nvim-0.6.0') || has('patch-8.1.1084') -let s:set_extmark = has('nvim') && exists('*nvim_buf_set_extmark') -let s:prop_offset = get(g:, 'coc_text_prop_offset', 1000) -let s:namespace_map = {} -let s:ns_id = 1 -let s:diagnostic_hlgroups = ['CocErrorHighlight', 'CocWarningHighlight', 'CocInfoHighlight', 'CocHintHighlight', 'CocDeprecatedHighlight', 'CocUnusedHighlight'] -" Maximum count to highlight each time. -let g:coc_highlight_maximum_count = get(g:, 'coc_highlight_maximum_count', 100) -let s:term = &termguicolors == 0 && !has('gui_running') - -if has('nvim-0.5.0') && s:clear_match_by_window == 0 - try - call getmatches(0) - let s:clear_match_by_window = 1 - catch /^Vim\%((\a\+)\)\=:E118/ - " ignored - endtry -endif - -" Update buffer region by region. -function! coc#highlight#buffer_update(bufnr, key, highlights, ...) abort - if !bufloaded(a:bufnr) - return - endif - if empty(a:highlights) - call coc#highlight#clear_highlight(a:bufnr, a:key, 0, -1) - return - endif - let priority = get(a:, 1, v:null) - let changedtick = getbufvar(a:bufnr, 'changedtick', 0) - if type(get(a:, 2, v:null)) == 0 && changedtick > a:2 - return - endif - let hls = map(copy(a:highlights), "{'hlGroup':v:val[0],'lnum':v:val[1],'colStart':v:val[2],'colEnd':v:val[3],'combine':get(v:val,4,1),'start_incl':get(v:val,5,0),'end_incl':get(v:val,6,0)}") - if len(hls) <= g:coc_highlight_maximum_count || get(g:, 'coc_node_env', '') ==# 'test' - call coc#highlight#update_highlights(a:bufnr, a:key, hls, 0, -1, priority) - return - endif - let linecount = coc#compat#buf_line_count(a:bufnr) - let groups = s:group_hls(hls, linecount) - call s:update_highlights_timer(a:bufnr, changedtick, a:key, priority, groups, 0) -endfunction - -" Update highlights by check exists highlights. -" 0 based, end exclusive start and end -function! coc#highlight#update_highlights(bufnr, key, highlights, ...) abort - let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr - if !bufloaded(bufnr) - return - endif - let start = get(a:, 1, 0) - let end = get(a:, 2, -1) - if end == 0 - return - endif - let linecount = coc#compat#buf_line_count(a:bufnr) - if end >= linecount - let end = -1 - endif - if empty(a:highlights) - call coc#highlight#clear_highlight(bufnr, a:key, start, end) - return - endif - let priority = get(a:, 3, v:null) - let total = len(a:highlights) - " index list that exists with current highlights - let exists = [] - let ns = coc#highlight#create_namespace(a:key) - if has('nvim-0.5.0') || exists('*prop_list') - let endLnum = end < 0 ? linecount - 1 : end - 1 - let firstLnum = a:highlights[0]['lnum'] - if firstLnum > start - call coc#highlight#clear_highlight(bufnr, a:key, start, firstLnum) - let start = firstLnum - endif - let lastLnum = a:highlights[total - 1]['lnum'] - if lastLnum < endLnum - call coc#highlight#clear_highlight(bufnr, a:key, lastLnum + 1, endLnum + 1) - let endLnum = lastLnum - endif - let current = coc#highlight#get_highlights(bufnr, a:key, start, endLnum) - let currIndex = 0 - if !empty(current) - for [lnum, items] in s:to_group(current) - let indexes = [] - let currIndexes = range(0, len(items) - 1) - let removeIndexes = [] - while currIndex != total - let hi = a:highlights[currIndex] - if hi['lnum'] == lnum - let findIndex = -1 - for idx in currIndexes - let item = items[idx] - if hi['hlGroup'] ==# item[0] && hi['colStart'] == item[2] && hi['colEnd'] == item[3] - call add(indexes, currIndex) - let findIndex = idx - break - elseif item[2] > hi['colStart'] - break - endif - endfor - if findIndex != -1 - call filter(currIndexes, 'v:val != '.findIndex) - endif - elseif hi['lnum'] > lnum - break - endif - let currIndex = currIndex + 1 - endwhile - for idx in currIndexes - if s:is_vim - call prop_remove({'bufnr': bufnr, 'id': items[idx][4]}) - else - call nvim_buf_del_extmark(bufnr, ns, items[idx][4]) - endif - endfor - call extend(exists, indexes) - endfor - endif - else - call coc#highlight#clear_highlight(bufnr, a:key, start, end) - endif - let indexes = range(0, total - 1) - if !empty(exists) - let indexes = filter(indexes, 'index(exists, v:val) == -1') - endif - for idx in indexes - let hi = a:highlights[idx] - let opts = { - \ 'combine': get(hi, 'combine', 0), - \ 'start_incl': get(hi, 'start_incl', 0), - \ 'end_incl': get(hi, 'end_incl', 0), - \ } - if type(priority) == 0 - let opts['priority'] = s:get_priority(a:key, hi['hlGroup'], priority) - endif - call coc#highlight#add_highlight(bufnr, ns, hi['hlGroup'], hi['lnum'], hi['colStart'], hi['colEnd'], opts) - endfor -endfunction - -" Get list of highlights by range or all buffer. -" 0 based line, start_col and end_col -" 0 based start & end line, end inclusive. -function! coc#highlight#get_highlights(bufnr, key, ...) abort - if !bufloaded(a:bufnr) - return v:null - endif - if !has_key(s:namespace_map, a:key) - return [] - endif - let start = get(a:, 1, 0) - let end = get(a:, 2, -1) - if has('nvim-0.5.0') - return v:lua.require('coc.highlight').getHighlights(a:bufnr, a:key, start, end) - endif - let res = [] - let ns = s:namespace_map[a:key] - if exists('*prop_list') - let types = coc#api#get_types(ns) - if empty(types) - return res - endif - " Could filter by end_lnum and types - if has('patch-8.2.3652') - let endLnum = end == -1 ? -1 : end + 1 - for prop in prop_list(start + 1, {'bufnr': a:bufnr, 'types': types, 'end_lnum': endLnum}) - if prop['start'] == 0 || prop['end'] == 0 - " multi line textprop are not supported, simply ignore it - continue - endif - let startCol = prop['col'] - 1 - let endCol = startCol + prop['length'] - call add(res, [s:prop_type_hlgroup(prop['type']), prop['lnum'] - 1, startCol, endCol, prop['id']]) - endfor - else - if end == -1 - let end = coc#compat#buf_line_count(a:bufnr) - else - let end = end + 1 - endif - for line in range(start + 1, end) - for prop in prop_list(line, {'bufnr': a:bufnr}) - if index(types, prop['type']) == -1 || prop['start'] == 0 || prop['end'] == 0 - " multi line textprop are not supported, simply ignore it - continue - endif - let startCol = prop['col'] - 1 - let endCol = startCol + prop['length'] - call add(res, [s:prop_type_hlgroup(prop['type']), line - 1, startCol, endCol, prop['id']]) - endfor - endfor - endif - else - throw 'Get highlights requires neovim 0.5.0 or vim support prop_list' - endif - return res -endfunction - -" Add multiple highlights to buffer. -" type HighlightItem = [hlGroup, lnum, colStart, colEnd, combine?, start_incl?, end_incl?] -function! coc#highlight#set(bufnr, key, highlights, priority) abort - if !bufloaded(a:bufnr) - return - endif - let ns = coc#highlight#create_namespace(a:key) - if has('nvim-0.5.0') - call v:lua.require('coc.highlight').set(a:bufnr, ns, a:highlights, a:priority) - else - if len(a:highlights) > g:coc_highlight_maximum_count - call s:add_highlights_timer(a:bufnr, ns, a:highlights, a:priority) - else - call s:add_highlights(a:bufnr, ns, a:highlights, a:priority) - endif - endif -endfunction - -" Clear highlights by 0 based line numbers. -function! coc#highlight#clear(bufnr, key, lnums) abort - if !bufloaded(a:bufnr) || empty(a:lnums) - return - endif - let ns = coc#highlight#create_namespace(a:key) - for lnum in a:lnums - if has('nvim') - call nvim_buf_clear_namespace(a:bufnr, ns, lnum, lnum + 1) - else - call coc#api#exec('buf_clear_namespace', [a:bufnr, ns, lnum, lnum + 1]) - endif - endfor - " clear highlights in invalid line. - if has('nvim') - let linecount = nvim_buf_line_count(a:bufnr) - call nvim_buf_clear_namespace(a:bufnr, ns, linecount, -1) - endif -endfunction - -function! coc#highlight#del_markers(bufnr, key, ids) abort - if !bufloaded(a:bufnr) - return - endif - let ns = coc#highlight#create_namespace(a:key) - for id in a:ids - if s:is_vim - call prop_remove({'bufnr': a:bufnr, 'id': id}) - else - call nvim_buf_del_extmark(a:bufnr, ns, id) - endif - endfor -endfunction - -" highlight LSP range, -function! coc#highlight#ranges(bufnr, key, hlGroup, ranges, ...) abort - let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr - if !bufloaded(bufnr) || !exists('*getbufline') - return - endif - let opts = get(a:, 1, {}) - let synmaxcol = getbufvar(a:bufnr, '&synmaxcol', 1000) - if synmaxcol == 0 - let synmaxcol = 1000 - endif - let synmaxcol = min([synmaxcol, 1000]) - let srcId = coc#highlight#create_namespace(a:key) - for range in a:ranges - let start = range['start'] - let end = range['end'] - for lnum in range(start['line'] + 1, end['line'] + 1) - let arr = getbufline(bufnr, lnum) - let line = empty(arr) ? '' : arr[0] - if empty(line) - continue - endif - if start['character'] > synmaxcol || end['character'] > synmaxcol - continue - endif - let colStart = lnum == start['line'] + 1 ? coc#string#byte_index(line, start['character']) : 0 - let colEnd = lnum == end['line'] + 1 ? coc#string#byte_index(line, end['character']) : strlen(line) - if colStart == colEnd - continue - endif - call coc#highlight#add_highlight(bufnr, srcId, a:hlGroup, lnum - 1, colStart, colEnd, opts) - endfor - endfor -endfunction - -function! coc#highlight#add_highlight(bufnr, src_id, hl_group, line, col_start, col_end, ...) abort - let opts = get(a:, 1, {}) - let priority = get(opts, 'priority', v:null) - if !s:is_vim - if s:set_extmark && a:src_id != -1 - " get(opts, 'start_incl', 0) ? v:true : v:false, - try - call nvim_buf_set_extmark(a:bufnr, a:src_id, a:line, a:col_start, { - \ 'end_col': a:col_end, - \ 'hl_group': a:hl_group, - \ 'hl_mode': get(opts, 'combine', 1) ? 'combine' : 'replace', - \ 'right_gravity': v:true, - \ 'end_right_gravity': v:false, - \ 'priority': type(priority) == 0 ? min([priority, 4096]) : 4096, - \ }) - catch /^Vim\%((\a\+)\)\=:E5555/ - " the end_col could be invalid, ignore this error - endtry - else - call nvim_buf_add_highlight(a:bufnr, a:src_id, a:hl_group, a:line, a:col_start, a:col_end) - endif - else - call coc#api#exec('buf_add_highlight', [a:bufnr, a:src_id, a:hl_group, a:line, a:col_start, a:col_end, opts]) - endif -endfunction - -function! coc#highlight#clear_highlight(bufnr, key, start_line, end_line) abort - let bufnr = a:bufnr == 0 ? bufnr('%') : a:bufnr - if !bufloaded(bufnr) - return - endif - let src_id = coc#highlight#create_namespace(a:key) - if has('nvim') - call nvim_buf_clear_namespace(a:bufnr, src_id, a:start_line, a:end_line) - else - call coc#api#exec('buf_clear_namespace', [a:bufnr, src_id, a:start_line, a:end_line]) - endif -endfunction - -" highlight buffer in winid with CodeBlock &HighlightItems -" export interface HighlightItem { -" lnum: number // 0 based -" hlGroup: string -" colStart: number // 0 based -" colEnd: number -" } -" export interface CodeBlock { -" filetype?: string -" hlGroup?: string -" startLine: number // 0 based -" endLine: number -" } -function! coc#highlight#add_highlights(winid, codes, highlights) abort - if get(g:, 'coc_node_env', '') ==# 'test' - call setwinvar(a:winid, 'highlights', a:highlights) - endif - " clear highlights - call coc#compat#execute(a:winid, 'syntax clear') - let bufnr = winbufnr(a:winid) - call coc#highlight#clear_highlight(bufnr, -1, 0, -1) - if !empty(a:codes) - call coc#highlight#highlight_lines(a:winid, a:codes) - endif - if !empty(a:highlights) - for item in a:highlights - let hlGroup = item['hlGroup'] - let opts = hlGroup =~# 'Search$' ? {'priority': 999, 'combine': 1} : {} - call coc#highlight#add_highlight(bufnr, -1, hlGroup, item['lnum'], item['colStart'], item['colEnd']) - endfor - endif -endfunction - - -" Add highlights to line groups of winid, support hlGroup and filetype -" config should have startLine, endLine (0 based, end excluded) and filetype or hlGroup -" endLine should > startLine and endLine is excluded -" -" export interface CodeBlock { -" filetype?: string -" hlGroup?: string -" startLine: number // 0 based -" endLine: number -" } -function! coc#highlight#highlight_lines(winid, blocks) abort - let region_id = 1 - let defined = [] - let cmds = [] - for config in a:blocks - let start = config['startLine'] + 1 - let end = config['endLine'] == -1 ? len(getbufline(winbufnr(a:winid), 1, '$')) + 1 : config['endLine'] + 1 - let filetype = get(config, 'filetype', '') - let hlGroup = get(config, 'hlGroup', '') - if !empty(hlGroup) - call add(cmds, 'syntax region '.hlGroup.' start=/\%'.start.'l/ end=/\%'.end.'l/') - else - let filetype = matchstr(filetype, '\v^\w+') - if empty(filetype) || filetype == 'txt' || index(get(g:, 'coc_markdown_disabled_languages', []), filetype) != -1 - continue - endif - if index(defined, filetype) == -1 - call add(cmds, 'syntax include @'.toupper(filetype).' syntax/'.filetype.'.vim') - call add(cmds, 'unlet! b:current_syntax') - call add(defined, filetype) - endif - call add(cmds, 'syntax region CodeBlock'.region_id.' start=/\%'.start.'l/ end=/\%'.end.'l/ contains=@'.toupper(filetype).' keepend') - let region_id = region_id + 1 - endif - endfor - if !empty(cmds) - call coc#compat#execute(a:winid, cmds, 'silent!') - endif -endfunction - -function! coc#highlight#compose(fg, bg) abort - let fgId = synIDtrans(hlID(a:fg)) - let bgId = synIDtrans(hlID(a:bg)) - let isGuiReversed = synIDattr(fgId, 'reverse', 'gui') !=# '1' || synIDattr(bgId, 'reverse', 'gui') !=# '1' - let guifg = isGuiReversed ? synIDattr(fgId, 'fg', 'gui') : synIDattr(fgId, 'bg', 'gui') - let guibg = isGuiReversed ? synIDattr(bgId, 'bg', 'gui') : synIDattr(bgId, 'fg', 'gui') - let isCtermReversed = synIDattr(fgId, 'reverse', 'cterm') !=# '1' || synIDattr(bgId, 'reverse', 'cterm') !=# '1' - let ctermfg = isCtermReversed ? synIDattr(fgId, 'fg', 'cterm') : synIDattr(fgId, 'bg', 'cterm') - let ctermbg = isCtermReversed ? synIDattr(bgId, 'bg', 'cterm') : synIDattr(bgId, 'fg', 'cterm') - let bold = synIDattr(fgId, 'bold') ==# '1' - let italic = synIDattr(fgId, 'italic') ==# '1' - let underline = synIDattr(fgId, 'underline') ==# '1' - let cmd = '' - if !empty(guifg) - let cmd .= ' guifg=' . guifg - endif - if !empty(ctermfg) - let cmd .= ' ctermfg=' . ctermfg - elseif guifg =~# '^#' - let cmd .= ' ctermfg=' . coc#color#rgb2term(strpart(guifg, 1)) - endif - if !empty(guibg) - let cmd .= ' guibg=' . guibg - endif - if !empty(ctermbg) - let cmd .= ' ctermbg=' . ctermbg - elseif guibg =~# '^#' - let cmd .= ' ctermbg=' . coc#color#rgb2term(strpart(guibg, 1)) - endif - if bold - let cmd .= ' cterm=bold gui=bold' - elseif italic - let cmd .= ' cterm=italic gui=italic' - elseif underline - let cmd .= ' cterm=underline gui=underline' - endif - return cmd -endfunction - -" Compose hlGroups with foreground and background colors. -function! coc#highlight#compose_hlgroup(fgGroup, bgGroup) abort - let hlGroup = 'Fg'.a:fgGroup.'Bg'.a:bgGroup - if a:fgGroup ==# a:bgGroup - return a:fgGroup - endif - if hlexists(hlGroup) && match(execute('hi '.hlGroup, 'silent!'), 'cleared') == -1 - return hlGroup - endif - let cmd = coc#highlight#compose(a:fgGroup, a:bgGroup) - if empty(cmd) - return 'Normal' - endif - execute 'silent hi ' . hlGroup . cmd - return hlGroup -endfunction - -" hlGroup id, key => 'fg' | 'bg', kind => 'cterm' | 'gui' -function! coc#highlight#get_color(id, key, kind) abort - if synIDattr(a:id, 'reverse', a:kind) !=# '1' - return synIDattr(a:id, a:key, a:kind) - endif - return synIDattr(a:id, a:key ==# 'bg' ? 'fg' : 'bg', a:kind) -endfunction - -function! coc#highlight#get_hl_command(id, key, cterm, gui) abort - let cterm = coc#highlight#get_color(a:id, a:key, 'cterm') - let gui = coc#highlight#get_color(a:id, a:key, 'gui') - let cmd = ' cterm'.a:key.'=' . (empty(cterm) ? a:cterm : cterm) - let cmd .= ' gui'.a:key.'=' . (empty(gui) ? a:gui : gui) - return cmd -endfunction - -function! coc#highlight#reversed(id) abort - let gui = has('gui_running') || &termguicolors == 1 - if synIDattr(synIDtrans(a:id), 'reverse', gui ? 'gui' : 'cterm') == '1' - return 1 - endif - return 0 -endfunction - -function! coc#highlight#get_contrast(group1, group2) abort - let normal = coc#highlight#get_hex_color(synIDtrans(hlID('Normal')), 'bg', '#000000') - let bg1 = coc#highlight#get_hex_color(synIDtrans(hlID(a:group1)), 'bg', normal) - let bg2 = coc#highlight#get_hex_color(synIDtrans(hlID(a:group2)), 'bg', normal) - return coc#color#hex_contrast(bg1, bg2) -endfunction - -" Darken or lighten background -function! coc#highlight#create_bg_command(group, amount) abort - let id = synIDtrans(hlID(a:group)) - let normal = coc#highlight#get_hex_color(synIDtrans(hlID('Normal')), 'bg', &background ==# 'dark' ? '#282828' : '#fefefe') - let bg = coc#highlight#get_hex_color(id, 'bg', normal) - let hex = a:amount > 0 ? coc#color#darken(bg, a:amount) : coc#color#lighten(bg, -a:amount) - let ctermbg = coc#color#rgb2term(strpart(hex, 1)) - if s:term && !s:check_ctermbg(id, ctermbg) && abs(a:amount) < 20.0 - return coc#highlight#create_bg_command(a:group, a:amount * 2) - endif - return 'ctermbg=' . ctermbg.' guibg=' . hex -endfunction - -function! coc#highlight#get_hex_color(id, kind, fallback) abort - let attr = coc#highlight#get_color(a:id, a:kind, s:term ? 'cterm' : 'gui') - let hex = s:to_hex_color(attr, s:term) - if empty(hex) && !s:term - let attr = coc#highlight#get_color(a:id, a:kind, 'cterm') - let hex = s:to_hex_color(attr, 1) - endif - return empty(hex) ? a:fallback : hex -endfunction - -function! s:check_ctermbg(id, cterm) abort - let attr = coc#highlight#get_color(a:id, 'bg', 'cterm') - if empty(attr) - let attr = coc#highlight#get_color(synIDtrans(hlID('Normal')), 'bg', 'cterm') - endif - if attr ==# a:cterm - return 0 - endif - return 1 -endfunction - -function! s:to_hex_color(color, term) abort - if empty(a:color) - return '' - endif - if a:color =~# '^#\x\+$' - return a:color - endif - if a:term && a:color =~# '^\d\+$' - return coc#color#term2rgb(a:color) - endif - let hex = coc#color#nameToHex(tolower(a:color), a:term) - return empty(hex) ? '' : hex -endfunction - -" add matches for winid, use 0 for current window. -function! coc#highlight#match_ranges(winid, bufnr, ranges, hlGroup, priority) abort - let winid = a:winid == 0 ? win_getid() : a:winid - let bufnr = a:bufnr == 0 ? winbufnr(winid) : a:bufnr - if empty(getwininfo(winid)) || (a:bufnr != 0 && winbufnr(a:winid) != a:bufnr) - " not valid - return [] - endif - if !s:clear_match_by_window - let curr = win_getid() - if has('nvim') - noa call nvim_set_current_win(winid) - else - noa call win_gotoid(winid) - endif - endif - let ids = [] - for range in a:ranges - let pos = [] - let start = range['start'] - let end = range['end'] - for lnum in range(start['line'] + 1, end['line'] + 1) - let arr = getbufline(bufnr, lnum) - let line = empty(arr) ? '' : arr[0] - if empty(line) - continue - endif - let colStart = lnum == start['line'] + 1 ? strlen(strcharpart(line, 0, start['character'])) + 1 : 1 - let colEnd = lnum == end['line'] + 1 ? strlen(strcharpart(line, 0, end['character'])) + 1 : strlen(line) + 1 - if colStart == colEnd - continue - endif - call add(pos, [lnum, colStart, colEnd - colStart]) - endfor - if !empty(pos) - let opts = s:clear_match_by_window ? {'window': a:winid} : {} - let i = 1 - let l = [] - for p in pos - call add(l, p) - if i % 8 == 0 - let id = matchaddpos(a:hlGroup, l, a:priority, -1, opts) - call add(ids, id) - let l = [] - endif - let i += 1 - endfor - if !empty(l) - let id = matchaddpos(a:hlGroup, l, a:priority, -1, opts) - call add(ids, id) - endif - endif - endfor - if !s:clear_match_by_window - if has('nvim') - noa call nvim_set_current_win(curr) - else - noa call win_gotoid(curr) - endif - endif - return ids -endfunction - -" Clear matches by hlGroup regexp. -function! coc#highlight#clear_match_group(winid, match) abort - let winid = a:winid == 0 ? win_getid() : a:winid - if empty(getwininfo(winid)) - " not valid - return - endif - if s:clear_match_by_window - let arr = filter(getmatches(winid), 'v:val["group"] =~# "'.a:match.'"') - for item in arr - call matchdelete(item['id'], winid) - endfor - else - let curr = win_getid() - let switch = exists('*nvim_set_current_win') && curr != winid - if switch - noa call nvim_set_current_win(a:winid) - endif - if win_getid() == winid - let arr = filter(getmatches(), 'v:val["group"] =~# "'.a:match.'"') - for item in arr - call matchdelete(item['id']) - endfor - endif - if switch - noa call nvim_set_current_win(curr) - endif - endif -endfunction - -" Clear matches by match ids, use 0 for current win. -function! coc#highlight#clear_matches(winid, ids) - let winid = a:winid == 0 ? win_getid() : a:winid - if empty(getwininfo(winid)) - " not valid - return - endif - if s:clear_match_by_window - for id in a:ids - try - call matchdelete(id, winid) - catch /^Vim\%((\a\+)\)\=:E803/ - " ignore - endtry - endfor - else - let curr = win_getid() - let switch = exists('*nvim_set_current_win') && curr != winid - if switch - noa call nvim_set_current_win(a:winid) - endif - if win_getid() == winid - for id in a:ids - try - call matchdelete(id) - catch /^Vim\%((\a\+)\)\=:E803/ - " ignore - endtry - endfor - endif - if switch - noa call nvim_set_current_win(curr) - endif - endif -endfunction - -function! coc#highlight#clear_all() abort - for src_id in values(s:namespace_map) - for bufnr in map(getbufinfo({'bufloaded': 1}), 'v:val["bufnr"]') - if has('nvim') - call nvim_buf_clear_namespace(bufnr, src_id, 0, -1) - else - call coc#api#exec('buf_clear_namespace', [bufnr, src_id, 0, -1]) - endif - endfor - endfor -endfunction - -function! coc#highlight#create_namespace(key) abort - if type(a:key) == 0 - return a:key - endif - if has_key(s:namespace_map, a:key) - return s:namespace_map[a:key] - endif - if has('nvim') - let s:namespace_map[a:key] = nvim_create_namespace('coc-'.a:key) - else - let s:namespace_map[a:key] = s:ns_id - let s:ns_id = s:ns_id + 1 - endif - return s:namespace_map[a:key] -endfunction - -function! coc#highlight#get_syntax_name(lnum, col) - return synIDattr(synIDtrans(synID(a:lnum,a:col,1)),"name") -endfunction - -function! s:prop_type_hlgroup(type) abort - return substitute(a:type, '_\d\+$', '', '') -endfunction - -function! s:update_highlights_timer(bufnr, changedtick, key, priority, groups, idx) abort - if getbufvar(a:bufnr, 'changedtick', 0) != a:changedtick - return - endif - let group = get(a:groups, a:idx, v:null) - if empty(group) - return - endif - if empty(group['highlights']) - call coc#highlight#clear_highlight(a:bufnr, a:key, group['start'], group['end']) - else - call coc#highlight#update_highlights(a:bufnr, a:key, group['highlights'], group['start'], group['end'], a:priority) - endif - if a:idx < len(a:groups) - 1 - call timer_start(50, { -> s:update_highlights_timer(a:bufnr, a:changedtick, a:key, a:priority, a:groups, a:idx + 1)}) - endif -endfunction - -function! s:add_highlights_timer(bufnr, ns, highlights, priority) abort - let hls = [] - let next = [] - for i in range(0, len(a:highlights) - 1) - if i < g:coc_highlight_maximum_count - call add(hls, a:highlights[i]) - else - call add(next, a:highlights[i]) - endif - endfor - call s:add_highlights(a:bufnr, a:ns, hls, a:priority) - if len(next) - call timer_start(30, {->s:add_highlights_timer(a:bufnr, a:ns, next, a:priority)}) - endif -endfunction - -function! s:add_highlights(bufnr, ns, highlights, priority) abort - for item in a:highlights - let opts = { - \ 'priority': a:priority, - \ 'combine': get(item, 4, 1) ? 1 : 0, - \ 'start_incl': get(item, 5, 0) ? 1 : 0, - \ 'end_incl': get(item, 6, 0) ? 1 : 0, - \ } - call coc#highlight#add_highlight(a:bufnr, a:ns, item[0], item[1], item[2], item[3], opts) - endfor -endfunction - -function! s:to_group(items) abort - let res = [] - let before = v:null - for item in a:items - if empty(before) || before[0] != item[1] - let before = [item[1], [item]] - call add(res, before) - else - call add(before[1], item) - endif - endfor - return res -endfunction - -function! s:get_priority(key, hlGroup, priority) abort - if a:hlGroup ==# 'CocListSearch' - return 2048 - endif - if a:hlGroup ==# 'CocSearch' - return 999 - endif - if strpart(a:key, 0, 10) !=# 'diagnostic' - return a:priority - endif - return a:priority - index(s:diagnostic_hlgroups, a:hlGroup) -endfunction - -function! s:group_hls(hls, linecount) abort - " start, end, highlights - let groups = [] - if empty(a:hls) - call add(groups, {'start': 0, 'end': a:linecount, 'highlights': []}) - return groups - endif - let start = 0 - let highlights = [] - let lastLnum = -1 - for item in a:hls - let lnum = item['lnum'] - if lnum >= a:linecount - break - endif - if len(highlights) < g:coc_highlight_maximum_count || lnum == lastLnum - call add(highlights, item) - let lastLnum = lnum - else - call add(groups, {'start': start, 'end': lastLnum + 1, 'highlights': highlights}) - let highlights = [] - let start = lastLnum + 1 - call add(highlights, item) - let lastLnum = lnum - endif - endfor - call add(groups, {'start': start, 'end': a:linecount, 'highlights': highlights}) - return groups -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/list.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/list.vim deleted file mode 100644 index 30e0a3a3..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/list.vim +++ /dev/null @@ -1,312 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:prefix = '[List Preview]' -let s:sign_group = 'CocList' -" filetype detect could be slow. -let s:filetype_map = { - \ 'c': 'c', - \ 'py': 'python', - \ 'vim': 'vim', - \ 'ts': 'typescript', - \ 'js': 'javascript', - \ 'html': 'html', - \ 'css': 'css' - \ } - -function! coc#list#getchar() abort - return coc#prompt#getchar() -endfunction - -function! coc#list#setlines(bufnr, lines, append) - if a:append - silent call appendbufline(a:bufnr, '$', a:lines) - else - if exists('*deletebufline') - silent call deletebufline(a:bufnr, len(a:lines) + 1, '$') - else - let n = len(a:lines) + 1 - let saved_reg = @" - silent execute n.',$d' - let @" = saved_reg - endif - silent call setbufline(a:bufnr, 1, a:lines) - endif -endfunction - -function! coc#list#options(...) - let list = ['--top', '--tab', '--normal', '--no-sort', '--input', '--strict', - \ '--regex', '--interactive', '--number-select', '--auto-preview', - \ '--ignore-case', '--no-quit', '--first', '--reverse'] - if get(g:, 'coc_enabled', 0) - let names = coc#rpc#request('listNames', []) - call extend(list, names) - endif - return join(list, "\n") -endfunction - -function! coc#list#names(...) abort - let names = coc#rpc#request('listNames', []) - return join(names, "\n") -endfunction - -function! coc#list#status(name) - if !exists('b:list_status') | return '' | endif - return get(b:list_status, a:name, '') -endfunction - -function! coc#list#create(position, height, name, numberSelect) - if a:position ==# 'tab' - execute 'silent tabe list:///'.a:name - else - execute 'silent keepalt '.(a:position ==# 'top' ? '' : 'botright').a:height.'sp list:///'.a:name - execute 'resize '.a:height - endif - if a:numberSelect - setl norelativenumber - setl number - else - setl nonumber - setl norelativenumber - endif - return [bufnr('%'), win_getid(), tabpagenr()] -endfunction - -" close list windows -function! coc#list#clean_up() abort - for i in range(1, winnr('$')) - let bufname = bufname(winbufnr(i)) - if bufname =~# 'list://' - execute i.'close!' - endif - endfor -endfunction - -function! coc#list#setup(source) - let b:list_status = {} - setl buftype=nofile nobuflisted nofen nowrap - setl norelativenumber bufhidden=wipe nocursorline winfixheight - setl tabstop=1 nolist nocursorcolumn undolevels=-1 - setl signcolumn=auto - if has('nvim-0.5.0') || has('patch-8.1.0864') - setl scrolloff=0 - endif - setl filetype=list - syntax case ignore - let source = a:source[8:] - let name = toupper(source[0]).source[1:] - execute 'syntax match Coc'.name.'Line /\v^.*$/' - if !s:is_vim - " Repeat press and would invoke on vim - nnoremap c - endif -endfunction - -function! coc#list#select(bufnr, line) abort - if !empty(a:bufnr) && bufloaded(a:bufnr) - call sign_unplace(s:sign_group, { 'buffer': a:bufnr }) - if a:line > 0 - call sign_place(6, s:sign_group, 'CocListCurrent', a:bufnr, {'lnum': a:line}) - endif - endif -endfunction - -" Check if previewwindow exists on current tab. -function! coc#list#has_preview() - for i in range(1, winnr('$')) - let preview = getwinvar(i, 'previewwindow', getwinvar(i, '&previewwindow', 0)) - if preview - return i - endif - endfor - return 0 -endfunction - -" Get previewwindow from tabnr, use 0 for current tab -function! coc#list#get_preview(...) abort - let tabnr = get(a:, 1, 0) == 0 ? tabpagenr() : a:1 - let info = gettabinfo(tabnr) - if !empty(info) - for win in info[0]['windows'] - if gettabwinvar(tabnr, win, 'previewwindow', 0) - return win - endif - endfor - endif - return -1 -endfunction - -function! coc#list#scroll_preview(dir) abort - let winnr = coc#list#has_preview() - if !winnr - return - endif - let winid = win_getid(winnr) - if exists('*win_execute') - call win_execute(winid, "normal! ".(a:dir ==# 'up' ? "\" : "\")) - else - let id = win_getid() - noa call win_gotoid(winid) - execute "normal! ".(a:dir ==# 'up' ? "\" : "\") - noa call win_gotoid(id) - endif -endfunction - -function! coc#list#close_preview(tabnr) abort - let winid = coc#list#get_preview(a:tabnr) - if winid != -1 - call coc#window#close(winid) - endif -endfunction - -" Improve preview performance by reused window & buffer. -" lines - list of lines -" config.position - could be 'below' 'top' 'tab'. -" config.winid - id of original window. -" config.name - (optional )name of preview buffer. -" config.splitRight - (optional) split to right when 1. -" config.lnum - (optional) current line number -" config.filetype - (optional) filetype of lines. -" config.hlGroup - (optional) highlight group. -" config.maxHeight - (optional) max height of window, valid for 'below' & 'top' position. -function! coc#list#preview(lines, config) abort - let name = fnamemodify(get(a:config, 'name', ''), ':.') - let lines = a:lines - if empty(lines) - if get(a:config, 'scheme', 'file') != 'file' - let bufnr = s:load_buffer(name) - let lines = bufnr == 0 ? [''] : getbufline(bufnr, 1, '$') - else - " Show empty lines so not close window. - let lines = [''] - endif - endif - let winid = coc#list#get_preview(0) - let bufnr = winid == -1 ? 0 : winbufnr(winid) - " Try reuse buffer & window - let bufnr = coc#float#create_buf(bufnr, lines) - if bufnr == 0 - return - endif - call setbufvar(bufnr, '&synmaxcol', 500) - let filetype = get(a:config, 'filetype', '') - let extname = matchstr(name, '\.\zs[^.]\+$') - if empty(filetype) && !empty(extname) - let filetype = get(s:filetype_map, extname, '') - endif - let range = get(a:config, 'range', v:null) - let targetRange = get(a:config, 'targetRange', v:null) - let hlGroup = get(a:config, 'hlGroup', 'Search') - let lnum = get(a:config, 'lnum', 1) - let position = get(a:config, 'position', 'below') - let original = get(a:config, 'winid', -1) - if winid == -1 - let change = position != 'tab' && get(a:config, 'splitRight', 0) - let curr = win_getid() - if change - if original && win_id2win(original) - noa call win_gotoid(original) - else - noa wincmd t - endif - execute 'noa belowright vert sb '.bufnr - let winid = win_getid() - elseif position == 'tab' || get(a:config, 'splitRight', 0) - execute 'noa belowright vert sb '.bufnr - let winid = win_getid() - else - let mod = position == 'top' ? 'below' : 'above' - let height = s:get_height(lines, a:config) - execute 'noa '.mod.' sb +resize\ '.height.' '.bufnr - let winid = win_getid() - endif - noa call winrestview({"lnum": lnum ,"topline":s:get_topline(a:config, lnum, winid)}) - call s:set_preview_options(winid) - noa call win_gotoid(curr) - else - let height = s:get_height(lines, a:config) - if height > 0 - if s:is_vim - let curr = win_getid() - noa call win_gotoid(winid) - execute 'silent! noa resize '.height - noa call win_gotoid(curr) - else - call nvim_win_set_height(winid, height) - endif - endif - call coc#compat#execute(winid, ['syntax clear', 'noa call winrestview({"lnum":'.lnum.',"topline":'.s:get_topline(a:config, lnum, winid).'})']) - endif - call setwinvar(winid, '&foldenable', 0) - if s:prefix.' '.name != bufname(bufnr) - if s:is_vim - call win_execute(winid, 'noa file '.fnameescape(s:prefix.' '.name), 'silent!') - else - silent! noa call nvim_buf_set_name(bufnr, s:prefix.' '.name) - endif - endif - " highlights - if !empty(filetype) - let start = max([0, lnum - 300]) - let end = min([len(lines), lnum + 300]) - call coc#highlight#highlight_lines(winid, [{'filetype': filetype, 'startLine': start, 'endLine': end}]) - call coc#compat#execute(winid, 'syn sync fromstart') - else - call coc#compat#execute(winid, 'filetype detect') - let ft = getbufvar(bufnr, '&filetype', '') - if !empty(extname) && !empty(ft) - let s:filetype_map[extname] = ft - endif - endif - call sign_unplace('CocCursorLine', {'buffer': bufnr}) - call coc#compat#execute(winid, 'call clearmatches()') - if !s:is_vim - " vim send to buffer on FocusLost, and other cases - call coc#compat#execute(winid, 'nnoremap :call CocActionAsync("listCancel")') - endif - if !empty(targetRange) - for lnum in range(targetRange['start']['line'] + 1, targetRange['end']['line'] + 1) - call sign_place(0, 'CocCursorLine', 'CocListCurrent', bufnr, {'lnum': lnum}) - endfor - else - call sign_unplace('CocCursorLine', { 'buffer': bufnr }) - endif - if !empty(range) - call coc#highlight#match_ranges(winid, bufnr, [range], hlGroup, 10) - endif -endfunction - -function! s:get_height(lines, config) abort - if get(a:config, 'splitRight', 0) || get(a:config, 'position', 'below') == 'tab' - return 0 - endif - let height = min([get(a:config, 'maxHeight', 10), len(a:lines), &lines - &cmdheight - 2]) - return height -endfunction - -function! s:load_buffer(name) abort - if exists('*bufadd') && exists('*bufload') - let bufnr = bufadd(a:name) - call bufload(bufnr) - return bufnr - endif - return 0 -endfunction - -function! s:get_topline(config, lnum, winid) abort - let toplineStyle = get(a:config, 'toplineStyle', 'offset') - if toplineStyle == 'middle' - return max([1, a:lnum - winheight(a:winid)/2]) - endif - - let toplineOffset = get(a:config, 'toplineOffset', 3) - return max([1, a:lnum - toplineOffset]) -endfunction - -function! s:set_preview_options(winid) abort - call setwinvar(a:winid, '&foldmethod', 'manual') - call setwinvar(a:winid, '&signcolumn', 'no') - call setwinvar(a:winid, '&number', 1) - call setwinvar(a:winid, '&cursorline', 0) - call setwinvar(a:winid, '&relativenumber', 0) - call setwinvar(a:winid, 'previewwindow', 1) -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/math.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/math.vim deleted file mode 100644 index 27757b94..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/math.vim +++ /dev/null @@ -1,11 +0,0 @@ - -" support for float values -function! coc#math#min(first, ...) abort - let val = a:first - for i in range(0, len(a:000) - 1) - if a:000[i] < val - let val = a:000[i] - endif - endfor - return val -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/notify.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/notify.vim deleted file mode 100644 index ba6199b7..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/notify.vim +++ /dev/null @@ -1,532 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:utf = &encoding =~# '^utf' -let s:error_icon = get(g:, 'coc_notify_error_icon', s:utf ? '' : 'E') -let s:warning_icon = get(g:, 'coc_notify_warning_icon', s:utf ? '⚠' : 'W') -let s:info_icon = get(g:, 'coc_notify_info_icon', s:utf ? '' : 'I') -let s:interval = get(g:, 'coc_notify_interval', s:is_vim ? 50 : 20) -let s:phl = 'CocNotificationProgress' -let s:progress_char = '─' -let s:duration = 300.0 -let s:winids = [] - -" Valid notify winids on current tab -function! coc#notify#win_list() abort - call filter(s:winids, 'coc#float#valid(v:val)') - return filter(copy(s:winids), '!empty(getwinvar(v:val,"float"))') -endfunction - -function! coc#notify#close_all() abort - for winid in coc#notify#win_list() - call coc#notify#close(winid) - endfor -endfunction - -" Do action for winid or first notify window with actions. -function! coc#notify#do_action(...) abort - let winids = a:0 > 0 ? a:000 : coc#notify#win_list() - for winid in winids - if coc#float#valid(winid) && getwinvar(winid, 'closing', 0) != 1 - let actions = getwinvar(winid, 'actions', []) - if !empty(actions) - let items = map(copy(actions), '(v:key + 1).". ".v:val') - let msg = join(getbufline(winbufnr(winid), 1, '$'), ' ') - call coc#ui#quickpick(msg, items, {err, res -> s:on_action(err, res, winid) }) - break - endif - endif - endfor -endfunction - -" Copy notification contents -function! coc#notify#copy() abort - let lines = [] - for winid in coc#notify#win_list() - let key = getwinvar(winid, 'key', v:null) - if type(key) == v:t_string - call extend(lines, json_decode(key)['lines']) - endif - endfor - if empty(lines) - echohl WarningMsg | echon 'No content to copy' | echohl None - return - endif - call setreg('*', join(lines, "\n")) -endfunction - -" Show source name in window -function! coc#notify#show_sources() abort - if !exists('*getbufline') || !exists('*appendbufline') - throw "getbufline and appendbufline functions required, please upgrade your vim." - endif - let winids = filter(coc#notify#win_list(), 'coc#window#get_var(v:val,"closing") != 1') - for winid in winids - let key = getwinvar(winid, 'key', v:null) - if type(key) == v:t_string - let bufnr = winbufnr(winid) - let obj = json_decode(key) - let sourcename = get(obj, 'source', '') - let lnum = get(obj, 'kind', '') ==# 'progress' ? 1 : 0 - let content = get(getbufline(bufnr, lnum + 1), 0, '') - if empty(sourcename) || content ==# sourcename - continue - endif - call appendbufline(bufnr, lnum, sourcename) - call coc#highlight#add_highlight(bufnr, -1, 'Title', lnum, 0, -1) - call coc#float#scroll_win(winid, 0, 1) - endif - endfor - redra -endfunction - -function! coc#notify#close_by_source(source) abort - let winids = filter(coc#notify#win_list(), 'coc#window#get_var(v:val,"closing") != 1') - for winid in winids - let key = getwinvar(winid, 'key', v:null) - if type(key) == v:t_string - let obj = json_decode(key) - if get(obj, 'source', '') ==# a:source - call coc#notify#close(winid) - endif - endif - endfor -endfunction - -" Cancel auto hide -function! coc#notify#keep() abort - for winid in coc#notify#win_list() - call s:cancel(winid, 'close_timer') - endfor -endfunction - -" borderhighlight - border highlight [string] -" maxWidth - max content width, default 60 [number] -" minWidth - minimal width [number] -" maxHeight - max content height, default 10 [number] -" highlight - default highlight [string] -" winblend - winblend [number] -" timeout - auto close timeout, default 5000 [number] -" title - title text -" marginRight - margin right, default 10 [number] -" focusable - focusable [number] -" source - source name [string] -" kind - kind for create icon [string] -" actions - action names [string[]] -function! coc#notify#create(lines, config) abort - let actions = get(a:config, 'actions', []) - let key = json_encode(extend({'lines': a:lines}, a:config)) - let winid = s:find_win(key) - let kind = get(a:config, 'kind', '') - let row = 0 - if winid != -1 - let row = getwinvar(winid, 'top', 0) - call filter(s:winids, 'v:val != '.winid) - call coc#float#close(winid, 1) - let winid = v:null - endif - let opts = coc#dict#pick(a:config, ['highlight', 'borderhighlight', 'focusable', 'shadow']) - let border = has_key(opts, 'borderhighlight') ? [1, 1, 1, 1] : [] - let icon = s:get_icon(kind, get(a:config, 'highlight', 'CocFloating')) - let margin = get(a:config, 'marginRight', 10) - let maxWidth = min([&columns - margin - 2, get(a:config, 'maxWidth', 80)]) - if maxWidth <= 0 - throw 'No enough spaces for notification' - endif - let lines = map(copy(a:lines), 'tr(v:val, "\t", " ")') - if has_key(a:config, 'title') - if !empty(border) - let opts['title'] = a:config['title'] - else - let lines = [a:config['title']] + lines - endif - endif - let width = max(map(copy(lines), 'strwidth(v:val)')) + (empty(icon) ? 1 : 3) - if width > maxWidth - let lines = coc#string#reflow(lines, maxWidth) - let width = max(map(copy(lines), 'strwidth(v:val)')) + (empty(icon) ? 1 : 3) - endif - let highlights = [] - if !empty(icon) - let ic = icon['text'] - if empty(lines) - call add(lines, ic) - else - let lines[0] = ic.' '.lines[0] - endif - call add(highlights, {'lnum': 0, 'hlGroup': icon['hl'], 'colStart': 0, 'colEnd': strlen(ic)}) - endif - let actionText = join(actions, ' ') - call map(lines, 'v:key == 0 ? v:val : repeat(" ", '.(empty(icon) ? 0 : 2).').v:val') - let minWidth = get(a:config, 'minWidth', kind ==# 'progress' ? 30 : 10) - let width = max(extend(map(lines + [get(opts, 'title', '').' '], 'strwidth(v:val)'), [minWidth, strwidth(actionText) + 1])) - let width = min([maxWidth, width]) - let height = min([get(a:config, 'maxHeight', 3), len(lines)]) - if kind ==# 'progress' - let lines = [repeat(s:progress_char, width)] + lines - let height = height + 1 - endif - if !empty(actions) - let before = max([width - strwidth(actionText), 0]) - let lines = lines + [repeat(' ', before).actionText] - let height = height + 1 - call s:add_action_highlights(before, height - 1, highlights, actions) - endif - if row == 0 - let wintop = coc#notify#get_top() - let row = wintop - height - (empty(border) ? 0 : 2) - 1 - if !s:is_vim && !empty(border) - let row = row + 1 - endif - endif - let col = &columns - margin - width - if s:is_vim && !empty(border) - let col = col - 2 - endif - let winblend = 60 - " Avoid animate for transparent background. - if get(a:config, 'winblend', 30) == 0 && empty(synIDattr(synIDtrans(hlID(get(opts, 'highlight', 'CocFloating'))), 'bg', 'gui')) - let winblend = 0 - endif - call extend(opts, { - \ 'relative': 'editor', - \ 'width': width, - \ 'height': height, - \ 'col': col, - \ 'row': row + 1, - \ 'lines': lines, - \ 'rounded': 1, - \ 'highlights': highlights, - \ 'winblend': winblend, - \ 'border': border, - \ }) - let result = coc#float#create_float_win(0, 0, opts) - if empty(result) - throw 'Unable to create notify window' - endif - let winid = result[0] - let bufnr = result[1] - call setwinvar(winid, 'right', 1) - call setwinvar(winid, 'kind', 'notification') - call setwinvar(winid, 'top', row) - call setwinvar(winid, 'key', key) - call setwinvar(winid, 'actions', actions) - call setwinvar(winid, 'source', get(a:config, 'source', '')) - call setwinvar(winid, 'border', !empty(border)) - call coc#float#nvim_scrollbar(winid) - call add(s:winids, winid) - let from = {'row': opts['row'], 'winblend': opts['winblend']} - let to = {'row': row, 'winblend': get(a:config, 'winblend', 30)} - call timer_start(s:interval, { -> s:animate(winid, from, to, 0)}) - if kind ==# 'progress' - call timer_start(s:interval, { -> s:progress(winid, width, 0, -1)}) - endif - if !s:is_vim - call coc#compat#buf_add_keymap(bufnr, 'n', '', ':call coc#notify#nvim_click('.winid.')', { - \ 'silent': v:true, - \ 'nowait': v:true - \ }) - endif - " Enable auto close - if empty(actions) && kind !=# 'progress' - let timer = timer_start(get(a:config, 'timeout', 10000), { -> coc#notify#close(winid)}) - call setwinvar(winid, 'close_timer', timer) - endif - return [winid, bufnr] -endfunction - -function! coc#notify#nvim_click(winid) abort - if getwinvar(a:winid, 'closing', 0) - return - endif - call s:cancel(a:winid, 'close_timer') - let actions = getwinvar(a:winid, 'actions', []) - if !empty(actions) - let character = strpart(getline('.'), col('.') - 1, 1) - if character =~# '^\k' - let word = expand('') - let idx = index(actions, word) - if idx != -1 - call coc#rpc#notify('FloatBtnClick', [winbufnr(a:winid), idx]) - call coc#notify#close(a:winid) - endif - endif - endif -endfunction - -function! coc#notify#on_close(winid) abort - if index(s:winids, a:winid) >= 0 - call filter(s:winids, 'v:val != '.a:winid) - call coc#notify#reflow() - endif -endfunction - -function! coc#notify#get_top() abort - let mintop = min(map(coc#notify#win_list(), 'coc#notify#get_win_top(v:val)')) - if mintop != 0 - return mintop - endif - return &lines - &cmdheight - (&laststatus == 0 ? 0 : 1 ) -endfunction - -function! coc#notify#get_win_top(winid) abort - let row = getwinvar(a:winid, 'top', 0) - if row == 0 - return row - endif - return row - (s:is_vim ? 0 : getwinvar(a:winid, 'border', 0)) -endfunction - -" Close with timer -function! coc#notify#close(winid) abort - if !coc#float#valid(a:winid) || coc#window#get_var(a:winid, 'closing', 0) == 1 - return - endif - if !coc#window#visible(a:winid) - call coc#float#close(a:winid, 1) - return - endif - let row = coc#window#get_var(a:winid, 'top') - if type(row) != v:t_number - call coc#float#close(a:winid) - return - endif - call coc#window#set_var(a:winid, 'closing', 1) - call s:cancel(a:winid) - let winblend = coc#window#get_var(a:winid, 'winblend', 0) - let curr = s:is_vim ? {'row': row} : {'winblend': winblend} - let dest = s:is_vim ? {'row': row + 1} : {'winblend': winblend == 0 ? 0 : 60} - call s:animate(a:winid, curr, dest, 0, 1) -endfunction - -function! s:add_action_highlights(before, lnum, highlights, actions) abort - let colStart = a:before - for text in a:actions - let w = strwidth(text) - call add(a:highlights, { - \ 'lnum': a:lnum, - \ 'hlGroup': 'CocNotificationButton', - \ 'colStart': colStart, - \ 'colEnd': colStart + w - \ }) - let colStart = colStart + w + 1 - endfor -endfunction - -function! s:on_action(err, idx, winid) abort - if !empty(a:err) - throw a:err - endif - if a:idx > 0 - call coc#rpc#notify('FloatBtnClick', [winbufnr(a:winid), a:idx - 1]) - call coc#notify#close(a:winid) - endif -endfunction - -function! s:cancel(winid, ...) abort - let name = get(a:, 1, 'timer') - let timer = coc#window#get_var(a:winid, name) - if !empty(timer) - call timer_stop(timer) - call coc#window#set_var(a:winid, name, v:null) - endif -endfunction - -function! s:progress(winid, total, curr, index) abort - if !coc#float#valid(a:winid) - return - endif - if coc#window#visible(a:winid) - let total = a:total - let idx = float2nr(a:curr/5.0)%total - if idx != a:index - " update percent - let bufnr = winbufnr(a:winid) - let percent = coc#window#get_var(a:winid, 'percent') - if !empty(percent) - let width = strchars(get(getbufline(bufnr, 1), 0, '')) - let line = repeat(s:progress_char, width - 4).printf('%4s', percent) - let total = width - 4 - call setbufline(bufnr, 1, line) - endif - let message = coc#window#get_var(a:winid, 'message') - if !empty(message) - let linecount = coc#compat#buf_line_count(bufnr) - let hasAction = !empty(coc#window#get_var(a:winid, 'actions', [])) - if getbufvar(bufnr, 'message', 0) == 0 - call appendbufline(bufnr, linecount - hasAction, message) - call setbufvar(bufnr, 'message', 1) - call coc#float#change_height(a:winid, 1) - let tabnr = coc#window#tabnr(a:winid) - call coc#notify#reflow(tabnr) - else - call setbufline(bufnr, linecount - hasAction, message) - endif - endif - let bytes = strlen(s:progress_char) - call coc#highlight#clear_highlight(bufnr, -1, 0, 1) - let colStart = bytes * idx - if idx + 4 <= total - let colEnd = bytes * (idx + 4) - call coc#highlight#add_highlight(bufnr, -1, s:phl, 0, colStart, colEnd) - else - let colEnd = bytes * total - call coc#highlight#add_highlight(bufnr, -1, s:phl, 0, colStart, colEnd) - call coc#highlight#add_highlight(bufnr, -1, s:phl, 0, 0, bytes * (idx + 4 - total)) - endif - endif - call timer_start(s:interval, { -> s:progress(a:winid, total, a:curr + 1, idx)}) - else - " Not block CursorHold event - call timer_start(&updatetime + 100, { -> s:progress(a:winid, a:total, a:curr, a:index)}) - endif -endfunction - -" Optional row & winblend -function! s:config_win(winid, props) abort - let change_row = has_key(a:props, 'row') - if s:is_vim - if change_row - call popup_move(a:winid, {'line': a:props['row'] + 1}) - endif - else - if change_row - let [row, column] = nvim_win_get_position(a:winid) - call nvim_win_set_config(a:winid, { - \ 'row': a:props['row'], - \ 'col': column, - \ 'relative': 'editor', - \ }) - call s:nvim_move_related(a:winid, a:props['row']) - endif - call coc#float#nvim_set_winblend(a:winid, get(a:props, 'winblend', v:null)) - call coc#float#nvim_refresh_scrollbar(a:winid) - endif -endfunction - -function! s:nvim_move_related(winid, row) abort - let winids = coc#window#get_var(a:winid, 'related') - if empty(winids) - return - endif - for winid in winids - if nvim_win_is_valid(winid) - let [row, column] = nvim_win_get_position(winid) - let delta = coc#window#get_var(winid, 'delta', 0) - call nvim_win_set_config(winid, { - \ 'row': a:row + delta, - \ 'col': column, - \ 'relative': 'editor', - \ }) - endif - endfor -endfunction - -function! s:animate(winid, from, to, prev, ...) abort - if !coc#float#valid(a:winid) - return - endif - let curr = a:prev + s:interval - let percent = coc#math#min(curr / s:duration, 1) - let props = s:get_props(a:from, a:to, percent) - call s:config_win(a:winid, props) - let close = get(a:, 1, 0) - if percent < 1 - call timer_start(s:interval, { -> s:animate(a:winid, a:from, a:to, curr, close)}) - elseif close - call filter(s:winids, 'v:val != '.a:winid) - let tabnr = coc#window#tabnr(a:winid) - if tabnr != -1 - call coc#float#close(a:winid, 1) - call coc#notify#reflow(tabnr) - endif - endif -endfunction - -function! coc#notify#reflow(...) abort - let tabnr = get(a:, 1, tabpagenr()) - let winids = filter(copy(s:winids), 'coc#window#tabnr(v:val) == '.tabnr.' && coc#window#get_var(v:val,"closing") != 1') - if empty(winids) - return - endif - let animate = tabnr == tabpagenr() - let wins = map(copy(winids), {_, val -> { - \ 'winid': val, - \ 'row': coc#window#get_var(val,'top',0), - \ 'top': coc#window#get_var(val,'top',0) - (s:is_vim ? 0 : coc#window#get_var(val, 'border', 0)), - \ 'height': coc#float#get_height(val), - \ }}) - call sort(wins, {a, b -> b['top'] - a['top']}) - let bottom = &lines - &cmdheight - (&laststatus == 0 ? 0 : 1 ) - let moved = 0 - for item in wins - let winid = item['winid'] - let delta = bottom - (item['top'] + item['height'] + 1) - if delta != 0 - call s:cancel(winid) - let dest = item['row'] + delta - call coc#window#set_var(winid, 'top', dest) - if animate - call s:move_win_timer(winid, {'row': item['row']}, {'row': dest}, 0) - else - call s:config_win(winid, {'row': dest}) - endif - let moved = moved + delta - endif - let bottom = item['top'] + delta - endfor -endfunction - -function! s:move_win_timer(winid, from, to, curr) abort - if !coc#float#valid(a:winid) - return - endif - if coc#window#get_var(a:winid, 'closing', 0) == 1 - return - endif - let percent = coc#math#min(a:curr / s:duration, 1) - let next = a:curr + s:interval - if a:curr > 0 - call s:config_win(a:winid, s:get_props(a:from, a:to, percent)) - endif - if percent < 1 - let timer = timer_start(s:interval, { -> s:move_win_timer(a:winid, a:from, a:to, next)}) - call coc#window#set_var(a:winid, 'timer', timer) - endif -endfunction - -function! s:find_win(key) abort - for winid in coc#notify#win_list() - if getwinvar(winid, 'key', '') ==# a:key - return winid - endif - endfor - return -1 -endfunction - -function! s:get_icon(kind, bg) abort - if a:kind ==# 'info' - return {'text': s:info_icon, 'hl': coc#highlight#compose_hlgroup('CocInfoSign', a:bg)} - endif - if a:kind ==# 'warning' - return {'text': s:warning_icon, 'hl': coc#highlight#compose_hlgroup('CocWarningSign', a:bg)} - endif - if a:kind ==# 'error' - return {'text': s:error_icon, 'hl': coc#highlight#compose_hlgroup('CocErrorSign', a:bg)} - endif - return v:null -endfunction - -" percent should be float -function! s:get_props(from, to, percent) abort - let obj = {} - for key in keys(a:from) - let changed = a:to[key] - a:from[key] - if !s:is_vim && key ==# 'row' - " Could be float - let obj[key] = a:from[key] + changed * a:percent - else - let obj[key] = a:from[key] + float2nr(round(changed * a:percent)) - endif - endfor - return obj -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/prompt.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/prompt.vim deleted file mode 100644 index b452f95b..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/prompt.vim +++ /dev/null @@ -1,216 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:activated = 0 -let s:session_names = [] -let s:saved_ve = &t_ve -let s:saved_cursor = &guicursor -let s:gui = has('gui_running') || has('nvim') - -let s:char_map = { - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\":'' , - \ "\":'' , - \ "\":'', - \ "\":'', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\<2-LeftMouse>": '<2-LeftMouse>', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ "\": '', - \ } - -function! coc#prompt#getc() abort - let c = getchar() - return type(c) is 0 ? nr2char(c) : c -endfunction - -function! coc#prompt#getchar() abort - let input = coc#prompt#getc() - if 1 != &iminsert - return input - endif - "a language keymap is activated, so input must be resolved to the mapped values. - let partial_keymap = mapcheck(input, 'l') - while partial_keymap !=# '' - let dict = maparg(input, 'l', 0, 1) - if empty(dict) || get(dict, 'expr', 0) - return input - endif - let full_keymap = get(dict, 'rhs', '') - if full_keymap ==# "" && len(input) >= 3 "HACK: assume there are no keymaps longer than 3. - return input - elseif full_keymap ==# partial_keymap - return full_keymap - endif - let c = coc#prompt#getc() - if c ==# "\" || c ==# "\" - "if the short sequence has a valid mapping, return that. - if !empty(full_keymap) - return full_keymap - endif - return input - endif - let input .= c - let partial_keymap = mapcheck(input, 'l') - endwhile - return input -endfunction - -function! coc#prompt#start_prompt(session) abort - let s:session_names = s:filter(s:session_names, a:session) - call add(s:session_names, a:session) - if s:activated | return | endif - if s:is_vim - call s:start_prompt_vim() - else - call s:start_prompt() - endif -endfunction - -function! s:start_prompt_vim() abort - call timer_start(10, {-> s:start_prompt()}) -endfunction - -function! s:start_prompt() - if s:activated | return | endif - if !get(g:, 'coc_disable_transparent_cursor', 0) - if s:gui - if has('nvim-0.5.0') && !empty(s:saved_cursor) - set guicursor+=a:ver1-CocCursorTransparent/lCursor - endif - elseif s:is_vim - set t_ve= - endif - endif - let s:activated = 1 - try - while s:activated - let ch = coc#prompt#getchar() - if ch ==# "\" || ch ==# "\" || ch ==# "\" - continue - else - let curr = s:current_session() - let mapped = get(s:char_map, ch, ch) - if !empty(curr) - call coc#rpc#notify('InputChar', [curr, mapped, getcharmod()]) - endif - if mapped == '' - let s:session_names = [] - call s:reset() - break - endif - endif - endwhile - catch /^Vim:Interrupt$/ - let s:activated = 0 - call coc#rpc#notify('InputChar', [s:current_session(), '', 0]) - let s:session_names = [] - call s:reset() - return - endtry - let s:activated = 0 -endfunction - -function! coc#prompt#stop_prompt(session) - let s:session_names = s:filter(s:session_names, a:session) - if len(s:session_names) - return - endif - if s:activated - let s:activated = 0 - call s:reset() - call feedkeys("\", 'int') - endif -endfunction - -function! coc#prompt#activated() abort - return s:activated -endfunction - -function! s:reset() abort - if !get(g:, 'coc_disable_transparent_cursor',0) - " neovim has bug with revert empty &guicursor - if s:gui && !empty(s:saved_cursor) - if has('nvim-0.5.0') - set guicursor+=a:ver1-Cursor/lCursor - let &guicursor = s:saved_cursor - endif - elseif s:is_vim - let &t_ve = s:saved_ve - endif - endif - echo "" -endfunction - -function! s:current_session() abort - if empty(s:session_names) - return v:null - endif - return s:session_names[len(s:session_names) - 1] -endfunction - -function! s:filter(list, id) abort - return filter(copy(a:list), 'v:val !=# a:id') -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/pum.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/pum.vim deleted file mode 100644 index 118aad85..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/pum.vim +++ /dev/null @@ -1,587 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:pum_bufnr = 0 -let s:pum_winid = 0 -let s:pum_index = -1 -let s:pum_size = 0 -let s:inserted = 0 -let s:virtual_text = 0 -let s:virtual_text_ns = coc#highlight#create_namespace('pum-virtual') -let s:ignore = s:is_vim || has('nvim-0.5.0') ? "\" : "\\" -let s:hide_pum = has('nvim-0.6.1') || has('patch-8.2.3389') -let s:virtual_text_support = has('nvim-0.5.0') || has('patch-9.0.0067') -" bufnr, &indentkeys -let s:saved_indenetkeys = [] -let s:prop_id = 0 -let s:reversed = 0 -let s:check_hl_group = 0 - -if s:is_vim && s:virtual_text_support - if empty(prop_type_get('CocPumVirtualText')) - call prop_type_add('CocPumVirtualText', {'highlight': 'CocPumVirtualText'}) - endif -endif - -function! coc#pum#visible() abort - if !s:pum_winid - return 0 - endif - return getwinvar(s:pum_winid, 'float', 0) == 1 -endfunction - -function! coc#pum#winid() abort - return s:pum_winid -endfunction - -function! coc#pum#close_detail() abort - let winid = coc#float#get_float_by_kind('pumdetail') - if winid - call coc#float#close(winid, 1) - if s:is_vim - call timer_start(0, { -> execute('redraw')}) - endif - endif -endfunction - -function! coc#pum#close(...) abort - if coc#float#valid(s:pum_winid) - let kind = get(a:, 1, '') - if kind ==# 'cancel' - let input = getwinvar(s:pum_winid, 'input', '') - let s:pum_index = -1 - call s:insert_word(input) - call s:on_pum_change(0) - doautocmd TextChangedI - elseif kind ==# 'confirm' - let words = getwinvar(s:pum_winid, 'words', []) - if s:pum_index >= 0 - let word = get(words, s:pum_index, '') - call s:insert_word(word) - call s:restore_indentkeys() - endif - doautocmd TextChangedI - endif - call s:close_pum() - if !get(a:, 2, 0) - " vim possible have unexpected text inserted without timer. - call timer_start(1, { -> coc#rpc#notify('CompleteStop', [kind])}) - endif - endif -endfunction - -function! coc#pum#select_confirm() abort - if s:pum_index < 0 - let s:pum_index = 0 - call s:on_pum_change(0) - endif - call coc#pum#close('confirm') -endfunction - -function! coc#pum#insert() abort - call timer_start(1, { -> s:insert_current()}) - return s:ignore -endfunction - -" Add one more character from the matched complete item(or first one), -" the word should starts with input, the same as vim's CTRL-L behavior. -function! coc#pum#one_more() abort - call timer_start(1, { -> s:insert_one_more()}) - return '' -endfunction - -function! coc#pum#_close() abort - if coc#float#valid(s:pum_winid) - call s:close_pum() - if s:is_vim - call timer_start(0, { -> execute('redraw')}) - endif - endif -endfunction - -function! s:insert_one_more() abort - if coc#float#valid(s:pum_winid) - let parts = getwinvar(s:pum_winid, 'parts', []) - let input = strpart(getline('.'), strchars(parts[0]), col('.') - 1) - let words = getwinvar(s:pum_winid, 'words', []) - let word = get(words, s:pum_index == -1 ? 0 : s:pum_index, '') - if !empty(word) && strcharpart(word, 0, strchars(input)) ==# input - let ch = strcharpart(word, strchars(input), 1) - if !empty(ch) - call feedkeys(ch, "int") - endif - endif - endif -endfunction - -function! s:insert_current() abort - if coc#float#valid(s:pum_winid) - if s:pum_index >= 0 - let words = getwinvar(s:pum_winid, 'words', []) - let word = get(words, s:pum_index, '') - call s:insert_word(word) - call s:restore_indentkeys() - endif - doautocmd TextChangedI - call s:close_pum() - call coc#rpc#notify('CompleteStop', ['']) - endif -endfunction - -function! s:close_pum() abort - call s:clear_virtual_text() - call coc#float#close(s:pum_winid, 1) - let s:pum_winid = 0 - let s:pum_size = 0 - let winid = coc#float#get_float_by_kind('pumdetail') - if winid - call coc#float#close(winid, 1) - endif - call s:restore_indentkeys() -endfunction - -function! s:restore_indentkeys() abort - if get(s:saved_indenetkeys, 0, 0) == bufnr('%') - call setbufvar(s:saved_indenetkeys[0], '&indentkeys', get(s:saved_indenetkeys, 1, '')) - let s:saved_indenetkeys = [] - endif -endfunction - -function! coc#pum#next(insert) abort - call timer_start(1, { -> s:navigate(1, a:insert)}) - return s:ignore -endfunction - -function! coc#pum#prev(insert) abort - call timer_start(1, { -> s:navigate(0, a:insert)}) - return s:ignore -endfunction - -function! coc#pum#stop() abort - call timer_start(1, { -> coc#pum#close()}) - return s:ignore -endfunction - -function! coc#pum#cancel() abort - call timer_start(1, { -> coc#pum#close('cancel')}) - return s:ignore -endfunction - -function! coc#pum#confirm() abort - call timer_start(1, { -> coc#pum#close('confirm')}) - return s:ignore -endfunction - -function! coc#pum#select(index, insert, confirm) abort - if !coc#float#valid(s:pum_winid) - return '' - endif - if a:index == -1 - call coc#pum#close('cancel') - return '' - endif - if a:index < 0 || a:index >= s:pum_size - throw 'index out of range ' . a:index - endif - call s:select_by_index(a:index, a:insert) - if a:confirm - call coc#pum#close('confirm') - endif - return '' -endfunction - -function! coc#pum#info() abort - let bufnr = winbufnr(s:pum_winid) - let words = getwinvar(s:pum_winid, 'words', []) - let word = s:pum_index < 0 ? '' : get(words, s:pum_index, '') - let pretext = strpart(getline('.'), 0, col('.') - 1) - if s:is_vim - let pos = popup_getpos(s:pum_winid) - let border = has_key(popup_getoptions(s:pum_winid), 'border') - let add = pos['scrollbar'] && border ? 1 : 0 - return { - \ 'word': word, - \ 'index': s:pum_index, - \ 'scrollbar': pos['scrollbar'], - \ 'row': pos['line'] - 1, - \ 'col': pos['col'] - 1, - \ 'width': pos['width'] + add, - \ 'height': pos['height'], - \ 'size': s:pum_size, - \ 'border': border, - \ 'inserted': s:inserted ? v:true : v:false, - \ 'reversed': s:reversed ? v:true : v:false, - \ } - else - let scrollbar = coc#float#get_related(s:pum_winid, 'scrollbar') - let winid = coc#float#get_related(s:pum_winid, 'border', s:pum_winid) - let pos = nvim_win_get_position(winid) - return { - \ 'word': word, - \ 'index': s:pum_index, - \ 'scrollbar': scrollbar && nvim_win_is_valid(scrollbar) ? 1 : 0, - \ 'row': pos[0], - \ 'col': pos[1], - \ 'width': nvim_win_get_width(winid), - \ 'height': nvim_win_get_height(winid), - \ 'size': s:pum_size, - \ 'border': winid != s:pum_winid, - \ 'inserted': s:inserted ? v:true : v:false, - \ 'reversed': s:reversed ? v:true : v:false, - \ } - endif -endfunction - -function! coc#pum#scroll(forward) abort - if coc#pum#visible() - let height = s:get_height(s:pum_winid) - if s:pum_size > height - call timer_start(10, { -> s:scroll_pum(a:forward, height, s:pum_size)}) - endif - endif - return s:ignore -endfunction - -function! s:get_height(winid) abort - if has('nvim') - return nvim_win_get_height(a:winid) - endif - return get(popup_getpos(a:winid), 'core_height', 0) -endfunction - -function! s:scroll_pum(forward, height, size) abort - let topline = s:get_topline(s:pum_winid) - if !a:forward && topline == 1 - if s:pum_index >= 0 - call s:select_line(s:pum_winid, 1) - call s:on_pum_change(1) - endif - return - endif - if a:forward && topline + a:height - 1 >= a:size - if s:pum_index >= 0 - call s:select_line(s:pum_winid, a:size) - call s:on_pum_change(1) - endif - return - endif - call coc#float#scroll_win(s:pum_winid, a:forward, a:height) - if s:pum_index >= 0 - let lnum = s:pum_index + 1 - let topline = s:get_topline(s:pum_winid) - if lnum >= topline && lnum <= topline + a:height - 1 - return - endif - call s:select_line(s:pum_winid, topline) - call s:on_pum_change(1) - endif -endfunction - -function! s:get_topline(winid) abort - if has('nvim') - let info = getwininfo(a:winid)[0] - return info['topline'] - else - let pos = popup_getpos(a:winid) - return pos['firstline'] - endif -endfunction - -function! s:navigate(next, insert) abort - if !coc#float#valid(s:pum_winid) - return - endif - call s:save_indentkeys() - let index = s:get_index(a:next) - call s:select_by_index(index, a:insert) -endfunction - -function! s:select_by_index(index, insert) abort - let lnum = a:index == -1 ? 0 : s:index_to_lnum(a:index) - call s:set_cursor(s:pum_winid, lnum) - if !s:is_vim - call coc#float#nvim_scrollbar(s:pum_winid) - endif - if a:insert - let s:inserted = 1 - if a:index < 0 - let input = getwinvar(s:pum_winid, 'input', '') - call s:insert_word(input) - call coc#pum#close_detail() - else - let words = getwinvar(s:pum_winid, 'words', []) - let word = get(words, a:index, '') - call s:insert_word(word) - endif - doautocmd TextChangedP - endif - call s:on_pum_change(1) -endfunction - -function! s:get_index(next) abort - if a:next - let index = s:pum_index + 1 == s:pum_size ? -1 : s:pum_index + 1 - else - let index = s:pum_index == -1 ? s:pum_size - 1 : s:pum_index - 1 - endif - return index -endfunction - -function! s:insert_word(word) abort - let parts = getwinvar(s:pum_winid, 'parts', []) - if !empty(parts) && mode() ==# 'i' - let curr = getline('.') - let saved_completeopt = &completeopt - if saved_completeopt =~ 'menuone' - noa set completeopt=menu - endif - noa call complete(strlen(parts[0]) + 1, [{ 'empty': v:true, 'word': a:word }]) - " exit complete state - if s:hide_pum - call feedkeys("\\", 'in') - else - let g:coc_disable_space_report = 1 - call feedkeys("\\", 'in') - endif - execute 'noa set completeopt='.saved_completeopt - endif -endfunction - -" create or update pum with lines, CompleteOption and config. -" return winid & dimension -function! coc#pum#create(lines, opt, config) abort - if mode() !=# 'i' || a:opt['line'] != line('.') - return - endif - let len = col('.') - a:opt['col'] - 1 - if len < 0 - return - endif - let input = len == 0 ? '' : strpart(getline('.'), a:opt['col'], len) - if input !=# a:opt['input'] - return - endif - let config = s:get_pum_dimension(a:lines, a:opt['col'], a:config) - if empty(config) - return - endif - let s:reversed = get(a:config, 'reverse', 0) && config['row'] < 0 - let s:virtual_text = s:virtual_text_support && a:opt['virtualText'] - let s:pum_size = len(a:lines) - let s:pum_index = a:opt['index'] - let lnum = s:index_to_lnum(s:pum_index) - call extend(config, { - \ 'lines': s:reversed ? reverse(copy(a:lines)) : a:lines, - \ 'relative': 'cursor', - \ 'nopad': 1, - \ 'cursorline': 1, - \ 'index': lnum - 1, - \ 'focusable': v:false - \ }) - call extend(config, coc#dict#pick(a:config, ['highlight', 'rounded', 'highlights', 'winblend', 'shadow', 'border', 'borderhighlight'])) - if s:reversed - for item in config['highlights'] - let item['lnum'] = s:pum_size - item['lnum'] - 1 - endfor - endif - if empty(get(config, 'winblend', 0)) && exists('&pumblend') - let config['winblend'] = &pumblend - endif - let result = coc#float#create_float_win(s:pum_winid, s:pum_bufnr, config) - if empty(result) - return - endif - let s:inserted = 0 - let s:pum_winid = result[0] - let s:pum_bufnr = result[1] - call setwinvar(s:pum_winid, 'above', config['row'] < 0) - let firstline = s:get_firstline(lnum, s:pum_size, config['height']) - if s:is_vim - call popup_setoptions(s:pum_winid, { 'firstline': firstline }) - else - call coc#compat#execute(s:pum_winid, 'call winrestview({"lnum":'.lnum.',"topline":'.firstline.'})') - endif - call coc#dialog#place_sign(s:pum_bufnr, s:pum_index == -1 ? 0 : lnum) - " content before col and content after cursor - let linetext = getline('.') - let parts = [strpart(linetext, 0, a:opt['col']), strpart(linetext, col('.') - 1)] - call setwinvar(s:pum_winid, 'input', input) - call setwinvar(s:pum_winid, 'parts', parts) - call setwinvar(s:pum_winid, 'words', a:opt['words']) - call setwinvar(s:pum_winid, 'kind', 'pum') - if !s:is_vim - if s:pum_size > config['height'] - redraw - call coc#float#nvim_scrollbar(s:pum_winid) - else - call coc#float#close_related(s:pum_winid, 'scrollbar') - endif - endif - call s:on_pum_change(0) -endfunction - -function! s:save_indentkeys() abort - let bufnr = bufnr('%') - if !empty(&indentexpr) && get(s:saved_indenetkeys, 0, 0) != bufnr - let s:saved_indenetkeys = [bufnr, &indentkeys] - execute 'setl indentkeys=' - endif -endfunction - -function! s:get_firstline(lnum, total, height) abort - if a:lnum <= a:height - return 1 - endif - return min([a:total - a:height + 1, a:lnum - (a:height*2/3)]) -endfunction - -function! s:on_pum_change(move) abort - if coc#float#valid(s:pum_winid) - if s:virtual_text - call s:insert_virtual_text() - endif - let ev = extend(coc#pum#info(), {'move': a:move ? v:true : v:false}) - call coc#rpc#notify('CocAutocmd', ['MenuPopupChanged', ev, win_screenpos(winnr())[0] + winline() - 2]) - endif -endfunction - -function! s:index_to_lnum(index) abort - if s:reversed - if a:index <= 0 - return s:pum_size - endif - return s:pum_size - a:index - endif - return max([1, a:index + 1]) -endfunction - -function! s:get_pum_dimension(lines, col, config) abort - let linecount = len(a:lines) - let [lineIdx, colIdx] = coc#cursor#screen_pos() - let bh = empty(get(a:config, 'border', [])) ? 0 : 2 - let columns = &columns - let pumwidth = max([15, exists('&pumwidth') ? &pumwidth : 0]) - let width = min([columns, max([pumwidth, a:config['width']])]) - let vh = &lines - &cmdheight - 1 - !empty(&tabline) - if vh <= 0 - return v:null - endif - let pumheight = empty(&pumheight) ? vh : &pumheight - let showTop = getwinvar(s:pum_winid, 'above', v:null) - if type(showTop) != v:t_number - if vh - lineIdx - bh - 1 < min([pumheight, linecount]) && vh - lineIdx < min([10, vh/2]) - let showTop = 1 - else - let showTop = 0 - endif - endif - let height = showTop ? min([lineIdx - bh - !empty(&tabline), linecount, pumheight]) : min([vh - lineIdx - bh - 1, linecount, pumheight]) - if height <= 0 - return v:null - endif - let col = - (col('.') - a:col - 1) - 1 - let row = showTop ? - height : 1 - let delta = colIdx + col - if width > pumwidth && delta + width > columns - let width = max([columns - delta, pumwidth]) - endif - if delta < 0 - let col = col - delta - elseif delta + width > columns - let col = max([-colIdx, col - (delta + width - columns)]) - endif - return { - \ 'row': row, - \ 'col': col, - \ 'width': width, - \ 'height': height - \ } -endfunction - -" can't use coc#dialog#set_cursor on vim8, don't know why -function! s:set_cursor(winid, line) abort - if s:is_vim - let pos = popup_getpos(a:winid) - let core_height = pos['core_height'] - let lastline = pos['firstline'] + core_height - 1 - if a:line > lastline - call popup_setoptions(a:winid, { - \ 'firstline': pos['firstline'] + a:line - lastline, - \ }) - elseif a:line < pos['firstline'] - if s:reversed - call popup_setoptions(a:winid, { - \ 'firstline': a:line == 0 ? s:pum_size - core_height + 1 : a:line - core_height + 1, - \ }) - else - call popup_setoptions(a:winid, { - \ 'firstline': max([1, a:line]), - \ }) - endif - endif - endif - call s:select_line(a:winid, a:line) -endfunction - -function! s:select_line(winid, line) abort - let s:pum_index = s:reversed ? (a:line == 0 ? -1 : s:pum_size - a:line) : a:line - 1 - let lnum = s:reversed ? (a:line == 0 ? s:pum_size : a:line) : max([1, a:line]) - if s:is_vim - call coc#compat#execute(a:winid, 'exe '.lnum) - else - call nvim_win_set_cursor(a:winid, [lnum, 0]) - endif - call coc#dialog#place_sign(s:pum_bufnr, a:line == 0 ? 0 : lnum) -endfunction - -function! s:insert_virtual_text() abort - let bufnr = bufnr('%') - if !s:virtual_text || s:pum_index < 0 - call s:clear_virtual_text() - else - " Check if could create - let insert = '' - let line = line('.') - 1 - let words = getwinvar(s:pum_winid, 'words', []) - let word = get(words, s:pum_index, '') - let parts = getwinvar(s:pum_winid, 'parts', []) - let start = strlen(parts[0]) - let input = strpart(getline('.'), start, col('.') - 1 - start) - if strchars(word) > strchars(input) && strcharpart(word, 0, strchars(input)) ==# input - let insert = strcharpart(word, strchars(input)) - endif - if s:is_vim - if s:prop_id != 0 - call prop_remove({'id': s:prop_id}, line + 1, line + 1) - endif - if !empty(insert) - let s:prop_id = prop_add(line + 1, col('.'), { - \ 'text': insert, - \ 'type': 'CocPumVirtualText' - \ }) - endif - else - call nvim_buf_clear_namespace(bufnr, s:virtual_text_ns, line, line + 1) - if !empty(insert) - let opts = { - \ 'hl_mode': 'combine', - \ 'virt_text': [[insert, 'CocPumVirtualText']], - \ 'virt_text_pos': 'overlay', - \ 'virt_text_win_col': virtcol('.') - 1, - \ } - call nvim_buf_set_extmark(bufnr, s:virtual_text_ns, line, col('.') - 1, opts) - endif - endif - endif -endfunction - -function! s:clear_virtual_text() abort - if s:virtual_text_support - if s:is_vim - if s:prop_id != 0 - call prop_remove({'id': s:prop_id}) - endif - else - call nvim_buf_clear_namespace(bufnr('%'), s:virtual_text_ns, 0, -1) - endif - endif -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/rpc.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/rpc.vim deleted file mode 100644 index 505c7420..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/rpc.vim +++ /dev/null @@ -1,131 +0,0 @@ -scriptencoding utf-8 -let s:is_win = has("win32") || has("win64") -let s:client = v:null -let s:name = 'coc' -let s:is_vim = !has('nvim') - -function! coc#rpc#start_server() - if get(g:, 'coc_node_env', '') ==# 'test' - " server already started - let s:client = coc#client#create(s:name, []) - let chan_id = get(g:, 'coc_node_channel_id', 0) - let s:client['running'] = chan_id != 0 - let s:client['chan_id'] = chan_id - return - endif - if empty(s:client) - let cmd = coc#util#job_command() - if empty(cmd) | return | endif - let $COC_VIMCONFIG = coc#util#get_config_home() - let $COC_DATA_HOME = coc#util#get_data_home() - let s:client = coc#client#create(s:name, cmd) - endif - if !coc#client#is_running('coc') - call s:client['start']() - endif -endfunction - -function! coc#rpc#started() abort - return !empty(s:client) -endfunction - -function! coc#rpc#ready() - if empty(s:client) || s:client['running'] == 0 - return 0 - endif - return 1 -endfunction - -function! coc#rpc#set_channel(chan_id) abort - let g:coc_node_channel_id = a:chan_id - if a:chan_id != 0 - let s:client['running'] = 1 - let s:client['chan_id'] = a:chan_id - endif -endfunction - -function! coc#rpc#kill() - let pid = get(g:, 'coc_process_pid', 0) - if !pid | return | endif - if s:is_win - call system('taskkill /PID '.pid) - else - call system('kill -9 '.pid) - endif -endfunction - -function! coc#rpc#get_errors() - return split(execute('messages'), "\n") -endfunction - -function! coc#rpc#stop() - if empty(s:client) - return - endif - try - if s:is_vim - call job_stop(ch_getjob(s:client['channel']), 'term') - else - call jobstop(s:client['chan_id']) - endif - catch /.*/ - " ignore - endtry -endfunction - -function! coc#rpc#restart() - if empty(s:client) - call coc#rpc#start_server() - else - call coc#highlight#clear_all() - call coc#ui#sign_unplace() - call coc#float#close_all() - call coc#rpc#request('detach', []) - let g:coc_service_initialized = 0 - sleep 100m - let s:client['command'] = coc#util#job_command() - call coc#client#restart(s:name) - echohl MoreMsg | echom 'starting coc.nvim service' | echohl None - endif -endfunction - -function! coc#rpc#request(method, args) abort - if !coc#rpc#ready() - return '' - endif - return s:client['request'](a:method, a:args) -endfunction - -function! coc#rpc#notify(method, args) abort - if !coc#rpc#ready() - return '' - endif - call s:client['notify'](a:method, a:args) - return '' -endfunction - -function! coc#rpc#request_async(method, args, cb) abort - if !coc#rpc#ready() - return cb('coc.nvim service not started.') - endif - call s:client['request_async'](a:method, a:args, a:cb) -endfunction - -" receive async response -function! coc#rpc#async_response(id, resp, isErr) abort - if empty(s:client) - return - endif - call coc#client#on_response(s:name, a:id, a:resp, a:isErr) -endfunction - -" send async response to server -function! coc#rpc#async_request(id, method, args) - let l:Cb = {err, ... -> coc#rpc#notify('nvim_async_response_event', [a:id, err, get(a:000, 0, v:null)])} - let args = a:args + [l:Cb] - try - call call(a:method, args) - catch /.*/ - call coc#rpc#notify('nvim_async_response_event', [a:id, v:exception, v:null]) - endtry -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/snippet.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/snippet.vim deleted file mode 100644 index a468a730..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/snippet.vim +++ /dev/null @@ -1,159 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:map_next = 1 -let s:map_prev = 1 -let s:cmd_mapping = has('nvim') || has('patch-8.2.1978') - -function! coc#snippet#_select_mappings() - if !get(g:, 'coc_selectmode_mapping', 1) - return - endif - - redir => mappings - silent! smap - redir END - - for map in map(filter(split(mappings, '\n'), - \ "v:val !~# '^s' && v:val !~# '^\\a*\\s*<\\S\\+>'"), - \ "matchstr(v:val, '^\\a*\\s*\\zs\\S\\+')") - silent! execute 'sunmap' map - silent! execute 'sunmap ' map - endfor - - " same behaviour of ultisnips - snoremap c - snoremap c - snoremap c - snoremap "_c -endfunction - -function! coc#snippet#cursor(lnum, col) abort - let m = mode() - call cursor(a:lnum, a:col) - if m !=# 'i' - call feedkeys("\i", 'in') - endif -endfunction - -function! coc#snippet#show_choices(lnum, col, len, values) abort - call coc#snippet#cursor(a:lnum, a:col + a:len) - let changedtick = b:changedtick - call timer_start(20, { -> coc#_do_complete(a:col - 1, a:values, 0, changedtick)}) - redraw -endfunction - -function! coc#snippet#enable(...) - if get(b:, 'coc_snippet_active', 0) == 1 - return - endif - let complete = get(a:, 1, 0) - let b:coc_snippet_active = 1 - call coc#snippet#_select_mappings() - let nextkey = get(g:, 'coc_snippet_next', '') - let prevkey = get(g:, 'coc_snippet_prev', '') - if maparg(nextkey, 'i') =~# 'snippet' - let s:map_next = 0 - endif - if maparg(prevkey, 'i') =~# 'snippet' - let s:map_prev = 0 - endif - if !empty(nextkey) - if s:map_next - execute 'inoremap '.nextkey." =coc#snippet#jump(1, ".complete.")" - endif - execute 'snoremap '.nextkey." :call coc#snippet#jump(1, ".complete.")" - endif - if !empty(prevkey) - if s:map_prev - execute 'inoremap '.prevkey." =coc#snippet#jump(0, ".complete.")" - endif - execute 'snoremap '.prevkey." :call coc#snippet#jump(0, ".complete.")" - endif -endfunction - -function! coc#snippet#prev() abort - call coc#rpc#request('snippetPrev', []) - return '' -endfunction - -function! coc#snippet#next() abort - call coc#rpc#request('snippetNext', []) - return '' -endfunction - -function! coc#snippet#jump(direction, complete) abort - if a:direction == 1 && a:complete && pumvisible() - let pre = exists('*complete_info') && complete_info()['selected'] == -1 ? "\" : '' - call feedkeys(pre."\", 'in') - return '' - endif - call coc#rpc#request(a:direction == 1 ? 'snippetNext' : 'snippetPrev', []) - return '' -endfunction - -function! coc#snippet#disable() - if get(b:, 'coc_snippet_active', 0) == 0 - return - endif - let b:coc_snippet_active = 0 - let nextkey = get(g:, 'coc_snippet_next', '') - let prevkey = get(g:, 'coc_snippet_prev', '') - if s:map_next - silent! execute 'iunmap '.nextkey - endif - if s:map_prev - silent! execute 'iunmap '.prevkey - endif - silent! execute 'sunmap '.prevkey - silent! execute 'sunmap '.nextkey -endfunction - -function! coc#snippet#select(start, end, text) abort - if coc#pum#visible() - call coc#pum#close() - endif - if mode() == 's' - call feedkeys("\", 'in') - endif - if &selection ==# 'exclusive' - let cursor = coc#snippet#to_cursor(a:start) - call cursor([cursor[0], cursor[1]]) - let cmd = '' - let cmd .= mode()[0] ==# 'i' ? "\".(col('.') == 1 ? '' : 'l') : '' - let cmd .= printf('v%s', strchars(a:text) . 'l') - let cmd .= "\" - else - let cursor = coc#snippet#to_cursor(a:end) - call cursor([cursor[0], cursor[1] - 1]) - let len = strchars(a:text) - 1 - let cmd = '' - let cmd .= mode()[0] ==# 'i' ? "\l" : '' - let cmd .= printf('v%s', len > 0 ? len . 'h' : '') - let cmd .= "o\" - endif - call feedkeys(cmd, 'n') -endfunction - -function! coc#snippet#move(position) abort - let m = mode() - if m == 's' - call feedkeys("\", 'in') - elseif coc#pum#visible() - call coc#pum#close() - endif - let pos = coc#snippet#to_cursor(a:position) - call cursor(pos) - if pos[1] > strlen(getline(pos[0])) - startinsert! - else - startinsert - endif -endfunction - -function! coc#snippet#to_cursor(position) abort - let line = getline(a:position.line + 1) - if line is v:null - return [a:position.line + 1, a:position.character + 1] - endif - return [a:position.line + 1, coc#string#byte_index(line, a:position.character) + 1] -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/string.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/string.vim deleted file mode 100644 index 24bae369..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/string.vim +++ /dev/null @@ -1,195 +0,0 @@ -scriptencoding utf-8 - -function! coc#string#last_character(line) abort - return strcharpart(a:line, strchars(a:line) - 1, 1) -endfunction - -" Get utf16 code unit index from col (0 based) -function! coc#string#character_index(line, byteIdx) abort - if a:byteIdx <= 0 - return 0 - endif - let i = 0 - let len = 0 - for char in split(a:line, '\zs') - let i += char2nr(char) > 65535 ? 2 : 1 - let len += strlen(char) - if len >= a:byteIdx - break - endif - endfor - return i -endfunction - -" Convert utf16 character index to byte index -function! coc#string#byte_index(line, character) abort - if a:character <= 0 - return 0 - endif - " code unit index - let i = 0 - let len = 0 - for char in split(a:line, '\zs') - let i += char2nr(char) > 65535 ? 2 : 1 - let len += strlen(char) - if i >= a:character - break - endif - endfor - return len -endfunction - -function! coc#string#character_length(text) abort - let i = 0 - for char in split(a:text, '\zs') - let i += char2nr(char) > 65535 ? 2 : 1 - endfor - return i -endfunction - -function! coc#string#reflow(lines, width) abort - let lines = [] - let currlen = 0 - let parts = [] - for line in a:lines - for part in split(line, '\s\+') - let w = strwidth(part) - if currlen + w + 1 >= a:width - if len(parts) > 0 - call add(lines, join(parts, ' ')) - endif - if w >= a:width - call add(lines, part) - let currlen = 0 - let parts = [] - else - let currlen = w - let parts = [part] - endif - continue - endif - call add(parts, part) - let currlen = currlen + w + 1 - endfor - endfor - if len(parts) > 0 - call add(lines, join(parts, ' ')) - endif - return empty(lines) ? [''] : lines -endfunction - -" Used when 'wrap' and 'linebreak' is enabled -function! coc#string#content_height(lines, width) abort - let len = 0 - let pattern = empty(&breakat) ? '.\zs' : '['.substitute(&breakat, '\([\[\]]\)', '\\\1', 'g').']\zs' - for line in a:lines - if strwidth(line) <= a:width - let len += 1 - else - let currlen = 0 - for part in split(line, pattern) - let wl = strwidth(part) - if currlen == 0 && wl > 0 - let len += 1 - endif - let delta = currlen + wl - a:width - if delta >= 0 - let len = len + (delta > 0) - let currlen = delta == 0 ? 0 : wl - if wl >= a:width - let currlen = wl%a:width - let len += float2nr(ceil(wl/(a:width + 0.0))) - (currlen == 0) - endif - else - let currlen = currlen + wl - endif - endfor - endif - endfor - return len -endfunction - -" get change between two lines -function! coc#string#diff(curr, previous, col) abort - let end = strpart(a:curr, a:col - 1) - let start = strpart(a:curr, 0, a:col -1) - let endOffset = 0 - let startOffset = 0 - let currLen = strchars(a:curr) - let prevLen = strchars(a:previous) - if len(end) - let endLen = strchars(end) - for i in range(min([prevLen, endLen])) - if strcharpart(end, endLen - 1 - i, 1) ==# strcharpart(a:previous, prevLen -1 -i, 1) - let endOffset = endOffset + 1 - else - break - endif - endfor - endif - let remain = endOffset == 0 ? a:previous : strcharpart(a:previous, 0, prevLen - endOffset) - if len(remain) - for i in range(min([strchars(remain), strchars(start)])) - if strcharpart(remain, i, 1) ==# strcharpart(start, i ,1) - let startOffset = startOffset + 1 - else - break - endif - endfor - endif - return { - \ 'start': startOffset, - \ 'end': prevLen - endOffset, - \ 'text': strcharpart(a:curr, startOffset, currLen - startOffset - endOffset) - \ } -endfunction - -function! coc#string#apply(content, diff) abort - let totalLen = strchars(a:content) - let endLen = totalLen - a:diff['end'] - return strcharpart(a:content, 0, a:diff['start']).a:diff['text'].strcharpart(a:content, a:diff['end'], endLen) -endfunction - -" insert inserted to line at position, use ... when result is too long -" line should only contains character has strwidth equals 1 -function! coc#string#compose(line, position, inserted) abort - let width = strwidth(a:line) - let text = a:inserted - let res = a:line - let need_truncate = a:position + strwidth(text) + 1 > width - if need_truncate - let remain = width - a:position - 3 - if remain < 2 - " use text for full line, use first & end of a:line, ignore position - let res = strcharpart(a:line, 0, 1) - let w = strwidth(res) - for i in range(strchars(text)) - let c = strcharpart(text, i, 1) - let a = strwidth(c) - if w + a <= width - 1 - let w = w + a - let res = res . c - endif - endfor - let res = res.strcharpart(a:line, w) - else - let res = strcharpart(a:line, 0, a:position) - let w = strwidth(res) - for i in range(strchars(text)) - let c = strcharpart(text, i, 1) - let a = strwidth(c) - if w + a <= width - 3 - let w = w + a - let res = res . c - endif - endfor - let res = res.'..' - let w = w + 2 - let res = res . strcharpart(a:line, w) - endif - else - let first = strcharpart(a:line, 0, a:position) - let res = first . text . strcharpart(a:line, a:position + strwidth(text)) - endif - return res -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/task.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/task.vim deleted file mode 100644 index 80ff02fe..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/task.vim +++ /dev/null @@ -1,179 +0,0 @@ -" ============================================================================ -" Description: Manage long running tasks. -" Author: Qiming Zhao -" Licence: Anti 966 licence -" Version: 0.1 -" Last Modified: Dec 12, 2020 -" ============================================================================ -scriptencoding utf-8 - -let s:is_vim = !has('nvim') -let s:running_task = {} -" neovim emit strings that part of lines. -let s:out_remain_text = {} -let s:err_remain_text = {} - -function! coc#task#start(id, opts) - if coc#task#running(a:id) - call coc#task#stop(a:id) - endif - let cmd = [a:opts['cmd']] + get(a:opts, 'args', []) - let cwd = get(a:opts, 'cwd', getcwd()) - let env = get(a:opts, 'env', {}) - " cmd args cwd pty - if s:is_vim - let options = { - \ 'cwd': cwd, - \ 'err_mode': 'nl', - \ 'out_mode': 'nl', - \ 'err_cb': {channel, message -> s:on_stderr(a:id, [message])}, - \ 'out_cb': {channel, message -> s:on_stdout(a:id, [message])}, - \ 'exit_cb': {channel, code -> s:on_exit(a:id, code)}, - \ 'env': env, - \} - if has("patch-8.1.350") - let options['noblock'] = 1 - endif - if get(a:opts, 'pty', 0) - let options['pty'] = 1 - endif - let job = job_start(cmd, options) - let status = job_status(job) - if status !=# 'run' - echohl Error | echom 'Failed to start '.a:id.' task' | echohl None - return v:false - endif - let s:running_task[a:id] = job - else - let options = { - \ 'cwd': cwd, - \ 'on_stderr': {channel, msgs -> s:on_stderr(a:id, msgs)}, - \ 'on_stdout': {channel, msgs -> s:on_stdout(a:id, msgs)}, - \ 'on_exit': {channel, code -> s:on_exit(a:id, code)}, - \ 'detach': get(a:opts, 'detach', 0), - \} - let original = {} - if !empty(env) - if has('nvim-0.5.0') - let options['env'] = env - elseif exists('*setenv') && exists('*getenv') - for key in keys(env) - let original[key] = getenv(key) - call setenv(key, env[key]) - endfor - endif - endif - if get(a:opts, 'pty', 0) - let options['pty'] = 1 - endif - let chan_id = jobstart(cmd, options) - if !empty(original) - for key in keys(original) - call setenv(key, original[key]) - endfor - endif - if chan_id <= 0 - echohl Error | echom 'Failed to start '.a:id.' task' | echohl None - return v:false - endif - let s:running_task[a:id] = chan_id - endif - return v:true -endfunction - -function! coc#task#stop(id) - let job = get(s:running_task, a:id, v:null) - if !job | return | endif - if s:is_vim - call job_stop(job, 'term') - else - call jobstop(job) - endif - sleep 50m - let running = coc#task#running(a:id) - if running - echohl Error | echom 'job '.a:id. ' stop failed.' | echohl None - endif -endfunction - -function! s:on_exit(id, code) abort - if get(g:, 'coc_vim_leaving', 0) | return | endif - if has('nvim') - let s:out_remain_text[a:id] = '' - let s:err_remain_text[a:id] = '' - endif - if has_key(s:running_task, a:id) - call remove(s:running_task, a:id) - endif - call coc#rpc#notify('TaskExit', [a:id, a:code]) -endfunction - -function! s:on_stderr(id, msgs) - if get(g:, 'coc_vim_leaving', 0) | return | endif - if empty(a:msgs) - return - endif - if s:is_vim - call coc#rpc#notify('TaskStderr', [a:id, a:msgs]) - else - let remain = get(s:err_remain_text, a:id, '') - let eof = (a:msgs == ['']) - let msgs = copy(a:msgs) - if len(remain) > 0 - if msgs[0] == '' - let msgs[0] = remain - else - let msgs[0] = remain . msgs[0] - endif - endif - let last = msgs[len(msgs) - 1] - let s:err_remain_text[a:id] = len(last) > 0 ? last : '' - " all lines from 0 to n - 2 - if len(msgs) > 1 - call coc#rpc#notify('TaskStderr', [a:id, msgs[:len(msgs)-2]]) - elseif eof && len(msgs[0]) > 0 - call coc#rpc#notify('TaskStderr', [a:id, msgs]) - endif - endif -endfunction - -function! s:on_stdout(id, msgs) - if empty(a:msgs) - return - endif - if s:is_vim - call coc#rpc#notify('TaskStdout', [a:id, a:msgs]) - else - let remain = get(s:out_remain_text, a:id, '') - let eof = (a:msgs == ['']) - let msgs = copy(a:msgs) - if len(remain) > 0 - if msgs[0] == '' - let msgs[0] = remain - else - let msgs[0] = remain . msgs[0] - endif - endif - let last = msgs[len(msgs) - 1] - let s:out_remain_text[a:id] = len(last) > 0 ? last : '' - " all lines from 0 to n - 2 - if len(msgs) > 1 - call coc#rpc#notify('TaskStdout', [a:id, msgs[:len(msgs)-2]]) - elseif eof && len(msgs[0]) > 0 - call coc#rpc#notify('TaskStdout', [a:id, msgs]) - endif - endif -endfunction - -function! coc#task#running(id) - if !has_key(s:running_task, a:id) == 1 - return v:false - endif - let job = s:running_task[a:id] - if s:is_vim - let status = job_status(job) - return status ==# 'run' - endif - let [code] = jobwait([job], 10) - return code == -1 -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/terminal.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/terminal.vim deleted file mode 100644 index b0dbe6d4..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/terminal.vim +++ /dev/null @@ -1,115 +0,0 @@ -scriptencoding utf-8 -let s:is_vim = !has('nvim') -let s:channel_map = {} -let s:is_win = has('win32') || has('win64') - -" start terminal, return [bufnr, pid] -function! coc#terminal#start(cmd, cwd, env, strict) abort - if s:is_vim && !has('terminal') - throw 'terminal feature not supported by current vim.' - endif - let cwd = empty(a:cwd) ? getcwd() : a:cwd - execute 'belowright '.get(g:, 'coc_terminal_height', 8).'new +setl\ buftype=nofile' - setl winfixheight - setl norelativenumber - setl nonumber - setl bufhidden=hide - if exists('#User#CocTerminalOpen') - exe 'doautocmd User CocTerminalOpen' - endif - let bufnr = bufnr('%') - let env = {} - let original = {} - if !empty(a:env) - " use env option when possible - if s:is_vim - let env = copy(a:env) - elseif exists('*setenv') - for key in keys(a:env) - let original[key] = getenv(key) - call setenv(key, a:env[key]) - endfor - endif - endif - - function! s:OnExit(status) closure - call coc#rpc#notify('CocAutocmd', ['TermExit', bufnr, a:status]) - if a:status == 0 - execute 'silent! bd! '.bufnr - endif - endfunction - - if has('nvim') - let job_id = termopen(a:cmd, { - \ 'cwd': cwd, - \ 'pty': v:true, - \ 'on_exit': {job, status -> s:OnExit(status)}, - \ 'env': env, - \ 'clear_env': a:strict ? v:true : v:false - \ }) - if !empty(original) && exists('*setenv') - for key in keys(original) - call setenv(key, original[key]) - endfor - endif - if job_id == 0 - throw 'create terminal job failed' - endif - wincmd p - let s:channel_map[bufnr] = job_id - return [bufnr, jobpid(job_id)] - else - let cmd = s:is_win ? join(a:cmd, ' ') : a:cmd - let res = term_start(cmd, { - \ 'cwd': cwd, - \ 'term_kill': s:is_win ? 'kill' : 'term', - \ 'term_finish': 'close', - \ 'exit_cb': {job, status -> s:OnExit(status)}, - \ 'curwin': 1, - \ 'env': env, - \}) - if res == 0 - throw 'create terminal job failed' - endif - let job = term_getjob(bufnr) - let s:channel_map[bufnr] = job_getchannel(job) - wincmd p - return [bufnr, job_info(job).process] - endif -endfunction - -function! coc#terminal#send(bufnr, text, add_new_line) abort - let chan = get(s:channel_map, a:bufnr, v:null) - if empty(chan) | return| endif - if has('nvim') - let lines = split(a:text, '\v\r?\n') - if a:add_new_line && !empty(lines[len(lines) - 1]) - if s:is_win - call add(lines, "\r\n") - else - call add(lines, '') - endif - endif - call chansend(chan, lines) - let winid = bufwinid(a:bufnr) - if winid != -1 - call coc#compat#execute(winid, 'noa normal! G') - endif - else - if !a:add_new_line - call ch_sendraw(chan, a:text) - else - call ch_sendraw(chan, a:text.(s:is_win ? "\r\n" : "\n")) - endif - endif -endfunction - -function! coc#terminal#close(bufnr) abort - if has('nvim') - let job_id = get(s:channel_map, a:bufnr, 0) - if !empty(job_id) - silent! call chanclose(job_id) - endif - endif - exe 'silent! bd! '.a:bufnr -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/ui.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/ui.vim deleted file mode 100644 index 60b29c40..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/ui.vim +++ /dev/null @@ -1,473 +0,0 @@ -let s:is_vim = !has('nvim') -let s:is_win = has('win32') || has('win64') -let s:is_mac = has('mac') -let s:sign_api = exists('*sign_getplaced') && exists('*sign_place') -let s:sign_groups = [] -let s:outline_preview_bufnr = 0 - -" Check and -function! coc#ui#check_pum_keymappings(trigger) abort - if a:trigger !=# 'none' - for key in ['', '', '', ''] - let arg = maparg(key, 'i', 0, 1) - if get(arg, 'expr', 0) - let rhs = get(arg, 'rhs', '') - if rhs =~# '\"', 'coc#pum#next(1)', '') - let rhs = substitute(rhs, '\c"\\"', 'coc#pum#prev(1)', '') - let rhs = substitute(rhs, '\c"\\"', 'coc#pum#confirm()', '') - execute 'inoremap '.arg['lhs'].' '.rhs - endif - endif - endfor - endif -endfunction - -function! coc#ui#quickpick(title, items, cb) abort - if exists('*popup_menu') - function! s:QuickpickHandler(id, result) closure - call a:cb(v:null, a:result) - endfunction - function! s:QuickpickFilter(id, key) closure - for i in range(1, len(a:items)) - if a:key == string(i) - call popup_close(a:id, i) - return 1 - endif - endfor - " No shortcut, pass to generic filter - return popup_filter_menu(a:id, a:key) - endfunction - try - call popup_menu(a:items, { - \ 'title': a:title, - \ 'filter': function('s:QuickpickFilter'), - \ 'callback': function('s:QuickpickHandler'), - \ }) - redraw - catch /.*/ - call a:cb(v:exception) - endtry - else - let res = inputlist([a:title] + a:items) - call a:cb(v:null, res) - endif -endfunction - -" cmd, cwd -function! coc#ui#open_terminal(opts) abort - if s:is_vim && !exists('*term_start') - echohl WarningMsg | echon "Your vim doesn't have terminal support!" | echohl None - return - endif - if get(a:opts, 'position', 'bottom') ==# 'bottom' - let p = '5new' - else - let p = 'vnew' - endif - execute 'belowright '.p.' +setl\ buftype=nofile ' - setl buftype=nofile - setl winfixheight - setl norelativenumber - setl nonumber - setl bufhidden=wipe - if exists('#User#CocTerminalOpen') - exe 'doautocmd User CocTerminalOpen' - endif - let cmd = get(a:opts, 'cmd', '') - let autoclose = get(a:opts, 'autoclose', 1) - if empty(cmd) - throw 'command required!' - endif - let cwd = get(a:opts, 'cwd', getcwd()) - let keepfocus = get(a:opts, 'keepfocus', 0) - let bufnr = bufnr('%') - let Callback = get(a:opts, 'Callback', v:null) - - function! s:OnExit(status) closure - let content = join(getbufline(bufnr, 1, '$'), "\n") - if a:status == 0 && autoclose == 1 - execute 'silent! bd! '.bufnr - endif - if !empty(Callback) - call call(Callback, [a:status, bufnr, content]) - endif - endfunction - - if has('nvim') - call termopen(cmd, { - \ 'cwd': cwd, - \ 'on_exit': {job, status -> s:OnExit(status)}, - \}) - else - if s:is_win - let cmd = 'cmd.exe /C "'.cmd.'"' - endif - call term_start(cmd, { - \ 'cwd': cwd, - \ 'exit_cb': {job, status -> s:OnExit(status)}, - \ 'curwin': 1, - \}) - endif - if keepfocus - wincmd p - endif - return bufnr -endfunction - -" run command in terminal -function! coc#ui#run_terminal(opts, cb) - let cmd = get(a:opts, 'cmd', '') - if empty(cmd) - return a:cb('command required for terminal') - endif - let opts = { - \ 'cmd': cmd, - \ 'cwd': get(a:opts, 'cwd', getcwd()), - \ 'keepfocus': get(a:opts, 'keepfocus', 0), - \ 'Callback': {status, bufnr, content -> a:cb(v:null, {'success': status == 0 ? v:true : v:false, 'bufnr': bufnr, 'content': content})} - \} - call coc#ui#open_terminal(opts) -endfunction - -function! coc#ui#echo_hover(msg) - echohl MoreMsg - echo a:msg - echohl None - let g:coc_last_hover_message = a:msg -endfunction - -function! coc#ui#echo_messages(hl, msgs) - if a:hl !~# 'Error' && (mode() !~# '\v^(i|n)$') - return - endif - let msgs = filter(copy(a:msgs), '!empty(v:val)') - if empty(msgs) - return - endif - execute 'echohl '.a:hl - echom a:msgs[0] - redraw - echo join(msgs, "\n") - echohl None -endfunction - -function! coc#ui#preview_info(lines, filetype, ...) abort - pclose - keepalt new +setlocal\ previewwindow|setlocal\ buftype=nofile|setlocal\ noswapfile|setlocal\ wrap [Document] - setl bufhidden=wipe - setl nobuflisted - setl nospell - exe 'setl filetype='.a:filetype - setl conceallevel=0 - setl nofoldenable - for command in a:000 - execute command - endfor - call append(0, a:lines) - exe "normal! z" . len(a:lines) . "\" - exe "normal! gg" - wincmd p -endfunction - -function! coc#ui#open_files(files) - let bufnrs = [] - " added on latest vim8 - if exists('*bufadd') && exists('*bufload') - for file in a:files - let file = fnamemodify(file, ':.') - if bufloaded(file) - call add(bufnrs, bufnr(file)) - else - let bufnr = bufadd(file) - call bufload(file) - call add(bufnrs, bufnr) - call setbufvar(bufnr, '&buflisted', 1) - endif - endfor - else - noa keepalt 1new +setl\ bufhidden=wipe - for file in a:files - let file = fnamemodify(file, ':.') - execute 'noa edit +setl\ bufhidden=hide '.fnameescape(file) - if &filetype ==# '' - filetype detect - endif - call add(bufnrs, bufnr('%')) - endfor - noa close - endif - doautocmd BufEnter - return bufnrs -endfunction - -function! coc#ui#echo_lines(lines) - echo join(a:lines, "\n") -endfunction - -function! coc#ui#echo_signatures(signatures) abort - if pumvisible() | return | endif - echo "" - for i in range(len(a:signatures)) - call s:echo_signature(a:signatures[i]) - if i != len(a:signatures) - 1 - echon "\n" - endif - endfor -endfunction - -function! s:echo_signature(parts) - for part in a:parts - let hl = get(part, 'type', 'Normal') - let text = get(part, 'text', '') - if !empty(text) - execute 'echohl '.hl - execute "echon '".substitute(text, "'", "''", 'g')."'" - echohl None - endif - endfor -endfunction - -function! coc#ui#iterm_open(dir) - return s:osascript( - \ 'if application "iTerm2" is not running', - \ 'error', - \ 'end if') && s:osascript( - \ 'tell application "iTerm2"', - \ 'tell current window', - \ 'create tab with default profile', - \ 'tell current session', - \ 'write text "cd ' . a:dir . '"', - \ 'write text "clear"', - \ 'activate', - \ 'end tell', - \ 'end tell', - \ 'end tell') -endfunction - -function! s:osascript(...) abort - let args = join(map(copy(a:000), '" -e ".shellescape(v:val)'), '') - call s:system('osascript'. args) - return !v:shell_error -endfunction - -function! s:system(cmd) - let output = system(a:cmd) - if v:shell_error && output !=# "" - echohl Error | echom output | echohl None - return - endif - return output -endfunction - -function! coc#ui#set_lines(bufnr, changedtick, original, replacement, start, end, changes, cursor, col) abort - if !bufloaded(a:bufnr) - return - endif - let delta = 0 - if !empty(a:col) - let delta = col('.') - a:col - endif - if getbufvar(a:bufnr, 'changedtick') > a:changedtick && bufnr('%') == a:bufnr - " try apply current line change - let lnum = line('.') - " change for current line - if a:end - a:start == 1 && a:end == lnum && len(a:replacement) == 1 - let idx = a:start - lnum + 1 - let previous = get(a:original, idx, 0) - if type(previous) == 1 - let content = getline('.') - if previous !=# content - let diff = coc#string#diff(content, previous, col('.')) - let changed = get(a:replacement, idx, 0) - if type(changed) == 1 && strcharpart(previous, 0, diff['end']) ==# strcharpart(changed, 0, diff['end']) - let applied = coc#string#apply(changed, diff) - let replacement = copy(a:replacement) - let replacement[idx] = applied - call coc#compat#buf_set_lines(a:bufnr, a:start, a:end, replacement) - return - endif - endif - endif - endif - endif - if exists('*nvim_buf_set_text') && !empty(a:changes) - for item in reverse(copy(a:changes)) - call nvim_buf_set_text(a:bufnr, item[1], item[2], item[3], item[4], item[0]) - endfor - else - call coc#compat#buf_set_lines(a:bufnr, a:start, a:end, a:replacement) - endif - if !empty(a:cursor) - call cursor(a:cursor[0], a:cursor[1] + delta) - endif -endfunction - -function! coc#ui#change_lines(bufnr, list) abort - if !bufloaded(a:bufnr) | return v:null | endif - undojoin - if exists('*setbufline') - for [lnum, line] in a:list - call setbufline(a:bufnr, lnum + 1, line) - endfor - elseif a:bufnr == bufnr('%') - for [lnum, line] in a:list - call setline(lnum + 1, line) - endfor - else - let bufnr = bufnr('%') - exe 'noa buffer '.a:bufnr - for [lnum, line] in a:list - call setline(lnum + 1, line) - endfor - exe 'noa buffer '.bufnr - endif -endfunction - -function! coc#ui#open_url(url) - if has('mac') && executable('open') - call system('open '.a:url) - return - endif - if executable('xdg-open') - call system('xdg-open '.a:url) - return - endif - call system('cmd /c start "" /b '. substitute(a:url, '&', '^&', 'g')) - if v:shell_error - echohl Error | echom 'Failed to open '.a:url | echohl None - return - endif -endfunction - -function! coc#ui#rename_file(oldPath, newPath, write) abort - let bufnr = bufnr(a:oldPath) - if bufnr == -1 - throw 'Unable to get bufnr of '.a:oldPath - endif - if a:oldPath =~? a:newPath && (s:is_mac || s:is_win) - return coc#ui#safe_rename(bufnr, a:oldPath, a:newPath, a:write) - endif - if bufloaded(a:newPath) - execute 'silent bdelete! '.bufnr(a:newPath) - endif - let current = bufnr == bufnr('%') - let bufname = fnamemodify(a:newPath, ":~:.") - let filepath = fnamemodify(bufname(bufnr), '%:p') - let winid = coc#compat#buf_win_id(bufnr) - let curr = -1 - if winid == -1 - let curr = win_getid() - let file = fnamemodify(bufname(bufnr), ':.') - execute 'keepalt tab drop '.fnameescape(bufname(bufnr)) - let winid = win_getid() - endif - call coc#compat#execute(winid, 'keepalt file '.fnameescape(bufname), 'silent') - call coc#compat#execute(winid, 'doautocmd BufEnter') - if a:write - call coc#compat#execute(winid, 'noa write!', 'silent') - call delete(filepath, '') - endif - if curr != -1 - call win_gotoid(curr) - endif - return bufnr -endfunction - -" System is case in sensitive and newPath have different case. -function! coc#ui#safe_rename(bufnr, oldPath, newPath, write) abort - let winid = win_getid() - let lines = getbufline(a:bufnr, 1, '$') - execute 'keepalt tab drop '.fnameescape(fnamemodify(a:oldPath, ':.')) - let view = winsaveview() - execute 'keepalt bwipeout! '.a:bufnr - if a:write - call delete(a:oldPath, '') - endif - execute 'keepalt edit '.fnameescape(fnamemodify(a:newPath, ':~:.')) - let bufnr = bufnr('%') - call coc#compat#buf_set_lines(bufnr, 0, -1, lines) - if a:write - execute 'noa write' - endif - call winrestview(view) - call win_gotoid(winid) - return bufnr -endfunction - -function! coc#ui#sign_unplace() abort - if exists('*sign_unplace') - for group in s:sign_groups - call sign_unplace(group) - endfor - endif -endfunction - -function! coc#ui#update_signs(bufnr, group, signs) abort - if !s:sign_api || !bufloaded(a:bufnr) - return - endif - call sign_unplace(a:group, {'buffer': a:bufnr}) - for def in a:signs - let opts = {'lnum': def['lnum']} - if has_key(def, 'priority') - let opts['priority'] = def['priority'] - endif - call sign_place(0, a:group, def['name'], a:bufnr, opts) - endfor -endfunction - -function! coc#ui#outline_preview(config) abort - let view_id = get(w:, 'cocViewId', '') - if view_id !=# 'OUTLINE' - return - endif - let wininfo = get(getwininfo(win_getid()), 0, v:null) - if empty(wininfo) - return - endif - let border = get(a:config, 'border', v:true) - let th = &lines - &cmdheight - 2 - let range = a:config['range'] - let height = min([range['end']['line'] - range['start']['line'] + 1, th - 4]) - let to_left = &columns - wininfo['wincol'] - wininfo['width'] < wininfo['wincol'] - let start_lnum = range['start']['line'] + 1 - let end_lnum = range['end']['line'] + 1 - start_lnum > &lines ? start_lnum + &lines : range['end']['line'] + 1 - let lines = getbufline(a:config['bufnr'], start_lnum, end_lnum) - let content_width = max(map(copy(lines), 'strdisplaywidth(v:val)')) - let width = min([content_width, a:config['maxWidth'], to_left ? wininfo['wincol'] - 3 : &columns - wininfo['wincol'] - wininfo['width']]) - let filetype = getbufvar(a:config['bufnr'], '&filetype') - let cursor_row = coc#cursor#screen_pos()[0] - let config = { - \ 'relative': 'editor', - \ 'row': cursor_row - 1 + height < th ? cursor_row - (border ? 1 : 0) : th - height - (border ? 1 : -1), - \ 'col': to_left ? wininfo['wincol'] - 4 - width : wininfo['wincol'] + wininfo['width'], - \ 'width': width, - \ 'height': height, - \ 'lines': lines, - \ 'border': border ? [1,1,1,1] : v:null, - \ 'rounded': get(a:config, 'rounded', 1) ? 1 : 0, - \ 'winblend': a:config['winblend'], - \ 'highlight': a:config['highlight'], - \ 'borderhighlight': a:config['borderhighlight'], - \ } - let winid = coc#float#get_float_by_kind('outline-preview') - let result = coc#float#create_float_win(winid, s:outline_preview_bufnr, config) - if empty(result) - return v:null - endif - call setwinvar(result[0], 'kind', 'outline-preview') - let s:outline_preview_bufnr = result[1] - if !empty(filetype) - call coc#compat#execute(result[0], 'setfiletype '.filetype) - endif - return result[1] -endfunction - -function! coc#ui#outline_close_preview() abort - let winid = coc#float#get_float_by_kind('outline-preview') - if winid - call coc#float#close(winid) - endif -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/util.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/util.vim deleted file mode 100644 index 19025766..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/util.vim +++ /dev/null @@ -1,646 +0,0 @@ -scriptencoding utf-8 -let s:root = expand(':h:h:h') -let s:is_win = has('win32') || has('win64') -let s:is_vim = !has('nvim') -let s:vim_api_version = 32 - -function! coc#util#remote_fns(name) - let fns = ['init', 'complete', 'should_complete', 'refresh', 'get_startcol', 'on_complete', 'on_enter'] - let res = [] - for fn in fns - if exists('*coc#source#'.a:name.'#'.fn) - call add(res, fn) - endif - endfor - return res -endfunction - -function! coc#util#merge_winhl(curr, hls) abort - let highlightMap = {} - for parts in map(split(a:curr, ','), 'split(v:val, ":")') - if len(parts) == 2 - let highlightMap[parts[0]] = parts[1] - endif - endfor - for item in a:hls - let highlightMap[item[0]] = item[1] - endfor - return join(map(items(highlightMap), 'v:val[0].":".v:val[1]'), ',') -endfunction - -function! coc#util#do_complete(name, opt, cb) abort - let handler = 'coc#source#'.a:name.'#complete' - let l:Cb = {res -> a:cb(v:null, res)} - let args = [a:opt, l:Cb] - call call(handler, args) -endfunction - -function! coc#util#suggest_variables(bufnr) abort - return { - \ 'disable': getbufvar(a:bufnr, 'coc_suggest_disable', 0), - \ 'disabled_sources': getbufvar(a:bufnr, 'coc_disabled_sources', []), - \ 'blacklist': getbufvar(a:bufnr, 'coc_suggest_blacklist', []), - \ } -endfunction - -function! coc#util#api_version() abort - return s:vim_api_version -endfunction - -function! coc#util#semantic_hlgroups() abort - let res = split(execute('hi'), "\n") - let filtered = filter(res, "v:val =~# '^CocSem'") - return map(filtered, "matchstr(v:val,'\\v^CocSem\\w+')") -endfunction - -" get cursor position -function! coc#util#cursor() - return [line('.') - 1, coc#string#character_length(strpart(getline('.'), 0, col('.') - 1))] -endfunction - -function! coc#util#change_info() abort - return {'lnum': line('.'), 'col': col('.'), 'line': getline('.'), 'changedtick': b:changedtick} -endfunction - -function! coc#util#jumpTo(line, character) abort - echohl WarningMsg | echon 'coc#util#jumpTo is deprecated, use coc#cursor#move_to instead.' | echohl None - call coc#cursor#move_to(a:line, a:character) -endfunction - -function! coc#util#root_patterns() abort - return coc#rpc#request('rootPatterns', [bufnr('%')]) -endfunction - -function! coc#util#get_config(key) abort - return coc#rpc#request('getConfig', [a:key]) -endfunction - -function! coc#util#open_terminal(opts) abort - return coc#ui#open_terminal(a:opts) -endfunction - -function! coc#util#synname() abort - return synIDattr(synID(line('.'), col('.') - 1, 1), 'name') -endfunction - -function! coc#util#setline(lnum, line) - keepjumps call setline(a:lnum, a:line) -endfunction - -function! coc#util#path_replace_patterns() abort - if has('win32unix') && exists('g:coc_cygqwin_path_prefixes') - echohl WarningMsg - echon 'g:coc_cygqwin_path_prefixes is deprecated, use g:coc_uri_prefix_replace_patterns instead' - echohl None - return g:coc_cygqwin_path_prefixes - endif - if exists('g:coc_uri_prefix_replace_patterns') - return g:coc_uri_prefix_replace_patterns - endif - return v:null -endfunction - -function! coc#util#version() - if s:is_vim - return string(v:versionlong) - endif - let c = execute('silent version') - let lines = split(matchstr(c, 'NVIM v\zs[^\n-]*')) - return lines[0] -endfunction - -function! coc#util#check_refresh(bufnr) - if !bufloaded(a:bufnr) - return 0 - endif - if getbufvar(a:bufnr, 'coc_diagnostic_disable', 0) - return 0 - endif - return 1 -endfunction - -function! coc#util#diagnostic_info(bufnr, checkInsert) abort - let checked = coc#util#check_refresh(a:bufnr) - if !checked - return v:null - endif - if a:checkInsert && mode() =~# '^i' - return v:null - endif - let locationlist = '' - let winid = -1 - for info in getwininfo() - if info['bufnr'] == a:bufnr - let winid = info['winid'] - let locationlist = get(getloclist(winid, {'title': 1}), 'title', '') - break - endif - endfor - return { - \ 'bufnr': bufnr('%'), - \ 'winid': winid, - \ 'lnum': winid == -1 ? -1 : coc#window#get_cursor(winid)[0], - \ 'locationlist': locationlist - \ } -endfunction - -function! coc#util#open_file(cmd, file) - execute a:cmd .' '.fnameescape(fnamemodify(a:file, ':~:.')) - return bufnr('%') -endfunction - -function! coc#util#job_command() - if (has_key(g:, 'coc_node_path')) - let node = expand(g:coc_node_path) - else - let node = $COC_NODE_PATH == '' ? 'node' : $COC_NODE_PATH - endif - if !executable(node) - echohl Error | echom '[coc.nvim] "'.node.'" is not executable, checkout https://nodejs.org/en/download/' | echohl None - return - endif - if !filereadable(s:root.'/build/index.js') - if isdirectory(s:root.'/src') - echohl Error | echom '[coc.nvim] build/index.js not found, please install dependencies and compile coc.nvim by: yarn install' | echohl None - else - echohl Error | echon '[coc.nvim] your coc.nvim is broken.' | echohl None - endif - return - endif - return [node] + get(g:, 'coc_node_args', ['--no-warnings']) + [s:root.'/build/index.js'] -endfunction - -function! coc#util#jump(cmd, filepath, ...) abort - if a:cmd != 'pedit' - silent! normal! m' - endif - let path = a:filepath - if (has('win32unix')) - let path = substitute(a:filepath, '\v\\', '/', 'g') - endif - let file = fnamemodify(path, ":~:.") - if a:cmd == 'pedit' - let extra = empty(get(a:, 1, [])) ? '' : '+'.(a:1[0] + 1) - exe 'pedit '.extra.' '.fnameescape(file) - return - elseif a:cmd == 'drop' && exists('*bufadd') - let dstbuf = bufadd(path) - let binfo = getbufinfo(dstbuf) - if len(binfo) == 1 && empty(binfo[0].windows) - exec 'buffer '.dstbuf - let &buflisted = 1 - else - exec 'drop '.fnameescape(file) - endif - elseif a:cmd == 'edit' && bufloaded(file) - exe 'b '.bufnr(file) - else - call s:safer_open(a:cmd, file) - endif - if !empty(get(a:, 1, [])) - let line = getline(a:1[0] + 1) - let col = coc#string#byte_index(line, a:1[1]) + 1 - call cursor(a:1[0] + 1, col) - endif - if &filetype ==# '' - filetype detect - endif - if s:is_vim - redraw - endif -endfunction - -function! s:safer_open(cmd, file) abort - " How to support :pedit and :drop? - let is_supported_cmd = index(["edit", "split", "vsplit", "tabe"], a:cmd) >= 0 - - " Use special handling only for URI. - let looks_like_uri = match(a:file, "^.*://") >= 0 - - if looks_like_uri && is_supported_cmd && has('win32') && exists('*bufadd') - " Workaround a bug for Win32 paths. - " - " reference: - " - https://github.com/vim/vim/issues/541 - " - https://github.com/neoclide/coc-java/issues/82 - " - https://github.com/vim-jp/issues/issues/6 - let buf = bufadd(a:file) - if a:cmd != 'edit' - " Open split, tab, etc. by a:cmd. - exe a:cmd - endif - " Set current buffer to the file - exe 'keepjumps buffer ' . buf - else - exe a:cmd.' '.fnameescape(a:file) - endif -endfunction - -function! coc#util#variables(bufnr) abort - let info = getbufinfo(a:bufnr) - let variables = empty(info) ? {} : copy(info[0]['variables']) - for key in keys(variables) - if key !~# '\v^coc' - unlet variables[key] - endif - endfor - return variables -endfunction - -function! coc#util#with_callback(method, args, cb) - function! s:Cb() closure - try - let res = call(a:method, a:args) - call a:cb(v:null, res) - catch /.*/ - call a:cb(v:exception) - endtry - endfunction - let timeout = s:is_vim ? 10 : 0 - call timer_start(timeout, {-> s:Cb() }) -endfunction - -function! coc#util#timer(method, args) - call timer_start(0, { -> s:Call(a:method, a:args)}) -endfunction - -function! s:Call(method, args) - try - call call(a:method, a:args) - redraw - catch /.*/ - return 0 - endtry -endfunction - -function! coc#util#vim_info() - return { - \ 'apiversion': s:vim_api_version, - \ 'mode': mode(), - \ 'config': get(g:, 'coc_user_config', {}), - \ 'floating': has('nvim') && exists('*nvim_open_win') ? v:true : v:false, - \ 'extensionRoot': coc#util#extension_root(), - \ 'globalExtensions': get(g:, 'coc_global_extensions', []), - \ 'lines': &lines, - \ 'columns': &columns, - \ 'cmdheight': &cmdheight, - \ 'pid': coc#util#getpid(), - \ 'filetypeMap': get(g:, 'coc_filetype_map', {}), - \ 'version': coc#util#version(), - \ 'pumevent': 1, - \ 'isVim': has('nvim') ? v:false : v:true, - \ 'isCygwin': has('win32unix') ? v:true : v:false, - \ 'isMacvim': has('gui_macvim') ? v:true : v:false, - \ 'isiTerm': $TERM_PROGRAM ==# "iTerm.app", - \ 'colorscheme': get(g:, 'colors_name', ''), - \ 'workspaceFolders': get(g:, 'WorkspaceFolders', v:null), - \ 'background': &background, - \ 'runtimepath': join(globpath(&runtimepath, '', 0, 1), ','), - \ 'locationlist': get(g:,'coc_enable_locationlist', 1), - \ 'progpath': v:progpath, - \ 'guicursor': &guicursor, - \ 'pumwidth': exists('&pumwidth') ? &pumwidth : 15, - \ 'tabCount': tabpagenr('$'), - \ 'updateHighlight': has('nvim-0.5.0') || has('textprop') ? v:true : v:false, - \ 'vimCommands': get(g:, 'coc_vim_commands', []), - \ 'sign': exists('*sign_place') && exists('*sign_unplace'), - \ 'ambiguousIsNarrow': &ambiwidth ==# 'single' ? v:true : v:false, - \ 'textprop': has('textprop') ? v:true : v:false, - \ 'virtualText': has('nvim-0.5.0') || has('patch-9.0.0067') ? v:true : v:false, - \ 'dialog': has('nvim-0.4.0') || has('popupwin') ? v:true : v:false, - \ 'semanticHighlights': coc#util#semantic_hlgroups() - \} -endfunction - -function! coc#util#all_state() - return { - \ 'bufnr': bufnr('%'), - \ 'winid': win_getid(), - \ 'bufnrs': map(getbufinfo({'bufloaded': 1}),'v:val["bufnr"]'), - \ 'winids': map(getwininfo(),'v:val["winid"]'), - \ } -endfunction - -function! coc#util#install() abort - let yarncmd = get(g:, 'coc_install_yarn_cmd', executable('yarnpkg') ? 'yarnpkg' : 'yarn') - call coc#ui#open_terminal({ - \ 'cwd': s:root, - \ 'cmd': yarncmd.' install --frozen-lockfile --ignore-engines', - \ 'autoclose': 0, - \ }) -endfunction - -function! coc#util#extension_root() abort - if get(g:, 'coc_node_env', '') ==# 'test' - return s:root.'/src/__tests__/extensions' - endif - if !empty(get(g:, 'coc_extension_root', '')) - echohl Error | echon 'g:coc_extension_root not used any more, use g:coc_data_home instead' | echohl None - endif - return coc#util#get_data_home().'/extensions' -endfunction - -function! coc#util#update_extensions(...) abort - let async = get(a:, 1, 0) - if async - call coc#rpc#notify('updateExtensions', []) - else - call coc#rpc#request('updateExtensions', [v:true]) - endif -endfunction - -function! coc#util#install_extension(args) abort - let names = filter(copy(a:args), 'v:val !~# "^-"') - let isRequest = index(a:args, '-sync') != -1 - if isRequest - call coc#rpc#request('installExtensions', names) - else - call coc#rpc#notify('installExtensions', names) - endif -endfunction - -function! coc#util#do_autocmd(name) abort - if exists('#User#'.a:name) - exe 'doautocmd User '.a:name - endif -endfunction - -function! coc#util#unmap(bufnr, keys) abort - if bufnr('%') == a:bufnr - for key in a:keys - exe 'silent! nunmap '.key - endfor - endif -endfunction - -function! coc#util#refactor_foldlevel(lnum) abort - if a:lnum <= 2 | return 0 | endif - let line = getline(a:lnum) - if line =~# '^\%u3000\s*$' | return 0 | endif - return 1 -endfunction - -function! coc#util#refactor_fold_text(lnum) abort - let range = '' - let info = get(b:line_infos, a:lnum, []) - if !empty(info) - let range = info[0].':'.info[1] - endif - return trim(getline(a:lnum)[3:]).' '.range -endfunction - -" get tabsize & expandtab option -function! coc#util#get_format_opts(bufnr) abort - let bufnr = a:bufnr && bufloaded(a:bufnr) ? a:bufnr : bufnr('%') - let tabsize = getbufvar(bufnr, '&shiftwidth') - if tabsize == 0 - let tabsize = getbufvar(bufnr, '&tabstop') - endif - return { - \ 'tabsize': tabsize, - \ 'expandtab': getbufvar(bufnr, '&expandtab'), - \ 'insertFinalNewline': getbufvar(bufnr, '&eol'), - \ 'trimTrailingWhitespace': getbufvar(bufnr, 'coc_trim_trailing_whitespace', 0), - \ 'trimFinalNewlines': getbufvar(bufnr, 'coc_trim_final_newlines', 0) - \ } -endfunction - -function! coc#util#get_editoroption(winid) abort - if !coc#compat#win_is_valid(a:winid) - return v:null - endif - if has('nvim') && exists('*nvim_win_get_config') - " avoid float window - let config = nvim_win_get_config(a:winid) - if !empty(get(config, 'relative', '')) - return v:null - endif - endif - let info = getwininfo(a:winid)[0] - let bufnr = info['bufnr'] - let buftype = getbufvar(bufnr, '&buftype') - " avoid window for other purpose. - if buftype !=# '' && buftype !=# 'acwrite' - return v:null - endif - let tabSize = getbufvar(bufnr, '&shiftwidth') - if tabSize == 0 - let tabSize = getbufvar(bufnr, '&tabstop') - endif - return { - \ 'bufnr': bufnr, - \ 'winid': a:winid, - \ 'winids': map(getwininfo(), 'v:val["winid"]'), - \ 'tabpagenr': info['tabnr'], - \ 'winnr': winnr(), - \ 'visibleRanges': s:visible_ranges(a:winid), - \ 'tabSize': tabSize, - \ 'insertSpaces': getbufvar(bufnr, '&expandtab') ? v:true : v:false - \ } -endfunction - -function! coc#util#getpid() - if !has('win32unix') - return getpid() - endif - let cmd = 'cat /proc/' . getpid() . '/winpid' - return substitute(system(cmd), '\v\n', '', 'gi') -endfunction - -" Get indentkeys for indent on TextChangedP, consider = for word indent only. -function! coc#util#get_indentkeys() abort - if empty(&indentexpr) - return '' - endif - if &indentkeys !~# '=' - return '' - endif - return &indentkeys -endfunction - -function! coc#util#get_bufoptions(bufnr, max) abort - if !bufloaded(a:bufnr) | return v:null | endif - let bufname = bufname(a:bufnr) - let buftype = getbufvar(a:bufnr, '&buftype') - let size = coc#util#bufsize(a:bufnr) - let lines = v:null - if getbufvar(a:bufnr, 'coc_enabled', 1) - \ && (buftype == '' || buftype == 'acwrite' || getbufvar(a:bufnr, 'coc_force_attach', 0)) - \ && size != -2 - \ && size < a:max - let lines = getbufline(a:bufnr, 1, '$') - endif - return { - \ 'bufnr': a:bufnr, - \ 'size': size, - \ 'lines': lines, - \ 'winid': bufwinid(a:bufnr), - \ 'bufname': bufname, - \ 'buftype': buftype, - \ 'previewwindow': v:false, - \ 'eol': getbufvar(a:bufnr, '&eol'), - \ 'variables': coc#util#variables(a:bufnr), - \ 'filetype': getbufvar(a:bufnr, '&filetype'), - \ 'lisp': getbufvar(a:bufnr, '&lisp'), - \ 'iskeyword': getbufvar(a:bufnr, '&iskeyword'), - \ 'changedtick': getbufvar(a:bufnr, 'changedtick'), - \ 'fullpath': empty(bufname) ? '' : fnamemodify(bufname, ':p'), - \} -endfunction - -function! coc#util#bufsize(bufnr) abort - if bufnr('%') == a:bufnr - return line2byte(line("$") + 1) - endif - let bufname = bufname(a:bufnr) - if !getbufvar(a:bufnr, '&modified') && filereadable(bufname) - return getfsize(bufname) - endif - return strlen(join(getbufline(a:bufnr, 1, '$'), '\n')) -endfunction - -function! coc#util#get_config_home() - if !empty(get(g:, 'coc_config_home', '')) - return resolve(expand(g:coc_config_home)) - endif - if exists('$VIMCONFIG') - return resolve($VIMCONFIG) - endif - if has('nvim') - if exists('$XDG_CONFIG_HOME') - return resolve($XDG_CONFIG_HOME."/nvim") - endif - if s:is_win - return resolve($HOME.'/AppData/Local/nvim') - endif - return resolve($HOME.'/.config/nvim') - else - if s:is_win - return resolve($HOME."/vimfiles") - endif - return resolve($HOME.'/.vim') - endif -endfunction - -function! coc#util#get_data_home() - if !empty(get(g:, 'coc_data_home', '')) - let dir = resolve(expand(g:coc_data_home)) - else - if exists('$XDG_CONFIG_HOME') - let dir = resolve($XDG_CONFIG_HOME."/coc") - else - if s:is_win - let dir = resolve(expand('~/AppData/Local/coc')) - else - let dir = resolve(expand('~/.config/coc')) - endif - endif - endif - if !isdirectory(dir) - call coc#notify#create(['creating coc.nvim data directory: '.dir], { - \ 'borderhighlight': 'CocInfoSign', - \ 'timeout': 5000, - \ 'kind': 'info', - \ }) - call mkdir(dir, "p", 0755) - endif - return dir -endfunction - -function! coc#util#get_complete_option() - if get(b:,"coc_suggest_disable",0) - return v:null - endif - let pos = getcurpos() - let line = getline(pos[1]) - let input = matchstr(strpart(line, 0, pos[2] - 1), '\k*$') - let col = pos[2] - strlen(input) - let position = { - \ 'line': line('.')-1, - \ 'character': coc#string#character_length(strpart(getline('.'), 0, col('.') - 1)) - \ } - let word = matchstr(strpart(line, col - 1), '^\k\+') - let followWord = len(word) > 0 ? strcharpart(word, strchars(input)) : '' - return { - \ 'word': word, - \ 'followWord': followWord, - \ 'position': position, - \ 'input': empty(input) ? '' : input, - \ 'line': line, - \ 'filetype': &filetype, - \ 'filepath': expand('%:p'), - \ 'bufnr': bufnr('%'), - \ 'linenr': pos[1], - \ 'colnr' : pos[2], - \ 'col': col - 1, - \ 'changedtick': b:changedtick, - \ 'blacklist': get(b:, 'coc_suggest_blacklist', []), - \ 'disabled': get(b:, 'coc_disabled_sources', []), - \} -endfunction - -" used by vim -function! coc#util#get_buf_lines(bufnr, changedtick) - if !bufloaded(a:bufnr) - return v:null - endif - let changedtick = getbufvar(a:bufnr, 'changedtick') - if changedtick == a:changedtick - return v:null - endif - return { - \ 'lines': getbufline(a:bufnr, 1, '$'), - \ 'changedtick': getbufvar(a:bufnr, 'changedtick') - \ } -endfunction - -" used for TextChangedI with InsertCharPre -function! coc#util#get_changeinfo() - return { - \ 'bufnr': bufnr('%'), - \ 'lnum': line('.'), - \ 'line': getline('.'), - \ 'changedtick': b:changedtick, - \} -endfunction - -" Get the valid position from line, character of current buffer -function! coc#util#valid_position(line, character) abort - let total = line('$') - 1 - if a:line > total - return [total, 0] - endif - let max = max([0, coc#string#character_length(getline(a:line + 1)) - (mode() ==# 'n' ? 1 : 0)]) - return a:character > max ? [a:line, max] : [a:line, a:character] -endfunction - -function! s:visible_ranges(winid) abort - let info = getwininfo(a:winid)[0] - let res = [] - if !has_key(info, 'topline') || !has_key(info, 'botline') - return res - endif - let begin = 0 - let curr = info['topline'] - let max = info['botline'] - if win_getid() != a:winid - return [[curr, max]] - endif - while curr <= max - let closedend = foldclosedend(curr) - if closedend == -1 - let begin = begin == 0 ? curr : begin - if curr == max - call add(res, [begin, curr]) - endif - let curr = curr + 1 - else - if begin != 0 - call add(res, [begin, curr - 1]) - let begin = closedend + 1 - endif - let curr = closedend + 1 - endif - endwhile - return res -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/vtext.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/vtext.vim deleted file mode 100644 index f3347795..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/vtext.vim +++ /dev/null @@ -1,36 +0,0 @@ -let s:is_vim = !has('nvim') -let s:virtual_text_support = has('nvim-0.5.0') || has('patch-9.0.0067') -let s:text_options = has('patch-9.0.0121') - -" opts.hl_mode default to 'combine'. -" opts.col not used on neovim. -" opts.virt_text_win_col neovim only. -" opts.text_align could be 'after' 'right' 'below', vim9 only. -" opts.text_wrap could be 'wrap' and 'truncate', vim9 only. -function! coc#vtext#add(bufnr, src_id, line, blocks, opts) abort - if !s:virtual_text_support - return - endif - if s:is_vim - for [text, hl] in a:blocks - let type = coc#api#create_type(a:src_id, hl, a:opts) - let column = get(a:opts, 'col', 0) - let opts = { 'text': text, 'type': type } - if s:text_options && column == 0 - let opts['text_align'] = get(a:opts, 'text_align', 'after') - let opts['text_wrap'] = get(a:opts, 'text_wrap', 'truncate') - endif - call prop_add(a:line + 1, column, opts) - endfor - else - let opts = { - \ 'virt_text': a:blocks, - \ 'hl_mode': get(a:opts, 'hl_mode', 'combine'), - \ } - if has('nvim-0.5.1') && has_key(a:opts, 'virt_text_win_col') - let opts['virt_text_win_col'] = a:opts['virt_text_win_col'] - let opts['virt_text_pos'] = 'overlay' - endif - call nvim_buf_set_extmark(a:bufnr, a:src_id, a:line, 0, opts) - endif -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/window.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/coc/window.vim deleted file mode 100644 index a4c8af28..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/coc/window.vim +++ /dev/null @@ -1,210 +0,0 @@ -let g:coc_max_treeview_width = get(g:, 'coc_max_treeview_width', 40) -let s:is_vim = !has('nvim') - -" Get tabpagenr of winid, return -1 if window doesn't exist -function! coc#window#tabnr(winid) abort - if exists('*nvim_win_get_tabpage') - try - return nvim_win_get_tabpage(a:winid) - catch /Invalid window id/ - return -1 - endtry - endif - if exists('*win_execute') - let ref = {} - call win_execute(a:winid, 'let ref["out"] = tabpagenr()') - return get(ref, 'out', -1) - elseif !s:is_vim - let info = getwininfo(a:winid) - return empty(info) ? -1 : info[0]['tabnr'] - else - throw 'win_execute() does not exist, please upgrade your vim.' - endif -endfunction - -" (1, 0) based line, column -function! coc#window#get_cursor(winid) abort - if exists('*nvim_win_get_cursor') - return nvim_win_get_cursor(a:winid) - endif - if has('patch-8.2.1727') - let pos = getcurpos(a:winid) - return [pos[1], pos[2] - 1] - endif - return coc#api#exec('win_get_cursor', [a:winid]) -endfunction - -" Check if winid visible on current tabpage -function! coc#window#visible(winid) abort - if s:is_vim - if coc#window#tabnr(a:winid) != tabpagenr() - return 0 - endif - " Check possible hidden popup - try - return get(popup_getpos(a:winid), 'visible', 0) == 1 - catch /^Vim\%((\a\+)\)\=:E993/ - return 1 - endtry - endif - if !nvim_win_is_valid(a:winid) - return 0 - endif - return coc#window#tabnr(a:winid) == tabpagenr() -endfunction - -" Return v:null when name or window doesn't exist, -" 'getwinvar' only works on window of current tab -function! coc#window#get_var(winid, name, ...) abort - if !s:is_vim - try - if a:name =~# '^&' - return nvim_win_get_option(a:winid, a:name[1:]) - else - return nvim_win_get_var(a:winid, a:name) - endif - catch /E5555/ - return get(a:, 1, v:null) - endtry - else - try - return coc#api#exec('win_get_var', [a:winid, a:name, get(a:, 1, v:null)]) - catch /.*/ - return get(a:, 1, v:null) - endtry - endif -endfunction - -" Not throw like setwinvar -function! coc#window#set_var(winid, name, value) abort - try - if !s:is_vim - if a:name =~# '^&' - call nvim_win_set_option(a:winid, a:name[1:], a:value) - else - call nvim_win_set_var(a:winid, a:name, a:value) - endif - else - call coc#api#exec('win_set_var', [a:winid, a:name, a:value]) - endif - catch /Invalid window id/ - " ignore - endtry -endfunction - -function! coc#window#is_float(winid) abort - if s:is_vim - if exists('*popup_list') - return index(popup_list(), a:winid) != -1 - else - try - return !empty(popup_getpos(a:winid)) - catch /^Vim\%((\a\+)\)\=:E993/ - return 0 - endtry - endif - return 0 - elseif exists('*nvim_win_get_config') - let config = nvim_win_get_config(a:winid) - return !empty(config) && !empty(get(config, 'relative', '')) - endif -endfunction - -function! coc#window#set_height(winid, height) abort - if empty(getwininfo(a:winid)) - return - endif - if exists('*nvim_win_set_height') - call nvim_win_set_height(a:winid, a:height) - else - call coc#compat#execute(a:winid, 'noa resize '.a:height, 'silent') - endif -endfunction - -function! coc#window#adjust_width(winid) abort - let bufnr = winbufnr(a:winid) - if bufloaded(bufnr) - let maxwidth = 0 - let lines = getbufline(bufnr, 1, '$') - if len(lines) > 2 - call coc#compat#execute(a:winid, 'setl nowrap') - for line in lines - let w = strwidth(line) - if w > maxwidth - let maxwidth = w - endif - endfor - endif - if maxwidth > winwidth(a:winid) - call coc#compat#execute(a:winid, 'vertical resize '.min([maxwidth, g:coc_max_treeview_width])) - endif - endif -endfunction - -" Get single window by window variable, current tab only -function! coc#window#find(key, val) abort - for i in range(1, winnr('$')) - let res = getwinvar(i, a:key) - if res == a:val - return win_getid(i) - endif - endfor - return -1 -endfunction - -" Visible buffer numbers -function! coc#window#bufnrs() abort - let winids = [] - if exists('*nvim_list_wins') - let winids = nvim_list_wins() - else - let winids = map(getwininfo(), 'v:val["winid"]') - endif - return uniq(map(winids, 'winbufnr(v:val)')) -endfunction - -" Avoid errors -function! coc#window#close(winid) abort - if empty(a:winid) || a:winid == -1 - return - endif - if exists('*nvim_win_is_valid') && exists('*nvim_win_close') - if nvim_win_is_valid(a:winid) - call nvim_win_close(a:winid, 1) - endif - elseif exists('*win_execute') - call coc#compat#execute(a:winid, 'noa close!', 'silent!') - else - let curr = win_getid() - if curr == a:winid - silent! close! - else - let res = win_gotoid(a:winid) - if res - silent! close! - call win_gotoid(curr) - endif - endif - endif -endfunction - -function! coc#window#visible_range(bufnr) abort - let winid = bufwinid(a:bufnr) - if winid == -1 - return v:null - endif - let info = getwininfo(winid)[0] - return [info['topline'], info['botline']] -endfunction - -function! coc#window#visible_ranges(bufnr) abort - let wins = gettabinfo(tabpagenr())[0]['windows'] - let res = [] - for id in wins - let info = getwininfo(id)[0] - if info['bufnr'] == a:bufnr - call add(res, [info['topline'], info['botline']]) - endif - endfor - return res -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/autoload/health/coc.vim b/dotfiles/.vim/plugged/coc.nvim/autoload/health/coc.vim deleted file mode 100644 index 24fbab41..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/autoload/health/coc.vim +++ /dev/null @@ -1,100 +0,0 @@ -scriptencoding utf-8 -let s:root = expand(':h:h:h') - -function! s:checkVim(test, name, patchlevel) abort - if a:test - if !has(a:patchlevel) - call health#report_error(a:name . ' version not satisfied, ' . a:patchlevel . ' and above required') - return 0 - else - call health#report_ok(a:name . ' version satisfied') - return 1 - endif - endif - return 0 -endfunction - -function! s:checkEnvironment() abort - let valid - \ = s:checkVim(has('nvim'), 'nvim', 'nvim-0.4.0') - \ + s:checkVim(!has('nvim'), 'vim', 'patch-8.1.1719') - let node = get(g:, 'coc_node_path', $COC_NODE_PATH == '' ? 'node' : $COC_NODE_PATH) - if !executable(node) - let valid = 0 - call health#report_error('Executable node.js not found, install node.js from http://nodejs.org/') - endif - let output = system(node . ' --version') - if v:shell_error && output !=# "" - let valid = 0 - call health#report_error(output) - endif - let ms = matchlist(output, 'v\(\d\+\).\(\d\+\).\(\d\+\)') - if empty(ms) - let valid = 0 - call health#report_error('Unable to detect version of node, make sure your node executable is http://nodejs.org/') - elseif str2nr(ms[1]) < 14 || (str2nr(ms[1]) == 14 && str2nr(ms[2]) < 14) - let valid = 0 - call health#report_warn('Node.js version '.trim(output).' < 14.14.0, please upgrade node.js') - endif - if valid - call health#report_ok('Environment check passed') - endif - if has('pythonx') - try - silent pyx print("") - catch /.*/ - call health#report_warn('pyx command not work, some extensions may fail to work, checkout ":h pythonx"') - if has('nvim') - call health#report_warn('Install pynvim by command: pip install pynvim --upgrade') - endif - endtry - endif - return valid -endfunction - -function! s:checkCommand() - let file = s:root.'/build/index.js' - if filereadable(file) - call health#report_ok('Javascript bundle build/index.js found') - else - call health#report_error('Javascript entry not found, please compile coc.nvim by esbuild.') - endif -endfunction - -function! s:checkAutocmd() - let cmds = ['CursorHold', 'CursorHoldI', 'CursorMovedI', 'InsertCharPre', 'TextChangedI'] - for cmd in cmds - let lines = split(execute('verbose autocmd '.cmd), '\n') - let n = 0 - for line in lines - if line =~# 'CocAction(' && n < len(lines) - 1 - let next = lines[n + 1] - let ms = matchlist(next, 'Last set from \(.*\)') - if !empty(ms) - call health#report_warn('Use CocActionAsync to replace CocAction for better performance on '.cmd) - call health#report_warn('Checkout the file '.ms[1]) - endif - endif - let n = n + 1 - endfor - endfor -endfunction - -function! s:checkInitialize() abort - if coc#client#is_running('coc') - call health#report_ok('Service started') - return 1 - endif - call health#report_error('service could not be initialized', [ - \ 'Use command ":messages" to get error messages.', - \ 'Open a issue at https://github.com/neoclide/coc.nvim/issues for feedback.' - \]) - return 0 -endfunction - -function! health#coc#check() abort - call s:checkEnvironment() - call s:checkCommand() - call s:checkInitialize() - call s:checkAutocmd() -endfunction diff --git a/dotfiles/.vim/plugged/coc.nvim/bin/fuzzy.wasm b/dotfiles/.vim/plugged/coc.nvim/bin/fuzzy.wasm deleted file mode 100755 index d59592e5c4384dd13dc2e5d693ec3896532d0898..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18363 zcmdU$dz4&NmB!C~RCRS%Rl0bsX%Zl}3X}#XB*K~mnQ_t=O#(zfN0%<08BGR3rW#DT z2~7Y=7Z4sogoqCu9}t(Qh$x_<^3ViCi69t8!2pg#WqgbbB8UWe^!&bk?ybH}2k{SQ zt(gj6*SGI^@3YT7`_l$QnL!8m{1GUt{>BzLsvd=`3WbiIL7T1 zA2)jJv2N$S<4!*9v{R29NvWM4JU@)9;n0r%B`$p=SXy`C zkgDCFN?PT#!Q)*tJA79UpT#UkW370MK13sn>Kb@3lEkBFa8j$3MypybQ|VyH)HAO# zhHxl}2g6D$q>fC%j+ekK|x14PPJ!U75+5rT~pPda+Tr%2US8%vES88@H*BexUDseVE*|@@Hqjym~NP0=_9sb|Y zcN(rrx7@(6+A=m;jnma5D5n`Gu2~9)B8{~)7&clFYAL0=T0U$etR_)6HxtfmC-LE} z(kx0c0SN?SX_jiPia`#B1I<2ag49}-#4VQA219c(ddLhfor$Wl`9nD!e+iAlL9;;$SrJZfF?THK?J40Wc zPQN|Dsv(sWMh0q zTDj@&+mYwp^jgZr`v+vs7{wofJ=Tb7=!3W}HPw$Bg9e2AVq|GDSE?ZN_Bx zUQ@nIyL#?I*-Dww?&hHlwCln|O;;2#=gW%oy|n!lZG}h5P_p<(z1CL5V|CL!uGcPsU4sGFoC0$IaMQ8?z|I-0s?~o;Eu> zdKzw3M{sE&t^r-ln;))MAG!nIs-Q~C01H$Px0sCoR~!ZL})w#dWry%rqFHRiIXFS2mN)I>$KWBJ8<&Gyi%sTQl>myazc)FivSka#MsOJj6~4w zk8uUnqG;BRSF_?U+kRLF;gD2h+i0P97Njf5M+3fi78&Hl70_`cR;+2xs;rg9-Z_#6 zbc9^1N18oSCUimv#e^IcTrPR095`BT@l0}&TEkn$HVUpmB|C242+0+CV#Ud z2JP3hZBu%n*=x;NMYJZ@i3Qo*5pmO{LX=_#QdT5wj)GeURzPD?GVkZZD*~n12P)mH z7LwBw#WfV=KIAy{BXcGVrK+gmIl}GRS%dpcFnvRL$pciruDE~o9t^zPqxjWp*USb z+idrw`IrdSJtmg2`QyB*bMNFy(a!4KsZv;@qcc0W)*9P$_na76oMIlB=t6OYPKE?J zni1?sl0P+S|Cy~z0NT$_A(;H1cM3rd#Z!ozJcYRY6oQ85omtT_%Xkw3Ixz4(@# zA@y?*#nWhM?m5p^ZVz55RP2IzgsfWj!dMT#|bo) z8SmIN=W_0jWX`&SNjK~IA-j5-G-u6tiKDGIXBsS+b4fl&0fi1$Sh_dof=`l0H6z5* z-kfPQJ5-l{sVB3pVp}8*N!! zq;p%gaiXSzxl>IZedPOfb|AD+Izm(3lTxU#q?+#$X03Z*f>U=1+dVUXuRVerI=l63 zVfNkap=#ShRog>l+V;Q-)b_wy*zxwD)4BYKj%v)t3w8+Gzv8rCTejWevBV?$bgh`(uu9Bw^NeE|%BC-Iw&>VC{!)7g)2Ka!FOF}Tks4oSE<|R2(a~zQ z=$Min?IF__9iFtf=$IP2$zsuk`5vMWrf`#maa!|xByRd1qR^}dN5a+-`lwjer%9#0 zeCxos$dH)}KNgKl4n~phw5`KdSr`sQLrJLXLR)9CKV`Abw1?Q{!M$(3d9cH~RwzHo z8C1q!Y*1QLyJ|37F=`*Lrl*((U+SAJ7aOQ00wkUYz^L$X}Z$Wxshp_p>^r-4((z5#fC0PgKK8mTiK_NW?rgngt3Fl_dd9<{gqV?uNmsX90blPiRfPl` zEx+S2zCeb_Fu4i|68@RB@Dfi>(I1fG!%5*Xx!q(f>#;vF1ccbMz(wQFL7hdQvoRDyLruXUQe6$n@YbZUC9Ve`!a-znWPir(JzUM+g_DXrb zdgxeyF|>F&VQ&>pQC%r@%`z6RMMN+hb175Is-plaiFK33_XKg+R8?eea*}}B*sBfV=kZh^a zmLC!Wk%4FCS};%rY%gx0q`stqVu|Q^nt}RYFgH-Eh{y~B)o}cqA8Y$X>@=EUd=bX? z7qC-5b2PgHJ2kubGwhV%7VI=C+9^Zs+9{3f*iK0>JJsQOs-0rP`E-fpQ`nt;?o12j zYNnZ4@s0{&IMm_2kdynt`nzGhlL@P0|BjkCB?SI0l%8yF|%*bO%VMcInW7)>@djnu|&5eJ>% zup0WqDqX|1>GC`pO3K~iD(^LEMv=X4a)~&|$H=ndDihDI0TglIQmmz^ZAy`9T5Vcn zZ(3G3?mN^C)45UbYDfFp3pLD5I}+jcPS^&Q*_cnwGj-$Q{ipc@&!? zQwC*TXB!qtV?!LLb+b*4-S|8m$IyJa##(KnuKJ^%AZ8cUKZcnoCJwTl()=&t9On*k znzC{BV~PiD-a7_->2Qe)Wmnf9%NZQvq_s6ZXXtY(;Fy*(JjBVG&hR-SpObiHdd}z& zN5sI+Zmq{YCtoGI4oGP4**^N`QDkTWj)%8r43zi8cp!f0U=~!` zFSOG;C))kO3MY5sQnp838R*5dDwV^fY=DJWE}x$Og*=sZUY_h$rYq~P$4qzS#MjD~ z4)@Cxsp%A=TT>P!9SgZy)^<4Ai0an{t}p#og)DKN1sjy@cX1s1#Ol?_x%3uySmxI{f!=?+#)ZlxXGUt$=FbCe zDZf(Dz<1HJ&IP2W+jeVQWM_qAgUF5wG}j8`5-A#_9h!3Ozvfw(23izH%#x4unrXUd zh{nmCgqGW-CEogZyf*F`~jvYB*XRXT98ba4cA1nH(V?ex|1ujoHu z<@=&IXtk1VqoPgOi-m&3tf|y#(vsAM^tHu}ZQ9X}cDUa68~y zH9VsQG|f6~@}^PsV*qx@^=p(3xLHejn{~!E1N0*|w8-_30oME)3vA=Ijk)nYEdmM! z8S7Qnq}E`Oba>g~zjfRUwYm2yXdx6)TvAUeN9p$p2`4v~H1vlT^hurQtZ}YN&!h(p z^yB{}Qc%!Xrxg7{lO^6uRW-sfoM8`?8}m*`wSA3?m5KUhGFFon=45jtN6c!c4|5;T%lP_e#R*5uVp~FyrsqDYujwsZKsRbA#2bYi zZc;;0=^zTot|O9QSaEM)D&eS_4aGwfgXb%^*!OV~w*3BT+gb9+Z0` z=FUfm-LXS@3k`EWNe4o_l00RYJ`^nB@3zZPcDm`Wygy9B#q5E&$y*$2L19#wo-^J~ zkJB}XcejD>9-g%5as6*S$giK>wbR{~YKD5#z4GB$%U2LF#6cYEJ|RpKA4kvSRGep3 zgT3kQnWgozkv4l7M_&~+GKID5Ju)u=u@3#{tUu{}T|H8<8G0-2nsu3|%t=PUFV%8m zWR><)O6I%1duvp$UK9nDe9^JyV!!67r$mSS{ZX^b(kajJo1o$oA}UTYxt_~j$7By0 z=gDx%(JD7!9oNc!W>}#|Tv&MHZ1r+(=w&Jym&_#%bi0%2mydzkf~z&mtyc?=DYvgh zb&hXMmYB?l9`$H3x42Oc^2OWgQ3-6$YgW(wa&p7q}22%<%$NH(e+0?O{|UGt`CjD9;euq%(+2nzAfJ!Vzy+m0K>BClf@Hqj z=lCP!=~u&rJpGGsAy2;sF68Og!M_Cf&)pBc47ncU?SBm}DF1_`e;s}^h~a#>+xR0W zU1h!v7bNrLZs(7Xr*DP}dHNl2Ay2;({vgQP{|Wrjg8VzUkmr9K{`*4uAK-%0F9%P- z1<9MicKBXYp4Xp11f{P5E%7 zq7c}!GDv<>q&nEE~q}) z+jjWVS$YTgkML(Q`7GpT;R4k9_wuH5g5*yzAN#`v$>~G*2)H2mM&twGf@G%IErYKB z0UWb&XTt@h>)BWLVLbuynZR-FZ~%}z4=jTVdH#Qa3zB>9o0vETE=ZpFyNQW+!Uf5@ zlm0IFFv#ueM7W^zhwq)3csE>-9FczoT#)=z(pSO-$v;CLg`W&qqSnVX@NuC2-a>i@ z{xgub_Z#?s7v#s`L!ZINo$AXR3O@nl`8)8B7Ub4v(Fe%W4}`zFAfF09y&#_f7u4Tp zPsYc?&n={12p5#DKEDqxNZ$IkiHY^_OF-V>;9B?(3Ua3w zxGw>v4}lE>f!hf3@D%GY z7i7BX4CKe;9D%c&3p75}@k+QLJ^&7aFDRrR0za%EFNL2{kWYiJDahk+LG}HR|3#n! z7bJg+HqVBi1M>FIhpz){Lzd?fxS;&{d^}2#PxqjDE1R1 z>+@Z>Ag*-9e}ZIvz6Te?m3}w;#~|_)t)~K2N{}an<)E{ArMn z_Zj$XD$ncR8*)%V{yVs!^7<@<4*`m~g~WS@!k2(tpNGSb2K;AbUJnseb~gFn02d_h zf&33}LGoV6Z-fhy4*+k13z826Z-&1GsQrVG-wGF$J|FxeT#)=X;Gf`v2uLQ@!1<8Y?9|spCzZUs;xFC5h_*b|fc@Aj91PFn#mkQq z;DY3o^c8SHvdWLZ1QU7IdLGsSX zi&%Jqc{K7JGIITu{0`r^C+xYX2;7HC#~I1Kx2R^qnS$;YET%h)}A8#Qj{3DRO zsml2WK2eajbC!56J5NYI9fC>$I&sM_CnnB>3z9#8d=^}g{Bh*7;cJ2FzYO^txS;e; zAfF2tBwvAi9$b+8AoBTeLGrEdb?($XJtW5$V0*}djCPo&QA^aZUs4k?^}@P!50+dA^4(#{08`2faXv2ErY+SkiHT= zlF3JqJ_$7Da&R;<3zd)WxeE)VJS@yjgE-0@)$HE2idpR#02Nxu7 zMLr&W0?60fN$@d{uh%o-KQE*|0)Mn1KLHn1pFVC5_Z~p~*?_+Gh0g)yOinp#oS2bcl#|rY^#J+Pu-k*cuD+=;y@b?ttark)!c^&-yfF*Bz`T$%|Tl#zuE{M+~&!zCs zfxNxz;TsF`x8R#WUf&(?KLCbob-eNO#1BCAEqj*vgKq>H|GeYbV<)&T29mdtXOLL^ x=qz5}io6y6OhMj6?EW}V{!OHBB6fc$i{Dj#8L|6#7Qahw5xc)8i{F2O{6B+Y0i^%{ diff --git a/dotfiles/.vim/plugged/coc.nvim/bin/prompt.js b/dotfiles/.vim/plugged/coc.nvim/bin/prompt.js deleted file mode 100644 index 285832a0..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/bin/prompt.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Used for prompt popup on vim - */ -const readline = require("readline") -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - escapeCodeTimeout: 0, - prompt: '' -}) -rl.setPrompt('') -let value = process.argv[2] -if (value) { - rl.write(value) -} -rl.on('line', input => { - send(['confirm', input]) - process.exit() -}) - -let original_ttyWrite = rl._ttyWrite -rl._ttyWrite = function (code, key) { - if (key.name === 'enter') { - send(['send', '']) - return '' - } - original_ttyWrite.apply(rl, arguments) - send(['change', rl.line]) -} - -function createSequences(str) { - return '\033]51;' + str + '\x07' -} - -function send(args) { - process.stdout.write(createSequences(JSON.stringify(['call', 'CocPopupCallback', args]))) -} - -process.stdin.on('keypress', (e, key) => { - if (key) { - let k = getKey(key) - if (k == '') { - return - } - if (k == '') { - send(['exit', '']) - process.exit() - return - } - if (k) { - send(['send', k]) - return - } - } -}) - -function getKey(key) { - if (key.ctrl === true) { - if (key.name == 'n') { - return '' - } - if (key.name == 'p') { - return '' - } - if (key.name == 'j') { - return '' - } - if (key.name == 'k') { - return '' - } - if (key.name == 'f') { - return '' - } - if (key.name == 'b') { - return '' - } - if (key.sequence == '\x00') { - return '' - } - } - if (key.sequence == '\u001b') { - return '' - } - if (key.sequence == '\r') { - return '' - } - if (key.sequence == '\t') { - return key.shift ? '' : '' - } - if (key.name == 'up') { - return '' - } - if (key.name == 'down') { - return '' - } - return '' -} diff --git a/dotfiles/.vim/plugged/coc.nvim/bin/strwidth.wasm b/dotfiles/.vim/plugged/coc.nvim/bin/strwidth.wasm deleted file mode 100755 index c5eb626440cba791e434c04df633ba028c1b38f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15630 zcmdU$eRNdSwZPB)nwexKW>mD1fZiEUP@!V0feMCPiV#FVwAR(t^=t&ub|McF(v-H= z3}CgjT2X5)wN+f&*3Vb`sP%PGi53y1C@OxuK3k)xMa4xBKTwdo-#+Ku$%KU3Kl;{s z57&=<@7#0G=idA5eJ-kV7tME+QqCa1NvS5M!|C8J)#P<_aOoX%pmH3?b(M0F9)G!h z;4I`i@EqkPQoIm#J>aL4#|4S`^X4yT{kE%;i{`aO^XGg^RizfSwVwTr^V+_y4oJ*D z_rePo%vII?`K|NjschxSnFsnboSv!NhEP?hi7LvrRj1`9>gn-XsuUL;r&a04QMSE7 z<+-0)r6LuLsdKyTEf%@2PE$(W%NF@Vb(Or9T_)G*OUF9tj$!)uDBGNOhU-hWAyOmV zJ@UHLm0cob8N($-)tq;u|5DTB=bUHCt$u)~d0&2-)G^jwFSlG4ianqNXE zN)@7oEzyg2JafBAHkX){m%XFkdx6ZxI{;V6Xb8qc?`<@=53aRP` z_vvP%jym@ex%3)BFIp*A1ulM~FQiEdbAN@o59Hp9erAfYRiU&ycZQ+79?$EFIsG8F{*B1*m_VhDb+2td9RT7Bfk*3QDY$=gkCf6 zI;}J+^E1-@vy8mXElLASjaTP(_YPh!m8mWa3emVa*GEeR{x4L~HfOr%j8yxYRFY3b zS$;lPRtK4$R?8}T?RmeQK6ovspl9@@CG=Y(XHhaY{6v@(W?=;AQ=R!f~}F5{q)vbd>`qIGU2&6?<1`HK1MsqZ;M?1qQCUDxwXY!v_u`O0lm+(M_GPkOi|DtrCMZ$TcsTtqT3$% zEqT8+q#n6<+9P+Ld#7~I;`EyU8MU{+QRfqV#?8v5XvmIRPaXYWzT=Tg?Li?7Lbo}u z)rzNuykdq#9el=}lod(J3Z*D)=Q^k7XP3-RjzSbmL{6A$%ct-Y%t|6m@w#5`(9NY} z5nTG6OQpk1o6Emc%x>_#jk6r=RLsny}UX6-Vs+_Qbrxnfr8}l8x zZP8DD$FK^bY_#e}i(8nSoFA%O;5K+N)?lQY&3jBs5Dn7h&zf?)^uQ`$b-d+ENn5$ zYbIRQAO9EKs2P=FvaVF@z_U z8y!YDr@fiKkC;;1mXrRc;+3-tnoorOEP9_{eS%ynOz4`-b&&Hi9%m>8AF; zrephVzi313#J%2%P1QQiVX36rwX%`td~F+_7B6KAz46jNjFvEBKj&*}V-;m$9#e&U zvcS&HJT>RjEx0rn*T7uFkzr}zzmOh@8K8mE!=LDT{J+E@KC^-1d+fNn`o0xJYP8bf z8b(;<8<)^KcfJf+hio}d+d6Baq)zcs)X54J^^S)*2$3)0=&Wq7_GvpC*4MTBJ=$ z+>E|saQ|3Eq$Q&wq8s^CVM-O-k5vtZs4I|G^{%W{)^?6@ii^;{%M^Ir6L;D4K_11a zL!2O(iP4tXn>|o&mGs+dVC?^QvIo{szPwC8__OM);=8uCGUuuuyq%RR0r${o;&uO zOtwy3u;8>wT5yVP0|P9raEk4$Y-K|w;VLUjU==%-Sf`AXg%gtuwED)H;}YQ65z6Kp zzq&u4WL%W>N(3GfAENv^0o2BB#y8-q$YjL(K)~b$cJcx{dAQ_|5`{bgEUt;MCrpk+ z&~4JVvZ-aFu^ltb5{K#S2Rm>ZWQz1QTK2jP(&dqf2F&X=GKgQ7fR2<{VomL=5@KoW zoh^|=M<}(pC6|=RRm- zVE(o#2JL5L+ve?>T!n5tXE@*dXY-cl9+3beJxDd zZH^i8ql;;q?Ve{QCgQ4;CI)u>$X6xr?adT*u3lOy32P*EW(OBrV|y;;iJp#AvKkPg3AAMSqSq`o`tC1EJVdw2p+CH3&A#Z^Fu;+ z5+_W|VDFMiY9fO(xe|FmNa~|qo9@4i5d~w6x`63_4Z;pehRA3bha@f797&63k`}ZV z-;z@}8BRT9`bk9bG-8@V+jA_YBpsAuJSHj06KtzIr)ZL7Q!_z$LZJ|ORyiQ zqusk?Cmc(kv67?B{yEm=n)?*~T|ee-;B7YENhv&>(;=qJi;^+{vXVXqi)Ya%4-z-g z*Is4T9VgI`!g$A$IwxXxBVmNI)Tp6`F3;xy&cY zjLM1-OB;2jRhv{N23BXCLiZ-sw2XcYq|PLSC3PmC+ee*!qsKluwzc~*jkYmte~s2d zP%J{ZM*C4sDMPYDlYvUWNIKA8spag#Dm9l{sd2)R6PGJ>FtAcnvqTAfT9m^hX;{oi zp9pG?A-@_M6Q?UCAiYAMgY4>Ql#0Dp)kw41?=GQtPwVex zkKlw(pL*s|`_lH1*4sl`wue-|?Ewpv?EzaDczclST>OcoYOKaSJA~f9{HR*CY<-G{ zk=c|O@4<}@U2F`28Q_rQSka!a%B?NUZ=_{RHhuA}(XoB}tM(96@%b2BFo3 z$jlfWty-gFNe0?O`WqddwA|=e8hw(5(Yf&+A|XuKNfyefn;#OY{(FdoW=R|gTZe0+ zV$nWXRO*Yj4t$F!GHYSRA|n$ABav^vtwURx>o#}|p)1FQ+Rl8FWnpKshv?0NbKiLL zV24+ESNtS7s3?DVgEDKfK3Bx2_$6(w)Y@Dr+N?yIO<^7Eq{2$0%{ti98mrGvCD@@D!Hy_!Nt;ErMHlF( zd0ei|sE6oktj(0^ug&bNI+r*4&A4N2#)Fi!`BM+h%~oQL&BKJ*L5M|5J4nBSbFIF{ zh0$|~9n1jq!8ubOADpA#_S8wzH#r7$*ky<7&uyV+KFNJwKC`8}tDIzq+Yk~nvM|x& zLf%1Kq^HUy;K(cev4!zDqL>VmqYx+LKdmi%#1p4z5@dfGPh8GNa@ex`Y*Ge?5Stb_ zFV^urFG_q*O?~#&d_u?fJk9V)r+<83_Cbf?xP-fdjZfFkM@)gRhPP{MI-x5{gwiSHqedT>)J#@@L8S;Fb&|ekxM3wF$l}n)UVnhVPK8G^pMI{x$lCT>a-xI{4 zQ)&5P;%JSc*}n0;G!yE~NB4km<{!lOj5DcKJ}D~ih|23QC80ky5Skm6r;%*lmG#qu z%bLNV@;n$M4;(gP^qqmTfKo+`jZ1v_@YWJ}W-oC~c#qd%6ef*B7i>#XmcPzP-r8k?M)J%QO0Ldl?hBRZ6%~IveeylcAt33Q#+!J%D^+~=+ zmr8}bE%eJrO$()gSW~4fGb9Eg3U1Z4OhF}J+rNVH^ivfSO=OnTGn=_!p2tfxHCdMe3v zUp+;Kd8cnM3(&zWhNx@y(5T0GE;C=PWPFQml%p#7z=UWp1z#pW9|aZ2c#-Ix|| zS0$&ca;}&UB~v-Q&}g^pj);`BDtElgU9|)l?7`Bg4KQ%WG>hVueJZ1w{-4VD;8Y%9 zBy@m*UulMykiIBMv%2vg(>-m9F91C8Hu$Do*(M7;uGDR)w?W=S}+Ol^pk%e(t_nN>9IT`NTJ?wu`B8wjoq)2 zhpfMRMaU#?;@m`W!q{(u!Oh%I2`V(6#VVtF|y zMCpkJJ+T)`hpsMdo=^iyWeT8Trq67KXji(GR>at(C5f0^F)Ig`Ewy?)akQVoYoO9n zNE`^?zUQ-|UK^1)p-Je@6kC)IIO0GgBMRNq@JGI`#h$Y}Gxb;UbV~8h)Kb}`xu}RQ z-1x%hBE9_>++;D8F1pVD^FQvV{PFhrN>#%# z@L6br1)yG3s^?|cYxt-~sok&_dZ6^@K&8G0gNG?q3rE8-@Fr}7Zp%)j@X3+X0fUZG z>JVszGoizBEmFAIatHEG_#-?7YvECN(y|#Tyk&V8xf9;Ee2f%6u>>QO5-K4LBQ2*P zg_)K!k!Qi#mg|t$!z#-fq)>aTQbXW$%UMXF_*tb^zzwhy)Nx8Z2i>q6)EK4eA%dU6 z3h060c#6XD@MBmGTc8^b|C~}GOoh{7%?#?9sniv>QV!NZ)9p%K1nMrOZg~Ou5%qqo zRF-u-49372@Fh4Oz7Eacu%=DW1#gI4;HWLo4Ld+Bbkv8JA%Ebg=dM6r>8KQ_RgOCR z9!H%HXTW)I0W5^w_d3e&HavwCe!RnQHS*`6-gT4mt(M)$ zSsys62#>;_Et`^EO#US16INP@BsV)R>K-tXW4`l#3kU`)!*P1c*C+4`4()0cc9zyE^;S) z2)Gfo$AZgH0vn6wK%{W6r4}h11tZ{C%kjw1!#K-CUPcO-n_2)@ z!_9CD+z$7^!|*3~930<}Mb3iRmTbt%!@+PUa5Sq915TgSPzWIp!(jxBv3w5sc{tHB z9x2pY$U2qKVOfH_1n#nUIl2ykr2;7&Y&jGusBVZJK)^Y-J zEKGotq0w?0QaHoXggh6{gA0H|F#eU3QvVJMU@0tvOW`uO&awh2{K~QhDI7G+&@>#M z3U9-7;-S-F5ftGnxCX9+m2flM0=L7xa34GXzlYWEN9cryVI8c84VEX7Ps6M5I&8ND z`0fN$SPno|!w}2iNTIJiu-u5e3D#KFAvc2TEwZ0H2d}^u z%T}c9F>izHFYj4CK*~O|8}`6n=z){jbA)#2fG-nseFYkci)Ml9qTDVdPO2I{A*K=3 z4o6i&7DmGu_y)+nbtPN{%i#vN3zTz!+78sh`_;%SGK;i-uxYXTW!Ui#;p%|(fHjtf zk&nPycoZJ9WE1EtOoy+*Ld)~Wm*8c14gL;W;VpOv4on)xAWwx~!zy?icETr?LsR$< zsD)v0B#eNgVKjUNz6#I6E3gH;3Z+hh2~ZESU^bi$b6_qkfn~7T@(^+@JO=Aw18jsB zEUzNBz+Q_}NjosXQjeSjQ=t*2!wi^hS%_?bZ(5chm%(bwL&!(rF?bv{z(#l#w!p{G z15TQDVS=R|IT@xxBTR=Ga2A{mb6_qkwLFA;1lGZNcmg)U3l^18%7=QG3{#*HPK6n8 z7JM1zz+6}Y%V4$TA>>+E2kYSp*a*+T^YAKc0sgIs;{PL1<6#2S!(<>2=P-x%fU|ye zwq*`-E-Zm%@Py?lVJ6&TxgWV2*26}q!88to6D?zr z!WS&{$cfMbm%ycP8C(h1!wOgp>nz7&V)gK4_zIi@O)v+}g9~6jv_Kmyg)8AI%g>R& zgnv62`+|c$L(U1GgA?EkI1^f75!?^Y!e1?tA6LQm;ZnHW5+26B2V-D7d}c5<24}%J z&;%Djhh-JA6I3nw0Vlv@Xof{lgr#sZ+zoHQP8dFf`GZaH3~Yw2@Q&p@r0^kp1f4^X zup4?{Q%DR4+ehK@pkuV53)ut5j3Lhi$vb}z3x3U9KpT7yZiJhl8+L$un<0S|(w1S! z5irV9L@t5*;Zf*<9nfPr>UR7OOocO{2+QC;=!DlTN8h1T9emMp8gd4F7rqCpEcYVs zhu_14@DQwlhb?a-x5NAJ0c^PwUkcmc9XNcqA>JoK_KM?VzaX#`x?DrMM;-=FrGx)+ zQ~(LcKsAhmlVGCdb>tf`yvk7{;LZcsPhd(lIVPwqc`uBEDbN8+VHNxVB$#$#1e^e; zz!X?yDI%A`eb5Py!=K?vcnU@xM2-ygmY0!lfduFtjE4zO50hakG{SV40cTt0Am_sQ za3L&&HaKw*{eg2VtB`+!-yY(q-@${>2`|B4Va%b9YJfZ8_b~J`jye`b)i7@`<}m7n zu`mwCLp?NDCLzBFPs0oF7wCf5EY4u|b@)7d0mef;Ots8Leibf<6>!`Ta#0uu6X6>8 z4crb7!0|(Q4kuYAAWw#ga0*PdT#o!PEQhP%TDTr|9`2|Qpu4~s0E{7Vse@UZr3ka( zGPnw^f!8eYdCMG-7x7H))6Ghse|!wA$-$v2~xNL wZi1WPx1hSvV@N>_)Itu1!EiVVj)5_+P%mtImHZYqZRNZHCcjC(4RM_GKLPeT-T(jq diff --git a/dotfiles/.vim/plugged/coc.nvim/bin/terminateProcess.sh b/dotfiles/.vim/plugged/coc.nvim/bin/terminateProcess.sh deleted file mode 100755 index 513068d2..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/bin/terminateProcess.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -terminateTree() { - for cpid in $(pgrep -P $1); do - terminateTree $cpid - done - kill -9 $1 > /dev/null 2>&1 -} - -for pid in $*; do - terminateTree $pid -done - diff --git a/dotfiles/.vim/plugged/coc.nvim/build/index.js b/dotfiles/.vim/plugged/coc.nvim/build/index.js deleted file mode 100644 index 2590b032..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/build/index.js +++ /dev/null @@ -1,323 +0,0 @@ -"use strict";var Qie=Object.create;var wy=Object.defineProperty;var Vie=Object.getOwnPropertyDescriptor;var ene=Object.getOwnPropertyNames;var tne=Object.getPrototypeOf,ine=Object.prototype.hasOwnProperty;var k=(n,e)=>()=>(n&&(e=n(n=0)),e);var y=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),Go=(n,e)=>{for(var t in e)wy(n,t,{get:e[t],enumerable:!0})},sj=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ene(e))!ine.call(n,r)&&r!==t&&wy(n,r,{get:()=>e[r],enumerable:!(i=Vie(e,r))||i.enumerable});return n};var S=(n,e,t)=>(t=n!=null?Qie(tne(n)):{},sj(e||!n||!n.__esModule?wy(t,"default",{value:n,enumerable:!0}):t,n)),Co=n=>sj(wy({},"__esModule",{value:!0}),n);var lj=y((Gke,aj)=>{var nc=1e3,rc=nc*60,oc=rc*60,dl=oc*24,nne=dl*7,rne=dl*365.25;aj.exports=function(n,e){e=e||{};var t=typeof n;if(t==="string"&&n.length>0)return one(n);if(t==="number"&&isFinite(n))return e.long?ane(n):sne(n);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(n))};function one(n){if(n=String(n),!(n.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(n);if(!!e){var t=parseFloat(e[1]),i=(e[2]||"ms").toLowerCase();switch(i){case"years":case"year":case"yrs":case"yr":case"y":return t*rne;case"weeks":case"week":case"w":return t*nne;case"days":case"day":case"d":return t*dl;case"hours":case"hour":case"hrs":case"hr":case"h":return t*oc;case"minutes":case"minute":case"mins":case"min":case"m":return t*rc;case"seconds":case"second":case"secs":case"sec":case"s":return t*nc;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return t;default:return}}}}function sne(n){var e=Math.abs(n);return e>=dl?Math.round(n/dl)+"d":e>=oc?Math.round(n/oc)+"h":e>=rc?Math.round(n/rc)+"m":e>=nc?Math.round(n/nc)+"s":n+"ms"}function ane(n){var e=Math.abs(n);return e>=dl?xy(n,e,dl,"day"):e>=oc?xy(n,e,oc,"hour"):e>=rc?xy(n,e,rc,"minute"):e>=nc?xy(n,e,nc,"second"):n+" ms"}function xy(n,e,t,i){var r=e>=t*1.5;return Math.round(n/t)+" "+i+(r?"s":"")}});var XD=y((zke,uj)=>{function lne(n){t.debug=t,t.default=t,t.coerce=l,t.disable=o,t.enable=r,t.enabled=s,t.humanize=lj(),t.destroy=u,Object.keys(n).forEach(c=>{t[c]=n[c]}),t.names=[],t.skips=[],t.formatters={};function e(c){let h=0;for(let d=0;d{if(F==="%%")return"%";T++;let J=t.formatters[N];if(typeof J=="function"){let H=m[T];F=J.call(b,H),m.splice(T,1),T--}return F}),t.formatArgs.call(b,m),(b.log||t.log).apply(b,m)}return f.namespace=c,f.useColors=t.useColors(),f.color=t.selectColor(c),f.extend=i,f.destroy=t.destroy,Object.defineProperty(f,"enabled",{enumerable:!0,configurable:!1,get:()=>d!==null?d:(g!==t.namespaces&&(g=t.namespaces,p=t.enabled(c)),p),set:m=>{d=m}}),typeof t.init=="function"&&t.init(f),f}function i(c,h){let d=t(this.namespace+(typeof h>"u"?":":h)+c);return d.log=this.log,d}function r(c){t.save(c),t.namespaces=c,t.names=[],t.skips=[];let h,d=(typeof c=="string"?c:"").split(/[\s,]+/),g=d.length;for(h=0;h"-"+h)].join(",");return t.enable(""),c}function s(c){if(c[c.length-1]==="*")return!0;let h,d;for(h=0,d=t.skips.length;h{$n.formatArgs=cne;$n.save=hne;$n.load=dne;$n.useColors=une;$n.storage=gne();$n.destroy=(()=>{let n=!1;return()=>{n||(n=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();$n.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function une(){return typeof window<"u"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document<"u"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window<"u"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator<"u"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function cne(n){if(n[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+n[0]+(this.useColors?"%c ":" ")+"+"+Cy.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;n.splice(1,0,e,"color: inherit");let t=0,i=0;n[0].replace(/%[a-zA-Z%]/g,r=>{r!=="%%"&&(t++,r==="%c"&&(i=t))}),n.splice(i,0,e)}$n.log=console.debug||console.log||(()=>{});function hne(n){try{n?$n.storage.setItem("debug",n):$n.storage.removeItem("debug")}catch{}}function dne(){let n;try{n=$n.storage.getItem("debug")}catch{}return!n&&typeof process<"u"&&"env"in process&&(n=process.env.DEBUG),n}function gne(){try{return localStorage}catch{}}Cy.exports=XD()($n);var{formatters:pne}=Cy.exports;pne.j=function(n){try{return JSON.stringify(n)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var dj=y((Kke,hj)=>{"use strict";hj.exports=(n,e=process.argv)=>{let t=n.startsWith("-")?"":n.length===1?"-":"--",i=e.indexOf(t+n),r=e.indexOf("--");return i!==-1&&(r===-1||i{"use strict";var fne=require("os"),gj=require("tty"),hr=dj(),{env:bi}=process,Js;hr("no-color")||hr("no-colors")||hr("color=false")||hr("color=never")?Js=0:(hr("color")||hr("colors")||hr("color=true")||hr("color=always"))&&(Js=1);"FORCE_COLOR"in bi&&(bi.FORCE_COLOR==="true"?Js=1:bi.FORCE_COLOR==="false"?Js=0:Js=bi.FORCE_COLOR.length===0?1:Math.min(parseInt(bi.FORCE_COLOR,10),3));function GD(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function zD(n,e){if(Js===0)return 0;if(hr("color=16m")||hr("color=full")||hr("color=truecolor"))return 3;if(hr("color=256"))return 2;if(n&&!e&&Js===void 0)return 0;let t=Js||0;if(bi.TERM==="dumb")return t;if(process.platform==="win32"){let i=fne.release().split(".");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if("CI"in bi)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(i=>i in bi)||bi.CI_NAME==="codeship"?1:t;if("TEAMCITY_VERSION"in bi)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(bi.TEAMCITY_VERSION)?1:0;if(bi.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in bi){let i=parseInt((bi.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(bi.TERM_PROGRAM){case"iTerm.app":return i>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(bi.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(bi.TERM)||"COLORTERM"in bi?1:t}function mne(n){let e=zD(n,n&&n.isTTY);return GD(e)}pj.exports={supportsColor:mne,stdout:GD(zD(!0,gj.isatty(1))),stderr:GD(zD(!0,gj.isatty(2)))}});var bj=y((Li,Dy)=>{var bne=require("tty"),Sy=require("util");Li.init=Dne;Li.log=xne;Li.formatArgs=vne;Li.save=Cne;Li.load=Sne;Li.useColors=yne;Li.destroy=Sy.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");Li.colors=[6,2,3,4,5,1];try{let n=fj();n&&(n.stderr||n).level>=2&&(Li.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}Li.inspectOpts=Object.keys(process.env).filter(n=>/^debug_/i.test(n)).reduce((n,e)=>{let t=e.substring(6).toLowerCase().replace(/_([a-z])/g,(r,o)=>o.toUpperCase()),i=process.env[e];return/^(yes|on|true|enabled)$/i.test(i)?i=!0:/^(no|off|false|disabled)$/i.test(i)?i=!1:i==="null"?i=null:i=Number(i),n[t]=i,n},{});function yne(){return"colors"in Li.inspectOpts?Boolean(Li.inspectOpts.colors):bne.isatty(process.stderr.fd)}function vne(n){let{namespace:e,useColors:t}=this;if(t){let i=this.color,r="\x1B[3"+(i<8?i:"8;5;"+i),o=` ${r};1m${e} \x1B[0m`;n[0]=o+n[0].split(` -`).join(` -`+o),n.push(r+"m+"+Dy.exports.humanize(this.diff)+"\x1B[0m")}else n[0]=wne()+e+" "+n[0]}function wne(){return Li.inspectOpts.hideDate?"":new Date().toISOString()+" "}function xne(...n){return process.stderr.write(Sy.format(...n)+` -`)}function Cne(n){n?process.env.DEBUG=n:delete process.env.DEBUG}function Sne(){return process.env.DEBUG}function Dne(n){n.inspectOpts={};let e=Object.keys(Li.inspectOpts);for(let t=0;te.trim()).join(" ")};mj.O=function(n){return this.inspectOpts.colors=this.useColors,Sy.inspect(n,this.inspectOpts)}});var Yt=y((Vke,KD)=>{typeof process>"u"||process.type==="renderer"||process.browser===!0||process.__nwjs?KD.exports=cj():KD.exports=bj()});var vj=y((ePe,yj)=>{"use strict";yj.exports=Tne;function sc(n){return n instanceof Buffer?Buffer.from(n):new n.constructor(n.buffer.slice(),n.byteOffset,n.length)}function Tne(n){if(n=n||{},n.circles)return kne(n);return n.proto?i:t;function e(r,o){for(var s=Object.keys(r),a=new Array(s.length),l=0;l{var Pne=require("util"),gl=Yt()("log4js:configuration"),Ty=[],ky=[],wj=n=>!n,xj=n=>n&&typeof n=="object"&&!Array.isArray(n),Ene=n=>/^[A-Za-z][A-Za-z0-9_]*$/g.test(n),Rne=n=>n&&typeof n=="number"&&Number.isInteger(n),_ne=n=>{ky.push(n),gl(`Added listener, now ${ky.length} listeners`)},Lne=n=>{Ty.push(n),gl(`Added pre-processing listener, now ${Ty.length} listeners`)},Cj=(n,e,t)=>{(Array.isArray(e)?e:[e]).forEach(r=>{if(r)throw new Error(`Problem with log4js configuration: (${Pne.inspect(n,{depth:5})}) - ${t}`)})},Ine=n=>{gl("New configuration to be validated: ",n),Cj(n,wj(xj(n)),"must be an object."),gl(`Calling pre-processing listeners (${Ty.length})`),Ty.forEach(e=>e(n)),gl("Configuration pre-processing finished."),gl(`Calling configuration listeners (${ky.length})`),ky.forEach(e=>e(n)),gl("Configuration finished.")};Sj.exports={configure:Ine,addListener:_ne,addPreProcessingListener:Lne,throwExceptionIf:Cj,anObject:xj,anInteger:Rne,validIdentifier:Ene,not:wj}});var Py=y((iPe,dr)=>{"use strict";function Dj(n,e){for(var t=n.toString();t.length-1?r:o,a=fl(e.getHours()),l=fl(e.getMinutes()),u=fl(e.getSeconds()),c=Dj(e.getMilliseconds(),3),h=Fne(e.getTimezoneOffset()),d=n.replace(/dd/g,t).replace(/MM/g,i).replace(/y{1,4}/g,s).replace(/hh/g,a).replace(/mm/g,l).replace(/ss/g,u).replace(/SSS/g,c).replace(/O/g,h);return d}function ml(n,e,t,i){n["set"+(i?"":"UTC")+e](t)}function jne(n,e,t){var i=n.indexOf("O")<0,r=[{pattern:/y{1,4}/,regexp:"\\d{1,4}",fn:function(c,h){ml(c,"FullYear",h,i)}},{pattern:/MM/,regexp:"\\d{1,2}",fn:function(c,h){ml(c,"Month",h-1,i)}},{pattern:/dd/,regexp:"\\d{1,2}",fn:function(c,h){ml(c,"Date",h,i)}},{pattern:/hh/,regexp:"\\d{1,2}",fn:function(c,h){ml(c,"Hours",h,i)}},{pattern:/mm/,regexp:"\\d\\d",fn:function(c,h){ml(c,"Minutes",h,i)}},{pattern:/ss/,regexp:"\\d\\d",fn:function(c,h){ml(c,"Seconds",h,i)}},{pattern:/SSS/,regexp:"\\d\\d\\d",fn:function(c,h){ml(c,"Milliseconds",h,i)}},{pattern:/O/,regexp:"[+-]\\d{1,2}:?\\d{2}?|Z",fn:function(c,h){h==="Z"?h=0:h=h.replace(":","");var d=Math.abs(h),g=(h>0?-1:1)*(d%100+Math.floor(d/100)*60);c.setUTCMinutes(c.getUTCMinutes()+g)}}],o=r.reduce(function(c,h){return h.pattern.test(c.regexp)?(h.index=c.regexp.match(h.pattern).index,c.regexp=c.regexp.replace(h.pattern,"("+h.regexp+")")):h.index=-1,c},{regexp:n,index:[]}),s=r.filter(function(c){return c.index>-1});s.sort(function(c,h){return c.index-h.index});var a=new RegExp(o.regexp),l=a.exec(e);if(l){var u=t||dr.exports.now();return s.forEach(function(c,h){c.fn(u,l[h+1])}),u}throw new Error("String '"+e+"' could not be parsed as '"+n+"'")}function Mne(n,e,t){if(!n)throw new Error("pattern must be supplied");return jne(n,e,t)}function One(){return new Date}dr.exports=Tj;dr.exports.asString=Tj;dr.exports.parse=Mne;dr.exports.now=One;dr.exports.ISO8601_FORMAT="yyyy-MM-ddThh:mm:ss.SSS";dr.exports.ISO8601_WITH_TZ_OFFSET_FORMAT="yyyy-MM-ddThh:mm:ss.SSSO";dr.exports.DATETIME_FORMAT="dd MM yyyy hh:mm:ss.SSS";dr.exports.ABSOLUTETIME_FORMAT="hh:mm:ss.SSS"});var VD=y((nPe,Oj)=>{var $s=Py(),kj=require("os"),Ad=require("util"),Pj=require("path"),Ej={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[90,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[91,39],yellow:[33,39]};function Rj(n){return n?`\x1B[${Ej[n][0]}m`:""}function _j(n){return n?`\x1B[${Ej[n][1]}m`:""}function Ane(n,e){return Rj(e)+n+_j(e)}function Lj(n,e){return Ane(Ad.format("[%s] [%s] %s - ",$s.asString(n.startTime),n.level.toString(),n.categoryName),e)}function Ij(n){return Lj(n)+Ad.format(...n.data)}function Ey(n){return Lj(n,n.level.colour)+Ad.format(...n.data)}function Fj(n){return Ad.format(...n.data)}function jj(n){return n.data[0]}function Mj(n,e){let t="%r %p %c - %m%n",i=/%(-?[0-9]+)?(\.?-?[0-9]+)?([[\]cdhmnprzxXyflos%])(\{([^}]+)\})?|([^%]+)/;n=n||t;function r(L,O){let Z=L.categoryName;if(O){let ne=parseInt(O,10),be=Z.split(".");nene&&(Z=be.slice(-ne).join(Pj.sep))}return Z}function x(L){return L.lineNumber?`${L.lineNumber}`:""}function T(L){return L.columnNumber?`${L.columnNumber}`:""}function R(L){return L.callStack||""}let F={c:r,d:o,h:s,m:a,n:l,p:u,r:c,"[":h,"]":d,y:f,z:p,"%":g,x:m,X:b,f:w,l:x,o:T,s:R};function N(L,O,Z){return F[L](O,Z)}function J(L,O){let Z;return L?(Z=parseInt(L.substr(1),10),Z>0?O.slice(0,Z):O.slice(Z)):O}function H(L,O){let Z;if(L)if(L.charAt(0)==="-")for(Z=parseInt(L.substr(1),10);O.length{var Kt=pl(),Aj=["white","grey","black","blue","cyan","green","magenta","red","yellow"],Qt=class{constructor(e,t,i){this.level=e,this.levelStr=t,this.colour=i}toString(){return this.levelStr}static getLevel(e,t){return e?e instanceof Qt?e:(e instanceof Object&&e.levelStr&&(e=e.levelStr),Qt[e.toString().toUpperCase()]||t):t}static addLevels(e){e&&(Object.keys(e).forEach(i=>{let r=i.toUpperCase();Qt[r]=new Qt(e[i].value,r,e[i].colour);let o=Qt.levels.findIndex(s=>s.levelStr===r);o>-1?Qt.levels[o]=Qt[r]:Qt.levels.push(Qt[r])}),Qt.levels.sort((i,r)=>i.level-r.level))}isLessThanOrEqualTo(e){return typeof e=="string"&&(e=Qt.getLevel(e)),this.level<=e.level}isGreaterThanOrEqualTo(e){return typeof e=="string"&&(e=Qt.getLevel(e)),this.level>=e.level}isEqualTo(e){return typeof e=="string"&&(e=Qt.getLevel(e)),this.level===e.level}};Qt.levels=[];Qt.addLevels({ALL:{value:Number.MIN_VALUE,colour:"grey"},TRACE:{value:5e3,colour:"blue"},DEBUG:{value:1e4,colour:"cyan"},INFO:{value:2e4,colour:"green"},WARN:{value:3e4,colour:"yellow"},ERROR:{value:4e4,colour:"red"},FATAL:{value:5e4,colour:"magenta"},MARK:{value:9007199254740992,colour:"grey"},OFF:{value:Number.MAX_VALUE,colour:"grey"}});Kt.addListener(n=>{let e=n.levels;e&&(Kt.throwExceptionIf(n,Kt.not(Kt.anObject(e)),"levels must be an object"),Object.keys(e).forEach(i=>{Kt.throwExceptionIf(n,Kt.not(Kt.validIdentifier(i)),`level name "${i}" is not a valid identifier (must start with a letter, only contain A-Z,a-z,0-9,_)`),Kt.throwExceptionIf(n,Kt.not(Kt.anObject(e[i])),`level "${i}" must be an object`),Kt.throwExceptionIf(n,Kt.not(e[i].value),`level "${i}" must have a 'value' property`),Kt.throwExceptionIf(n,Kt.not(Kt.anInteger(e[i].value)),`level "${i}".value must have an integer value`),Kt.throwExceptionIf(n,Kt.not(e[i].colour),`level "${i}" must have a 'colour' property`),Kt.throwExceptionIf(n,Kt.not(Aj.indexOf(e[i].colour)>-1),`level "${i}".colour must be one of ${Aj.join(", ")}`)}))});Kt.addListener(n=>{Qt.addLevels(n.levels)});Nj.exports=Qt});var Xj=y(Hd=>{"use strict";var{parse:Bj,stringify:Wj}=JSON,{keys:Nne}=Object,Nd=String,Yj="string",Hj={},Ry="object",Zj=(n,e)=>e,Hne=n=>n instanceof Nd?Nd(n):n,qne=(n,e)=>typeof e===Yj?new Nd(e):e,Jj=(n,e,t,i)=>{let r=[];for(let o=Nne(t),{length:s}=o,a=0;a{let i=Nd(e.push(t)-1);return n.set(t,i),i},$j=(n,e)=>{let t=Bj(n,qne).map(Hne),i=t[0],r=e||Zj,o=typeof i===Ry&&i?Jj(t,new Set,i,r):i;return r.call({"":o},"",o)};Hd.parse=$j;var Uj=(n,e,t)=>{let i=e&&typeof e===Ry?(c,h)=>c===""||-1Bj(Uj(n));Hd.toJSON=Bne;var Wne=n=>$j(Wj(n));Hd.fromJSON=Wne});var eT=y((sPe,Kj)=>{var Gj=Xj(),zj=bl(),ac=class{constructor(e,t,i,r,o){this.startTime=new Date,this.categoryName=e,this.data=i,this.level=t,this.context=Object.assign({},r),this.pid=process.pid,o&&(this.functionName=o.functionName,this.fileName=o.fileName,this.lineNumber=o.lineNumber,this.columnNumber=o.columnNumber,this.callStack=o.callStack)}serialise(){let e=this.data.map(t=>(t&&t.message&&t.stack&&(t=Object.assign({message:t.message,stack:t.stack},t)),t));return this.data=e,Gj.stringify(this)}static deserialise(e){let t;try{let i=Gj.parse(e);i.data=i.data.map(r=>{if(r&&r.message&&r.stack){let o=new Error(r);Object.keys(r).forEach(s=>{o[s]=r[s]}),r=o}return r}),t=new ac(i.categoryName,zj.getLevel(i.level.levelStr),i.data,i.context),t.startTime=new Date(i.startTime),t.pid=i.pid,t.cluster=i.cluster}catch(i){t=new ac("log4js",zj.ERROR,["Unable to parse log:",e,"because: ",i])}return t}};Kj.exports=ac});var Ly=y((aPe,eM)=>{var gr=Yt()("log4js:clustering"),Yne=eT(),Zne=pl(),lc=!1,So=null;try{So=require("cluster")}catch{gr("cluster module not present"),lc=!0}var iT=[],Bd=!1,qd="NODE_APP_INSTANCE",Qj=()=>Bd&&process.env[qd]==="0",tT=()=>lc||So.isMaster||Qj(),Vj=n=>{iT.forEach(e=>e(n))},_y=(n,e)=>{if(gr("cluster message received from worker ",n,": ",e),n.topic&&n.data&&(e=n,n=void 0),e&&e.topic&&e.topic==="log4js:message"){gr("received message: ",e.data);let t=Yne.deserialise(e.data);Vj(t)}};lc||Zne.addListener(n=>{iT.length=0,{pm2:Bd,disableClustering:lc,pm2InstanceVar:qd="NODE_APP_INSTANCE"}=n,gr(`clustering disabled ? ${lc}`),gr(`cluster.isMaster ? ${So&&So.isMaster}`),gr(`pm2 enabled ? ${Bd}`),gr(`pm2InstanceVar = ${qd}`),gr(`process.env[${qd}] = ${process.env[qd]}`),Bd&&process.removeListener("message",_y),So&&So.removeListener&&So.removeListener("message",_y),lc||n.disableClustering?gr("Not listening for cluster messages, because clustering disabled."):Qj()?(gr("listening for PM2 broadcast messages"),process.on("message",_y)):So.isMaster?(gr("listening for cluster messages"),So.on("message",_y)):gr("not listening for messages, because we are not a master process")});eM.exports={onlyOnMaster:(n,e)=>tT()?n():e,isMaster:tT,send:n=>{tT()?Vj(n):(Bd||(n.cluster={workerId:So.worker.id,worker:process.pid}),process.send({topic:"log4js:message",data:n.serialise()}))},onMessage:n=>{iT.push(n)}}});var rM=y((lPe,nM)=>{function Jne(n){if(typeof n=="number"&&Number.isInteger(n))return n;let e={K:1024,M:1024*1024,G:1024*1024*1024},t=Object.keys(e),i=n.substr(n.length-1).toLocaleUpperCase(),r=n.substring(0,n.length-1).trim();if(t.indexOf(i)<0||!Number.isInteger(Number(r)))throw Error(`maxLogSize: "${n}" is invalid`);return r*e[i]}function $ne(n,e){let t=Object.assign({},e);return Object.keys(n).forEach(i=>{t[i]&&(t[i]=n[i](e[i]))}),t}function tM(n){return $ne({maxLogSize:Jne},n)}var iM={file:tM,fileSync:tM};nM.exports.modifyConfig=n=>iM[n.type]?iM[n.type](n):n});var sM=y((uPe,oM)=>{var Une=console.log.bind(console);function Xne(n,e){return t=>{Une(n(t,e))}}function Gne(n,e){let t=e.colouredLayout;return n.layout&&(t=e.layout(n.layout.type,n.layout)),Xne(t,n.timezoneOffset)}oM.exports.configure=Gne});var lM=y(aM=>{function zne(n,e){return t=>{process.stdout.write(`${n(t,e)} -`)}}function Kne(n,e){let t=e.colouredLayout;return n.layout&&(t=e.layout(n.layout.type,n.layout)),zne(t,n.timezoneOffset)}aM.configure=Kne});var cM=y((hPe,uM)=>{function Qne(n,e){return t=>{process.stderr.write(`${n(t,e)} -`)}}function Vne(n,e){let t=e.colouredLayout;return n.layout&&(t=e.layout(n.layout.type,n.layout)),Qne(t,n.timezoneOffset)}uM.exports.configure=Vne});var dM=y((dPe,hM)=>{function ere(n,e,t,i){let r=i.getLevel(n),o=i.getLevel(e,i.FATAL);return s=>{let a=s.level;a.isGreaterThanOrEqualTo(r)&&a.isLessThanOrEqualTo(o)&&t(s)}}function tre(n,e,t,i){let r=t(n.appender);return ere(n.level,n.maxLevel,r,i)}hM.exports.configure=tre});var fM=y((gPe,pM)=>{var gM=Yt()("log4js:categoryFilter");function ire(n,e){return typeof n=="string"&&(n=[n]),t=>{gM(`Checking ${t.categoryName} against ${n}`),n.indexOf(t.categoryName)===-1&&(gM("Not excluded, sending to appender"),e(t))}}function nre(n,e,t){let i=t(n.appender);return ire(n.exclude,i)}pM.exports.configure=nre});var yM=y((pPe,bM)=>{var mM=Yt()("log4js:noLogFilter");function rre(n){return n.filter(t=>t!=null&&t!=="")}function ore(n,e){return t=>{mM(`Checking data: ${t.data} against filters: ${n}`),typeof n=="string"&&(n=[n]),n=rre(n);let i=new RegExp(n.join("|"),"i");(n.length===0||t.data.findIndex(r=>i.test(r))<0)&&(mM("Not excluded, sending to appender"),e(t))}}function sre(n,e,t){let i=t(n.appender);return ore(n.exclude,i)}bM.exports.configure=sre});var Dn=y(nT=>{"use strict";nT.fromCallback=function(n){return Object.defineProperty(function(...e){if(typeof e[e.length-1]=="function")n.apply(this,e);else return new Promise((t,i)=>{n.call(this,...e,(r,o)=>r!=null?i(r):t(o))})},"name",{value:n.name})};nT.fromPromise=function(n){return Object.defineProperty(function(...e){let t=e[e.length-1];if(typeof t!="function")return n.apply(this,e);n.apply(this,e.slice(0,-1)).then(i=>t(null,i),t)},"name",{value:n.name})}});var wM=y((mPe,vM)=>{var Us=require("constants"),are=process.cwd,Iy=null,lre=process.env.GRACEFUL_FS_PLATFORM||process.platform;process.cwd=function(){return Iy||(Iy=are.call(process)),Iy};try{process.cwd()}catch{}typeof process.chdir=="function"&&(rT=process.chdir,process.chdir=function(n){Iy=null,rT.call(process,n)},Object.setPrototypeOf&&Object.setPrototypeOf(process.chdir,rT));var rT;vM.exports=ure;function ure(n){Us.hasOwnProperty("O_SYMLINK")&&process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)&&e(n),n.lutimes||t(n),n.chown=o(n.chown),n.fchown=o(n.fchown),n.lchown=o(n.lchown),n.chmod=i(n.chmod),n.fchmod=i(n.fchmod),n.lchmod=i(n.lchmod),n.chownSync=s(n.chownSync),n.fchownSync=s(n.fchownSync),n.lchownSync=s(n.lchownSync),n.chmodSync=r(n.chmodSync),n.fchmodSync=r(n.fchmodSync),n.lchmodSync=r(n.lchmodSync),n.stat=a(n.stat),n.fstat=a(n.fstat),n.lstat=a(n.lstat),n.statSync=l(n.statSync),n.fstatSync=l(n.fstatSync),n.lstatSync=l(n.lstatSync),n.lchmod||(n.lchmod=function(c,h,d){d&&process.nextTick(d)},n.lchmodSync=function(){}),n.lchown||(n.lchown=function(c,h,d,g){g&&process.nextTick(g)},n.lchownSync=function(){}),lre==="win32"&&(n.rename=function(c){return function(h,d,g){var p=Date.now(),f=0;c(h,d,function m(b){if(b&&(b.code==="EACCES"||b.code==="EPERM")&&Date.now()-p<6e4){setTimeout(function(){n.stat(d,function(w,x){w&&w.code==="ENOENT"?c(h,d,m):g(b)})},f),f<100&&(f+=10);return}g&&g(b)})}}(n.rename)),n.read=function(c){function h(d,g,p,f,m,b){var w;if(b&&typeof b=="function"){var x=0;w=function(T,R,F){if(T&&T.code==="EAGAIN"&&x<10)return x++,c.call(n,d,g,p,f,m,w);b.apply(this,arguments)}}return c.call(n,d,g,p,f,m,w)}return Object.setPrototypeOf&&Object.setPrototypeOf(h,c),h}(n.read),n.readSync=function(c){return function(h,d,g,p,f){for(var m=0;;)try{return c.call(n,h,d,g,p,f)}catch(b){if(b.code==="EAGAIN"&&m<10){m++;continue}throw b}}}(n.readSync);function e(c){c.lchmod=function(h,d,g){c.open(h,Us.O_WRONLY|Us.O_SYMLINK,d,function(p,f){if(p){g&&g(p);return}c.fchmod(f,d,function(m){c.close(f,function(b){g&&g(m||b)})})})},c.lchmodSync=function(h,d){var g=c.openSync(h,Us.O_WRONLY|Us.O_SYMLINK,d),p=!0,f;try{f=c.fchmodSync(g,d),p=!1}finally{if(p)try{c.closeSync(g)}catch{}else c.closeSync(g)}return f}}function t(c){Us.hasOwnProperty("O_SYMLINK")?(c.lutimes=function(h,d,g,p){c.open(h,Us.O_SYMLINK,function(f,m){if(f){p&&p(f);return}c.futimes(m,d,g,function(b){c.close(m,function(w){p&&p(b||w)})})})},c.lutimesSync=function(h,d,g){var p=c.openSync(h,Us.O_SYMLINK),f,m=!0;try{f=c.futimesSync(p,d,g),m=!1}finally{if(m)try{c.closeSync(p)}catch{}else c.closeSync(p)}return f}):(c.lutimes=function(h,d,g,p){p&&process.nextTick(p)},c.lutimesSync=function(){})}function i(c){return c&&function(h,d,g){return c.call(n,h,d,function(p){u(p)&&(p=null),g&&g.apply(this,arguments)})}}function r(c){return c&&function(h,d){try{return c.call(n,h,d)}catch(g){if(!u(g))throw g}}}function o(c){return c&&function(h,d,g,p){return c.call(n,h,d,g,function(f){u(f)&&(f=null),p&&p.apply(this,arguments)})}}function s(c){return c&&function(h,d,g){try{return c.call(n,h,d,g)}catch(p){if(!u(p))throw p}}}function a(c){return c&&function(h,d,g){typeof d=="function"&&(g=d,d=null);function p(f,m){m&&(m.uid<0&&(m.uid+=4294967296),m.gid<0&&(m.gid+=4294967296)),g&&g.apply(this,arguments)}return d?c.call(n,h,d,p):c.call(n,h,p)}}function l(c){return c&&function(h,d){var g=d?c.call(n,h,d):c.call(n,h);return g.uid<0&&(g.uid+=4294967296),g.gid<0&&(g.gid+=4294967296),g}}function u(c){if(!c||c.code==="ENOSYS")return!0;var h=!process.getuid||process.getuid()!==0;return!!(h&&(c.code==="EINVAL"||c.code==="EPERM"))}}});var SM=y((bPe,CM)=>{var xM=require("stream").Stream;CM.exports=cre;function cre(n){return{ReadStream:e,WriteStream:t};function e(i,r){if(!(this instanceof e))return new e(i,r);xM.call(this);var o=this;this.path=i,this.fd=null,this.readable=!0,this.paused=!1,this.flags="r",this.mode=438,this.bufferSize=64*1024,r=r||{};for(var s=Object.keys(r),a=0,l=s.length;athis.end)throw new Error("start must be <= end");this.pos=this.start}if(this.fd!==null){process.nextTick(function(){o._read()});return}n.open(this.path,this.flags,this.mode,function(c,h){if(c){o.emit("error",c),o.readable=!1;return}o.fd=h,o.emit("open",h),o._read()})}function t(i,r){if(!(this instanceof t))return new t(i,r);xM.call(this),this.path=i,this.fd=null,this.writable=!0,this.flags="w",this.encoding="binary",this.mode=438,this.bytesWritten=0,r=r||{};for(var o=Object.keys(r),s=0,a=o.length;s= zero");this.pos=this.start}this.busy=!1,this._queue=[],this.fd===null&&(this._open=n.open,this._queue.push([this._open,this.path,this.flags,this.mode,void 0]),this.flush())}}});var TM=y((yPe,DM)=>{"use strict";DM.exports=dre;var hre=Object.getPrototypeOf||function(n){return n.__proto__};function dre(n){if(n===null||typeof n!="object")return n;if(n instanceof Object)var e={__proto__:hre(n)};else var e=Object.create(null);return Object.getOwnPropertyNames(n).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}),e}});var on=y((vPe,sT)=>{var Ii=require("fs"),gre=wM(),pre=SM(),fre=TM(),Fy=require("util"),Hr,jy;typeof Symbol=="function"&&typeof Symbol.for=="function"?(Hr=Symbol.for("graceful-fs.queue"),jy=Symbol.for("graceful-fs.previous")):(Hr="___graceful-fs.queue",jy="___graceful-fs.previous");function mre(){}function PM(n,e){Object.defineProperty(n,Hr,{get:function(){return e}})}var Wd=mre;Fy.debuglog?Wd=Fy.debuglog("gfs4"):/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&(Wd=function(){var n=Fy.format.apply(Fy,arguments);n="GFS4: "+n.split(/\n/).join(` -GFS4: `),console.error(n)});Ii[Hr]||(kM=global[Hr]||[],PM(Ii,kM),Ii.close=function(n){function e(t,i){return n.call(Ii,t,function(r){r||Xs(),typeof i=="function"&&i.apply(this,arguments)})}return Object.defineProperty(e,jy,{value:n}),e}(Ii.close),Ii.closeSync=function(n){function e(t){n.apply(Ii,arguments),Xs()}return Object.defineProperty(e,jy,{value:n}),e}(Ii.closeSync),/\bgfs4\b/i.test(process.env.NODE_DEBUG||"")&&process.on("exit",function(){Wd(Ii[Hr]),require("assert").equal(Ii[Hr].length,0)}));var kM;global[Hr]||PM(global,Ii[Hr]);sT.exports=oT(fre(Ii));process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH&&!Ii.__patched&&(sT.exports=oT(Ii),Ii.__patched=!0);function oT(n){gre(n),n.gracefulify=oT,n.createReadStream=R,n.createWriteStream=F;var e=n.readFile;n.readFile=t;function t(H,M,L){return typeof M=="function"&&(L=M,M=null),O(H,M,L);function O(Z,ne,be){return e(Z,ne,function(He){He&&(He.code==="EMFILE"||He.code==="ENFILE")?uc([O,[Z,ne,be]]):(typeof be=="function"&&be.apply(this,arguments),Xs())})}}var i=n.writeFile;n.writeFile=r;function r(H,M,L,O){return typeof L=="function"&&(O=L,L=null),Z(H,M,L,O);function Z(ne,be,He,$){return i(ne,be,He,function(B){B&&(B.code==="EMFILE"||B.code==="ENFILE")?uc([Z,[ne,be,He,$]]):(typeof $=="function"&&$.apply(this,arguments),Xs())})}}var o=n.appendFile;o&&(n.appendFile=s);function s(H,M,L,O){return typeof L=="function"&&(O=L,L=null),Z(H,M,L,O);function Z(ne,be,He,$){return o(ne,be,He,function(B){B&&(B.code==="EMFILE"||B.code==="ENFILE")?uc([Z,[ne,be,He,$]]):(typeof $=="function"&&$.apply(this,arguments),Xs())})}}var a=n.copyFile;a&&(n.copyFile=l);function l(H,M,L,O){return typeof L=="function"&&(O=L,L=0),a(H,M,L,function(Z){Z&&(Z.code==="EMFILE"||Z.code==="ENFILE")?uc([a,[H,M,L,O]]):(typeof O=="function"&&O.apply(this,arguments),Xs())})}var u=n.readdir;n.readdir=c;function c(H,M,L){var O=[H];return typeof M!="function"?O.push(M):L=M,O.push(Z),h(O);function Z(ne,be){be&&be.sort&&be.sort(),ne&&(ne.code==="EMFILE"||ne.code==="ENFILE")?uc([h,[O]]):(typeof L=="function"&&L.apply(this,arguments),Xs())}}function h(H){return u.apply(n,H)}if(process.version.substr(0,4)==="v0.8"){var d=pre(n);b=d.ReadStream,x=d.WriteStream}var g=n.ReadStream;g&&(b.prototype=Object.create(g.prototype),b.prototype.open=w);var p=n.WriteStream;p&&(x.prototype=Object.create(p.prototype),x.prototype.open=T),Object.defineProperty(n,"ReadStream",{get:function(){return b},set:function(H){b=H},enumerable:!0,configurable:!0}),Object.defineProperty(n,"WriteStream",{get:function(){return x},set:function(H){x=H},enumerable:!0,configurable:!0});var f=b;Object.defineProperty(n,"FileReadStream",{get:function(){return f},set:function(H){f=H},enumerable:!0,configurable:!0});var m=x;Object.defineProperty(n,"FileWriteStream",{get:function(){return m},set:function(H){m=H},enumerable:!0,configurable:!0});function b(H,M){return this instanceof b?(g.apply(this,arguments),this):b.apply(Object.create(b.prototype),arguments)}function w(){var H=this;J(H.path,H.flags,H.mode,function(M,L){M?(H.autoClose&&H.destroy(),H.emit("error",M)):(H.fd=L,H.emit("open",L),H.read())})}function x(H,M){return this instanceof x?(p.apply(this,arguments),this):x.apply(Object.create(x.prototype),arguments)}function T(){var H=this;J(H.path,H.flags,H.mode,function(M,L){M?(H.destroy(),H.emit("error",M)):(H.fd=L,H.emit("open",L))})}function R(H,M){return new n.ReadStream(H,M)}function F(H,M){return new n.WriteStream(H,M)}var N=n.open;n.open=J;function J(H,M,L,O){return typeof L=="function"&&(O=L,L=null),Z(H,M,L,O);function Z(ne,be,He,$){return N(ne,be,He,function(B,G){B&&(B.code==="EMFILE"||B.code==="ENFILE")?uc([Z,[ne,be,He,$]]):(typeof $=="function"&&$.apply(this,arguments),Xs())})}}return n}function uc(n){Wd("ENQUEUE",n[0].name,n[1]),Ii[Hr].push(n)}function Xs(){var n=Ii[Hr].shift();n&&(Wd("RETRY",n[0].name,n[1]),n[0].apply(null,n[1]))}});var yl=y(Gs=>{"use strict";var EM=Dn().fromCallback,Un=on(),bre=["access","appendFile","chmod","chown","close","copyFile","fchmod","fchown","fdatasync","fstat","fsync","ftruncate","futimes","lchmod","lchown","link","lstat","mkdir","mkdtemp","open","opendir","readdir","readFile","readlink","realpath","rename","rm","rmdir","stat","symlink","truncate","unlink","utimes","writeFile"].filter(n=>typeof Un[n]=="function");Object.assign(Gs,Un);bre.forEach(n=>{Gs[n]=EM(Un[n])});Gs.realpath.native=EM(Un.realpath.native);Gs.exists=function(n,e){return typeof e=="function"?Un.exists(n,e):new Promise(t=>Un.exists(n,t))};Gs.read=function(n,e,t,i,r,o){return typeof o=="function"?Un.read(n,e,t,i,r,o):new Promise((s,a)=>{Un.read(n,e,t,i,r,(l,u,c)=>{if(l)return a(l);s({bytesRead:u,buffer:c})})})};Gs.write=function(n,e,...t){return typeof t[t.length-1]=="function"?Un.write(n,e,...t):new Promise((i,r)=>{Un.write(n,e,...t,(o,s,a)=>{if(o)return r(o);i({bytesWritten:s,buffer:a})})})};typeof Un.writev=="function"&&(Gs.writev=function(n,e,...t){return typeof t[t.length-1]=="function"?Un.writev(n,e,...t):new Promise((i,r)=>{Un.writev(n,e,...t,(o,s,a)=>{if(o)return r(o);i({bytesWritten:s,buffers:a})})})})});var _M=y((xPe,RM)=>{"use strict";var yre=require("path");RM.exports.checkPath=function(e){if(process.platform==="win32"&&/[<>:"|?*]/.test(e.replace(yre.parse(e).root,""))){let i=new Error(`Path contains invalid characters: ${e}`);throw i.code="EINVAL",i}}});var jM=y((CPe,aT)=>{"use strict";var LM=yl(),{checkPath:IM}=_M(),FM=n=>{let e={mode:511};return typeof n=="number"?n:{...e,...n}.mode};aT.exports.makeDir=async(n,e)=>(IM(n),LM.mkdir(n,{mode:FM(e),recursive:!0}));aT.exports.makeDirSync=(n,e)=>(IM(n),LM.mkdirSync(n,{mode:FM(e),recursive:!0}))});var qr=y((SPe,MM)=>{"use strict";var vre=Dn().fromPromise,{makeDir:wre,makeDirSync:lT}=jM(),uT=vre(wre);MM.exports={mkdirs:uT,mkdirsSync:lT,mkdirp:uT,mkdirpSync:lT,ensureDir:uT,ensureDirSync:lT}});var cT=y((DPe,OM)=>{"use strict";var cc=on();function xre(n,e,t,i){cc.open(n,"r+",(r,o)=>{if(r)return i(r);cc.futimes(o,e,t,s=>{cc.close(o,a=>{i&&i(s||a)})})})}function Cre(n,e,t){let i=cc.openSync(n,"r+");return cc.futimesSync(i,e,t),cc.closeSync(i)}OM.exports={utimesMillis:xre,utimesMillisSync:Cre}});var vl=y((TPe,HM)=>{"use strict";var hc=yl(),yi=require("path"),Sre=require("util");function Dre(n,e,t){let i=t.dereference?r=>hc.stat(r,{bigint:!0}):r=>hc.lstat(r,{bigint:!0});return Promise.all([i(n),i(e).catch(r=>{if(r.code==="ENOENT")return null;throw r})]).then(([r,o])=>({srcStat:r,destStat:o}))}function Tre(n,e,t){let i,r=t.dereference?s=>hc.statSync(s,{bigint:!0}):s=>hc.lstatSync(s,{bigint:!0}),o=r(n);try{i=r(e)}catch(s){if(s.code==="ENOENT")return{srcStat:o,destStat:null};throw s}return{srcStat:o,destStat:i}}function kre(n,e,t,i,r){Sre.callbackify(Dre)(n,e,i,(o,s)=>{if(o)return r(o);let{srcStat:a,destStat:l}=s;if(l){if(Yd(a,l)){let u=yi.basename(n),c=yi.basename(e);return t==="move"&&u!==c&&u.toLowerCase()===c.toLowerCase()?r(null,{srcStat:a,destStat:l,isChangingCase:!0}):r(new Error("Source and destination must not be the same."))}if(a.isDirectory()&&!l.isDirectory())return r(new Error(`Cannot overwrite non-directory '${e}' with directory '${n}'.`));if(!a.isDirectory()&&l.isDirectory())return r(new Error(`Cannot overwrite directory '${e}' with non-directory '${n}'.`))}return a.isDirectory()&&hT(n,e)?r(new Error(My(n,e,t))):r(null,{srcStat:a,destStat:l})})}function Pre(n,e,t,i){let{srcStat:r,destStat:o}=Tre(n,e,i);if(o){if(Yd(r,o)){let s=yi.basename(n),a=yi.basename(e);if(t==="move"&&s!==a&&s.toLowerCase()===a.toLowerCase())return{srcStat:r,destStat:o,isChangingCase:!0};throw new Error("Source and destination must not be the same.")}if(r.isDirectory()&&!o.isDirectory())throw new Error(`Cannot overwrite non-directory '${e}' with directory '${n}'.`);if(!r.isDirectory()&&o.isDirectory())throw new Error(`Cannot overwrite directory '${e}' with non-directory '${n}'.`)}if(r.isDirectory()&&hT(n,e))throw new Error(My(n,e,t));return{srcStat:r,destStat:o}}function AM(n,e,t,i,r){let o=yi.resolve(yi.dirname(n)),s=yi.resolve(yi.dirname(t));if(s===o||s===yi.parse(s).root)return r();hc.stat(s,{bigint:!0},(a,l)=>a?a.code==="ENOENT"?r():r(a):Yd(e,l)?r(new Error(My(n,t,i))):AM(n,e,s,i,r))}function NM(n,e,t,i){let r=yi.resolve(yi.dirname(n)),o=yi.resolve(yi.dirname(t));if(o===r||o===yi.parse(o).root)return;let s;try{s=hc.statSync(o,{bigint:!0})}catch(a){if(a.code==="ENOENT")return;throw a}if(Yd(e,s))throw new Error(My(n,t,i));return NM(n,e,o,i)}function Yd(n,e){return e.ino&&e.dev&&e.ino===n.ino&&e.dev===n.dev}function hT(n,e){let t=yi.resolve(n).split(yi.sep).filter(r=>r),i=yi.resolve(e).split(yi.sep).filter(r=>r);return t.reduce((r,o,s)=>r&&i[s]===o,!0)}function My(n,e,t){return`Cannot ${t} '${n}' to a subdirectory of itself, '${e}'.`}HM.exports={checkPaths:kre,checkPathsSync:Pre,checkParentPaths:AM,checkParentPathsSync:NM,isSrcSubdir:hT,areIdentical:Yd}});var ZM=y((kPe,YM)=>{"use strict";var Zi=on(),Zd=require("path"),Ere=qr().mkdirsSync,Rre=cT().utimesMillisSync,Jd=vl();function _re(n,e,t){typeof t=="function"&&(t={filter:t}),t=t||{},t.clobber="clobber"in t?!!t.clobber:!0,t.overwrite="overwrite"in t?!!t.overwrite:t.clobber,t.preserveTimestamps&&process.arch==="ia32"&&console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended; - - see https://github.com/jprichardson/node-fs-extra/issues/269`);let{srcStat:i,destStat:r}=Jd.checkPathsSync(n,e,"copy",t);return Jd.checkParentPathsSync(n,i,e,"copy"),Lre(r,n,e,t)}function Lre(n,e,t,i){if(i.filter&&!i.filter(e,t))return;let r=Zd.dirname(t);return Zi.existsSync(r)||Ere(r),qM(n,e,t,i)}function Ire(n,e,t,i){if(!(i.filter&&!i.filter(e,t)))return qM(n,e,t,i)}function qM(n,e,t,i){let o=(i.dereference?Zi.statSync:Zi.lstatSync)(e);if(o.isDirectory())return Hre(o,n,e,t,i);if(o.isFile()||o.isCharacterDevice()||o.isBlockDevice())return Fre(o,n,e,t,i);if(o.isSymbolicLink())return Wre(n,e,t,i);throw o.isSocket()?new Error(`Cannot copy a socket file: ${e}`):o.isFIFO()?new Error(`Cannot copy a FIFO pipe: ${e}`):new Error(`Unknown file: ${e}`)}function Fre(n,e,t,i,r){return e?jre(n,t,i,r):BM(n,t,i,r)}function jre(n,e,t,i){if(i.overwrite)return Zi.unlinkSync(t),BM(n,e,t,i);if(i.errorOnExist)throw new Error(`'${t}' already exists`)}function BM(n,e,t,i){return Zi.copyFileSync(e,t),i.preserveTimestamps&&Mre(n.mode,e,t),dT(t,n.mode)}function Mre(n,e,t){return Ore(n)&&Are(t,n),Nre(e,t)}function Ore(n){return(n&128)===0}function Are(n,e){return dT(n,e|128)}function dT(n,e){return Zi.chmodSync(n,e)}function Nre(n,e){let t=Zi.statSync(n);return Rre(e,t.atime,t.mtime)}function Hre(n,e,t,i,r){return e?WM(t,i,r):qre(n.mode,t,i,r)}function qre(n,e,t,i){return Zi.mkdirSync(t),WM(e,t,i),dT(t,n)}function WM(n,e,t){Zi.readdirSync(n).forEach(i=>Bre(i,n,e,t))}function Bre(n,e,t,i){let r=Zd.join(e,n),o=Zd.join(t,n),{destStat:s}=Jd.checkPathsSync(r,o,"copy",i);return Ire(s,r,o,i)}function Wre(n,e,t,i){let r=Zi.readlinkSync(e);if(i.dereference&&(r=Zd.resolve(process.cwd(),r)),n){let o;try{o=Zi.readlinkSync(t)}catch(s){if(s.code==="EINVAL"||s.code==="UNKNOWN")return Zi.symlinkSync(r,t);throw s}if(i.dereference&&(o=Zd.resolve(process.cwd(),o)),Jd.isSrcSubdir(r,o))throw new Error(`Cannot copy '${r}' to a subdirectory of itself, '${o}'.`);if(Zi.statSync(t).isDirectory()&&Jd.isSrcSubdir(o,r))throw new Error(`Cannot overwrite '${o}' with '${r}'.`);return Yre(r,t)}else return Zi.symlinkSync(r,t)}function Yre(n,e){return Zi.unlinkSync(e),Zi.symlinkSync(n,e)}YM.exports=_re});var gT=y((PPe,JM)=>{"use strict";JM.exports={copySync:ZM()}});var zs=y((EPe,UM)=>{"use strict";var Zre=Dn().fromPromise,$M=yl();function Jre(n){return $M.access(n).then(()=>!0).catch(()=>!1)}UM.exports={pathExists:Zre(Jre),pathExistsSync:$M.existsSync}});var tO=y((RPe,eO)=>{"use strict";var Tn=on(),$d=require("path"),$re=qr().mkdirs,Ure=zs().pathExists,Xre=cT().utimesMillis,Ud=vl();function Gre(n,e,t,i){typeof t=="function"&&!i?(i=t,t={}):typeof t=="function"&&(t={filter:t}),i=i||function(){},t=t||{},t.clobber="clobber"in t?!!t.clobber:!0,t.overwrite="overwrite"in t?!!t.overwrite:t.clobber,t.preserveTimestamps&&process.arch==="ia32"&&console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended; - - see https://github.com/jprichardson/node-fs-extra/issues/269`),Ud.checkPaths(n,e,"copy",t,(r,o)=>{if(r)return i(r);let{srcStat:s,destStat:a}=o;Ud.checkParentPaths(n,s,e,"copy",l=>l?i(l):t.filter?zM(XM,a,n,e,t,i):XM(a,n,e,t,i))})}function XM(n,e,t,i,r){let o=$d.dirname(t);Ure(o,(s,a)=>{if(s)return r(s);if(a)return Oy(n,e,t,i,r);$re(o,l=>l?r(l):Oy(n,e,t,i,r))})}function zM(n,e,t,i,r,o){Promise.resolve(r.filter(t,i)).then(s=>s?n(e,t,i,r,o):o(),s=>o(s))}function zre(n,e,t,i,r){return i.filter?zM(Oy,n,e,t,i,r):Oy(n,e,t,i,r)}function Oy(n,e,t,i,r){(i.dereference?Tn.stat:Tn.lstat)(e,(s,a)=>s?r(s):a.isDirectory()?noe(a,n,e,t,i,r):a.isFile()||a.isCharacterDevice()||a.isBlockDevice()?Kre(a,n,e,t,i,r):a.isSymbolicLink()?soe(n,e,t,i,r):a.isSocket()?r(new Error(`Cannot copy a socket file: ${e}`)):a.isFIFO()?r(new Error(`Cannot copy a FIFO pipe: ${e}`)):r(new Error(`Unknown file: ${e}`)))}function Kre(n,e,t,i,r,o){return e?Qre(n,t,i,r,o):KM(n,t,i,r,o)}function Qre(n,e,t,i,r){if(i.overwrite)Tn.unlink(t,o=>o?r(o):KM(n,e,t,i,r));else return i.errorOnExist?r(new Error(`'${t}' already exists`)):r()}function KM(n,e,t,i,r){Tn.copyFile(e,t,o=>o?r(o):i.preserveTimestamps?Vre(n.mode,e,t,r):Ay(t,n.mode,r))}function Vre(n,e,t,i){return eoe(n)?toe(t,n,r=>r?i(r):GM(n,e,t,i)):GM(n,e,t,i)}function eoe(n){return(n&128)===0}function toe(n,e,t){return Ay(n,e|128,t)}function GM(n,e,t,i){ioe(e,t,r=>r?i(r):Ay(t,n,i))}function Ay(n,e,t){return Tn.chmod(n,e,t)}function ioe(n,e,t){Tn.stat(n,(i,r)=>i?t(i):Xre(e,r.atime,r.mtime,t))}function noe(n,e,t,i,r,o){return e?QM(t,i,r,o):roe(n.mode,t,i,r,o)}function roe(n,e,t,i,r){Tn.mkdir(t,o=>{if(o)return r(o);QM(e,t,i,s=>s?r(s):Ay(t,n,r))})}function QM(n,e,t,i){Tn.readdir(n,(r,o)=>r?i(r):VM(o,n,e,t,i))}function VM(n,e,t,i,r){let o=n.pop();return o?ooe(n,o,e,t,i,r):r()}function ooe(n,e,t,i,r,o){let s=$d.join(t,e),a=$d.join(i,e);Ud.checkPaths(s,a,"copy",r,(l,u)=>{if(l)return o(l);let{destStat:c}=u;zre(c,s,a,r,h=>h?o(h):VM(n,t,i,r,o))})}function soe(n,e,t,i,r){Tn.readlink(e,(o,s)=>{if(o)return r(o);if(i.dereference&&(s=$d.resolve(process.cwd(),s)),n)Tn.readlink(t,(a,l)=>a?a.code==="EINVAL"||a.code==="UNKNOWN"?Tn.symlink(s,t,r):r(a):(i.dereference&&(l=$d.resolve(process.cwd(),l)),Ud.isSrcSubdir(s,l)?r(new Error(`Cannot copy '${s}' to a subdirectory of itself, '${l}'.`)):n.isDirectory()&&Ud.isSrcSubdir(l,s)?r(new Error(`Cannot overwrite '${l}' with '${s}'.`)):aoe(s,t,r)));else return Tn.symlink(s,t,r)})}function aoe(n,e,t){Tn.unlink(e,i=>i?t(i):Tn.symlink(n,e,t))}eO.exports=Gre});var pT=y((_Pe,iO)=>{"use strict";var loe=Dn().fromCallback;iO.exports={copy:loe(tO())}});var hO=y((LPe,cO)=>{"use strict";var nO=on(),aO=require("path"),pt=require("assert"),Xd=process.platform==="win32";function lO(n){["unlink","chmod","stat","lstat","rmdir","readdir"].forEach(t=>{n[t]=n[t]||nO[t],t=t+"Sync",n[t]=n[t]||nO[t]}),n.maxBusyTries=n.maxBusyTries||3}function fT(n,e,t){let i=0;typeof e=="function"&&(t=e,e={}),pt(n,"rimraf: missing path"),pt.strictEqual(typeof n,"string","rimraf: path should be a string"),pt.strictEqual(typeof t,"function","rimraf: callback function required"),pt(e,"rimraf: invalid options argument provided"),pt.strictEqual(typeof e,"object","rimraf: options should be object"),lO(e),rO(n,e,function r(o){if(o){if((o.code==="EBUSY"||o.code==="ENOTEMPTY"||o.code==="EPERM")&&irO(n,e,r),s)}o.code==="ENOENT"&&(o=null)}t(o)})}function rO(n,e,t){pt(n),pt(e),pt(typeof t=="function"),e.lstat(n,(i,r)=>{if(i&&i.code==="ENOENT")return t(null);if(i&&i.code==="EPERM"&&Xd)return oO(n,e,i,t);if(r&&r.isDirectory())return Ny(n,e,i,t);e.unlink(n,o=>{if(o){if(o.code==="ENOENT")return t(null);if(o.code==="EPERM")return Xd?oO(n,e,o,t):Ny(n,e,o,t);if(o.code==="EISDIR")return Ny(n,e,o,t)}return t(o)})})}function oO(n,e,t,i){pt(n),pt(e),pt(typeof i=="function"),e.chmod(n,438,r=>{r?i(r.code==="ENOENT"?null:t):e.stat(n,(o,s)=>{o?i(o.code==="ENOENT"?null:t):s.isDirectory()?Ny(n,e,t,i):e.unlink(n,i)})})}function sO(n,e,t){let i;pt(n),pt(e);try{e.chmodSync(n,438)}catch(r){if(r.code==="ENOENT")return;throw t}try{i=e.statSync(n)}catch(r){if(r.code==="ENOENT")return;throw t}i.isDirectory()?Hy(n,e,t):e.unlinkSync(n)}function Ny(n,e,t,i){pt(n),pt(e),pt(typeof i=="function"),e.rmdir(n,r=>{r&&(r.code==="ENOTEMPTY"||r.code==="EEXIST"||r.code==="EPERM")?uoe(n,e,i):r&&r.code==="ENOTDIR"?i(t):i(r)})}function uoe(n,e,t){pt(n),pt(e),pt(typeof t=="function"),e.readdir(n,(i,r)=>{if(i)return t(i);let o=r.length,s;if(o===0)return e.rmdir(n,t);r.forEach(a=>{fT(aO.join(n,a),e,l=>{if(!s){if(l)return t(s=l);--o===0&&e.rmdir(n,t)}})})})}function uO(n,e){let t;e=e||{},lO(e),pt(n,"rimraf: missing path"),pt.strictEqual(typeof n,"string","rimraf: path should be a string"),pt(e,"rimraf: missing options"),pt.strictEqual(typeof e,"object","rimraf: options should be object");try{t=e.lstatSync(n)}catch(i){if(i.code==="ENOENT")return;i.code==="EPERM"&&Xd&&sO(n,e,i)}try{t&&t.isDirectory()?Hy(n,e,null):e.unlinkSync(n)}catch(i){if(i.code==="ENOENT")return;if(i.code==="EPERM")return Xd?sO(n,e,i):Hy(n,e,i);if(i.code!=="EISDIR")throw i;Hy(n,e,i)}}function Hy(n,e,t){pt(n),pt(e);try{e.rmdirSync(n)}catch(i){if(i.code==="ENOTDIR")throw t;if(i.code==="ENOTEMPTY"||i.code==="EEXIST"||i.code==="EPERM")coe(n,e);else if(i.code!=="ENOENT")throw i}}function coe(n,e){if(pt(n),pt(e),e.readdirSync(n).forEach(t=>uO(aO.join(n,t),e)),Xd){let t=Date.now();do try{return e.rmdirSync(n,e)}catch{}while(Date.now()-t<500)}else return e.rmdirSync(n,e)}cO.exports=fT;fT.sync=uO});var Gd=y((IPe,gO)=>{"use strict";var qy=on(),hoe=Dn().fromCallback,dO=hO();function doe(n,e){if(qy.rm)return qy.rm(n,{recursive:!0,force:!0},e);dO(n,e)}function goe(n){if(qy.rmSync)return qy.rmSync(n,{recursive:!0,force:!0});dO.sync(n)}gO.exports={remove:hoe(doe),removeSync:goe}});var xO=y((FPe,wO)=>{"use strict";var poe=Dn().fromPromise,mO=yl(),bO=require("path"),yO=qr(),vO=Gd(),pO=poe(async function(e){let t;try{t=await mO.readdir(e)}catch{return yO.mkdirs(e)}return Promise.all(t.map(i=>vO.remove(bO.join(e,i))))});function fO(n){let e;try{e=mO.readdirSync(n)}catch{return yO.mkdirsSync(n)}e.forEach(t=>{t=bO.join(n,t),vO.removeSync(t)})}wO.exports={emptyDirSync:fO,emptydirSync:fO,emptyDir:pO,emptydir:pO}});var TO=y((jPe,DO)=>{"use strict";var foe=Dn().fromCallback,CO=require("path"),Ks=on(),SO=qr();function moe(n,e){function t(){Ks.writeFile(n,"",i=>{if(i)return e(i);e()})}Ks.stat(n,(i,r)=>{if(!i&&r.isFile())return e();let o=CO.dirname(n);Ks.stat(o,(s,a)=>{if(s)return s.code==="ENOENT"?SO.mkdirs(o,l=>{if(l)return e(l);t()}):e(s);a.isDirectory()?t():Ks.readdir(o,l=>{if(l)return e(l)})})})}function boe(n){let e;try{e=Ks.statSync(n)}catch{}if(e&&e.isFile())return;let t=CO.dirname(n);try{Ks.statSync(t).isDirectory()||Ks.readdirSync(t)}catch(i){if(i&&i.code==="ENOENT")SO.mkdirsSync(t);else throw i}Ks.writeFileSync(n,"")}DO.exports={createFile:foe(moe),createFileSync:boe}});var _O=y((MPe,RO)=>{"use strict";var yoe=Dn().fromCallback,kO=require("path"),Qs=on(),PO=qr(),voe=zs().pathExists,{areIdentical:EO}=vl();function woe(n,e,t){function i(r,o){Qs.link(r,o,s=>{if(s)return t(s);t(null)})}Qs.lstat(e,(r,o)=>{Qs.lstat(n,(s,a)=>{if(s)return s.message=s.message.replace("lstat","ensureLink"),t(s);if(o&&EO(a,o))return t(null);let l=kO.dirname(e);voe(l,(u,c)=>{if(u)return t(u);if(c)return i(n,e);PO.mkdirs(l,h=>{if(h)return t(h);i(n,e)})})})})}function xoe(n,e){let t;try{t=Qs.lstatSync(e)}catch{}try{let o=Qs.lstatSync(n);if(t&&EO(o,t))return}catch(o){throw o.message=o.message.replace("lstat","ensureLink"),o}let i=kO.dirname(e);return Qs.existsSync(i)||PO.mkdirsSync(i),Qs.linkSync(n,e)}RO.exports={createLink:yoe(woe),createLinkSync:xoe}});var IO=y((OPe,LO)=>{"use strict";var Vs=require("path"),zd=on(),Coe=zs().pathExists;function Soe(n,e,t){if(Vs.isAbsolute(n))return zd.lstat(n,i=>i?(i.message=i.message.replace("lstat","ensureSymlink"),t(i)):t(null,{toCwd:n,toDst:n}));{let i=Vs.dirname(e),r=Vs.join(i,n);return Coe(r,(o,s)=>o?t(o):s?t(null,{toCwd:r,toDst:n}):zd.lstat(n,a=>a?(a.message=a.message.replace("lstat","ensureSymlink"),t(a)):t(null,{toCwd:n,toDst:Vs.relative(i,n)})))}}function Doe(n,e){let t;if(Vs.isAbsolute(n)){if(t=zd.existsSync(n),!t)throw new Error("absolute srcpath does not exist");return{toCwd:n,toDst:n}}else{let i=Vs.dirname(e),r=Vs.join(i,n);if(t=zd.existsSync(r),t)return{toCwd:r,toDst:n};if(t=zd.existsSync(n),!t)throw new Error("relative srcpath does not exist");return{toCwd:n,toDst:Vs.relative(i,n)}}}LO.exports={symlinkPaths:Soe,symlinkPathsSync:Doe}});var MO=y((APe,jO)=>{"use strict";var FO=on();function Toe(n,e,t){if(t=typeof e=="function"?e:t,e=typeof e=="function"?!1:e,e)return t(null,e);FO.lstat(n,(i,r)=>{if(i)return t(null,"file");e=r&&r.isDirectory()?"dir":"file",t(null,e)})}function koe(n,e){let t;if(e)return e;try{t=FO.lstatSync(n)}catch{return"file"}return t&&t.isDirectory()?"dir":"file"}jO.exports={symlinkType:Toe,symlinkTypeSync:koe}});var YO=y((NPe,WO)=>{"use strict";var Poe=Dn().fromCallback,AO=require("path"),Br=yl(),NO=qr(),Eoe=NO.mkdirs,Roe=NO.mkdirsSync,HO=IO(),_oe=HO.symlinkPaths,Loe=HO.symlinkPathsSync,qO=MO(),Ioe=qO.symlinkType,Foe=qO.symlinkTypeSync,joe=zs().pathExists,{areIdentical:BO}=vl();function Moe(n,e,t,i){i=typeof t=="function"?t:i,t=typeof t=="function"?!1:t,Br.lstat(e,(r,o)=>{!r&&o.isSymbolicLink()?Promise.all([Br.stat(n),Br.stat(e)]).then(([s,a])=>{if(BO(s,a))return i(null);OO(n,e,t,i)}):OO(n,e,t,i)})}function OO(n,e,t,i){_oe(n,e,(r,o)=>{if(r)return i(r);n=o.toDst,Ioe(o.toCwd,t,(s,a)=>{if(s)return i(s);let l=AO.dirname(e);joe(l,(u,c)=>{if(u)return i(u);if(c)return Br.symlink(n,e,a,i);Eoe(l,h=>{if(h)return i(h);Br.symlink(n,e,a,i)})})})})}function Ooe(n,e,t){let i;try{i=Br.lstatSync(e)}catch{}if(i&&i.isSymbolicLink()){let a=Br.statSync(n),l=Br.statSync(e);if(BO(a,l))return}let r=Loe(n,e);n=r.toDst,t=Foe(r.toCwd,t);let o=AO.dirname(e);return Br.existsSync(o)||Roe(o),Br.symlinkSync(n,e,t)}WO.exports={createSymlink:Poe(Moe),createSymlinkSync:Ooe}});var JO=y((HPe,ZO)=>{"use strict";var By=TO(),Wy=_O(),Yy=YO();ZO.exports={createFile:By.createFile,createFileSync:By.createFileSync,ensureFile:By.createFile,ensureFileSync:By.createFileSync,createLink:Wy.createLink,createLinkSync:Wy.createLinkSync,ensureLink:Wy.createLink,ensureLinkSync:Wy.createLinkSync,createSymlink:Yy.createSymlink,createSymlinkSync:Yy.createSymlinkSync,ensureSymlink:Yy.createSymlink,ensureSymlinkSync:Yy.createSymlinkSync}});var Zy=y((qPe,$O)=>{function Aoe(n,{EOL:e=` -`,finalEOL:t=!0,replacer:i=null,spaces:r}={}){let o=t?e:"";return JSON.stringify(n,i,r).replace(/\n/g,e)+o}function Noe(n){return Buffer.isBuffer(n)&&(n=n.toString("utf8")),n.replace(/^\uFEFF/,"")}$O.exports={stringify:Aoe,stripBom:Noe}});var zO=y((BPe,GO)=>{var dc;try{dc=on()}catch{dc=require("fs")}var Jy=Dn(),{stringify:UO,stripBom:XO}=Zy();async function Hoe(n,e={}){typeof e=="string"&&(e={encoding:e});let t=e.fs||dc,i="throws"in e?e.throws:!0,r=await Jy.fromCallback(t.readFile)(n,e);r=XO(r);let o;try{o=JSON.parse(r,e?e.reviver:null)}catch(s){if(i)throw s.message=`${n}: ${s.message}`,s;return null}return o}var qoe=Jy.fromPromise(Hoe);function Boe(n,e={}){typeof e=="string"&&(e={encoding:e});let t=e.fs||dc,i="throws"in e?e.throws:!0;try{let r=t.readFileSync(n,e);return r=XO(r),JSON.parse(r,e.reviver)}catch(r){if(i)throw r.message=`${n}: ${r.message}`,r;return null}}async function Woe(n,e,t={}){let i=t.fs||dc,r=UO(e,t);await Jy.fromCallback(i.writeFile)(n,r,t)}var Yoe=Jy.fromPromise(Woe);function Zoe(n,e,t={}){let i=t.fs||dc,r=UO(e,t);return i.writeFileSync(n,r,t)}var Joe={readFile:qoe,readFileSync:Boe,writeFile:Yoe,writeFileSync:Zoe};GO.exports=Joe});var QO=y((WPe,KO)=>{"use strict";var $y=zO();KO.exports={readJson:$y.readFile,readJsonSync:$y.readFileSync,writeJson:$y.writeFile,writeJsonSync:$y.writeFileSync}});var Uy=y((YPe,t1)=>{"use strict";var $oe=Dn().fromCallback,Kd=on(),VO=require("path"),e1=qr(),Uoe=zs().pathExists;function Xoe(n,e,t,i){typeof t=="function"&&(i=t,t="utf8");let r=VO.dirname(n);Uoe(r,(o,s)=>{if(o)return i(o);if(s)return Kd.writeFile(n,e,t,i);e1.mkdirs(r,a=>{if(a)return i(a);Kd.writeFile(n,e,t,i)})})}function Goe(n,...e){let t=VO.dirname(n);if(Kd.existsSync(t))return Kd.writeFileSync(n,...e);e1.mkdirsSync(t),Kd.writeFileSync(n,...e)}t1.exports={outputFile:$oe(Xoe),outputFileSync:Goe}});var n1=y((ZPe,i1)=>{"use strict";var{stringify:zoe}=Zy(),{outputFile:Koe}=Uy();async function Qoe(n,e,t={}){let i=zoe(e,t);await Koe(n,i,t)}i1.exports=Qoe});var o1=y((JPe,r1)=>{"use strict";var{stringify:Voe}=Zy(),{outputFileSync:ese}=Uy();function tse(n,e,t){let i=Voe(e,t);ese(n,i,t)}r1.exports=tse});var a1=y(($Pe,s1)=>{"use strict";var ise=Dn().fromPromise,sn=QO();sn.outputJson=ise(n1());sn.outputJsonSync=o1();sn.outputJSON=sn.outputJson;sn.outputJSONSync=sn.outputJsonSync;sn.writeJSON=sn.writeJson;sn.writeJSONSync=sn.writeJsonSync;sn.readJSON=sn.readJson;sn.readJSONSync=sn.readJsonSync;s1.exports=sn});var d1=y((UPe,h1)=>{"use strict";var u1=on(),bT=require("path"),nse=gT().copySync,c1=Gd().removeSync,rse=qr().mkdirpSync,l1=vl();function ose(n,e,t){t=t||{};let i=t.overwrite||t.clobber||!1,{srcStat:r,isChangingCase:o=!1}=l1.checkPathsSync(n,e,"move",t);return l1.checkParentPathsSync(n,r,e,"move"),sse(e)||rse(bT.dirname(e)),ase(n,e,i,o)}function sse(n){let e=bT.dirname(n);return bT.parse(e).root===e}function ase(n,e,t,i){if(i)return mT(n,e,t);if(t)return c1(e),mT(n,e,t);if(u1.existsSync(e))throw new Error("dest already exists.");return mT(n,e,t)}function mT(n,e,t){try{u1.renameSync(n,e)}catch(i){if(i.code!=="EXDEV")throw i;return lse(n,e,t)}}function lse(n,e,t){return nse(n,e,{overwrite:t,errorOnExist:!0}),c1(n)}h1.exports=ose});var p1=y((XPe,g1)=>{"use strict";g1.exports={moveSync:d1()}});var v1=y((GPe,y1)=>{"use strict";var use=on(),vT=require("path"),cse=pT().copy,b1=Gd().remove,hse=qr().mkdirp,dse=zs().pathExists,f1=vl();function gse(n,e,t,i){typeof t=="function"&&(i=t,t={});let r=t.overwrite||t.clobber||!1;f1.checkPaths(n,e,"move",t,(o,s)=>{if(o)return i(o);let{srcStat:a,isChangingCase:l=!1}=s;f1.checkParentPaths(n,a,e,"move",u=>{if(u)return i(u);if(pse(e))return m1(n,e,r,l,i);hse(vT.dirname(e),c=>c?i(c):m1(n,e,r,l,i))})})}function pse(n){let e=vT.dirname(n);return vT.parse(e).root===e}function m1(n,e,t,i,r){if(i)return yT(n,e,t,r);if(t)return b1(e,o=>o?r(o):yT(n,e,t,r));dse(e,(o,s)=>o?r(o):s?r(new Error("dest already exists.")):yT(n,e,t,r))}function yT(n,e,t,i){use.rename(n,e,r=>r?r.code!=="EXDEV"?i(r):fse(n,e,t,i):i())}function fse(n,e,t,i){cse(n,e,{overwrite:t,errorOnExist:!0},o=>o?i(o):b1(n,i))}y1.exports=gse});var x1=y((zPe,w1)=>{"use strict";var mse=Dn().fromCallback;w1.exports={move:mse(v1())}});var wT=y((KPe,C1)=>{"use strict";C1.exports={...yl(),...gT(),...pT(),...xO(),...JO(),...a1(),...qr(),...p1(),...x1(),...Uy(),...zs(),...Gd()}});var D1=y((QPe,S1)=>{S1.exports=()=>new Date});var k1=y((VPe,T1)=>{var bse=Yt()("streamroller:fileNameFormatter"),yse=require("path"),vse=".gz",wse=".";T1.exports=({file:n,keepFileExt:e,needsIndex:t,alwaysIncludeDate:i,compress:r,fileNameSep:o})=>{let s=o||wse,a=yse.join(n.dir,n.name),l=g=>g+n.ext,u=(g,p,f)=>(t||!f)&&p?g+s+p:g,c=(g,p,f)=>(p>0||i)&&f?g+s+f:g,h=(g,p)=>p&&r?g+vse:g,d=e?[c,u,l,h]:[l,c,u,h];return({date:g,index:p})=>(bse(`_formatFileName: date=${g}, index=${p}`),d.reduce((f,m)=>m(f,p,g),a))}});var _1=y((e0e,R1)=>{var wl=Yt()("streamroller:fileNameParser"),P1=".gz",E1=Py(),xse=".";R1.exports=({file:n,keepFileExt:e,pattern:t,fileNameSep:i})=>{let r=i||xse,o=(d,g)=>d.endsWith(P1)?(wl("it is gzipped"),g.isCompressed=!0,d.slice(0,-1*P1.length)):d,s="__NOT_MATCHING__",h=[o,e?d=>d.startsWith(n.name)&&d.endsWith(n.ext)?(wl("it starts and ends with the right things"),d.slice(n.name.length+1,-1*n.ext.length)):s:d=>d.startsWith(n.base)?(wl("it starts with the right things"),d.slice(n.base.length+1)):s,t?(d,g)=>{let p=d.split(r),f=p[p.length-1];wl("items: ",p,", indexStr: ",f);let m=d;f!==void 0&&f.match(/^\d+$/)?(m=d.slice(0,-1*(f.length+1)),wl(`dateStr is ${m}`),t&&!m&&(m=f,f="0")):f="0";try{let b=E1.parse(t,m,new Date(0,0));return E1.asString(t,b)!==m?d:(g.index=parseInt(f,10),g.date=m,g.timestamp=b.getTime(),"")}catch(b){return wl(`Problem parsing ${m} as ${t}, error was: `,b),d}}:(d,g)=>d.match(/^\d+$/)?(wl("it has an index"),g.index=parseInt(d,10),""):d];return d=>{let g={filename:d,index:0,isCompressed:!1};return h.reduce((f,m)=>m(f,g),d)?null:g}}});var I1=y((t0e,L1)=>{var ta=Yt()("streamroller:moveAndMaybeCompressFile"),ea=wT(),Cse=require("zlib"),Sse=function(n){let e={mode:parseInt("0600",8),compress:!1},t=Object.assign({},e,n);return ta(`_parseOption: moveAndMaybeCompressFile called with option=${JSON.stringify(t)}`),t},Dse=async(n,e,t)=>{if(t=Sse(t),n===e){ta("moveAndMaybeCompressFile: source and target are the same, not doing anything");return}if(await ea.pathExists(n))if(ta(`moveAndMaybeCompressFile: moving file from ${n} to ${e} ${t.compress?"with":"without"} compress`),t.compress)await new Promise((i,r)=>{ea.createReadStream(n).pipe(Cse.createGzip()).pipe(ea.createWriteStream(e,{mode:t.mode})).on("finish",()=>{ta(`moveAndMaybeCompressFile: finished compressing ${e}, deleting ${n}`),ea.unlink(n).then(i).catch(()=>{ta(`Deleting ${n} failed, truncating instead`),ea.truncate(n).then(i).catch(r)})})});else{ta(`moveAndMaybeCompressFile: deleting file=${e}, renaming ${n} to ${e}`);try{await ea.move(n,e,{overwrite:!0})}catch(i){ta(`moveAndMaybeCompressFile: error moving ${n} to ${e}`,i),ta("Trying copy+truncate instead"),await ea.copy(n,e,{overwrite:!0}),await ea.truncate(n)}}};L1.exports=Dse});var Ky=y((i0e,F1)=>{var Xn=Yt()("streamroller:RollingFileWriteStream"),Qd=wT(),Xy=require("path"),Gy=D1(),zy=Py(),{Writable:Tse}=require("stream"),kse=k1(),Pse=_1(),Ese=I1(),xT=class extends Tse{constructor(e,t){Xn(`constructor: creating RollingFileWriteStream. path=${e}`),super(t),this.options=this._parseOption(t),this.fileObject=Xy.parse(e),this.fileObject.dir===""&&(this.fileObject=Xy.parse(Xy.join(process.cwd(),e))),this.fileFormatter=kse({file:this.fileObject,alwaysIncludeDate:this.options.alwaysIncludePattern,needsIndex:this.options.maxSize 0`);if(i.numBackups||i.numBackups===0){if(i.numBackups<0)throw new Error(`options.numBackups (${i.numBackups}) should be >= 0`);if(i.numBackups>=Number.MAX_SAFE_INTEGER)throw new Error(`options.numBackups (${i.numBackups}) should be < Number.MAX_SAFE_INTEGER`);i.numToKeep=i.numBackups+1}else if(i.numToKeep<=0)throw new Error(`options.numToKeep (${i.numToKeep}) should be > 0`);return Xn(`_parseOption: creating stream with option=${JSON.stringify(i)}`),i}_final(e){this.currentFileStream.end("",this.options.encoding,e)}_write(e,t,i){this._shouldRoll().then(()=>{Xn(`_write: writing chunk. file=${this.currentFileStream.path} state=${JSON.stringify(this.state)} chunk=${e}`),this.currentFileStream.write(e,t,r=>{this.state.currentSize+=e.length,i(r)})})}async _shouldRoll(){(this._dateChanged()||this._tooBig())&&(Xn(`_shouldRoll: rolling because dateChanged? ${this._dateChanged()} or tooBig? ${this._tooBig()}`),await this._roll())}_dateChanged(){return this.state.currentDate&&this.state.currentDate!==zy(this.options.pattern,Gy())}_tooBig(){return this.state.currentSize>=this.options.maxSize}_roll(){return Xn("_roll: closing the current stream"),new Promise((e,t)=>{this.currentFileStream.end("",this.options.encoding,()=>{this._moveOldFiles().then(e).catch(t)})})}async _moveOldFiles(){let e=await this._getExistingFiles(),t=this.state.currentDate?e.filter(i=>i.date===this.state.currentDate):e;for(let i=t.length;i>=0;i--){Xn(`_moveOldFiles: i = ${i}`);let r=this.fileFormatter({date:this.state.currentDate,index:i}),o=this.fileFormatter({date:this.state.currentDate,index:i+1}),s={compress:this.options.compress&&i===0,mode:this.options.mode};await Ese(r,o,s)}this.state.currentSize=0,this.state.currentDate=this.state.currentDate?zy(this.options.pattern,Gy()):null,Xn(`_moveOldFiles: finished rolling files. state=${JSON.stringify(this.state)}`),this._renewWriteStream(),await new Promise((i,r)=>{this.currentFileStream.write("","utf8",()=>{this._clean().then(i).catch(r)})})}async _getExistingFiles(){let e=await Qd.readdir(this.fileObject.dir).catch(()=>[]);Xn(`_getExistingFiles: files=${e}`);let t=e.map(r=>this.fileNameParser(r)).filter(r=>r),i=r=>(r.timestamp?r.timestamp:Gy().getTime())-r.index;return t.sort((r,o)=>i(r)-i(o)),t}_renewWriteStream(){Qd.ensureDirSync(this.fileObject.dir);let e=this.fileFormatter({date:this.state.currentDate,index:0}),t={flags:this.options.flags,encoding:this.options.encoding,mode:this.options.mode};this.currentFileStream=Qd.createWriteStream(e,t),this.currentFileStream.on("error",i=>{this.emit("error",i)})}async _clean(){let e=await this._getExistingFiles();if(Xn(`_clean: numToKeep = ${this.options.numToKeep}, existingFiles = ${e.length}`),Xn("_clean: existing files are: ",e),this._tooManyFiles(e.length)){let t=e.slice(0,e.length-this.options.numToKeep).map(i=>Xy.format({dir:this.fileObject.dir,base:i.filename}));await Rse(t)}}_tooManyFiles(e){return this.options.numToKeep>0&&e>this.options.numToKeep}},Rse=n=>(Xn(`deleteFiles: files to delete: ${n}`),Promise.all(n.map(e=>Qd.unlink(e).catch(t=>{Xn(`deleteFiles: error when unlinking ${e}, ignoring. Error was ${t}`)}))));F1.exports=xT});var M1=y((n0e,j1)=>{var _se=Ky(),CT=class extends _se{constructor(e,t,i,r){r||(r={}),t&&(r.maxSize=t),!r.numBackups&&r.numBackups!==0&&(!i&&i!==0&&(i=1),r.numBackups=i),super(e,r),this.backups=r.numBackups,this.size=this.options.maxSize}get theStream(){return this.currentFileStream}};j1.exports=CT});var A1=y((r0e,O1)=>{var Lse=Ky(),ST=class extends Lse{constructor(e,t,i){t&&typeof t=="object"&&(i=t,t=null),i||(i={}),t||(t="yyyy-MM-dd"),i.pattern=t,!i.numBackups&&i.numBackups!==0?(!i.daysToKeep&&i.daysToKeep!==0?i.daysToKeep=1:process.emitWarning("options.daysToKeep is deprecated due the confusion it causes when used together with file size rolling. Please use options.numBackups instead.","DeprecationWarning","StreamRoller0001"),i.numBackups=i.daysToKeep):i.daysToKeep=i.numBackups,super(e,i),this.mode=this.options.mode}get theStream(){return this.currentFileStream}};O1.exports=ST});var DT=y((o0e,N1)=>{N1.exports={RollingFileWriteStream:Ky(),RollingFileStream:M1(),DateRollingFileStream:A1()}});var Y1=y((s0e,W1)=>{var H1=Yt()("log4js:file"),Ise=require("path"),Fse=DT(),jse=require("os"),Mse=jse.EOL,Qy=!1,Vy=new Set;function q1(){Vy.forEach(n=>{n.sighupHandler()})}function B1(n,e,t,i){let r=new Fse.RollingFileStream(n,e,t,i);return r.on("error",o=>{console.error("log4js.fileAppender - Writing to file %s, error happened ",n,o)}),r.on("drain",()=>{process.emit("log4js:pause",!1)}),r}function Ose(n,e,t,i,r,o){n=Ise.normalize(n),i=!i&&i!==0?5:i,H1("Creating file appender (",n,", ",t,", ",i,", ",r,", ",o,")");let s=B1(n,t,i,r),a=function(l){if(!!s.writable){if(r.removeColor===!0){let u=/\x1b[[0-9;]*m/g;l.data=l.data.map(c=>typeof c=="string"?c.replace(u,""):c)}s.write(e(l,o)+Mse,"utf8")||process.emit("log4js:pause",!0)}};return a.reopen=function(){s.end(()=>{s=B1(n,t,i,r)})},a.sighupHandler=function(){H1("SIGHUP handler called."),a.reopen()},a.shutdown=function(l){Vy.delete(a),Vy.size===0&&Qy&&(process.removeListener("SIGHUP",q1),Qy=!1),s.end("","utf-8",l)},Vy.add(a),Qy||(process.on("SIGHUP",q1),Qy=!0),a}function Ase(n,e){let t=e.basicLayout;return n.layout&&(t=e.layout(n.layout.type,n.layout)),n.mode=n.mode||384,Ose(n.filename,t,n.maxLogSize,n.backups,n,n.timezoneOffset)}W1.exports.configure=Ase});var J1=y((a0e,Z1)=>{var Nse=DT(),Hse=require("os"),qse=Hse.EOL;function Bse(n,e,t){let i=new Nse.DateRollingFileStream(n,e,t);return i.on("error",r=>{console.error("log4js.dateFileAppender - Writing to file %s, error happened ",n,r)}),i.on("drain",()=>{process.emit("log4js:pause",!1)}),i}function Wse(n,e,t,i,r){i.maxSize=i.maxLogSize;let o=Bse(n,e,i),s=function(a){!o.writable||o.write(t(a,r)+qse,"utf8")||process.emit("log4js:pause",!0)};return s.shutdown=function(a){o.end("","utf-8",a)},s}function Yse(n,e){let t=e.basicLayout;return n.layout&&(t=e.layout(n.layout.type,n.layout)),n.alwaysIncludePattern||(n.alwaysIncludePattern=!1),n.mode=n.mode||384,Wse(n.filename,n.pattern,t,n,n.timezoneOffset)}Z1.exports.configure=Yse});var X1=y((l0e,U1)=>{var zo=Yt()("log4js:fileSync"),gc=require("path"),Do=require("fs"),Zse=require("os"),Jse=Zse.EOL||` -`;function $1(n,e){if(Do.existsSync(n))return;let t=Do.openSync(n,e.flags,e.mode);Do.closeSync(t)}var TT=class{constructor(e,t,i,r){zo("In RollingFileStream");function o(){if(!e||!t||t<=0)throw new Error("You must specify a filename and file size")}o(),this.filename=e,this.size=t,this.backups=i,this.options=r,this.currentSize=0;function s(a){let l=0;try{l=Do.statSync(a).size}catch{$1(a,r)}return l}this.currentSize=s(this.filename)}shouldRoll(){return zo("should roll with current size %d, and max size %d",this.currentSize,this.size),this.currentSize>=this.size}roll(e){let t=this,i=new RegExp(`^${gc.basename(e)}`);function r(u){return i.test(u)}function o(u){return parseInt(u.substring(`${gc.basename(e)}.`.length),10)||0}function s(u,c){return o(u)>o(c)?1:o(u) ${e}.${c+1}`),Do.renameSync(gc.join(gc.dirname(e),u),`${e}.${c+1}`)}}function l(){zo("Renaming the old files"),Do.readdirSync(gc.dirname(e)).filter(r).sort(s).reverse().forEach(a)}zo("Rolling, rolling, rolling"),l()}write(e,t){let i=this;function r(){zo("writing the chunk to the file"),i.currentSize+=e.length,Do.appendFileSync(i.filename,e)}zo("in write"),this.shouldRoll()&&(this.currentSize=0,this.roll(this.filename)),r()}};function $se(n,e,t,i,r,o){zo("fileSync appender created"),n=gc.normalize(n),i=!i&&i!==0?5:i;function s(l,u,c){let h;return u?h=new TT(l,u,c,o):h=(d=>($1(d,o),{write(g){Do.appendFileSync(d,g)}}))(l),h}let a=s(n,t,i);return l=>{a.write(e(l,r)+Jse)}}function Use(n,e){let t=e.basicLayout;n.layout&&(t=e.layout(n.layout.type,n.layout));let i={flags:n.flags||"a",encoding:n.encoding||"utf8",mode:n.mode||384};return $se(n.filename,t,n.maxLogSize,n.backups,n.timezoneOffset,i)}U1.exports.configure=Use});var z1=y((u0e,G1)=>{var To=Yt()("log4js:tcp"),Xse=require("net");function Gse(n,e){let t=!1,i=[],r,o=3,s="__LOG4JS__";function a(h){To("Writing log event to socket"),t=r.write(`${e(h)}${s}`,"utf8")}function l(){let h;for(To("emptying buffer");h=i.shift();)a(h)}function u(){To(`appender creating socket to ${n.host||"localhost"}:${n.port||5e3}`),s=`${n.endMsg||"__LOG4JS__"}`,r=Xse.createConnection(n.port||5e3,n.host||"localhost"),r.on("connect",()=>{To("socket connected"),l(),t=!0}),r.on("drain",()=>{To("drain event received, emptying buffer"),t=!0,l()}),r.on("timeout",r.end.bind(r)),r.on("error",h=>{To("connection error",h),t=!1,l()}),r.on("close",u)}u();function c(h){t?a(h):(To("buffering log event because it cannot write at the moment"),i.push(h))}return c.shutdown=function(h){To("shutdown called"),i.length&&o?(To("buffer has items, waiting 100ms to empty"),o-=1,setTimeout(()=>{c.shutdown(h)},100)):(r.removeAllListeners("close"),r.end(h))},c}function zse(n,e){To(`configure with config = ${n}`);let t=function(i){return i.serialise()};return n.layout&&(t=e.layout(n.layout.type,n.layout)),Gse(n,t)}G1.exports.configure=zse});var ET=y((c0e,PT)=>{var Kse=require("path"),xl=Yt()("log4js:appenders"),pr=pl(),K1=Ly(),Qse=bl(),Vse=VD(),eae=rM(),Wr=new Map;Wr.set("console",sM());Wr.set("stdout",lM());Wr.set("stderr",cM());Wr.set("logLevelFilter",dM());Wr.set("categoryFilter",fM());Wr.set("noLogFilter",yM());Wr.set("file",Y1());Wr.set("dateFile",J1());Wr.set("fileSync",X1());Wr.set("tcp",z1());var Vd=new Map,kT=(n,e)=>{xl("Loading module from ",n);try{return require(n)}catch(t){pr.throwExceptionIf(e,t.code!=="MODULE_NOT_FOUND",`appender "${n}" could not be loaded (error was: ${t})`);return}},tae=(n,e)=>Wr.get(n)||kT(`./${n}`,e)||kT(n,e)||""||kT(Kse.join(process.cwd(),n),e),ev=new Set,Q1=(n,e)=>{if(Vd.has(n))return Vd.get(n);if(!e.appenders[n])return!1;if(ev.has(n))throw new Error(`Dependency loop detected for appender ${n}.`);ev.add(n),xl(`Creating appender ${n}`);let t=iae(n,e);return ev.delete(n),Vd.set(n,t),t},iae=(n,e)=>{let t=e.appenders[n],i=t.type.configure?t.type:tae(t.type,e);return pr.throwExceptionIf(e,pr.not(i),`appender "${n}" is not valid (type "${t.type}" could not be found)`),i.appender&&xl(`DEPRECATION: Appender ${t.type} exports an appender function.`),i.shutdown&&xl(`DEPRECATION: Appender ${t.type} exports a shutdown function.`),xl(`${n}: clustering.isMaster ? ${K1.isMaster()}`),xl(`${n}: appenderModule is ${require("util").inspect(i)}`),K1.onlyOnMaster(()=>(xl(`calling appenderModule.configure for ${n} / ${t.type}`),i.configure(eae.modifyConfig(t),Vse,r=>Q1(r,e),Qse)),()=>{})},V1=n=>{Vd.clear(),ev.clear();let e=[];Object.values(n.categories).forEach(t=>{e.push(...t.appenders)}),Object.keys(n.appenders).forEach(t=>{(e.includes(t)||n.appenders[t].type==="tcp-server")&&Q1(t,n)})},eA=()=>{V1({appenders:{out:{type:"stdout"}},categories:{default:{appenders:["out"],level:"trace"}}})};eA();pr.addListener(n=>{pr.throwExceptionIf(n,pr.not(pr.anObject(n.appenders)),'must have a property "appenders" of type object.');let e=Object.keys(n.appenders);pr.throwExceptionIf(n,pr.not(e.length),"must define at least one appender."),e.forEach(t=>{pr.throwExceptionIf(n,pr.not(n.appenders[t].type),`appender "${t}" is not valid (must be an object with property "type")`)})});pr.addListener(V1);PT.exports=Vd;PT.exports.init=eA});var _T=y((h0e,tv)=>{var Cl=Yt()("log4js:categories"),Zt=pl(),RT=bl(),tA=ET(),Sl=new Map;function iA(n,e,t){if(e.inherit===!1)return;let i=t.lastIndexOf(".");if(i<0)return;let r=t.substring(0,i),o=n.categories[r];o||(o={inherit:!0,appenders:[]}),iA(n,o,r),!n.categories[r]&&o.appenders&&o.appenders.length&&o.level&&(n.categories[r]=o),e.appenders=e.appenders||[],e.level=e.level||o.level,o.appenders.forEach(s=>{e.appenders.includes(s)||e.appenders.push(s)}),e.parent=o}function nae(n){if(!n.categories)return;Object.keys(n.categories).forEach(t=>{let i=n.categories[t];iA(n,i,t)})}Zt.addPreProcessingListener(n=>nae(n));Zt.addListener(n=>{Zt.throwExceptionIf(n,Zt.not(Zt.anObject(n.categories)),'must have a property "categories" of type object.');let e=Object.keys(n.categories);Zt.throwExceptionIf(n,Zt.not(e.length),"must define at least one category."),e.forEach(t=>{let i=n.categories[t];Zt.throwExceptionIf(n,[Zt.not(i.appenders),Zt.not(i.level)],`category "${t}" is not valid (must be an object with properties "appenders" and "level")`),Zt.throwExceptionIf(n,Zt.not(Array.isArray(i.appenders)),`category "${t}" is not valid (appenders must be an array of appender names)`),Zt.throwExceptionIf(n,Zt.not(i.appenders.length),`category "${t}" is not valid (appenders must contain at least one appender name)`),Object.prototype.hasOwnProperty.call(i,"enableCallStack")&&Zt.throwExceptionIf(n,typeof i.enableCallStack!="boolean",`category "${t}" is not valid (enableCallStack must be boolean type)`),i.appenders.forEach(r=>{Zt.throwExceptionIf(n,Zt.not(tA.get(r)),`category "${t}" is not valid (appender "${r}" is not defined)`)}),Zt.throwExceptionIf(n,Zt.not(RT.getLevel(i.level)),`category "${t}" is not valid (level "${i.level}" not recognised; valid levels are ${RT.levels.join(", ")})`)}),Zt.throwExceptionIf(n,Zt.not(n.categories.default),'must define a "default" category.')});var nA=n=>{Sl.clear(),Object.keys(n.categories).forEach(t=>{let i=n.categories[t],r=[];i.appenders.forEach(o=>{r.push(tA.get(o)),Cl(`Creating category ${t}`),Sl.set(t,{appenders:r,level:RT.getLevel(i.level),enableCallStack:i.enableCallStack||!1})})})},rA=()=>{nA({categories:{default:{appenders:["out"],level:"OFF"}}})};rA();Zt.addListener(nA);var Dl=n=>(Cl(`configForCategory: searching for config for ${n}`),Sl.has(n)?(Cl(`configForCategory: ${n} exists in config, returning it`),Sl.get(n)):n.indexOf(".")>0?(Cl(`configForCategory: ${n} has hierarchy, searching for parents`),Dl(n.substring(0,n.lastIndexOf(".")))):(Cl("configForCategory: returning config for default category"),Dl("default"))),rae=n=>Dl(n).appenders,oae=n=>Dl(n).level,sae=(n,e)=>{let t=Sl.get(n);if(Cl(`setLevelForCategory: found ${t} for ${n}`),!t){let i=Dl(n);Cl(`setLevelForCategory: no config found for category, found ${i} for parents of ${n}`),t={appenders:i.appenders}}t.level=e,Sl.set(n,t)},aae=n=>Dl(n).enableCallStack===!0,lae=(n,e)=>{Dl(n).enableCallStack=e};tv.exports=Sl;tv.exports=Object.assign(tv.exports,{appendersForCategory:rae,getLevelForCategory:oae,setLevelForCategory:sae,getEnableCallStackForCategory:aae,setEnableCallStackForCategory:lae,init:rA})});var lA=y((d0e,aA)=>{var oA=Yt()("log4js:logger"),uae=eT(),Ko=bl(),cae=Ly(),iv=_T(),hae=pl(),dae=/at (?:(.+)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/;function gae(n,e=4){let t=n.stack.split(` -`).slice(e),i=dae.exec(t[0]);return i&&i.length===6?{functionName:i[1],fileName:i[2],lineNumber:parseInt(i[3],10),columnNumber:parseInt(i[4],10),callStack:t.join(` -`)}:null}var eg=class{constructor(e){if(!e)throw new Error("No category provided.");this.category=e,this.context={},this.parseCallStack=gae,oA(`Logger created (${this.category}, ${this.level})`)}get level(){return Ko.getLevel(iv.getLevelForCategory(this.category),Ko.TRACE)}set level(e){iv.setLevelForCategory(this.category,Ko.getLevel(e,this.level))}get useCallStack(){return iv.getEnableCallStackForCategory(this.category)}set useCallStack(e){iv.setEnableCallStackForCategory(this.category,e===!0)}log(e,...t){let i=Ko.getLevel(e);i||(this._log(Ko.WARN,"log4js:logger.log: invalid value for log-level as first parameter given: ",e),i=Ko.INFO),this.isLevelEnabled(i)&&this._log(i,t)}isLevelEnabled(e){return this.level.isLessThanOrEqualTo(e)}_log(e,t){oA(`sending log data (${e}) to appenders`);let i=new uae(this.category,e,t,this.context,this.useCallStack&&this.parseCallStack(new Error));cae.send(i)}addContext(e,t){this.context[e]=t}removeContext(e){delete this.context[e]}clearContext(){this.context={}}setParseCallStackFunction(e){this.parseCallStack=e}};function sA(n){let e=Ko.getLevel(n),i=e.toString().toLowerCase().replace(/_([a-z])/g,o=>o[1].toUpperCase()),r=i[0].toUpperCase()+i.slice(1);eg.prototype[`is${r}Enabled`]=function(){return this.isLevelEnabled(e)},eg.prototype[i]=function(...o){this.log(e,...o)}}Ko.levels.forEach(sA);hae.addListener(()=>{Ko.levels.forEach(sA)});aA.exports=eg});var hA=y((g0e,cA)=>{var pc=bl(),pae=':remote-addr - - ":method :url HTTP/:http-version" :status :content-length ":referrer" ":user-agent"';function fae(n){return n.originalUrl||n.url}function mae(n,e,t){let i=o=>{let s=o.concat();for(let a=0;ai.source?i.source:i);e=new RegExp(t.join("|"))}return e}function yae(n,e,t){let i=e;if(t){let r=t.find(o=>{let s=!1;return o.from&&o.to?s=n>=o.from&&n<=o.to:s=o.codes.indexOf(n)!==-1,s});r&&(i=pc.getLevel(r.level,i))}return i}cA.exports=function(e,t){typeof t=="string"||typeof t=="function"?t={format:t}:t=t||{};let i=e,r=pc.getLevel(t.level,pc.INFO),o=t.format||pae,s=bae(t.nolog);return(a,l,u)=>{if(a._logging||s&&s.test(a.originalUrl))return u();if(i.isLevelEnabled(r)||t.level==="auto"){let c=new Date,{writeHead:h}=l;a._logging=!0,l.writeHead=(d,g)=>{l.writeHead=h,l.writeHead(d,g),l.__statusCode=d,l.__headers=g||{}},l.on("finish",()=>{l.responseTime=new Date-c,l.statusCode&&t.level==="auto"&&(r=pc.INFO,l.statusCode>=300&&(r=pc.WARN),l.statusCode>=400&&(r=pc.ERROR)),r=yae(l.statusCode,r,t.statusRules);let d=mae(a,l,t.tokens||[]);if(t.context&&i.addContext("res",l),typeof o=="function"){let g=o(a,l,p=>uA(p,d));g&&i.log(r,g)}else i.log(r,uA(o,d));t.context&&i.removeContext("res")})}return u()}}});var mA=y((p0e,fA)=>{var dA=Yt()("log4js:recording"),nv=[];function vae(){return function(n){dA(`received logEvent, number of events now ${nv.length+1}`),dA("log event was ",n),nv.push(n)}}function gA(){return nv.slice()}function pA(){nv.length=0}fA.exports={configure:vae,replay:gA,playback:gA,reset:pA,erase:pA}});var LT=y((f0e,CA)=>{var ia=Yt()("log4js:main"),wae=require("fs"),xae=vj()({proto:!0}),Cae=pl(),Sae=VD(),Dae=bl(),bA=ET(),yA=_T(),Tae=lA(),kae=Ly(),Pae=hA(),Eae=mA(),tg=!1;function Rae(n){if(!tg)return;ia("Received log event ",n),yA.appendersForCategory(n.categoryName).forEach(t=>{t(n)})}function _ae(n){ia(`Loading configuration from ${n}`);try{return JSON.parse(wae.readFileSync(n,"utf8"))}catch(e){throw new Error(`Problem reading config from file "${n}". Error was ${e.message}`,e)}}function vA(n){tg&&wA();let e=n;return typeof e=="string"&&(e=_ae(n)),ia(`Configuration is ${e}`),Cae.configure(xae(e)),kae.onMessage(Rae),tg=!0,xA}function Lae(){return Eae}function wA(n){ia("Shutdown called. Disabling all log writing."),tg=!1;let e=Array.from(bA.values());bA.init(),yA.init();let t=e.reduceRight((s,a)=>a.shutdown?s+1:s,0);if(t===0)return ia("No appenders with shutdown functions found."),n!==void 0&&n();let i=0,r;ia(`Found ${t} appenders with shutdown functions.`);function o(s){r=r||s,i+=1,ia(`Appender shutdowns complete: ${i} / ${t}`),i>=t&&(ia("All shutdown functions completed."),n&&n(r))}return e.filter(s=>s.shutdown).forEach(s=>s.shutdown(o)),null}function Iae(n){return tg||vA(process.env.LOG4JS_CONFIG||{appenders:{out:{type:"stdout"}},categories:{default:{appenders:["out"],level:"OFF"}}}),new Tae(n||"default")}var xA={getLogger:Iae,configure:vA,shutdown:wA,connectLogger:Pae,levels:Dae,addLayout:Sae.addLayout,recording:Lae};CA.exports=xA});var q=y((DA,TA)=>{"use strict";var IT=S(LT()),rv=S(require("path")),SA=S(require("os")),na=S(require("fs"));function FT(){let n=process.env.NVIM_COC_LOG_FILE;if(n)return n;let e=process.env.XDG_RUNTIME_DIR;if(e)try{return na.default.accessSync(e,na.default.constants.R_OK|na.default.constants.W_OK),rv.default.join(e,`coc-nvim-${process.pid}.log`)}catch{}let t=SA.default.tmpdir();return e=rv.default.join(t,`coc.nvim-${process.pid}`),na.default.existsSync(e)||na.default.mkdirSync(e,{recursive:!0}),rv.default.join(e,"coc-nvim.log")}var Fae=1024*1024,jae=10,ov=FT(),Mae=process.env.NVIM_COC_LOG_LEVEL||"info";if(na.default.existsSync(ov))try{na.default.writeFileSync(ov,"",{encoding:"utf8",mode:438})}catch{}DA.getLogFile=FT;IT.default.configure({disableClustering:!0,appenders:{out:{type:"file",mode:438,filename:ov,maxLogSize:Fae,backups:jae,layout:{type:"pattern",pattern:`%d{ISO8601} %p (pid:${process.pid}) [%c] - %m`}}},categories:{default:{appenders:["out"],level:Mae}}});TA.exports=(n="coc-nvim")=>{let e=IT.default.getLogger(n);return Object.assign(e,{getLogFile:FT,logfile:ov})}});var jT=k(()=>{"use strict";Promise.prototype.logError=function(){this.catch(n=>{q()("util-extensions").error(n)})}});var PA=y((OT,kA)=>{kA.exports=MT(typeof Buffer<"u"&&Buffer)||MT(OT.Buffer)||MT(typeof window<"u"&&window.Buffer)||OT.Buffer;function MT(n){return n&&n.isBuffer&&n}});var sv=y((m0e,EA)=>{var Oae={}.toString;EA.exports=Array.isArray||function(n){return Oae.call(n)=="[object Array]"}});var LA=y((mc,_A)=>{var fc=Gn(),mc=_A.exports=RA(0);mc.alloc=RA;mc.concat=fc.concat;mc.from=Aae;function RA(n){return new Array(n)}function Aae(n){if(!fc.isBuffer(n)&&fc.isView(n))n=fc.Uint8Array.from(n);else if(fc.isArrayBuffer(n))n=new Uint8Array(n);else{if(typeof n=="string")return fc.from.call(mc,n);if(typeof n=="number")throw new TypeError('"value" argument must not be a number')}return Array.prototype.slice.call(n)}});var jA=y((yc,FA)=>{var Qo=Gn(),bc=Qo.global,yc=FA.exports=Qo.hasBuffer?IA(0):[];yc.alloc=Qo.hasBuffer&&bc.alloc||IA;yc.concat=Qo.concat;yc.from=Nae;function IA(n){return new bc(n)}function Nae(n){if(!Qo.isBuffer(n)&&Qo.isView(n))n=Qo.Uint8Array.from(n);else if(Qo.isArrayBuffer(n))n=new Uint8Array(n);else{if(typeof n=="string")return Qo.from.call(yc,n);if(typeof n=="number")throw new TypeError('"value" argument must not be a number')}return bc.from&&bc.from.length!==1?bc.from(n):new bc(n)}});var AA=y((vc,OA)=>{var av=Gn(),vc=OA.exports=av.hasArrayBuffer?MA(0):[];vc.alloc=MA;vc.concat=av.concat;vc.from=Hae;function MA(n){return new Uint8Array(n)}function Hae(n){if(av.isView(n)){var e=n.byteOffset,t=n.byteLength;n=n.buffer,n.byteLength!==t&&(n.slice?n=n.slice(e,e+t):(n=new Uint8Array(n),n.byteLength!==t&&(n=Array.prototype.slice.call(n,e,e+t))))}else{if(typeof n=="string")return av.from.call(vc,n);if(typeof n=="number")throw new TypeError('"value" argument must not be a number')}return new Uint8Array(n)}});var NA=y(lv=>{lv.copy=Wae;lv.toString=Bae;lv.write=qae;function qae(n,e){for(var t=this,i=e||(e|=0),r=n.length,o=0,s=0;s>>6,t[i++]=128|o&63):o<55296||o>57343?(t[i++]=224|o>>>12,t[i++]=128|o>>>6&63,t[i++]=128|o&63):(o=(o-55296<<10|n.charCodeAt(s++)-56320)+65536,t[i++]=240|o>>>18,t[i++]=128|o>>>12&63,t[i++]=128|o>>>6&63,t[i++]=128|o&63);return i-e}function Bae(n,e,t){var i=this,r=e|0;t||(t=i.length);for(var o="",s=0;r=65536?(s-=65536,o+=String.fromCharCode((s>>>10)+55296,(s&1023)+56320)):o+=String.fromCharCode(s)}return o}function Wae(n,e,t,i){var r;t||(t=0),!i&&i!==0&&(i=this.length),e||(e=0);var o=i-t;if(n===this&&t=0;r--)n[r+e]=this[r+t];else for(r=0;r{var AT=NA();ig.copy=WA;ig.slice=YA;ig.toString=Yae;ig.write=Zae("write");var ra=Gn(),HA=ra.global,qA=ra.hasBuffer&&"TYPED_ARRAY_SUPPORT"in HA,BA=qA&&!HA.TYPED_ARRAY_SUPPORT;function WA(n,e,t,i){var r=ra.isBuffer(this),o=ra.isBuffer(n);if(r&&o)return this.copy(n,e,t,i);if(!BA&&!r&&!o&&ra.isView(this)&&ra.isView(n)){var s=t||i!=null?YA.call(this,t,i):this;return n.set(s,e),s.length}else return AT.copy.call(this,n,e,t,i)}function YA(n,e){var t=this.slice||!BA&&this.subarray;if(t)return t.call(this,n,e);var i=ra.alloc.call(this,e-n);return WA.call(this,i,0,n,e),i}function Yae(n,e,t){var i=!qA&&ra.isBuffer(this)?this.toString:AT.toString;return i.apply(this,arguments)}function Zae(n){return e;function e(){var t=this[n]||AT[n];return t.apply(this,arguments)}}});var Gn=y(Ji=>{var NT=Ji.global=PA(),UA=Ji.hasBuffer=NT&&!!NT.isBuffer,qT=Ji.hasArrayBuffer=typeof ArrayBuffer<"u",Jae=Ji.isArray=sv();Ji.isArrayBuffer=qT?Kae:WT;var $ae=Ji.isBuffer=UA?NT.isBuffer:WT,Uae=Ji.isView=qT?ArrayBuffer.isView||GA("ArrayBuffer","buffer"):WT;Ji.alloc=BT;Ji.concat=Gae;Ji.from=Xae;var ZA=Ji.Array=LA(),JA=Ji.Buffer=jA(),$A=Ji.Uint8Array=AA(),HT=Ji.prototype=uv();function Xae(n){return typeof n=="string"?Qae.call(this,n):XA(this).from(n)}function BT(n){return XA(this).alloc(n)}function Gae(n,e){e||(e=0,Array.prototype.forEach.call(n,o));var t=this!==Ji&&this||n[0],i=BT.call(t,e),r=0;return Array.prototype.forEach.call(n,s),i;function o(a){e+=a.length}function s(a){r+=HT.copy.call(a,i,r)}}var zae=GA("ArrayBuffer");function Kae(n){return n instanceof ArrayBuffer||zae(n)}function Qae(n){var e=n.length*3,t=BT.call(this,e),i=HT.write.call(t,n);return e!==i&&(t=HT.slice.call(t,0,i)),t}function XA(n){return $ae(n)?JA:Uae(n)?$A:Jae(n)?ZA:UA?JA:qT?$A:ZA}function WT(){return!1}function GA(n,e){return n="[object "+n+"]",function(t){return t!=null&&{}.toString.call(e?t[e]:t)===n}}});var cv=y(zA=>{zA.ExtBuffer=YT;var Vae=Gn();function YT(n,e){if(!(this instanceof YT))return new YT(n,e);this.buffer=Vae.from(n),this.type=e}});var QA=y(KA=>{KA.setExtPackers=ile;var hv=Gn(),ele=hv.global,Yr=hv.Uint8Array.from,ZT,tle={name:1,message:1,stack:1,columnNumber:1,fileName:1,lineNumber:1};function ile(n){n.addExtPacker(14,Error,[Tl,fr]),n.addExtPacker(1,EvalError,[Tl,fr]),n.addExtPacker(2,RangeError,[Tl,fr]),n.addExtPacker(3,ReferenceError,[Tl,fr]),n.addExtPacker(4,SyntaxError,[Tl,fr]),n.addExtPacker(5,TypeError,[Tl,fr]),n.addExtPacker(6,URIError,[Tl,fr]),n.addExtPacker(10,RegExp,[nle,fr]),n.addExtPacker(11,Boolean,[JT,fr]),n.addExtPacker(12,String,[JT,fr]),n.addExtPacker(13,Date,[Number,fr]),n.addExtPacker(15,Number,[JT,fr]),typeof Uint8Array<"u"&&(n.addExtPacker(17,Int8Array,Yr),n.addExtPacker(18,Uint8Array,Yr),n.addExtPacker(19,Int16Array,Yr),n.addExtPacker(20,Uint16Array,Yr),n.addExtPacker(21,Int32Array,Yr),n.addExtPacker(22,Uint32Array,Yr),n.addExtPacker(23,Float32Array,Yr),typeof Float64Array<"u"&&n.addExtPacker(24,Float64Array,Yr),typeof Uint8ClampedArray<"u"&&n.addExtPacker(25,Uint8ClampedArray,Yr),n.addExtPacker(26,ArrayBuffer,Yr),n.addExtPacker(29,DataView,Yr)),hv.hasBuffer&&n.addExtPacker(27,ele,hv.from)}function fr(n){return ZT||(ZT=$T().encode),ZT(n)}function JT(n){return n.valueOf()}function nle(n){n=RegExp.prototype.toString.call(n).split("/"),n.shift();var e=[n.pop()];return e.unshift(n.join("/")),e}function Tl(n){var e={};for(var t in tle)e[t]=n[t];return e}});var dv=y(ng=>{var rle,ole,sle,ale;(function(n){var e="undefined",t=e!==typeof Buffer&&Buffer,i=e!==typeof Uint8Array&&Uint8Array,r=e!==typeof ArrayBuffer&&ArrayBuffer,o=[0,0,0,0,0,0,0,0],s=Array.isArray||R,a=4294967296,l=16777216,u;rle=c("Uint64BE",!0,!0),ole=c("Int64BE",!0,!1),sle=c("Uint64LE",!1,!0),ale=c("Int64LE",!1,!1);function c(F,N,J){var H=N?0:4,M=N?4:0,L=N?0:3,O=N?1:2,Z=N?2:1,ne=N?3:0,be=N?b:x,He=N?w:T,$=V.prototype,B="is"+F,G="_"+B;return $.buffer=void 0,$.offset=0,$[G]=!0,$.toNumber=Zn,$.toString=Wi,$.toJSON=Zn,$.toArray=h,t&&($.toBuffer=d),i&&($.toArrayBuffer=g),V[B]=Re,n[F]=V,V;function V(Le,Ae,Ne,Ie){return this instanceof V?Ee(this,Le,Ae,Ne,Ie):new V(Le,Ae,Ne,Ie)}function Re(Le){return!!(Le&&Le[G])}function Ee(Le,Ae,Ne,Ie,li){if(i&&r&&(Ae instanceof r&&(Ae=new i(Ae)),Ie instanceof r&&(Ie=new i(Ie))),!Ae&&!Ne&&!Ie&&!u){Le.buffer=m(o,0);return}if(!p(Ae,Ne)){var Nr=u||Array;li=Ne,Ie=Ae,Ne=0,Ae=new Nr(8)}Le.buffer=Ae,Le.offset=Ne|=0,e!==typeof Ie&&(typeof Ie=="string"?Xe(Ae,Ne,Ie,li||10):p(Ie,li)?f(Ae,Ne,Ie,li):typeof li=="number"?(Yi(Ae,Ne+H,Ie),Yi(Ae,Ne+M,li)):Ie>0?be(Ae,Ne,Ie):Ie<0?He(Ae,Ne,Ie):f(Ae,Ne,o,0))}function Xe(Le,Ae,Ne,Ie){var li=0,Nr=Ne.length,Cn=0,Jn=0;Ne[0]==="-"&&li++;for(var jd=li;li=0))break;Jn=Jn*Ie+vy,Cn=Cn*Ie+Math.floor(Jn/a),Jn%=a}jd&&(Cn=~Cn,Jn?Jn=a-Jn:Cn++),Yi(Le,Ae+H,Cn),Yi(Le,Ae+M,Jn)}function Zn(){var Le=this.buffer,Ae=this.offset,Ne=Ar(Le,Ae+H),Ie=Ar(Le,Ae+M);return J||(Ne|=0),Ne?Ne*a+Ie:Ie}function Wi(Le){var Ae=this.buffer,Ne=this.offset,Ie=Ar(Ae,Ne+H),li=Ar(Ae,Ne+M),Nr="",Cn=!J&&Ie&2147483648;for(Cn&&(Ie=~Ie,li=a-li),Le=Le||10;;){var Jn=Ie%Le*a+li;if(Ie=Math.floor(Ie/Le),li=Math.floor(Jn/Le),Nr=(Jn%Le).toString(Le)+Nr,!Ie&&!li)break}return Cn&&(Nr="-"+Nr),Nr}function Yi(Le,Ae,Ne){Le[Ae+ne]=Ne&255,Ne=Ne>>8,Le[Ae+Z]=Ne&255,Ne=Ne>>8,Le[Ae+O]=Ne&255,Ne=Ne>>8,Le[Ae+L]=Ne&255}function Ar(Le,Ae){return Le[Ae+L]*l+(Le[Ae+O]<<16)+(Le[Ae+Z]<<8)+Le[Ae+ne]}}function h(F){var N=this.buffer,J=this.offset;return u=null,F!==!1&&J===0&&N.length===8&&s(N)?N:m(N,J)}function d(F){var N=this.buffer,J=this.offset;if(u=t,F!==!1&&J===0&&N.length===8&&Buffer.isBuffer(N))return N;var H=new t(8);return f(H,0,N,J),H}function g(F){var N=this.buffer,J=this.offset,H=N.buffer;if(u=i,F!==!1&&J===0&&H instanceof r&&H.byteLength===8)return H;var M=new i(8);return f(M,0,N,J),M.buffer}function p(F,N){var J=F&&F.length;return N|=0,J&&N+8<=J&&typeof F[N]!="string"}function f(F,N,J,H){N|=0,H|=0;for(var M=0;M<8;M++)F[N++]=J[H++]&255}function m(F,N){return Array.prototype.slice.call(F,N,N+8)}function b(F,N,J){for(var H=N+8;H>N;)F[--H]=J&255,J/=256}function w(F,N,J){var H=N+8;for(J++;H>N;)F[--H]=-J&255^255,J/=256}function x(F,N,J){for(var H=N+8;N{UT.read=function(n,e,t,i,r){var o,s,a=r*8-i-1,l=(1<>1,c=-7,h=t?r-1:0,d=t?-1:1,g=n[e+h];for(h+=d,o=g&(1<<-c)-1,g>>=-c,c+=a;c>0;o=o*256+n[e+h],h+=d,c-=8);for(s=o&(1<<-c)-1,o>>=-c,c+=i;c>0;s=s*256+n[e+h],h+=d,c-=8);if(o===0)o=1-u;else{if(o===l)return s?NaN:(g?-1:1)*(1/0);s=s+Math.pow(2,i),o=o-u}return(g?-1:1)*s*Math.pow(2,o-i)};UT.write=function(n,e,t,i,r,o){var s,a,l,u=o*8-r-1,c=(1<>1,d=r===23?Math.pow(2,-24)-Math.pow(2,-77):0,g=i?0:o-1,p=i?1:-1,f=e<0||e===0&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(a=isNaN(e)?1:0,s=c):(s=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-s))<1&&(s--,l*=2),s+h>=1?e+=d/l:e+=d*Math.pow(2,1-h),e*l>=2&&(s++,l/=2),s+h>=c?(a=0,s=c):s+h>=1?(a=(e*l-1)*Math.pow(2,r),s=s+h):(a=e*Math.pow(2,h-1)*Math.pow(2,r),s=0));r>=8;n[t+g]=a&255,g+=p,a/=256,r-=8);for(s=s<0;n[t+g]=s&255,g+=p,s/=256,u-=8);n[t+g-p]|=f*128}});var GT=y(VA=>{var lle=VA.uint8=new Array(256);for(rg=0;rg<=255;rg++)lle[rg]=ule(rg);var rg;function ule(n){return function(e){var t=e.reserve(1);e.buffer[t]=n}}});var cN=y(uN=>{var tN=XT(),iN=dv(),cle=iN.Uint64BE,hle=iN.Int64BE,nN=GT().uint8,gv=Gn(),Rt=gv.global,dle=gv.hasBuffer&&"TYPED_ARRAY_SUPPORT"in Rt,gle=dle&&!Rt.TYPED_ARRAY_SUPPORT,eN=gv.hasBuffer&&Rt.prototype||{};uN.getWriteToken=ple;function ple(n){return n&&n.uint8array?fle():gle||gv.hasBuffer&&n&&n.safe?mle():rN()}function fle(){var n=rN();return n[202]=at(202,4,aN),n[203]=at(203,8,lN),n}function rN(){var n=nN.slice();return n[196]=og(196),n[197]=kl(197),n[198]=Pl(198),n[199]=og(199),n[200]=kl(200),n[201]=Pl(201),n[202]=at(202,4,eN.writeFloatBE||aN,!0),n[203]=at(203,8,eN.writeDoubleBE||lN,!0),n[204]=og(204),n[205]=kl(205),n[206]=Pl(206),n[207]=at(207,8,oN),n[208]=og(208),n[209]=kl(209),n[210]=Pl(210),n[211]=at(211,8,sN),n[217]=og(217),n[218]=kl(218),n[219]=Pl(219),n[220]=kl(220),n[221]=Pl(221),n[222]=kl(222),n[223]=Pl(223),n}function mle(){var n=nN.slice();return n[196]=at(196,1,Rt.prototype.writeUInt8),n[197]=at(197,2,Rt.prototype.writeUInt16BE),n[198]=at(198,4,Rt.prototype.writeUInt32BE),n[199]=at(199,1,Rt.prototype.writeUInt8),n[200]=at(200,2,Rt.prototype.writeUInt16BE),n[201]=at(201,4,Rt.prototype.writeUInt32BE),n[202]=at(202,4,Rt.prototype.writeFloatBE),n[203]=at(203,8,Rt.prototype.writeDoubleBE),n[204]=at(204,1,Rt.prototype.writeUInt8),n[205]=at(205,2,Rt.prototype.writeUInt16BE),n[206]=at(206,4,Rt.prototype.writeUInt32BE),n[207]=at(207,8,oN),n[208]=at(208,1,Rt.prototype.writeInt8),n[209]=at(209,2,Rt.prototype.writeInt16BE),n[210]=at(210,4,Rt.prototype.writeInt32BE),n[211]=at(211,8,sN),n[217]=at(217,1,Rt.prototype.writeUInt8),n[218]=at(218,2,Rt.prototype.writeUInt16BE),n[219]=at(219,4,Rt.prototype.writeUInt32BE),n[220]=at(220,2,Rt.prototype.writeUInt16BE),n[221]=at(221,4,Rt.prototype.writeUInt32BE),n[222]=at(222,2,Rt.prototype.writeUInt16BE),n[223]=at(223,4,Rt.prototype.writeUInt32BE),n}function og(n){return function(e,t){var i=e.reserve(2),r=e.buffer;r[i++]=n,r[i]=t}}function kl(n){return function(e,t){var i=e.reserve(3),r=e.buffer;r[i++]=n,r[i++]=t>>>8,r[i]=t}}function Pl(n){return function(e,t){var i=e.reserve(5),r=e.buffer;r[i++]=n,r[i++]=t>>>24,r[i++]=t>>>16,r[i++]=t>>>8,r[i]=t}}function at(n,e,t,i){return function(r,o){var s=r.reserve(e+1);r.buffer[s++]=n,t.call(r.buffer,o,s,i)}}function oN(n,e){new cle(this,e,n)}function sN(n,e){new hle(this,e,n)}function aN(n,e){tN.write(this,n,e,!1,23,4)}function lN(n,e){tN.write(this,n,e,!1,52,8)}});var fN=y(pN=>{var ble=sv(),gN=dv(),yle=gN.Uint64BE,vle=gN.Int64BE,hN=Gn(),dN=uv(),wle=cN(),xle=GT().uint8,Cle=cv().ExtBuffer,Sle=typeof Uint8Array<"u",Dle=typeof Map<"u",wc=[];wc[1]=212;wc[2]=213;wc[4]=214;wc[8]=215;wc[16]=216;pN.getWriteType=Tle;function Tle(n){var e=wle.getWriteToken(n),t=n&&n.useraw,i=Sle&&n&&n.binarraybuffer,r=i?hN.isArrayBuffer:hN.isBuffer,o=i?R:T,s=Dle&&n&&n.usemap,a=s?J:N,l={boolean:u,function:w,number:c,object:t?b:m,string:f(t?p:g),symbol:w,undefined:w};return l;function u(M,L){var O=L?195:194;e[O](M,L)}function c(M,L){var O=L|0,Z;if(L!==O){Z=203,e[Z](M,L);return}else-32<=O&&O<=127?Z=O&255:0<=O?Z=O<=255?204:O<=65535?205:206:Z=-128<=O?208:-32768<=O?209:210;e[Z](M,O)}function h(M,L){var O=207;e[O](M,L.toArray())}function d(M,L){var O=211;e[O](M,L.toArray())}function g(M){return M<32?1:M<=255?2:M<=65535?3:5}function p(M){return M<32?1:M<=65535?3:5}function f(M){return L;function L(O,Z){var ne=Z.length,be=5+ne*3;O.offset=O.reserve(be);var He=O.buffer,$=M(ne),B=O.offset+$;ne=dN.write.call(He,Z,B);var G=M(ne);if($!==G){var V=B+G-$,Re=B+ne;dN.copy.call(He,He,V,B,Re)}var Ee=G===1?160+ne:G<=3?215+G:219;e[Ee](O,ne),O.offset+=ne}}function m(M,L){if(L===null)return w(M,L);if(r(L))return o(M,L);if(ble(L))return x(M,L);if(yle.isUint64BE(L))return h(M,L);if(vle.isInt64BE(L))return d(M,L);var O=M.codec.getExtPacker(L);if(O&&(L=O(L)),L instanceof Cle)return F(M,L);a(M,L)}function b(M,L){if(r(L))return H(M,L);m(M,L)}function w(M,L){var O=192;e[O](M,L)}function x(M,L){var O=L.length,Z=O<16?144+O:O<=65535?220:221;e[Z](M,O);for(var ne=M.codec.encode,be=0;be{var kle=sv();sg.createCodec=mN;sg.install=Ele;sg.filter=Lle;var Ple=Gn();function xc(n){if(!(this instanceof xc))return new xc(n);this.options=n,this.init()}xc.prototype.init=function(){var n=this.options;return n&&n.uint8array&&(this.bufferish=Ple.Uint8Array),this};function Ele(n){for(var e in n)xc.prototype[e]=Rle(xc.prototype[e],n[e])}function Rle(n,e){return n&&e?t:n||e;function t(){return n.apply(this,arguments),e.apply(this,arguments)}}function _le(n){return n=n.slice(),function(t){return n.reduce(e,t)};function e(t,i){return i(t)}}function Lle(n){return kle(n)?_le(n):n}function mN(n){return new xc(n)}sg.preset=mN({preset:!0})});var pv=y(yN=>{var Ile=cv().ExtBuffer,Fle=QA(),jle=fN(),zT=ag();zT.install({addExtPacker:Ole,getExtPacker:Ale,init:bN});yN.preset=bN.call(zT.preset);function Mle(n){var e=jle.getWriteType(n);return t;function t(i,r){var o=e[typeof r];if(!o)throw new Error('Unsupported type "'+typeof r+'": '+r);o(i,r)}}function bN(){var n=this.options;return this.encode=Mle(n),n&&n.preset&&Fle.setExtPackers(this),this}function Ole(n,e,t){t=zT.filter(t);var i=e.name;if(i&&i!=="Object"){var r=this.extPackers||(this.extPackers={});r[i]=s}else{var o=this.extEncoderList||(this.extEncoderList=[]);o.unshift([e,s])}function s(a){return t&&(a=t(a)),new Ile(a,n)}}function Ale(n){var e=this.extPackers||(this.extPackers={}),t=n.constructor,i=t&&t.name&&e[t.name];if(i)return i;for(var r=this.extEncoderList||(this.extEncoderList=[]),o=r.length,s=0;s{KT.FlexDecoder=Cc;KT.FlexEncoder=Sc;var lg=Gn(),Nle=2048,Hle=65536,vN="BUFFER_SHORTAGE";function Cc(){if(!(this instanceof Cc))return new Cc}function Sc(){if(!(this instanceof Sc))return new Sc}Cc.mixin=CN(qle());Cc.mixin(Cc.prototype);Sc.mixin=CN(Ble());Sc.mixin(Sc.prototype);function qle(){return{bufferish:lg,write:n,fetch:Yle,flush:e,push:xN,pull:Zle,read:wN,reserve:t,offset:0};function n(i){var r=this.offset?lg.prototype.slice.call(this.buffer,this.offset):this.buffer;this.buffer=r?i?this.bufferish.concat([r,i]):r:i,this.offset=0}function e(){for(;this.offsetthis.buffer.length)throw new Error(vN);return this.offset=o,r}}function Ble(){return{bufferish:lg,write:Wle,fetch:n,flush:e,push:xN,pull:t,read:wN,reserve:i,send:r,maxBufferSize:Hle,minBufferSize:Nle,offset:0,start:0};function n(){var o=this.start;if(o1?this.bufferish.concat(o):o[0];return o.length=0,s}function i(o){var s=o|0;if(this.buffer){var a=this.buffer.length,l=this.offset|0,u=l+s;if(uthis.minBufferSize)this.flush(),this.push(o);else{var a=this.reserve(s);lg.prototype.copy.call(o,this.buffer,a)}}}function Wle(){throw new Error("method not implemented: write()")}function Yle(){throw new Error("method not implemented: fetch()")}function wN(){var n=this.buffers&&this.buffers.length;return n?(this.flush(),this.pull()):this.fetch()}function xN(n){var e=this.buffers||(this.buffers=[]);e.push(n)}function Zle(){var n=this.buffers||(this.buffers=[]);return n.shift()}function CN(n){return e;function e(t){for(var i in n)t[i]=n[i];return t}}});var fv=y(SN=>{SN.EncodeBuffer=Dc;var Jle=pv().preset,$le=QT().FlexEncoder;$le.mixin(Dc.prototype);function Dc(n){if(!(this instanceof Dc))return new Dc(n);if(n&&(this.options=n,n.codec)){var e=this.codec=n.codec;e.bufferish&&(this.bufferish=e.bufferish)}}Dc.prototype.codec=Jle;Dc.prototype.write=function(n){this.codec.encode(this,n)}});var $T=y(DN=>{DN.encode=Xle;var Ule=fv().EncodeBuffer;function Xle(n,e){var t=new Ule(e);return t.write(n),t.read()}});var PN=y(kN=>{kN.setExtUnpackers=Kle;var TN=Gn(),Gle=TN.global,VT,zle={name:1,message:1,stack:1,columnNumber:1,fileName:1,lineNumber:1};function Kle(n){n.addExtUnpacker(14,[mr,El(Error)]),n.addExtUnpacker(1,[mr,El(EvalError)]),n.addExtUnpacker(2,[mr,El(RangeError)]),n.addExtUnpacker(3,[mr,El(ReferenceError)]),n.addExtUnpacker(4,[mr,El(SyntaxError)]),n.addExtUnpacker(5,[mr,El(TypeError)]),n.addExtUnpacker(6,[mr,El(URIError)]),n.addExtUnpacker(10,[mr,Qle]),n.addExtUnpacker(11,[mr,an(Boolean)]),n.addExtUnpacker(12,[mr,an(String)]),n.addExtUnpacker(13,[mr,an(Date)]),n.addExtUnpacker(15,[mr,an(Number)]),typeof Uint8Array<"u"&&(n.addExtUnpacker(17,an(Int8Array)),n.addExtUnpacker(18,an(Uint8Array)),n.addExtUnpacker(19,[oa,an(Int16Array)]),n.addExtUnpacker(20,[oa,an(Uint16Array)]),n.addExtUnpacker(21,[oa,an(Int32Array)]),n.addExtUnpacker(22,[oa,an(Uint32Array)]),n.addExtUnpacker(23,[oa,an(Float32Array)]),typeof Float64Array<"u"&&n.addExtUnpacker(24,[oa,an(Float64Array)]),typeof Uint8ClampedArray<"u"&&n.addExtUnpacker(25,an(Uint8ClampedArray)),n.addExtUnpacker(26,oa),n.addExtUnpacker(29,[oa,an(DataView)])),TN.hasBuffer&&n.addExtUnpacker(27,an(Gle))}function mr(n){return VT||(VT=ek().decode),VT(n)}function Qle(n){return RegExp.apply(null,n)}function El(n){return function(e){var t=new n;for(var i in zle)t[i]=e[i];return t}}function an(n){return function(e){return new n(e)}}function oa(n){return new Uint8Array(n).buffer}});var nk=y(ik=>{var EN=XT(),RN=dv(),_N=RN.Uint64BE,LN=RN.Int64BE;ik.getReadFormat=tue;ik.readUint8=IN;var tk=Gn(),bv=uv(),Vle=typeof Map<"u",eue=!0;function tue(n){var e=tk.hasArrayBuffer&&n&&n.binarraybuffer,t=n&&n.int64,i=Vle&&n&&n.usemap,r={map:i?nue:iue,array:rue,str:oue,bin:e?aue:sue,ext:lue,uint8:IN,uint16:cue,uint32:due,uint64:mv(8,t?mue:pue),int8:uue,int16:hue,int32:gue,int64:mv(8,t?bue:fue),float32:mv(4,yue),float64:mv(8,vue)};return r}function iue(n,e){var t={},i,r=new Array(e),o=new Array(e),s=n.codec.decode;for(i=0;i{var wue=nk();jN.getReadToken=xue;function xue(n){var e=wue.getReadFormat(n);return n&&n.useraw?Cue(e):FN(e)}function FN(n){var e,t=new Array(256);for(e=0;e<=127;e++)t[e]=ug(e);for(e=128;e<=143;e++)t[e]=Vo(e-128,n.map);for(e=144;e<=159;e++)t[e]=Vo(e-144,n.array);for(e=160;e<=191;e++)t[e]=Vo(e-160,n.str);for(t[192]=ug(null),t[193]=null,t[194]=ug(!1),t[195]=ug(!0),t[196]=zn(n.uint8,n.bin),t[197]=zn(n.uint16,n.bin),t[198]=zn(n.uint32,n.bin),t[199]=zn(n.uint8,n.ext),t[200]=zn(n.uint16,n.ext),t[201]=zn(n.uint32,n.ext),t[202]=n.float32,t[203]=n.float64,t[204]=n.uint8,t[205]=n.uint16,t[206]=n.uint32,t[207]=n.uint64,t[208]=n.int8,t[209]=n.int16,t[210]=n.int32,t[211]=n.int64,t[212]=Vo(1,n.ext),t[213]=Vo(2,n.ext),t[214]=Vo(4,n.ext),t[215]=Vo(8,n.ext),t[216]=Vo(16,n.ext),t[217]=zn(n.uint8,n.str),t[218]=zn(n.uint16,n.str),t[219]=zn(n.uint32,n.str),t[220]=zn(n.uint16,n.array),t[221]=zn(n.uint32,n.array),t[222]=zn(n.uint16,n.map),t[223]=zn(n.uint32,n.map),e=224;e<=255;e++)t[e]=ug(e-256);return t}function Cue(n){var e,t=FN(n).slice();for(t[217]=t[196],t[218]=t[197],t[219]=t[198],e=160;e<=191;e++)t[e]=Vo(e-160,n.bin);return t}function ug(n){return function(){return n}}function zn(n,e){return function(t){var i=n(t);return e(t,i)}}function Vo(n,e){return function(t){return e(t,n)}}});var yv=y(AN=>{var Sue=cv().ExtBuffer,Due=PN(),Tue=nk().readUint8,kue=MN(),rk=ag();rk.install({addExtUnpacker:Eue,getExtUnpacker:Rue,init:ON});AN.preset=ON.call(rk.preset);function Pue(n){var e=kue.getReadToken(n);return t;function t(i){var r=Tue(i),o=e[r];if(!o)throw new Error("Invalid type: "+(r&&"0x"+r.toString(16)));return o(i)}}function ON(){var n=this.options;return this.decode=Pue(n),n&&n.preset&&Due.setExtUnpackers(this),this}function Eue(n,e){var t=this.extUnpackers||(this.extUnpackers=[]);t[n]=rk.filter(e)}function Rue(n){var e=this.extUnpackers||(this.extUnpackers=[]);return e[n]||t;function t(i){return new Sue(i,n)}}});var vv=y(NN=>{NN.DecodeBuffer=Tc;var _ue=yv().preset,Lue=QT().FlexDecoder;Lue.mixin(Tc.prototype);function Tc(n){if(!(this instanceof Tc))return new Tc(n);if(n&&(this.options=n,n.codec)){var e=this.codec=n.codec;e.bufferish&&(this.bufferish=e.bufferish)}}Tc.prototype.codec=_ue;Tc.prototype.fetch=function(){return this.codec.decode(this)}});var ek=y(HN=>{HN.decode=Fue;var Iue=vv().DecodeBuffer;function Fue(n,e){var t=new Iue(e);return t.write(n),t.read()}});var ak=y((N0e,sk)=>{function ok(){if(!(this instanceof ok))return new ok}(function(n){typeof sk<"u"&&(sk.exports=n);var e="listeners",t={on:r,once:o,off:s,emit:a};i(n.prototype),n.mixin=i;function i(u){for(var c in t)u[c]=t[c];return u}function r(u,c){return l(this,u).push(c),this}function o(u,c){var h=this;return d.originalListener=c,l(h,u).push(d),h;function d(){s.call(h,u,d),c.apply(this,arguments)}}function s(u,c){var h=this,d;if(!arguments.length)delete h[e];else if(c){if(d=l(h,u,!0),d){if(d=d.filter(g),!d.length)return s.call(h,u);h[e][u]=d}}else if(d=h[e],d&&(delete d[u],!Object.keys(d).length))return s.call(h);return h;function g(p){return p!==c&&p.originalListener!==c}}function a(u,c){var h=this,d=l(h,u,!0);if(!d)return!1;var g=arguments.length;if(g===1)d.forEach(f);else if(g===2)d.forEach(m);else{var p=Array.prototype.slice.call(arguments,1);d.forEach(b)}return!!d.length;function f(w){w.call(h)}function m(w){w.call(h,c)}function b(w){w.apply(h,p)}}function l(u,c,h){if(!(h&&!u[e])){var d=u[e]||(u[e]={});return d[c]||(d[c]=[])}}})(ok)});var WN=y(BN=>{BN.Encoder=Rl;var jue=ak(),qN=fv().EncodeBuffer;function Rl(n){if(!(this instanceof Rl))return new Rl(n);qN.call(this,n)}Rl.prototype=new qN;jue.mixin(Rl.prototype);Rl.prototype.encode=function(n){this.write(n),this.emit("data",this.read())};Rl.prototype.end=function(n){arguments.length&&this.encode(n),this.flush(),this.emit("end")}});var JN=y(ZN=>{ZN.Decoder=sa;var Mue=ak(),YN=vv().DecodeBuffer;function sa(n){if(!(this instanceof sa))return new sa(n);YN.call(this,n)}sa.prototype=new YN;Mue.mixin(sa.prototype);sa.prototype.decode=function(n){arguments.length&&this.write(n),this.flush()};sa.prototype.push=function(n){this.emit("data",n)};sa.prototype.end=function(n){this.decode(n),this.emit("end")}});var XN=y(UN=>{UN.createEncodeStream=kc;var Oue=require("util"),$N=require("stream").Transform,Aue=fv().EncodeBuffer;Oue.inherits(kc,$N);var Nue={objectMode:!0};function kc(n){if(!(this instanceof kc))return new kc(n);n?n.objectMode=!0:n=Nue,$N.call(this,n);var e=this,t=this.encoder=new Aue(n);t.push=function(i){e.push(i)}}kc.prototype._transform=function(n,e,t){this.encoder.write(n),t&&t()};kc.prototype._flush=function(n){this.encoder.flush(),n&&n()}});var KN=y(zN=>{zN.createDecodeStream=cg;var Hue=require("util"),GN=require("stream").Transform,que=vv().DecodeBuffer;Hue.inherits(cg,GN);var Bue={objectMode:!0};function cg(n){if(!(this instanceof cg))return new cg(n);n?n.objectMode=!0:n=Bue,GN.call(this,n);var e=this,t=this.decoder=new que(n);t.push=function(i){e.push(i)}}cg.prototype._transform=function(n,e,t){this.decoder.write(n),this.decoder.flush(),t&&t()}});var VN=y(QN=>{yv();pv();QN.createCodec=ag().createCodec});var tH=y(eH=>{yv();pv();eH.codec={preset:ag().preset}});var iH=y(es=>{es.encode=$T().encode;es.decode=ek().decode;es.Encoder=WN().Encoder;es.Decoder=JN().Decoder;es.createEncodeStream=XN().createEncodeStream;es.createDecodeStream=KN().createDecodeStream;es.createCodec=VN().createCodec;es.codec=tH().codec});var nH=y(uk=>{"use strict";Object.defineProperty(uk,"__esModule",{value:!0});var Wue=require("stream"),lk=class extends Wue.Transform{constructor(){super({readableHighWaterMark:10*1024*1024,writableHighWaterMark:10*1024*1024}),this.chunks=null,this.timer=null}sendData(){let{chunks:e}=this;if(e){this.chunks=null;let t=Buffer.concat(e);this.push(t)}}_transform(e,t,i){let{chunks:r,timer:o}=this,s=Buffer.poolSize;if(o&&clearTimeout(o),e.length{"use strict";Object.defineProperty(wv,"__esModule",{value:!0});wv.BaseApi=void 0;var Yue=require("events"),Zue=process.env.VIM_NODE_RPC=="1",ck=class extends Yue.EventEmitter{constructor({transport:e,data:t,client:i}){super(),this.setTransport(e),this.data=t,this.client=i}setTransport(e){this.transport=e}equals(e){try{return String(this.data)===String(e.data)}catch{return!1}}async request(e,t=[]){let i=Error().stack;return new Promise((r,o)=>{this.transport.request(e,this.getArgsByPrefix(t),(s,a)=>{if(s){let l=new Error(`${s[1].split(/\r?\n/)[0]}`);l.stack=`Error: request error on ${e} - ${s[1]} -`+i.split(/\r?\n/).slice(3).join(` -`),e.endsWith("get_var")||this.client.logError(`request error on "${e}"`,t,s[1],i),o(l)}else r(a)})})}getArgsByPrefix(e){return this.prefix!=="nvim_"&&e[0]!=this?[Zue?this.data:this,...e]:e}getVar(e){return this.request(`${this.prefix}get_var`,[e]).then(t=>t,t=>null)}setVar(e,t,i=!1){if(i){this.notify(`${this.prefix}set_var`,[e,t]);return}return this.request(`${this.prefix}set_var`,[e,t])}deleteVar(e){this.notify(`${this.prefix}del_var`,[e])}getOption(e){return this.request(`${this.prefix}get_option`,[e])}setOption(e,t,i){if(i){this.notify(`${this.prefix}set_option`,[e,t]);return}return this.request(`${this.prefix}set_option`,[e,t])}notify(e,t=[]){this.transport.notify(e,this.getArgsByPrefix(t))}};wv.BaseApi=ck});var dg=y(xv=>{"use strict";Object.defineProperty(xv,"__esModule",{value:!0});xv.Buffer=void 0;var Jue=hg(),hk=class extends Jue.BaseApi{constructor(){super(...arguments),this.prefix="nvim_buf_"}async attach(e=!1,t={}){return await this.request(`${this.prefix}attach`,[e,t])}async detach(){return await this.request(`${this.prefix}detach`,[])}get id(){return this.data}get length(){return this.request(`${this.prefix}line_count`,[])}get lines(){return this.getLines()}get changedtick(){return this.request(`${this.prefix}get_changedtick`,[])}get commands(){return this.getCommands()}getCommands(e={}){return this.request(`${this.prefix}get_commands`,[e])}getLines({start:e,end:t,strictIndexing:i}={start:0,end:-1,strictIndexing:!0}){let r=typeof i>"u"?!0:i;return this.request(`${this.prefix}get_lines`,[e,t,r])}setLines(e,t,i=!1){let{start:r,end:o,strictIndexing:s}=t??{};r=r??0,o=o??r+1;let a=s??!0;return this[i?"notify":"request"](`${this.prefix}set_lines`,[r,o,a,typeof e=="string"?[e]:e])}setVirtualText(e,t,i,r={}){return this.client.call("coc#vtext#add",[this.id,e,t,i,r],!0),Promise.resolve(e)}deleteExtMark(e,t){this.client.isVim||this.notify(`${this.prefix}del_extmark`,[e,t])}async getExtMarkById(e,t,i={}){return this.client.isVim?Promise.resolve([]):this.request(`${this.prefix}get_extmark_by_id`,[e,t,i])}async getExtMarks(e,t,i,r={}){return this.client.isVim?Promise.resolve([]):this.request(`${this.prefix}get_extmarks`,[e,t,i,r])}setExtMark(e,t,i,r={}){this.client.isVim||this.notify(`${this.prefix}set_extmark`,[e,t,i,r])}insert(e,t){return this.setLines(e,{start:t,end:t,strictIndexing:!0})}replace(e,t){let i=typeof e=="string"?[e]:e;return this.setLines(i,{start:t,end:t+i.length,strictIndexing:!1})}remove(e,t,i=!1){return this.setLines([],{start:e,end:t,strictIndexing:i})}append(e){return this.setLines(e,{start:-1,end:-1,strictIndexing:!1})}get name(){return this.request(`${this.prefix}get_name`,[])}setName(e){return this.request(`${this.prefix}set_name`,[e])}get valid(){return this.request(`${this.prefix}is_valid`,[])}mark(e){return this.request(`${this.prefix}get_mark`,[e])}getKeymap(e){return this.request(`${this.prefix}get_keymap`,[e])}setKeymap(e,t,i,r={}){this.client.call("coc#compat#buf_add_keymap",[this.id,e,t,i,r],!0)}get loaded(){return this.request(`${this.prefix}is_loaded`,[])}getOffset(e){return this.request(`${this.prefix}get_offset`,[e])}addHighlight({hlGroup:e,line:t,colStart:i,colEnd:r,srcId:o}){if(!e)throw new Error("hlGroup should not empty");let s=typeof r<"u"?r:-1,a=typeof i<"u"?i:-0,l=typeof o<"u"?o:-1,u=l==0?"request":"notify",c=this[u](`${this.prefix}add_highlight`,[l,e,t,a,s]);return u==="request"?c:Promise.resolve(null)}clearHighlight(e={}){let t={srcId:-1,lineStart:0,lineEnd:-1},{srcId:i,lineStart:r,lineEnd:o}=Object.assign({},t,e);return this.notify(`${this.prefix}clear_highlight`,[i,r,o])}highlightRanges(e,t,i){this.client.call("coc#highlight#ranges",[this.id,e,t,i],!0)}clearNamespace(e,t=0,i=-1){this.client.call("coc#highlight#clear_highlight",[this.id,e,t,i],!0)}placeSign(e){let t={lnum:e.lnum};typeof e.priority=="number"&&(t.priority=e.priority),this.client.call("sign_place",[e.id||0,e.group||"",e.name,this.id,t],!0)}unplaceSign(e){let t={buffer:this.id};e.id!=null&&(t.id=e.id),this.client.call("sign_unplace",[e.group||"",t],!0)}async getSigns(e){return(await this.client.call("sign_getplaced",[this.id,e||{}]))[0].signs}async getHighlights(e,t=0,i=-1){let r=[],o=await this.client.call("coc#highlight#get_highlights",[this.id,e,t,i]);for(let s of o)r.push({hlGroup:s[0],lnum:s[1],colStart:s[2],colEnd:s[3],id:s[4]});return r}updateHighlights(e,t,i={}){if(typeof i=="number"){this.client.logError("Bad option for buffer.updateHighlights()",new Error().stack);return}let r=typeof i.start=="number"?i.start:0,o=typeof i.end=="number"?i.end:-1,s=typeof i.changedtick=="number"?i.changedtick:null,a=typeof i.priority=="number"?i.priority:null;if(r==0&&o==-1){let l=t.map(u=>[u.hlGroup,u.lnum,u.colStart,u.colEnd,u.combine===!1?0:1,u.start_incl?1:0,u.end_incl?1:0]);this.client.call("coc#highlight#buffer_update",[this.id,e,l,a,s],!0);return}this.client.call("coc#highlight#update_highlights",[this.id,e,t,r,o,a,s],!0)}listen(e,t,i){this.client.attachBufferEvent(this,e,t),i&&i.push({dispose:()=>{this.client.detachBufferEvent(this,e,t)}})}};xv.Buffer=hk});var gg=y(Cv=>{"use strict";Object.defineProperty(Cv,"__esModule",{value:!0});Cv.Window=void 0;var $ue=hg(),dk=require("timers"),gk=class extends $ue.BaseApi{constructor(){super(...arguments),this.prefix="nvim_win_"}get id(){return this.data}get buffer(){return this.request(`${this.prefix}get_buf`,[])}get tabpage(){return this.request(`${this.prefix}get_tabpage`,[])}get cursor(){return this.request(`${this.prefix}get_cursor`,[])}setCursor(e,t=!1){return this[t?"notify":"request"](`${this.prefix}set_cursor`,[e])}get height(){return this.request(`${this.prefix}get_height`,[])}setHeight(e,t=!1){return this[t?"notify":"request"](`${this.prefix}set_height`,[e])}get width(){return this.request(`${this.prefix}get_width`,[])}setWidth(e,t=!1){return this[t?"notify":"request"](`${this.prefix}set_height`,[e])}get position(){return this.request(`${this.prefix}get_position`,[])}get row(){return this.request(`${this.prefix}get_position`,[]).then(e=>e[0])}get col(){return this.request(`${this.prefix}get_position`,[]).then(e=>e[1])}get valid(){return this.request(`${this.prefix}is_valid`,[])}get number(){return this.request(`${this.prefix}get_number`,[])}setConfig(e,t){return this[t?"notify":"request"](`${this.prefix}set_config`,[e])}getConfig(){return this.request(`${this.prefix}get_config`,[])}close(e,t){if(t){this.notify(`${this.prefix}close`,[e]);let i=0,r=setInterval(()=>{if(i==5)return(0,dk.clearInterval)(r);this.request(`${this.prefix}is_valid`,[]).then(o=>{o?this.notify(`${this.prefix}close`,[e]):(0,dk.clearInterval)(r)},()=>{(0,dk.clearInterval)(r)}),i++},50);return null}return this.request(`${this.prefix}close`,[e])}highlightRanges(e,t,i=10,r){if(r){this.client.call("coc#highlight#match_ranges",[this.id,0,t,e,i],!0);return}return this.client.call("coc#highlight#match_ranges",[this.id,0,t,e,i])}clearMatchGroup(e){this.client.call("coc#highlight#clear_match_group",[this.id,e],!0)}clearMatches(e){this.client.call("coc#highlight#clear_matches",[this.id,e],!0)}};Cv.Window=gk});var pg=y(Sv=>{"use strict";Object.defineProperty(Sv,"__esModule",{value:!0});Sv.Tabpage=void 0;var Uue=hg(),pk=class extends Uue.BaseApi{constructor(){super(...arguments),this.prefix="nvim_tabpage_"}get windows(){return this.request(`${this.prefix}list_wins`,[])}get window(){return this.request(`${this.prefix}get_win`,[])}get valid(){return this.request(`${this.prefix}is_valid`,[])}get number(){return this.request(`${this.prefix}get_number`,[])}getOption(){throw new Error("Tabpage does not have `getOption`")}setOption(){throw new Error("Tabpage does not have `setOption`")}};Sv.Tabpage=pk});var rH=y(_l=>{"use strict";Object.defineProperty(_l,"__esModule",{value:!0});_l.Metadata=_l.ExtType=void 0;var Xue=dg(),Gue=gg(),zue=pg(),Kue;(function(n){n[n.Buffer=0]="Buffer",n[n.Window=1]="Window",n[n.Tabpage=2]="Tabpage"})(Kue=_l.ExtType||(_l.ExtType={}));_l.Metadata=[{constructor:Xue.Buffer,name:"Buffer",prefix:"nvim_buf_"},{constructor:Gue.Window,name:"Window",prefix:"nvim_win_"},{constructor:zue.Tabpage,name:"Tabpage",prefix:"nvim_tabpage_"}]});var Pc=y(aa=>{"use strict";var wk=aa&&aa.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(aa,"__esModule",{value:!0});aa.createLogger=aa.nullLogger=void 0;var fk=wk(require("fs")),Que=wk(require("os")),mk=wk(require("path"));aa.nullLogger={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},trace:()=>{}};function Vue(){let n=process.env.NODE_CLIENT_LOG_FILE;if(n)return n;let e=process.env.XDG_RUNTIME_DIR;return e?mk.default.join(e,"node-client.log"):mk.default.join(Que.default.tmpdir(),`node-client-${process.pid}.log`)}var bk=Vue(),oH=process.env.NODE_CLIENT_LOG_LEVEL||"info",yk=process.getuid&&process.getuid()==0;if(!yk)try{fk.default.mkdirSync(mk.default.dirname(bk),{recursive:!0}),fk.default.writeFileSync(bk,"",{encoding:"utf8",mode:438})}catch{yk=!0}function sH(n){return n==null?n:Array.isArray(n)?n.map(e=>sH(e)):typeof n=="object"&&typeof n.prefix=="string"&&typeof n.data=="number"?"["+n.prefix+n.data+"]":n}function ece(n){return n==null?String(n):typeof n=="object"?JSON.stringify(n,null,2):String(n)}function tce(n){return`${n.getHours()}:${n.getMinutes()}:${n.getSeconds()}.${n.getMilliseconds()}`}var vk=class{constructor(e){this.name=e}get stream(){return yk?null:this._stream?this._stream:(this._stream=fk.default.createWriteStream(bk,{encoding:"utf8"}),this._stream)}getText(e,t,i){let r="";if(i.length){let o=sH(i);r=" "+o.map(s=>ece(s))}return`${tce(new Date)} ${e.toUpperCase()} [${this.name}] - ${t}${r} -`}debug(e,...t){oH!="debug"||this.stream==null||this.stream.write(this.getText("debug",e,t))}info(e,...t){this.stream!=null&&this.stream.write(this.getText("info",e,t))}warn(e,...t){this.stream!=null&&this.stream.write(this.getText("warn",e,t))}error(e,...t){this.stream!=null&&this.stream.write(this.getText("error",e,t))}trace(e,...t){oH!="trace"||this.stream==null||this.stream.write(this.getText("trace",e,t))}};function ice(n){return new vk(n)}aa.createLogger=ice});var Sk=y(Ck=>{"use strict";Object.defineProperty(Ck,"__esModule",{value:!0});var nce=require("events"),rce=Pc(),aH=process.env.NODE_CLIENT_LOG_LEVEL=="debug",fg=(0,rce.createLogger)("transport"),xk=class extends nce.EventEmitter{constructor(e){super(),this.logger=e,this.pauseLevel=0,this.paused=new Map}debug(e,...t){!aH||fg.debug(e,...t)}info(e,...t){fg.info(e,...t)}debugMessage(e){if(!aH)return;let t=e[0];t==0?fg.debug("receive request:",e.slice(1)):t==1||(t==2?fg.debug("receive notification:",e.slice(1)):fg.debug("unknown message:",e))}pauseNotification(){this.pauseLevel=this.pauseLevel+1,this.paused.set(this.pauseLevel,[])}cancelNotification(){let{pauseLevel:e}=this;e>0&&(this.paused.delete(e),this.pauseLevel=e-1)}resumeNotification(e=!1){let{pauseLevel:t}=this;if(t==0)return e?null:Promise.resolve([[],null]);let i=Error().stack;this.pauseLevel=t-1;let r=this.paused.get(t);return this.paused.delete(t),r&&r.length?new Promise((o,s)=>{if(!e)return this.request("nvim_call_atomic",[r],(a,l)=>{if(a){let u=new Error(`call_atomic error: ${a[1]}`);return u.stack=i,s(u)}if(Array.isArray(l)&&l[1]!=null){let[u,c,h]=l[1],[d,g]=r[u],p=new Error(`call_atomic request error on "${d}": ${h}`);return p.stack=i,this.logger.error(`call_atomic request error ${c} on "${d}"`,g,h,i),s(p)}o(l)});this.notify("nvim_call_atomic",[r]),o(void 0)}):e?null:Promise.resolve([[],void 0])}};Ck.default=xk});var uH=y(br=>{"use strict";var oce=br&&br.__createBinding||(Object.create?function(n,e,t,i){i===void 0&&(i=t);var r=Object.getOwnPropertyDescriptor(e,t);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(n,i,r)}:function(n,e,t,i){i===void 0&&(i=t),n[i]=e[t]}),sce=br&&br.__setModuleDefault||(Object.create?function(n,e){Object.defineProperty(n,"default",{enumerable:!0,value:e})}:function(n,e){n.default=e}),ace=br&&br.__importStar||function(n){if(n&&n.__esModule)return n;var e={};if(n!=null)for(var t in n)t!=="default"&&Object.prototype.hasOwnProperty.call(n,t)&&oce(e,n,t);return sce(e,n),e},lH=br&&br.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(br,"__esModule",{value:!0});br.NvimTransport=void 0;var ts=ace(iH()),lce=lH(nH()),uce=rH(),cce=lH(Sk()),Dk=class extends cce.default{constructor(e){super(e),this.pending=new Map,this.nextRequestId=1,this.attached=!1;let t=this.setupCodec();this.encodeStream=ts.createEncodeStream({codec:t}),this.decodeStream=ts.createDecodeStream({codec:t}),this.decodeStream.on("data",i=>{this.parseMessage(i)}),this.decodeStream.on("end",()=>{this.detach(),this.emit("detach")})}parseMessage(e){let t=e[0];if(this.debugMessage(e),t===0)this.emit("request",e[2].toString(),e[3],this.createResponse(e[1]));else if(t===1){let i=e[1],r=this.pending.get(i);if(r){this.pending.delete(i);let o=e[2];o&&o.length!=2&&(o=[0,o instanceof Error?o.message:o]),r(o,e[3])}}else t===2?this.emit("notification",e[1].toString(),e[2]):console.error(`Invalid message type ${t}`)}setupCodec(){let e=ts.createCodec();return uce.Metadata.forEach(({constructor:t},i)=>{e.addExtPacker(i,t,r=>ts.encode(r.data)),e.addExtUnpacker(i,r=>new t({transport:this,client:this.client,data:ts.decode(r)}))}),this.codec=e,this.codec}attach(e,t,i){this.encodeStream=this.encodeStream.pipe(e);let r=new lce.default;t.pipe(r).pipe(this.decodeStream),this.writer=e,this.reader=t,this.client=i,this.attached=!0}detach(){!this.attached||(this.attached=!1,this.encodeStream.unpipe(this.writer),this.reader.unpipe(this.decodeStream))}request(e,t,i){if(!this.attached)return;let r=this.nextRequestId;this.nextRequestId=this.nextRequestId+1;let o=Date.now();this.debug("request to nvim:",r,e,t),this.encodeStream.write(ts.encode([0,r,e,t],{codec:this.codec}));let s=Error().stack,a=setTimeout(()=>{this.debug(`request to vim blocked more than 1s: ${e}`,t,s)},1e3);this.pending.set(r,(l,u)=>{clearTimeout(a),this.debug("response of nvim:",r,`${Date.now()-o}ms`,u,l),i(l,u)})}notify(e,t){if(!!this.attached){if(this.pauseLevel!=0){let i=this.paused.get(this.pauseLevel);if(i){i.push([e,t]);return}}this.debug("nvim notification:",e,t),this.encodeStream.write(ts.encode([2,e,t],{codec:this.codec}))}}send(e){this.encodeStream.write(ts.encode(e,{codec:this.codec}))}createResponse(e){let{encodeStream:t}=this,i=Date.now(),r=!1,o=setTimeout(()=>{this.debug("request to client cost more than 1s",e)},1e3);return{send:(s,a)=>{clearTimeout(o),!(r||!this.attached)&&(this.debug("response of client:",e,`${Date.now()-i}ms`,s,a==!0),r=!0,t.write(ts.encode([1,e,a?s:null,a?null:s])))}}}};br.NvimTransport=Dk});var hH=y(mg=>{"use strict";var cH=mg&&mg.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(mg,"__esModule",{value:!0});var hce=cH(require("events")),dce=cH(require("readline")),gce=Pc(),Ec=(0,gce.createLogger)("connection"),Tk=class extends hce.default{constructor(e,t){super(),this.readable=e,this.writeable=t;let i=dce.default.createInterface(this.readable);i.on("line",r=>{this.parseData(r)}),i.on("close",()=>{Ec.error("connection closed"),process.exit(0)})}parseData(e){if(e.length==0)return;let t;try{t=JSON.parse(e)}catch{console.error(`Invalid data from vim: ${e}`);return}let[i,r]=t;i>0?(Ec.debug("received request:",i,r),this.emit("request",i,r)):i==0?(Ec.debug("received notification:",r),this.emit("notification",r)):(Ec.debug("received response:",i,r),this.emit("response",i,r))}response(e,t){this.send([e,t||null])}notify(e,t){this.send([0,[e,t||null]])}send(e){Ec.debug("send to vim:",e);try{this.writeable.write(JSON.stringify(e)+` -`)}catch{Ec.error("Send error:",e)}}redraw(e){this.send(["redraw",e?"force":""])}command(e){this.send(["ex",e])}expr(e){this.send(["expr",e])}call(e,t,i){if(!i){this.send(["call",e,t]);return}this.send(["call",e,t,i])}dispose(){this.removeAllListeners()}};mg.default=Tk});var dH=y(Pk=>{"use strict";Object.defineProperty(Pk,"__esModule",{value:!0});var pce=Pc(),iEe=(0,pce.createLogger)("request"),fce=process.env.COC_NVIM=="1"?"coc#api#call":"nvim#api#call",kk=class{constructor(e,t,i){this.connection=e,this.cb=t,this.id=i}request(e,t=[]){this.method=e,this.connection.call(fce,[e.slice(5),t],this.id)}callback(e,t,i){let{method:r,cb:o}=this;if(t)return o([0,t.toString()]);switch(r){case"nvim_list_wins":case"nvim_tabpage_list_wins":return o(null,i.map(s=>e.createWindow(s)));case"nvim_tabpage_get_win":case"nvim_get_current_win":case"nvim_open_win":return o(null,e.createWindow(i));case"nvim_list_bufs":return o(null,i.map(s=>e.createBuffer(s)));case"nvim_win_get_buf":case"nvim_create_buf":case"nvim_get_current_buf":return o(null,e.createBuffer(i));case"nvim_list_tabpages":return o(null,i.map(s=>e.createTabpage(s)));case"nvim_get_current_tabpage":return o(null,e.createTabpage(i));default:return o(null,i)}}};Pk.default=kk});var gH=y(Rc=>{"use strict";var Rk=Rc&&Rc.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Rc,"__esModule",{value:!0});Rc.VimTransport=void 0;var mce=Rk(Sk()),bce=Rk(hH()),yce=Rk(dH()),Ek=class extends mce.default{constructor(e){super(e),this.pending=new Map,this.nextRequestId=-1,this.attached=!1,this.errText="",this.outText="",this.notifyMethod=process.env.COC_NVIM=="1"?"coc#api#notify":"nvim#api#notify"}attach(e,t,i){let r=this.connection=new bce.default(t,e);this.attached=!0,this.client=i,r.on("request",(o,s)=>{let[a,l]=s;this.emit("request",a,l,this.createResponse(o))}),r.on("notification",o=>{let[s,a]=o;this.emit("notification",s.toString(),a)}),r.on("response",(o,s)=>{let a=this.pending.get(o);if(a){this.pending.delete(o);let l=null,u=null;Array.isArray(s)?(l=s[0],u=s[1]):l=s,a.callback(this.client,l,u)}})}send(e){this.connection.send(e)}detach(){!this.attached||(this.attached=!1,this.connection.dispose())}request(e,t,i){if(!this.attached)return i([0,"transport disconnected"]);let r=this.nextRequestId;this.nextRequestId=this.nextRequestId-1;let o=Date.now();this.debug("request to vim:",r,e,t);let s=setTimeout(()=>{this.debug("request to vim cost more than 1s",e,t)},1e3),a=new yce.default(this.connection,(l,u)=>{clearTimeout(s),this.debug("response from vim cost:",r,`${Date.now()-o}ms`),i(l,u)},r);this.pending.set(r,a),a.request(e,t)}notify(e,t){if(!this.attached)return;if(this.pauseLevel!=0){let r=this.paused.get(this.pauseLevel);if(r){r.push([e,t]);return}}let i=e.slice(5);if(i=="err_write"){this.errText=this.errText+t[0].toString();return}if(i=="out_write"){let r=t[0].toString()||"";if(!r.includes(` -`))this.outText=this.outText+r;else{let o=this.outText+t[0].toString();this.outText="",this.connection.call(this.notifyMethod,[i,[o]])}return}if(i=="err_writeln"){let r=this.errText+t[0].toString();this.errText="",this.connection.call(this.notifyMethod,[i,[r]]);return}this.connection.call(this.notifyMethod,[i,t])}createResponse(e){let t=!1,{connection:i}=this,r=Date.now(),o=setTimeout(()=>{this.debug("request to client cost more than 1s",e)},1e3);return{send:(s,a)=>{if(clearTimeout(o),t||!this.attached)return;t=!0;let l=null;a&&(l=typeof s=="string"?s:s.toString()),this.debug("response of client cost:",e,`${Date.now()-r}ms`),i.response(e,[l,a?null:s])}}}};Rc.VimTransport=Ek});var pH=y(Dv=>{"use strict";Object.defineProperty(Dv,"__esModule",{value:!0});Dv.Neovim=void 0;var vce=hg(),wce=dg(),xce=pg(),Cce=gg(),Sce=process.env.VIM_NODE_RPC=="1",_k=class extends vce.BaseApi{constructor(){super(...arguments),this.prefix="nvim_",this.Buffer=wce.Buffer,this.Window=Cce.Window,this.Tabpage=xce.Tabpage}getArgs(e){return e?Array.isArray(e)?e:[e]:[]}get apiInfo(){return this.request(`${this.prefix}get_api_info`)}get buffers(){return this.request(`${this.prefix}list_bufs`)}get buffer(){return this.request(`${this.prefix}get_current_buf`)}async setBuffer(e){await this.request(`${this.prefix}set_current_buf`,[e])}get chans(){return this.request(`${this.prefix}list_chans`)}getChanInfo(e){return this.request(`${this.prefix}get_chan_info`,[e])}createNamespace(e=""){return process.env.COC_NVIM=="1"?(e=e.startsWith("coc-")?e.slice(4):e,this.request(`${this.prefix}call_function`,["coc#highlight#create_namespace",[e]])):this.request(`${this.prefix}create_namespace`,[e])}get namespaces(){return this.request(`${this.prefix}get_namespaces`,[])}get commands(){return this.getCommands()}getCommands(e={}){return this.request(`${this.prefix}get_commands`,[e])}get tabpages(){return this.request(`${this.prefix}list_tabpages`)}get tabpage(){return this.request(`${this.prefix}get_current_tabpage`)}async setTabpage(e){await this.request(`${this.prefix}set_current_tabpage`,[e])}get windows(){return this.getWindows()}get window(){return this.request(`${this.prefix}get_current_win`)}getWindows(){return this.request(`${this.prefix}list_wins`)}async setWindow(e){await this.request(`${this.prefix}set_current_win`,[e])}get runtimePaths(){return this.request(`${this.prefix}list_runtime_paths`)}setDirectory(e){return this.request(`${this.prefix}set_current_dir`,[e])}get line(){return this.getLine()}createNewBuffer(e=!1,t=!1){return this.request(`${this.prefix}create_buf`,[e,t])}openFloatWindow(e,t,i){return this.request(`${this.prefix}open_win`,[e,t,i])}getLine(){return this.request(`${this.prefix}get_current_line`)}setLine(e){return this.request(`${this.prefix}set_current_line`,[e])}getKeymap(e){return this.request(`${this.prefix}get_keymap`,[e])}get mode(){return this.request(`${this.prefix}get_mode`)}get colorMap(){return this.request(`${this.prefix}get_color_map`)}getColorByName(e){return this.request(`${this.prefix}get_color_by_name`,[e])}getHighlight(e,t=!0){let i=typeof e=="string"?"by_name":"by_id";return this.request(`${this.prefix}get_hl_${i}`,[e,t])}getHighlightByName(e,t=!0){return this.request(`${this.prefix}get_hl_by_name`,[e,t])}getHighlightById(e,t=!0){return this.request(`${this.prefix}get_hl_by_id`,[e,t])}deleteCurrentLine(){return this.request(`${this.prefix}del_current_line`)}eval(e){return this.request(`${this.prefix}eval`,[e])}lua(e,t=[]){return this.request(`${this.prefix}exec_lua`,[e,t])}executeLua(e,t=[]){let i=this.getArgs(t);return this.lua(e,i)}callDictFunction(e,t,i=[]){let r=this.getArgs(i);return this.request(`${this.prefix}call_dict_function`,[e,t,r])}call(e,t=[],i){let r=this.getArgs(t);return i?(this.notify(`${this.prefix}call_function`,[e,r]),null):this.request(`${this.prefix}call_function`,[e,r])}callTimer(e,t=[],i){let r=this.getArgs(t);return i?(this.notify(`${this.prefix}call_function`,["coc#util#timer",[e,r]]),null):Sce?(this.notify(`${this.prefix}call_function`,["coc#util#timer",[e,r]]),new Promise(o=>{setTimeout(()=>{o(null)},20)})):this.request(`${this.prefix}call_function`,["coc#util#timer",[e,r]])}callAsync(e,t=[]){let i=this.getArgs(t);return this.client.sendAsyncRequest(e,i)}callFunction(e,t=[]){return this.call(e,t)}callAtomic(e){return this.request(`${this.prefix}call_atomic`,[e])}command(e,t){return t?(this.notify(`${this.prefix}command`,[e]),null):this.request(`${this.prefix}command`,[e])}commandOutput(e){return this.request(`${this.prefix}command_output`,[e])}exec(e,t=!1){return this.request(`${this.prefix}exec`,[e,t])}getVvar(e){return this.request(`${this.prefix}get_vvar`,[e])}feedKeys(e,t,i){return this.request(`${this.prefix}feedkeys`,[e,t,i])}input(e){return this.request(`${this.prefix}input`,[e])}parseExpression(e,t,i){return this.request(`${this.prefix}parse_expression`,[e,t,i])}getProc(e){return this.request(`${this.prefix}get_proc`,[e])}getProcChildren(e){return this.request(`${this.prefix}get_proc_children`,[e])}replaceTermcodes(e,t,i,r){return this.request(`${this.prefix}replace_termcodes`,[e,t,i,r])}strWidth(e){return this.request(`${this.prefix}strwidth`,[e])}outWrite(e){this.notify(`${this.prefix}out_write`,[e])}outWriteLine(e){this.outWrite(`${e} -`)}errWrite(e){this.notify(`${this.prefix}err_write`,[e])}errWriteLine(e){this.notify(`${this.prefix}err_writeln`,[e])}get uis(){return this.request(`${this.prefix}list_uis`)}uiAttach(e,t,i){return this.request(`${this.prefix}ui_attach`,[e,t,i])}uiDetach(){return this.request(`${this.prefix}ui_detach`,[])}uiTryResize(e,t){return this.request(`${this.prefix}ui_try_resize`,[e,t])}uiSetOption(e,t){return this.request(`${this.prefix}ui_set_option`,[e,t])}subscribe(e){return this.request(`${this.prefix}subscribe`,[e])}unsubscribe(e){return this.request(`${this.prefix}unsubscribe`,[e])}setClientInfo(e,t,i,r,o){this.notify(`${this.prefix}set_client_info`,[e,t,i,r,o])}async quit(){this.command("qa!",!0),this.transport&&this.transport.detach()}};Dv.Neovim=_k});var Pv=y(_c=>{"use strict";Object.defineProperty(_c,"__esModule",{value:!0});_c.NeovimClient=_c.AsyncResponse=void 0;var Dce=uH(),Tce=gH(),kce=pH(),Pce=dg(),Ece=gg(),Rce=pg(),_ce=Pc(),fH=(0,_ce.createLogger)("client"),Tv=process.env.VIM_NODE_RPC=="1",kv=class{constructor(e,t){this.requestId=e,this.cb=t,this.finished=!1}finish(e,t){if(!this.finished){if(this.finished=!0,e){this.cb(new Error(e));return}this.cb(null,t)}}};_c.AsyncResponse=kv;var Lk=class extends kce.Neovim{constructor(e){super({}),this.logger=e,this.requestId=1,this.responses=new Map,this.attachedBuffers=new Map,this.isVim=Tv,Object.defineProperty(this,"client",{value:this});let t=Tv?new Tce.VimTransport(e):new Dce.NvimTransport(e);this.setTransport(t),this.transportAttached=!1,this.handleRequest=this.handleRequest.bind(this),this.handleNotification=this.handleNotification.bind(this)}echoError(e){let t=process.env.COC_NVIM=="1"?"[coc.nvim] ":"";e instanceof Error?(this.errWriteLine(t+e.message+" use :CocOpenLog for details"),this.logError(e.message||"Unknown error",e.stack)):(this.errWriteLine(t+e),this.logError(e.toString(),Error().stack))}logError(e,...t){!this.logger||this.logger.error(e,...t)}createBuffer(e){return new Pce.Buffer({transport:this.transport,data:e,client:this})}createWindow(e){return new Ece.Window({transport:this.transport,data:e,client:this})}createTabpage(e){return new Rce.Tabpage({transport:this.transport,data:e,client:this})}send(e){this.transport.send(e)}redrawVim(e){!Tv||this.transport.notify("nvim_command",["redraw"+(e?"!":"")])}attach({reader:e,writer:t},i=!0){this.transport.attach(t,e,this),this.transportAttached=!0,this.setupTransport(i)}detach(){this.transport.detach(),this.transportAttached=!1}get isApiReady(){return this.transportAttached&&typeof this._channelId<"u"}get channelId(){return this._isReady.then(()=>this._channelId)}isAttached(e){return this.attachedBuffers.has(e)}handleRequest(e,t,i){this.emit("request",e,t,i)}sendAsyncRequest(e,t){let i=this.requestId;return this.requestId=i+1,this.notify("nvim_call_function",["coc#rpc#async_request",[i,e,t||[]]]),new Promise((r,o)=>{let s=new kv(i,(a,l)=>{if(a)return o(a);r(l)});this.responses.set(i,s)})}emitNotification(e,t){if(e.endsWith("_event")){if(e.startsWith("nvim_buf_")){let i=e.replace(/nvim_buf_(.*)_event/,"$1"),{id:r}=t[0];if(!this.attachedBuffers.has(r))return;(this.attachedBuffers.get(r).get(i)||[]).forEach(a=>a(...t)),i==="detach"&&this.attachedBuffers.delete(r);return}if(e.startsWith("nvim_async_request")){let[i,r,o]=t;this.handleRequest(r,o,{send:(s,a)=>{this.notify("nvim_call_function",["coc#rpc#async_response",[i,s,a]])}});return}if(e.startsWith("nvim_async_response")){let[i,r,o]=t,s=this.responses.get(i);if(!s){console.error(`Response not found for request ${i}`);return}this.responses.delete(i),s.finish(r,o);return}if(e==="nvim_error_event"){this.logger.error("Error event from nvim:",t[0],t[1]);return}this.logger.debug(`Unhandled event: ${e}`,t)}else this.emit("notification",e,t)}handleNotification(e,t){this.emitNotification(e,t)}setupTransport(e=!0){if(!this.transportAttached)throw new Error("Not attached to input/output");this.transport.on("request",this.handleRequest),this.transport.on("notification",this.handleNotification),this.transport.on("detach",()=>{this.emit("disconnect"),this.transport.removeAllListeners("request"),this.transport.removeAllListeners("notification"),this.transport.removeAllListeners("detach")}),e?this._isReady=this.generateApi():(this._channelId=0,this._isReady=Promise.resolve(!0))}requestApi(){return new Promise((e,t)=>{this.transport.request("nvim_get_api_info",[],(i,r)=>{i?t(new Error(Array.isArray(i)?i[1]:i.message||i.toString())):e(r)})})}async generateApi(){let e;try{e=await this.requestApi()}catch(t){console.error("Could not get vim api results"),fH.error(t)}if(e)try{let[t,i]=e;return this.functions=i.functions.map(r=>r.name),this._channelId=t,!0}catch(t){return fH.error(t.stack),null}return null}attachBufferEvent(e,t,i){let r=this.attachedBuffers.get(e.id)||new Map,o=r.get(t)||[];o.includes(i)||(o.push(i),r.set(t,o),this.attachedBuffers.set(e.id,r))}detachBufferEvent(e,t,i){let r=this.attachedBuffers.get(e.id);if(!r||!r.has(t))return;let o=r.get(t).filter(s=>s!==i);r.set(t,o)}pauseNotification(){let e=Error().stack;this.transport.pauseLevel!=0&&this.logError("Nested nvim.pauseNotification() detected, please avoid it:",e),this.transport.pauseNotification(),process.nextTick(()=>{this.transport.pauseLevel>0&&this.logError("resumeNotification not called within same tick:",e)})}resumeNotification(e,t){return Tv&&e&&this.transport.notify("nvim_command",["redraw"]),t?(this.transport.resumeNotification(!0),Promise.resolve(null)):this.transport.resumeNotification()}hasFunction(e){return this.functions?this.functions.includes(e):!0}};_c.NeovimClient=Lk});var mH=y(Ev=>{"use strict";Object.defineProperty(Ev,"__esModule",{value:!0});Ev.attach=void 0;var Lce=require("net"),Ice=Pv(),Fce=Pc();function jce({reader:n,writer:e,proc:t,socket:i},r=null,o=!0){let s,a,l;if(r||(r=Fce.nullLogger),i){let u=(0,Lce.createConnection)(i);s=u,a=u,u.once("close",()=>{l.detach()})}else n&&e?(s=e,a=n):t&&(s=t.stdin,a=t.stdout,t.once("disconnect",()=>{l.detach()}));if(s.on("error",u=>{u.code=="EPIPE"&&l.detach()}),s&&a)return l=new Ice.NeovimClient(r),l.attach({writer:s,reader:a},o),l;throw new Error("Invalid arguments, could not attach")}Ev.attach=jce});var bH=y(yr=>{"use strict";Object.defineProperty(yr,"__esModule",{value:!0});yr.Tabpage=yr.Window=yr.Buffer=yr.NeovimClient=yr.Neovim=void 0;var Mce=Pv();Object.defineProperty(yr,"Neovim",{enumerable:!0,get:function(){return Mce.NeovimClient}});var Oce=Pv();Object.defineProperty(yr,"NeovimClient",{enumerable:!0,get:function(){return Oce.NeovimClient}});var Ace=dg();Object.defineProperty(yr,"Buffer",{enumerable:!0,get:function(){return Ace.Buffer}});var Nce=gg();Object.defineProperty(yr,"Window",{enumerable:!0,get:function(){return Nce.Window}});var Hce=pg();Object.defineProperty(yr,"Tabpage",{enumerable:!0,get:function(){return Hce.Tabpage}})});var yH=y(kn=>{"use strict";Object.defineProperty(kn,"__esModule",{value:!0});kn.Window=kn.Tabpage=kn.Buffer=kn.NeovimClient=kn.Neovim=kn.attach=void 0;var qce=mH();Object.defineProperty(kn,"attach",{enumerable:!0,get:function(){return qce.attach}});var bg=bH();Object.defineProperty(kn,"Neovim",{enumerable:!0,get:function(){return bg.Neovim}});Object.defineProperty(kn,"NeovimClient",{enumerable:!0,get:function(){return bg.NeovimClient}});Object.defineProperty(kn,"Buffer",{enumerable:!0,get:function(){return bg.Buffer}});Object.defineProperty(kn,"Tabpage",{enumerable:!0,get:function(){return bg.Tabpage}});Object.defineProperty(kn,"Window",{enumerable:!0,get:function(){return bg.Window}})});var is=y(jk=>{"use strict";Object.defineProperty(jk,"__esModule",{value:!0});var Ik;function Fk(){if(Ik===void 0)throw new Error("No runtime abstraction layer installed");return Ik}(function(n){function e(t){if(t===void 0)throw new Error("No runtime abstraction layer provided");Ik=t}n.install=e})(Fk||(Fk={}));jk.default=Fk});var Mk=y(yg=>{"use strict";Object.defineProperty(yg,"__esModule",{value:!0});yg.Disposable=void 0;var Bce;(function(n){function e(t){return{dispose:t}}n.create=e})(Bce=yg.Disposable||(yg.Disposable={}))});var vH=y(Rv=>{"use strict";Object.defineProperty(Rv,"__esModule",{value:!0});Rv.AbstractMessageBuffer=void 0;var Wce=13,Yce=10,Zce=`\r -`,Ok=class{constructor(e="utf-8"){this._encoding=e,this._chunks=[],this._totalLength=0}get encoding(){return this._encoding}append(e){let t=typeof e=="string"?this.fromString(e,this._encoding):e;this._chunks.push(t),this._totalLength+=t.byteLength}tryReadHeaders(){if(this._chunks.length===0)return;let e=0,t=0,i=0,r=0;e:for(;tthis._totalLength)throw new Error("Cannot read so many bytes!");if(this._chunks[0].byteLength===e){let o=this._chunks[0];return this._chunks.shift(),this._totalLength-=e,this.asNative(o)}if(this._chunks[0].byteLength>e){let o=this._chunks[0],s=this.asNative(o,e);return this._chunks[0]=o.slice(e),this._totalLength-=e,s}let t=this.allocNative(e),i=0,r=0;for(;e>0;){let o=this._chunks[r];if(o.byteLength>e){let s=o.slice(0,e);t.set(s,i),i+=e,this._chunks[r]=o.slice(e),this._totalLength-=e,e-=e}else t.set(o,i),i+=o.byteLength,this._chunks.shift(),this._totalLength-=o.byteLength,e-=o.byteLength}return t}};Rv.AbstractMessageBuffer=Ok});var CH=y(qk=>{"use strict";Object.defineProperty(qk,"__esModule",{value:!0});var Jce=is(),wH=require("util"),Ll=Mk(),$ce=vH(),Lc=class extends $ce.AbstractMessageBuffer{constructor(e="utf-8"){super(e)}emptyBuffer(){return Lc.emptyBuffer}fromString(e,t){return Buffer.from(e,t)}toString(e,t){return e instanceof Buffer?e.toString(t):new wH.TextDecoder(t).decode(e)}asNative(e,t){return t===void 0?e instanceof Buffer?e:Buffer.from(e):e instanceof Buffer?e.slice(0,t):Buffer.from(e,0,t)}allocNative(e){return Buffer.allocUnsafe(e)}};Lc.emptyBuffer=Buffer.allocUnsafe(0);var Ak=class{constructor(e){this.stream=e}onClose(e){return this.stream.on("close",e),Ll.Disposable.create(()=>this.stream.off("close",e))}onError(e){return this.stream.on("error",e),Ll.Disposable.create(()=>this.stream.off("error",e))}onEnd(e){return this.stream.on("end",e),Ll.Disposable.create(()=>this.stream.off("end",e))}onData(e){return this.stream.on("data",e),Ll.Disposable.create(()=>this.stream.off("data",e))}},Nk=class{constructor(e){this.stream=e}onClose(e){return this.stream.on("close",e),Ll.Disposable.create(()=>this.stream.off("close",e))}onError(e){return this.stream.on("error",e),Ll.Disposable.create(()=>this.stream.off("error",e))}onEnd(e){return this.stream.on("end",e),Ll.Disposable.create(()=>this.stream.off("end",e))}write(e,t){return new Promise((i,r)=>{let o=s=>{s==null?i():r(s)};typeof e=="string"?this.stream.write(e,t,o):this.stream.write(e,o)})}end(){this.stream.end()}},xH=Object.freeze({messageBuffer:Object.freeze({create:n=>new Lc(n)}),applicationJson:Object.freeze({encoder:Object.freeze({name:"application/json",encode:(n,e)=>{try{return Promise.resolve(Buffer.from(JSON.stringify(n,void 0,0),e.charset))}catch(t){return Promise.reject(t)}}}),decoder:Object.freeze({name:"application/json",decode:(n,e)=>{try{return n instanceof Buffer?Promise.resolve(JSON.parse(n.toString(e.charset))):Promise.resolve(JSON.parse(new wH.TextDecoder(e.charset).decode(n)))}catch(t){return Promise.reject(t)}}})}),stream:Object.freeze({asReadableStream:n=>new Ak(n),asWritableStream:n=>new Nk(n)}),console,timer:Object.freeze({setTimeout(n,e,...t){let i=setTimeout(n,e,...t);return{dispose:()=>clearTimeout(i)}},setImmediate(n,...e){let t=setImmediate(n,...e);return{dispose:()=>clearImmediate(t)}},setInterval(n,e,...t){let i=setInterval(n,e,...t);return{dispose:()=>clearInterval(i)}}})});function Hk(){return xH}(function(n){function e(){Jce.default.install(xH)}n.install=e})(Hk||(Hk={}));qk.default=Hk});var Ic=y($i=>{"use strict";Object.defineProperty($i,"__esModule",{value:!0});$i.stringArray=$i.array=$i.func=$i.error=$i.number=$i.string=$i.boolean=void 0;function Uce(n){return n===!0||n===!1}$i.boolean=Uce;function SH(n){return typeof n=="string"||n instanceof String}$i.string=SH;function Xce(n){return typeof n=="number"||n instanceof Number}$i.number=Xce;function Gce(n){return n instanceof Error}$i.error=Gce;function zce(n){return typeof n=="function"}$i.func=zce;function DH(n){return Array.isArray(n)}$i.array=DH;function Kce(n){return DH(n)&&n.every(e=>SH(e))}$i.stringArray=Kce});var uP=y(ge=>{"use strict";Object.defineProperty(ge,"__esModule",{value:!0});ge.Message=ge.NotificationType9=ge.NotificationType8=ge.NotificationType7=ge.NotificationType6=ge.NotificationType5=ge.NotificationType4=ge.NotificationType3=ge.NotificationType2=ge.NotificationType1=ge.NotificationType0=ge.NotificationType=ge.RequestType9=ge.RequestType8=ge.RequestType7=ge.RequestType6=ge.RequestType5=ge.RequestType4=ge.RequestType3=ge.RequestType2=ge.RequestType1=ge.RequestType=ge.RequestType0=ge.AbstractMessageSignature=ge.ParameterStructures=ge.ResponseError=ge.ErrorCodes=void 0;var Il=Ic(),TH;(function(n){n.ParseError=-32700,n.InvalidRequest=-32600,n.MethodNotFound=-32601,n.InvalidParams=-32602,n.InternalError=-32603,n.jsonrpcReservedErrorRangeStart=-32099,n.serverErrorStart=-32099,n.MessageWriteError=-32099,n.MessageReadError=-32098,n.PendingResponseRejected=-32097,n.ConnectionInactive=-32096,n.ServerNotInitialized=-32002,n.UnknownErrorCode=-32001,n.jsonrpcReservedErrorRangeEnd=-32e3,n.serverErrorEnd=-32e3})(TH=ge.ErrorCodes||(ge.ErrorCodes={}));var vg=class extends Error{constructor(e,t,i){super(t),this.code=Il.number(e)?e:TH.UnknownErrorCode,this.data=i,Object.setPrototypeOf(this,vg.prototype)}toJson(){let e={code:this.code,message:this.message};return this.data!==void 0&&(e.data=this.data),e}};ge.ResponseError=vg;var vi=class{constructor(e){this.kind=e}static is(e){return e===vi.auto||e===vi.byName||e===vi.byPosition}toString(){return this.kind}};ge.ParameterStructures=vi;vi.auto=new vi("auto");vi.byPosition=new vi("byPosition");vi.byName=new vi("byName");var Pt=class{constructor(e,t){this.method=e,this.numberOfParams=t}get parameterStructures(){return vi.auto}};ge.AbstractMessageSignature=Pt;var Bk=class extends Pt{constructor(e){super(e,0)}};ge.RequestType0=Bk;var Wk=class extends Pt{constructor(e,t=vi.auto){super(e,1),this._parameterStructures=t}get parameterStructures(){return this._parameterStructures}};ge.RequestType=Wk;var Yk=class extends Pt{constructor(e,t=vi.auto){super(e,1),this._parameterStructures=t}get parameterStructures(){return this._parameterStructures}};ge.RequestType1=Yk;var Zk=class extends Pt{constructor(e){super(e,2)}};ge.RequestType2=Zk;var Jk=class extends Pt{constructor(e){super(e,3)}};ge.RequestType3=Jk;var $k=class extends Pt{constructor(e){super(e,4)}};ge.RequestType4=$k;var Uk=class extends Pt{constructor(e){super(e,5)}};ge.RequestType5=Uk;var Xk=class extends Pt{constructor(e){super(e,6)}};ge.RequestType6=Xk;var Gk=class extends Pt{constructor(e){super(e,7)}};ge.RequestType7=Gk;var zk=class extends Pt{constructor(e){super(e,8)}};ge.RequestType8=zk;var Kk=class extends Pt{constructor(e){super(e,9)}};ge.RequestType9=Kk;var Qk=class extends Pt{constructor(e,t=vi.auto){super(e,1),this._parameterStructures=t}get parameterStructures(){return this._parameterStructures}};ge.NotificationType=Qk;var Vk=class extends Pt{constructor(e){super(e,0)}};ge.NotificationType0=Vk;var eP=class extends Pt{constructor(e,t=vi.auto){super(e,1),this._parameterStructures=t}get parameterStructures(){return this._parameterStructures}};ge.NotificationType1=eP;var tP=class extends Pt{constructor(e){super(e,2)}};ge.NotificationType2=tP;var iP=class extends Pt{constructor(e){super(e,3)}};ge.NotificationType3=iP;var nP=class extends Pt{constructor(e){super(e,4)}};ge.NotificationType4=nP;var rP=class extends Pt{constructor(e){super(e,5)}};ge.NotificationType5=rP;var oP=class extends Pt{constructor(e){super(e,6)}};ge.NotificationType6=oP;var sP=class extends Pt{constructor(e){super(e,7)}};ge.NotificationType7=sP;var aP=class extends Pt{constructor(e){super(e,8)}};ge.NotificationType8=aP;var lP=class extends Pt{constructor(e){super(e,9)}};ge.NotificationType9=lP;var Qce;(function(n){function e(r){let o=r;return o&&Il.string(o.method)&&(Il.string(o.id)||Il.number(o.id))}n.isRequest=e;function t(r){let o=r;return o&&Il.string(o.method)&&r.id===void 0}n.isNotification=t;function i(r){let o=r;return o&&(o.result!==void 0||!!o.error)&&(Il.string(o.id)||Il.number(o.id)||o.id===null)}n.isResponse=i})(Qce=ge.Message||(ge.Message={}))});var hP=y(ns=>{"use strict";var kH;Object.defineProperty(ns,"__esModule",{value:!0});ns.LRUCache=ns.LinkedMap=ns.Touch=void 0;var ln;(function(n){n.None=0,n.First=1,n.AsOld=n.First,n.Last=2,n.AsNew=n.Last})(ln=ns.Touch||(ns.Touch={}));var _v=class{constructor(){this[kH]="LinkedMap",this._map=new Map,this._head=void 0,this._tail=void 0,this._size=0,this._state=0}clear(){this._map.clear(),this._head=void 0,this._tail=void 0,this._size=0,this._state++}isEmpty(){return!this._head&&!this._tail}get size(){return this._size}get first(){var e;return(e=this._head)==null?void 0:e.value}get last(){var e;return(e=this._tail)==null?void 0:e.value}has(e){return this._map.has(e)}get(e,t=ln.None){let i=this._map.get(e);if(!!i)return t!==ln.None&&this.touch(i,t),i.value}set(e,t,i=ln.None){let r=this._map.get(e);if(r)r.value=t,i!==ln.None&&this.touch(r,i);else{switch(r={key:e,value:t,next:void 0,previous:void 0},i){case ln.None:this.addItemLast(r);break;case ln.First:this.addItemFirst(r);break;case ln.Last:this.addItemLast(r);break;default:this.addItemLast(r);break}this._map.set(e,r),this._size++}return this}delete(e){return!!this.remove(e)}remove(e){let t=this._map.get(e);if(!!t)return this._map.delete(e),this.removeItem(t),this._size--,t.value}shift(){if(!this._head&&!this._tail)return;if(!this._head||!this._tail)throw new Error("Invalid list");let e=this._head;return this._map.delete(e.key),this.removeItem(e),this._size--,e.value}forEach(e,t){let i=this._state,r=this._head;for(;r;){if(t?e.bind(t)(r.value,r.key,this):e(r.value,r.key,this),this._state!==i)throw new Error("LinkedMap got modified during iteration.");r=r.next}}keys(){let e=this._state,t=this._head,i={[Symbol.iterator]:()=>i,next:()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(t){let r={value:t.key,done:!1};return t=t.next,r}else return{value:void 0,done:!0}}};return i}values(){let e=this._state,t=this._head,i={[Symbol.iterator]:()=>i,next:()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(t){let r={value:t.value,done:!1};return t=t.next,r}else return{value:void 0,done:!0}}};return i}entries(){let e=this._state,t=this._head,i={[Symbol.iterator]:()=>i,next:()=>{if(this._state!==e)throw new Error("LinkedMap got modified during iteration.");if(t){let r={value:[t.key,t.value],done:!1};return t=t.next,r}else return{value:void 0,done:!0}}};return i}[(kH=Symbol.toStringTag,Symbol.iterator)](){return this.entries()}trimOld(e){if(e>=this.size)return;if(e===0){this.clear();return}let t=this._head,i=this.size;for(;t&&i>e;)this._map.delete(t.key),t=t.next,i--;this._head=t,this._size=i,t&&(t.previous=void 0),this._state++}addItemFirst(e){if(!this._head&&!this._tail)this._tail=e;else if(this._head)e.next=this._head,this._head.previous=e;else throw new Error("Invalid list");this._head=e,this._state++}addItemLast(e){if(!this._head&&!this._tail)this._head=e;else if(this._tail)e.previous=this._tail,this._tail.next=e;else throw new Error("Invalid list");this._tail=e,this._state++}removeItem(e){if(e===this._head&&e===this._tail)this._head=void 0,this._tail=void 0;else if(e===this._head){if(!e.next)throw new Error("Invalid list");e.next.previous=void 0,this._head=e.next}else if(e===this._tail){if(!e.previous)throw new Error("Invalid list");e.previous.next=void 0,this._tail=e.previous}else{let t=e.next,i=e.previous;if(!t||!i)throw new Error("Invalid list");t.previous=i,i.next=t}e.next=void 0,e.previous=void 0,this._state++}touch(e,t){if(!this._head||!this._tail)throw new Error("Invalid list");if(!(t!==ln.First&&t!==ln.Last)){if(t===ln.First){if(e===this._head)return;let i=e.next,r=e.previous;e===this._tail?(r.next=void 0,this._tail=r):(i.previous=r,r.next=i),e.previous=void 0,e.next=this._head,this._head.previous=e,this._head=e,this._state++}else if(t===ln.Last){if(e===this._tail)return;let i=e.next,r=e.previous;e===this._head?(i.previous=void 0,this._head=i):(i.previous=r,r.next=i),e.next=void 0,e.previous=this._tail,this._tail.next=e,this._tail=e,this._state++}}}toJSON(){let e=[];return this.forEach((t,i)=>{e.push([i,t])}),e}fromJSON(e){this.clear();for(let[t,i]of e)this.set(t,i)}};ns.LinkedMap=_v;var cP=class extends _v{constructor(e,t=1){super(),this._limit=e,this._ratio=Math.min(Math.max(0,t),1)}get limit(){return this._limit}set limit(e){this._limit=e,this.checkTrim()}get ratio(){return this._ratio}set ratio(e){this._ratio=Math.min(Math.max(0,e),1),this.checkTrim()}get(e,t=ln.AsNew){return super.get(e,t)}peek(e){return super.get(e,ln.None)}set(e,t){return super.set(e,t,ln.Last),this.checkTrim(),this}checkTrim(){this.size>this._limit&&this.trimOld(Math.round(this._limit*this._ratio))}};ns.LRUCache=cP});var jc=y(Fl=>{"use strict";Object.defineProperty(Fl,"__esModule",{value:!0});Fl.Emitter=Fl.Event=void 0;var Vce=is(),ehe;(function(n){let e={dispose(){}};n.None=function(){return e}})(ehe=Fl.Event||(Fl.Event={}));var dP=class{add(e,t=null,i){this._callbacks||(this._callbacks=[],this._contexts=[]),this._callbacks.push(e),this._contexts.push(t),Array.isArray(i)&&i.push({dispose:()=>this.remove(e,t)})}remove(e,t=null){if(!this._callbacks)return;let i=!1;for(let r=0,o=this._callbacks.length;r{this._callbacks||(this._callbacks=new dP),this._options&&this._options.onFirstListenerAdd&&this._callbacks.isEmpty()&&this._options.onFirstListenerAdd(this),this._callbacks.add(e,t);let r={dispose:()=>{!this._callbacks||(this._callbacks.remove(e,t),r.dispose=Fc._noop,this._options&&this._options.onLastListenerRemove&&this._callbacks.isEmpty()&&this._options.onLastListenerRemove(this))}};return Array.isArray(i)&&i.push(r),r}),this._event}fire(e){this._callbacks&&this._callbacks.invoke.call(this._callbacks,e)}dispose(){this._callbacks&&(this._callbacks.dispose(),this._callbacks=void 0)}};Fl.Emitter=Fc;Fc._noop=function(){}});var mP=y(jl=>{"use strict";Object.defineProperty(jl,"__esModule",{value:!0});jl.CancellationTokenSource=jl.CancellationToken=void 0;var the=is(),ihe=Ic(),gP=jc(),pP;(function(n){n.None=Object.freeze({isCancellationRequested:!1,onCancellationRequested:gP.Event.None}),n.Cancelled=Object.freeze({isCancellationRequested:!0,onCancellationRequested:gP.Event.None});function e(t){let i=t;return i&&(i===n.None||i===n.Cancelled||ihe.boolean(i.isCancellationRequested)&&!!i.onCancellationRequested)}n.is=e})(pP=jl.CancellationToken||(jl.CancellationToken={}));var nhe=Object.freeze(function(n,e){let t=(0,the.default)().timer.setTimeout(n.bind(e),0);return{dispose(){t.dispose()}}}),Lv=class{constructor(){this._isCancelled=!1}cancel(){this._isCancelled||(this._isCancelled=!0,this._emitter&&(this._emitter.fire(void 0),this.dispose()))}get isCancellationRequested(){return this._isCancelled}get onCancellationRequested(){return this._isCancelled?nhe:(this._emitter||(this._emitter=new gP.Emitter),this._emitter.event)}dispose(){this._emitter&&(this._emitter.dispose(),this._emitter=void 0)}},fP=class{get token(){return this._token||(this._token=new Lv),this._token}cancel(){this._token?this._token.cancel():this._token=pP.Cancelled}dispose(){this._token?this._token instanceof Lv&&this._token.dispose():this._token=pP.None}};jl.CancellationTokenSource=fP});var PH=y(rs=>{"use strict";Object.defineProperty(rs,"__esModule",{value:!0});rs.ReadableStreamMessageReader=rs.AbstractMessageReader=rs.MessageReader=void 0;var yP=is(),Mc=Ic(),bP=jc(),rhe;(function(n){function e(t){let i=t;return i&&Mc.func(i.listen)&&Mc.func(i.dispose)&&Mc.func(i.onError)&&Mc.func(i.onClose)&&Mc.func(i.onPartialMessage)}n.is=e})(rhe=rs.MessageReader||(rs.MessageReader={}));var Iv=class{constructor(){this.errorEmitter=new bP.Emitter,this.closeEmitter=new bP.Emitter,this.partialMessageEmitter=new bP.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(e){this.errorEmitter.fire(this.asError(e))}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}get onPartialMessage(){return this.partialMessageEmitter.event}firePartialMessage(e){this.partialMessageEmitter.fire(e)}asError(e){return e instanceof Error?e:new Error(`Reader received error. Reason: ${Mc.string(e.message)?e.message:"unknown"}`)}};rs.AbstractMessageReader=Iv;var vP;(function(n){function e(t){let i,r,o,s=new Map,a,l=new Map;if(t===void 0||typeof t=="string")i=t??"utf-8";else{if(i=t.charset??"utf-8",t.contentDecoder!==void 0&&(o=t.contentDecoder,s.set(o.name,o)),t.contentDecoders!==void 0)for(let u of t.contentDecoders)s.set(u.name,u);if(t.contentTypeDecoder!==void 0&&(a=t.contentTypeDecoder,l.set(a.name,a)),t.contentTypeDecoders!==void 0)for(let u of t.contentTypeDecoders)l.set(u.name,u)}return a===void 0&&(a=(0,yP.default)().applicationJson.decoder,l.set(a.name,a)),{charset:i,contentDecoder:o,contentDecoders:s,contentTypeDecoder:a,contentTypeDecoders:l}}n.fromOptions=e})(vP||(vP={}));var wP=class extends Iv{constructor(e,t){super(),this.readable=e,this.options=vP.fromOptions(t),this.buffer=(0,yP.default)().messageBuffer.create(this.options.charset),this._partialMessageTimeout=1e4,this.nextMessageLength=-1,this.messageToken=0}set partialMessageTimeout(e){this._partialMessageTimeout=e}get partialMessageTimeout(){return this._partialMessageTimeout}listen(e){this.nextMessageLength=-1,this.messageToken=0,this.partialMessageTimer=void 0,this.callback=e;let t=this.readable.onData(i=>{this.onData(i)});return this.readable.onError(i=>this.fireError(i)),this.readable.onClose(()=>this.fireClose()),t}onData(e){for(this.buffer.append(e);;){if(this.nextMessageLength===-1){let r=this.buffer.tryReadHeaders();if(!r)return;let o=r.get("Content-Length");if(!o)throw new Error("Header must provide a Content-Length property.");let s=parseInt(o);if(isNaN(s))throw new Error("Content-Length value must be a number.");this.nextMessageLength=s}let t=this.buffer.tryReadBody(this.nextMessageLength);if(t===void 0){this.setPartialMessageTimer();return}this.clearPartialMessageTimer(),this.nextMessageLength=-1;let i;this.options.contentDecoder!==void 0?i=this.options.contentDecoder.decode(t):i=Promise.resolve(t),i.then(r=>{this.options.contentTypeDecoder.decode(r,this.options).then(o=>{this.callback(o)},o=>{this.fireError(o)})},r=>{this.fireError(r)})}}clearPartialMessageTimer(){this.partialMessageTimer&&(this.partialMessageTimer.dispose(),this.partialMessageTimer=void 0)}setPartialMessageTimer(){this.clearPartialMessageTimer(),!(this._partialMessageTimeout<=0)&&(this.partialMessageTimer=(0,yP.default)().timer.setTimeout((e,t)=>{this.partialMessageTimer=void 0,e===this.messageToken&&(this.firePartialMessage({messageToken:e,waitingTime:t}),this.setPartialMessageTimer())},this._partialMessageTimeout,this.messageToken,this._partialMessageTimeout))}};rs.ReadableStreamMessageReader=wP});var EH=y(Fv=>{"use strict";Object.defineProperty(Fv,"__esModule",{value:!0});Fv.Semaphore=void 0;var ohe=is(),xP=class{constructor(e=1){if(e<=0)throw new Error("Capacity must be greater than 0");this._capacity=e,this._active=0,this._waiting=[]}lock(e){return new Promise((t,i)=>{this._waiting.push({thunk:e,resolve:t,reject:i}),this.runNext()})}get active(){return this._active}runNext(){this._waiting.length===0||this._active===this._capacity||(0,ohe.default)().timer.setImmediate(()=>this.doRunNext())}doRunNext(){if(this._waiting.length===0||this._active===this._capacity)return;let e=this._waiting.shift();if(this._active++,this._active>this._capacity)throw new Error("To many thunks active");try{let t=e.thunk();t instanceof Promise?t.then(i=>{this._active--,e.resolve(i),this.runNext()},i=>{this._active--,e.reject(i),this.runNext()}):(this._active--,e.resolve(t),this.runNext())}catch(t){this._active--,e.reject(t),this.runNext()}}};Fv.Semaphore=xP});var IH=y(os=>{"use strict";Object.defineProperty(os,"__esModule",{value:!0});os.WriteableStreamMessageWriter=os.AbstractMessageWriter=os.MessageWriter=void 0;var RH=is(),wg=Ic(),she=EH(),_H=jc(),ahe="Content-Length: ",LH=`\r -`,lhe;(function(n){function e(t){let i=t;return i&&wg.func(i.dispose)&&wg.func(i.onClose)&&wg.func(i.onError)&&wg.func(i.write)}n.is=e})(lhe=os.MessageWriter||(os.MessageWriter={}));var jv=class{constructor(){this.errorEmitter=new _H.Emitter,this.closeEmitter=new _H.Emitter}dispose(){this.errorEmitter.dispose(),this.closeEmitter.dispose()}get onError(){return this.errorEmitter.event}fireError(e,t,i){this.errorEmitter.fire([this.asError(e),t,i])}get onClose(){return this.closeEmitter.event}fireClose(){this.closeEmitter.fire(void 0)}asError(e){return e instanceof Error?e:new Error(`Writer received error. Reason: ${wg.string(e.message)?e.message:"unknown"}`)}};os.AbstractMessageWriter=jv;var CP;(function(n){function e(t){return t===void 0||typeof t=="string"?{charset:t??"utf-8",contentTypeEncoder:(0,RH.default)().applicationJson.encoder}:{charset:t.charset??"utf-8",contentEncoder:t.contentEncoder,contentTypeEncoder:t.contentTypeEncoder??(0,RH.default)().applicationJson.encoder}}n.fromOptions=e})(CP||(CP={}));var SP=class extends jv{constructor(e,t){super(),this.writable=e,this.options=CP.fromOptions(t),this.errorCount=0,this.writeSemaphore=new she.Semaphore(1),this.writable.onError(i=>this.fireError(i)),this.writable.onClose(()=>this.fireClose())}async write(e){return this.writeSemaphore.lock(async()=>this.options.contentTypeEncoder.encode(e,this.options).then(i=>this.options.contentEncoder!==void 0?this.options.contentEncoder.encode(i):i).then(i=>{let r=[];return r.push(ahe,i.byteLength.toString(),LH),r.push(LH),this.doWrite(e,r,i)},i=>{throw this.fireError(i),i}))}async doWrite(e,t,i){try{return await this.writable.write(t.join(""),"ascii"),this.writable.write(i)}catch(r){return this.handleError(r,e),Promise.reject(r)}}handleError(e,t){this.errorCount++,this.fireError(e,t,this.errorCount)}end(){this.writable.end()}};os.WriteableStreamMessageWriter=SP});var NH=y(we=>{"use strict";Object.defineProperty(we,"__esModule",{value:!0});we.createMessageConnection=we.ConnectionOptions=we.CancellationStrategy=we.CancellationSenderStrategy=we.CancellationReceiverStrategy=we.ConnectionStrategy=we.ConnectionError=we.ConnectionErrors=we.LogTraceNotification=we.SetTraceNotification=we.TraceFormat=we.TraceValues=we.Trace=we.NullLogger=we.ProgressType=we.ProgressToken=void 0;var FH=is(),ci=Ic(),Te=uP(),jH=hP(),xg=jc(),DP=mP(),Sg;(function(n){n.type=new Te.NotificationType("$/cancelRequest")})(Sg||(Sg={}));var MH;(function(n){function e(t){return typeof t=="string"||typeof t=="number"}n.is=e})(MH=we.ProgressToken||(we.ProgressToken={}));var Cg;(function(n){n.type=new Te.NotificationType("$/progress")})(Cg||(Cg={}));var TP=class{constructor(){}};we.ProgressType=TP;var kP;(function(n){function e(t){return ci.func(t)}n.is=e})(kP||(kP={}));we.NullLogger=Object.freeze({error:()=>{},warn:()=>{},info:()=>{},log:()=>{}});var lt;(function(n){n[n.Off=0]="Off",n[n.Messages=1]="Messages",n[n.Compact=2]="Compact",n[n.Verbose=3]="Verbose"})(lt=we.Trace||(we.Trace={}));var uhe;(function(n){n.Off="off",n.Messages="messages",n.Compact="compact",n.Verbose="verbose"})(uhe=we.TraceValues||(we.TraceValues={}));(function(n){function e(i){if(!ci.string(i))return n.Off;switch(i=i.toLowerCase(),i){case"off":return n.Off;case"messages":return n.Messages;case"compact":return n.Compact;case"verbose":return n.Verbose;default:return n.Off}}n.fromString=e;function t(i){switch(i){case n.Off:return"off";case n.Messages:return"messages";case n.Compact:return"compact";case n.Verbose:return"verbose";default:return"off"}}n.toString=t})(lt=we.Trace||(we.Trace={}));var Zr;(function(n){n.Text="text",n.JSON="json"})(Zr=we.TraceFormat||(we.TraceFormat={}));(function(n){function e(t){return ci.string(t)?(t=t.toLowerCase(),t==="json"?n.JSON:n.Text):n.Text}n.fromString=e})(Zr=we.TraceFormat||(we.TraceFormat={}));var OH;(function(n){n.type=new Te.NotificationType("$/setTrace")})(OH=we.SetTraceNotification||(we.SetTraceNotification={}));var PP;(function(n){n.type=new Te.NotificationType("$/logTrace")})(PP=we.LogTraceNotification||(we.LogTraceNotification={}));var Mv;(function(n){n[n.Closed=1]="Closed",n[n.Disposed=2]="Disposed",n[n.AlreadyListening=3]="AlreadyListening"})(Mv=we.ConnectionErrors||(we.ConnectionErrors={}));var la=class extends Error{constructor(e,t){super(t),this.code=e,Object.setPrototypeOf(this,la.prototype)}};we.ConnectionError=la;var AH;(function(n){function e(t){let i=t;return i&&ci.func(i.cancelUndispatched)}n.is=e})(AH=we.ConnectionStrategy||(we.ConnectionStrategy={}));var EP;(function(n){n.Message=Object.freeze({createCancellationTokenSource(t){return new DP.CancellationTokenSource}});function e(t){let i=t;return i&&ci.func(i.createCancellationTokenSource)}n.is=e})(EP=we.CancellationReceiverStrategy||(we.CancellationReceiverStrategy={}));var RP;(function(n){n.Message=Object.freeze({sendCancellation(t,i){return t.sendNotification(Sg.type,{id:i})},cleanup(t){}});function e(t){let i=t;return i&&ci.func(i.sendCancellation)&&ci.func(i.cleanup)}n.is=e})(RP=we.CancellationSenderStrategy||(we.CancellationSenderStrategy={}));var _P;(function(n){n.Message=Object.freeze({receiver:EP.Message,sender:RP.Message});function e(t){let i=t;return i&&EP.is(i.receiver)&&RP.is(i.sender)}n.is=e})(_P=we.CancellationStrategy||(we.CancellationStrategy={}));var che;(function(n){function e(t){let i=t;return i&&(_P.is(i.cancellationStrategy)||AH.is(i.connectionStrategy))}n.is=e})(che=we.ConnectionOptions||(we.ConnectionOptions={}));var Jr;(function(n){n[n.New=1]="New",n[n.Listening=2]="Listening",n[n.Closed=3]="Closed",n[n.Disposed=4]="Disposed"})(Jr||(Jr={}));function hhe(n,e,t,i){let r=t!==void 0?t:we.NullLogger,o=0,s=0,a=0,l="2.0",u,c=new Map,h,d=new Map,g=new Map,p,f=new jH.LinkedMap,m=new Map,b=new Set,w=new Map,x=lt.Off,T=Zr.Text,R,F=Jr.New,N=new xg.Emitter,J=new xg.Emitter,H=new xg.Emitter,M=new xg.Emitter,L=new xg.Emitter,O=i&&i.cancellationStrategy?i.cancellationStrategy:_P.Message;function Z(E){if(E===null)throw new Error("Can't send requests with id null since the response can't be correlated.");return"req-"+E.toString()}function ne(E){return E===null?"res-unknown-"+(++a).toString():"res-"+E.toString()}function be(){return"not-"+(++s).toString()}function He(E,z){Te.Message.isRequest(z)?E.set(Z(z.id),z):Te.Message.isResponse(z)?E.set(ne(z.id),z):E.set(be(),z)}function $(E){}function B(){return F===Jr.Listening}function G(){return F===Jr.Closed}function V(){return F===Jr.Disposed}function Re(){(F===Jr.New||F===Jr.Listening)&&(F=Jr.Closed,J.fire(void 0))}function Ee(E){N.fire([E,void 0,void 0])}function Xe(E){N.fire(E)}n.onClose(Re),n.onError(Ee),e.onClose(Re),e.onError(Xe);function Zn(){p||f.size===0||(p=(0,FH.default)().timer.setImmediate(()=>{p=void 0,Wi()}))}function Wi(){if(f.size===0)return;let E=f.shift();try{Te.Message.isRequest(E)?Ar(E):Te.Message.isNotification(E)?Ae(E):Te.Message.isResponse(E)?Le(E):Ne(E)}finally{Zn()}}let Yi=E=>{try{if(Te.Message.isNotification(E)&&E.method===Sg.type.method){let z=E.params.id,te=Z(z),he=f.get(te);if(Te.Message.isRequest(he)){let kt=i==null?void 0:i.connectionStrategy,vt=kt&&kt.cancelUndispatched?kt.cancelUndispatched(he,$):void 0;if(vt&&(vt.error!==void 0||vt.result!==void 0)){f.delete(te),w.delete(z),vt.id=he.id,Cn(vt,E.method,Date.now()),e.write(vt).catch(()=>r.error("Sending response for canceled message failed."));return}}let Tt=w.get(z);if(Tt!==void 0){Tt.cancel(),jd(E);return}else b.add(z)}He(f,E)}finally{Zn()}};function Ar(E){if(V())return;function z(Ue,jt,it){let ui={jsonrpc:l,id:E.id};Ue instanceof Te.ResponseError?ui.error=Ue.toJson():ui.result=Ue===void 0?null:Ue,Cn(ui,jt,it),e.write(ui).catch(()=>r.error("Sending response failed."))}function te(Ue,jt,it){let ui={jsonrpc:l,id:E.id,error:Ue.toJson()};Cn(ui,jt,it),e.write(ui).catch(()=>r.error("Sending response failed."))}function he(Ue,jt,it){Ue===void 0&&(Ue=null);let ui={jsonrpc:l,id:E.id,result:Ue};Cn(ui,jt,it),e.write(ui).catch(()=>r.error("Sending response failed."))}Jn(E);let Tt=c.get(E.method),kt,vt;Tt&&(kt=Tt.type,vt=Tt.handler);let mi=Date.now();if(vt||u){let Ue=E.id??String(Date.now()),jt=O.receiver.createCancellationTokenSource(Ue);E.id!==null&&b.has(E.id)&&jt.cancel(),E.id!==null&&w.set(Ue,jt);try{let it;if(vt)if(E.params===void 0){if(kt!==void 0&&kt.numberOfParams!==0){te(new Te.ResponseError(Te.ErrorCodes.InvalidParams,`Request ${E.method} defines ${kt.numberOfParams} params but received none.`),E.method,mi);return}it=vt(jt.token)}else if(Array.isArray(E.params)){if(kt!==void 0&&kt.parameterStructures===Te.ParameterStructures.byName){te(new Te.ResponseError(Te.ErrorCodes.InvalidParams,`Request ${E.method} defines parameters by name but received parameters by position`),E.method,mi);return}it=vt(...E.params,jt.token)}else{if(kt!==void 0&&kt.parameterStructures===Te.ParameterStructures.byPosition){te(new Te.ResponseError(Te.ErrorCodes.InvalidParams,`Request ${E.method} defines parameters by position but received parameters by name`),E.method,mi);return}it=vt(E.params,jt.token)}else u&&(it=u(E.method,E.params,jt.token));let ui=it;it?ui.then?ui.then(Sn=>{w.delete(Ue),z(Sn,E.method,mi)},Sn=>{w.delete(Ue),Sn instanceof Te.ResponseError?te(Sn,E.method,mi):Sn&&ci.string(Sn.message)?te(new Te.ResponseError(Te.ErrorCodes.InternalError,`Request ${E.method} failed with message: ${Sn.message}`),E.method,mi):te(new Te.ResponseError(Te.ErrorCodes.InternalError,`Request ${E.method} failed unexpectedly without providing any details.`),E.method,mi)}):(w.delete(Ue),z(it,E.method,mi)):(w.delete(Ue),he(it,E.method,mi))}catch(it){w.delete(Ue),it instanceof Te.ResponseError?z(it,E.method,mi):it&&ci.string(it.message)?te(new Te.ResponseError(Te.ErrorCodes.InternalError,`Request ${E.method} failed with message: ${it.message}`),E.method,mi):te(new Te.ResponseError(Te.ErrorCodes.InternalError,`Request ${E.method} failed unexpectedly without providing any details.`),E.method,mi)}}else te(new Te.ResponseError(Te.ErrorCodes.MethodNotFound,`Unhandled method ${E.method}`),E.method,mi)}function Le(E){if(!V())if(E.id===null)E.error?r.error(`Received response message without id: Error is: -${JSON.stringify(E.error,void 0,4)}`):r.error("Received response message without id. No further error information provided.");else{let z=E.id,te=m.get(z);if(vy(E,te),te!==void 0){m.delete(z);try{if(E.error){let he=E.error;te.reject(new Te.ResponseError(he.code,he.message,he.data))}else if(E.result!==void 0)te.resolve(E.result);else throw new Error("Should never happen.")}catch(he){he.message?r.error(`Response handler '${te.method}' failed with message: ${he.message}`):r.error(`Response handler '${te.method}' failed unexpectedly.`)}}}}function Ae(E){if(V())return;let z,te;if(E.method===Sg.type.method){let he=E.params.id;b.delete(he),jd(E);return}else{let he=d.get(E.method);he&&(te=he.handler,z=he.type)}if(te||h)try{if(jd(E),te)if(E.params===void 0)z!==void 0&&z.numberOfParams!==0&&z.parameterStructures!==Te.ParameterStructures.byName&&r.error(`Notification ${E.method} defines ${z.numberOfParams} params but received none.`),te();else if(Array.isArray(E.params)){let he=E.params;E.method===Cg.type.method&&he.length===2&&MH.is(he[0])?te({token:he[0],value:he[1]}):(z!==void 0&&(z.parameterStructures===Te.ParameterStructures.byName&&r.error(`Notification ${E.method} defines parameters by name but received parameters by position`),z.numberOfParams!==E.params.length&&r.error(`Notification ${E.method} defines ${z.numberOfParams} params but received ${he.length} arguments`)),te(...he))}else z!==void 0&&z.parameterStructures===Te.ParameterStructures.byPosition&&r.error(`Notification ${E.method} defines parameters by position but received parameters by name`),te(E.params);else h&&h(E.method,E.params)}catch(he){he.message?r.error(`Notification handler '${E.method}' failed with message: ${he.message}`):r.error(`Notification handler '${E.method}' failed unexpectedly.`)}else H.fire(E)}function Ne(E){if(!E){r.error("Received empty message.");return}r.error(`Received message which is neither a response nor a notification message: -${JSON.stringify(E,null,4)}`);let z=E;if(ci.string(z.id)||ci.number(z.id)){let te=z.id,he=m.get(te);he&&he.reject(new Error("The received response has neither a result nor an error property."))}}function Ie(E){if(E!=null)switch(x){case lt.Verbose:return JSON.stringify(E,null,4);case lt.Compact:return JSON.stringify(E);default:return}}function li(E){if(!(x===lt.Off||!R))if(T===Zr.Text){let z;(x===lt.Verbose||x===lt.Compact)&&E.params&&(z=`Params: ${Ie(E.params)} - -`),R.log(`Sending request '${E.method} - (${E.id})'.`,z)}else tc("send-request",E)}function Nr(E){if(!(x===lt.Off||!R))if(T===Zr.Text){let z;(x===lt.Verbose||x===lt.Compact)&&(E.params?z=`Params: ${Ie(E.params)} - -`:z=`No parameters provided. - -`),R.log(`Sending notification '${E.method}'.`,z)}else tc("send-notification",E)}function Cn(E,z,te){if(!(x===lt.Off||!R))if(T===Zr.Text){let he;(x===lt.Verbose||x===lt.Compact)&&(E.error&&E.error.data?he=`Error data: ${Ie(E.error.data)} - -`:E.result?he=`Result: ${Ie(E.result)} - -`:E.error===void 0&&(he=`No result returned. - -`)),R.log(`Sending response '${z} - (${E.id})'. Processing request took ${Date.now()-te}ms`,he)}else tc("send-response",E)}function Jn(E){if(!(x===lt.Off||!R))if(T===Zr.Text){let z;(x===lt.Verbose||x===lt.Compact)&&E.params&&(z=`Params: ${Ie(E.params)} - -`),R.log(`Received request '${E.method} - (${E.id})'.`,z)}else tc("receive-request",E)}function jd(E){if(!(x===lt.Off||!R||E.method===PP.type.method))if(T===Zr.Text){let z;(x===lt.Verbose||x===lt.Compact)&&(E.params?z=`Params: ${Ie(E.params)} - -`:z=`No parameters provided. - -`),R.log(`Received notification '${E.method}'.`,z)}else tc("receive-notification",E)}function vy(E,z){if(!(x===lt.Off||!R))if(T===Zr.Text){let te;if((x===lt.Verbose||x===lt.Compact)&&(E.error&&E.error.data?te=`Error data: ${Ie(E.error.data)} - -`:E.result?te=`Result: ${Ie(E.result)} - -`:E.error===void 0&&(te=`No result returned. - -`)),z){let he=E.error?` Request failed: ${E.error.message} (${E.error.code}).`:"";R.log(`Received response '${z.method} - (${E.id})' in ${Date.now()-z.timerStart}ms.${he}`,te)}else R.log(`Received response ${E.id} without active response promise.`,te)}else tc("receive-response",E)}function tc(E,z){if(!R||x===lt.Off)return;let te={isLSPMessage:!0,type:E,message:z,timestamp:Date.now()};R.log(te)}function Md(){if(G())throw new la(Mv.Closed,"Connection is closed.");if(V())throw new la(Mv.Disposed,"Connection is disposed.")}function zie(){if(B())throw new la(Mv.AlreadyListening,"Connection is already listening")}function Kie(){if(!B())throw new Error("Call listen() first.")}function Od(E){return E===void 0?null:E}function nj(E){if(E!==null)return E}function rj(E){return E!=null&&!Array.isArray(E)&&typeof E=="object"}function UD(E,z){switch(E){case Te.ParameterStructures.auto:return rj(z)?nj(z):[Od(z)];case Te.ParameterStructures.byName:if(!rj(z))throw new Error("Received parameters by name but param is not an object literal.");return nj(z);case Te.ParameterStructures.byPosition:return[Od(z)];default:throw new Error(`Unknown parameter structure ${E.toString()}`)}}function oj(E,z){let te,he=E.numberOfParams;switch(he){case 0:te=void 0;break;case 1:te=UD(E.parameterStructures,z[0]);break;default:te=[];for(let Tt=0;Tt{Md();let te,he;if(ci.string(E)){te=E;let kt=z[0],vt=0,mi=Te.ParameterStructures.auto;Te.ParameterStructures.is(kt)&&(vt=1,mi=kt);let Ue=z.length,jt=Ue-vt;switch(jt){case 0:he=void 0;break;case 1:he=UD(mi,z[vt]);break;default:if(mi===Te.ParameterStructures.byName)throw new Error(`Received ${jt} parameters for 'by Name' notification parameter structure.`);he=z.slice(vt,Ue).map(it=>Od(it));break}}else{let kt=z;te=E.method,he=oj(E,kt)}let Tt={jsonrpc:l,method:te,params:he};return Nr(Tt),e.write(Tt).catch(()=>r.error("Sending notification failed."))},onNotification:(E,z)=>{Md();let te;return ci.func(E)?h=E:z&&(ci.string(E)?(te=E,d.set(E,{type:void 0,handler:z})):(te=E.method,d.set(E.method,{type:E,handler:z}))),{dispose:()=>{te!==void 0?d.delete(te):h=void 0}}},onProgress:(E,z,te)=>{if(g.has(z))throw new Error(`Progress handler for token ${z} already registered`);return g.set(z,te),{dispose:()=>{g.delete(z)}}},sendProgress:(E,z,te)=>ic.sendNotification(Cg.type,{token:z,value:te}),onUnhandledProgress:M.event,sendRequest:(E,...z)=>{Md(),Kie();let te,he,Tt;if(ci.string(E)){te=E;let Ue=z[0],jt=z[z.length-1],it=0,ui=Te.ParameterStructures.auto;Te.ParameterStructures.is(Ue)&&(it=1,ui=Ue);let Sn=z.length;DP.CancellationToken.is(jt)&&(Sn=Sn-1,Tt=jt);let hl=Sn-it;switch(hl){case 0:he=void 0;break;case 1:he=UD(ui,z[it]);break;default:if(ui===Te.ParameterStructures.byName)throw new Error(`Received ${hl} parameters for 'by Name' request parameter structure.`);he=z.slice(it,Sn).map(Zs=>Od(Zs));break}}else{let Ue=z;te=E.method,he=oj(E,Ue);let jt=E.numberOfParams;Tt=DP.CancellationToken.is(Ue[jt])?Ue[jt]:void 0}let kt=o++,vt;return Tt&&(vt=Tt.onCancellationRequested(()=>{let Ue=O.sender.sendCancellation(ic,kt);return Ue===void 0?(r.log(`Received no promise from cancellation strategy when cancelling id ${kt}`),Promise.resolve()):Ue.catch(()=>{r.log(`Sending cancellation messages for id ${kt} failed`)})})),new Promise((Ue,jt)=>{let it={jsonrpc:l,id:kt,method:te,params:he},ui=Zs=>{Ue(Zs),O.sender.cleanup(kt),vt==null||vt.dispose()},Sn=Zs=>{jt(Zs),O.sender.cleanup(kt),vt==null||vt.dispose()},hl={method:te,timerStart:Date.now(),resolve:ui,reject:Sn};li(it);try{e.write(it).catch(()=>r.error("Sending request failed."))}catch(Zs){hl.reject(new Te.ResponseError(Te.ErrorCodes.MessageWriteError,Zs.message?Zs.message:"Unknown reason")),hl=null}hl&&m.set(kt,hl)})},onRequest:(E,z)=>{Md();let te=null;return kP.is(E)?(te=void 0,u=E):ci.string(E)?(te=null,z!==void 0&&(te=E,c.set(E,{handler:z,type:void 0}))):z!==void 0&&(te=E.method,c.set(E.method,{type:E,handler:z})),{dispose:()=>{te!==null&&(te!==void 0?c.delete(te):u=void 0)}}},hasPendingResponse:()=>m.size>0,trace:async(E,z,te)=>{let he=!1,Tt=Zr.Text;te!==void 0&&(ci.boolean(te)?he=te:(he=te.sendNotification||!1,Tt=te.traceFormat||Zr.Text)),x=E,T=Tt,x===lt.Off?R=void 0:R=z,he&&!G()&&!V()&&await ic.sendNotification(OH.type,{value:lt.toString(E)})},onError:N.event,onClose:J.event,onUnhandledNotification:H.event,onDispose:L.event,end:()=>{e.end()},dispose:()=>{if(V())return;F=Jr.Disposed,L.fire(void 0);let E=new Te.ResponseError(Te.ErrorCodes.PendingResponseRejected,"Pending response rejected since connection got disposed");for(let z of m.values())z.reject(E);m=new Map,w=new Map,b=new Set,f=new jH.LinkedMap,ci.func(e.dispose)&&e.dispose(),ci.func(n.dispose)&&n.dispose()},listen:()=>{Md(),zie(),F=Jr.Listening,n.listen(Yi)},inspect:()=>{(0,FH.default)().console.log("inspect")}};return ic.onNotification(PP.type,E=>{if(x===lt.Off||!R)return;let z=x===lt.Verbose||x===lt.Compact;R.log(E.message,z?E.verbose:void 0)}),ic.onNotification(Cg.type,E=>{let z=g.get(E.token);z?z(E.value):M.fire(E)}),ic}we.createMessageConnection=hhe});var jP=y(X=>{"use strict";Object.defineProperty(X,"__esModule",{value:!0});X.TraceFormat=X.TraceValues=X.Trace=X.ProgressType=X.ProgressToken=X.createMessageConnection=X.NullLogger=X.ConnectionOptions=X.ConnectionStrategy=X.WriteableStreamMessageWriter=X.AbstractMessageWriter=X.MessageWriter=X.ReadableStreamMessageReader=X.AbstractMessageReader=X.MessageReader=X.CancellationToken=X.CancellationTokenSource=X.Emitter=X.Event=X.Disposable=X.LRUCache=X.Touch=X.LinkedMap=X.ParameterStructures=X.NotificationType9=X.NotificationType8=X.NotificationType7=X.NotificationType6=X.NotificationType5=X.NotificationType4=X.NotificationType3=X.NotificationType2=X.NotificationType1=X.NotificationType0=X.NotificationType=X.ErrorCodes=X.ResponseError=X.RequestType9=X.RequestType8=X.RequestType7=X.RequestType6=X.RequestType5=X.RequestType4=X.RequestType3=X.RequestType2=X.RequestType1=X.RequestType0=X.RequestType=X.Message=X.RAL=void 0;X.CancellationStrategy=X.CancellationSenderStrategy=X.CancellationReceiverStrategy=X.ConnectionError=X.ConnectionErrors=X.LogTraceNotification=X.SetTraceNotification=void 0;var wt=uP();Object.defineProperty(X,"Message",{enumerable:!0,get:function(){return wt.Message}});Object.defineProperty(X,"RequestType",{enumerable:!0,get:function(){return wt.RequestType}});Object.defineProperty(X,"RequestType0",{enumerable:!0,get:function(){return wt.RequestType0}});Object.defineProperty(X,"RequestType1",{enumerable:!0,get:function(){return wt.RequestType1}});Object.defineProperty(X,"RequestType2",{enumerable:!0,get:function(){return wt.RequestType2}});Object.defineProperty(X,"RequestType3",{enumerable:!0,get:function(){return wt.RequestType3}});Object.defineProperty(X,"RequestType4",{enumerable:!0,get:function(){return wt.RequestType4}});Object.defineProperty(X,"RequestType5",{enumerable:!0,get:function(){return wt.RequestType5}});Object.defineProperty(X,"RequestType6",{enumerable:!0,get:function(){return wt.RequestType6}});Object.defineProperty(X,"RequestType7",{enumerable:!0,get:function(){return wt.RequestType7}});Object.defineProperty(X,"RequestType8",{enumerable:!0,get:function(){return wt.RequestType8}});Object.defineProperty(X,"RequestType9",{enumerable:!0,get:function(){return wt.RequestType9}});Object.defineProperty(X,"ResponseError",{enumerable:!0,get:function(){return wt.ResponseError}});Object.defineProperty(X,"ErrorCodes",{enumerable:!0,get:function(){return wt.ErrorCodes}});Object.defineProperty(X,"NotificationType",{enumerable:!0,get:function(){return wt.NotificationType}});Object.defineProperty(X,"NotificationType0",{enumerable:!0,get:function(){return wt.NotificationType0}});Object.defineProperty(X,"NotificationType1",{enumerable:!0,get:function(){return wt.NotificationType1}});Object.defineProperty(X,"NotificationType2",{enumerable:!0,get:function(){return wt.NotificationType2}});Object.defineProperty(X,"NotificationType3",{enumerable:!0,get:function(){return wt.NotificationType3}});Object.defineProperty(X,"NotificationType4",{enumerable:!0,get:function(){return wt.NotificationType4}});Object.defineProperty(X,"NotificationType5",{enumerable:!0,get:function(){return wt.NotificationType5}});Object.defineProperty(X,"NotificationType6",{enumerable:!0,get:function(){return wt.NotificationType6}});Object.defineProperty(X,"NotificationType7",{enumerable:!0,get:function(){return wt.NotificationType7}});Object.defineProperty(X,"NotificationType8",{enumerable:!0,get:function(){return wt.NotificationType8}});Object.defineProperty(X,"NotificationType9",{enumerable:!0,get:function(){return wt.NotificationType9}});Object.defineProperty(X,"ParameterStructures",{enumerable:!0,get:function(){return wt.ParameterStructures}});var LP=hP();Object.defineProperty(X,"LinkedMap",{enumerable:!0,get:function(){return LP.LinkedMap}});Object.defineProperty(X,"LRUCache",{enumerable:!0,get:function(){return LP.LRUCache}});Object.defineProperty(X,"Touch",{enumerable:!0,get:function(){return LP.Touch}});var dhe=Mk();Object.defineProperty(X,"Disposable",{enumerable:!0,get:function(){return dhe.Disposable}});var HH=jc();Object.defineProperty(X,"Event",{enumerable:!0,get:function(){return HH.Event}});Object.defineProperty(X,"Emitter",{enumerable:!0,get:function(){return HH.Emitter}});var qH=mP();Object.defineProperty(X,"CancellationTokenSource",{enumerable:!0,get:function(){return qH.CancellationTokenSource}});Object.defineProperty(X,"CancellationToken",{enumerable:!0,get:function(){return qH.CancellationToken}});var IP=PH();Object.defineProperty(X,"MessageReader",{enumerable:!0,get:function(){return IP.MessageReader}});Object.defineProperty(X,"AbstractMessageReader",{enumerable:!0,get:function(){return IP.AbstractMessageReader}});Object.defineProperty(X,"ReadableStreamMessageReader",{enumerable:!0,get:function(){return IP.ReadableStreamMessageReader}});var FP=IH();Object.defineProperty(X,"MessageWriter",{enumerable:!0,get:function(){return FP.MessageWriter}});Object.defineProperty(X,"AbstractMessageWriter",{enumerable:!0,get:function(){return FP.AbstractMessageWriter}});Object.defineProperty(X,"WriteableStreamMessageWriter",{enumerable:!0,get:function(){return FP.WriteableStreamMessageWriter}});var Ui=NH();Object.defineProperty(X,"ConnectionStrategy",{enumerable:!0,get:function(){return Ui.ConnectionStrategy}});Object.defineProperty(X,"ConnectionOptions",{enumerable:!0,get:function(){return Ui.ConnectionOptions}});Object.defineProperty(X,"NullLogger",{enumerable:!0,get:function(){return Ui.NullLogger}});Object.defineProperty(X,"createMessageConnection",{enumerable:!0,get:function(){return Ui.createMessageConnection}});Object.defineProperty(X,"ProgressToken",{enumerable:!0,get:function(){return Ui.ProgressToken}});Object.defineProperty(X,"ProgressType",{enumerable:!0,get:function(){return Ui.ProgressType}});Object.defineProperty(X,"Trace",{enumerable:!0,get:function(){return Ui.Trace}});Object.defineProperty(X,"TraceValues",{enumerable:!0,get:function(){return Ui.TraceValues}});Object.defineProperty(X,"TraceFormat",{enumerable:!0,get:function(){return Ui.TraceFormat}});Object.defineProperty(X,"SetTraceNotification",{enumerable:!0,get:function(){return Ui.SetTraceNotification}});Object.defineProperty(X,"LogTraceNotification",{enumerable:!0,get:function(){return Ui.LogTraceNotification}});Object.defineProperty(X,"ConnectionErrors",{enumerable:!0,get:function(){return Ui.ConnectionErrors}});Object.defineProperty(X,"ConnectionError",{enumerable:!0,get:function(){return Ui.ConnectionError}});Object.defineProperty(X,"CancellationReceiverStrategy",{enumerable:!0,get:function(){return Ui.CancellationReceiverStrategy}});Object.defineProperty(X,"CancellationSenderStrategy",{enumerable:!0,get:function(){return Ui.CancellationSenderStrategy}});Object.defineProperty(X,"CancellationStrategy",{enumerable:!0,get:function(){return Ui.CancellationStrategy}});var ghe=is();X.RAL=ghe.default});var Al=y(Ve=>{"use strict";var phe=Ve&&Ve.__createBinding||(Object.create?function(n,e,t,i){i===void 0&&(i=t);var r=Object.getOwnPropertyDescriptor(e,t);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(n,i,r)}:function(n,e,t,i){i===void 0&&(i=t),n[i]=e[t]}),fhe=Ve&&Ve.__exportStar||function(n,e){for(var t in n)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&phe(e,n,t)};Object.defineProperty(Ve,"__esModule",{value:!0});Ve.createMessageConnection=Ve.createServerSocketTransport=Ve.createClientSocketTransport=Ve.createServerPipeTransport=Ve.createClientPipeTransport=Ve.generateRandomPipeName=Ve.StreamMessageWriter=Ve.StreamMessageReader=Ve.SocketMessageWriter=Ve.SocketMessageReader=Ve.IPCMessageWriter=Ve.IPCMessageReader=void 0;var Oc=CH();Oc.default.install();var ko=jP(),BH=require("path"),mhe=require("os"),bhe=require("crypto"),Nv=require("net");fhe(jP(),Ve);var MP=class extends ko.AbstractMessageReader{constructor(e){super(),this.process=e;let t=this.process;t.on("error",i=>this.fireError(i)),t.on("close",()=>this.fireClose())}listen(e){return this.process.on("message",e),ko.Disposable.create(()=>this.process.off("message",e))}};Ve.IPCMessageReader=MP;var OP=class extends ko.AbstractMessageWriter{constructor(e){super(),this.process=e,this.errorCount=0;let t=this.process;t.on("error",i=>this.fireError(i)),t.on("close",()=>this.fireClose)}write(e){try{return typeof this.process.send=="function"&&this.process.send(e,void 0,void 0,t=>{t?(this.errorCount++,this.handleError(t,e)):this.errorCount=0}),Promise.resolve()}catch(t){return this.handleError(t,e),Promise.reject(t)}}handleError(e,t){this.errorCount++,this.fireError(e,t,this.errorCount)}end(){}};Ve.IPCMessageWriter=OP;var Ml=class extends ko.ReadableStreamMessageReader{constructor(e,t="utf-8"){super((0,Oc.default)().stream.asReadableStream(e),t)}};Ve.SocketMessageReader=Ml;var Ol=class extends ko.WriteableStreamMessageWriter{constructor(e,t){super((0,Oc.default)().stream.asWritableStream(e),t),this.socket=e}dispose(){super.dispose(),this.socket.destroy()}};Ve.SocketMessageWriter=Ol;var Ov=class extends ko.ReadableStreamMessageReader{constructor(e,t){super((0,Oc.default)().stream.asReadableStream(e),t)}};Ve.StreamMessageReader=Ov;var Av=class extends ko.WriteableStreamMessageWriter{constructor(e,t){super((0,Oc.default)().stream.asWritableStream(e),t)}};Ve.StreamMessageWriter=Av;var WH=process.env.XDG_RUNTIME_DIR,yhe=new Map([["linux",107],["darwin",103]]);function vhe(){let n=(0,bhe.randomBytes)(21).toString("hex");if(process.platform==="win32")return`\\\\.\\pipe\\vscode-jsonrpc-${n}-sock`;let e;WH?e=BH.join(WH,`vscode-ipc-${n}.sock`):e=BH.join(mhe.tmpdir(),`vscode-${n}.sock`);let t=yhe.get(process.platform);return t!==void 0&&e.length>=t&&(0,Oc.default)().console.warn(`WARNING: IPC handle "${e}" is longer than ${t} characters.`),e}Ve.generateRandomPipeName=vhe;function whe(n,e="utf-8"){let t,i=new Promise((r,o)=>{t=r});return new Promise((r,o)=>{let s=(0,Nv.createServer)(a=>{s.close(),t([new Ml(a,e),new Ol(a,e)])});s.on("error",o),s.listen(n,()=>{s.removeListener("error",o),r({onConnected:()=>i})})})}Ve.createClientPipeTransport=whe;function xhe(n,e="utf-8"){let t=(0,Nv.createConnection)(n);return[new Ml(t,e),new Ol(t,e)]}Ve.createServerPipeTransport=xhe;function Che(n,e="utf-8"){let t,i=new Promise((r,o)=>{t=r});return new Promise((r,o)=>{let s=(0,Nv.createServer)(a=>{s.close(),t([new Ml(a,e),new Ol(a,e)])});s.on("error",o),s.listen(n,"127.0.0.1",()=>{s.removeListener("error",o),r({onConnected:()=>i})})})}Ve.createClientSocketTransport=Che;function She(n,e="utf-8"){let t=(0,Nv.createConnection)(n,"127.0.0.1");return[new Ml(t,e),new Ol(t,e)]}Ve.createServerSocketTransport=She;function Dhe(n){let e=n;return e.read!==void 0&&e.addListener!==void 0}function The(n){let e=n;return e.write!==void 0&&e.addListener!==void 0}function khe(n,e,t,i){t||(t=ko.NullLogger);let r=Dhe(n)?new Ov(n):n,o=The(e)?new Av(e):e;return ko.ConnectionStrategy.is(i)&&(i={connectionStrategy:i}),(0,ko.createMessageConnection)(r,o,t,i)}Ve.createMessageConnection=khe});var AP=y((TEe,YH)=>{"use strict";YH.exports=Al()});var Uv={};Go(Uv,{AnnotatedTextEdit:()=>ss,ChangeAnnotation:()=>Nl,ChangeAnnotationIdentifier:()=>Fi,CodeAction:()=>f0,CodeActionContext:()=>p0,CodeActionKind:()=>g0,CodeActionTriggerKind:()=>Rg,CodeDescription:()=>UP,CodeLens:()=>m0,Color:()=>Bv,ColorInformation:()=>BP,ColorPresentation:()=>WP,Command:()=>Hl,CompletionItem:()=>i0,CompletionItemKind:()=>ut,CompletionItemLabelDetails:()=>t0,CompletionItemTag:()=>QP,CompletionList:()=>n0,CreateFile:()=>ca,DeleteFile:()=>as,Diagnostic:()=>Tg,DiagnosticRelatedInformation:()=>Wv,DiagnosticSeverity:()=>JP,DiagnosticTag:()=>$P,DocumentHighlight:()=>l0,DocumentHighlightKind:()=>a0,DocumentLink:()=>y0,DocumentSymbol:()=>Eg,DocumentUri:()=>NP,EOL:()=>Ehe,FoldingRange:()=>ZP,FoldingRangeKind:()=>YP,FormattingOptions:()=>b0,Hover:()=>r0,InlayHint:()=>P0,InlayHintKind:()=>Jv,InlayHintLabelPart:()=>$v,InlineValueContext:()=>k0,InlineValueEvaluatableExpression:()=>T0,InlineValueText:()=>S0,InlineValueVariableLookup:()=>D0,InsertReplaceEdit:()=>VP,InsertTextFormat:()=>KP,InsertTextMode:()=>e0,Location:()=>Xi,LocationLink:()=>qP,MarkedString:()=>Pg,MarkupContent:()=>Ac,MarkupKind:()=>Zv,OptionalVersionedTextDocumentIdentifier:()=>kg,ParameterInformation:()=>o0,Position:()=>Mt,Range:()=>Be,RenameFile:()=>ha,SelectionRange:()=>v0,SemanticTokenModifiers:()=>x0,SemanticTokenTypes:()=>w0,SemanticTokens:()=>C0,SignatureInformation:()=>s0,SymbolInformation:()=>h0,SymbolKind:()=>u0,SymbolTag:()=>c0,TextDocument:()=>R0,TextDocumentEdit:()=>ua,TextDocumentIdentifier:()=>XP,TextDocumentItem:()=>zP,TextEdit:()=>un,URI:()=>qv,VersionedTextDocumentIdentifier:()=>GP,WorkspaceChange:()=>Phe,WorkspaceEdit:()=>Yv,WorkspaceFolder:()=>E0,WorkspaceSymbol:()=>d0,integer:()=>HP,uinteger:()=>Dg});var NP,qv,HP,Dg,Mt,Be,Xi,qP,Bv,BP,WP,YP,ZP,Wv,JP,$P,UP,Tg,Hl,un,Nl,Fi,ss,ua,ca,ha,as,Yv,Hv,ZH,Phe,XP,GP,kg,zP,Zv,Ac,ut,KP,QP,VP,e0,t0,i0,n0,Pg,r0,o0,s0,a0,l0,u0,c0,h0,d0,Eg,g0,Rg,p0,f0,m0,b0,y0,v0,w0,x0,C0,S0,D0,T0,k0,Jv,$v,P0,E0,Ehe,R0,Rhe,A,Kn=k(()=>{"use strict";(function(n){function e(t){return typeof t=="string"}n.is=e})(NP||(NP={}));(function(n){function e(t){return typeof t=="string"}n.is=e})(qv||(qv={}));(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647;function e(t){return typeof t=="number"&&n.MIN_VALUE<=t&&t<=n.MAX_VALUE}n.is=e})(HP||(HP={}));(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647;function e(t){return typeof t=="number"&&n.MIN_VALUE<=t&&t<=n.MAX_VALUE}n.is=e})(Dg||(Dg={}));(function(n){function e(i,r){return i===Number.MAX_VALUE&&(i=Dg.MAX_VALUE),r===Number.MAX_VALUE&&(r=Dg.MAX_VALUE),{line:i,character:r}}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&A.uinteger(r.line)&&A.uinteger(r.character)}n.is=t})(Mt||(Mt={}));(function(n){function e(i,r,o,s){if(A.uinteger(i)&&A.uinteger(r)&&A.uinteger(o)&&A.uinteger(s))return{start:Mt.create(i,r),end:Mt.create(o,s)};if(Mt.is(i)&&Mt.is(r))return{start:i,end:r};throw new Error("Range#create called with invalid arguments[".concat(i,", ").concat(r,", ").concat(o,", ").concat(s,"]"))}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&Mt.is(r.start)&&Mt.is(r.end)}n.is=t})(Be||(Be={}));(function(n){function e(i,r){return{uri:i,range:r}}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&Be.is(r.range)&&(A.string(r.uri)||A.undefined(r.uri))}n.is=t})(Xi||(Xi={}));(function(n){function e(i,r,o,s){return{targetUri:i,targetRange:r,targetSelectionRange:o,originSelectionRange:s}}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&Be.is(r.targetRange)&&A.string(r.targetUri)&&Be.is(r.targetSelectionRange)&&(Be.is(r.originSelectionRange)||A.undefined(r.originSelectionRange))}n.is=t})(qP||(qP={}));(function(n){function e(i,r,o,s){return{red:i,green:r,blue:o,alpha:s}}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&A.numberRange(r.red,0,1)&&A.numberRange(r.green,0,1)&&A.numberRange(r.blue,0,1)&&A.numberRange(r.alpha,0,1)}n.is=t})(Bv||(Bv={}));(function(n){function e(i,r){return{range:i,color:r}}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&Be.is(r.range)&&Bv.is(r.color)}n.is=t})(BP||(BP={}));(function(n){function e(i,r,o){return{label:i,textEdit:r,additionalTextEdits:o}}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&A.string(r.label)&&(A.undefined(r.textEdit)||un.is(r))&&(A.undefined(r.additionalTextEdits)||A.typedArray(r.additionalTextEdits,un.is))}n.is=t})(WP||(WP={}));(function(n){n.Comment="comment",n.Imports="imports",n.Region="region"})(YP||(YP={}));(function(n){function e(i,r,o,s,a,l){var u={startLine:i,endLine:r};return A.defined(o)&&(u.startCharacter=o),A.defined(s)&&(u.endCharacter=s),A.defined(a)&&(u.kind=a),A.defined(l)&&(u.collapsedText=l),u}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&A.uinteger(r.startLine)&&A.uinteger(r.startLine)&&(A.undefined(r.startCharacter)||A.uinteger(r.startCharacter))&&(A.undefined(r.endCharacter)||A.uinteger(r.endCharacter))&&(A.undefined(r.kind)||A.string(r.kind))}n.is=t})(ZP||(ZP={}));(function(n){function e(i,r){return{location:i,message:r}}n.create=e;function t(i){var r=i;return A.defined(r)&&Xi.is(r.location)&&A.string(r.message)}n.is=t})(Wv||(Wv={}));(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(JP||(JP={}));(function(n){n.Unnecessary=1,n.Deprecated=2})($P||($P={}));(function(n){function e(t){var i=t;return A.objectLiteral(i)&&A.string(i.href)}n.is=e})(UP||(UP={}));(function(n){function e(i,r,o,s,a,l){var u={range:i,message:r};return A.defined(o)&&(u.severity=o),A.defined(s)&&(u.code=s),A.defined(a)&&(u.source=a),A.defined(l)&&(u.relatedInformation=l),u}n.create=e;function t(i){var r,o=i;return A.defined(o)&&Be.is(o.range)&&A.string(o.message)&&(A.number(o.severity)||A.undefined(o.severity))&&(A.integer(o.code)||A.string(o.code)||A.undefined(o.code))&&(A.undefined(o.codeDescription)||A.string((r=o.codeDescription)===null||r===void 0?void 0:r.href))&&(A.string(o.source)||A.undefined(o.source))&&(A.undefined(o.relatedInformation)||A.typedArray(o.relatedInformation,Wv.is))}n.is=t})(Tg||(Tg={}));(function(n){function e(i,r){for(var o=[],s=2;s0&&(a.arguments=o),a}n.create=e;function t(i){var r=i;return A.defined(r)&&A.string(r.title)&&A.string(r.command)}n.is=t})(Hl||(Hl={}));(function(n){function e(o,s){return{range:o,newText:s}}n.replace=e;function t(o,s){return{range:{start:o,end:o},newText:s}}n.insert=t;function i(o){return{range:o,newText:""}}n.del=i;function r(o){var s=o;return A.objectLiteral(s)&&A.string(s.newText)&&Be.is(s.range)}n.is=r})(un||(un={}));(function(n){function e(i,r,o){var s={label:i};return r!==void 0&&(s.needsConfirmation=r),o!==void 0&&(s.description=o),s}n.create=e;function t(i){var r=i;return A.objectLiteral(r)&&A.string(r.label)&&(A.boolean(r.needsConfirmation)||r.needsConfirmation===void 0)&&(A.string(r.description)||r.description===void 0)}n.is=t})(Nl||(Nl={}));(function(n){function e(t){var i=t;return A.string(i)}n.is=e})(Fi||(Fi={}));(function(n){function e(o,s,a){return{range:o,newText:s,annotationId:a}}n.replace=e;function t(o,s,a){return{range:{start:o,end:o},newText:s,annotationId:a}}n.insert=t;function i(o,s){return{range:o,newText:"",annotationId:s}}n.del=i;function r(o){var s=o;return un.is(s)&&(Nl.is(s.annotationId)||Fi.is(s.annotationId))}n.is=r})(ss||(ss={}));(function(n){function e(i,r){return{textDocument:i,edits:r}}n.create=e;function t(i){var r=i;return A.defined(r)&&kg.is(r.textDocument)&&Array.isArray(r.edits)}n.is=t})(ua||(ua={}));(function(n){function e(i,r,o){var s={kind:"create",uri:i};return r!==void 0&&(r.overwrite!==void 0||r.ignoreIfExists!==void 0)&&(s.options=r),o!==void 0&&(s.annotationId=o),s}n.create=e;function t(i){var r=i;return r&&r.kind==="create"&&A.string(r.uri)&&(r.options===void 0||(r.options.overwrite===void 0||A.boolean(r.options.overwrite))&&(r.options.ignoreIfExists===void 0||A.boolean(r.options.ignoreIfExists)))&&(r.annotationId===void 0||Fi.is(r.annotationId))}n.is=t})(ca||(ca={}));(function(n){function e(i,r,o,s){var a={kind:"rename",oldUri:i,newUri:r};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(a.options=o),s!==void 0&&(a.annotationId=s),a}n.create=e;function t(i){var r=i;return r&&r.kind==="rename"&&A.string(r.oldUri)&&A.string(r.newUri)&&(r.options===void 0||(r.options.overwrite===void 0||A.boolean(r.options.overwrite))&&(r.options.ignoreIfExists===void 0||A.boolean(r.options.ignoreIfExists)))&&(r.annotationId===void 0||Fi.is(r.annotationId))}n.is=t})(ha||(ha={}));(function(n){function e(i,r,o){var s={kind:"delete",uri:i};return r!==void 0&&(r.recursive!==void 0||r.ignoreIfNotExists!==void 0)&&(s.options=r),o!==void 0&&(s.annotationId=o),s}n.create=e;function t(i){var r=i;return r&&r.kind==="delete"&&A.string(r.uri)&&(r.options===void 0||(r.options.recursive===void 0||A.boolean(r.options.recursive))&&(r.options.ignoreIfNotExists===void 0||A.boolean(r.options.ignoreIfNotExists)))&&(r.annotationId===void 0||Fi.is(r.annotationId))}n.is=t})(as||(as={}));(function(n){function e(t){var i=t;return i&&(i.changes!==void 0||i.documentChanges!==void 0)&&(i.documentChanges===void 0||i.documentChanges.every(function(r){return A.string(r.kind)?ca.is(r)||ha.is(r)||as.is(r):ua.is(r)}))}n.is=e})(Yv||(Yv={}));Hv=function(){function n(e,t){this.edits=e,this.changeAnnotations=t}return n.prototype.insert=function(e,t,i){var r,o;if(i===void 0?r=un.insert(e,t):Fi.is(i)?(o=i,r=ss.insert(e,t,i)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(i),r=ss.insert(e,t,o)),this.edits.push(r),o!==void 0)return o},n.prototype.replace=function(e,t,i){var r,o;if(i===void 0?r=un.replace(e,t):Fi.is(i)?(o=i,r=ss.replace(e,t,i)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(i),r=ss.replace(e,t,o)),this.edits.push(r),o!==void 0)return o},n.prototype.delete=function(e,t){var i,r;if(t===void 0?i=un.del(e):Fi.is(t)?(r=t,i=ss.del(e,t)):(this.assertChangeAnnotations(this.changeAnnotations),r=this.changeAnnotations.manage(t),i=ss.del(e,r)),this.edits.push(i),r!==void 0)return r},n.prototype.add=function(e){this.edits.push(e)},n.prototype.all=function(){return this.edits},n.prototype.clear=function(){this.edits.splice(0,this.edits.length)},n.prototype.assertChangeAnnotations=function(e){if(e===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},n}(),ZH=function(){function n(e){this._annotations=e===void 0?Object.create(null):e,this._counter=0,this._size=0}return n.prototype.all=function(){return this._annotations},Object.defineProperty(n.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),n.prototype.manage=function(e,t){var i;if(Fi.is(e)?i=e:(i=this.nextId(),t=e),this._annotations[i]!==void 0)throw new Error("Id ".concat(i," is already in use."));if(t===void 0)throw new Error("No annotation provided for id ".concat(i));return this._annotations[i]=t,this._size++,i},n.prototype.nextId=function(){return this._counter++,this._counter.toString()},n}(),Phe=function(){function n(e){var t=this;this._textEditChanges=Object.create(null),e!==void 0?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new ZH(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach(function(i){if(ua.is(i)){var r=new Hv(i.edits,t._changeAnnotations);t._textEditChanges[i.textDocument.uri]=r}})):e.changes&&Object.keys(e.changes).forEach(function(i){var r=new Hv(e.changes[i]);t._textEditChanges[i]=r})):this._workspaceEdit={}}return Object.defineProperty(n.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),n.prototype.getTextEditChange=function(e){if(kg.is(e)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var t={uri:e.uri,version:e.version},i=this._textEditChanges[t.uri];if(!i){var r=[],o={textDocument:t,edits:r};this._workspaceEdit.documentChanges.push(o),i=new Hv(r,this._changeAnnotations),this._textEditChanges[t.uri]=i}return i}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var i=this._textEditChanges[e];if(!i){var r=[];this._workspaceEdit.changes[e]=r,i=new Hv(r),this._textEditChanges[e]=i}return i}},n.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new ZH,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},n.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},n.prototype.createFile=function(e,t,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var r;Nl.is(t)||Fi.is(t)?r=t:i=t;var o,s;if(r===void 0?o=ca.create(e,i):(s=Fi.is(r)?r:this._changeAnnotations.manage(r),o=ca.create(e,i,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n.prototype.renameFile=function(e,t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var o;Nl.is(i)||Fi.is(i)?o=i:r=i;var s,a;if(o===void 0?s=ha.create(e,t,r):(a=Fi.is(o)?o:this._changeAnnotations.manage(o),s=ha.create(e,t,r,a)),this._workspaceEdit.documentChanges.push(s),a!==void 0)return a},n.prototype.deleteFile=function(e,t,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var r;Nl.is(t)||Fi.is(t)?r=t:i=t;var o,s;if(r===void 0?o=as.create(e,i):(s=Fi.is(r)?r:this._changeAnnotations.manage(r),o=as.create(e,i,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n}();(function(n){function e(i){return{uri:i}}n.create=e;function t(i){var r=i;return A.defined(r)&&A.string(r.uri)}n.is=t})(XP||(XP={}));(function(n){function e(i,r){return{uri:i,version:r}}n.create=e;function t(i){var r=i;return A.defined(r)&&A.string(r.uri)&&A.integer(r.version)}n.is=t})(GP||(GP={}));(function(n){function e(i,r){return{uri:i,version:r}}n.create=e;function t(i){var r=i;return A.defined(r)&&A.string(r.uri)&&(r.version===null||A.integer(r.version))}n.is=t})(kg||(kg={}));(function(n){function e(i,r,o,s){return{uri:i,languageId:r,version:o,text:s}}n.create=e;function t(i){var r=i;return A.defined(r)&&A.string(r.uri)&&A.string(r.languageId)&&A.integer(r.version)&&A.string(r.text)}n.is=t})(zP||(zP={}));(function(n){n.PlainText="plaintext",n.Markdown="markdown";function e(t){var i=t;return i===n.PlainText||i===n.Markdown}n.is=e})(Zv||(Zv={}));(function(n){function e(t){var i=t;return A.objectLiteral(t)&&Zv.is(i.kind)&&A.string(i.value)}n.is=e})(Ac||(Ac={}));(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(ut||(ut={}));(function(n){n.PlainText=1,n.Snippet=2})(KP||(KP={}));(function(n){n.Deprecated=1})(QP||(QP={}));(function(n){function e(i,r,o){return{newText:i,insert:r,replace:o}}n.create=e;function t(i){var r=i;return r&&A.string(r.newText)&&Be.is(r.insert)&&Be.is(r.replace)}n.is=t})(VP||(VP={}));(function(n){n.asIs=1,n.adjustIndentation=2})(e0||(e0={}));(function(n){function e(t){var i=t;return i&&(A.string(i.detail)||i.detail===void 0)&&(A.string(i.description)||i.description===void 0)}n.is=e})(t0||(t0={}));(function(n){function e(t){return{label:t}}n.create=e})(i0||(i0={}));(function(n){function e(t,i){return{items:t||[],isIncomplete:!!i}}n.create=e})(n0||(n0={}));(function(n){function e(i){return i.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}n.fromPlainText=e;function t(i){var r=i;return A.string(r)||A.objectLiteral(r)&&A.string(r.language)&&A.string(r.value)}n.is=t})(Pg||(Pg={}));(function(n){function e(t){var i=t;return!!i&&A.objectLiteral(i)&&(Ac.is(i.contents)||Pg.is(i.contents)||A.typedArray(i.contents,Pg.is))&&(t.range===void 0||Be.is(t.range))}n.is=e})(r0||(r0={}));(function(n){function e(t,i){return i?{label:t,documentation:i}:{label:t}}n.create=e})(o0||(o0={}));(function(n){function e(t,i){for(var r=[],o=2;o=0;c--){var h=l[c],d=o.offsetAt(h.range.start),g=o.offsetAt(h.range.end);if(g<=u)a=a.substring(0,d)+h.newText+a.substring(g,a.length);else throw new Error("Overlapping edit");u=d}return a}n.applyEdits=i;function r(o,s){if(o.length<=1)return o;var a=o.length/2|0,l=o.slice(0,a),u=o.slice(a);r(l,s),r(u,s);for(var c=0,h=0,d=0;c0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets},n.prototype.positionAt=function(e){e=Math.max(Math.min(e,this._content.length),0);var t=this.getLineOffsets(),i=0,r=t.length;if(r===0)return Mt.create(0,e);for(;ie?r=o:i=o+1}var s=i-1;return Mt.create(s,e-t[s])},n.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var i=t[e.line],r=e.line+1"u"}n.undefined=i;function r(g){return g===!0||g===!1}n.boolean=r;function o(g){return e.call(g)==="[object String]"}n.string=o;function s(g){return e.call(g)==="[object Number]"}n.number=s;function a(g,p,f){return e.call(g)==="[object Number]"&&p<=g&&g<=f}n.numberRange=a;function l(g){return e.call(g)==="[object Number]"&&-2147483648<=g&&g<=2147483647}n.integer=l;function u(g){return e.call(g)==="[object Number]"&&0<=g&&g<=2147483647}n.uinteger=u;function c(g){return e.call(g)==="[object Function]"}n.func=c;function h(g){return g!==null&&typeof g=="object"}n.objectLiteral=h;function d(g,p){return Array.isArray(g)&&g.every(p)}n.typedArray=d})(A||(A={}))});var Ot=y(cn=>{"use strict";Object.defineProperty(cn,"__esModule",{value:!0});cn.ProtocolNotificationType=cn.ProtocolNotificationType0=cn.ProtocolRequestType=cn.ProtocolRequestType0=cn.RegistrationType=cn.MessageDirection=void 0;var Nc=Al(),_he;(function(n){n.clientToServer="clientToServer",n.serverToClient="serverToClient",n.both="both"})(_he=cn.MessageDirection||(cn.MessageDirection={}));var _0=class{constructor(e){this.method=e}};cn.RegistrationType=_0;var L0=class extends Nc.RequestType0{constructor(e){super(e)}};cn.ProtocolRequestType0=L0;var I0=class extends Nc.RequestType{constructor(e){super(e,Nc.ParameterStructures.byName)}};cn.ProtocolRequestType=I0;var F0=class extends Nc.NotificationType0{constructor(e){super(e)}};cn.ProtocolNotificationType0=F0;var j0=class extends Nc.NotificationType{constructor(e){super(e,Nc.ParameterStructures.byName)}};cn.ProtocolNotificationType=j0});var Xv=y(Vt=>{"use strict";Object.defineProperty(Vt,"__esModule",{value:!0});Vt.objectLiteral=Vt.typedArray=Vt.stringArray=Vt.array=Vt.func=Vt.error=Vt.number=Vt.string=Vt.boolean=void 0;function Lhe(n){return n===!0||n===!1}Vt.boolean=Lhe;function JH(n){return typeof n=="string"||n instanceof String}Vt.string=JH;function Ihe(n){return typeof n=="number"||n instanceof Number}Vt.number=Ihe;function Fhe(n){return n instanceof Error}Vt.error=Fhe;function jhe(n){return typeof n=="function"}Vt.func=jhe;function $H(n){return Array.isArray(n)}Vt.array=$H;function Mhe(n){return $H(n)&&n.every(e=>JH(e))}Vt.stringArray=Mhe;function Ohe(n,e){return Array.isArray(n)&&n.every(e)}Vt.typedArray=Ohe;function Ahe(n){return n!==null&&typeof n=="object"}Vt.objectLiteral=Ahe});var XH=y(_g=>{"use strict";Object.defineProperty(_g,"__esModule",{value:!0});_g.ImplementationRequest=void 0;var UH=Ot(),Nhe;(function(n){n.method="textDocument/implementation",n.messageDirection=UH.MessageDirection.clientToServer,n.type=new UH.ProtocolRequestType(n.method)})(Nhe=_g.ImplementationRequest||(_g.ImplementationRequest={}))});var zH=y(Lg=>{"use strict";Object.defineProperty(Lg,"__esModule",{value:!0});Lg.TypeDefinitionRequest=void 0;var GH=Ot(),Hhe;(function(n){n.method="textDocument/typeDefinition",n.messageDirection=GH.MessageDirection.clientToServer,n.type=new GH.ProtocolRequestType(n.method)})(Hhe=Lg.TypeDefinitionRequest||(Lg.TypeDefinitionRequest={}))});var KH=y(da=>{"use strict";Object.defineProperty(da,"__esModule",{value:!0});da.DidChangeWorkspaceFoldersNotification=da.WorkspaceFoldersRequest=void 0;var Gv=Ot(),qhe;(function(n){n.method="workspace/workspaceFolders",n.messageDirection=Gv.MessageDirection.serverToClient,n.type=new Gv.ProtocolRequestType0(n.method)})(qhe=da.WorkspaceFoldersRequest||(da.WorkspaceFoldersRequest={}));var Bhe;(function(n){n.method="workspace/didChangeWorkspaceFolders",n.messageDirection=Gv.MessageDirection.clientToServer,n.type=new Gv.ProtocolNotificationType(n.method)})(Bhe=da.DidChangeWorkspaceFoldersNotification||(da.DidChangeWorkspaceFoldersNotification={}))});var VH=y(Ig=>{"use strict";Object.defineProperty(Ig,"__esModule",{value:!0});Ig.ConfigurationRequest=void 0;var QH=Ot(),Whe;(function(n){n.method="workspace/configuration",n.messageDirection=QH.MessageDirection.serverToClient,n.type=new QH.ProtocolRequestType(n.method)})(Whe=Ig.ConfigurationRequest||(Ig.ConfigurationRequest={}))});var eq=y(ga=>{"use strict";Object.defineProperty(ga,"__esModule",{value:!0});ga.ColorPresentationRequest=ga.DocumentColorRequest=void 0;var zv=Ot(),Yhe;(function(n){n.method="textDocument/documentColor",n.messageDirection=zv.MessageDirection.clientToServer,n.type=new zv.ProtocolRequestType(n.method)})(Yhe=ga.DocumentColorRequest||(ga.DocumentColorRequest={}));var Zhe;(function(n){n.method="textDocument/colorPresentation",n.messageDirection=zv.MessageDirection.clientToServer,n.type=new zv.ProtocolRequestType(n.method)})(Zhe=ga.ColorPresentationRequest||(ga.ColorPresentationRequest={}))});var iq=y(Fg=>{"use strict";Object.defineProperty(Fg,"__esModule",{value:!0});Fg.FoldingRangeRequest=void 0;var tq=Ot(),Jhe;(function(n){n.method="textDocument/foldingRange",n.messageDirection=tq.MessageDirection.clientToServer,n.type=new tq.ProtocolRequestType(n.method)})(Jhe=Fg.FoldingRangeRequest||(Fg.FoldingRangeRequest={}))});var rq=y(jg=>{"use strict";Object.defineProperty(jg,"__esModule",{value:!0});jg.DeclarationRequest=void 0;var nq=Ot(),$he;(function(n){n.method="textDocument/declaration",n.messageDirection=nq.MessageDirection.clientToServer,n.type=new nq.ProtocolRequestType(n.method)})($he=jg.DeclarationRequest||(jg.DeclarationRequest={}))});var sq=y(Mg=>{"use strict";Object.defineProperty(Mg,"__esModule",{value:!0});Mg.SelectionRangeRequest=void 0;var oq=Ot(),Uhe;(function(n){n.method="textDocument/selectionRange",n.messageDirection=oq.MessageDirection.clientToServer,n.type=new oq.ProtocolRequestType(n.method)})(Uhe=Mg.SelectionRangeRequest||(Mg.SelectionRangeRequest={}))});var aq=y($r=>{"use strict";Object.defineProperty($r,"__esModule",{value:!0});$r.WorkDoneProgressCancelNotification=$r.WorkDoneProgressCreateRequest=$r.WorkDoneProgress=void 0;var Xhe=Al(),Kv=Ot(),Ghe;(function(n){n.type=new Xhe.ProgressType;function e(t){return t===n.type}n.is=e})(Ghe=$r.WorkDoneProgress||($r.WorkDoneProgress={}));var zhe;(function(n){n.method="window/workDoneProgress/create",n.messageDirection=Kv.MessageDirection.serverToClient,n.type=new Kv.ProtocolRequestType(n.method)})(zhe=$r.WorkDoneProgressCreateRequest||($r.WorkDoneProgressCreateRequest={}));var Khe;(function(n){n.method="window/workDoneProgress/cancel",n.messageDirection=Kv.MessageDirection.clientToServer,n.type=new Kv.ProtocolNotificationType(n.method)})(Khe=$r.WorkDoneProgressCancelNotification||($r.WorkDoneProgressCancelNotification={}))});var lq=y(Ur=>{"use strict";Object.defineProperty(Ur,"__esModule",{value:!0});Ur.CallHierarchyOutgoingCallsRequest=Ur.CallHierarchyIncomingCallsRequest=Ur.CallHierarchyPrepareRequest=void 0;var Hc=Ot(),Qhe;(function(n){n.method="textDocument/prepareCallHierarchy",n.messageDirection=Hc.MessageDirection.clientToServer,n.type=new Hc.ProtocolRequestType(n.method)})(Qhe=Ur.CallHierarchyPrepareRequest||(Ur.CallHierarchyPrepareRequest={}));var Vhe;(function(n){n.method="callHierarchy/incomingCalls",n.messageDirection=Hc.MessageDirection.clientToServer,n.type=new Hc.ProtocolRequestType(n.method)})(Vhe=Ur.CallHierarchyIncomingCallsRequest||(Ur.CallHierarchyIncomingCallsRequest={}));var ede;(function(n){n.method="callHierarchy/outgoingCalls",n.messageDirection=Hc.MessageDirection.clientToServer,n.type=new Hc.ProtocolRequestType(n.method)})(ede=Ur.CallHierarchyOutgoingCallsRequest||(Ur.CallHierarchyOutgoingCallsRequest={}))});var uq=y(ei=>{"use strict";Object.defineProperty(ei,"__esModule",{value:!0});ei.SemanticTokensRefreshRequest=ei.SemanticTokensRangeRequest=ei.SemanticTokensDeltaRequest=ei.SemanticTokensRequest=ei.SemanticTokensRegistrationType=ei.TokenFormat=void 0;var ls=Ot(),tde;(function(n){n.Relative="relative"})(tde=ei.TokenFormat||(ei.TokenFormat={}));var Qv;(function(n){n.method="textDocument/semanticTokens",n.type=new ls.RegistrationType(n.method)})(Qv=ei.SemanticTokensRegistrationType||(ei.SemanticTokensRegistrationType={}));var ide;(function(n){n.method="textDocument/semanticTokens/full",n.messageDirection=ls.MessageDirection.clientToServer,n.type=new ls.ProtocolRequestType(n.method),n.registrationMethod=Qv.method})(ide=ei.SemanticTokensRequest||(ei.SemanticTokensRequest={}));var nde;(function(n){n.method="textDocument/semanticTokens/full/delta",n.messageDirection=ls.MessageDirection.clientToServer,n.type=new ls.ProtocolRequestType(n.method),n.registrationMethod=Qv.method})(nde=ei.SemanticTokensDeltaRequest||(ei.SemanticTokensDeltaRequest={}));var rde;(function(n){n.method="textDocument/semanticTokens/range",n.messageDirection=ls.MessageDirection.clientToServer,n.type=new ls.ProtocolRequestType(n.method),n.registrationMethod=Qv.method})(rde=ei.SemanticTokensRangeRequest||(ei.SemanticTokensRangeRequest={}));var ode;(function(n){n.method="workspace/semanticTokens/refresh",n.messageDirection=ls.MessageDirection.clientToServer,n.type=new ls.ProtocolRequestType0(n.method)})(ode=ei.SemanticTokensRefreshRequest||(ei.SemanticTokensRefreshRequest={}))});var hq=y(Og=>{"use strict";Object.defineProperty(Og,"__esModule",{value:!0});Og.ShowDocumentRequest=void 0;var cq=Ot(),sde;(function(n){n.method="window/showDocument",n.messageDirection=cq.MessageDirection.serverToClient,n.type=new cq.ProtocolRequestType(n.method)})(sde=Og.ShowDocumentRequest||(Og.ShowDocumentRequest={}))});var gq=y(Ag=>{"use strict";Object.defineProperty(Ag,"__esModule",{value:!0});Ag.LinkedEditingRangeRequest=void 0;var dq=Ot(),ade;(function(n){n.method="textDocument/linkedEditingRange",n.messageDirection=dq.MessageDirection.clientToServer,n.type=new dq.ProtocolRequestType(n.method)})(ade=Ag.LinkedEditingRangeRequest||(Ag.LinkedEditingRangeRequest={}))});var pq=y(At=>{"use strict";Object.defineProperty(At,"__esModule",{value:!0});At.WillDeleteFilesRequest=At.DidDeleteFilesNotification=At.DidRenameFilesNotification=At.WillRenameFilesRequest=At.DidCreateFilesNotification=At.WillCreateFilesRequest=At.FileOperationPatternKind=void 0;var vr=Ot(),lde;(function(n){n.file="file",n.folder="folder"})(lde=At.FileOperationPatternKind||(At.FileOperationPatternKind={}));var ude;(function(n){n.method="workspace/willCreateFiles",n.messageDirection=vr.MessageDirection.clientToServer,n.type=new vr.ProtocolRequestType(n.method)})(ude=At.WillCreateFilesRequest||(At.WillCreateFilesRequest={}));var cde;(function(n){n.method="workspace/didCreateFiles",n.messageDirection=vr.MessageDirection.clientToServer,n.type=new vr.ProtocolNotificationType(n.method)})(cde=At.DidCreateFilesNotification||(At.DidCreateFilesNotification={}));var hde;(function(n){n.method="workspace/willRenameFiles",n.messageDirection=vr.MessageDirection.clientToServer,n.type=new vr.ProtocolRequestType(n.method)})(hde=At.WillRenameFilesRequest||(At.WillRenameFilesRequest={}));var dde;(function(n){n.method="workspace/didRenameFiles",n.messageDirection=vr.MessageDirection.clientToServer,n.type=new vr.ProtocolNotificationType(n.method)})(dde=At.DidRenameFilesNotification||(At.DidRenameFilesNotification={}));var gde;(function(n){n.method="workspace/didDeleteFiles",n.messageDirection=vr.MessageDirection.clientToServer,n.type=new vr.ProtocolNotificationType(n.method)})(gde=At.DidDeleteFilesNotification||(At.DidDeleteFilesNotification={}));var pde;(function(n){n.method="workspace/willDeleteFiles",n.messageDirection=vr.MessageDirection.clientToServer,n.type=new vr.ProtocolRequestType(n.method)})(pde=At.WillDeleteFilesRequest||(At.WillDeleteFilesRequest={}))});var mq=y(Xr=>{"use strict";Object.defineProperty(Xr,"__esModule",{value:!0});Xr.MonikerRequest=Xr.MonikerKind=Xr.UniquenessLevel=void 0;var fq=Ot(),fde;(function(n){n.document="document",n.project="project",n.group="group",n.scheme="scheme",n.global="global"})(fde=Xr.UniquenessLevel||(Xr.UniquenessLevel={}));var mde;(function(n){n.$import="import",n.$export="export",n.local="local"})(mde=Xr.MonikerKind||(Xr.MonikerKind={}));var bde;(function(n){n.method="textDocument/moniker",n.messageDirection=fq.MessageDirection.clientToServer,n.type=new fq.ProtocolRequestType(n.method)})(bde=Xr.MonikerRequest||(Xr.MonikerRequest={}))});var bq=y(Gr=>{"use strict";Object.defineProperty(Gr,"__esModule",{value:!0});Gr.TypeHierarchySubtypesRequest=Gr.TypeHierarchySupertypesRequest=Gr.TypeHierarchyPrepareRequest=void 0;var qc=Ot(),yde;(function(n){n.method="textDocument/prepareTypeHierarchy",n.messageDirection=qc.MessageDirection.clientToServer,n.type=new qc.ProtocolRequestType(n.method)})(yde=Gr.TypeHierarchyPrepareRequest||(Gr.TypeHierarchyPrepareRequest={}));var vde;(function(n){n.method="typeHierarchy/supertypes",n.messageDirection=qc.MessageDirection.clientToServer,n.type=new qc.ProtocolRequestType(n.method)})(vde=Gr.TypeHierarchySupertypesRequest||(Gr.TypeHierarchySupertypesRequest={}));var wde;(function(n){n.method="typeHierarchy/subtypes",n.messageDirection=qc.MessageDirection.clientToServer,n.type=new qc.ProtocolRequestType(n.method)})(wde=Gr.TypeHierarchySubtypesRequest||(Gr.TypeHierarchySubtypesRequest={}))});var yq=y(pa=>{"use strict";Object.defineProperty(pa,"__esModule",{value:!0});pa.InlineValueRefreshRequest=pa.InlineValueRequest=void 0;var Vv=Ot(),xde;(function(n){n.method="textDocument/inlineValue",n.messageDirection=Vv.MessageDirection.clientToServer,n.type=new Vv.ProtocolRequestType(n.method)})(xde=pa.InlineValueRequest||(pa.InlineValueRequest={}));var Cde;(function(n){n.method="workspace/inlineValue/refresh",n.messageDirection=Vv.MessageDirection.clientToServer,n.type=new Vv.ProtocolRequestType0(n.method)})(Cde=pa.InlineValueRefreshRequest||(pa.InlineValueRefreshRequest={}))});var vq=y(zr=>{"use strict";Object.defineProperty(zr,"__esModule",{value:!0});zr.InlayHintRefreshRequest=zr.InlayHintResolveRequest=zr.InlayHintRequest=void 0;var Bc=Ot(),Sde;(function(n){n.method="textDocument/inlayHint",n.messageDirection=Bc.MessageDirection.clientToServer,n.type=new Bc.ProtocolRequestType(n.method)})(Sde=zr.InlayHintRequest||(zr.InlayHintRequest={}));var Dde;(function(n){n.method="inlayHint/resolve",n.messageDirection=Bc.MessageDirection.clientToServer,n.type=new Bc.ProtocolRequestType(n.method)})(Dde=zr.InlayHintResolveRequest||(zr.InlayHintResolveRequest={}));var Tde;(function(n){n.method="workspace/inlayHint/refresh",n.messageDirection=Bc.MessageDirection.clientToServer,n.type=new Bc.ProtocolRequestType0(n.method)})(Tde=zr.InlayHintRefreshRequest||(zr.InlayHintRefreshRequest={}))});var xq=y(ji=>{"use strict";Object.defineProperty(ji,"__esModule",{value:!0});ji.DiagnosticRefreshRequest=ji.WorkspaceDiagnosticRequest=ji.DocumentDiagnosticRequest=ji.DocumentDiagnosticReportKind=ji.DiagnosticServerCancellationData=void 0;var wq=Al(),kde=Xv(),Wc=Ot(),Pde;(function(n){function e(t){let i=t;return i&&kde.boolean(i.retriggerRequest)}n.is=e})(Pde=ji.DiagnosticServerCancellationData||(ji.DiagnosticServerCancellationData={}));var Ede;(function(n){n.Full="full",n.Unchanged="unchanged"})(Ede=ji.DocumentDiagnosticReportKind||(ji.DocumentDiagnosticReportKind={}));var Rde;(function(n){n.method="textDocument/diagnostic",n.messageDirection=Wc.MessageDirection.clientToServer,n.type=new Wc.ProtocolRequestType(n.method),n.partialResult=new wq.ProgressType})(Rde=ji.DocumentDiagnosticRequest||(ji.DocumentDiagnosticRequest={}));var _de;(function(n){n.method="workspace/diagnostic",n.messageDirection=Wc.MessageDirection.clientToServer,n.type=new Wc.ProtocolRequestType(n.method),n.partialResult=new wq.ProgressType})(_de=ji.WorkspaceDiagnosticRequest||(ji.WorkspaceDiagnosticRequest={}));var Lde;(function(n){n.method="workspace/diagnostic/refresh",n.messageDirection=Wc.MessageDirection.clientToServer,n.type=new Wc.ProtocolRequestType0(n.method)})(Lde=ji.DiagnosticRefreshRequest||(ji.DiagnosticRefreshRequest={}))});var Dq=y(Ge=>{"use strict";Object.defineProperty(Ge,"__esModule",{value:!0});Ge.DidCloseNotebookDocumentNotification=Ge.DidSaveNotebookDocumentNotification=Ge.DidChangeNotebookDocumentNotification=Ge.NotebookCellArrayChange=Ge.DidOpenNotebookDocumentNotification=Ge.NotebookDocumentSyncRegistrationType=Ge.NotebookDocument=Ge.NotebookCell=Ge.ExecutionSummary=Ge.NotebookCellKind=void 0;var Ng=(Kn(),Co(Uv)),Kr=Xv(),Po=Ot(),Cq;(function(n){n.Markup=1,n.Code=2;function e(t){return t===1||t===2}n.is=e})(Cq=Ge.NotebookCellKind||(Ge.NotebookCellKind={}));var Sq;(function(n){function e(r,o){let s={executionOrder:r};return(o===!0||o===!1)&&(s.success=o),s}n.create=e;function t(r){let o=r;return Kr.objectLiteral(o)&&Ng.uinteger.is(o.executionOrder)&&(o.success===void 0||Kr.boolean(o.success))}n.is=t;function i(r,o){return r===o?!0:r==null||o===null||o===void 0?!1:r.executionOrder===o.executionOrder&&r.success===o.success}n.equals=i})(Sq=Ge.ExecutionSummary||(Ge.ExecutionSummary={}));var M0;(function(n){function e(o,s){return{kind:o,document:s}}n.create=e;function t(o){let s=o;return Kr.objectLiteral(s)&&Cq.is(s.kind)&&Ng.DocumentUri.is(s.document)&&(s.metadata===void 0||Kr.objectLiteral(s.metadata))}n.is=t;function i(o,s){let a=new Set;return o.document!==s.document&&a.add("document"),o.kind!==s.kind&&a.add("kind"),o.executionSummary!==s.executionSummary&&a.add("executionSummary"),(o.metadata!==void 0||s.metadata!==void 0)&&!r(o.metadata,s.metadata)&&a.add("metadata"),(o.executionSummary!==void 0||s.executionSummary!==void 0)&&!Sq.equals(o.executionSummary,s.executionSummary)&&a.add("executionSummary"),a}n.diff=i;function r(o,s){if(o===s)return!0;if(o==null||s===null||s===void 0||typeof o!=typeof s||typeof o!="object")return!1;let a=Array.isArray(o),l=Array.isArray(s);if(a!==l)return!1;if(a&&l){if(o.length!==s.length)return!1;for(let u=0;u{"use strict";Object.defineProperty(C,"__esModule",{value:!0});C.WorkspaceSymbolRequest=C.CodeActionResolveRequest=C.CodeActionRequest=C.DocumentSymbolRequest=C.DocumentHighlightRequest=C.ReferencesRequest=C.DefinitionRequest=C.SignatureHelpRequest=C.SignatureHelpTriggerKind=C.HoverRequest=C.CompletionResolveRequest=C.CompletionRequest=C.CompletionTriggerKind=C.PublishDiagnosticsNotification=C.WatchKind=C.RelativePattern=C.FileChangeType=C.DidChangeWatchedFilesNotification=C.WillSaveTextDocumentWaitUntilRequest=C.WillSaveTextDocumentNotification=C.TextDocumentSaveReason=C.DidSaveTextDocumentNotification=C.DidCloseTextDocumentNotification=C.DidChangeTextDocumentNotification=C.TextDocumentContentChangeEvent=C.DidOpenTextDocumentNotification=C.TextDocumentSyncKind=C.TelemetryEventNotification=C.LogMessageNotification=C.ShowMessageRequest=C.ShowMessageNotification=C.MessageType=C.DidChangeConfigurationNotification=C.ExitNotification=C.ShutdownRequest=C.InitializedNotification=C.InitializeErrorCodes=C.InitializeRequest=C.WorkDoneProgressOptions=C.TextDocumentRegistrationOptions=C.StaticRegistrationOptions=C.PositionEncodingKind=C.FailureHandlingKind=C.ResourceOperationKind=C.UnregistrationRequest=C.RegistrationRequest=C.DocumentSelector=C.NotebookCellTextDocumentFilter=C.NotebookDocumentFilter=C.TextDocumentFilter=void 0;C.TypeHierarchySubtypesRequest=C.TypeHierarchyPrepareRequest=C.MonikerRequest=C.MonikerKind=C.UniquenessLevel=C.WillDeleteFilesRequest=C.DidDeleteFilesNotification=C.WillRenameFilesRequest=C.DidRenameFilesNotification=C.WillCreateFilesRequest=C.DidCreateFilesNotification=C.FileOperationPatternKind=C.LinkedEditingRangeRequest=C.ShowDocumentRequest=C.SemanticTokensRegistrationType=C.SemanticTokensRefreshRequest=C.SemanticTokensRangeRequest=C.SemanticTokensDeltaRequest=C.SemanticTokensRequest=C.TokenFormat=C.CallHierarchyPrepareRequest=C.CallHierarchyOutgoingCallsRequest=C.CallHierarchyIncomingCallsRequest=C.WorkDoneProgressCancelNotification=C.WorkDoneProgressCreateRequest=C.WorkDoneProgress=C.SelectionRangeRequest=C.DeclarationRequest=C.FoldingRangeRequest=C.ColorPresentationRequest=C.DocumentColorRequest=C.ConfigurationRequest=C.DidChangeWorkspaceFoldersNotification=C.WorkspaceFoldersRequest=C.TypeDefinitionRequest=C.ImplementationRequest=C.ApplyWorkspaceEditRequest=C.ExecuteCommandRequest=C.PrepareRenameRequest=C.RenameRequest=C.PrepareSupportDefaultBehavior=C.DocumentOnTypeFormattingRequest=C.DocumentRangeFormattingRequest=C.DocumentFormattingRequest=C.DocumentLinkResolveRequest=C.DocumentLinkRequest=C.CodeLensRefreshRequest=C.CodeLensResolveRequest=C.CodeLensRequest=C.WorkspaceSymbolResolveRequest=void 0;C.DidCloseNotebookDocumentNotification=C.DidSaveNotebookDocumentNotification=C.DidChangeNotebookDocumentNotification=C.NotebookCellArrayChange=C.DidOpenNotebookDocumentNotification=C.NotebookDocumentSyncRegistrationType=C.NotebookDocument=C.NotebookCell=C.ExecutionSummary=C.NotebookCellKind=C.DiagnosticRefreshRequest=C.WorkspaceDiagnosticRequest=C.DocumentDiagnosticRequest=C.DocumentDiagnosticReportKind=C.DiagnosticServerCancellationData=C.InlayHintRefreshRequest=C.InlayHintResolveRequest=C.InlayHintRequest=C.InlineValueRefreshRequest=C.InlineValueRequest=C.TypeHierarchySupertypesRequest=void 0;var ee=Ot(),Tq=(Kn(),Co(Uv)),Mi=Xv(),Nde=XH();Object.defineProperty(C,"ImplementationRequest",{enumerable:!0,get:function(){return Nde.ImplementationRequest}});var Hde=zH();Object.defineProperty(C,"TypeDefinitionRequest",{enumerable:!0,get:function(){return Hde.TypeDefinitionRequest}});var kq=KH();Object.defineProperty(C,"WorkspaceFoldersRequest",{enumerable:!0,get:function(){return kq.WorkspaceFoldersRequest}});Object.defineProperty(C,"DidChangeWorkspaceFoldersNotification",{enumerable:!0,get:function(){return kq.DidChangeWorkspaceFoldersNotification}});var qde=VH();Object.defineProperty(C,"ConfigurationRequest",{enumerable:!0,get:function(){return qde.ConfigurationRequest}});var Pq=eq();Object.defineProperty(C,"DocumentColorRequest",{enumerable:!0,get:function(){return Pq.DocumentColorRequest}});Object.defineProperty(C,"ColorPresentationRequest",{enumerable:!0,get:function(){return Pq.ColorPresentationRequest}});var Bde=iq();Object.defineProperty(C,"FoldingRangeRequest",{enumerable:!0,get:function(){return Bde.FoldingRangeRequest}});var Wde=rq();Object.defineProperty(C,"DeclarationRequest",{enumerable:!0,get:function(){return Wde.DeclarationRequest}});var Yde=sq();Object.defineProperty(C,"SelectionRangeRequest",{enumerable:!0,get:function(){return Yde.SelectionRangeRequest}});var O0=aq();Object.defineProperty(C,"WorkDoneProgress",{enumerable:!0,get:function(){return O0.WorkDoneProgress}});Object.defineProperty(C,"WorkDoneProgressCreateRequest",{enumerable:!0,get:function(){return O0.WorkDoneProgressCreateRequest}});Object.defineProperty(C,"WorkDoneProgressCancelNotification",{enumerable:!0,get:function(){return O0.WorkDoneProgressCancelNotification}});var A0=lq();Object.defineProperty(C,"CallHierarchyIncomingCallsRequest",{enumerable:!0,get:function(){return A0.CallHierarchyIncomingCallsRequest}});Object.defineProperty(C,"CallHierarchyOutgoingCallsRequest",{enumerable:!0,get:function(){return A0.CallHierarchyOutgoingCallsRequest}});Object.defineProperty(C,"CallHierarchyPrepareRequest",{enumerable:!0,get:function(){return A0.CallHierarchyPrepareRequest}});var Yc=uq();Object.defineProperty(C,"TokenFormat",{enumerable:!0,get:function(){return Yc.TokenFormat}});Object.defineProperty(C,"SemanticTokensRequest",{enumerable:!0,get:function(){return Yc.SemanticTokensRequest}});Object.defineProperty(C,"SemanticTokensDeltaRequest",{enumerable:!0,get:function(){return Yc.SemanticTokensDeltaRequest}});Object.defineProperty(C,"SemanticTokensRangeRequest",{enumerable:!0,get:function(){return Yc.SemanticTokensRangeRequest}});Object.defineProperty(C,"SemanticTokensRefreshRequest",{enumerable:!0,get:function(){return Yc.SemanticTokensRefreshRequest}});Object.defineProperty(C,"SemanticTokensRegistrationType",{enumerable:!0,get:function(){return Yc.SemanticTokensRegistrationType}});var Zde=hq();Object.defineProperty(C,"ShowDocumentRequest",{enumerable:!0,get:function(){return Zde.ShowDocumentRequest}});var Jde=gq();Object.defineProperty(C,"LinkedEditingRangeRequest",{enumerable:!0,get:function(){return Jde.LinkedEditingRangeRequest}});var ql=pq();Object.defineProperty(C,"FileOperationPatternKind",{enumerable:!0,get:function(){return ql.FileOperationPatternKind}});Object.defineProperty(C,"DidCreateFilesNotification",{enumerable:!0,get:function(){return ql.DidCreateFilesNotification}});Object.defineProperty(C,"WillCreateFilesRequest",{enumerable:!0,get:function(){return ql.WillCreateFilesRequest}});Object.defineProperty(C,"DidRenameFilesNotification",{enumerable:!0,get:function(){return ql.DidRenameFilesNotification}});Object.defineProperty(C,"WillRenameFilesRequest",{enumerable:!0,get:function(){return ql.WillRenameFilesRequest}});Object.defineProperty(C,"DidDeleteFilesNotification",{enumerable:!0,get:function(){return ql.DidDeleteFilesNotification}});Object.defineProperty(C,"WillDeleteFilesRequest",{enumerable:!0,get:function(){return ql.WillDeleteFilesRequest}});var N0=mq();Object.defineProperty(C,"UniquenessLevel",{enumerable:!0,get:function(){return N0.UniquenessLevel}});Object.defineProperty(C,"MonikerKind",{enumerable:!0,get:function(){return N0.MonikerKind}});Object.defineProperty(C,"MonikerRequest",{enumerable:!0,get:function(){return N0.MonikerRequest}});var H0=bq();Object.defineProperty(C,"TypeHierarchyPrepareRequest",{enumerable:!0,get:function(){return H0.TypeHierarchyPrepareRequest}});Object.defineProperty(C,"TypeHierarchySubtypesRequest",{enumerable:!0,get:function(){return H0.TypeHierarchySubtypesRequest}});Object.defineProperty(C,"TypeHierarchySupertypesRequest",{enumerable:!0,get:function(){return H0.TypeHierarchySupertypesRequest}});var Eq=yq();Object.defineProperty(C,"InlineValueRequest",{enumerable:!0,get:function(){return Eq.InlineValueRequest}});Object.defineProperty(C,"InlineValueRefreshRequest",{enumerable:!0,get:function(){return Eq.InlineValueRefreshRequest}});var q0=vq();Object.defineProperty(C,"InlayHintRequest",{enumerable:!0,get:function(){return q0.InlayHintRequest}});Object.defineProperty(C,"InlayHintResolveRequest",{enumerable:!0,get:function(){return q0.InlayHintResolveRequest}});Object.defineProperty(C,"InlayHintRefreshRequest",{enumerable:!0,get:function(){return q0.InlayHintRefreshRequest}});var qg=xq();Object.defineProperty(C,"DiagnosticServerCancellationData",{enumerable:!0,get:function(){return qg.DiagnosticServerCancellationData}});Object.defineProperty(C,"DocumentDiagnosticReportKind",{enumerable:!0,get:function(){return qg.DocumentDiagnosticReportKind}});Object.defineProperty(C,"DocumentDiagnosticRequest",{enumerable:!0,get:function(){return qg.DocumentDiagnosticRequest}});Object.defineProperty(C,"WorkspaceDiagnosticRequest",{enumerable:!0,get:function(){return qg.WorkspaceDiagnosticRequest}});Object.defineProperty(C,"DiagnosticRefreshRequest",{enumerable:!0,get:function(){return qg.DiagnosticRefreshRequest}});var Eo=Dq();Object.defineProperty(C,"NotebookCellKind",{enumerable:!0,get:function(){return Eo.NotebookCellKind}});Object.defineProperty(C,"ExecutionSummary",{enumerable:!0,get:function(){return Eo.ExecutionSummary}});Object.defineProperty(C,"NotebookCell",{enumerable:!0,get:function(){return Eo.NotebookCell}});Object.defineProperty(C,"NotebookDocument",{enumerable:!0,get:function(){return Eo.NotebookDocument}});Object.defineProperty(C,"NotebookDocumentSyncRegistrationType",{enumerable:!0,get:function(){return Eo.NotebookDocumentSyncRegistrationType}});Object.defineProperty(C,"DidOpenNotebookDocumentNotification",{enumerable:!0,get:function(){return Eo.DidOpenNotebookDocumentNotification}});Object.defineProperty(C,"NotebookCellArrayChange",{enumerable:!0,get:function(){return Eo.NotebookCellArrayChange}});Object.defineProperty(C,"DidChangeNotebookDocumentNotification",{enumerable:!0,get:function(){return Eo.DidChangeNotebookDocumentNotification}});Object.defineProperty(C,"DidSaveNotebookDocumentNotification",{enumerable:!0,get:function(){return Eo.DidSaveNotebookDocumentNotification}});Object.defineProperty(C,"DidCloseNotebookDocumentNotification",{enumerable:!0,get:function(){return Eo.DidCloseNotebookDocumentNotification}});var Rq;(function(n){function e(t){let i=t;return Mi.string(i.language)||Mi.string(i.scheme)||Mi.string(i.pattern)}n.is=e})(Rq=C.TextDocumentFilter||(C.TextDocumentFilter={}));var _q;(function(n){function e(t){let i=t;return Mi.objectLiteral(i)&&(Mi.string(i.notebookType)||Mi.string(i.scheme)||Mi.string(i.pattern))}n.is=e})(_q=C.NotebookDocumentFilter||(C.NotebookDocumentFilter={}));var Lq;(function(n){function e(t){let i=t;return Mi.objectLiteral(i)&&(Mi.string(i.notebook)||_q.is(i.notebook))&&(i.language===void 0||Mi.string(i.language))}n.is=e})(Lq=C.NotebookCellTextDocumentFilter||(C.NotebookCellTextDocumentFilter={}));var Iq;(function(n){function e(t){if(!Array.isArray(t))return!1;for(let i of t)if(!Mi.string(i)&&!Rq.is(i)&&!Lq.is(i))return!1;return!0}n.is=e})(Iq=C.DocumentSelector||(C.DocumentSelector={}));var $de;(function(n){n.method="client/registerCapability",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolRequestType(n.method)})($de=C.RegistrationRequest||(C.RegistrationRequest={}));var Ude;(function(n){n.method="client/unregisterCapability",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolRequestType(n.method)})(Ude=C.UnregistrationRequest||(C.UnregistrationRequest={}));var Xde;(function(n){n.Create="create",n.Rename="rename",n.Delete="delete"})(Xde=C.ResourceOperationKind||(C.ResourceOperationKind={}));var Gde;(function(n){n.Abort="abort",n.Transactional="transactional",n.TextOnlyTransactional="textOnlyTransactional",n.Undo="undo"})(Gde=C.FailureHandlingKind||(C.FailureHandlingKind={}));var zde;(function(n){n.UTF8="utf-8",n.UTF16="utf-16",n.UTF32="utf-32"})(zde=C.PositionEncodingKind||(C.PositionEncodingKind={}));var Kde;(function(n){function e(t){let i=t;return i&&Mi.string(i.id)&&i.id.length>0}n.hasId=e})(Kde=C.StaticRegistrationOptions||(C.StaticRegistrationOptions={}));var Qde;(function(n){function e(t){let i=t;return i&&(i.documentSelector===null||Iq.is(i.documentSelector))}n.is=e})(Qde=C.TextDocumentRegistrationOptions||(C.TextDocumentRegistrationOptions={}));var Vde;(function(n){function e(i){let r=i;return Mi.objectLiteral(r)&&(r.workDoneProgress===void 0||Mi.boolean(r.workDoneProgress))}n.is=e;function t(i){let r=i;return r&&Mi.boolean(r.workDoneProgress)}n.hasWorkDoneProgress=t})(Vde=C.WorkDoneProgressOptions||(C.WorkDoneProgressOptions={}));var ege;(function(n){n.method="initialize",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(ege=C.InitializeRequest||(C.InitializeRequest={}));var tge;(function(n){n.unknownProtocolVersion=1})(tge=C.InitializeErrorCodes||(C.InitializeErrorCodes={}));var ige;(function(n){n.method="initialized",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType(n.method)})(ige=C.InitializedNotification||(C.InitializedNotification={}));var nge;(function(n){n.method="shutdown",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType0(n.method)})(nge=C.ShutdownRequest||(C.ShutdownRequest={}));var rge;(function(n){n.method="exit",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType0(n.method)})(rge=C.ExitNotification||(C.ExitNotification={}));var oge;(function(n){n.method="workspace/didChangeConfiguration",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType(n.method)})(oge=C.DidChangeConfigurationNotification||(C.DidChangeConfigurationNotification={}));var sge;(function(n){n.Error=1,n.Warning=2,n.Info=3,n.Log=4})(sge=C.MessageType||(C.MessageType={}));var age;(function(n){n.method="window/showMessage",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolNotificationType(n.method)})(age=C.ShowMessageNotification||(C.ShowMessageNotification={}));var lge;(function(n){n.method="window/showMessageRequest",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolRequestType(n.method)})(lge=C.ShowMessageRequest||(C.ShowMessageRequest={}));var uge;(function(n){n.method="window/logMessage",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolNotificationType(n.method)})(uge=C.LogMessageNotification||(C.LogMessageNotification={}));var cge;(function(n){n.method="telemetry/event",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolNotificationType(n.method)})(cge=C.TelemetryEventNotification||(C.TelemetryEventNotification={}));var hge;(function(n){n.None=0,n.Full=1,n.Incremental=2})(hge=C.TextDocumentSyncKind||(C.TextDocumentSyncKind={}));var dge;(function(n){n.method="textDocument/didOpen",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType(n.method)})(dge=C.DidOpenTextDocumentNotification||(C.DidOpenTextDocumentNotification={}));var gge;(function(n){function e(i){let r=i;return r!=null&&typeof r.text=="string"&&r.range!==void 0&&(r.rangeLength===void 0||typeof r.rangeLength=="number")}n.isIncremental=e;function t(i){let r=i;return r!=null&&typeof r.text=="string"&&r.range===void 0&&r.rangeLength===void 0}n.isFull=t})(gge=C.TextDocumentContentChangeEvent||(C.TextDocumentContentChangeEvent={}));var pge;(function(n){n.method="textDocument/didChange",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType(n.method)})(pge=C.DidChangeTextDocumentNotification||(C.DidChangeTextDocumentNotification={}));var fge;(function(n){n.method="textDocument/didClose",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType(n.method)})(fge=C.DidCloseTextDocumentNotification||(C.DidCloseTextDocumentNotification={}));var mge;(function(n){n.method="textDocument/didSave",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType(n.method)})(mge=C.DidSaveTextDocumentNotification||(C.DidSaveTextDocumentNotification={}));var bge;(function(n){n.Manual=1,n.AfterDelay=2,n.FocusOut=3})(bge=C.TextDocumentSaveReason||(C.TextDocumentSaveReason={}));var yge;(function(n){n.method="textDocument/willSave",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType(n.method)})(yge=C.WillSaveTextDocumentNotification||(C.WillSaveTextDocumentNotification={}));var vge;(function(n){n.method="textDocument/willSaveWaitUntil",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(vge=C.WillSaveTextDocumentWaitUntilRequest||(C.WillSaveTextDocumentWaitUntilRequest={}));var wge;(function(n){n.method="workspace/didChangeWatchedFiles",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolNotificationType(n.method)})(wge=C.DidChangeWatchedFilesNotification||(C.DidChangeWatchedFilesNotification={}));var xge;(function(n){n.Created=1,n.Changed=2,n.Deleted=3})(xge=C.FileChangeType||(C.FileChangeType={}));var Cge;(function(n){function e(t){let i=t;return Mi.objectLiteral(i)&&(Tq.URI.is(i.baseUri)||Tq.WorkspaceFolder.is(i.baseUri))&&Mi.string(i.pattern)}n.is=e})(Cge=C.RelativePattern||(C.RelativePattern={}));var Sge;(function(n){n.Create=1,n.Change=2,n.Delete=4})(Sge=C.WatchKind||(C.WatchKind={}));var Dge;(function(n){n.method="textDocument/publishDiagnostics",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolNotificationType(n.method)})(Dge=C.PublishDiagnosticsNotification||(C.PublishDiagnosticsNotification={}));var Tge;(function(n){n.Invoked=1,n.TriggerCharacter=2,n.TriggerForIncompleteCompletions=3})(Tge=C.CompletionTriggerKind||(C.CompletionTriggerKind={}));var kge;(function(n){n.method="textDocument/completion",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(kge=C.CompletionRequest||(C.CompletionRequest={}));var Pge;(function(n){n.method="completionItem/resolve",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Pge=C.CompletionResolveRequest||(C.CompletionResolveRequest={}));var Ege;(function(n){n.method="textDocument/hover",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Ege=C.HoverRequest||(C.HoverRequest={}));var Rge;(function(n){n.Invoked=1,n.TriggerCharacter=2,n.ContentChange=3})(Rge=C.SignatureHelpTriggerKind||(C.SignatureHelpTriggerKind={}));var _ge;(function(n){n.method="textDocument/signatureHelp",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(_ge=C.SignatureHelpRequest||(C.SignatureHelpRequest={}));var Lge;(function(n){n.method="textDocument/definition",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Lge=C.DefinitionRequest||(C.DefinitionRequest={}));var Ige;(function(n){n.method="textDocument/references",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Ige=C.ReferencesRequest||(C.ReferencesRequest={}));var Fge;(function(n){n.method="textDocument/documentHighlight",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Fge=C.DocumentHighlightRequest||(C.DocumentHighlightRequest={}));var jge;(function(n){n.method="textDocument/documentSymbol",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(jge=C.DocumentSymbolRequest||(C.DocumentSymbolRequest={}));var Mge;(function(n){n.method="textDocument/codeAction",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Mge=C.CodeActionRequest||(C.CodeActionRequest={}));var Oge;(function(n){n.method="codeAction/resolve",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Oge=C.CodeActionResolveRequest||(C.CodeActionResolveRequest={}));var Age;(function(n){n.method="workspace/symbol",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Age=C.WorkspaceSymbolRequest||(C.WorkspaceSymbolRequest={}));var Nge;(function(n){n.method="workspaceSymbol/resolve",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Nge=C.WorkspaceSymbolResolveRequest||(C.WorkspaceSymbolResolveRequest={}));var Hge;(function(n){n.method="textDocument/codeLens",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Hge=C.CodeLensRequest||(C.CodeLensRequest={}));var qge;(function(n){n.method="codeLens/resolve",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(qge=C.CodeLensResolveRequest||(C.CodeLensResolveRequest={}));var Bge;(function(n){n.method="workspace/codeLens/refresh",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolRequestType0(n.method)})(Bge=C.CodeLensRefreshRequest||(C.CodeLensRefreshRequest={}));var Wge;(function(n){n.method="textDocument/documentLink",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Wge=C.DocumentLinkRequest||(C.DocumentLinkRequest={}));var Yge;(function(n){n.method="documentLink/resolve",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Yge=C.DocumentLinkResolveRequest||(C.DocumentLinkResolveRequest={}));var Zge;(function(n){n.method="textDocument/formatting",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Zge=C.DocumentFormattingRequest||(C.DocumentFormattingRequest={}));var Jge;(function(n){n.method="textDocument/rangeFormatting",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Jge=C.DocumentRangeFormattingRequest||(C.DocumentRangeFormattingRequest={}));var $ge;(function(n){n.method="textDocument/onTypeFormatting",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})($ge=C.DocumentOnTypeFormattingRequest||(C.DocumentOnTypeFormattingRequest={}));var Uge;(function(n){n.Identifier=1})(Uge=C.PrepareSupportDefaultBehavior||(C.PrepareSupportDefaultBehavior={}));var Xge;(function(n){n.method="textDocument/rename",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Xge=C.RenameRequest||(C.RenameRequest={}));var Gge;(function(n){n.method="textDocument/prepareRename",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(Gge=C.PrepareRenameRequest||(C.PrepareRenameRequest={}));var zge;(function(n){n.method="workspace/executeCommand",n.messageDirection=ee.MessageDirection.clientToServer,n.type=new ee.ProtocolRequestType(n.method)})(zge=C.ExecuteCommandRequest||(C.ExecuteCommandRequest={}));var Kge;(function(n){n.method="workspace/applyEdit",n.messageDirection=ee.MessageDirection.serverToClient,n.type=new ee.ProtocolRequestType("workspace/applyEdit")})(Kge=C.ApplyWorkspaceEditRequest||(C.ApplyWorkspaceEditRequest={}))});var Mq=y(ew=>{"use strict";Object.defineProperty(ew,"__esModule",{value:!0});ew.createProtocolConnection=void 0;var jq=Al();function Qge(n,e,t,i){return jq.ConnectionStrategy.is(i)&&(i={connectionStrategy:i}),(0,jq.createMessageConnection)(n,e,t,i)}ew.createProtocolConnection=Qge});var Oq=y(hn=>{"use strict";var Vge=hn&&hn.__createBinding||(Object.create?function(n,e,t,i){i===void 0&&(i=t);var r=Object.getOwnPropertyDescriptor(e,t);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(n,i,r)}:function(n,e,t,i){i===void 0&&(i=t),n[i]=e[t]}),tw=hn&&hn.__exportStar||function(n,e){for(var t in n)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&Vge(e,n,t)};Object.defineProperty(hn,"__esModule",{value:!0});hn.LSPErrorCodes=hn.createProtocolConnection=void 0;tw(Al(),hn);tw((Kn(),Co(Uv)),hn);tw(Ot(),hn);tw(Fq(),hn);var epe=Mq();Object.defineProperty(hn,"createProtocolConnection",{enumerable:!0,get:function(){return epe.createProtocolConnection}});var tpe;(function(n){n.lspReservedErrorRangeStart=-32899,n.RequestFailed=-32803,n.ServerCancelled=-32802,n.ContentModified=-32801,n.RequestCancelled=-32800,n.lspReservedErrorRangeEnd=-32800})(tpe=hn.LSPErrorCodes||(hn.LSPErrorCodes={}))});var W=y(Ro=>{"use strict";var ipe=Ro&&Ro.__createBinding||(Object.create?function(n,e,t,i){i===void 0&&(i=t);var r=Object.getOwnPropertyDescriptor(e,t);(!r||("get"in r?!e.__esModule:r.writable||r.configurable))&&(r={enumerable:!0,get:function(){return e[t]}}),Object.defineProperty(n,i,r)}:function(n,e,t,i){i===void 0&&(i=t),n[i]=e[t]}),Aq=Ro&&Ro.__exportStar||function(n,e){for(var t in n)t!=="default"&&!Object.prototype.hasOwnProperty.call(e,t)&&ipe(e,n,t)};Object.defineProperty(Ro,"__esModule",{value:!0});Ro.createProtocolConnection=void 0;var npe=AP();Aq(AP(),Ro);Aq(Oq(),Ro);function rpe(n,e,t,i){return(0,npe.createMessageConnection)(n,e,t,i)}Ro.createProtocolConnection=rpe});var Pn=y((QEe,Nq)=>{function B0(n,e,t){var i,r,o,s,a;e==null&&(e=100);function l(){var c=Date.now()-s;c=0?i=setTimeout(l,e-c):(i=null,t||(a=n.apply(o,r),o=r=null))}var u=function(){o=this,r=arguments,s=Date.now();var c=t&&!i;return i||(i=setTimeout(l,e)),c&&(a=n.apply(o,r),o=r=null),a};return u.clear=function(){i&&(clearTimeout(i),i=null)},u.flush=function(){i&&(a=n.apply(o,r),o=r=null,clearTimeout(i),i=null)},u}B0.debounce=B0;Nq.exports=B0});var Hq,j,VEe,Pe=k(()=>{Hq=(()=>{"use strict";var n={470:i=>{function r(a){if(typeof a!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(a))}function o(a,l){for(var u,c="",h=0,d=-1,g=0,p=0;p<=a.length;++p){if(p2){var f=c.lastIndexOf("/");if(f!==c.length-1){f===-1?(c="",h=0):h=(c=c.slice(0,f)).length-1-c.lastIndexOf("/"),d=p,g=0;continue}}else if(c.length===2||c.length===1){c="",h=0,d=p,g=0;continue}}l&&(c.length>0?c+="/..":c="..",h=2)}else c.length>0?c+="/"+a.slice(d+1,p):c=a.slice(d+1,p),h=p-d-1;d=p,g=0}else u===46&&g!==-1?++g:g=-1}return c}var s={resolve:function(){for(var a,l="",u=!1,c=arguments.length-1;c>=-1&&!u;c--){var h;c>=0?h=arguments[c]:(a===void 0&&(a=process.cwd()),h=a),r(h),h.length!==0&&(l=h+"/"+l,u=h.charCodeAt(0)===47)}return l=o(l,!u),u?l.length>0?"/"+l:"/":l.length>0?l:"."},normalize:function(a){if(r(a),a.length===0)return".";var l=a.charCodeAt(0)===47,u=a.charCodeAt(a.length-1)===47;return(a=o(a,!l)).length!==0||l||(a="."),a.length>0&&u&&(a+="/"),l?"/"+a:a},isAbsolute:function(a){return r(a),a.length>0&&a.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var a,l=0;l0&&(a===void 0?a=u:a+="/"+u)}return a===void 0?".":s.normalize(a)},relative:function(a,l){if(r(a),r(l),a===l||(a=s.resolve(a))===(l=s.resolve(l)))return"";for(var u=1;up){if(l.charCodeAt(d+m)===47)return l.slice(d+m+1);if(m===0)return l.slice(d+m)}else h>p&&(a.charCodeAt(u+m)===47?f=m:m===0&&(f=0));break}var b=a.charCodeAt(u+m);if(b!==l.charCodeAt(d+m))break;b===47&&(f=m)}var w="";for(m=u+f+1;m<=c;++m)m!==c&&a.charCodeAt(m)!==47||(w.length===0?w+="..":w+="/..");return w.length>0?w+l.slice(d+f):(d+=f,l.charCodeAt(d)===47&&++d,l.slice(d))},_makeLong:function(a){return a},dirname:function(a){if(r(a),a.length===0)return".";for(var l=a.charCodeAt(0),u=l===47,c=-1,h=!0,d=a.length-1;d>=1;--d)if((l=a.charCodeAt(d))===47){if(!h){c=d;break}}else h=!1;return c===-1?u?"/":".":u&&c===1?"//":a.slice(0,c)},basename:function(a,l){if(l!==void 0&&typeof l!="string")throw new TypeError('"ext" argument must be a string');r(a);var u,c=0,h=-1,d=!0;if(l!==void 0&&l.length>0&&l.length<=a.length){if(l.length===a.length&&l===a)return"";var g=l.length-1,p=-1;for(u=a.length-1;u>=0;--u){var f=a.charCodeAt(u);if(f===47){if(!d){c=u+1;break}}else p===-1&&(d=!1,p=u+1),g>=0&&(f===l.charCodeAt(g)?--g==-1&&(h=u):(g=-1,h=p))}return c===h?h=p:h===-1&&(h=a.length),a.slice(c,h)}for(u=a.length-1;u>=0;--u)if(a.charCodeAt(u)===47){if(!d){c=u+1;break}}else h===-1&&(d=!1,h=u+1);return h===-1?"":a.slice(c,h)},extname:function(a){r(a);for(var l=-1,u=0,c=-1,h=!0,d=0,g=a.length-1;g>=0;--g){var p=a.charCodeAt(g);if(p!==47)c===-1&&(h=!1,c=g+1),p===46?l===-1?l=g:d!==1&&(d=1):l!==-1&&(d=-1);else if(!h){u=g+1;break}}return l===-1||c===-1||d===0||d===1&&l===c-1&&l===u+1?"":a.slice(l,c)},format:function(a){if(a===null||typeof a!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof a);return function(l,u){var c=u.dir||u.root,h=u.base||(u.name||"")+(u.ext||"");return c?c===u.root?c+h:c+"/"+h:h}(0,a)},parse:function(a){r(a);var l={root:"",dir:"",base:"",ext:"",name:""};if(a.length===0)return l;var u,c=a.charCodeAt(0),h=c===47;h?(l.root="/",u=1):u=0;for(var d=-1,g=0,p=-1,f=!0,m=a.length-1,b=0;m>=u;--m)if((c=a.charCodeAt(m))!==47)p===-1&&(f=!1,p=m+1),c===46?d===-1?d=m:b!==1&&(b=1):d!==-1&&(b=-1);else if(!f){g=m+1;break}return d===-1||p===-1||b===0||b===1&&d===p-1&&d===g+1?p!==-1&&(l.base=l.name=g===0&&h?a.slice(1,p):a.slice(g,p)):(g===0&&h?(l.name=a.slice(1,d),l.base=a.slice(1,p)):(l.name=a.slice(g,d),l.base=a.slice(g,p)),l.ext=a.slice(d,p)),g>0?l.dir=a.slice(0,g-1):h&&(l.dir="/"),l},sep:"/",delimiter:":",win32:null,posix:null};s.posix=s,i.exports=s},447:(i,r,o)=>{var s;if(o.r(r),o.d(r,{URI:()=>w,Utils:()=>Z}),typeof process=="object")s=process.platform==="win32";else if(typeof navigator=="object"){var a=navigator.userAgent;s=a.indexOf("Windows")>=0}var l,u,c=(l=function($,B){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(G,V){G.__proto__=V}||function(G,V){for(var Re in V)Object.prototype.hasOwnProperty.call(V,Re)&&(G[Re]=V[Re])})($,B)},function($,B){if(typeof B!="function"&&B!==null)throw new TypeError("Class extends value "+String(B)+" is not a constructor or null");function G(){this.constructor=$}l($,B),$.prototype=B===null?Object.create(B):(G.prototype=B.prototype,new G)}),h=/^\w[\w\d+.-]*$/,d=/^\//,g=/^\/\//;function p($,B){if(!$.scheme&&B)throw new Error('[UriError]: Scheme is missing: {scheme: "", authority: "'.concat($.authority,'", path: "').concat($.path,'", query: "').concat($.query,'", fragment: "').concat($.fragment,'"}'));if($.scheme&&!h.test($.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if($.path){if($.authority){if(!d.test($.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(g.test($.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}var f="",m="/",b=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/,w=function(){function $(B,G,V,Re,Ee,Xe){Xe===void 0&&(Xe=!1),typeof B=="object"?(this.scheme=B.scheme||f,this.authority=B.authority||f,this.path=B.path||f,this.query=B.query||f,this.fragment=B.fragment||f):(this.scheme=function(Zn,Wi){return Zn||Wi?Zn:"file"}(B,Xe),this.authority=G||f,this.path=function(Zn,Wi){switch(Zn){case"https":case"http":case"file":Wi?Wi[0]!==m&&(Wi=m+Wi):Wi=m}return Wi}(this.scheme,V||f),this.query=Re||f,this.fragment=Ee||f,p(this,Xe))}return $.isUri=function(B){return B instanceof $||!!B&&typeof B.authority=="string"&&typeof B.fragment=="string"&&typeof B.path=="string"&&typeof B.query=="string"&&typeof B.scheme=="string"&&typeof B.fsPath=="string"&&typeof B.with=="function"&&typeof B.toString=="function"},Object.defineProperty($.prototype,"fsPath",{get:function(){return J(this,!1)},enumerable:!1,configurable:!0}),$.prototype.with=function(B){if(!B)return this;var G=B.scheme,V=B.authority,Re=B.path,Ee=B.query,Xe=B.fragment;return G===void 0?G=this.scheme:G===null&&(G=f),V===void 0?V=this.authority:V===null&&(V=f),Re===void 0?Re=this.path:Re===null&&(Re=f),Ee===void 0?Ee=this.query:Ee===null&&(Ee=f),Xe===void 0?Xe=this.fragment:Xe===null&&(Xe=f),G===this.scheme&&V===this.authority&&Re===this.path&&Ee===this.query&&Xe===this.fragment?this:new T(G,V,Re,Ee,Xe)},$.parse=function(B,G){G===void 0&&(G=!1);var V=b.exec(B);return V?new T(V[2]||f,O(V[4]||f),O(V[5]||f),O(V[7]||f),O(V[9]||f),G):new T(f,f,f,f,f)},$.file=function(B){var G=f;if(s&&(B=B.replace(/\\/g,m)),B[0]===m&&B[1]===m){var V=B.indexOf(m,2);V===-1?(G=B.substring(2),B=m):(G=B.substring(2,V),B=B.substring(V)||m)}return new T("file",G,B,f,f)},$.from=function(B){var G=new T(B.scheme,B.authority,B.path,B.query,B.fragment);return p(G,!0),G},$.prototype.toString=function(B){return B===void 0&&(B=!1),H(this,B)},$.prototype.toJSON=function(){return this},$.revive=function(B){if(B){if(B instanceof $)return B;var G=new T(B);return G._formatted=B.external,G._fsPath=B._sep===x?B.fsPath:null,G}return B},$}(),x=s?1:void 0,T=function($){function B(){var G=$!==null&&$.apply(this,arguments)||this;return G._formatted=null,G._fsPath=null,G}return c(B,$),Object.defineProperty(B.prototype,"fsPath",{get:function(){return this._fsPath||(this._fsPath=J(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),B.prototype.toString=function(G){return G===void 0&&(G=!1),G?H(this,!0):(this._formatted||(this._formatted=H(this,!1)),this._formatted)},B.prototype.toJSON=function(){var G={$mid:1};return this._fsPath&&(G.fsPath=this._fsPath,G._sep=x),this._formatted&&(G.external=this._formatted),this.path&&(G.path=this.path),this.scheme&&(G.scheme=this.scheme),this.authority&&(G.authority=this.authority),this.query&&(G.query=this.query),this.fragment&&(G.fragment=this.fragment),G},B}(w),R=((u={})[58]="%3A",u[47]="%2F",u[63]="%3F",u[35]="%23",u[91]="%5B",u[93]="%5D",u[64]="%40",u[33]="%21",u[36]="%24",u[38]="%26",u[39]="%27",u[40]="%28",u[41]="%29",u[42]="%2A",u[43]="%2B",u[44]="%2C",u[59]="%3B",u[61]="%3D",u[32]="%20",u);function F($,B){for(var G=void 0,V=-1,Re=0;Re<$.length;Re++){var Ee=$.charCodeAt(Re);if(Ee>=97&&Ee<=122||Ee>=65&&Ee<=90||Ee>=48&&Ee<=57||Ee===45||Ee===46||Ee===95||Ee===126||B&&Ee===47)V!==-1&&(G+=encodeURIComponent($.substring(V,Re)),V=-1),G!==void 0&&(G+=$.charAt(Re));else{G===void 0&&(G=$.substr(0,Re));var Xe=R[Ee];Xe!==void 0?(V!==-1&&(G+=encodeURIComponent($.substring(V,Re)),V=-1),G+=Xe):V===-1&&(V=Re)}}return V!==-1&&(G+=encodeURIComponent($.substring(V))),G!==void 0?G:$}function N($){for(var B=void 0,G=0;G<$.length;G++){var V=$.charCodeAt(G);V===35||V===63?(B===void 0&&(B=$.substr(0,G)),B+=R[V]):B!==void 0&&(B+=$[G])}return B!==void 0?B:$}function J($,B){var G;return G=$.authority&&$.path.length>1&&$.scheme==="file"?"//".concat($.authority).concat($.path):$.path.charCodeAt(0)===47&&($.path.charCodeAt(1)>=65&&$.path.charCodeAt(1)<=90||$.path.charCodeAt(1)>=97&&$.path.charCodeAt(1)<=122)&&$.path.charCodeAt(2)===58?B?$.path.substr(1):$.path[1].toLowerCase()+$.path.substr(2):$.path,s&&(G=G.replace(/\//g,"\\")),G}function H($,B){var G=B?N:F,V="",Re=$.scheme,Ee=$.authority,Xe=$.path,Zn=$.query,Wi=$.fragment;if(Re&&(V+=Re,V+=":"),(Ee||Re==="file")&&(V+=m,V+=m),Ee){var Yi=Ee.indexOf("@");if(Yi!==-1){var Ar=Ee.substr(0,Yi);Ee=Ee.substr(Yi+1),(Yi=Ar.indexOf(":"))===-1?V+=G(Ar,!1):(V+=G(Ar.substr(0,Yi),!1),V+=":",V+=G(Ar.substr(Yi+1),!1)),V+="@"}(Yi=(Ee=Ee.toLowerCase()).indexOf(":"))===-1?V+=G(Ee,!1):(V+=G(Ee.substr(0,Yi),!1),V+=Ee.substr(Yi))}if(Xe){if(Xe.length>=3&&Xe.charCodeAt(0)===47&&Xe.charCodeAt(2)===58)(Le=Xe.charCodeAt(1))>=65&&Le<=90&&(Xe="/".concat(String.fromCharCode(Le+32),":").concat(Xe.substr(3)));else if(Xe.length>=2&&Xe.charCodeAt(1)===58){var Le;(Le=Xe.charCodeAt(0))>=65&&Le<=90&&(Xe="".concat(String.fromCharCode(Le+32),":").concat(Xe.substr(2)))}V+=G(Xe,!0)}return Zn&&(V+="?",V+=G(Zn,!1)),Wi&&(V+="#",V+=B?Wi:F(Wi,!1)),V}function M($){try{return decodeURIComponent($)}catch{return $.length>3?$.substr(0,3)+M($.substr(3)):$}}var L=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function O($){return $.match(L)?$.replace(L,function(B){return M(B)}):$}var Z,ne=o(470),be=function($,B,G){if(G||arguments.length===2)for(var V,Re=0,Ee=B.length;Re{for(var o in r)t.o(r,o)&&!t.o(i,o)&&Object.defineProperty(i,o,{enumerable:!0,get:r[o]})},t.o=(i,r)=>Object.prototype.hasOwnProperty.call(i,r),t.r=i=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(i,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(i,"__esModule",{value:!0})},t(447)})();({URI:j,Utils:VEe}=Hq)});var Zq=y((tRe,Yq)=>{Yq.exports=Wq;Wq.sync=spe;var qq=require("fs");function ope(n,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{Xq.exports=$q;$q.sync=ape;var Jq=require("fs");function $q(n,e,t){Jq.stat(n,function(i,r){t(i,i?!1:Uq(r,e))})}function ape(n,e){return Uq(Jq.statSync(n),e)}function Uq(n,e){return n.isFile()&&lpe(n,e)}function lpe(n,e){var t=n.mode,i=n.uid,r=n.gid,o=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),s=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),u=parseInt("001",8),c=a|l,h=t&u||t&l&&r===s||t&a&&i===o||t&c&&o===0;return h}});var Kq=y((rRe,zq)=>{var nRe=require("fs"),iw;process.platform==="win32"||global.TESTING_WINDOWS?iw=Zq():iw=Gq();zq.exports=W0;W0.sync=upe;function W0(n,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,r){W0(n,e||{},function(o,s){o?r(o):i(s)})})}iw(n,e||{},function(i,r){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,r=!1),t(i,r)})}function upe(n,e){try{return iw.sync(n,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var Bg=y((oRe,nB)=>{var Zc=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",Qq=require("path"),cpe=Zc?";":":",Vq=Kq(),eB=n=>Object.assign(new Error(`not found: ${n}`),{code:"ENOENT"}),tB=(n,e)=>{let t=e.colon||cpe,i=n.match(/\//)||Zc&&n.match(/\\/)?[""]:[...Zc?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],r=Zc?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",o=Zc?r.split(t):[""];return Zc&&n.indexOf(".")!==-1&&o[0]!==""&&o.unshift(""),{pathEnv:i,pathExt:o,pathExtExe:r}},iB=(n,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:r,pathExtExe:o}=tB(n,e),s=[],a=u=>new Promise((c,h)=>{if(u===i.length)return e.all&&s.length?c(s):h(eB(n));let d=i[u],g=/^".*"$/.test(d)?d.slice(1,-1):d,p=Qq.join(g,n),f=!g&&/^\.[\\\/]/.test(n)?n.slice(0,2)+p:p;c(l(f,u,0))}),l=(u,c,h)=>new Promise((d,g)=>{if(h===r.length)return d(a(c+1));let p=r[h];Vq(u+p,{pathExt:o},(f,m)=>{if(!f&&m)if(e.all)s.push(u+p);else return d(u+p);return d(l(u,c,h+1))})});return t?a(0).then(u=>t(null,u),t):a(0)},hpe=(n,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:r}=tB(n,e),o=[];for(let s=0;s{"use strict";rB=require("url")});var us={};Go(us,{OS:()=>wpe,OperatingSystem:()=>sB,Platform:()=>oB,globals:()=>vpe,isLinux:()=>ppe,isMacintosh:()=>Jc,isNative:()=>fpe,isWeb:()=>mpe,isWindows:()=>En,language:()=>gpe,platform:()=>bpe});var sw,aw,Z0,J0,dpe,gpe,oB,ow,En,Jc,ppe,fpe,mpe,bpe,ype,vpe,sB,wpe,$c=k(()=>{"use strict";sw=!1,aw=!1,Z0=!1,J0=!1,dpe=!1,gpe="en";typeof process=="object"&&typeof process.nextTick=="function"&&typeof process.platform=="string"&&(sw=process.platform==="win32",aw=process.platform==="darwin",Z0=process.platform==="linux",J0=!0);oB=(r=>(r[r.Web=0]="Web",r[r.Mac=1]="Mac",r[r.Linux=2]="Linux",r[r.Windows=3]="Windows",r))(oB||{}),ow=0;J0&&(aw?ow=1:sw?ow=3:Z0&&(ow=2));En=sw,Jc=aw,ppe=Z0,fpe=J0,mpe=dpe,bpe=ow,ype=typeof self=="object"?self:typeof global=="object"?global:{},vpe=ype,sB=(i=>(i[i.Windows=1]="Windows",i[i.Macintosh=2]="Macintosh",i[i.Linux=3]="Linux",i))(sB||{}),wpe=aw?2:sw?1:3});function Wg(n){return!!(Bl.MarkupContent.is(n)&&n.kind==Bl.MarkupKind.Markdown)}function Nt(n){return n<=0?Promise.resolve(void 0):new Promise(e=>{setTimeout(()=>{e(void 0)},n)})}function hB(n){return new Promise(e=>{process.nextTick(()=>{n&&n(),e(void 0)})})}function wr(){return new Promise(n=>{setImmediate(()=>{n(void 0)})})}function dB(n,e,t,i){return n?$0.default.isAbsolute(n)?j.file(i?n:$0.default.normalize(n)).toString():nw(n)?j.parse(n).toString():t!=""?`${t}:${e}`:`unknown:${e}`:`untitled:${e}`}function U(n){for(;n.length;){let e=n.pop();e&&e.dispose()}}function Wl(n){try{cB.default.sync(n)}catch{return!1}return!0}function _o(n,e={},t){return En||(e.shell=e.shell||process.env.SHELL),e.maxBuffer=500*1024,new Promise((i,r)=>{let o,s;t&&(o=setTimeout(()=>{s.kill("SIGKILL"),r(new Error(`timeout after ${t}s`))},t*1e3)),s=(0,aB.exec)(n,e,(a,l,u)=>{if(o&&clearTimeout(o),a){r(new Error(`exited with ${a.code} -${a} -${u}`));return}i(l)})})}function Xc(n,e,t=!1){let i=(0,lB.default)(e,100);try{let r=uB.default.watch(n,{persistent:!0,recursive:!1,encoding:"utf8"},()=>{i()});return t&&setTimeout(e,10),Bl.Disposable.create(()=>{i.clear(),r.close()})}catch{return Bl.Disposable.create(()=>{i.clear()})}}function gB(n){try{return process.kill(n,0)==!0}catch(e){return e.code==="EPERM"}}function U0(n){return n=="n"||n=="o"||n=="x"||n=="v"?"":n=="i"?"":n=="s"?"":""}function lw(n,e){let t,i=r=>{t&&clearTimeout(t),t=setTimeout(()=>{n()},r??e)};return Object.defineProperty(i,"clear",{get:()=>()=>{t&&clearTimeout(t)}}),i}function Yg(n,e,t=3){if(n.length==0)return Promise.resolve();let i=0,r=n.length,o=n.slice();return new Promise(s=>{let a=l=>{let u=()=>{if(i=i+1,i==r)s();else if(o.length){let c=o.shift();a(c)}};e(l).then(u,u)};for(let l=0;l{"use strict";aB=require("child_process"),lB=S(Pn()),uB=S(require("fs")),$0=S(require("path")),Bl=S(W());Pe();cB=S(Bg());wi();$c();cRe=q()("util-index"),Uc="coc-settings.json"});function pB(n){return n instanceof ii?!0:n instanceof Error&&n.name===X0&&n.message===X0}function G0(n){return n?new Error(`Illegal argument: ${n}`):new Error("Illegal argument")}function z0(n){return new Error(`File ${n} already exists`)}function uw(n){return new Error(`File ${n} not exists`)}function fB(n){return new Error(`${n} should not be called in an asynchronize manner`)}function cw(n){return new Error(`Change of ${n} not supported`)}var X0,ii,xr=k(()=>{"use strict";X0="Canceled",ii=class extends Error{constructor(){super(X0),this.name=this.message}}});function mB(n){let e={};return Object.entries(n).forEach(([t,i])=>{i!==void 0&&(e[t]=i)}),e}function bB(n){let e={};for(let t of Object.keys(n))Object.defineProperty(e,t,{value:n[t],writable:!1,enumerable:!0});return e}function Rn(n){if(!n||typeof n!="object"||n instanceof RegExp)return n;let e=Array.isArray(n)?[]:{};return Object.keys(n).forEach(t=>{n[t]&&typeof n[t]=="object"?e[t]=Rn(n[t]):e[t]=n[t]}),e}function Qr(n,e){return yB.call(n,e)}function hw(n){if(!n||typeof n!="object")return n;let e=[n];for(;e.length>0;){let t=e.shift();Object.freeze(t);for(let i in t)if(yB.call(t,i)){let r=t[i];typeof r=="object"&&!Object.isFrozen(r)&&e.push(r)}}return n}function K0(n,e,t=!0){return hi(n)?(hi(e)&&Object.keys(e).forEach(i=>{i in n?t&&(hi(n[i])&&hi(e[i])?K0(n[i],e[i],t):n[i]=e[i]):n[i]=e[i]}),n):e}function ye(n,e){if(n===e)return!0;if(n==null||e===null||e===void 0||typeof n!=typeof e||typeof n!="object"||Array.isArray(n)!==Array.isArray(e))return!1;let t,i;if(Array.isArray(n)){if(n.length!==e.length)return!1;for(t=0;t{"use strict";wi();yB=Object.prototype.hasOwnProperty});function vB(n){return n>=97&&n<=122?1:n>=65&&n<=90?2:0}function xB(n,e){let t=e==0?0:vB(n[e-1]);for(let i=e;i0&&r!=t)return[i,n[i]];t=r}}function CB(n,e){let t=[];for(let i=0;i0?n[0].toUpperCase()+n.slice(1):""}function _t(n,e){return Buffer.byteLength(n.slice(0,e),"utf8")}function Gi(n,e){if(e==0)return 0;let t=0,i=0;for(let r of n){let o=r.codePointAt(0);if(o>=wB?(t+=2,i+=4):(t+=1,i+=Dpe(o)),i>=e)break}return t}function Dpe(n){return n128?!1:!!(e==95||e>=48&&e<=57||Q0(e))}function Q0(n){return n>=65&&n<=90||n>=97&&n<=122}function DB(n,e){return e&&n.endsWith(` -`)?n.slice(0,-1).split(` -`):n.split(` -`)}function TB(n){for(let e=0,t=n.length;e=65&&i<=90)return!0}return!1}function Tpe(n,e){if(n===e)return!0;let t=e.charCodeAt(0);return t>=65&&t<=90&&t+32===n.charCodeAt(0)}function kB(n,e){if(n.length>e.length)return-1;if(n.length===0)return 0;if(!TB(n))return e.toLowerCase().indexOf(n);let t=n.length,i=0;for(let r=0;r0&&(r=r-i,i=0)}return-1}var Cpe,Spe,wB,_e=k(()=>{"use strict";Cpe=128,Spe=2048,wB=65536});function Ppe(n){var e;return!!(n instanceof ii||n instanceof Error&&((e=n.message)==null?void 0:e.includes("transport disconnected")))}var Gc,PB,kpe,V0,P,fe=k(()=>{"use strict";Gc=S(W());re();xr();wi();et();_e();PB=q()("events"),kpe=["BufWritePre"],V0=class{constructor(){this.handlers=new Map;this._recentInserts=[];this._lastChange=0;this._insertMode=!1;this._pumAlignTop=!1;this._pumVisible=!1;this._completing=!1;this._requesting=!1;this.timeout=1e3}set requesting(e){this._requesting=e}get requesting(){return this._requesting}set completing(e){this._completing=e,this._pumVisible=e}get completing(){return this._completing}get cursor(){return this._cursor??{bufnr:this._bufnr,col:1,lnum:1,insert:!1}}get bufnr(){return this._bufnr}get pumvisible(){return this._pumVisible}get pumAlignTop(){return this._pumAlignTop}get insertMode(){return this._insertMode}get lastChangeTs(){return this._lastChange}race(e,t){let i=[];return new Promise(r=>{if(typeof t=="number"){let o=setTimeout(()=>{U(i),r(void 0)},t);i.push(Gc.Disposable.create(()=>{clearTimeout(o)}))}else Gc.CancellationToken.is(t)&&t.onCancellationRequested(()=>{U(i),r(void 0)},null,i);e.forEach(o=>{this.on(o,(...s)=>{U(i),r({name:o,args:s})},null,i)})})}async fire(e,t){let i=this.handlers.get(e);if(e=="InsertEnter")this._insertMode=!0;else if(e=="InsertLeave")this._insertMode=!1,this._pumVisible=!1,this._recentInserts=[];else if(e=="CursorHoldI"||e=="CursorMovedI")this._bufnr=t[0],this._insertMode||(this._insertMode=!0,this.fire("InsertEnter",[t[0]]));else if(e=="CursorHold"||e=="CursorMoved")this._bufnr=t[0],this._insertMode&&(this._insertMode=!1,this.fire("InsertLeave",[t[0]]));else if(e=="MenuPopupChanged")this._pumVisible=!0,this._pumAlignTop=t[1]>t[0].row;else if(e=="InsertCharPre")this._recentInserts.push([t[1],t[0]]);else if(e=="TextChanged")this._lastChange=Date.now();else if(e=="BufEnter")this._bufnr=t[0];else if(e=="TextChangedI"||e=="TextChangedP"){let r=this._recentInserts.filter(a=>a[0]==t[0]);this._bufnr=t[0],this._recentInserts=[],this._lastChange=Date.now();let o=t[1],s=tt(o.line??"",0,o.col-1);if(o.pre=s,this._cursor=Object.freeze({bufnr:t[0],lnum:o.lnum,col:o.col,insert:!0}),r.length&&s.length){let a=s.slice(-1);r.findIndex(l=>l[1]==a)!==-1&&(o.insertChar=a,process.nextTick(()=>{this.fire("TextInsert",[...t,a])}))}}if(e=="CursorMoved"||e=="CursorMovedI"){t.push(this._recentInserts.length>0);let r={bufnr:t[0],lnum:t[1][0],col:t[1][1],insert:e=="CursorMovedI"};if(this._cursor&&ye(this._cursor,r))return;this._cursor=Object.freeze(r)}if(i!=null&&i.length){let r=i.slice(),o=kpe.includes(e);t.forEach(s=>{hi(s)&&bB(s)}),await Promise.allSettled(r.map(s=>(async()=>{let l;o&&(l=setTimeout(()=>{console.error(`Slow "${e}" handler detected`,s.stack),PB.error(`Slow "${e}" handler detected`,s.stack)},this.timeout));try{await s(t)}catch(u){Ppe(u)||PB.error(`Error on event: ${e}`,u instanceof Error?u.stack:u)}clearTimeout(l)})()))}}on(e,t,i,r){if(Array.isArray(e)){let o=r||[];for(let s of e)this.on(s,t,i,o);return Gc.Disposable.create(()=>{U(o)})}else{let o=this.handlers.get(e)||[],s=l=>new Promise((u,c)=>{try{Promise.resolve(t.apply(i??null,l)).then(()=>{u(void 0)},h=>{c(h)})}catch(h){c(h)}});Error.captureStackTrace(s),o.push(s),this.handlers.set(e,o);let a=Gc.Disposable.create(()=>{let l=o.indexOf(s);l!==-1&&o.splice(l,1)});return Array.isArray(r)&&r.push(a),a}}};P=new V0});function dw(n){return Array.isArray(n)?n:n==null?[]:[n]}function Je(n){return!Array.isArray(n)||n.length===0}function Epe(n,e){return ne[1]?-1:0}function eE(n,e){let t=0,i=e.length-1;for(;t<=i;){let r=(t+i)/2|0,o=Epe(n,e[r]);if(o<0)t=r+1;else if(o>0)i=r-1;else return!0}return!1}function EB(n,e,t){return Rpe(n.length,i=>t(n[i],e))}function Rpe(n,e){let t=0,i=n-1;for(;t<=i;){let r=(t+i)/2|0,o=e(r);if(o<0)t=r+1;else if(o>0)i=r-1;else return r}return-(t+1)}function Zg(n,e){for(let t of e)if(n.includes(t))return!0;return!1}function RB(n,e,t=0){let i=-1;for(let r=t;r{e(i)?t[0].push(i):t[1].push(i)}),t}function Ai(n,e){if(!e)return n.filter((i,r)=>n.indexOf(i)===r);let t=Object.create(null);return n.filter(i=>{let r=e(i);return t[r]?!1:(t[r]=!0,!0)})}var nt=k(()=>{"use strict"});var LB=y(tE=>{var Yl=require("path"),ya=process.platform==="win32",ba=require("fs"),_pe=process.env.NODE_DEBUG&&/fs/.test(process.env.NODE_DEBUG);function Lpe(){var n;if(_pe){var e=new Error;n=t}else n=i;return n;function t(r){r&&(e.message=r.message,r=e,i(r))}function i(r){if(r){if(process.throwDeprecation)throw r;if(!process.noDeprecation){var o="fs: missing callback "+(r.stack||r.message);process.traceDeprecation?console.trace(o):console.error(o)}}}}function Ipe(n){return typeof n=="function"?n:Lpe()}var xRe=Yl.normalize;ya?cs=/(.*?)(?:[\/\\]+|$)/g:cs=/(.*?)(?:[\/]+|$)/g;var cs;ya?Jg=/^(?:[a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/][^\\\/]+)?[\\\/]*/:Jg=/^[\/]*/;var Jg;tE.realpathSync=function(e,t){if(e=Yl.resolve(e),t&&Object.prototype.hasOwnProperty.call(t,e))return t[e];var i=e,r={},o={},s,a,l,u;c();function c(){var m=Jg.exec(e);s=m[0].length,a=m[0],l=m[0],u="",ya&&!o[l]&&(ba.lstatSync(l),o[l]=!0)}for(;s=e.length)return t&&(t[r]=e),i(null,e);cs.lastIndex=a;var m=cs.exec(e);return c=l,l+=m[0],u=c+m[1],a=cs.lastIndex,s[u]||t&&t[u]===u?process.nextTick(d):t&&Object.prototype.hasOwnProperty.call(t,u)?f(t[u]):ba.lstat(u,g)}function g(m,b){if(m)return i(m);if(!b.isSymbolicLink())return s[u]=!0,t&&(t[u]=u),process.nextTick(d);if(!ya){var w=b.dev.toString(32)+":"+b.ino.toString(32);if(o.hasOwnProperty(w))return p(null,o[w],u)}ba.stat(u,function(x){if(x)return i(x);ba.readlink(u,function(T,R){ya||(o[w]=R),p(T,R)})})}function p(m,b,w){if(m)return i(m);var x=Yl.resolve(c,b);t&&(t[w]=x),f(x)}function f(m){e=Yl.resolve(m,e.slice(a)),h()}}});var oE=y((SRe,MB)=>{MB.exports=va;va.realpath=va;va.sync=rE;va.realpathSync=rE;va.monkeypatch=jpe;va.unmonkeypatch=Mpe;var zc=require("fs"),iE=zc.realpath,nE=zc.realpathSync,Fpe=process.version,IB=/^v[0-5]\./.test(Fpe),FB=LB();function jB(n){return n&&n.syscall==="realpath"&&(n.code==="ELOOP"||n.code==="ENOMEM"||n.code==="ENAMETOOLONG")}function va(n,e,t){if(IB)return iE(n,e,t);typeof e=="function"&&(t=e,e=null),iE(n,e,function(i,r){jB(i)?FB.realpath(n,e,t):t(i,r)})}function rE(n,e){if(IB)return nE(n,e);try{return nE(n,e)}catch(t){if(jB(t))return FB.realpathSync(n,e);throw t}}function jpe(){zc.realpath=va,zc.realpathSync=rE}function Mpe(){zc.realpath=iE,zc.realpathSync=nE}});var AB=y((DRe,OB)=>{OB.exports=function(n,e){for(var t=[],i=0;i{"use strict";BB.exports=HB;function HB(n,e,t){n instanceof RegExp&&(n=NB(n,t)),e instanceof RegExp&&(e=NB(e,t));var i=qB(n,e,t);return i&&{start:i[0],end:i[1],pre:t.slice(0,i[0]),body:t.slice(i[0]+n.length,i[1]),post:t.slice(i[1]+e.length)}}function NB(n,e){var t=e.match(n);return t?t[0]:null}HB.range=qB;function qB(n,e,t){var i,r,o,s,a,l=t.indexOf(n),u=t.indexOf(e,l+1),c=l;if(l>=0&&u>0){if(n===e)return[l,u];for(i=[],o=t.length;c>=0&&!a;)c==l?(i.push(c),l=t.indexOf(n,c+1)):i.length==1?a=[i.pop(),u]:(r=i.pop(),r=0?l:u;i.length&&(a=[o,s])}return a}});var GB=y((kRe,XB)=>{var Ape=AB(),WB=sE();XB.exports=qpe;var YB="\0SLASH"+Math.random()+"\0",ZB="\0OPEN"+Math.random()+"\0",lE="\0CLOSE"+Math.random()+"\0",JB="\0COMMA"+Math.random()+"\0",$B="\0PERIOD"+Math.random()+"\0";function aE(n){return parseInt(n,10)==n?parseInt(n,10):n.charCodeAt(0)}function Npe(n){return n.split("\\\\").join(YB).split("\\{").join(ZB).split("\\}").join(lE).split("\\,").join(JB).split("\\.").join($B)}function Hpe(n){return n.split(YB).join("\\").split(ZB).join("{").split(lE).join("}").split(JB).join(",").split($B).join(".")}function UB(n){if(!n)return[""];var e=[],t=WB("{","}",n);if(!t)return n.split(",");var i=t.pre,r=t.body,o=t.post,s=i.split(",");s[s.length-1]+="{"+r+"}";var a=UB(o);return o.length&&(s[s.length-1]+=a.shift(),s.push.apply(s,a)),e.push.apply(e,s),e}function qpe(n){return n?(n.substr(0,2)==="{}"&&(n="\\{\\}"+n.substr(2)),Kc(Npe(n),!0).map(Hpe)):[]}function Bpe(n){return"{"+n+"}"}function Wpe(n){return/^-?0\d/.test(n)}function Ype(n,e){return n<=e}function Zpe(n,e){return n>=e}function Kc(n,e){var t=[],i=WB("{","}",n);if(!i||/\$$/.test(i.pre))return[n];var r=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(i.body),o=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(i.body),s=r||o,a=i.body.indexOf(",")>=0;if(!s&&!a)return i.post.match(/,.*\}/)?(n=i.pre+"{"+i.body+lE+i.post,Kc(n)):[n];var l;if(s)l=i.body.split(/\.\./);else if(l=UB(i.body),l.length===1&&(l=Kc(l[0],!1).map(Bpe),l.length===1)){var c=i.post.length?Kc(i.post,!1):[""];return c.map(function(L){return i.pre+l[0]+L})}var u=i.pre,c=i.post.length?Kc(i.post,!1):[""],h;if(s){var d=aE(l[0]),g=aE(l[1]),p=Math.max(l[0].length,l[1].length),f=l.length==3?Math.abs(aE(l[2])):1,m=Ype,b=g0){var F=new Array(R+1).join("0");x<0?T="-"+F+T.slice(1):T=F+T}}h.push(T)}}else h=Ape(l,function(M){return Kc(M,!1)});for(var N=0;N{tW.exports=Cr;Cr.Minimatch=xi;var $g={sep:"/"};try{$g=require("path")}catch{}var hE=Cr.GLOBSTAR=xi.GLOBSTAR={},Jpe=GB(),zB={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},uE="[^/]",cE=uE+"*?",$pe="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",Upe="(?:(?!(?:\\/|^)\\.).)*?",KB=Xpe("().*{}+?[]^$\\!");function Xpe(n){return n.split("").reduce(function(e,t){return e[t]=!0,e},{})}var VB=/\/+/;Cr.filter=Gpe;function Gpe(n,e){return e=e||{},function(t,i,r){return Cr(t,n,e)}}function QB(n,e){n=n||{},e=e||{};var t={};return Object.keys(e).forEach(function(i){t[i]=e[i]}),Object.keys(n).forEach(function(i){t[i]=n[i]}),t}Cr.defaults=function(n){if(!n||!Object.keys(n).length)return Cr;var e=Cr,t=function(r,o,s){return e.minimatch(r,o,QB(n,s))};return t.Minimatch=function(r,o){return new e.Minimatch(r,QB(n,o))},t};xi.defaults=function(n){return!n||!Object.keys(n).length?xi:Cr.defaults(n).Minimatch};function Cr(n,e,t){if(typeof e!="string")throw new TypeError("glob pattern string required");return t||(t={}),!t.nocomment&&e.charAt(0)==="#"?!1:e.trim()===""?n==="":new xi(e,t).match(n)}function xi(n,e){if(!(this instanceof xi))return new xi(n,e);if(typeof n!="string")throw new TypeError("glob pattern string required");e||(e={}),n=n.trim(),$g.sep!=="/"&&(n=n.split($g.sep).join("/")),this.options=e,this.set=[],this.pattern=n,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.make()}xi.prototype.debug=function(){};xi.prototype.make=zpe;function zpe(){if(!this._made){var n=this.pattern,e=this.options;if(!e.nocomment&&n.charAt(0)==="#"){this.comment=!0;return}if(!n){this.empty=!0;return}this.parseNegate();var t=this.globSet=this.braceExpand();e.debug&&(this.debug=console.error),this.debug(this.pattern,t),t=this.globParts=t.map(function(i){return i.split(VB)}),this.debug(this.pattern,t),t=t.map(function(i,r,o){return i.map(this.parse,this)},this),this.debug(this.pattern,t),t=t.filter(function(i){return i.indexOf(!1)===-1}),this.debug(this.pattern,t),this.set=t}}xi.prototype.parseNegate=Kpe;function Kpe(){var n=this.pattern,e=!1,t=this.options,i=0;if(!t.nonegate){for(var r=0,o=n.length;r"u"?this.pattern:n,typeof n>"u")throw new TypeError("undefined pattern");return e.nobrace||!n.match(/\{.*\}/)?[n]:Jpe(n)}xi.prototype.parse=Qpe;var pw={};function Qpe(n,e){if(n.length>1024*64)throw new TypeError("pattern is too long");var t=this.options;if(!t.noglobstar&&n==="**")return hE;if(n==="")return"";var i="",r=!!t.nocase,o=!1,s=[],a=[],l,u=!1,c=-1,h=-1,d=n.charAt(0)==="."?"":t.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",g=this;function p(){if(l){switch(l){case"*":i+=cE,r=!0;break;case"?":i+=uE,r=!0;break;default:i+="\\"+l;break}g.debug("clearStateChar %j %j",l,i),l=!1}}for(var f=0,m=n.length,b;f-1;J--){var H=a[J],M=i.slice(0,H.reStart),L=i.slice(H.reStart,H.reEnd-8),O=i.slice(H.reEnd-8,H.reEnd),Z=i.slice(H.reEnd);O+=Z;var ne=M.split("(").length-1,be=Z;for(f=0;f=0&&(r=n[o],!r);o--);for(o=0;o>> no match, partial?`,n,c,e,h),c===s))}var g;if(typeof l=="string"?(i.nocase?g=u.toLowerCase()===l.toLowerCase():g=u===l,this.debug("string match",l,u,g)):(g=u.match(l),this.debug("pattern match",l,u,g)),!g)return!1}if(r===s&&o===a)return!0;if(r===s)return t;if(o===a){var p=r===s-1&&n[r]==="";return p}throw new Error("wtf?")};function tfe(n){return n.replace(/\\(.)/g,"$1")}function ife(n){return n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")}});var iW=y((ERe,dE)=>{typeof Object.create=="function"?dE.exports=function(e,t){t&&(e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}))}:dE.exports=function(e,t){if(t){e.super_=t;var i=function(){};i.prototype=t.prototype,e.prototype=new i,e.prototype.constructor=e}}});var nW=y((RRe,pE)=>{try{if(gE=require("util"),typeof gE.inherits!="function")throw"";pE.exports=gE.inherits}catch{pE.exports=iW()}var gE});var bw=y((_Re,mw)=>{"use strict";function rW(n){return n.charAt(0)==="/"}function oW(n){var e=/^([a-zA-Z]:|[\\\/]{2}[^\\\/]+[\\\/]+[^\\\/]+)?([\\\/])?([\s\S]*?)$/,t=e.exec(n),i=t[1]||"",r=Boolean(i&&i.charAt(1)!==":");return Boolean(t[2]||r)}mw.exports=process.platform==="win32"?oW:rW;mw.exports.posix=rW;mw.exports.win32=oW});var mE=y(wa=>{wa.setopts=lfe;wa.ownProp=sW;wa.makeAbs=Ug;wa.finish=ufe;wa.mark=cfe;wa.isIgnored=lW;wa.childrenIgnored=hfe;function sW(n,e){return Object.prototype.hasOwnProperty.call(n,e)}var nfe=require("fs"),Qc=require("path"),rfe=fw(),aW=bw(),fE=rfe.Minimatch;function ofe(n,e){return n.localeCompare(e,"en")}function sfe(n,e){n.ignore=e.ignore||[],Array.isArray(n.ignore)||(n.ignore=[n.ignore]),n.ignore.length&&(n.ignore=n.ignore.map(afe))}function afe(n){var e=null;if(n.slice(-3)==="/**"){var t=n.replace(/(\/\*\*)+$/,"");e=new fE(t,{dot:!0})}return{matcher:new fE(n,{dot:!0}),gmatcher:e}}function lfe(n,e,t){if(t||(t={}),t.matchBase&&e.indexOf("/")===-1){if(t.noglobstar)throw new Error("base matching requires globstar");e="**/"+e}n.silent=!!t.silent,n.pattern=e,n.strict=t.strict!==!1,n.realpath=!!t.realpath,n.realpathCache=t.realpathCache||Object.create(null),n.follow=!!t.follow,n.dot=!!t.dot,n.mark=!!t.mark,n.nodir=!!t.nodir,n.nodir&&(n.mark=!0),n.sync=!!t.sync,n.nounique=!!t.nounique,n.nonull=!!t.nonull,n.nosort=!!t.nosort,n.nocase=!!t.nocase,n.stat=!!t.stat,n.noprocess=!!t.noprocess,n.absolute=!!t.absolute,n.fs=t.fs||nfe,n.maxLength=t.maxLength||1/0,n.cache=t.cache||Object.create(null),n.statCache=t.statCache||Object.create(null),n.symlinks=t.symlinks||Object.create(null),sfe(n,t),n.changedCwd=!1;var i=process.cwd();sW(t,"cwd")?(n.cwd=Qc.resolve(t.cwd),n.changedCwd=n.cwd!==i):n.cwd=i,n.root=t.root||Qc.resolve(n.cwd,"/"),n.root=Qc.resolve(n.root),process.platform==="win32"&&(n.root=n.root.replace(/\\/g,"/")),n.cwdAbs=aW(n.cwd)?n.cwd:Ug(n,n.cwd),process.platform==="win32"&&(n.cwdAbs=n.cwdAbs.replace(/\\/g,"/")),n.nomount=!!t.nomount,t.nonegate=!0,t.nocomment=!0,n.minimatch=new fE(e,t),n.options=n.minimatch.options}function ufe(n){for(var e=n.nounique,t=e?[]:Object.create(null),i=0,r=n.matches.length;i{dW.exports=hW;hW.GlobSync=di;var dfe=oE(),uW=fw(),IRe=uW.Minimatch,FRe=vw().Glob,jRe=require("util"),bE=require("path"),cW=require("assert"),yw=bw(),Zl=mE(),gfe=Zl.setopts,yE=Zl.ownProp,pfe=Zl.childrenIgnored,ffe=Zl.isIgnored;function hW(n,e){if(typeof e=="function"||arguments.length===3)throw new TypeError(`callback provided to sync glob -See: https://github.com/isaacs/node-glob/issues/167`);return new di(n,e).found}function di(n,e){if(!n)throw new Error("must provide pattern");if(typeof e=="function"||arguments.length===3)throw new TypeError(`callback provided to sync glob -See: https://github.com/isaacs/node-glob/issues/167`);if(!(this instanceof di))return new di(n,e);if(gfe(this,n,e),this.noprocess)return this;var t=this.minimatch.set.length;this.matches=new Array(t);for(var i=0;ithis.maxLength)return!1;if(!this.stat&&yE(this.cache,e)){var s=this.cache[e];if(Array.isArray(s)&&(s="DIR"),!t||s==="DIR")return s;if(t&&s==="FILE")return!1}var i,r=this.statCache[e];if(!r){var o;try{o=this.fs.lstatSync(e)}catch(a){if(a&&(a.code==="ENOENT"||a.code==="ENOTDIR"))return this.statCache[e]=!1,!1}if(o&&o.isSymbolicLink())try{r=this.fs.statSync(e)}catch{r=o}else r=o}this.statCache[e]=r;var s=!0;return r&&(s=r.isDirectory()?"DIR":"FILE"),this.cache[e]=this.cache[e]||s,t&&s==="FILE"?!1:s};di.prototype._mark=function(n){return Zl.mark(this,n)};di.prototype._makeAbs=function(n){return Zl.makeAbs(this,n)}});var vE=y((ORe,fW)=>{fW.exports=pW;function pW(n,e){if(n&&e)return pW(n)(e);if(typeof n!="function")throw new TypeError("need wrapper function");return Object.keys(n).forEach(function(i){t[i]=n[i]}),t;function t(){for(var i=new Array(arguments.length),r=0;r{var mW=vE();wE.exports=mW(ww);wE.exports.strict=mW(bW);ww.proto=ww(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return ww(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return bW(this)},configurable:!0})});function ww(n){var e=function(){return e.called?e.value:(e.called=!0,e.value=n.apply(this,arguments))};return e.called=!1,e}function bW(n){var e=function(){if(e.called)throw new Error(e.onceError);return e.called=!0,e.value=n.apply(this,arguments)},t=n.name||"Function wrapped with `once`";return e.onceError=t+" shouldn't be called more than once",e.called=!1,e}});var vW=y((NRe,yW)=>{var mfe=vE(),Xg=Object.create(null),bfe=xE();yW.exports=mfe(yfe);function yfe(n,e){return Xg[n]?(Xg[n].push(e),null):(Xg[n]=[e],vfe(n))}function vfe(n){return bfe(function e(){var t=Xg[n],i=t.length,r=wfe(arguments);try{for(var o=0;oi?(t.splice(0,i),process.nextTick(function(){e.apply(null,r)})):delete Xg[n]}})}function wfe(n){for(var e=n.length,t=[],i=0;i{xW.exports=Jl;var xfe=oE(),wW=fw(),HRe=wW.Minimatch,Cfe=nW(),Sfe=require("events").EventEmitter,CE=require("path"),SE=require("assert"),Gg=bw(),TE=gW(),$l=mE(),Dfe=$l.setopts,DE=$l.ownProp,kE=vW(),qRe=require("util"),Tfe=$l.childrenIgnored,kfe=$l.isIgnored,Pfe=xE();function Jl(n,e,t){if(typeof e=="function"&&(t=e,e={}),e||(e={}),e.sync){if(t)throw new TypeError("callback provided to sync glob");return TE(n,e)}return new rt(n,e,t)}Jl.sync=TE;var Efe=Jl.GlobSync=TE.GlobSync;Jl.glob=Jl;function Rfe(n,e){if(e===null||typeof e!="object")return n;for(var t=Object.keys(e),i=t.length;i--;)n[t[i]]=e[t[i]];return n}Jl.hasMagic=function(n,e){var t=Rfe({},e);t.noprocess=!0;var i=new rt(n,t),r=i.minimatch.set;if(!n)return!1;if(r.length>1)return!0;for(var o=0;othis.maxLength)return e();if(!this.stat&&DE(this.cache,t)){var r=this.cache[t];if(Array.isArray(r)&&(r="DIR"),!i||r==="DIR")return e(null,r);if(i&&r==="FILE")return e()}var o,s=this.statCache[t];if(s!==void 0){if(s===!1)return e(null,s);var a=s.isDirectory()?"DIR":"FILE";return i&&a==="FILE"?e():e(null,a,s)}var l=this,u=kE("stat\0"+t,c);u&&l.fs.lstat(t,u);function c(h,d){if(d&&d.isSymbolicLink())return l.fs.stat(t,function(g,p){g?l._stat2(n,t,null,d,e):l._stat2(n,t,g,p,e)});l._stat2(n,t,h,d,e)}};rt.prototype._stat2=function(n,e,t,i,r){if(t&&(t.code==="ENOENT"||t.code==="ENOTDIR"))return this.statCache[e]=!1,r();var o=n.slice(-1)==="/";if(this.statCache[e]=i,e.slice(-1)==="/"&&i&&!i.isDirectory())return r(null,!1,i);var s=!0;return i&&(s=i.isDirectory()?"DIR":"FILE"),this.cache[e]=this.cache[e]||s,o&&s==="FILE"?r():r(null,s,i)}});var SW=y((WRe,CW)=>{var Lfe=typeof process=="object"&&process&&process.platform==="win32";CW.exports=Lfe?{sep:"\\"}:{sep:"/"}});var LW=y((YRe,_W)=>{var DW=sE();_W.exports=jfe;var TW="\0SLASH"+Math.random()+"\0",kW="\0OPEN"+Math.random()+"\0",EE="\0CLOSE"+Math.random()+"\0",PW="\0COMMA"+Math.random()+"\0",EW="\0PERIOD"+Math.random()+"\0";function PE(n){return parseInt(n,10)==n?parseInt(n,10):n.charCodeAt(0)}function Ife(n){return n.split("\\\\").join(TW).split("\\{").join(kW).split("\\}").join(EE).split("\\,").join(PW).split("\\.").join(EW)}function Ffe(n){return n.split(TW).join("\\").split(kW).join("{").split(EE).join("}").split(PW).join(",").split(EW).join(".")}function RW(n){if(!n)return[""];var e=[],t=DW("{","}",n);if(!t)return n.split(",");var i=t.pre,r=t.body,o=t.post,s=i.split(",");s[s.length-1]+="{"+r+"}";var a=RW(o);return o.length&&(s[s.length-1]+=a.shift(),s.push.apply(s,a)),e.push.apply(e,s),e}function jfe(n){return n?(n.substr(0,2)==="{}"&&(n="\\{\\}"+n.substr(2)),zg(Ife(n),!0).map(Ffe)):[]}function Mfe(n){return"{"+n+"}"}function Ofe(n){return/^-?0\d/.test(n)}function Afe(n,e){return n<=e}function Nfe(n,e){return n>=e}function zg(n,e){var t=[],i=DW("{","}",n);if(!i)return[n];var r=i.pre,o=i.post.length?zg(i.post,!1):[""];if(/\$$/.test(i.pre))for(var s=0;s=0;if(!c&&!h)return i.post.match(/,.*\}/)?(n=i.pre+"{"+i.body+EE+i.post,zg(n)):[n];var d;if(c)d=i.body.split(/\.\./);else if(d=RW(i.body),d.length===1&&(d=zg(d[0],!1).map(Mfe),d.length===1))return o.map(function(M){return i.pre+d[0]+M});var g;if(c){var p=PE(d[0]),f=PE(d[1]),m=Math.max(d[0].length,d[1].length),b=d.length==3?Math.abs(PE(d[2])):1,w=Afe,x=f0){var J=new Array(N+1).join("0");R<0?F="-"+J+F.slice(1):F=J+F}}g.push(F)}}else{g=[];for(var H=0;H{var Qn=IE.exports=(n,e,t={})=>(Cw(e),!t.nocomment&&e.charAt(0)==="#"?!1:new Vc(e,t).match(n));IE.exports=Qn;var _E=SW();Qn.sep=_E.sep;var Vr=Symbol("globstar **");Qn.GLOBSTAR=Vr;var Hfe=LW(),IW={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},LE="[^/]",RE=LE+"*?",qfe="(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?",Bfe="(?:(?!(?:\\/|^)\\.).)*?",MW=n=>n.split("").reduce((e,t)=>(e[t]=!0,e),{}),FW=MW("().*{}+?[]^$\\!"),Wfe=MW("[.("),jW=/\/+/;Qn.filter=(n,e={})=>(t,i,r)=>Qn(t,n,e);var xa=(n,e={})=>{let t={};return Object.keys(n).forEach(i=>t[i]=n[i]),Object.keys(e).forEach(i=>t[i]=e[i]),t};Qn.defaults=n=>{if(!n||typeof n!="object"||!Object.keys(n).length)return Qn;let e=Qn,t=(i,r,o)=>e(i,r,xa(n,o));return t.Minimatch=class extends e.Minimatch{constructor(r,o){super(r,xa(n,o))}},t.Minimatch.defaults=i=>e.defaults(xa(n,i)).Minimatch,t.filter=(i,r)=>e.filter(i,xa(n,r)),t.defaults=i=>e.defaults(xa(n,i)),t.makeRe=(i,r)=>e.makeRe(i,xa(n,r)),t.braceExpand=(i,r)=>e.braceExpand(i,xa(n,r)),t.match=(i,r,o)=>e.match(i,r,xa(n,o)),t};Qn.braceExpand=(n,e)=>OW(n,e);var OW=(n,e={})=>(Cw(n),e.nobrace||!/\{(?:(?!\{).)*\}/.test(n)?[n]:Hfe(n)),Yfe=1024*64,Cw=n=>{if(typeof n!="string")throw new TypeError("invalid pattern");if(n.length>Yfe)throw new TypeError("pattern is too long")},xw=Symbol("subparse");Qn.makeRe=(n,e)=>new Vc(n,e||{}).makeRe();Qn.match=(n,e,t={})=>{let i=new Vc(e,t);return n=n.filter(r=>i.match(r)),i.options.nonull&&!n.length&&n.push(e),n};var Zfe=n=>n.replace(/\\(.)/g,"$1"),Jfe=n=>n.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"),Vc=class{constructor(e,t){Cw(e),t||(t={}),this.options=t,this.set=[],this.pattern=e,this.windowsPathsNoEscape=!!t.windowsPathsNoEscape||t.allowWindowsEscape===!1,this.windowsPathsNoEscape&&(this.pattern=this.pattern.replace(/\\/g,"/")),this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.partial=!!t.partial,this.make()}debug(){}make(){let e=this.pattern,t=this.options;if(!t.nocomment&&e.charAt(0)==="#"){this.comment=!0;return}if(!e){this.empty=!0;return}this.parseNegate();let i=this.globSet=this.braceExpand();t.debug&&(this.debug=(...r)=>console.error(...r)),this.debug(this.pattern,i),i=this.globParts=i.map(r=>r.split(jW)),this.debug(this.pattern,i),i=i.map((r,o,s)=>r.map(this.parse,this)),this.debug(this.pattern,i),i=i.filter(r=>r.indexOf(!1)===-1),this.debug(this.pattern,i),this.set=i}parseNegate(){if(this.options.nonegate)return;let e=this.pattern,t=!1,i=0;for(let r=0;r>> no match, partial?`,e,h,t,d),h===a))}var p;if(typeof u=="string"?(p=c===u,this.debug("string match",u,c,p)):(p=c.match(u),this.debug("pattern match",u,c,p)),!p)return!1}if(o===a&&s===l)return!0;if(o===a)return i;if(s===l)return o===a-1&&e[o]==="";throw new Error("wtf?")}braceExpand(){return OW(this.pattern,this.options)}parse(e,t){Cw(e);let i=this.options;if(e==="**")if(i.noglobstar)e="*";else return Vr;if(e==="")return"";let r="",o=!!i.nocase,s=!1,a=[],l=[],u,c=!1,h=-1,d=-1,g,p,f,m=e.charAt(0)==="."?"":i.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",b=()=>{if(u){switch(u){case"*":r+=RE,o=!0;break;case"?":r+=LE,o=!0;break;default:r+="\\"+u;break}this.debug("clearStateChar %j %j",u,r),u=!1}};for(let T=0,R;T(J||(J="\\"),N+N+J+"|")),this.debug(`tail=%j - %s`,T,T,p,r);let R=p.type==="*"?RE:p.type==="?"?LE:"\\"+p.type;o=!0,r=r.slice(0,p.reStart)+R+"\\("+T}b(),s&&(r+="\\\\");let w=Wfe[r.charAt(0)];for(let T=l.length-1;T>-1;T--){let R=l[T],F=r.slice(0,R.reStart),N=r.slice(R.reStart,R.reEnd-8),J=r.slice(R.reEnd),H=r.slice(R.reEnd-8,R.reEnd)+J,M=F.split("(").length-1,L=J;for(let Z=0;Z(s=s.map(a=>typeof a=="string"?Jfe(a):a===Vr?Vr:a._src).reduce((a,l)=>(a[a.length-1]===Vr&&l===Vr||a.push(l),a),[]),s.forEach((a,l)=>{a!==Vr||s[l-1]===Vr||(l===0?s.length>1?s[l+1]="(?:\\/|"+i+"\\/)?"+s[l+1]:s[l]=i:l===s.length-1?s[l-1]+="(?:\\/|"+i+")?":(s[l-1]+="(?:\\/|\\/"+i+"\\/)"+s[l+1],s[l+1]=Vr))}),s.filter(a=>a!==Vr).join("/"))).join("|");o="^(?:"+o+")$",this.negate&&(o="^(?!"+o+").*$");try{this.regexp=new RegExp(o,r)}catch{this.regexp=!1}return this.regexp}match(e,t=this.partial){if(this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return e==="";if(e==="/"&&t)return!0;let i=this.options;_E.sep!=="/"&&(e=e.split(_E.sep).join("/")),e=e.split(jW),this.debug(this.pattern,"split",e);let r=this.set;this.debug(this.pattern,"set",r);let o;for(let s=e.length-1;s>=0&&(o=e[s],!o);s--);for(let s=0;s{"use strict";Kg=(i=>(i[i.Buffer=0]="Buffer",i[i.LanguageServer=1]="LanguageServer",i[i.Global=2]="Global",i))(Kg||{}),Ul=(i=>(i[i.Native=0]="Native",i[i.Remote=1]="Remote",i[i.Service=2]="Service",i))(Ul||{}),Sw=(i=>(i[i.More=0]="More",i[i.Warning=1]="Warning",i[i.Error=2]="Error",i))(Sw||{}),Dw=(s=>(s[s.Initial=0]="Initial",s[s.Starting=1]="Starting",s[s.StartFailed=2]="StartFailed",s[s.Running=3]="Running",s[s.Stopping=4]="Stopping",s[s.Stopped=5]="Stopped",s))(Dw||{}),Qg=(r=>(r[r.Unknown=0]="Unknown",r[r.File=1]="File",r[r.Directory=2]="Directory",r[r.SymbolicLink=64]="SymbolicLink",r))(Qg||{}),Tw=(i=>(i[i.Global=1]="Global",i[i.Workspace=2]="Workspace",i[i.WorkspaceFolder=3]="WorkspaceFolder",i))(Tw||{})});function ep(n,e){e===void 0&&(e=!1);var t=n.length,i=0,r="",o=0,s=16,a=0,l=0,u=0,c=0,h=0;function d(x,T){for(var R=0,F=0;R=48&&N<=57)F=F*16+N-48;else if(N>=65&&N<=70)F=F*16+N-65+10;else if(N>=97&&N<=102)F=F*16+N-97+10;else break;i++,R++}return R=t){x+=n.substring(T,i),h=2;break}var R=n.charCodeAt(i);if(R===34){x+=n.substring(T,i),i++;break}if(R===92){if(x+=n.substring(T,i),i++,i>=t){h=2;break}var F=n.charCodeAt(i++);switch(F){case 34:x+='"';break;case 92:x+="\\";break;case 47:x+="/";break;case 98:x+="\b";break;case 102:x+="\f";break;case 110:x+=` -`;break;case 114:x+="\r";break;case 116:x+=" ";break;case 117:var N=d(4,!0);N>=0?x+=String.fromCharCode(N):h=4;break;default:h=5}T=i;continue}if(R>=0&&R<=31)if(Vg(R)){x+=n.substring(T,i),h=2;break}else h=6;i++}return x}function m(){if(r="",h=0,o=i,l=a,c=u,i>=t)return o=t,s=17;var x=n.charCodeAt(i);if(FE(x)){do i++,r+=String.fromCharCode(x),x=n.charCodeAt(i);while(FE(x));return s=15}if(Vg(x))return i++,r+=String.fromCharCode(x),x===13&&n.charCodeAt(i)===10&&(i++,r+=` -`),a++,u=i,s=14;switch(x){case 123:return i++,s=1;case 125:return i++,s=2;case 91:return i++,s=3;case 93:return i++,s=4;case 58:return i++,s=6;case 44:return i++,s=5;case 34:return i++,r=f(),s=10;case 47:var T=i-1;if(n.charCodeAt(i+1)===47){for(i+=2;i=12&&x<=15);return x}return{setPosition:g,getPosition:function(){return i},scan:e?w:m,getToken:function(){return s},getTokenValue:function(){return r},getTokenOffset:function(){return o},getTokenLength:function(){return i-o},getTokenStartLine:function(){return l},getTokenStartCharacter:function(){return o-c},getTokenError:function(){return h}}}function FE(n){return n===32||n===9||n===11||n===12||n===160||n===5760||n>=8192&&n<=8203||n===8239||n===8287||n===12288||n===65279}function Vg(n){return n===10||n===13||n===8232||n===8233}function eh(n){return n>=48&&n<=57}var kw=k(()=>{"use strict"});function ME(n,e,t){var i,r,o,s,a;if(e){for(s=e.offset,a=s+e.length,o=s;o>0&&!tp(n,o-1);)o--;for(var l=a;ls)&&n.substring(Z,ne)!==O&&b.push({offset:Z,length:ne-Z,content:O})}var x=m();if(x!==17){var T=g.getTokenOffset()+o,R=jE(d,i);w(R,o,T)}for(;x!==17;){for(var F=g.getTokenOffset()+g.getTokenLength()+o,N=m(),J="",H=!1;!c&&(N===12||N===13);){var M=g.getTokenOffset()+o;w(" ",F,M),F=g.getTokenOffset()+g.getTokenLength()+o,H=N===12,J=H?f():"",N=m()}if(N===2)x!==1&&(h--,J=f());else if(N===4)x!==3&&(h--,J=f());else{switch(x){case 3:case 1:h++,J=f();break;case 5:case 12:J=f();break;case 13:c?J=f():H||(J=" ");break;case 6:H||(J=" ");break;case 10:if(N===6){H||(J="");break}case 7:case 8:case 9:case 11:case 2:case 4:N===12||N===13?H||(J=" "):N!==5&&N!==17&&(p=!0);break;case 16:p=!0;break}c&&(N===12||N===13)&&(J=f())}N===17&&(J=t.insertFinalNewline?u:"");var L=g.getTokenOffset()+o;w(J,F,L),x=N}return b}function jE(n,e){for(var t="",i=0;i{"use strict";kw()});function AW(n,e,t){e===void 0&&(e=[]),t===void 0&&(t=ip.DEFAULT);var i=null,r=[],o=[];function s(l){Array.isArray(r)?r.push(l):i!==null&&(r[i]=l)}var a={onObjectBegin:function(){var l={};s(l),o.push(r),r=l,i=null},onObjectProperty:function(l){i=l},onObjectEnd:function(){r=o.pop()},onArrayBegin:function(){var l=[];s(l),o.push(r),r=l,i=null},onArrayEnd:function(){r=o.pop()},onLiteralValue:s,onError:function(l,u,c){e.push({error:l,offset:u,length:c})}};return Ew(n,a,t),r[0]}function AE(n,e,t){e===void 0&&(e=[]),t===void 0&&(t=ip.DEFAULT);var i={type:"array",offset:-1,length:-1,children:[],parent:void 0};function r(l){i.type==="property"&&(i.length=l-i.offset,i=i.parent)}function o(l){return i.children.push(l),l}var s={onObjectBegin:function(l){i=o({type:"object",offset:l,length:-1,parent:i,children:[]})},onObjectProperty:function(l,u,c){i=o({type:"property",offset:u,length:-1,parent:i,children:[]}),i.children.push({type:"string",value:l,offset:u,length:c,parent:i})},onObjectEnd:function(l,u){r(l+u),i.length=l+u-i.offset,i=i.parent,r(l+u)},onArrayBegin:function(l,u){i=o({type:"array",offset:l,length:-1,parent:i,children:[]})},onArrayEnd:function(l,u){i.length=l+u-i.offset,i=i.parent,r(l+u)},onLiteralValue:function(l,u,c){o({type:zfe(l),offset:u,length:c,parent:i,value:l}),r(u+c)},onSeparator:function(l,u,c){i.type==="property"&&(l===":"?i.colonOffset=u:l===","&&r(u))},onError:function(l,u,c){e.push({error:l,offset:u,length:c})}};Ew(n,s,t);var a=i.children[0];return a&&delete a.parent,a}function Pw(n,e){if(!!n){for(var t=n,i=0,r=e;i=t.children.length)return;t=t.children[c]}}return t}}function Ew(n,e,t){t===void 0&&(t=ip.DEFAULT);var i=ep(n,!1);function r(H){return H?function(){return H(i.getTokenOffset(),i.getTokenLength(),i.getTokenStartLine(),i.getTokenStartCharacter())}:function(){return!0}}function o(H){return H?function(M){return H(M,i.getTokenOffset(),i.getTokenLength(),i.getTokenStartLine(),i.getTokenStartCharacter())}:function(){return!0}}var s=r(e.onObjectBegin),a=o(e.onObjectProperty),l=r(e.onObjectEnd),u=r(e.onArrayBegin),c=r(e.onArrayEnd),h=o(e.onLiteralValue),d=o(e.onSeparator),g=r(e.onComment),p=o(e.onError),f=t&&t.disallowComments,m=t&&t.allowTrailingComma;function b(){for(;;){var H=i.scan();switch(i.getTokenError()){case 4:w(14);break;case 5:w(15);break;case 3:w(13);break;case 1:f||w(11);break;case 2:w(12);break;case 6:w(16);break}switch(H){case 12:case 13:f?w(10):g();break;case 16:w(1);break;case 15:case 14:break;default:return H}}}function w(H,M,L){if(M===void 0&&(M=[]),L===void 0&&(L=[]),p(H),M.length+L.length>0)for(var O=i.getToken();O!==17;){if(M.indexOf(O)!==-1){b();break}else if(L.indexOf(O)!==-1)break;O=b()}}function x(H){var M=i.getTokenValue();return H?h(M):a(M),b(),!0}function T(){switch(i.getToken()){case 11:var H=i.getTokenValue(),M=Number(H);isNaN(M)&&(w(2),M=0),h(M);break;case 7:h(null);break;case 8:h(!0);break;case 9:h(!1);break;default:return!1}return b(),!0}function R(){return i.getToken()!==10?(w(3,[],[2,5]),!1):(x(!1),i.getToken()===6?(d(":"),b(),J()||w(4,[],[2,5])):w(5,[],[2,5]),!0)}function F(){s(),b();for(var H=!1;i.getToken()!==2&&i.getToken()!==17;){if(i.getToken()===5){if(H||w(4,[],[]),d(","),b(),i.getToken()===2&&m)break}else H&&w(6,[],[]);R()||w(4,[],[2,5]),H=!0}return l(),i.getToken()!==2?w(7,[2],[]):b(),!0}function N(){u(),b();for(var H=!1;i.getToken()!==4&&i.getToken()!==17;){if(i.getToken()===5){if(H||w(4,[],[]),d(","),b(),i.getToken()===4&&m)break}else H&&w(6,[],[]);J()||w(4,[],[4,5]),H=!0}return c(),i.getToken()!==4?w(8,[4],[]):b(),!0}function J(){switch(i.getToken()){case 3:return N();case 1:return F();case 10:return x(!0);default:return T()}}return b(),i.getToken()===17?t.allowEmptyContent?!0:(w(4,[],[]),!1):J()?(i.getToken()!==17&&w(9,[],[]),!0):(w(4,[],[]),!1)}function zfe(n){switch(typeof n){case"boolean":return"boolean";case"number":return"number";case"string":return"string";case"object":{if(n){if(Array.isArray(n))return"array"}else return"null";return"object"}default:return"null"}}var ip,NE=k(()=>{"use strict";kw();(function(n){n.DEFAULT={allowTrailingComma:!1}})(ip||(ip={}))});function NW(n,e,t,i){for(var r,o=e.slice(),s=[],a=AE(n,s),l=void 0,u=void 0;o.length>0&&(u=o.pop(),l=Pw(a,o),l===void 0&&t!==void 0);)typeof u=="string"?t=(r={},r[u]=t,r):t=[t];if(l)if(l.type==="object"&&typeof u=="string"&&Array.isArray(l.children)){var c=Pw(l,[u]);if(c!==void 0)if(t===void 0){if(!c.parent)throw new Error("Malformed AST");var h=l.children.indexOf(c.parent),d=void 0,g=c.parent.offset+c.parent.length;if(h>0){var p=l.children[h-1];d=p.offset+p.length}else if(d=l.offset+1,l.children.length>1){var f=l.children[1];g=f.offset}return Xl(n,{offset:d,length:g-d,content:""},i)}else return Xl(n,{offset:c.offset,length:c.length,content:JSON.stringify(t)},i);else{if(t===void 0)return[];var m=JSON.stringify(u)+": "+JSON.stringify(t),b=i.getInsertionIndex?i.getInsertionIndex(l.children.map(function(H){return H.children[0].value})):l.children.length,w=void 0;if(b>0){var p=l.children[b-1];w={offset:p.offset+p.length,length:0,content:","+m}}else l.children.length===0?w={offset:l.offset+1,length:0,content:m}:w={offset:l.offset+1,length:0,content:m+","};return Xl(n,w,i)}}else if(l.type==="array"&&typeof u=="number"&&Array.isArray(l.children)){var x=u;if(x===-1){var m=""+JSON.stringify(t),w=void 0;if(l.children.length===0)w={offset:l.offset+1,length:0,content:m};else{var p=l.children[l.children.length-1];w={offset:p.offset+p.length,length:0,content:","+m}}return Xl(n,w,i)}else if(t===void 0&&l.children.length>=0){var T=u,R=l.children[T],w=void 0;if(l.children.length===1)w={offset:l.offset+1,length:l.length-2,content:""};else if(l.children.length-1===T){var p=l.children[T-1],F=p.offset+p.length,N=l.offset+l.length;w={offset:F,length:N-2-F,content:""}}else w={offset:R.offset,length:l.children[T+1].offset-R.offset,content:""};return Xl(n,w,i)}else if(t!==void 0){var w=void 0,m=""+JSON.stringify(t);if(!i.isArrayInsertion&&l.children.length>u){var J=l.children[u];w={offset:J.offset,length:J.length,content:m}}else if(l.children.length===0||u===0)w={offset:l.offset+1,length:0,content:l.children.length===0?m:m+","};else{var b=u>l.children.length?l.children.length:u,p=l.children[b-1];w={offset:p.offset+p.length,length:0,content:","+m}}return Xl(n,w,i)}else throw new Error("Can not "+(t===void 0?"remove":i.isArrayInsertion?"insert":"modify")+" Array index "+x+" as length is not sufficient")}else throw new Error("Can not add "+(typeof u!="number"?"index":"property")+" to parent of type "+l.type);else{if(t===void 0)throw new Error("Can not delete in empty document");return Xl(n,{offset:a?a.offset:0,length:a?a.length:0,content:JSON.stringify(t)},i)}}function Xl(n,e,t){if(!t.formattingOptions)return[e];var i=Rw(n,e),r=e.offset,o=e.offset+e.content.length;if(e.length===0||e.content.length===0){for(;r>0&&!tp(i,r-1);)r--;for(;o=0;a--){var l=s[a];i=Rw(i,l),r=Math.min(r,l.offset),o=Math.max(o,l.offset+l.length),o+=l.content.length-l.length}var u=n.length-(i.length-o)-r;return[{offset:r,length:u,content:i.substring(r,o)}]}function Rw(n,e){return n.substring(0,e.offset)+e.content+n.substring(e.offset+e.length)}var HW=k(()=>{"use strict";OE();NE()});function WW(n,e,t,i){return NW(n,e,t,i)}function YW(n,e){for(var t=e.length-1;t>=0;t--)n=Rw(n,e[t]);return n}var qW,BW,_w=k(()=>{"use strict";OE();HW();kw();NE();qW=AW,BW=Ew});function gi(n){try{let e=[],t=Ci.default.readFileSync(n,"utf8"),i=qW(t,e,{allowTrailingComma:!0});return e.length>0&&JW.error(`Error on parse json file ${n}`,e),i??{}}catch{return{}}}function Ca(n,e){let t=Ln.default.dirname(n);Ci.default.existsSync(t)||(Ci.default.mkdirSync(t,{recursive:!0}),JW.info(`Creating directory ${t}`)),Ci.default.writeFileSync(n,JSON.stringify(e??{},null,2),"utf8")}async function zi(n){let e=null;try{e=await(0,th.promisify)(Ci.default.stat)(n)}catch{}return e}async function YE(n){if(!!n)try{await(0,th.promisify)(Ci.default.rm)(n,{force:!0,recursive:!0})}catch{return}}async function ZE(n){try{let e=await zi(n);return e.isFile()?1:e.isDirectory()?2:e.isSymbolicLink()?64:0}catch{return}}async function $W(n){if(!n)return!1;let e=await zi(n);if(!e||!e.isFile())return!1;let t=null;try{let{stdout:r}=await(0,th.promisify)(qE.exec)("git rev-parse --show-toplevel",{cwd:Ln.default.dirname(n)});t=r.trim()}catch{}if(!t)return!1;let i=Ln.default.relative(t,n);try{let{stdout:r}=await(0,th.promisify)(qE.exec)(`git check-ignore ${i}`,{cwd:t});return r.trim()==i}catch{}return!1}function HE(n,e=[]){return!e||!e.length?!1:e.some(t=>(0,WE.default)(n,t,{dot:!0}))}function np(n,e,t,i=!1,r=!0,o=[]){let s=In(n);if(r&&t&&Ye(t,s,!0)&&!HE(t,o)&&Lw(t,e))return t;let a=s.split(Ln.default.sep);if(i){for(;a.length>0;){let l=a.join(Ln.default.sep);if(!HE(l,o)&&Lw(l,e))return l;a.pop()}return null}else{let l=[a.shift()];for(let u of a){l.push(u);let c=l.join(Ln.default.sep);if(!HE(c,o)&&Lw(c,e))return c}return null}}function UW(n,e,t){return new Promise((i,r)=>{if(Je(e))return i(!1);let o;t&&(o=t.onCancellationRequested(()=>{l.abort(),r(new ii)}));let s=!1,a=e.length==1?e[0]:`{${e.join(",")}}`,l=(0,BE.default)(a,{nosort:!0,ignore:["node_modules/**",".git/**"],dot:!0,cwd:n,nodir:!0,absolute:!1},u=>{if(o&&o.dispose(),u)return r(u);i(s)});l.on("match",()=>{o&&o.dispose(),s=!0,l.abort(),i(!0)}),l.on("end",()=>{o&&o.dispose(),i(s)})})}function Lw(n,e){try{let t=Ci.default.readdirSync(n);for(let i of e)if(i.includes("*")?WE.default.match(t,i,{nobrace:!0,noext:!0,nocomment:!0,nonegate:!0,dot:!0}).length!==0:t.includes(i))return!0}catch{}return!1}function ih(n,e){let t=Ln.default.parse(e).root,i=Array.isArray(n)?n:[n];for(;e&&e!==t;){if(Lw(e,i))for(let o of i){let s=Ln.default.join(e,o);if(Ci.default.existsSync(s))return s}e=Ln.default.dirname(e)}return null}function XW(n,e){return new Promise((t,i)=>{Ci.default.readFile(n,e,(r,o)=>{r&&i(r),t(o)})})}function GW(n){let e,t=0;return new Promise((i,r)=>{Ci.default.createReadStream(n).on("error",o=>r(o)).on("data",o=>{for(e=0;ei(t))})}function Sa(n,e,t){if(!Ci.default.existsSync(n))return Promise.reject(new Error(`file does not exist: ${n}`));let i=[],r=Ci.default.createReadStream(n,{encoding:"utf8"}),o=Iw.default.createInterface({input:r,crlfDelay:1/0,terminal:!1}),s=0;return new Promise((a,l)=>{o.on("line",u=>{s>=e&&s<=t&&i.push(u),s==t&&o.close(),s=s+1}),o.on("close",()=>{a(i),r.close()}),o.on("error",l)})}function zW(n,e){if(!Ci.default.existsSync(n))return Promise.reject(new Error(`file does not exist: ${n}`));let t=Ci.default.createReadStream(n,{encoding:"utf8"}),i=Iw.default.createInterface({input:t,crlfDelay:1/0,terminal:!1}),r=0,o="";return new Promise((s,a)=>{i.on("line",l=>{r==e&&(r==0&&l.startsWith("\uFEFF")?o=l.slice(1):o=l,i.close(),t.close()),r=r+1}),i.on("close",()=>{s(o)}),i.on("error",a)})}async function KW(n,e,t){let i=j.file(n).toString();if(!Ci.default.existsSync(n))return eo.Location.create(i,eo.Range.create(0,0,0,0));let r=Iw.default.createInterface({input:Ci.default.createReadStream(n,{encoding:"utf8"})}),o=0,s=await new Promise(a=>{r.on("line",l=>{if(l.includes(e)){r.removeAllListeners(),r.close(),a(l);return}o=o+1}),r.on("error",()=>{a(null)})});if(s!=null){let a=t==null?0:s.indexOf(t);a==0&&(a=s.match(/^\s*/)[0].length);let l=eo.Position.create(o,a+(t?t.length:0));return eo.Location.create(i,eo.Range.create(eo.Position.create(o,a),l))}return eo.Location.create(i,eo.Range.create(0,0,0,0))}function ni(n,e,t){return t=typeof t=="boolean"?t:En||Jc,!n||!e?!1:(n=In(n),e=In(e),t?n.toLowerCase()===e.toLowerCase():n===e)}function ZW(n,e){return En||Jc?n.toLowerCase().startsWith(e.toLowerCase()):n.startsWith(e)}async function rp(n,e){await(0,th.promisify)(Ci.default.writeFile)(n,e,{encoding:"utf8"})}function op(n){return n.startsWith("file:")}function In(n){return j.file(Ln.default.resolve(Ln.default.normalize(n))).fsPath}function Ye(n,e,t=!1){let i=In(n),r=In(e);return i==="//"&&(i="/"),ni(i,r)?!!t:i.endsWith(Ln.default.sep)?ZW(r,i):ZW(r,i)&&r[i.length]==Ln.default.sep}var qE,Ci,BE,WE,Ln,Iw,th,eo,JW,$e=k(()=>{"use strict";qE=require("child_process"),Ci=S(require("fs")),BE=S(vw()),WE=S(Lo()),Ln=S(require("path")),Iw=S(require("readline"));Pe();th=require("util"),eo=S(W());dn();nt();xr();$c();_w();JW=q()("util-fs")});function Xt(n,e){return ft(n.start,e)===0&&ft(n.end,e)===0}function QW(n,e){return n.line===e.line&&n.character===e.character}function VW(n,e){let t=n.start.line|0,i=e.start.line|0;if(t===i){let r=n.start.character|0,o=e.start.character|0;if(r===o){let s=n.end.line|0,a=e.end.line|0;if(s===a){let l=n.end.character|0,u=e.end.character|0;return l-u}return s-a}return r-o}return t-i}function eY(n,e){let{start:t,end:i}=n;if(t.line>i.line||t.line===i.line&&t.character>i.character){let o=t;t=i,i=o}t=nh.Position.create(Math.max(0,t.line),Math.max(0,t.character));let r=Math.max(0,i.character);return typeof e=="number"&&r>e&&(r=e),i=nh.Position.create(Math.max(0,i.line),r),{start:t,end:i}}function Fw(n,e){return Me(n.end,e.start)==0||Me(e.end,n.start)==0}function rh(n,e){let{start:t,end:i}=n;return!(Me(i,e.start)<=0||Me(t,e.end)>=0)}function Gl(n,e){return!!(ft(n.start,e)==0||ft(n.end,e)==0||Xt(e,n))}function tY(n,e){let{line:t,character:i}=e,{start:r,end:o}=n,s=o.line==r.line?o.character+i:o.character;return nh.Range.create(r.line+t,i+r.character,o.line+t,s)}function iY(n,e){let{start:t,end:i}=e;return n>=t.line&&n<=i.line}function Lt(n){let{start:e,end:t}=n;return e.line==t.line&&e.character==t.character}function ft(n,e){let{start:t,end:i}=e;return Me(n,t)<0?-1:Me(n,i)>0?1:0}function Me(n,e){return n.line>e.line||e.line==n.line&&n.character>e.character?1:e.line==n.line&&n.character==e.character?0:-1}function nY(n){return n.start.line==n.end.line}function Ki(n,e){let t=e.split(/\r?\n/),i=t.length,r=t[i-1],o=i==1?n.character+e.length:r.length;return nh.Position.create(n.line+i-1,o)}var nh,xt=k(()=>{"use strict";nh=S(W())});var eme,sp,rY=k(()=>{"use strict";eme=q()("outpubChannel"),sp=class{constructor(e,t,i){this.name=e;this.nvim=t;this.onDispose=i;this.lines=[""];this._disposed=!1;this.created=!1;if(!/^[\w\s-.]+$/.test(e))throw new Error(`Invalid channel name "${e}", only word characters and white space allowed.`)}get content(){return this.lines.join(` -`)}_append(e){let{nvim:t}=this;if(!t){eme.info(`[${this.name} ${new Date().toLocaleTimeString()}] ${e}`);return}let i=this.lines.length-1,r=e.split(/\r?\n/),o=this.lines[i]+r[0];this.lines[i]=o;let s=r.slice(1);this.lines=this.lines.concat(s),this.created&&(t.pauseNotification(),t.call("setbufline",[this.bufname,"$",o],!0),s.length&&t.call("appendbufline",[this.bufname,"$",s],!0),t.resumeNotification(!1,!0))}append(e){!this.validate()||this._append(e)}appendLine(e){!this.validate()||this._append(e+` -`)}clear(e){let{nvim:t}=this;!this.validate()||!t||(this.lines=e?this.lines.slice(-e):[],this.created&&(t.pauseNotification(),t.call("deletebufline",[this.bufname,1,"$"],!0),this.lines.length&&t.call("appendbufline",[this.bufname,"$",this.lines],!0),t.resumeNotification(!0,!0)))}hide(){this.created=!1,this.nvim&&this.nvim.command(`exe 'silent! bd! '.fnameescape('${this.bufname}')`,!0)}get bufname(){return`output:///${this.name}`}show(e,t="vs"){let{nvim:i}=this;!i||(i.pauseNotification(),i.command(`exe '${t} '.fnameescape('${this.bufname}')`,!0),e&&i.command("wincmd p",!0),i.resumeNotification(!0,!0),this.created=!0)}validate(){return!this._disposed}dispose(){this.onDispose&&this.onDispose(),this._disposed=!0,this.hide(),this.lines=[]}}});var f_e,JE,hs,jw=k(()=>{"use strict";fe();rY();f_e=q()("core-channels"),JE=class{constructor(){this.outputChannels=new Map;this.bufnrs=new Map;this.disposable=P.on("BufUnload",e=>{let t=this.bufnrs.get(e);if(t){let i=this.outputChannels.get(t);i&&(i.created=!1)}})}getProvider(e){return{onDidChange:null,provideTextDocumentContent:async i=>{let r=this.get(i.path.slice(1));if(!r)return"";e.pauseNotification(),e.call("bufnr",["%"],!0),e.command("setlocal nospell nofoldenable nowrap noswapfile",!0),e.command("setlocal buftype=nofile bufhidden=hide",!0),e.command("setfiletype log",!0);let o=await e.resumeNotification();return this.bufnrs.set(o[0][0],r.name),r.created=!0,r.content}}}get names(){return Array.from(this.outputChannels.keys())}get(e){return this.outputChannels.get(e)}create(e,t){if(this.outputChannels.has(e))return this.outputChannels.get(e);let i=new sp(e,t,()=>{this.outputChannels.delete(e)});return this.outputChannels.set(e,i),i}show(e,t,i){let r=this.outputChannels.get(e);!r||r.show(i,t)}dispose(){this.disposable.dispose();for(let e of this.outputChannels.values())e.dispose();this.outputChannels.clear()}},hs=new JE});var b_e,ap,oY=k(()=>{"use strict";b_e=q()("model-terminal"),ap=class{constructor(e,t,i,r,o){this.cmd=e;this.args=t;this.nvim=i;this._name=r;this.strictEnv=o;this.pid=0}async start(e,t){let{nvim:i}=this,r=[this.cmd,...this.args],[o,s]=await i.call("coc#terminal#start",[r,e,t||{},!!this.strictEnv]);this.bufnr=o,this.pid=s}onExit(e){this.exitStatus={code:e===-1?void 0:e}}get name(){return this._name||this.cmd}get processId(){return Promise.resolve(this.pid)}sendText(e,t=!0){!this.bufnr||this.nvim.call("coc#terminal#send",[this.bufnr,e,t],!0)}async show(e){let{bufnr:t,nvim:i}=this;if(!t)return!1;let[r,o,s]=await i.eval(`[bufloaded(${t}),bufwinid(${t}),win_getid()]`);return r?(s==o||(i.pauseNotification(),o==-1?(i.command(`below ${t}sb`,!0),i.command("resize 8",!0),i.call("coc#util#do_autocmd",["CocTerminalOpen"],!0)):i.call("win_gotoid",[o],!0),i.command("normal! G",!0),e&&i.command("wincmd p",!0),await i.resumeNotification()),!0):!1}async hide(){let{bufnr:e,nvim:t}=this;!e||await t.eval(`coc#window#close(bufwinid(${e}))`)}dispose(){this.exitStatus||(this.exitStatus={code:void 0});let{bufnr:e,nvim:t}=this;!e||(this.bufnr=void 0,t.call("coc#terminal#close",[e],!0))}}});var $E,tme,lp,sY=k(()=>{"use strict";oY();$E=S(W());re();fe();tme=q()("core-terminals"),lp=class{constructor(){this._terminals=new Map;this.disposables=[];this._onDidOpenTerminal=new $E.Emitter;this._onDidCloseTerminal=new $E.Emitter;this.onDidCloseTerminal=this._onDidCloseTerminal.event;this.onDidOpenTerminal=this._onDidOpenTerminal.event;P.on("BufUnload",e=>{if(this._terminals.has(e)){tme.debug("terminal detach",e);let t=this._terminals.get(e);this._onDidCloseTerminal.fire(t),this._terminals.delete(e)}},null,this.disposables),P.on("TermExit",(e,t)=>{let i=this._terminals.get(e);i&&(i.onExit(t),i.dispose())},null,this.disposables)}get terminals(){return Array.from(this._terminals.values())}async createTerminal(e,t){let i=t.cwd,r=t.shellPath,o=t.shellArgs;r||(r=await e.getOption("shell")),i||(i=await e.call("getcwd"));let s=new ap(r,o||[],e,t.name,t.strictEnv);return await s.start(i,t.env),this._terminals.set(s.bufnr,s),this._onDidOpenTerminal.fire(s),s}reset(){for(let e of this._terminals.values())e.dispose();this._terminals.clear()}dispose(){this._onDidOpenTerminal.dispose(),this._onDidCloseTerminal.dispose(),U(this.disposables),this.reset()}}});function gY(){return{baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}function ime(n){oh=n}function Si(n,e){if(e){if(nme.test(n))return n.replace(rme,aY)}else if(ome.test(n))return n.replace(sme,aY);return n}function pY(n){return n.replace(lme,(e,t)=>(t=t.toLowerCase(),t==="colon"?":":t.charAt(0)==="#"?t.charAt(1)==="x"?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""))}function mt(n,e){n=n.source||n,e=e||"";let t={replace:(i,r)=>(r=r.source||r,r=r.replace(ume,"$1"),n=n.replace(i,r),t),getRegex:()=>new RegExp(n,e)};return t}function lY(n,e,t){if(n){let i;try{i=decodeURIComponent(pY(t)).replace(cme,"").toLowerCase()}catch{return null}if(i.indexOf("javascript:")===0||i.indexOf("vbscript:")===0||i.indexOf("data:")===0)return null}e&&!hme.test(t)&&(t=fme(e,t));try{t=encodeURI(t).replace(/%25/g,"%")}catch{return null}return t}function fme(n,e){Mw[" "+n]||(dme.test(n)?Mw[" "+n]=n+"/":Mw[" "+n]=Ow(n,"/",!0)),n=Mw[" "+n];let t=n.indexOf(":")===-1;return e.substring(0,2)==="//"?t?e:n.replace(gme,"$1")+e:e.charAt(0)==="/"?t?e:n.replace(pme,"$1")+e:n+e}function no(n){let e=1,t,i;for(;e{let l=!1,u=s;for(;--u>=0&&a[u]==="\\";)l=!l;return l?"|":" |"}),i=t.split(/ \|/),r=0;if(i[0].trim()||i.shift(),i.length>0&&!i[i.length-1].trim()&&i.pop(),i.length>e)i.splice(e);else for(;i.length1;)e&1&&(t+=n),e>>=1,n+=n;return t+n}function hY(n,e,t,i){let r=e.href,o=e.title?Si(e.title):null,s=n[1].replace(/\\([\[\]])/g,"$1");if(n[0].charAt(0)!=="!"){i.state.inLink=!0;let a={type:"link",raw:t,href:r,title:o,text:s,tokens:i.inlineTokens(s,[])};return i.state.inLink=!1,a}else return{type:"image",raw:t,href:r,title:o,text:Si(s)}}function bme(n,e){let t=n.match(/^(\s+)(?:```)/);if(t===null)return e;let i=t[1];return e.split(` -`).map(r=>{let o=r.match(/^\s+/);if(o===null)return r;let[s]=o;return s.length>=i.length?r.slice(i.length):r}).join(` -`)}function yme(n){return n.replace(/---/g,"\u2014").replace(/--/g,"\u2013").replace(/(^|[-\u2014/(\[{"\s])'/g,"$1\u2018").replace(/'/g,"\u2019").replace(/(^|[-\u2014/(\[{\u2018\s])"/g,"$1\u201C").replace(/"/g,"\u201D").replace(/\.{3}/g,"\u2026")}function dY(n){let e="",t,i,r=n.length;for(t=0;t.5&&(i="x"+i.toString(16)),e+="&#"+i+";";return e}function ke(n,e,t){if(typeof n>"u"||n===null)throw new Error("marked(): input parameter is undefined or null");if(typeof n!="string")throw new Error("marked(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected");if(typeof e=="function"&&(t=e,e=null),e=no({},ke.defaults,e||{}),fY(e),t){let i=e.highlight,r;try{r=to.lex(n,e)}catch(a){return t(a)}let o=function(a){let l;if(!a)try{e.walkTokens&&ke.walkTokens(r,e.walkTokens),l=io.parse(r,e)}catch(u){a=u}return e.highlight=i,a?t(a):t(null,l)};if(!i||i.length<3||(delete e.highlight,!r.length))return o();let s=0;ke.walkTokens(r,function(a){a.type==="code"&&(s++,setTimeout(()=>{i(a.text,a.lang,function(l,u){if(l)return o(l);u!=null&&u!==a.text&&(a.text=u,a.escaped=!0),s--,s===0&&o()})},0))}),s===0&&o();return}try{let i=to.lex(n,e);return e.walkTokens&&ke.walkTokens(i,e.walkTokens),io.parse(i,e)}catch(i){if(i.message+=` -Please report this to https://github.com/markedjs/marked.`,e.silent)return"

An error occurred:

"+Si(i.message+"",!0)+"
";throw i}}var oh,nme,rme,ome,sme,ame,aY,lme,ume,cme,hme,Mw,dme,gme,pme,Aw,up,ve,se,to,cp,Nw,Hw,io,k_e,P_e,E_e,R_e,__e,L_e,I_e,mY=k(()=>{oh=gY();nme=/[&<>"']/,rme=/[&<>"']/g,ome=/[<>"']|&(?!#?\w+;)/,sme=/[<>"']|&(?!#?\w+;)/g,ame={"&":"&","<":"<",">":">",'"':""","'":"'"},aY=n=>ame[n];lme=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/ig;ume=/(^|[^\[])\^/g;cme=/[^\w:]/g,hme=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;Mw={},dme=/^[^:]+:\/*[^/]*$/,gme=/^([^:]+:)[\s\S]*$/,pme=/^([^:]+:\/*[^/]*)[\s\S]*$/;Aw={exec:function(){}};up=class{constructor(e){this.options=e||oh}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let i=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?i:Ow(i,` -`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let i=t[0],r=bme(i,t[3]||"");return{type:"code",raw:i,lang:t[2]?t[2].trim():t[2],text:r}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let i=t[2].trim();if(/#$/.test(i)){let o=Ow(i,"#");(this.options.pedantic||!o||/ $/.test(o))&&(i=o.trim())}let r={type:"heading",raw:t[0],depth:t[1].length,text:i,tokens:[]};return this.lexer.inline(r.text,r.tokens),r}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let i=t[0].replace(/^ *> ?/gm,"");return{type:"blockquote",raw:t[0],tokens:this.lexer.blockTokens(i,[]),text:i}}}list(e){let t=this.rules.block.list.exec(e);if(t){let i,r,o,s,a,l,u,c,h,d,g,p,f=t[1].trim(),m=f.length>1,b={type:"list",raw:"",ordered:m,start:m?+f.slice(0,-1):"",loose:!1,items:[]};f=m?`\\d{1,9}\\${f.slice(-1)}`:`\\${f}`,this.options.pedantic&&(f=m?f:"[*+-]");let w=new RegExp(`^( {0,3}${f})((?: [^\\n]*)?(?:\\n|$))`);for(;e&&(p=!1,!(!(t=w.exec(e))||this.rules.block.hr.test(e)));){if(i=t[0],e=e.substring(i.length),c=t[2].split(` -`,1)[0],h=e.split(` -`,1)[0],this.options.pedantic?(s=2,g=c.trimLeft()):(s=t[2].search(/[^ ]/),s=s>4?1:s,g=c.slice(s),s+=t[1].length),l=!1,!c&&/^ *$/.test(h)&&(i+=h+` -`,e=e.substring(h.length+1),p=!0),!p){let T=new RegExp(`^ {0,${Math.min(3,s-1)}}(?:[*+-]|\\d{1,9}[.)])`);for(;e&&(d=e.split(` -`,1)[0],c=d,this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!T.test(c));){if(c.search(/[^ ]/)>=s||!c.trim())g+=` -`+c.slice(s);else if(!l)g+=` -`+c;else break;!l&&!c.trim()&&(l=!0),i+=d+` -`,e=e.substring(d.length+1)}}b.loose||(u?b.loose=!0:/\n *\n *$/.test(i)&&(u=!0)),this.options.gfm&&(r=/^\[[ xX]\] /.exec(g),r&&(o=r[0]!=="[ ] ",g=g.replace(/^\[[ xX]\] +/,""))),b.items.push({type:"list_item",raw:i,task:!!r,checked:o,loose:!1,text:g}),b.raw+=i}b.items[b.items.length-1].raw=i.trimRight(),b.items[b.items.length-1].text=g.trimRight(),b.raw=b.raw.trimRight();let x=b.items.length;for(a=0;aF.type==="space"),R=T.every(F=>{let N=F.raw.split(""),J=0;for(let H of N)if(H===` -`&&(J+=1),J>1)return!0;return!1});!b.loose&&T.length&&R&&(b.loose=!0,b.items[a].loose=!0)}return b}}html(e){let t=this.rules.block.html.exec(e);if(t){let i={type:"html",raw:t[0],pre:!this.options.sanitizer&&(t[1]==="pre"||t[1]==="script"||t[1]==="style"),text:t[0]};return this.options.sanitize&&(i.type="paragraph",i.text=this.options.sanitizer?this.options.sanitizer(t[0]):Si(t[0]),i.tokens=[],this.lexer.inline(i.text,i.tokens)),i}}def(e){let t=this.rules.block.def.exec(e);if(t){t[3]&&(t[3]=t[3].substring(1,t[3].length-1));let i=t[1].toLowerCase().replace(/\s+/g," ");return{type:"def",tag:i,raw:t[0],href:t[2],title:t[3]}}}table(e){let t=this.rules.block.table.exec(e);if(t){let i={type:"table",header:uY(t[1]).map(r=>({text:r})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split(` -`):[]};if(i.header.length===i.align.length){i.raw=t[0];let r=i.align.length,o,s,a,l;for(o=0;o({text:u}));for(r=i.header.length,s=0;s/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):Si(t[0]):t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let i=t[2].trim();if(!this.options.pedantic&&/^$/.test(i))return;let s=Ow(i.slice(0,-1),"\\");if((i.length-s.length)%2===0)return}else{let s=mme(t[2],"()");if(s>-1){let l=(t[0].indexOf("!")===0?5:4)+t[1].length+s;t[2]=t[2].substring(0,s),t[0]=t[0].substring(0,l).trim(),t[3]=""}}let r=t[2],o="";if(this.options.pedantic){let s=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(r);s&&(r=s[1],o=s[3])}else o=t[3]?t[3].slice(1,-1):"";return r=r.trim(),/^$/.test(i)?r=r.slice(1):r=r.slice(1,-1)),hY(t,{href:r&&r.replace(this.rules.inline._escapes,"$1"),title:o&&o.replace(this.rules.inline._escapes,"$1")},t[0],this.lexer)}}reflink(e,t){let i;if((i=this.rules.inline.reflink.exec(e))||(i=this.rules.inline.nolink.exec(e))){let r=(i[2]||i[1]).replace(/\s+/g," ");if(r=t[r.toLowerCase()],!r||!r.href){let o=i[0].charAt(0);return{type:"text",raw:o,text:o}}return hY(i,r,i[0],this.lexer)}}emStrong(e,t,i=""){let r=this.rules.inline.emStrong.lDelim.exec(e);if(!r||r[3]&&i.match(/[\p{L}\p{N}]/u))return;let o=r[1]||r[2]||"";if(!o||o&&(i===""||this.rules.inline.punctuation.exec(i))){let s=r[0].length-1,a,l,u=s,c=0,h=r[0][0]==="*"?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(h.lastIndex=0,t=t.slice(-1*e.length+s);(r=h.exec(t))!=null;){if(a=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!a)continue;if(l=a.length,r[3]||r[4]){u+=l;continue}else if((r[5]||r[6])&&s%3&&!((s+l)%3)){c+=l;continue}if(u-=l,u>0)continue;if(l=Math.min(l,l+u+c),Math.min(s,l)%2){let g=e.slice(1,s+r.index+l);return{type:"em",raw:e.slice(0,s+r.index+l+1),text:g,tokens:this.lexer.inlineTokens(g,[])}}let d=e.slice(2,s+r.index+l-1);return{type:"strong",raw:e.slice(0,s+r.index+l+1),text:d,tokens:this.lexer.inlineTokens(d,[])}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let i=t[2].replace(/\n/g," "),r=/[^ ]/.test(i),o=/^ /.test(i)&&/ $/.test(i);return r&&o&&(i=i.substring(1,i.length-1)),i=Si(i,!0),{type:"codespan",raw:t[0],text:i}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2],[])}}autolink(e,t){let i=this.rules.inline.autolink.exec(e);if(i){let r,o;return i[2]==="@"?(r=Si(this.options.mangle?t(i[1]):i[1]),o="mailto:"+r):(r=Si(i[1]),o=r),{type:"link",raw:i[0],text:r,href:o,tokens:[{type:"text",raw:r,text:r}]}}}url(e,t){let i;if(i=this.rules.inline.url.exec(e)){let r,o;if(i[2]==="@")r=Si(this.options.mangle?t(i[0]):i[0]),o="mailto:"+r;else{let s;do s=i[0],i[0]=this.rules.inline._backpedal.exec(i[0])[0];while(s!==i[0]);r=Si(i[0]),i[1]==="www."?o="http://"+r:o=r}return{type:"link",raw:i[0],text:r,href:o,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(e,t){let i=this.rules.inline.text.exec(e);if(i){let r;return this.lexer.state.inRawBlock?r=this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):Si(i[0]):i[0]:r=Si(this.options.smartypants?t(i[0]):i[0]),{type:"text",raw:i[0],text:r}}}},ve={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)( [^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:Aw,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/};ve._label=/(?!\s*\])(?:\\.|[^\[\]\\])+/;ve._title=/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/;ve.def=mt(ve.def).replace("label",ve._label).replace("title",ve._title).getRegex();ve.bullet=/(?:[*+-]|\d{1,9}[.)])/;ve.listItemStart=mt(/^( *)(bull) */).replace("bull",ve.bullet).getRegex();ve.list=mt(ve.list).replace(/bull/g,ve.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+ve.def.source+")").getRegex();ve._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul";ve._comment=/|$)/;ve.html=mt(ve.html,"i").replace("comment",ve._comment).replace("tag",ve._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex();ve.paragraph=mt(ve._paragraph).replace("hr",ve.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ve._tag).getRegex();ve.blockquote=mt(ve.blockquote).replace("paragraph",ve.paragraph).getRegex();ve.normal=no({},ve);ve.gfm=no({},ve.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"});ve.gfm.table=mt(ve.gfm.table).replace("hr",ve.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ve._tag).getRegex();ve.gfm.paragraph=mt(ve._paragraph).replace("hr",ve.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",ve.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",ve._tag).getRegex();ve.pedantic=no({},ve.normal,{html:mt(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",ve._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Aw,paragraph:mt(ve.normal._paragraph).replace("hr",ve.hr).replace("heading",` *#{1,6} *[^ -]`).replace("lheading",ve.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});se={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:Aw,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:Aw,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\?@\\[\\]`^{|}~";se.punctuation=mt(se.punctuation).replace(/punctuation/g,se._punctuation).getRegex();se.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g;se.escapedEmSt=/\\\*|\\_/g;se._comment=mt(ve._comment).replace("(?:-->|$)","-->").getRegex();se.emStrong.lDelim=mt(se.emStrong.lDelim).replace(/punct/g,se._punctuation).getRegex();se.emStrong.rDelimAst=mt(se.emStrong.rDelimAst,"g").replace(/punct/g,se._punctuation).getRegex();se.emStrong.rDelimUnd=mt(se.emStrong.rDelimUnd,"g").replace(/punct/g,se._punctuation).getRegex();se._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g;se._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;se._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;se.autolink=mt(se.autolink).replace("scheme",se._scheme).replace("email",se._email).getRegex();se._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;se.tag=mt(se.tag).replace("comment",se._comment).replace("attribute",se._attribute).getRegex();se._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;se._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;se._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;se.link=mt(se.link).replace("label",se._label).replace("href",se._href).replace("title",se._title).getRegex();se.reflink=mt(se.reflink).replace("label",se._label).replace("ref",ve._label).getRegex();se.nolink=mt(se.nolink).replace("ref",ve._label).getRegex();se.reflinkSearch=mt(se.reflinkSearch,"g").replace("reflink",se.reflink).replace("nolink",se.nolink).getRegex();se.normal=no({},se);se.pedantic=no({},se.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:mt(/^!?\[(label)\]\((.*?)\)/).replace("label",se._label).getRegex(),reflink:mt(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",se._label).getRegex()});se.gfm=no({},se.normal,{escape:mt(se.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\(i=a.call({lexer:this},e,t))?(e=e.substring(i.raw.length),t.push(i),!0):!1))){if(i=this.tokenizer.space(e)){e=e.substring(i.raw.length),i.raw.length===1&&t.length>0?t[t.length-1].raw+=` -`:t.push(i);continue}if(i=this.tokenizer.code(e)){e=e.substring(i.raw.length),r=t[t.length-1],r&&(r.type==="paragraph"||r.type==="text")?(r.raw+=` -`+i.raw,r.text+=` -`+i.text,this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(i);continue}if(i=this.tokenizer.fences(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.heading(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.hr(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.blockquote(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.list(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.html(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.def(e)){e=e.substring(i.raw.length),r=t[t.length-1],r&&(r.type==="paragraph"||r.type==="text")?(r.raw+=` -`+i.raw,r.text+=` -`+i.raw,this.inlineQueue[this.inlineQueue.length-1].src=r.text):this.tokens.links[i.tag]||(this.tokens.links[i.tag]={href:i.href,title:i.title});continue}if(i=this.tokenizer.table(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.lheading(e)){e=e.substring(i.raw.length),t.push(i);continue}if(o=e,this.options.extensions&&this.options.extensions.startBlock){let a=1/0,l=e.slice(1),u;this.options.extensions.startBlock.forEach(function(c){u=c.call({lexer:this},l),typeof u=="number"&&u>=0&&(a=Math.min(a,u))}),a<1/0&&a>=0&&(o=e.substring(0,a+1))}if(this.state.top&&(i=this.tokenizer.paragraph(o))){r=t[t.length-1],s&&r.type==="paragraph"?(r.raw+=` -`+i.raw,r.text+=` -`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(i),s=o.length!==e.length,e=e.substring(i.raw.length);continue}if(i=this.tokenizer.text(e)){e=e.substring(i.raw.length),r=t[t.length-1],r&&r.type==="text"?(r.raw+=` -`+i.raw,r.text+=` -`+i.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(i);continue}if(e){let a="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(a);break}else throw new Error(a)}}return this.state.top=!0,t}inline(e,t){this.inlineQueue.push({src:e,tokens:t})}inlineTokens(e,t=[]){let i,r,o,s=e,a,l,u;if(this.tokens.links){let c=Object.keys(this.tokens.links);if(c.length>0)for(;(a=this.tokenizer.rules.inline.reflinkSearch.exec(s))!=null;)c.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(s=s.slice(0,a.index)+"["+cY("a",a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(a=this.tokenizer.rules.inline.blockSkip.exec(s))!=null;)s=s.slice(0,a.index)+"["+cY("a",a[0].length-2)+"]"+s.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(a=this.tokenizer.rules.inline.escapedEmSt.exec(s))!=null;)s=s.slice(0,a.index)+"++"+s.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(l||(u=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(c=>(i=c.call({lexer:this},e,t))?(e=e.substring(i.raw.length),t.push(i),!0):!1))){if(i=this.tokenizer.escape(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.tag(e)){e=e.substring(i.raw.length),r=t[t.length-1],r&&i.type==="text"&&r.type==="text"?(r.raw+=i.raw,r.text+=i.text):t.push(i);continue}if(i=this.tokenizer.link(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(i.raw.length),r=t[t.length-1],r&&i.type==="text"&&r.type==="text"?(r.raw+=i.raw,r.text+=i.text):t.push(i);continue}if(i=this.tokenizer.emStrong(e,s,u)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.codespan(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.br(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.del(e)){e=e.substring(i.raw.length),t.push(i);continue}if(i=this.tokenizer.autolink(e,dY)){e=e.substring(i.raw.length),t.push(i);continue}if(!this.state.inLink&&(i=this.tokenizer.url(e,dY))){e=e.substring(i.raw.length),t.push(i);continue}if(o=e,this.options.extensions&&this.options.extensions.startInline){let c=1/0,h=e.slice(1),d;this.options.extensions.startInline.forEach(function(g){d=g.call({lexer:this},h),typeof d=="number"&&d>=0&&(c=Math.min(c,d))}),c<1/0&&c>=0&&(o=e.substring(0,c+1))}if(i=this.tokenizer.inlineText(o,yme)){e=e.substring(i.raw.length),i.raw.slice(-1)!=="_"&&(u=i.raw.slice(-1)),l=!0,r=t[t.length-1],r&&r.type==="text"?(r.raw+=i.raw,r.text+=i.text):t.push(i);continue}if(e){let c="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(c);break}else throw new Error(c)}}return t}},cp=class{constructor(e){this.options=e||oh}code(e,t,i){let r=(t||"").match(/\S*/)[0];if(this.options.highlight){let o=this.options.highlight(e,r);o!=null&&o!==e&&(i=!0,e=o)}return e=e.replace(/\n$/,"")+` -`,r?'
'+(i?e:Si(e,!0))+`
-`:"
"+(i?e:Si(e,!0))+`
-`}blockquote(e){return`
-`+e+`
-`}html(e){return e}heading(e,t,i,r){return this.options.headerIds?"'+e+" -`:""+e+" -`}hr(){return this.options.xhtml?`
-`:`
-`}list(e,t,i){let r=t?"ol":"ul",o=t&&i!==1?' start="'+i+'"':"";return"<"+r+o+`> -`+e+" -`}listitem(e){return"
  • "+e+`
  • -`}checkbox(e){return" "}paragraph(e){return"

    "+e+`

    -`}table(e,t){return t&&(t=""+t+""),` - -`+e+` -`+t+`
    -`}tablerow(e){return` -`+e+` -`}tablecell(e,t){let i=t.header?"th":"td";return(t.align?"<"+i+' align="'+t.align+'">':"<"+i+">")+e+" -`}strong(e){return""+e+""}em(e){return""+e+""}codespan(e){return""+e+""}br(){return this.options.xhtml?"
    ":"
    "}del(e){return""+e+""}link(e,t,i){if(e=lY(this.options.sanitize,this.options.baseUrl,e),e===null)return i;let r='
    ",r}image(e,t,i){if(e=lY(this.options.sanitize,this.options.baseUrl,e),e===null)return i;let r=''+i+'":">",r}text(e){return e}},Nw=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,i){return""+i}image(e,t,i){return""+i}br(){return""}},Hw=class{constructor(){this.seen={}}serialize(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/ig,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")}getNextSafeSlug(e,t){let i=e,r=0;if(this.seen.hasOwnProperty(i)){r=this.seen[e];do r++,i=e+"-"+r;while(this.seen.hasOwnProperty(i))}return t||(this.seen[e]=r,this.seen[i]=0),i}slug(e,t={}){let i=this.serialize(e);return this.getNextSafeSlug(i,t.dryrun)}},io=class{constructor(e){this.options=e||oh,this.options.renderer=this.options.renderer||new cp,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Nw,this.slugger=new Hw}static parse(e,t){return new io(t).parse(e)}static parseInline(e,t){return new io(t).parseInline(e)}parse(e,t=!0){let i="",r,o,s,a,l,u,c,h,d,g,p,f,m,b,w,x,T,R,F,N=e.length;for(r=0;r0&&w.tokens[0].type==="paragraph"?(w.tokens[0].text=R+" "+w.tokens[0].text,w.tokens[0].tokens&&w.tokens[0].tokens.length>0&&w.tokens[0].tokens[0].type==="text"&&(w.tokens[0].tokens[0].text=R+" "+w.tokens[0].tokens[0].text)):w.tokens.unshift({type:"text",text:R}):b+=R),b+=this.parse(w.tokens,m),d+=this.renderer.listitem(b,T,x);i+=this.renderer.list(d,p,f);continue}case"html":{i+=this.renderer.html(g.text);continue}case"paragraph":{i+=this.renderer.paragraph(this.parseInline(g.tokens));continue}case"text":{for(d=g.tokens?this.parseInline(g.tokens):g.text;r+1{if(r.extensions&&(i=!0,r.extensions.forEach(o=>{if(!o.name)throw new Error("extension name required");if(o.renderer){let s=t.renderers?t.renderers[o.name]:null;s?t.renderers[o.name]=function(...a){let l=o.renderer.apply(this,a);return l===!1&&(l=s.apply(this,a)),l}:t.renderers[o.name]=o.renderer}if(o.tokenizer){if(!o.level||o.level!=="block"&&o.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");t[o.level]?t[o.level].unshift(o.tokenizer):t[o.level]=[o.tokenizer],o.start&&(o.level==="block"?t.startBlock?t.startBlock.push(o.start):t.startBlock=[o.start]:o.level==="inline"&&(t.startInline?t.startInline.push(o.start):t.startInline=[o.start]))}o.childTokens&&(t.childTokens[o.name]=o.childTokens)})),r.renderer){let o=ke.defaults.renderer||new cp;for(let s in r.renderer){let a=o[s];o[s]=(...l)=>{let u=r.renderer[s].apply(o,l);return u===!1&&(u=a.apply(o,l)),u}}e.renderer=o}if(r.tokenizer){let o=ke.defaults.tokenizer||new up;for(let s in r.tokenizer){let a=o[s];o[s]=(...l)=>{let u=r.tokenizer[s].apply(o,l);return u===!1&&(u=a.apply(o,l)),u}}e.tokenizer=o}if(r.walkTokens){let o=ke.defaults.walkTokens;e.walkTokens=function(s){r.walkTokens.call(this,s),o&&o.call(this,s)}}i&&(e.extensions=t),ke.setOptions(e)})};ke.walkTokens=function(n,e){for(let t of n)switch(e.call(ke,t),t.type){case"table":{for(let i of t.header)ke.walkTokens(i.tokens,e);for(let i of t.rows)for(let r of i)ke.walkTokens(r.tokens,e);break}case"list":{ke.walkTokens(t.items,e);break}default:ke.defaults.extensions&&ke.defaults.extensions.childTokens&&ke.defaults.extensions.childTokens[t.type]?ke.defaults.extensions.childTokens[t.type].forEach(function(i){ke.walkTokens(t[i],e)}):t.tokens&&ke.walkTokens(t.tokens,e)}};ke.parseInline=function(n,e){if(typeof n>"u"||n===null)throw new Error("marked.parseInline(): input parameter is undefined or null");if(typeof n!="string")throw new Error("marked.parseInline(): input parameter is of type "+Object.prototype.toString.call(n)+", string expected");e=no({},ke.defaults,e||{}),fY(e);try{let t=to.lexInline(n,e);return e.walkTokens&&ke.walkTokens(t,e.walkTokens),io.parseInline(t,e)}catch(t){if(t.message+=` -Please report this to https://github.com/markedjs/marked.`,e.silent)return"

    An error occurred:

    "+Si(t.message+"",!0)+"
    ";throw t}};ke.Parser=io;ke.parser=io.parse;ke.Renderer=cp;ke.TextRenderer=Nw;ke.Lexer=to;ke.lexer=to.lex;ke.Tokenizer=up;ke.Slugger=Hw;ke.parse=ke;k_e=ke.options,P_e=ke.setOptions,E_e=ke.use,R_e=ke.walkTokens,__e=ke.parseInline,L_e=io.parse,I_e=to.lex});var wY=y((j_e,vY)=>{var yY={};vY.exports=yY;var bY={reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29],black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],gray:[90,39],grey:[90,39],bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],blackBG:[40,49],redBG:[41,49],greenBG:[42,49],yellowBG:[43,49],blueBG:[44,49],magentaBG:[45,49],cyanBG:[46,49],whiteBG:[47,49]};Object.keys(bY).forEach(function(n){var e=bY[n],t=yY[n]=[];t.open="\x1B["+e[0]+"m",t.close="\x1B["+e[1]+"m"})});var CY=y((M_e,xY)=>{var hp=process.argv;xY.exports=function(){return hp.indexOf("--no-color")!==-1||hp.indexOf("--color=false")!==-1?!1:hp.indexOf("--color")!==-1||hp.indexOf("--color=true")!==-1||hp.indexOf("--color=always")!==-1?!0:process.stdout&&!process.stdout.isTTY?!1:process.platform==="win32"||"COLORTERM"in process.env?!0:process.env.TERM==="dumb"?!1:!!/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)}()});var DY=y((O_e,SY)=>{SY.exports=function(e,t){var i="";e=e||"Run the trap, drop the bass",e=e.split("");var r={a:["@","\u0104","\u023A","\u0245","\u0394","\u039B","\u0414"],b:["\xDF","\u0181","\u0243","\u026E","\u03B2","\u0E3F"],c:["\xA9","\u023B","\u03FE"],d:["\xD0","\u018A","\u0500","\u0501","\u0502","\u0503"],e:["\xCB","\u0115","\u018E","\u0258","\u03A3","\u03BE","\u04BC","\u0A6C"],f:["\u04FA"],g:["\u0262"],h:["\u0126","\u0195","\u04A2","\u04BA","\u04C7","\u050A"],i:["\u0F0F"],j:["\u0134"],k:["\u0138","\u04A0","\u04C3","\u051E"],l:["\u0139"],m:["\u028D","\u04CD","\u04CE","\u0520","\u0521","\u0D69"],n:["\xD1","\u014B","\u019D","\u0376","\u03A0","\u048A"],o:["\xD8","\xF5","\xF8","\u01FE","\u0298","\u047A","\u05DD","\u06DD","\u0E4F"],p:["\u01F7","\u048E"],q:["\u09CD"],r:["\xAE","\u01A6","\u0210","\u024C","\u0280","\u042F"],s:["\xA7","\u03DE","\u03DF","\u03E8"],t:["\u0141","\u0166","\u0373"],u:["\u01B1","\u054D"],v:["\u05D8"],w:["\u0428","\u0460","\u047C","\u0D70"],x:["\u04B2","\u04FE","\u04FC","\u04FD"],y:["\xA5","\u04B0","\u04CB"],z:["\u01B5","\u0240"]};return e.forEach(function(o){o=o.toLowerCase();var s=r[o]||[" "],a=Math.floor(Math.random()*s.length);typeof r[o]<"u"?i+=r[o][a]:i+=o}),i}});var kY=y((A_e,TY)=>{TY.exports=function(e,t){e=e||" he is here ";var i={up:["\u030D","\u030E","\u0304","\u0305","\u033F","\u0311","\u0306","\u0310","\u0352","\u0357","\u0351","\u0307","\u0308","\u030A","\u0342","\u0313","\u0308","\u034A","\u034B","\u034C","\u0303","\u0302","\u030C","\u0350","\u0300","\u0301","\u030B","\u030F","\u0312","\u0313","\u0314","\u033D","\u0309","\u0363","\u0364","\u0365","\u0366","\u0367","\u0368","\u0369","\u036A","\u036B","\u036C","\u036D","\u036E","\u036F","\u033E","\u035B","\u0346","\u031A"],down:["\u0316","\u0317","\u0318","\u0319","\u031C","\u031D","\u031E","\u031F","\u0320","\u0324","\u0325","\u0326","\u0329","\u032A","\u032B","\u032C","\u032D","\u032E","\u032F","\u0330","\u0331","\u0332","\u0333","\u0339","\u033A","\u033B","\u033C","\u0345","\u0347","\u0348","\u0349","\u034D","\u034E","\u0353","\u0354","\u0355","\u0356","\u0359","\u035A","\u0323"],mid:["\u0315","\u031B","\u0300","\u0301","\u0358","\u0321","\u0322","\u0327","\u0328","\u0334","\u0335","\u0336","\u035C","\u035D","\u035E","\u035F","\u0360","\u0362","\u0338","\u0337","\u0361"," \u0489"]},r=[].concat(i.up,i.down,i.mid),o={};function s(u){var c=Math.floor(Math.random()*u);return c}function a(u){var c=!1;return r.filter(function(h){c=h===u}),c}function l(u,c){var h="",d,g;c=c||{},c.up=c.up||!0,c.mid=c.mid||!0,c.down=c.down||!0,c.size=c.size||"maxi",u=u.split("");for(g in u)if(!a(g)){switch(h=h+u[g],d={up:0,down:0,mid:0},c.size){case"mini":d.up=s(8),d.min=s(2),d.down=s(8);break;case"maxi":d.up=s(16)+3,d.min=s(4)+1,d.down=s(64)+3;break;default:d.up=s(8)+1,d.mid=s(6)/2,d.down=s(8)+1;break}var p=["up","mid","down"];for(var f in p)for(var m=p[f],b=0;b<=d[m];b++)c[m]&&(h=h+i[m][s(i[m].length)])}return h}return l(e)}});var EY=y((N_e,PY)=>{var UE=sh();PY.exports=function(){return function(n,e,t){if(n===" ")return n;switch(e%3){case 0:return UE.red(n);case 1:return UE.white(n);case 2:return UE.blue(n)}}}()});var _Y=y((H_e,RY)=>{var vme=sh();RY.exports=function(n,e,t){return e%2===0?n:vme.inverse(n)}});var IY=y((q_e,LY)=>{var wme=sh();LY.exports=function(){var n=["red","yellow","green","blue","magenta"];return function(e,t,i){return e===" "?e:wme[n[t++%n.length]](e)}}()});var jY=y((B_e,FY)=>{var xme=sh();FY.exports=function(){var n=["underline","inverse","grey","yellow","red","green","blue","white","cyan","magenta"];return function(e,t,i){return e===" "?e:xme[n[Math.round(Math.random()*(n.length-1))]](e)}}()});var sh=y((Y_e,qY)=>{var ht={};qY.exports=ht;ht.themes={};var Da=ht.styles=wY(),AY=Object.defineProperties;ht.supportsColor=CY();typeof ht.enabled>"u"&&(ht.enabled=ht.supportsColor);ht.stripColors=ht.strip=function(n){return(""+n).replace(/\x1B\[\d+m/g,"")};var W_e=ht.stylize=function(e,t){return Da[t].open+e+Da[t].close},Cme=/[|\\{}()[\]^$+*?.]/g,Sme=function(n){if(typeof n!="string")throw new TypeError("Expected a string");return n.replace(Cme,"\\$&")};function NY(n){var e=function t(){return Tme.apply(t,arguments)};return e._styles=n,e.__proto__=Dme,e}var HY=function(){var n={};return Da.grey=Da.gray,Object.keys(Da).forEach(function(e){Da[e].closeRe=new RegExp(Sme(Da[e].close),"g"),n[e]={get:function(){return NY(this._styles.concat(e))}}}),n}(),Dme=AY(function(){},HY);function Tme(){var n=arguments,e=n.length,t=e!==0&&String(arguments[0]);if(e>1)for(var i=1;i{var Eme=sh();BY.exports=Eme});var ZY=y(ah=>{ah.repeat=function(n,e){return Array(e+1).join(n)};ah.pad=function(n,e,t,i){if(e+1>=n.length)switch(i){case"left":n=Array(e+1-n.length).join(t)+n;break;case"both":var r=Math.ceil((padlen=e-n.length)/2),o=padlen-r;n=Array(o+1).join(t)+n+Array(r+1).join(t);break;default:n=n+Array(e+1-n.length).join(t)}return n};ah.truncate=function(n,e,t){return t=t||"\u2026",n.length>=e?n.substr(0,e-t.length)+t:n};function YY(n,e){for(var t in e)t==="__proto__"||t==="constructor"||t==="prototype"||(e[t]&&e[t].constructor&&e[t].constructor===Object?(n[t]=n[t]||{},YY(n[t],e[t])):n[t]=e[t]);return n}ah.options=YY;ah.strlen=function(n){var e=/\u001b\[(?:\d*;){0,5}\d*m/g,t=(""+n).replace(e,""),i=t.split(` -`);return i.reduce(function(r,o){return o.length>r?o.length:r},0)}});var JY=y(($_e,GE)=>{var Rme=WY(),zl=ZY(),XE=zl.repeat,_me=zl.truncate,Lme=zl.pad;function dp(n){this.options=zl.options({chars:{top:"\u2500","top-mid":"\u252C","top-left":"\u250C","top-right":"\u2510",bottom:"\u2500","bottom-mid":"\u2534","bottom-left":"\u2514","bottom-right":"\u2518",left:"\u2502","left-mid":"\u251C",mid:"\u2500","mid-mid":"\u253C",right:"\u2502","right-mid":"\u2524",middle:"\u2502"},truncate:"\u2026",colWidths:[],colAligns:[],style:{"padding-left":1,"padding-right":1,head:["red"],border:["grey"],compact:!1},head:[]},n)}dp.prototype.__proto__=Array.prototype;dp.prototype.__defineGetter__("width",function(){var n=this.toString().split(` -`);return n.length?n[0].length:0});dp.prototype.render;dp.prototype.toString=function(){var n="",e=this.options,t=e.style,i=e.head,r=e.chars,o=e.truncate,s=e.colWidths||new Array(this.head.length),a=0;if(!i.length&&!this.length)return"";if(!s.length){var l=this.slice(0);i.length&&(l=l.concat([i])),l.forEach(function(b){if(typeof b=="object"&&b.length)u(b);else{var w=Object.keys(b)[0],x=b[w];s[0]=Math.max(s[0]||0,c(w)||0),typeof x=="object"&&x.length?u(x,1):s[1]=Math.max(s[1]||0,c(x)||0)}})}a=(s.length==1?s[0]:s.reduce(function(b,w){return b+w}))+s.length+1;function u(b,x){var x=x||0;b.forEach(function(T,R){s[R+x]=Math.max(s[R+x]||0,c(T)||0)})}function c(b){return typeof b=="object"&&b.width!=null?b.width:(typeof b=="object"?zl.strlen(b.text):zl.strlen(b))+(t["padding-left"]||0)+(t["padding-right"]||0)}function h(F,w,x,T){var R=0,F=w+XE(F,a-2)+x;return s.forEach(function(N,J){J!=s.length-1&&(R+=N+1,F=F.substr(0,R)+T+F.substr(R+1))}),p(e.style.border,F)}function d(){var b=h(r.top,r["top-left"]||r.top,r["top-right"]||r.top,r["top-mid"]);b&&(n+=b+` -`)}function g(b,w){var x=[],T=0;if(!Array.isArray(b)&&typeof b=="object"){var R=Object.keys(b)[0],F=b[R],N=!0;Array.isArray(F)?(b=F,b.unshift(R)):b=[R,F]}b.forEach(function(M,L){var O=M.toString().split(` -`).reduce(function(ne,be){return ne.push(f(be,L)),ne},[]),Z=O.length;Z>T&&(T=Z),x.push({contents:O,height:Z})});var J=new Array(T);x.forEach(function(M,L){M.contents.forEach(function(ne,be){J[be]||(J[be]=[]),(w||N&&L===0&&e.style.head)&&(ne=p(e.style.head,ne)),J[be].push(ne)});for(var O=M.height,Z=T;O0&&(H+=` -`+p(e.style.border,r.left)),H+=M.join(p(e.style.border,r.middle))+p(e.style.border,r.right)}),p(e.style.border,r.left)+H}function p(b,w){return w?(b.forEach(function(x){w=Rme[x](w)}),w):""}function f(x,w){var x=String(typeof x=="object"&&x.text?x.text:x),T=zl.strlen(x),R=s[w]-(t["padding-left"]||0)-(t["padding-right"]||0),F=e.colAligns[w]||"left";return XE(" ",t["padding-left"]||0)+(T==R?x:T{"use strict";var $Y=(n=0)=>e=>`\x1B[${38+n};5;${e}m`,UY=(n=0)=>(e,t,i)=>`\x1B[${38+n};2;${e};${t};${i}m`;function Ime(){let n=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[r,o]of Object.entries(i))e[r]={open:`\x1B[${o[0]}m`,close:`\x1B[${o[1]}m`},i[r]=e[r],n.set(o[0],o[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,"codes",{value:n,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",e.color.ansi256=$Y(),e.color.ansi16m=UY(),e.bgColor.ansi256=$Y(10),e.bgColor.ansi16m=UY(10),Object.defineProperties(e,{rgbToAnsi256:{value:(t,i,r)=>t===i&&i===r?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(i/255*5)+Math.round(r/255*5),enumerable:!1},hexToRgb:{value:t=>{let i=/(?[a-f\d]{6}|[a-f\d]{3})/i.exec(t.toString(16));if(!i)return[0,0,0];let{colorString:r}=i.groups;r.length===3&&(r=r.split("").map(s=>s+s).join(""));let o=Number.parseInt(r,16);return[o>>16&255,o>>8&255,o&255]},enumerable:!1},hexToAnsi256:{value:t=>e.rgbToAnsi256(...e.hexToRgb(t)),enumerable:!1}}),e}Object.defineProperty(XY,"exports",{enumerable:!0,get:Ime})});function zY(n){return`${Ni.default.gray.open}${n}${Ni.default.gray.close}`}function zE(n){return`${Ni.default.magenta.open}${n}${Ni.default.magenta.close}`}function KY(n){return`${Ni.default.bold.open}${n}${Ni.default.bold.close}`}function KE(n){return`${Ni.default.underline.open}${n}${Ni.default.underline.close}`}function QY(n){return`${Ni.default.strikethrough.open}${n}${Ni.default.strikethrough.close}`}function VY(n){return`${Ni.default.italic.open}${n}${Ni.default.italic.close}`}function eZ(n){return`${Ni.default.yellow.open}${n}${Ni.default.yellow.close}`}function QE(n){return`${Ni.default.blue.open}${n}${Ni.default.blue.close}`}var Ni,tZ=k(()=>{"use strict";Ni=S(GY())});function ro(n){return n}function Ame(n){return zY(n.replace(/(<([^>]+)>)/ig,""))}function iZ(n,e){return e?n.replace(Ome,/\n/g):n}function Hme(n,e){return e.replace(/(^|\n)(.+)/g,"$1"+n+"$2")}function qme(n,e){return e&&n+e.split(` -`).join(` -`+n)}function Yme(n,e){let t=new RegExp("(\\S(?: | )?)((?:"+e+")+)("+lZ+"(?:.*)+)$","gm");return n.replace(t,`$1 -`+e+"$2$3")}function cZ(n){return" ".repeat(n.length)}function Zme(n,e){return uZ(e,n)?e:cZ(iR)+e}function Jme(n,e){let t=Zme.bind(null,e);return n.split(` -`).filter(ro).map(t).join(` -`)}function $me(n,e,t){return uZ(e,n)?{num:t+1,line:e.replace(iR,nZ(t+1))}:{num:t,line:cZ(nZ(t))+e}}function Ume(n,e){let t=$me.bind(null,e),i=0;return n.split(` -`).filter(ro).map(r=>{let o=t(r,i);return i=o.num,o.line}).join(` -`)}function Xme(n,e,t){return n=n.trim(),n=e?Ume(n,t):Jme(n,t),n}function gp(n){return n+` - -`}function Gme(n){return n.replace(Mme,":")}function rZ(n,e=null){if(!n)return[];e=e||ro;let t=e(n).split(` -`),i=[];return t.forEach(function(r){if(!r)return;let o=r.replace(jme,"").split(sZ);i.push(o.splice(0,o.length-1))}),i}function hZ(n){return n.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$&")}function zme(n){return n.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'")}var oZ,X_e,sZ,eR,jme,aZ,Mme,Ome,Nme,Bme,Wme,lZ,uZ,iR,nZ,VE,tR,nR,dZ=k(()=>{"use strict";oZ=S(JY());tZ();X_e=q()("markdown-renderer"),sZ="^*||*^",eR="*|*|*|*",jme=new RegExp(hZ(eR),"g"),aZ="*#COLON|*",Mme=new RegExp(hZ(aZ),"g"),Ome="\r";Nme={code:ro,blockquote:ro,html:Ame,heading:zE,firstHeading:zE,hr:ro,listitem:ro,list:Xme,table:ro,paragraph:ro,strong:KY,em:VY,codespan:eZ,del:QY,link:KE,href:KE,text:ro,unescape:!0,emoji:!1,width:80,showSectionPrefix:!1,tab:2,tableOptions:{}};Bme="\\*",Wme="\\d+\\.",lZ="(?:"+[Bme,Wme].join("|")+")";uZ=function(n,e){return n.match("^(?:"+e+")*"+lZ)};iR="* ";nZ=function(n){return n+". "};VE=new Map,tR=class{constructor(e={},t={}){this.options=e;this.highlightOptions=t;this.o=Object.assign({},Nme,e),this.tab=" ",this.tableSettings=this.o.tableOptions,this.unescape=this.o.unescape?zme:ro,this.highlightOptions=t||{},this.transform=this.compose(Gme,this.unescape)}text(e){return this.o.text(e)}code(e,t,i){return"``` "+t+` -`+e+"\n```\n"}blockquote(e){return gp(this.o.blockquote(qme(this.tab,e.trim())))}html(e){return this.o.html(e)}heading(e,t,i){return e=this.transform(e),e=(this.o.showSectionPrefix?new Array(t+1).join("#")+" ":"")+e,gp(t===1?this.o.firstHeading(e):this.o.heading(e))}hr(){return`\u2500\u2500\u2500 -`}list(e,t){return e=this.o.list(e,t,this.tab),gp(Yme(Hme(this.tab,e),this.tab))}listitem(e){let t=this.compose(this.o.listitem,this.transform);return e.indexOf(` -`)!==-1&&(e=e.trim()),` -`+iR+t(e)}checkbox(e){return"["+(e?"X":" ")+"] "}paragraph(e){return e=this.compose(this.o.paragraph,this.transform)(e),gp(e)}table(e,t){let i=new oZ.default(Object.assign({},{head:rZ(e)[0]},this.tableSettings));return rZ(t,this.transform).forEach(function(r){i.push(r)}),gp(this.o.table(i.toString()))}tablerow(e){return eR+e+eR+` -`}tablecell(e,t){return e+sZ}strong(e){return this.o.strong(e)}em(e){return e=iZ(e,this.o.reflowText),this.o.em(e)}codespan(e){return e=iZ(e,this.o.reflowText),this.o.codespan(e.replace(/:/g,aZ))}br(){return` -`}del(e){return this.o.del(e)}link(e,t,i){let r;try{r=decodeURIComponent(unescape(e)).replace(/[^\w:]/g,"").toLowerCase()}catch{return""}if(r.startsWith("javascript:"))return"";if(i&&e&&i!=e&&VE.set(i,e),i&&i!=e)return QE(i);let o=this.o.href(e);return this.o.link(o)}image(e,t,i){let r="!["+i;return t&&(r+=" \u2013 "+t),r+"]("+e+")"}compose(...e){return(...t)=>{for(let i=e.length;i-- >0;)t=[e[i].apply(this,t)];return t[0]}}static getLinks(){let e=[];for(let[t,i]of VE.entries())e.push(`${QE(t)}: ${i}`);return VE.clear(),e}},nR=tR});function lh(n,e=!1){let t=pp(n),i=[],r="";for(let o of t){if(!o.text)continue;let{foreground:s,background:a}=o,l=Q(r),u=[l,l+Q(o.text)];if(s&&a){let c=`CocList${_n(s)}${_n(a)}`;i.push({span:u,hlGroup:c})}else if(s){let c;e?s=="yellow"?c="CocMarkdownCode":s=="blue"?c="CocMarkdownLink":s=="magenta"?c="CocMarkdownHeader":c=`CocListFg${_n(s)}`:c=`CocListFg${_n(s)}`,i.push({span:u,hlGroup:c})}else if(a){let c=`CocListBg${_n(a)}`;i.push({span:u,hlGroup:c})}o.bold?i.push({span:u,hlGroup:"CocBold"}):o.italic?i.push({span:u,hlGroup:"CocItalic"}):o.underline?i.push({span:u,hlGroup:"CocUnderline"}):o.strikethrough&&i.push({span:u,hlGroup:"CocStrikeThrough"}),r=r+o.text}return{line:r,highlights:i}}function pp(n){let e=null,t=null,i="",r=[],o=[],s={},a;a=()=>{let l,u;i.length?i=i.substr(0,i.length-1):o.length&&(l=o.length-1,u=o[l].text,u.length===1?o.pop():o[l].text=u.substr(0,u.length-1))};for(let l=0;l{gZ[u]?s.foreground=gZ[u]:pZ[u]?s.background=pZ[u]:u==39?delete s.foreground:u==49?delete s.background:fZ[u]?s[fZ[u]]=!0:u==22?s.bold=!1:u==23?s.italic=!1:u==24?s.underline=!1:u==29&&(s.strikethrough=!1)}),r=[]):t+=n[l];continue}n[l]=="\x1B"?e=n[l]:n[l]=="\b"?a():i+=n[l]}return i&&(s.text=i+(e||""),o.push(s)),o}var gZ,pZ,fZ,uh=k(()=>{"use strict";_e();gZ={30:"black",31:"red",32:"green",33:"yellow",34:"blue",35:"magenta",36:"cyan",37:"white",90:"grey"},pZ={40:"black",41:"red",42:"green",43:"yellow",44:"blue",45:"magenta",46:"cyan",47:"white"},fZ={1:"bold",3:"italic",4:"underline",9:"strikethrough"}});var bZ=y((Q_e,mZ)=>{"use strict";mZ.exports=({onlyFirst:n=!1}={})=>{let e=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))"].join("|");return new RegExp(e,n?void 0:"g")}});var qw=y((V_e,yZ)=>{"use strict";var Kme=bZ();yZ.exports=n=>typeof n=="string"?n.replace(Kme(),""):n});function Ww(n,e={}){let t=[],i=[],r=[],o=0;for(let s of n){let a=t.length,{content:l,filetype:u}=s,c=s.highlights;if(u=="markdown"){let h=ebe(l,e);r.push(...h.codes.map(d=>(d.startLine=d.startLine+a,d.endLine=d.endLine+a,d))),i.push(...h.highlights.map(d=>(d.lnum=d.lnum+a,d))),t.push(...h.lines)}else{let h=l.trim().split(/\r?\n/);Qme.includes(s.filetype)?r.push({hlGroup:`Coc${u}Float`,startLine:a,endLine:a+h.length}):r.push({filetype:s.filetype,startLine:a,endLine:a+h.length}),t.push(...h)}if(Array.isArray(c)&&i.push(...c.map(h=>Object.assign({},h,{lnum:h.lnum+a}))),Array.isArray(s.active)){let h=Vme(l,a,s.active);h.length&&i.push(...h)}o!=n.length-1&&(i.push({lnum:t.length,hlGroup:"CocFloatDividingLine",colStart:0,colEnd:-1}),t.push("\u2500")),o=o+1}return{lines:t,highlights:i,codes:r}}function Vme(n,e,t){let i=[],[r,o]=t,s=n.split(/\r?\n/),a=0,l=!1;for(let u=0;uo){let h=Q(c.slice(0,o-a));i.push({colStart:0,colEnd:h,lnum:u+e,hlGroup:Bw}),l=!1;break}else{let h=Q(c);i.push({colStart:0,colEnd:h,lnum:u+e,hlGroup:Bw})}else if(a+c.length>r){l=!0;let h=Q(c.slice(0,r-a));if(a+c.length>o){let d=Q(c.slice(0,o-a));l=!1,i.push({colStart:h,colEnd:d,lnum:u+e,hlGroup:Bw});break}else{let d=Q(c);i.push({colStart:h,colEnd:d,lnum:u+e,hlGroup:Bw})}}a=a+c.length+1}return i}function ebe(n,e){ke.setOptions({renderer:new nR,gfm:!0,breaks:!0});let t=[],i=[],r=[],o=0,s=!1,a,l=0,u=ke(n),c=nR.getLinks();u=u.replace(/\n\n/g,` -`).replace(/\s*$/,""),c.length&&(u=u+` - -`+c.join(` -`));let h=u.split(/\n/);for(let d=0;d{"use strict";mY();dZ();uh();_e();vZ=S(qw()),Qme=["Error","Warning","Info","Hint"],rLe=q()("markdown-index"),Bw="CocFloatActive"});var Di,ds=k(()=>{"use strict";Di=class{constructor(){this.tasks=[];this.count=1}sched(){this.count>0&&this.tasks.length>0&&(this.count--,this.tasks.shift()())}get busy(){return this.count==0}acquire(){return new Promise(e=>{let t=()=>{let i=!1;e(()=>{i||(i=!0,this.count++,this.sched())})};this.tasks.push(t),process.nextTick(this.sched.bind(this))})}use(e){return this.acquire().then(t=>e().then(i=>(t(),i)).catch(i=>{throw t(),i}))}}});var wZ,xZ,tbe,gLe,Kl,oR=k(()=>{"use strict";wZ=S(Pn()),xZ=S(W());fe();rR();re();ds();et();tbe=process.env.VIM_NODE_RPC=="1",gLe=q()("model-float"),Kl=class{constructor(e){this.nvim=e;this.winid=0;this._bufnr=0;this.mutex=new Di;this.disposables=[];this.onCursorMoved=(0,wZ.default)(this._onCursorMoved.bind(this),100)}bindEvents(e,t){let i=["InsertLeave","InsertEnter","BufEnter"];for(let r of i)P.on(r,o=>{o!=this._bufnr&&this.close()},null,this.disposables);P.on("MenuPopupChanged",()=>{P.pumAlignTop==t&&this.close()},null,this.disposables),this.disposables.push(xZ.Disposable.create(()=>{this.onCursorMoved.clear()})),P.on("CursorMoved",this.onCursorMoved.bind(this,e),this,this.disposables),P.on("CursorMovedI",this.onCursorMoved.bind(this,e),this,this.disposables)}unbind(){this.disposables.length&&(U(this.disposables),this.disposables=[])}_onCursorMoved(e,t,i){if(t!=this._bufnr&&!(t==this.targetBufnr&&ye(i,this.cursor))&&(e||t!=this.targetBufnr||!P.insertMode)){this.close();return}}async create(e,t=!1,i=0){await this.show(e,{offsetX:i})}async show(e,t={}){if(e.length==0||e.every(o=>o.content.length==0)){this.close();return}let i=Date.now(),r=await this.mutex.acquire();try{await this.createPopup(e,t,i),r()}catch(o){this.nvim.echoError(o),r()}}async createPopup(e,t,i){e=e.filter(f=>f.content.trim().length>0);let{lines:r,codes:o,highlights:s}=Ww(e),a={codes:o,highlights:s,pumAlignTop:P.pumAlignTop,preferTop:typeof t.preferTop=="boolean"?t.preferTop:!1,offsetX:t.offsetX||0,title:t.title||"",close:t.close?1:0,rounded:t.rounded?1:0,modes:t.modes||["n","i","ic","s"]};tbe||(typeof t.winblend=="number"&&(a.winblend=t.winblend),t.focusable!=null&&(a.focusable=t.focusable?1:0),t.shadow&&(a.shadow=1)),t.maxHeight&&(a.maxHeight=t.maxHeight),t.maxWidth&&(a.maxWidth=t.maxWidth),t.border===!0?a.border=[1,1,1,1]:Array.isArray(t.border)&&!t.border.every(f=>f==0)&&(a.border=t.border.slice(0,4),a.rounded=t.rounded?1:0),t.highlight&&(a.highlight=t.highlight),t.borderhighlight&&(a.borderhighlight=t.borderhighlight),t.cursorline&&(a.cursorline=1);let l=t.autoHide!==!1;l&&(a.autohide=1),this.unbind();let u=await this.nvim.call("coc#dialog#create_cursor_float",[this.winid,this._bufnr,r,a]);if(this.nvim.redrawVim(),!u||u.length==0||this.closeTs>i){let f=u&&u.length>0?u[2]:this.winid;f&&(this.winid=0,this.nvim.call("coc#float#close",[f],!0),this.nvim.redrawVim());return}let[c,h,d,g,p]=u;this.winid=d,this._bufnr=g,this.targetBufnr=c,this.cursor=h,this.bindEvents(l,p==1)}close(){let{winid:e,nvim:t}=this;this.closeTs=Date.now(),this.unbind(),e&&(this.winid=0,t.call("coc#float#close",[e],!0),t.redrawVim())}checkRetrigger(e){return!!(this.winid&&this.targetBufnr==e)}get bufnr(){return this._bufnr}get buffer(){return this.bufnr?this.nvim.createBuffer(this.bufnr):null}get window(){return this.winid?this.nvim.createWindow(this.winid):null}async activated(){return this.winid?await this.nvim.call("coc#float#valid",[this.winid])!=0:!1}dispose(){this.cursor=void 0,this.close()}}});async function hh(n){let[e,t]=await n.eval("[line('.')-1, strpart(getline('.'), 0, col('.') - 1)]");return ch.Position.create(e,t.length)}function CZ(n,e,t){let i=Object.assign({},t,e),r=new Kl(n);return{get window(){return r.window},show:(o,s)=>r.show(o,s?Object.assign({},i,s):i),activated:()=>r.activated(),dispose:()=>{r.dispose()},checkRetrigger:o=>r.checkRetrigger(o),close:()=>{r.close()}}}async function Yw(n,e){return await n.callAsync("coc#dialog#prompt_confirm",[e])==1}async function SZ(n,e,t){await n.call("coc#cursor#move_to",[e.line,e.character]),t&&n.command("redraw",!0)}async function DZ(n){return await n.call("coc#cursor#char_offset")}async function TZ(n){let[e,t]=await n.call("coc#cursor#screen_pos");return{row:e,col:t}}function kZ(n,e,t="MoreMsg",i=!1){n[i||ibe?"callTimer":"call"]("coc#ui#echo_messages",[t,("[coc.nvim] "+e).split(` -`)],!0)}async function PZ(n,e){if(e==="currline"){let i=await n.call("line",["."]);return ch.Range.create(i-1,0,i,0)}if(e==="cursor"){let[i,r]=await n.eval("coc#cursor#position()");return ch.Range.create(i,r,i,r)}let t=await n.call("coc#cursor#get_selection",[nbe.includes(e)?1:0]);return!t||t[0]==-1?null:ch.Range.create(t[0],t[1],t[2],t[3])}async function EZ(n,e,t){let{start:i,end:r}=e,[o,s]=await n.eval(`[getline(${i.line+1}),getline(${r.line+1})]`),a=o.length>0?Q(o.slice(0,i.character)):0,l,u,c=r.character==0;if(c){u=r.line==0?0:r.line-1;let h=await n.call("getline",[u+1]);l=Q(h)}else u=r.line,l=s.length>0?Q(s.slice(0,r.character)):0;n.pauseNotification(),n.command(`noa call cursor(${i.line+1},${a+1})`,!0),n.command("normal! v",!0),n.command(`noa call cursor(${u+1},${l})`,!0),c&&n.command("normal! $",!0),await n.resumeNotification(t)}var ch,ibe,nbe,fp=k(()=>{"use strict";ch=S(W());_e();oR();ibe=process.env.VIM_NODE_RPC=="1",nbe=["char","line","block"]});var RZ,CLe,mp,_Z=k(()=>{"use strict";RZ=S(W());fe();re();CLe=q()("model-dialog"),mp=class{constructor(e,t){this.nvim=e;this.config=t;this.disposables=[];this._onDidClose=new RZ.Emitter;this.onDidClose=this._onDidClose.event;P.on("BufWinLeave",i=>{i==this.bufnr&&(this.dispose(),t.callback&&t.callback(-1))},null,this.disposables),P.on("FloatBtnClick",(i,r)=>{if(i==this.bufnr){this.dispose();let o=t==null?void 0:t.buttons.filter(s=>s.disabled!=!0);t.callback&&t.callback(o[r].index)}},null,this.disposables)}get lines(){return[...this.config.content.split(/\r?\n/)]}async show(e){let{nvim:t}=this,{title:i,close:r,highlights:o,buttons:s}=this.config,a=this.config.borderhighlight||e.floatBorderHighlight,l=this.config.highlight||e.floatHighlight,u={maxwidth:e.maxWidth||80};i&&(u.title=i),(r||typeof r>"u")&&(u.close=1),e.maxHeight&&(u.maxHeight=e.maxHeight),e.maxWidth&&(u.maxWidth=e.maxWidth),l&&(u.highlight=l),o&&(u.highlights=o),a&&(u.borderhighlight=[a]),s&&(u.buttons=s.filter(h=>!h.disabled).map(h=>h.text)),e.rounded&&(u.rounded=1),Array.isArray(u.buttons)&&(u.getchar=1);let c=await t.call("coc#dialog#create_dialog",[this.lines,u]);if(!c)throw new Error("Unable to open dialog window.");this.bufnr=c[1],t.command("redraw",!0)}get winid(){return this.bufnr?this.nvim.call("bufwinid",[this.bufnr]):Promise.resolve(null)}dispose(){this._onDidClose.fire(),this.bufnr=void 0,U(this.disposables),this.disposables=[]}}});var Hi,Ta=k(()=>{"use strict";uh();_e();Hi=class{constructor(){this.lines=[];this._highlights=[]}addLine(e,t){if(e.includes(` -`)){for(let i of e.split(/\r?\n/))this.addLine(i,t);return}if(t&&this._highlights.push({lnum:this.lines.length,colStart:e.match(/^\s*/)[0].length,colEnd:Q(e),hlGroup:t}),e.includes("\x1B")){let i=lh(e);for(let r of i.highlights){let{span:o,hlGroup:s}=r;o[0]!=o[1]&&this._highlights.push({lnum:this.lines.length,colStart:o[0],colEnd:o[1],hlGroup:s})}this.lines.push(i.line)}else this.lines.push(e)}addLines(e){this.lines.push(...e)}addTexts(e){let t=this.lines.length,i="";for(let r of e){let o=Q(i);r.hlGroup&&this._highlights.push({lnum:t,colStart:o,colEnd:o+Q(r.text),hlGroup:r.hlGroup}),i+=r.text}this.lines.push(i)}addText(e,t){let{lines:i}=this,r=i[i.length-1]||"";if(e.includes(` -`)){let o=e.split(` -`);this.addText(o[0],t);for(let s of o.slice(1))this.addLine(s,t);return}if(t){let o=Q(r);this._highlights.push({lnum:i.length?i.length-1:0,colStart:o,colEnd:o+Q(e),hlGroup:t})}i.length?i[i.length-1]=`${r}${e}`:i.push(e)}get length(){return this.lines.length}getline(e){return this.lines[e]||""}get highlights(){return this._highlights}get content(){return this.lines.join(` -`)}render(e,t=0,i=-1){e.setLines(this.lines,{start:t,end:i,strictIndexing:!1},!0);for(let r of this._highlights)e.addHighlight({hlGroup:r.hlGroup,colStart:r.colStart,colEnd:r.colEnd==null?-1:r.colEnd,line:t+r.lnum,srcId:-1})}}});var aR,ILe,ka,lR=k(()=>{"use strict";aR=S(W());fe();re();et();ILe=q()("model-input"),ka=class{constructor(e,t){this.nvim=e;this.disposables=[];this.accepted=!1;this._dimension=[0,0,0,0];this._onDidFinish=new aR.Emitter;this._onDidChange=new aR.Emitter;this.onDidFinish=this._onDidFinish.event;this.onDidChange=this._onDidChange.event;this._input=t,this.disposables.push(this._onDidFinish),this.disposables.push(this._onDidChange);let i;Object.defineProperty(this,"title",{set:s=>{i=s,this._winid&&e.call("coc#dialog#change_title",[this._winid,s],!0)},get:()=>i});let r=!1;Object.defineProperty(this,"loading",{set:s=>{r=s,this._winid&&e.call("coc#dialog#change_loading",[this._winid,s],!0)},get:()=>r});let o;Object.defineProperty(this,"borderhighlight",{set:s=>{o=s,this._winid&&e.call("coc#dialog#change_border_hl",[this._winid,s],!0)},get:()=>o}),P.on("BufWinLeave",s=>{s==this._bufnr&&(this._winid=void 0,this.dispose())},null,this.disposables),P.on("PromptInsert",(s,a)=>{a==this._bufnr&&(this._input=s,this.accepted=!0,this.dispose())},null,this.disposables),P.on("TextChangedI",(s,a)=>{s==this._bufnr&&(this._input=a.line,this._onDidChange.fire(a.line))},null,this.disposables)}get dimension(){let{_dimension:e}=this;return{width:e[0],height:e[1],row:e[2],col:e[3]}}get bufnr(){return this._bufnr}get winid(){return this._winid}get value(){return this._input}async show(e,t){this.title=e,this.borderhighlight=t.borderhighlight??"CocFloating",this.loading=!1;let i=mB(t),r=await this.nvim.call("coc#dialog#create_prompt_win",[e,this._input,i]);if(!r)throw new Error("Unable to open input window");return this._bufnr=r[0],this._winid=r[1],this._dimension=r[2],!0}dispose(){this._onDidFinish.fire(this.accepted?this._input:null),this._winid&&this.nvim.call("coc#float#close",[this._winid],!0),this._winid=void 0,this._bufnr=void 0,U(this.disposables)}}});var uR,gs,Zw=k(()=>{"use strict";uR=process.env.VIM_NODE_RPC=="1",gs=class{constructor(e,t,i,r,o=0){this.nvim=e;this.winid=t;this.bufnr=i;this.linecount=r;this._currIndex=o}get currIndex(){return this._currIndex}get valid(){return this.nvim.call("coc#float#valid",[this.winid]).then(e=>!!e)}close(){this.nvim.call("coc#float#close",[this.winid],!0)}refreshScrollbar(){uR||this.nvim.call("coc#float#nvim_scrollbar",[this.winid],!0)}execute(e){this.nvim.call("coc#compat#execute",[this.winid,e],!0)}async scrollForward(){let{nvim:e,bufnr:t,winid:i}=this,o=await e.createBuffer(t).length,s;if(uR)s=await e.eval(`get(popup_getpos(${i}), 'lastline', 0)`);else{let a=await e.call("getwininfo",[i]);if(!a||!a.length)return;s=a[0].botline}s>=o||s==0||(e.pauseNotification(),this.setCursor(s-1),this.execute("silent! noa setl scrolloff=0"),this.execute(`normal! ${s}Gzt`),this.refreshScrollbar(),e.command("redraw",!0),e.resumeNotification(!1,!0))}async scrollBackward(){let{nvim:e,winid:t}=this,i;if(uR)i=await e.eval(`get(popup_getpos(${t}), 'firstline', 0)`);else{let r=await e.call("getwininfo",[t]);if(!r||!r.length)return;i=r[0].topline}i!=1&&(e.pauseNotification(),this.setCursor(i-1),this.execute(`normal! ${i}Gzb`),this.refreshScrollbar(),e.command("redraw",!0),e.resumeNotification(!1,!0))}setCursor(e,t=!1){let{nvim:i,bufnr:r,winid:o,linecount:s}=this;e<0?e=0:e>s-1&&(e=s-1),this._currIndex=e,i.call("coc#dialog#set_cursor",[o,r,e+1],!0),t&&(this.refreshScrollbar(),i.command("redraw",!0))}}});function Jw(n){return n?typeof n.text=="string":!1}var LZ,rbe,bp,IZ=k(()=>{"use strict";LZ=S(W());fe();re();_e();Zw();rbe=q()("model-menu");bp=class{constructor(e,t,i){this.nvim=e;this.config=t;this.currIndex=0;this.contentHeight=0;this.disposables=[];this.keyMappings=new Map;this.shortcutIndexes=new Set;this._disposed=!1;this._onDidClose=new LZ.Emitter;this.onDidClose=this._onDidClose.event;this.total=t.items.length,i&&i.onCancellationRequested(()=>{this._onDidClose.fire(-1),this.dispose()}),this.disposables.push(this._onDidClose),this.addKeymappings()}attachEvents(){P.on("InputChar",this.onInputChar.bind(this),null,this.disposables),P.on("BufWinLeave",e=>{e==this.bufnr&&(this._onDidClose.fire(-1),this.dispose())},null,this.disposables)}addKeymappings(){let{nvim:e}=this;this.addKeys(["",""],()=>{this._onDidClose.fire(-1),this.dispose()}),this.addKeys(["\r",""],()=>{this.selectCurrent()});let t=s=>{e.pauseNotification(),this.setCursor(s+this.contentHeight),this.win.refreshScrollbar(),e.command("redraw",!0),e.resumeNotification(!1,!0)};this.addKeys("",async()=>{await this.win.scrollForward()}),this.addKeys("",async()=>{await this.win.scrollBackward()}),this.addKeys(["j","","",""],()=>{let s=this.currIndex==this.total-1?0:this.currIndex+1;t(s)}),this.addKeys(["k","","",""],()=>{let s=this.currIndex==0?this.total-1:this.currIndex-1;t(s)}),this.addKeys(["g"],()=>{t(0)}),this.addKeys(["G"],()=>{t(this.total-1)});let i,r,o=s=>{this.isDisabled(s)||(this._onDidClose.fire(s),this.dispose())};this.addKeys(["0","1","2","3","4","5","6","7","8","9"],s=>{i&&clearTimeout(i);let a=parseInt(s,10);if(!(isNaN(a)||a>this.total)&&!(r==null&&a==0)){if(r){let l=r*10+a;r=void 0,o(l-1);return}if(this.total<10||a*10>this.total){o(a-1);return}i=setTimeout(async()=>{o(a-1)},200),r=a}}),this.config.shortcuts&&this.addShortcuts(o)}addShortcuts(e){let{items:t}=this.config;t.map(r=>Jw(r)?r.text:r).forEach((r,o)=>{if(r.length){let s=r[0];Q0(s.charCodeAt(0))&&!this.keyMappings.has(s)&&(this.shortcutIndexes.add(o),this.addKeys(s,()=>{e(o)}))}})}isDisabled(e){let{items:t}=this.config,i=t[e];return!!(Jw(i)&&i.disabled)}async show(e={}){let{nvim:t,shortcutIndexes:i}=this,{title:r,items:o,borderhighlight:s,position:a,content:l}=this.config,u={};r&&(u.title=r),a==="center"&&(u.relative="editor"),e.maxHeight&&(u.maxHeight=e.maxHeight),e.maxWidth&&(u.maxWidth=e.maxWidth),e.floatHighlight&&(u.highlight=e.floatHighlight),s?u.borderhighlight=s:e.floatBorderHighlight&&(u.borderhighlight=e.floatBorderHighlight),e.rounded&&(u.rounded=1),typeof l=="string"&&(u.content=l),e.confirmKey&&this.addKeys(e.confirmKey,()=>{this.selectCurrent()});let c=[],h=o.map((g,p)=>{let f=Jw(g)?g.text:g,m=p<99?`${p+1}. `:"";return i.has(p)&&c.push({lnum:p,hlGroup:e.shortcutHighlight||"MoreMsg",colStart:Q(m),colEnd:Q(m)+1}),m+f.trim()});h.forEach((g,p)=>{let f=o[p];Jw(f)&&f.disabled&&c.push({hlGroup:"CocDisabled",lnum:p,colStart:0,colEnd:Q(g)})}),c.length&&(u.highlights=c);let d=await t.call("coc#dialog#create_menu",[h,u]);if(!d)throw new Error("Unable to create menu window");t.command("redraw",!0),!this._disposed&&(this.win=new gs(t,d[0],d[1],h.length+d[2],d[2]),this.bufnr=d[1],this.contentHeight=d[2],this.attachEvents(),t.call("coc#prompt#start_prompt",["menu"],!0))}selectCurrent(){if(this.isDisabled(this.currIndex)){let e=this.config.items[this.currIndex];e.disabled.reason&&this.nvim.outWriteLine(`Item disabled: ${e.disabled.reason}`);return}this._onDidClose.fire(this.currIndex),this.dispose()}get buffer(){return this.bufnr?this.nvim.createBuffer(this.bufnr):void 0}dispose(){var e;this._disposed||(this._disposed=!0,U(this.disposables),this.shortcutIndexes.clear(),this.keyMappings.clear(),this.nvim.call("coc#prompt#stop_prompt",["menu"],!0),(e=this.win)==null||e.close(),this.bufnr=void 0,this.win=void 0)}async onInputChar(e,t){if(e!="menu"||!this.win)return;let i=this.keyMappings.get(t);i?await Promise.resolve(i(t)):rbe.warn(`Ignored key press: ${t}`)}setCursor(e){this.currIndex=e-this.contentHeight,this.win.setCursor(e)}addKeys(e,t){if(Array.isArray(e))for(let i of e)this.keyMappings.set(i,t);else this.keyMappings.set(e,t)}}});var JLe,Pa,cR=k(()=>{"use strict";fe();re();JLe=q()("model-notification"),Pa=class{constructor(e,t,i=!0){this.nvim=e;this.config=t;this.disposables=[];this._disposed=!1;i&&(P.on("BufWinLeave",r=>{r==this.bufnr&&(this.dispose(),t.callback&&t.callback(-1))},null,this.disposables),P.on("FloatBtnClick",(r,o)=>{if(r==this.bufnr){this.dispose();let s=t==null?void 0:t.buttons.filter(a=>a.disabled!=!0);t.callback&&t.callback(s[o].index)}},null,this.disposables))}get lines(){return this.config.content?this.config.content.split(/\r?\n/):[]}async show(e){let{nvim:t}=this,{buttons:i,kind:r,title:o}=this.config,s=Object.assign({},e);if(s.kind=r??"",o&&(s.title=o),e.border&&(s.borderhighlight=r?`CocNotification${r[0].toUpperCase()}${r.slice(1)}`:e.highlight),Array.isArray(i)){let l=i.filter(u=>!u.disabled).map(u=>u.text);l.length&&(s.actions=l)}let a=await t.call("coc#notify#create",[this.lines,s]);if(!a)throw new Error("Unable to create notification window");this._winid=a[0],this.bufnr=a[1]}get winid(){return this._winid}dispose(){if(this._disposed)return;this._disposed=!0;let{winid:e}=this;e&&(this.nvim.call("coc#notify#close",[e],!0),this.nvim.redrawVim()),this.bufnr=void 0,this._winid=void 0,U(this.disposables)}}});var FZ,obe,sbe,yp,jZ=k(()=>{"use strict";FZ=S(W());fe();re();_e();Zw();obe=q()("model-dialog"),sbe=process.env.VIM_NODE_RPC=="1",yp=class{constructor(e,t,i){this.nvim=e;this.config=t;this.picked=new Set;this.disposables=[];this.keyMappings=new Map;this._onDidClose=new FZ.Emitter;this.onDidClose=this._onDidClose.event;for(let r=0;r{var r;(r=this.win)==null||r.close()}),this.disposables.push(this._onDidClose),this.addKeymappings()}get currIndex(){return this.win?this.win.currIndex:0}attachEvents(){P.on("InputChar",this.onInputChar.bind(this),null,this.disposables),P.on("BufWinLeave",e=>{e==this.bufnr&&(this._onDidClose.fire(void 0),this.bufnr=void 0,this.win=void 0,this.dispose())},null,this.disposables),P.on("FloatBtnClick",(e,t)=>{if(e==this.bufnr){if(t==0){let i=Array.from(this.picked);this._onDidClose.fire(i.length?i:void 0)}else this._onDidClose.fire(void 0);this.dispose()}},null,this.disposables)}addKeymappings(){let{nvim:e}=this,t=i=>{this.picked.has(i)?this.picked.delete(i):this.picked.add(i)};this.addKeys("",async()=>{if(sbe||!this.win)return;let[i,r,o]=await e.eval("[v:mouse_winid,v:mouse_lnum,v:mouse_col]");e.pauseNotification(),i==this.win.winid&&(o<=3?(t(r-1),this.changeLine(r-1)):this.setCursor(r-1)),e.call("win_gotoid",[i],!0),e.call("cursor",[r,o],!0),e.call("coc#float#nvim_float_click",[],!0),e.command("redraw",!0),await e.resumeNotification()}),this.addKeys(["",""],()=>{this._onDidClose.fire(void 0),this.dispose()}),this.addKeys("",()=>{if(this.picked.size==0)this._onDidClose.fire(void 0);else{let i=Array.from(this.picked);this._onDidClose.fire(i)}this.dispose()}),this.addKeys(["j","","",""],()=>{this.win.setCursor(this.currIndex+1,!0)}),this.addKeys(["k","","",""],()=>{this.win.setCursor(this.currIndex-1,!0)}),this.addKeys(["g"],()=>{this.win.setCursor(0,!0)}),this.addKeys(["G"],()=>{this.win.setCursor(this.total-1,!0)}),this.addKeys(" ",async()=>{let i=this.currIndex;t(i),e.pauseNotification(),this.changeLine(i),this.setCursor(this.currIndex+1),e.command("redraw",!0),await e.resumeNotification()}),this.addKeys("",async()=>{var i;await((i=this.win)==null?void 0:i.scrollForward())}),this.addKeys("",async()=>{var i;await((i=this.win)==null?void 0:i.scrollBackward())})}async show(e={}){let{nvim:t}=this,{title:i,items:r}=this.config,o={close:1,cursorline:1};if(e.maxHeight&&(o.maxHeight=e.maxHeight),e.maxWidth&&(o.maxWidth=e.maxWidth),i&&(o.title=i),e.floatHighlight&&(o.highlight=e.floatHighlight),e.floatBorderHighlight&&(o.borderhighlight=[e.floatBorderHighlight]),e.pickerButtons){let u=e.pickerButtonShortcut;o.buttons=["Submit"+(u?" ":""),"Cancel"+(u?" ":"")]}e.rounded&&(o.rounded=1),e.confirmKey&&e.confirmKey!=""&&this.addKeys(e.confirmKey,()=>{this._onDidClose.fire(void 0),this.dispose()});let s=[],a=[];for(let u=0;u{"use strict";cR();$w=S(W());fe();abe=q()("model-progress");vp=class extends Pa{constructor(t,i){let r=[{index:0,text:"Cancel"}];super(t,{kind:"progress",title:i.title,buttons:i.cancellable?r:void 0},!1);this.option=i;this._onDidFinish=new $w.Emitter;this.onDidFinish=this._onDidFinish.event;this.cancelProgress=t=>{t==this.bufnr&&this.tokenSource&&this.tokenSource.cancel()};this.disposables.push(this._onDidFinish),P.on("BufWinLeave",this.cancelProgress,null,this.disposables),i.cancellable&&P.on("FloatBtnClick",(o,s)=>{s==r.findIndex(a=>a.text=="Cancel")&&this.cancelProgress(o)},null,this.disposables)}async show(t){let{task:i}=this.option,r=this.tokenSource=new $w.CancellationTokenSource;this.disposables.push(r);let o=0;this.config.buttons||!t.disabled?await super.show(t):abe.warn('progress window disabled by "notification.disabledProgressSources"'),i({report:s=>{if(!this.winid)return;let{nvim:a}=this;s.increment&&(o+=s.increment,a.call("coc#window#set_var",[this.winid,"percent",`${o}%`],!0)),s.message&&a.call("coc#window#set_var",[this.winid,"message",s.message.replace(/\r?\n/g," ")],!0)}},r.token).then(s=>{this._disposed||(this._onDidFinish.fire(s),this.dispose())},s=>{this._disposed||(s&&this.nvim.echoError(s),this._onDidFinish.fire(void 0),this.dispose())})}}});function mbe(n){return n.toLowerCase()===n}function bbe(n){return n.toUpperCase()===n}function ybe(n){let e=n.length,t=new Array(e),i="/";for(let r=0;r1024)return dh;let r=new Array(t),o=new Array(t);return NZ(n,e,r,o),o[t-1][i-1]}function qZ(n){let e=[];for(let t=0;t1024)return r;let o=new Array(t),s=new Array(t);NZ(n,e,o,s);let a=!1;for(let l=t-1,u=i-1;l>=0;l--)for(;u>=0;u--)if(o[l][u]!==dh&&(a||o[l][u]===s[l][u])){a=l&&u&&s[l][u]===o[l-1][u-1]+AZ,r[l]=u--;break}return r}function Uw(n,e){n=n.toLowerCase(),e=e.toLowerCase();let t=n.length;for(let i=0,r=0;i{"use strict";dh=-1/0,lbe=1/0,ube=-.005,cbe=-.005,hbe=-.01,AZ=1,dbe=.9,gbe=.8,pbe=.7,fbe=.6});async function vbe(){let n=BZ.default.resolve(__dirname,"..","bin/strwidth.wasm"),e=WZ.default.readFileSync(n);return(await global.WebAssembly.instantiate(e,{env:{}})).instance.exports}var BZ,WZ,Xw,Ea,dR=k(()=>{"use strict";BZ=S(require("path")),WZ=S(require("fs"));Ea=class{constructor(e){this.exports=e;this.cache=new Map;this.bytes=new Uint8Array(e.memory.buffer),this.contentPtr=e.malloc(4096)}setAmbw(e){this.exports.setAmbw(e?1:0),this.cache.clear()}getWidth(e,t=!1){let i=e.length;if(i===0)return 0;if(i>4095&&(e=e.slice(0,4095)),t&&this.cache.has(e))return this.cache.get(e);let{contentPtr:r}=this,o=Buffer.from(e,"utf8"),s=o.length;this.bytes.set(o,r),this.bytes[r+s]=0;let a=this.exports.strWidth(r);return t&&this.cache.set(e,a),a}static async create(){if(Xw)return Xw;let e=await vbe();return Xw=new Ea(e),Xw}}});var Gw,vIe,gh,YZ=k(()=>{"use strict";Gw=S(W());fe();re();nt();hR();_e();dR();lR();Zw();vIe=q()("model-quickpick"),gh=class{constructor(e,t){this.nvim=e;this.config=t;this.filteredItems=[];this.disposables=[];this._changed=!1;this._onDidFinish=new Gw.Emitter;this._onDidChangeSelection=new Gw.Emitter;this._onDidChangeValue=new Gw.Emitter;this.onDidFinish=this._onDidFinish.event;this.onDidChangeSelection=this._onDidChangeSelection.event;this.onDidChangeValue=this._onDidChangeValue.event;let i=t.items??[];Object.defineProperty(this,"items",{set:r=>{this._changed=!0,i=r,this.filterItems("")},get:()=>i}),Object.defineProperty(this,"activeItems",{set:r=>{this._changed=!0,this.filteredItems=r,this.showFilteredItems()},get:()=>this.filteredItems}),Object.defineProperty(this,"title",{set:r=>{this.input&&(this.input.title=r)},get:()=>this.input?this.input.title:t.title}),Object.defineProperty(this,"loading",{set:r=>{this.input&&(this.input.loading=r)},get:()=>this.input?this.input.loading:!1})}get value(){return this.input?this.input.value:this.config.value??""}get currIndex(){return this.win?this.win.currIndex:0}get buffer(){return this.bufnr?this.nvim.createBuffer(this.bufnr):void 0}setCursor(e){this.win&&this.win.setCursor(e,!0)}attachEvents(e){P.on("BufWinLeave",t=>{t==this.bufnr&&this.dispose()},null,this.disposables),P.on("PromptKeyPress",async(t,i)=>{t==e&&(i=="C-f"?await this.win.scrollForward():i=="C-b"?await this.win.scrollBackward():["C-j","C-n","down"].includes(i)?this.setCursor(this.currIndex+1):["C-k","C-p","up"].includes(i)?this.setCursor(this.currIndex-1):this.config.canSelectMany&&i=="C-@"&&this.toggePicked(this.currIndex))},null,this.disposables)}async show(e={}){let{nvim:t,items:i}=this,{title:r,canSelectMany:o,value:s}=this.config,a=[],l=[],u=[];for(let b=0;b{if(this._onDidChangeValue.fire(b),this._changed){this._changed=!1;return}this.filterItems(b)},this),c.onDidFinish(this.onFinish,this);let h=await Ea.create(),d=Math.max(40,Math.min(80,a.reduce((b,w)=>Math.max(b,h.getWidth(w)),0)));await c.show(r??"",{position:"center",marginTop:10,border:[1,1,0,1],list:!0,minWidth:d,maxWidth:e.maxWidth||80,rounded:!!e.rounded,highlight:e.floatHighlight,borderhighlight:e.floatBorderHighlight}),this.selectedItems=u;let g={lines:a,rounded:!!e.rounded};g.highlights=l,e.floatHighlight&&(g.highlight=e.floatHighlight),e.floatBorderHighlight&&(g.borderhighlight=e.floatBorderHighlight);let p=this.config.maxHeight||e.maxHeight;p&&(g.maxHeight=p);let f=await t.call("coc#dialog#create_list",[c.winid,c.dimension,g]);if(!f)throw new Error("Unable to open list window.");this.filteredItems=i,this.win=new gs(t,f[0],f[1],a.length),this.win.refreshScrollbar(),this.bufnr=f[1];let m=o||u.length==0?0:i.indexOf(u[0]);this.setCursor(m),this.attachEvents(c.bufnr)}filterItems(e){let{items:t,win:i,selectedItems:r}=this;if(!i)return;let{canSelectMany:o}=this.config,s=[],a=[],l=0,u=[];for(let c of t){let h=this.toFilterText(c);if(e.length>0&&!Uw(e,h))continue;let d=r.includes(c),g=o?`[${d?"x":" "}] ${c.label}`:c.label;if(c.description){let f=Q(g);g=g+` ${c.description}`,a.push({hlGroup:"Comment",lnum:l,colStart:f,colEnd:Q(g)})}wp(e,h).forEach(f=>{let m=_t(h,f);a.push({hlGroup:"CocSearch",colStart:m,colEnd:m+1,lnum:l})}),u.push(c),s.push(g),l+=1}this.filteredItems=u,this.win.linecount=s.length,this.nvim.call("coc#dialog#update_list",[this.win.winid,this.win.bufnr,s,a],!0),this.setCursor(0)}showFilteredItems(){let{win:e,input:t,filteredItems:i}=this;if(!e)return;let{canSelectMany:r}=this.config,o=[],s=[],a=0,l=[];for(let u of i){let c=this.toFilterText(u),h=r?`[${u.picked?"x":" "}] ${u.label}`:u.label;if(u.picked&&l.push(u),u.description){let g=Q(h);h=h+` ${u.description}`,s.push({hlGroup:"Comment",lnum:a,colStart:g,colEnd:Q(h)})}wp(t.value,c).forEach(g=>{let p=_t(c,g);s.push({hlGroup:"CocSearch",colStart:p,colEnd:p+1,lnum:a})}),o.push(h),a+=1}this.selectedItems=l,this.win.linecount=o.length,this.nvim.call("coc#dialog#update_list",[this.win.winid,this.win.bufnr,o,s],!0),this.setCursor(0)}onFinish(e){if(e==null){this._onDidChangeSelection.fire([]),this._onDidFinish.fire(null);return}let t=this.getSelectedItems();this.config.canSelectMany||this._onDidChangeSelection.fire(t),this._onDidFinish.fire(t)}getSelectedItems(){let{win:e}=this,{canSelectMany:t}=this.config;if(t)return this.selectedItems;let i=this.filteredItems[e.currIndex];return dw(i)}toggePicked(e){let{nvim:t,filteredItems:i,selectedItems:r}=this,o=i[e];if(!o)return;let s=r.indexOf(o);s!=-1?r.splice(s,1):r.push(o);let a=s==-1?"x":" ";t.pauseNotification(),this.win.execute(`normal! ^1lr${a}`),this.win.setCursor(this.win.currIndex+1),t.resumeNotification(!0,!0),this._onDidChangeSelection.fire(r)}toFilterText(e){let{label:t,description:i}=e,{canSelectMany:r}=this.config,o=`${r?" ":""}${t.replace(/\r?\n/,"")}`;return this.matchOnDescription?o+" "+(i??""):o}dispose(){var e,t;this.bufnr=void 0,(e=this.input)==null||e.dispose(),(t=this.win)==null||t.close(),this._onDidFinish.dispose(),this._onDidChangeSelection.dispose(),U(this.disposables)}}});function xp(){return ZZ.default.randomBytes(16)}var ZZ,gR=k(()=>{ZZ=S(require("crypto"))});function wbe(n,e){var t=e||0,i=JZ;return[i[n[t++]],i[n[t++]],i[n[t++]],i[n[t++]],"-",i[n[t++]],i[n[t++]],"-",i[n[t++]],i[n[t++]],"-",i[n[t++]],i[n[t++]],"-",i[n[t++]],i[n[t++]],i[n[t++]],i[n[t++]],i[n[t++]],i[n[t++]]].join("")}var JZ,Cp,zw,pR=k(()=>{JZ=[];for(Cp=0;Cp<256;++Cp)JZ[Cp]=(Cp+256).toString(16).substr(1);zw=wbe});function xbe(n,e,t){var i=e&&t||0,r=e||[];n=n||{};var o=n.node||$Z,s=n.clockseq!==void 0?n.clockseq:fR;if(o==null||s==null){var a=n.random||(n.rng||xp)();o==null&&(o=$Z=[a[0]|1,a[1],a[2],a[3],a[4],a[5]]),s==null&&(s=fR=(a[6]<<8|a[7])&16383)}var l=n.msecs!==void 0?n.msecs:new Date().getTime(),u=n.nsecs!==void 0?n.nsecs:bR+1,c=l-mR+(u-bR)/1e4;if(c<0&&n.clockseq===void 0&&(s=s+1&16383),(c<0||l>mR)&&n.nsecs===void 0&&(u=0),u>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");mR=l,bR=u,fR=s,l+=122192928e5;var h=((l&268435455)*1e4+u)%4294967296;r[i++]=h>>>24&255,r[i++]=h>>>16&255,r[i++]=h>>>8&255,r[i++]=h&255;var d=l/4294967296*1e4&268435455;r[i++]=d>>>8&255,r[i++]=d&255,r[i++]=d>>>24&15|16,r[i++]=d>>>16&255,r[i++]=s>>>8|128,r[i++]=s&255;for(var g=0;g<6;++g)r[i+g]=o[g];return e||zw(r)}var $Z,fR,mR,bR,ps,UZ=k(()=>{gR();pR();mR=0,bR=0;ps=xbe});function Cbe(n,e,t){var i=e&&t||0;typeof n=="string"&&(e=n==="binary"?new Array(16):null,n=null),n=n||{};var r=n.random||(n.rng||xp)();if(r[6]=r[6]&15|64,r[8]=r[8]&63|128,e)for(var o=0;o<16;++o)e[i+o]=r[o];return e||zw(r)}var oe,XZ=k(()=>{gR();pR();oe=Cbe});var qe=k(()=>{UZ();XZ()});var FIe,yR,Sp,vR=k(()=>{"use strict";qe();FIe=q()("model-status"),yR=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],Sp=class{constructor(e){this.nvim=e;this.items=new Map;this.shownIds=new Set;this._text="";this.interval=setInterval(()=>{this.setStatusText()},100)}dispose(){this.items.clear(),this.shownIds.clear(),clearInterval(this.interval)}createStatusBarItem(e,t=!1){let i=ps(),r={text:"",priority:e,isProgress:t,show:()=>{this.shownIds.add(i),this.setStatusText()},hide:()=>{this.shownIds.delete(i),this.setStatusText()},dispose:()=>{this.shownIds.delete(i),this.items.delete(i),this.setStatusText()}};return this.items.set(i,r),r}getText(){if(this.shownIds.size==0)return"";let e=new Date,t=Math.floor(e.getMilliseconds()/100),i="",r=[];for(let[o,s]of this.items)this.shownIds.has(o)&&r.push(s);r.sort((o,s)=>o.priority-s.priority);for(let o of r)o.isProgress?i=`${i} ${yR[t]} ${o.text}`:i=`${i} ${o.text}`;return i}setStatusText(){let e=this.getText(),{nvim:t}=this;e!=this._text&&(this._text=e,t.pauseNotification(),this.nvim.setVar("coc_status",e,!0),this.nvim.call("coc#util#do_autocmd",["CocStatusChange"],!0),t.resumeNotification(!1,!0))}}});var Kw,wR=k(()=>{Kw="0.0.82"});function xR(n,e){if(n.length<=1)return n;let t=n.length/2|0,i=n.slice(0,t),r=n.slice(t);xR(i,e),xR(r,e);let o=0,s=0,a=0;for(;ot.line||e.line===t.line&&e.character>t.character?{start:t,end:e}:n}function Dbe(n){let e=zZ(n.range);return e!==n.range?{newText:n.newText,range:e}:n}var Ql,Vn,ph=k(()=>{"use strict";Ql=class{constructor(e,t,i,r){this._uri=e,this._languageId=t,this._version=i,this._content=r,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let t=this.offsetAt(e.start),i=this.offsetAt(e.end);return this._content.substring(t,i)}return this._content}update(e,t){for(let i of e)if(Ql.isIncremental(i)){let r=zZ(i.range),o=this.offsetAt(r.start),s=this.offsetAt(r.end);this._content=this._content.substring(0,o)+i.text+this._content.substring(s,this._content.length);let a=Math.max(r.start.line,0),l=Math.max(r.end.line,0),u=this._lineOffsets,c=GZ(i.text,!1,o);if(l-a===c.length)for(let d=0,g=c.length;de?r=s:i=s+1}let o=i-1;return{line:o,character:e-t[o]}}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let i=t[e.line],r=e.line+1{let d=c.range.start.line-h.range.start.line;return d===0?c.range.start.character-h.range.start.character:d}),l=0,u=[];for(let c of a){let h=r.offsetAt(c.range.start);if(hl&&u.push(s.substring(l,h)),c.newText.length&&u.push(c.newText),l=r.offsetAt(c.range.end)}return u.push(s.substr(l)),u.join("")}n.applyEdits=i})(Vn||(Vn={}))});function tJ(n){let e;switch(n){case 1:e=1;break;case 2:e=2;break;default:e=3}return e}function Qw(n){let e;if(typeof n=="string")e={resource:n};else if(j.isUri(n))e={resource:n.toString()};else if(n!=null){let t=n.uri,i=n.languageId;e={resource:t,overrideIdentifier:i}}return e}function Vw(n){let e=[];if(CR.test(n)){let t=KZ.exec(n);for(;t!=null&&t.length;){let i=t[1].trim();i&&e.push(i),t=KZ.exec(n)}}return Ai(e)}function iJ(n){let e={};for(let t of Object.keys(n))if(t.indexOf(".")==-1)e[t]=n[t];else{let i=t.split("."),r=e,o=i.length;for(let s=0;s"u"?t:o}function fh(n){if(n){if(Array.isArray(n))return n.map(fh);if(typeof n=="object"){let e=Object.create(null);for(let t in n)e[t]=fh(n[t]);return e}}return n}function SR(n,e){let t=n?e?n.keys.filter(o=>e.keys.indexOf(o)===-1):[...n.keys]:[],i=e?n?e.keys.filter(o=>n.keys.indexOf(o)===-1):[...e.keys]:[],r=[];if(n&&e){for(let o of e.keys)if(n.keys.indexOf(o)!==-1){let s=Dp(e.contents,o),a=Dp(n.contents,o);ye(s,a)||r.push(o)}}return{added:t,removed:i,updated:r}}var VZ,UIe,eJ,KZ,Tbe,CR,Vl=k(()=>{"use strict";VZ=S(W());ph();Pe();dn();nt();et();UIe=q()("configuration-util"),eJ="\\[([^\\]]+)\\]",KZ=new RegExp(eJ,"g"),Tbe=`^(${eJ})+$`,CR=new RegExp(Tbe)});var VIe,ri,Pp=k(()=>{"use strict";nt();wi();et();Vl();VIe=q()("configuration-model"),ri=class{constructor(e={},t=[],i=[]){this._contents=e;this._keys=t;this._overrides=i;this.frozen=!1;this.overrideConfigurations=new Map}get contents(){return this.checkAndFreeze(this._contents)}get overrides(){return this.checkAndFreeze(this._overrides)}get keys(){return this.checkAndFreeze(this._keys)}get isFrozen(){return this.frozen}checkAndFreeze(e){return this.frozen&&!Object.isFrozen(e)?hw(e):e}isEmpty(){return this._keys.length===0&&Object.keys(this._contents).length===0&&this._overrides.length===0}clone(){return new ri(Rn(this._contents),[...this.keys],Rn(this.overrides))}toJSON(){return{contents:this.contents,overrides:this.overrides,keys:this.keys}}getValue(e){return e?Dp(this.contents,e):this.contents}getOverrideValue(e,t){let i=this.getContentsForOverrideIdentifier(t);return i?e?Dp(i,e):i:void 0}getKeysForOverrideIdentifier(e){let t=[];for(let i of this.overrides)i.identifiers.includes(e)&&t.push(...i.keys);return Ai(t)}getAllOverrideIdentifiers(){let e=[];for(let t of this.overrides)e.push(...t.identifiers);return Ai(e)}override(e){let t=this.overrideConfigurations.get(e);return t||(t=this.createOverrideConfigurationModel(e),this.overrideConfigurations.set(e,t)),t}merge(...e){let t=Rn(this.contents),i=Rn(this.overrides),r=[...this.keys];for(let o of e)if(!o.isEmpty()){this.mergeContents(t,o.contents);for(let s of o.overrides){let[a]=i.filter(l=>ye(l.identifiers,s.identifiers));a?(this.mergeContents(a.contents,s.contents),a.keys.push(...s.keys),a.keys=Ai(a.keys)):i.push(Rn(s))}for(let s of o.keys)r.indexOf(s)===-1&&r.push(s)}return new ri(t,r,i)}freeze(){return this.frozen=!0,this}mergeContents(e,t){for(let i of Object.keys(t)){if(i in e&&hi(e[i])&&hi(t[i])){this.mergeContents(e[i],t[i]);continue}e[i]=Rn(t[i])}}setValue(e,t){this.addKey(e),kp(this.contents,e,t,i=>{console.error(i)})}removeValue(e){this.removeKey(e)&&rJ(this.contents,e)}addKey(e){let t=this.keys.length;for(let i=0;i{o&&(i?this.mergeContents(i,o):i=Rn(o))};for(let o of this.overrides)ye(o.identifiers,[e])?t=o.contents:o.identifiers.includes(e)&&r(o.contents);return r(t),i}}});function mh(n,e){let{added:t,removed:i,updated:r}=SR(e,n),o=[],s=(n==null?void 0:n.getAllOverrideIdentifiers())??[],a=(e==null?void 0:e.getAllOverrideIdentifiers())??[];if(e){let l=a.filter(u=>!s.includes(u));for(let u of l)o.push([u,e.getKeysForOverrideIdentifier(u)])}if(n){let l=s.filter(u=>!a.includes(u));for(let u of l)o.push([u,n.getKeysForOverrideIdentifier(u)])}if(e&&n){for(let l of s)if(a.includes(l)){let u=SR({contents:n.getOverrideValue(void 0,l)||{},keys:n.getKeysForOverrideIdentifier(l)},{contents:e.getOverrideValue(void 0,l)||{},keys:e.getKeysForOverrideIdentifier(l)});o.push([l,[...u.added,...u.removed,...u.updated]])}}return{added:t,removed:i,updated:r,overrides:o}}var ex,Ra,DR=k(()=>{"use strict";Pe();dn();nt();$e();et();Pp();Vl();ex=class{constructor(){this._folderConfigurations=new Map}get keys(){return this._folderConfigurations.keys()}has(e){for(let t of this.keys)if(ni(e,t))return!0;return!1}set(e,t){let i=In(e);this._folderConfigurations.set(i,t)}get(e){let t=In(e);return this._folderConfigurations.get(t)}delete(e){let t=In(e);this._folderConfigurations.delete(t)}forEach(e){this._folderConfigurations.forEach(e)}},Ra=class{constructor(e,t,i=new ri,r=new ex,o=new ri){this._defaultConfiguration=e;this._userConfiguration=t;this._workspaceConfiguration=i;this._folderConfigurations=r;this._memoryConfiguration=o;this._workspaceConsolidatedConfiguration=null;this._resolvedFolderConfigurations=new Map;this._memoryConfigurationByResource=new Map}updateValue(e,t,i={}){let r;i.resource?(r=this._memoryConfigurationByResource.get(i.resource),r||(r=new ri,this._memoryConfigurationByResource.set(i.resource,r))):r=this._memoryConfiguration,t===void 0?r.removeValue(e):r.setValue(e,t),i.resource||(this._workspaceConsolidatedConfiguration=null)}hasFolder(e){for(let t of this._folderConfigurations.keys)if(ni(t,e))return!0;return!1}addFolderConfiguration(e,t,i){this._folderConfigurations.set(e,t),i&&this._resolvedFolderConfigurations.set(i,e)}deleteFolderConfiguration(e){this._folderConfigurations.delete(e)}getWorkspaceConsolidateConfiguration(){return this._workspaceConsolidatedConfiguration||(this._workspaceConsolidatedConfiguration=this._defaultConfiguration.merge(this._userConfiguration,this._workspaceConfiguration,this._memoryConfiguration),this._workspaceConsolidatedConfiguration=this._workspaceConsolidatedConfiguration.freeze()),this._workspaceConsolidatedConfiguration}getFolderConfigurationModelForResource(e){let t=this._resolvedFolderConfigurations.get(e);if(t)return this._folderConfigurations.get(t);let i=j.parse(e),r=i.scheme==="file"?i.fsPath:void 0;if(!r)return;let o=Array.from(this._folderConfigurations.keys);o.sort((s,a)=>a.length-s.length);for(let s of o)if(Ye(s,r,!0))return this._resolvedFolderConfigurations.set(e,s),this._folderConfigurations.get(s)}resolveFolder(e){let t=this._resolvedFolderConfigurations.get(e);if(t)return t;let i=Array.from(this._folderConfigurations.keys);i.sort((r,o)=>o.length-r.length);for(let r of i)if(Ye(r,j.parse(e).fsPath,!0))return this._resolvedFolderConfigurations.set(e,r),r}getConsolidatedConfigurationModel(e){let t=this.getWorkspaceConsolidateConfiguration();if(e.resource){let i=this.getFolderConfigurationModelForResource(e.resource);i&&(t=t.merge(i));let r=this._memoryConfigurationByResource.get(e.resource);r&&(t=t.merge(r))}return e.overrideIdentifier&&(t=t.override(e.overrideIdentifier)),t}getValue(e,t){return this.getConsolidatedConfigurationModel(t).getValue(e)}inspect(e,t){let i=this.getConsolidatedConfigurationModel(t),r=this.getFolderConfigurationModelForResource(t.resource),o=t.resource?this._memoryConfigurationByResource.get(t.resource)||this._memoryConfiguration:this._memoryConfiguration,s=t.overrideIdentifier?this._defaultConfiguration.freeze().override(t.overrideIdentifier).getValue(e):this._defaultConfiguration.freeze().getValue(e),a=t.overrideIdentifier?this._userConfiguration.freeze().override(t.overrideIdentifier).getValue(e):this._userConfiguration.freeze().getValue(e),l=t.overrideIdentifier?this._workspaceConfiguration.freeze().override(t.overrideIdentifier).getValue(e):this._workspaceConfiguration.freeze().getValue(e),u=r?t.overrideIdentifier?r.freeze().override(t.overrideIdentifier).getValue(e):r.freeze().getValue(e):void 0,c=t.overrideIdentifier?o.override(t.overrideIdentifier).getValue(e):o.getValue(e),h=i.getValue(e),d=Ai(i.overrides.map(g=>g.identifiers).flat()).filter(g=>i.getOverrideValue(e,g)!==void 0);return{defaultValue:s,userValue:a,workspaceValue:l,workspaceFolderValue:u,memoryValue:c,value:h,default:s!==void 0?{value:this._defaultConfiguration.freeze().getValue(e),override:t.overrideIdentifier?this._defaultConfiguration.freeze().getOverrideValue(e,t.overrideIdentifier):void 0}:void 0,user:a!==void 0?{value:this._userConfiguration.freeze().getValue(e),override:t.overrideIdentifier?this._userConfiguration.freeze().getOverrideValue(e,t.overrideIdentifier):void 0}:void 0,workspace:l!==void 0?{value:this._workspaceConfiguration.freeze().getValue(e),override:t.overrideIdentifier?this._workspaceConfiguration.freeze().getOverrideValue(e,t.overrideIdentifier):void 0}:void 0,workspaceFolder:u!==void 0?{value:r==null?void 0:r.freeze().getValue(e),override:t.overrideIdentifier?r==null?void 0:r.freeze().getOverrideValue(e,t.overrideIdentifier):void 0}:void 0,memory:c!==void 0?{value:o.getValue(e),override:t.overrideIdentifier?o.getOverrideValue(e,t.overrideIdentifier):void 0}:void 0,overrideIdentifiers:d.length?d:void 0}}get defaults(){return this._defaultConfiguration}get user(){return this._userConfiguration}get workspace(){return this._workspaceConfiguration}get memory(){return this._memoryConfiguration}getConfigurationModel(e,t){switch(e){case 0:return this._defaultConfiguration;case 1:return this._userConfiguration;case 2:return this._workspaceConfiguration;case 3:return this._folderConfigurations.get(t)??new ri;default:return this._memoryConfiguration}}updateFolderConfiguration(e,t){this._folderConfigurations.set(e,t)}updateUserConfiguration(e){this._userConfiguration=e,this._workspaceConsolidatedConfiguration=null}updateWorkspaceConfiguration(e){this._workspaceConfiguration=e,this._workspaceConsolidatedConfiguration=null}updateDefaultConfiguration(e){this._defaultConfiguration=e,this._workspaceConsolidatedConfiguration=null}updateMemoryConfiguration(e){this._memoryConfiguration=e,this._workspaceConsolidatedConfiguration=null}compareAndUpdateMemoryConfiguration(e){let{added:t,updated:i,removed:r,overrides:o}=mh(this._memoryConfiguration,e),s=[...t,...i,...r];return s.length&&this.updateMemoryConfiguration(e),{keys:s,overrides:o}}compareAndUpdateUserConfiguration(e){let{added:t,updated:i,removed:r,overrides:o}=mh(this._userConfiguration,e),s=[...t,...i,...r];return s.length&&this.updateUserConfiguration(e),{keys:s,overrides:o}}compareAndUpdateDefaultConfiguration(e,t){let i=[];if(!t){let{added:r,updated:o,removed:s}=mh(this._defaultConfiguration,e);t=[...r,...o,...s]}for(let r of t)for(let o of Vw(r)){let s=this._defaultConfiguration.getKeysForOverrideIdentifier(o),a=e.getKeysForOverrideIdentifier(o),l=[...a.filter(u=>s.indexOf(u)===-1),...s.filter(u=>a.indexOf(u)===-1),...s.filter(u=>!ye(this._defaultConfiguration.override(o).getValue(u),e.override(o).getValue(u)))];i.push([o,l])}return this.updateDefaultConfiguration(e),{keys:t,overrides:i}}compareAndUpdateWorkspaceConfiguration(e){let{added:t,updated:i,removed:r,overrides:o}=mh(this._workspaceConfiguration,e),s=[...t,...i,...r];return s.length&&this.updateWorkspaceConfiguration(e),{keys:s,overrides:o}}compareAndUpdateFolderConfiguration(e,t){let i=this._folderConfigurations.get(e),{added:r,updated:o,removed:s,overrides:a}=mh(i,t),l=[...r,...o,...s];return(l.length||!i)&&this.updateFolderConfiguration(e,t),{keys:l,overrides:a}}compareAndDeleteFolderConfiguration(e){let t=this._folderConfigurations.get(e);if(!t)return;this.deleteFolderConfiguration(e);let{added:i,updated:r,removed:o,overrides:s}=mh(t,void 0);return{keys:[...i,...r,...o],overrides:s}}allKeys(){let e=new Set;return this._defaultConfiguration.freeze().keys.forEach(t=>e.add(t)),this._userConfiguration.freeze().keys.forEach(t=>e.add(t)),this._workspaceConfiguration.freeze().keys.forEach(t=>e.add(t)),this._folderConfigurations.forEach(t=>t.freeze().keys.forEach(i=>e.add(i))),[...e.values()]}toData(){let{_defaultConfiguration:e,_userConfiguration:t,_workspaceConfiguration:i,_folderConfigurations:r}=this,o=[];return r.forEach((s,a)=>{o.push([a,s.toJSON()])}),{defaults:e.toJSON(),user:t.toJSON(),workspace:i.toJSON(),folders:o}}static parse(e){let t=this.parseConfigurationModel(e.defaults),i=this.parseConfigurationModel(e.user),r=this.parseConfigurationModel(e.workspace),o=new ex;return e.folders.forEach(s=>{o.set(s[0],this.parseConfigurationModel(s[1]))}),new Ra(t,i,r,o)}static parseConfigurationModel(e){return new ri(e.contents,e.keys,e.overrides).freeze()}}});var tx,sJ=k(()=>{"use strict";et();DR();Pp();Vl();tx=class{constructor(e,t,i){this.change=e;this.previous=t;this.currentConfiguration=i;this._previousConfiguration=void 0;let r=new Set;e.keys.forEach(s=>r.add(s)),e.overrides.forEach(([,s])=>s.forEach(a=>r.add(a))),this.affectedKeys=[...r.values()];let o=new ri;this.affectedKeys.forEach(s=>o.setValue(s,{})),this.affectedKeysTree=o.contents}get previousConfiguration(){return!this._previousConfiguration&&this.previous&&(this._previousConfiguration=Ra.parse(this.previous)),this._previousConfiguration}affectsConfiguration(e,t){let i=t?Qw(t):void 0;if(this.doesAffectedKeysTreeContains(this.affectedKeysTree,e)){if(i){let r=this.previousConfiguration?this.previousConfiguration.getValue(e,i):void 0,o=this.currentConfiguration.getValue(e,i);return!ye(r,o)}return!0}return!1}doesAffectedKeysTreeContains(e,t){let i=Tp({[t]:!0},()=>{}),r;for(;typeof i=="object"&&(r=Object.keys(i)[0]);){if(e=e[r],!e)return!1;i=i[r]}return!0}}});var nx,ix,aJ=k(()=>{"use strict";_w();nx=S(W());Pe();Pp();Vl();ix=class{constructor(e){this._name=e;this._raw=null;this._configurationModel=null;this._parseErrors=[]}get configurationModel(){return this._configurationModel||new ri}get errors(){return this._parseErrors}parse(e,t){if(e!=null){let i=this.doParseContent(e);this.parseRaw(i,t)}}parseRaw(e,t){this._raw=e;let{contents:i,keys:r,overrides:o,restricted:s}=this.doParseRaw(e,t);this._configurationModel=new ri(i,r,o)}doParseContent(e){let t={},i=null,r=[],o=[],s=[];function a(u){Array.isArray(r)?r.push(u):i!==null&&(r[i]=u)}let l={onObjectBegin:()=>{let u={};a(u),o.push(r),r=u,i=null},onObjectProperty:u=>{i=u},onObjectEnd:()=>{r=o.pop()},onArrayBegin:()=>{let u=[];a(u),o.push(r),r=u,i=null},onArrayEnd:()=>{r=o.pop()},onLiteralValue:a,onError:(u,c,h)=>{s.push({error:u,length:h,offset:c})}};if(e)try{BW(e,l),t=r[0]??{};let u=j.file(this._name).toString();s.length>0&&(this._parseErrors=nJ(u,e,s))}catch(u){let c=j.file(this._name).toString();this._parseErrors=[{location:nx.Location.create(c,nx.Range.create(0,0,0,0)),message:`Error while parsing settings file ${this._name}: ${u}`}]}return t}doParseRaw(e,t){let i=a=>{console.error(`Conflict in settings file ${this._name}: ${a}`)},r=Tp(e,i),o=Object.keys(e),s=this.toOverrides(e,i);return{contents:r,keys:o,overrides:s,restricted:[]}}toOverrides(e,t){let i=[];for(let r of Object.keys(e))if(CR.test(r)){let o={};for(let s in e[r])o[s]=e[r][s];i.push({identifiers:Vw(r),keys:Object.keys(o),contents:Tp(o,t)})}return i}}});function kR(n,e){if(e){if(n&&Qr(n,e))return n[e];let t=e.split("."),i=n;for(let r=0;i&&r{"use strict";fs=S(require("fs")),lJ=S(require("os")),_a=S(require("path")),PR=S(W());Pe();dn();re();$e();wi();et();DR();sJ();Pp();aJ();Vl();TR=q()("configurations"),Ep=class{constructor(e,t,i=!1,r=process.cwd()){this.userConfigFile=e;this._proxy=t;this.noWatch=i;this._watchedFiles=new Set;this.builtinKeys=[];this._errorItems=[];this._onError=new PR.Emitter;this._onChange=new PR.Emitter;this.disposables=[];this.onError=this._onError.event;this.onDidChange=this._onChange.event;let o=this.loadDefaultConfigurations(),s=this.parseConfigurationModel(this.userConfigFile);this._configuration=new Ra(o,s),this.watchFile(this.userConfigFile,1);let a=this.folderToConfigfile(r);a&&this.addFolderFile(a,!0)}get errorItems(){return this._errorItems}get configuration(){return this._configuration}loadDefaultConfigurations(){let e=_a.default.resolve(__dirname,".."),t=_a.default.join(e,"data/schema.json"),i=fs.default.readFileSync(t,"utf8"),{properties:r}=JSON.parse(i),o={},s=[];return Object.keys(r).forEach(l=>{let u=r[l].default;s.push(l),u!==void 0&&kp(o,l,u,c=>{console.error(`Conflict keys in ${t}, ${c}`)})}),this.builtinKeys=s.slice(),new ri(o,s)}parseConfigurationModel(e){let t=new ix(e),i=e&&fs.default.existsSync(e)?fs.default.readFileSync(e,"utf8"):"";return t.parse(i),t.errors.length&&(this._errorItems=t.errors,this._onError.fire(this._errorItems)),t.configurationModel}folderToConfigfile(e){if(ni(e,lJ.default.homedir()))return;let t=_a.default.join(e,`.vim/${Uc}`);if(!ni(t,this.userConfigFile))return t}extendsDefaults(e,t){let{defaults:i}=this._configuration,r=i.isFrozen?i.clone():i;Object.keys(e).forEach(o=>{if(t&&this.builtinKeys.includes(o)){TR.error(`Invalid configuration "${o}" from ${t}, overwrite defaults is forbidden.`);return}r.setValue(o,e[o])}),this._configuration.updateDefaultConfiguration(r)}updateMemoryConfig(e){let t=Object.keys(e);if(!e||t.length==0)return;let{builtinKeys:i}=this,r=this._configuration.memory.clone();t.forEach(o=>{let s=e[o];if(s===void 0)r.removeValue(o);else if(i.includes(o))r.setValue(o,s);else if(hi(s))for(let a of Object.keys(s))r.setValue(`${o}.${a}`,s[a]);else r.setValue(o,s)}),this.changeConfiguration(4,r,void 0,t)}addFolderFile(e,t=!1,i){let r=In(_a.default.resolve(e,"../.."));if(this._configuration.hasFolder(r)||!fs.default.existsSync(e))return!1;this.watchFile(e,3);let o=this.parseConfigurationModel(e);return this._configuration.addFolderConfiguration(r,o,i),TR.info(`Add folder configuration from ${t?"cwd":"file"}:`,e),!0}watchFile(e,t){if(!fs.default.existsSync(e)||this._watchedFiles.has(e)||this.noWatch)return;this._watchedFiles.add(e);let i=3?In(_a.default.resolve(e,"../..")):void 0,r=Xc(e,()=>{let o=this.parseConfigurationModel(e);this.changeConfiguration(t,o,i)});this.disposables.push(r)}changeConfiguration(e,t,i,r){let o=this._configuration,s=o.toData(),a;if(e===0?a=o.compareAndUpdateDefaultConfiguration(t,r):e===1?a=o.compareAndUpdateUserConfiguration(t):e===2?a=o.compareAndUpdateWorkspaceConfiguration(t):e===3?a=o.compareAndUpdateFolderConfiguration(i,t):a=o.compareAndUpdateMemoryConfiguration(t),!a||a.keys.length==0)return;let l=new tx(a,s,o);l.source=e,this._onChange.fire(l)}getConfiguration(e,t){var a;let i=this._configuration,r=t?Qw(t):{resource:t===null||(a=this._proxy)==null?void 0:a.root},o=Object.freeze(kR(i.getValue(void 0,r),e)),s={has(l){return typeof kR(o,l)<"u"},get:(l,u)=>{let c=kR(o,l);return c??u},update:(l,u,c=!1)=>{var b;let h=r.resource,d=e?`${e}.${l}`:l,g;typeof c=="boolean"?g=c?1:3:g=tJ(c);let p;if(g===3&&(p=this._configuration.resolveFolder(h)??this.resolveWorkspaceFolderForResource(h),!p)){console.error(`Unable to locate workspace folder configuration for ${h}`),TR.error("Unable to locate workspace folder configuration",h,Error().stack);return}let f=this._configuration.getConfigurationModel(g,p).clone();u===void 0?f.removeValue(d):f.setValue(d,u),this.changeConfiguration(g,f,p);let m;return g===3?m=this.folderToConfigfile(p):g===1&&(m=this.userConfigFile),m?(b=this._proxy)==null?void 0:b.modifyConfiguration(m,d,u):Promise.resolve()},inspect:l=>{l=e?`${e}.${l}`:l;let u=this._configuration.inspect(l,r);return{key:l,defaultValue:u.defaultValue,globalValue:u.userValue,workspaceValue:u.workspaceValue,workspaceFolderValue:u.workspaceFolderValue}}};return Object.defineProperty(s,"has",{enumerable:!1}),Object.defineProperty(s,"get",{enumerable:!1}),Object.defineProperty(s,"update",{enumerable:!1}),Object.defineProperty(s,"inspect",{enumerable:!1}),typeof o=="object"&&K0(s,o,!1),hw(s)}locateFolderConfigution(e){let t=this._configuration.resolveFolder(e);if(t)return!0;let i=j.parse(e);if(i.scheme!=="file")return!1;let r=t=ih(".vim",i.fsPath);if(!r)return!1;t=_a.default.dirname(r);let o=this.folderToConfigfile(t);return o?(this.addFolderFile(o,!1,e),!0):!1}resolveWorkspaceFolderForResource(e){if(this._proxy&&typeof this._proxy.getWorkspaceFolder=="function"){let t=this._proxy.getWorkspaceFolder(e);if(!t)return;let i=t.fsPath,r=this.folderToConfigfile(i);if(r)return fs.default.existsSync(r)||(fs.default.mkdirSync(_a.default.dirname(r),{recursive:!0}),fs.default.writeFileSync(r,"{}","utf8")),this.addFolderFile(r,!1,e),i}}reset(){this._errorItems=[];let e=new ri;this.changeConfiguration(4,e,void 0)}dispose(){this._onError.dispose(),this._onChange.dispose(),U(this.disposables)}}});var Rp,cJ,kbe,_p,hJ=k(()=>{"use strict";Rp=S(require("fs"));_w();cJ=S(require("path"));Pe();kbe=q()("configuration-shape"),_p=class{constructor(e,t=!1){this.resolver=e;this._test=t}get root(){return this.resolver.root}async modifyConfiguration(e,t,i){if(this._test)return;kbe.info(`modify configuration file: ${e}`,t,i);let r=cJ.default.dirname(e),o={tabSize:2,insertSpaces:!0};Rp.default.existsSync(r)||Rp.default.mkdirSync(r,{recursive:!0});let s=Rp.default.readFileSync(e,{encoding:"utf8",flag:"a+"});s=s||"{}";let a=WW(s,[t],i,{formattingOptions:o});s=YW(s,a),Rp.default.writeFileSync(e,s,{encoding:"utf8"})}getWorkspaceFolder(e){if(typeof this.resolver.getWorkspaceFolder=="function"){let t=this.resolver.getWorkspaceFolder(e);if(t)return j.parse(t.uri)}}}});var ER,dJ,RR,gJ,Pbe,Lp,pJ=k(()=>{"use strict";ER=S(require("fs")),dJ=S(require("os")),RR=S(require("path")),gJ=S(W());re();Pbe=q()("core-autocmds"),Lp=class{constructor(e,t){this.contentProvider=e;this.watchers=t;this._dynAutocmd=!1;this.autocmdMaxId=0;this.autocmds=new Map;this.disposables=[];this.contentProvider.onDidProviderChange(()=>{this.setupDynamicAutocmd()},null,this.disposables),this.watchers.onDidOptionChange(()=>{this.setupDynamicAutocmd()},null,this.disposables)}attach(e,t){this.nvim=e,this.env=t}async doAutocmd(e,t){let i=this.autocmds.get(e);if(i){let r=Array.isArray(i.event)?i.event.join(","):i.event;Pbe.debug(`invoke ${i.request?"request":"notify"} autocmd:`,r),await Promise.resolve(i.callback.apply(i.thisArg,t))}}registerAutocmd(e){this.autocmdMaxId+=1;let t=this.autocmdMaxId;return this.autocmds.set(t,e),this.setupDynamicAutocmd(),gJ.Disposable.create(()=>{this.autocmds.delete(t),this.setupDynamicAutocmd()})}setupDynamicAutocmd(e=!1){if(!e&&!this._dynAutocmd)return;this._dynAutocmd=!0;let t=this.contentProvider.schemes,i=[];for(let o of t)i.push(`autocmd BufReadCmd,FileReadCmd,SourceCmd ${o}:/* call coc#rpc#request('CocAutocmd', ['BufReadCmd','${o}', expand('')])`);for(let[o,s]of this.autocmds.entries()){let a=s.arglist&&s.arglist.length?", "+s.arglist.join(", "):"",l=Array.isArray(s.event)?s.event.join(","):s.event,u=s.pattern!=null?s.pattern:"*";/\buser\b/i.test(l)&&(u=""),i.push(`autocmd ${l} ${u} call coc#rpc#${s.request?"request":"notify"}('doAutocmd', [${o}${a}])`)}for(let o of this.watchers.options)i.push(`autocmd OptionSet ${o} call coc#rpc#notify('OptionSet',[expand(''), v:option_old, v:option_new])`);let r=` -augroup coc_dynamic_autocmd - autocmd! - ${i.join(` - `)} -augroup end`;if(this.nvim.hasFunction("nvim_exec"))this.nvim.exec(r,!1);else{let o=RR.default.join(process.env.TMPDIR||dJ.default.tmpdir(),`coc.nvim-${process.pid}`);ER.default.mkdirSync(o,{recursive:!0});let s=RR.default.join(o,`coc-${process.pid}.vim`);ER.default.writeFileSync(s,r,"utf8");let a=`source ${s}`;this.env.isCygwin&&us.isWindows&&(a=`execute "source" . substitute(system('cygpath ${s.replace(/\\/g,"/")}'), '\\n', '', 'g')`),this.nvim.command(a)}}dispose(){this.nvim.command("augroup coc_dynamic_autocmd| autocmd!|augroup end",!0),U(this.disposables)}}});var eu,Ip,fJ=k(()=>{"use strict";eu=S(W());Pe();fe();re();Ip=class{constructor(e){this.documents=e;this.disposables=[];this.providers=new Map;this._onDidProviderChange=new eu.Emitter;this.onDidProviderChange=this._onDidProviderChange.event}attach(e){this.nvim=e,P.on("BufReadCmd",this.onBufReadCmd,this,this.disposables)}get schemes(){return Array.from(this.providers.keys())}async onBufReadCmd(e,t){let i=this.providers.get(e);if(!i)return;let r=new eu.CancellationTokenSource,o=await Promise.resolve(i.provideTextDocumentContent(j.parse(t),r.token)),s=await this.nvim.buffer;await s.setLines(o.split(/\r?\n/),{start:0,end:-1,strictIndexing:!1}),process.nextTick(()=>{P.fire("BufCreate",[s.id])})}registerTextDocumentContentProvider(e,t){this.providers.set(e,t),this._onDidProviderChange.fire();let i=[];return t.onDidChange&&t.onDidChange(async r=>{let{buffer:o}=this.documents.getDocument(r.toString()),s=new eu.CancellationTokenSource,a=await Promise.resolve(t.provideTextDocumentContent(r,s.token));await o.setLines(a.split(/\r?\n/),{start:0,end:-1,strictIndexing:!1})},null,i),eu.Disposable.create(()=>{this.providers.delete(e),U(i),this._onDidProviderChange.fire()})}dispose(){U(this.disposables),this._onDidProviderChange.dispose(),this.providers.clear()}}});var yJ=y((rje,rx)=>{"use strict";rx.exports=Lbe;rx.exports.format=mJ;rx.exports.parse=bJ;var Ebe=/\B(?=(\d{3})+(?!\d))/g,Rbe=/(?:\.0*|(\.[^0]+)0+)$/,La={b:1,kb:1<<10,mb:1<<20,gb:1<<30,tb:Math.pow(1024,4),pb:Math.pow(1024,5)},_be=/^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;function Lbe(n,e){return typeof n=="string"?bJ(n):typeof n=="number"?mJ(n,e):null}function mJ(n,e){if(!Number.isFinite(n))return null;var t=Math.abs(n),i=e&&e.thousandsSeparator||"",r=e&&e.unitSeparator||"",o=e&&e.decimalPlaces!==void 0?e.decimalPlaces:2,s=Boolean(e&&e.fixedDecimals),a=e&&e.unit||"";(!a||!La[a.toLowerCase()])&&(t>=La.pb?a="PB":t>=La.tb?a="TB":t>=La.gb?a="GB":t>=La.mb?a="MB":t>=La.kb?a="KB":a="B");var l=n/La[a.toLowerCase()],u=l.toFixed(o);return s||(u=u.replace(Rbe,"$1")),i&&(u=u.replace(Ebe,i)),u+r+a}function bJ(n){if(typeof n=="number"&&!isNaN(n))return n;if(typeof n!="string")return null;var e=_be.exec(n),t,i="b";return e?(t=parseFloat(e[1]),i=e[4].toLowerCase()):(t=parseInt(n,10),i="b"),Math.floor(La[i]*t)}});var jp=y((oje,TJ)=>{var Io=-1,oo=1,Fn=0;function Fp(n,e,t,i){if(n===e)return n?[[Fn,n]]:[];if(t!=null){var r=Obe(n,e,t);if(r)return r}var o=LR(n,e),s=n.substring(0,o);n=n.substring(o),e=e.substring(o),o=IR(n,e);var a=n.substring(n.length-o);n=n.substring(0,n.length-o),e=e.substring(0,e.length-o);var l=Ibe(n,e);return s&&l.unshift([Fn,s]),a&&l.push([Fn,a]),wJ(l,i),l}function Ibe(n,e){var t;if(!n)return[[oo,e]];if(!e)return[[Io,n]];var i=n.length>e.length?n:e,r=n.length>e.length?e:n,o=i.indexOf(r);if(o!==-1)return t=[[oo,i.substring(0,o)],[Fn,r],[oo,i.substring(o+r.length)]],n.length>e.length&&(t[0][0]=t[2][0]=Io),t;if(r.length===1)return[[Io,n],[oo,e]];var s=jbe(n,e);if(s){var a=s[0],l=s[1],u=s[2],c=s[3],h=s[4],d=Fp(a,u),g=Fp(l,c);return d.concat([[Fn,h]],g)}return Fbe(n,e)}function Fbe(n,e){for(var t=n.length,i=e.length,r=Math.ceil((t+i)/2),o=r,s=2*r,a=new Array(s),l=new Array(s),u=0;ut)g+=2;else if(T>i)d+=2;else if(h){var R=o+c-b;if(R>=0&&R=F)return vJ(n,e,x,T)}}}for(var N=-m+p;N<=m-f;N+=2){var R=o+N,F;N===-m||N!==m&&l[R-1]t)f+=2;else if(J>i)p+=2;else if(!h){var w=o+c-N;if(w>=0&&w=F)return vJ(n,e,x,T)}}}}return[[Io,n],[oo,e]]}function vJ(n,e,t,i){var r=n.substring(0,t),o=e.substring(0,i),s=n.substring(t),a=e.substring(i),l=Fp(r,o),u=Fp(s,a);return l.concat(u)}function LR(n,e){if(!n||!e||n.charAt(0)!==e.charAt(0))return 0;for(var t=0,i=Math.min(n.length,e.length),r=i,o=0;te.length?n:e,i=n.length>e.length?e:n;if(t.length<4||i.length*2=g.length?[x,T,R,F,w]:null}var o=r(t,i,Math.ceil(t.length/4)),s=r(t,i,Math.ceil(t.length/2)),a;if(!o&&!s)return null;s?o?a=o[4].length>s[4].length?o:s:a=s:a=o;var l,u,c,h;n.length>e.length?(l=a[0],u=a[1],c=a[2],h=a[3]):(c=a[0],h=a[1],l=a[2],u=a[3]);var d=a[4];return[l,u,c,h,d]}function wJ(n,e){n.push([Fn,""]);for(var t=0,i=0,r=0,o="",s="",a;t=0&&DJ(n[l][1])){var u=n[l][1].slice(-1);if(n[l][1]=n[l][1].slice(0,-1),o=u+o,s=u+s,!n[l][1]){n.splice(l,1),t--;var c=l-1;n[c]&&n[c][0]===oo&&(r++,s=n[c][1]+s,c--),n[c]&&n[c][0]===Io&&(i++,o=n[c][1]+o,c--),l=c}}if(SJ(n[t][1])){var u=n[t][1].charAt(0);n[t][1]=n[t][1].slice(1),o+=u,s+=u}}if(t0||s.length>0){o.length>0&&s.length>0&&(a=LR(s,o),a!==0&&(l>=0?n[l][1]+=s.substring(0,a):(n.splice(0,0,[Fn,s.substring(0,a)]),t++),s=s.substring(a),o=o.substring(a)),a=IR(s,o),a!==0&&(n[t][1]=s.substring(s.length-a)+n[t][1],s=s.substring(0,s.length-a),o=o.substring(0,o.length-a)));var h=r+i;o.length===0&&s.length===0?(n.splice(t-h,h),t=t-h):o.length===0?(n.splice(t-h,h,[oo,s]),t=t-h+1):s.length===0?(n.splice(t-h,h,[Io,o]),t=t-h+1):(n.splice(t-h,h,[Io,o],[oo,s]),t=t-h+2)}t!==0&&n[t-1][0]===Fn?(n[t-1][1]+=n[t][1],n.splice(t,1)):t++,r=0,i=0,o="",s="";break}}n[n.length-1][1]===""&&n.pop();var d=!1;for(t=1;t=55296&&n<=56319}function CJ(n){return n>=56320&&n<=57343}function SJ(n){return CJ(n.charCodeAt(0))}function DJ(n){return xJ(n.charCodeAt(n.length-1))}function Mbe(n){for(var e=[],t=0;t0&&e.push(n[t]);return e}function _R(n,e,t,i){return DJ(n)||SJ(i)?null:Mbe([[Fn,n],[Io,e],[oo,t],[Fn,i]])}function Obe(n,e,t){var i=typeof t=="number"?{index:t,length:0}:t.oldRange,r=typeof t=="number"?null:t.newRange,o=n.length,s=e.length;if(i.length===0&&(r===null||r.length===0)){var a=i.index,l=n.slice(0,a),u=n.slice(a),c=r?r.index:null;e:{var h=a+s-o;if(c!==null&&c!==h||h<0||h>s)break e;var d=e.slice(0,h),g=e.slice(h);if(g!==u)break e;var p=Math.min(a,h),f=l.slice(0,p),m=d.slice(0,p);if(f!==m)break e;var b=l.slice(p),w=d.slice(p);return _R(f,b,w,u)}e:{if(c!==null&&c!==a)break e;var x=a,d=e.slice(0,x),g=e.slice(x);if(d!==l)break e;var T=Math.min(o-x,s-x),R=u.slice(u.length-T),F=g.slice(g.length-T);if(R!==F)break e;var b=u.slice(0,u.length-T),w=g.slice(0,g.length-T);return _R(l,b,w,R)}}if(i.length>0&&r&&r.length===0){e:{var f=n.slice(0,i.index),R=n.slice(i.index+i.length),p=f.length,T=R.length;if(sr&&s.length){let l=0;for(let u=0;u=m&&b!==f&&(b+=1);let w=0;for(let R=0;R0?h.join(` -`)+` -`:"";if(!(d.length===0&&a===r-c))return un.replace(Be.create(a,0,r-c,0),d)}var sx,lje,FR=k(()=>{"use strict";sx=S(jp());Kn();_e();lje=q()("util-diff")});function RJ(n){let{start:e,end:t}=n.range;return n.newText.endsWith(` -`)&&e.line==t.line&&e.character==0&&t.character==0?e.line-1:e.line}function Ia(n){let{newText:e}=n,t=ax(n.range),i=t.end.line-t.start.line;return e.split(/\r?\n/).length-i-1}function ax(n){let e=n.start,t=n.end;return e.line>t.line||e.line===t.line&&e.character>t.character?{start:t,end:e}:n}function jR(n,e){if(n.length<=1)return n;let t=n.length/2|0,i=n.slice(0,t),r=n.slice(t);jR(i,e),jR(r,e);let o=0,s=0,a=0;for(;o{let i=e.range.start.line-t.range.start.line;return i===0?e.range.start.character-t.range.start.character:i})}function _J(n){let{changes:e,documentChanges:t}=n;return!(t&&t.length||e&&Object.keys(e).length)}function LJ(n,e){var i;let t=[];for(let r of n){let o=Mp(r);o&&!t.includes(o)&&((i=e[o])==null?void 0:i.needsConfirmation)&&t.push(o)}return t}function Mp(n){let e;return Sr.TextDocumentEdit.is(n)?Sr.AnnotatedTextEdit.is(n.edits[0])&&(e=n.edits[0].annotationId):e=n.annotationId,e}function IJ(n){if(n.documentChanges)return n.documentChanges;let e=[];if(n.changes)for(let[t,i]of Object.entries(n.changes))e.push({textDocument:{uri:t,version:null},edits:i});return e}function FJ(n,e){let t=[],i=n.end,r=i.line>0&&i.character==0,o;for(let s=0;s0){let d=t[t.length-1];d.newText=l,o=void 0;continue}o=void 0}l.includes("\r")&&(l=l.replace(/\r\n/g,` -`));let h=Me(u.end,i);if(h>0&&(u.end={line:i.line,character:i.character}),n.getText(u)!==l){if(h===0&&r&&!Lt(u)&&l.endsWith(` -`)){l=l.slice(0,-1);let d=n.lines[i.line-1];u.end=Sr.Position.create(i.line-1,d.length)}else l.length==0&&(o=u.start);t.push({range:u,newText:l})}}return MR(t)}function jJ(n,e){if(e.length==1){let{start:s,end:a}=e[0].range,{lines:l}=n,u=l[s.line]??"",c=l[a.line]??"",h=u.substring(0,s.character)+e[0].newText+c.substring(a.character);return a.line>=l.length&&n.eol?h==""?[...l.slice(0,s.line)]:(h.endsWith(` -`)&&(h=h.slice(0,-1)),[...l.slice(0,s.line),...h.split(` -`)]):[...l.slice(0,s.line),...h.split(` -`),...l.slice(a.line+1)]}let t=n.getText(),i=0,r=[];for(let s of e){let a=n.offsetAt(s.range.start);if(ai&&r.push(t.substring(i,a)),s.newText.length&&r.push(s.newText),i=n.offsetAt(s.range.end)}r.push(t.substring(i));let o=r.join("");if(o!==t)return DB(o,n.eol)}function MJ(n,e){return e.map(t=>{let{start:i,end:r}=t.range,o=n[i.line]??"",s=Q(o.slice(0,i.character)),a=r.line==i.line?o:n[r.line]??"",l=Q(a.slice(0,r.character)),{newText:u}=t;return[u.length>0?u.split(` -`):[],i.line,s,r.line,l]})}function lx(n,e){let{range:t,newText:i}=e;if(Me(t.end,n)<=0){let r=i.split(` -`),o=r.length-(t.end.line-t.start.line)-1,s=n.character;if(t.end.line==n.line){let a=r[r.length-1].length;r.length>1?s=a+s-t.end.character:s=t.start.character+a+s-t.end.character}return{line:o,character:s-n.character}}return{line:0,character:0}}function ux(n,e){let{line:t,character:i}=n,{range:r,newText:o}=e,{end:s}=r,a=o.split(` -`),l=a.length-(s.line-r.start.line)-1,u=r.end.line-n.line;if(u>0)return{line:t,character:i};if(u<0)return{line:t+l,character:i};if(a.length>1){let h=a[a.length-1].length;return{line:t+l,character:h+i-s.character}}let c=r.start.character-r.end.character;return{line:t+l,character:c+o.length+i}}function cx(n,e){let t=Sr.Position.create(n.line,n.character),i=!1;for(let r=e.length-1;r>=0;r--){let o=e[r];if(i){t.line+=Ia(o);continue}Me(o.range.end,t)>0||(o.range.end.line==t.line?t=ux(t,o):(i=!0,t.line+=Ia(o)))}return t}function OR(n,e){let t=0;for(let i of e){let r=ax(i.range);Me(r.end,n)<=0&&(t+=Ia(i))}return t}function OJ(n,e,t){let i=n[0].range.start,r=n[n.length-1].range.end,o=e.length-r.line,s=(e[r.line]??"").length-r.character,a=t.length-o,l=(t[a]??"").length-s,u=Abe(i,Sr.Position.create(a,l),t);return Sr.TextEdit.replace(Sr.Range.create(i,r),u)}function Abe(n,e,t){if(n.line===e.line)return(t[n.line]??"").slice(n.character,e.character);let i=[];for(let r=n.line;r<=e.line;r++){let o=t[r]??"";r===n.line?i.push(o.slice(n.character)):r===e.line?i.push(o.slice(0,e.character)):i.push(o)}return i.join(` -`)}var Sr,so=k(()=>{"use strict";Sr=S(W());xt();_e()});function AR(n){if(/^\d+$/.test(n))return parseInt(n,10);if(n.length>0)return n.charCodeAt(0)}function Hbe(n){let e=[],t=0,i=0,r=n.length;for(;t{"use strict";NJ=S(W());re();nt();et();vje=q()("model-chars"),Nbe=[[257,893],[895,902],[904,1369],[1376,1416],[1418,1469],[1471,1471],[1473,1474],[1476,1522],[1525,1547],[1549,1562],[1564,1566],[1568,1641],[1646,1747],[1749,1791],[1806,2403],[2406,2415],[2417,3571],[3573,3662],[3664,3673],[3676,3843],[3859,3897],[3902,3972],[3974,4169],[4176,4346],[4348,4960],[4969,5740],[5743,5759],[5761,5786],[5789,5866],[5870,5940],[5943,6099],[6109,6143],[6155,8191],[10240,10495],[10649,10711],[10716,10747],[10750,11775],[11904,12287],[12321,12335],[12337,12348],[12350,64829],[64832,65071],[65132,65279],[65296,65305],[65313,65338],[65345,65370],[65382,65535]],AJ=65535;bh=class{constructor(e=[],t=!1){this.ranges=e;this.wordChars=t}clone(){return new bh(this.ranges.slice(),this.wordChars)}add(e,t){let i=0,r=0;if(t!=null&&tt)break;if(r++,st){t=a;break}}this.ranges.splice(i,r,[e,t])}exclude(e,t){if(t!=null&&tt)break;if(r++,at){o.push([t+1,l]);break}}r==0&&o.length==0||this.ranges.splice(i,r,...o)}flatten(){return this.ranges.reduce((e,t)=>e.concat(t),[])}includes(e){return e>256&&this.wordChars?eE(e,Nbe):eE(e,this.ranges)}static fromKeywordOption(e){let t=new bh;for(let i of Hbe(e)){let r=i.length>1&&i.startsWith("^"),o=r?"exclude":"add";if(r&&(i=i.slice(1)),i==="@"&&!r)t.wordChars=!0,t[o](65,90),t[o](97,122),t[o](192,255);else if(i=="@-@")t[o]("@".charCodeAt(0));else if(i.length==1||/^\d+$/.test(i))t[o](AR(i));else if(i.includes("-")){let s=i.split("-",2),a=AR(s[0]),l=AR(s[1]);if(a===void 0||l===void 0)continue;t[o](a,l)}}return t}},yh=class{constructor(e){this.ranges=bh.fromKeywordOption(e)}addKeyword(e){this.ranges.add(e.codePointAt(0))}clone(){let e=new yh("");return e.ranges=this.ranges.clone(),e}isKeywordCode(e){return e===32||e>AJ?!1:this.ranges.includes(e)}isKeywordChar(e){let t=e.charCodeAt(0);return this.isKeywordCode(t)}isKeyword(e){for(let t=0,i=e.length;ti&&(e=e.slice(0,i),o=i);let s=-1,a=0,l=u=>{if(u-sAJ?a+=u.length:a++}return s!=-1&&l(o),r}async matchLines(e,t=2,i){let r=new Set,o=Date.now();for(let s of e){if(s.length===0)continue;let a="";Date.now()-o>15&&(await wr(),o=Date.now());for(let l of s){if(i&&i.isCancellationRequested)return;let u=l.codePointAt(0);this.isKeywordCode(u)?a=a+l:a.length>0&&(a.length>=t&&a.length<48&&r.add(a),a="")}a.length>=t&&a.length<48&&r.add(a)}return r}async computeWordRanges(e,t,i){let r=t.start.line,o=t.end.line,s={},a=Date.now();for(let l=r;l<=o;l++){let u=e[l];if(u===void 0)break;let c=l===r?t.start.character:0;if(l===r&&(u=u.slice(c)),l===o&&(u=u.slice(0,t.end.character-c)),Date.now()-a>15){if(i&&i.isCancellationRequested)break;await wr(),a=Date.now()}let h=-1,d=g=>{let p=u.slice(h,g),f=Qr(s,p)?s[p]:[];f.push(NJ.Range.create(l,h+c,l,g+c)),s[p]=f};for(let g=0,p=u.length;g{"use strict";NR=S(W()),hx=class{constructor(e,t,i){this._line=e,this._text=t,this._isLastLine=i}get lineNumber(){return this._line}get text(){return this._text}get range(){return NR.Range.create(this._line,0,this._line,this._text.length)}get rangeIncludingLineBreak(){return this._isLastLine?this.range:NR.Range.create(this._line,0,this._line+1,0)}get firstNonWhitespaceCharacterIndex(){return/^(\s*)/.exec(this._text)[1].length}get isEmptyOrWhitespace(){return this.firstNonWhitespaceCharacterIndex===this._text.length}}});function qbe(n,e){let t=[],i=0;for(let r of n)t.push(i),i+=r.length+1;return e&&t.push(i),t}var dx,vh,BJ=k(()=>{"use strict";dx=S(W());qJ();vh=class{constructor(e,t,i,r,o,s){this.uri=e;this.languageId=t;this.version=i;this.lines=r;this.bufnr=o;this.eol=s}get content(){return this._content||(this._content=this.lines.join(` -`)+(this.eol?` -`:"")),this._content}get length(){if(!this._content){let e=this.lines.reduce((t,i)=>t+i.length+1,0);return this.eol?e:e-1}return this._content.length}get end(){let e=this.lineCount-1;return this.eol?dx.Position.create(e,0):dx.Position.create(e,this.lines[e].length)}get lineCount(){return this.lines.length+(this.eol?1:0)}getText(e){if(e){let{start:t,end:i}=e;return t.line===i.line?t.character===i.character?"":(this.lines[t.line]??"").substring(t.character,i.character):this.content.substring(this.offsetAt(e.start),this.offsetAt(e.end))}return this.content}lineAt(e){let t=dx.Position.is(e)?e.line:e;if(typeof t!="number"||t<0||t>=this.lineCount||Math.floor(t)!==t)throw new Error("Illegal value for `line`");return new hx(t,this.lines[t]??"",t===this.lineCount-1)}positionAt(e){e=Math.max(Math.min(e,this.content.length),0);let t=this.getLineOffsets(),i=0,r=t.length;if(r===0)return{line:0,character:e};for(;ie?r=s:i=s+1}let o=i-1;return{line:o,character:e-t[o]}}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this.content.length;if(e.line<0)return 0;let i=t[e.line],r=e.line+1{"use strict";qR=S(Pn()),Dr=S(W());Pe();fe();FR();re();et();xt();_e();so();HJ();BJ();Hje=q()("model-document"),Op=class{constructor(e,t,i,r){this.buffer=e;this.env=t;this.nvim=i;this.isIgnored=!1;this.eol=!0;this._disposed=!1;this._attached=!1;this._notAttachReason="";this._previewwindow=!1;this._winid=-1;this.disposables=[];this.lines=[];this._onDocumentChange=new Dr.Emitter;this.onDocumentChange=this._onDocumentChange.event;this.fireContentChanges=(0,qR.default)(()=>{this._fireContentChanges()},150),this.fetchContent=(0,qR.default)(()=>{this._fetchContent()},100),this.init(r)}get content(){return this.syncLines.join(` -`)+(this.eol?` -`:"")}get attached(){return this._attached}get textDocument(){return this._textDocument}get syncLines(){return this._textDocument.lines}get version(){return this._textDocument.version}get bufnr(){return this.buffer.id}get bufname(){return this._bufname}get filetype(){return this._filetype}get uri(){return this._uri}get isCommandLine(){return this.uri&&this.uri.endsWith("%5BCommand%20Line%5D")}get enabled(){return this.getVar("enabled",!0)}get languageId(){let{_filetype:e}=this;return e.includes(".")?e.match(/(.*?)\./)[1]:e}get changedtick(){return this._changedtick}convertFiletype(e){switch(e){case"javascript.jsx":return"javascriptreact";case"typescript.jsx":case"typescript.tsx":return"typescriptreact";case"tex":return"latex";default:{let t=this.env.filetypeMap;return String(t[e]||e)}}}get schema(){return j.parse(this.uri).scheme}get lineCount(){return this.lines.length}get winid(){return this._winid}get previewwindow(){return this._previewwindow}init(e){let t=this.buftype=e.buftype;this._bufname=e.bufname,this._previewwindow=!!e.previewwindow,this._winid=e.winid,this.variables=e.variables||{},this._changedtick=e.changedtick,this.eol=e.eol==1,this._uri=dB(e.fullpath,this.bufnr,t,this.env.isCygwin),Array.isArray(e.lines)?(this.lines=e.lines,this._noFetch=!0,this._attached=!0,this.attach()):["","acwrite"].includes(t)?this.variables.coc_enabled===0?this._notAttachReason="b:coc_enabled = 0":this._notAttachReason=`buffer size ${e.size} exceed coc.preferences.maxFileSize`:this._notAttachReason=`not a normal buffer, buftype "${t}"`,this._filetype=this.convertFiletype(e.filetype),this.setIskeyword(e.iskeyword,e.lisp),this.createTextDocument(1,this.lines)}get notAttachReason(){return this._notAttachReason}attach(){if(this.env.isVim)return;let e=this.lines;this.buffer.attach(!0).then(t=>{t||HR(this.bufnr)},t=>{HR(this.bufnr)}),this.buffer.listen("lines",(t,i,r,o,s)=>{if(!(t.id!==this.bufnr||!this._attached||i==null)&&i>this._changedtick){if(this._changedtick=i,e=[...e.slice(0,r),...s,...o==-1?[]:e.slice(o)],e.length==0&&(e=[""]),this.lines=e,wh(t.id),P.pumvisible)return;this.fireContentChanges()}},this.disposables),this.buffer.listen("detach",()=>{HR(this.bufnr)},this.disposables)}get dirty(){return this.lines!==this.syncLines}get hasChanged(){return this.dirty?!ye(this.lines,this.syncLines):!1}_fireContentChanges(e){if(this.lines===this.syncLines)return;let t=this._textDocument,i=[];if(!e){let{cursor:s}=P,a;if(s&&s.bufnr==this.bufnr){let l=this.lines[s.lnum-1]??"";a=Dr.Position.create(s.lnum-1,Gi(l,s.col-1))}e=EJ(t.lines,this.lines,a,s?s.insert:!1)}let r;e?(r=t.getText(e.range),i.push({range:e.range,text:e.newText,rangeLength:r.length})):r="";let o=this.createTextDocument(this.version+(e?1:0),this.lines);this._onDocumentChange.fire(Object.freeze({bufnr:this.bufnr,original:r,originalLines:t.lines,textDocument:{version:o.version,uri:this.uri},contentChanges:i}))}async applyEdits(e,t=!1,i=!1){var m;if(Array.isArray(arguments[1])&&(e=arguments[1]),!this._attached||e.length===0)return;this._forceSync();let r=this.textDocument;if(e=FJ(r,e),e.length===0)return;let o=jJ(r,e);if(!o)return;let s=r.lines,a=kJ(s,o,RJ(e[0]));if(a.start===a.end&&a.replacement.length==0)return;let l=a.start===a.end&&a.start===s.length+(this.eol?0:1),u=s.slice(a.start,a.end),c=[];this.nvim.hasFunction("nvim_buf_set_text")&&e.length<200&&a.start!==a.end&&e[e.length-1].range.end.line0?` -`:""))}async changeLines(e){let t=[],i=this.lines.slice();for(let[r,o]of e)i[r]!=o&&(t.push([r,o]),i[r]=o);!t.length||(this.nvim.call("coc#ui#change_lines",[this.bufnr,t],!0),this.nvim.redrawVim(),this.lines=i,wh(this.bufnr),this._forceSync())}_forceSync(){this.fireContentChanges.clear(),this._fireContentChanges()}forceSync(){}getOffset(e,t){return this.textDocument.offsetAt({line:e-1,character:t})}isWord(e){return this.chars.isKeyword(e)}getStartWord(e){let t=0;for(;t=0;){let u=o[a-1];if(!u||!r.isKeywordChar(u))break;a=a-1}for(;l<=o.length;){let u=o[l];if(!u||!r.isKeywordChar(u))break;l=l+1}return Dr.Range.create(e.line,a,e.line,l)}createTextDocument(e,t){let{uri:i,languageId:r,eol:o}=this;return this._textDocument=new vh(i,r,e,t,this.bufnr,o)}async _fetchContent(e){if(!this.env.isVim||!this._attached)return;let{nvim:t,bufnr:i,changedtick:r}=this,o=await t.call("coc#util#get_buf_lines",[i,r]);this._noFetch=!0,o?(this._changedtick=o.changedtick,this.lines=o.lines,wh(this.bufnr),e?this._forceSync():this.fireContentChanges()):e&&this._forceSync()}changeLine(e,t,i){if(this.lines[e-1]===void 0)return;let o=this.lines.slice();o[e-1]=t,this.lines=o,wh(this.bufnr),this._changedtick=i}async patchChange(e){if(!!this._attached)if(this.env.isVim)if(e){let t=await this.nvim.call("coc#util#get_changeinfo",[]);if(t.bufnr!==this.bufnr)return;if(t.changedtick0&&!d&&l==e&&s.push(Dr.Range.create(o.positionAt(u-l.length),o.positionAt(u))),d||(l="")}return s}fixStartcol(e,t){let i=this.getline(e.line);if(!i)return null;let{character:r}=e,o=i.slice(0,r),s=Q(o),{chars:a}=this;for(let l=o.length-1;l>=0;l--){let u=o[l];if(u==" "||!a.isKeywordChar(u)&&!t.includes(u))break;s=s-Q(u)}return s}addHighlights(e,t,i,r={}){let{start:o,end:s}=i;if(!Lt(i))for(let a=o.line;a<=s.line;a++){let l=this.getline(a,!1),u=a==o.line?_t(l,o.character):0,c=a==s.line?_t(l,s.character):global.Buffer.byteLength(l);u>=c||e.push(Object.assign({hlGroup:t,lnum:a,colStart:u,colEnd:c},r))}}getline(e,t=!0){return t?this.lines[e]||"":this.syncLines[e]||""}getLines(e,t){return this.lines.slice(e??0,t??this.lines.length)}getDocumentContent(){let e=this.lines.join(` -`);return this.eol?e+` -`:e}getVar(e,t){let i=this.variables[`coc_${e}`];return i===void 0?t:i}getPosition(e,t){let i=this.getline(e-1);if(!i||t==0)return{line:e-1,character:0};let r=tt(i,0,t-1);return{line:e-1,character:r.length}}getEndOffset(e,t,i){let r=0,o=this.lines.length;for(let s=e-1;s{"use strict";YJ=S(yJ()),BR=S(require("fs")),WR=S(require("os")),ms=S(require("path")),jn=S(W());Pe();fe();WJ();re();$e();_e();Ap=q()("core-documents"),Np=class{constructor(e,t){this.configurations=e;this.workspaceFolder=t;this._initialized=!1;this._attached=!1;this._currentResolve=!1;this.disposables=[];this.creating=new Map;this.buffers=new Map;this.winids=new Set;this.resolves=[];this._onDidOpenTextDocument=new jn.Emitter;this._onDidCloseDocument=new jn.Emitter;this._onDidChangeDocument=new jn.Emitter;this._onDidSaveDocument=new jn.Emitter;this._onWillSaveDocument=new jn.Emitter;this.onDidOpenTextDocument=this._onDidOpenTextDocument.event;this.onDidCloseDocument=this._onDidCloseDocument.event;this.onDidChangeDocument=this._onDidChangeDocument.event;this.onDidSaveTextDocument=this._onDidSaveDocument.event;this.onWillSaveTextDocument=this._onWillSaveDocument.event;this._cwd=process.cwd(),this.config={willSaveHandlerTimeout:500,maxFileSize:2097152}}async attach(e,t){if(this._attached)return;this.nvim=e,this._env=t,this._attached=!0,this.getConfiguration(),this.configurations.onDidChange(this.getConfiguration,this,this.disposables);let{bufnrs:i,winid:r,bufnr:o,winids:s}=await this.nvim.call("coc#util#all_state");this.winids=new Set(s),this._bufnr=o,await Promise.all(i.map(l=>this.createDocument(l))),P.on("BufDetach",this.onBufDetach,this,this.disposables),P.on("VimLeavePre",()=>{this.resolveCurrent(void 0)},null,this.disposables),P.on("WinEnter",l=>{this.winids.add(l)},null,this.disposables),P.on("WinClosed",l=>{this.winids.delete(l)},null,this.disposables),P.on("BufWinEnter",(l,u)=>{this.winids.add(u)},null,this.disposables),P.on("DirChanged",l=>{this._cwd=l},null,this.disposables),P.on("CursorHold",async()=>{let{bufnrs:l,winids:u}=await this.nvim.call("coc#util#all_state"),c=[];for(let h of this.buffers.keys())l.includes(h)||c.push(async()=>{await P.fire("BufUnload",[h])});for(let h of this.winids)u.includes(h)||c.push(async()=>{await P.fire("WinClosed",[h])});this.winids=new Set(u),await Promise.allSettled(c.map(h=>h()))},null,this.disposables);let a=l=>{this._bufnr=l,this.createDocument(l)};P.on("CursorMoved",a,null,this.disposables),P.on("CursorMovedI",a,null,this.disposables),P.on("BufUnload",this.onBufUnload,this,this.disposables),P.on("BufEnter",this.onBufEnter,this,this.disposables),P.on("BufCreate",this.onBufCreate,this,this.disposables),P.on("TermOpen",this.onBufCreate,this,this.disposables),P.on("BufWritePost",this.onBufWritePost,this,this.disposables),P.on("BufWritePre",this.onBufWritePre,this,this.disposables),P.on("FileType",this.onFileTypeChange,this,this.disposables),P.fire("BufEnter",[o]),P.fire("BufWinEnter",[o,r]),P.on("BufEnter",l=>{this.createDocument(l)},null,this.disposables),this._env.isVim?["TextChangedP","TextChangedI","TextChanged"].forEach(l=>{P.on(l,(u,c)=>{let h=this.buffers.get(u);h!=null&&h.attached&&h.onTextChange(l,c)},null,this.disposables)}):P.on("CompleteDone",async l=>{if(!l.isSnippet){let u=this.buffers.get(P.bufnr);u!=null&&u.attached&&u._forceSync()}},null,this.disposables),this._initialized=!0}getConfiguration(e){if(!e||e.affectsConfiguration("coc.preferences")){let t=this.configurations.getConfiguration("coc.preferences"),i=t.get("maxFileSize","10MB");this.config={maxFileSize:YJ.default.parse(i),willSaveHandlerTimeout:t.get("willSaveHandlerTimeout",500)}}}get bufnr(){return this._bufnr}get root(){return this._root}get cwd(){return this._cwd}get documents(){return Array.from(this.buffers.values()).filter(e=>e.attached)}get bufnrs(){return Array.from(this.buffers.keys())}detach(){if(!!this._attached){this._attached=!1;for(let e of this.buffers.keys())this.onBufUnload(e);U(this.disposables)}}get textDocuments(){let e=[];for(let t of this.buffers.values())t.attached&&e.push(t.textDocument);return e}getDocument(e){if(typeof e=="number")return this.buffers.get(e);let t=us.isWindows||us.isMacintosh;e=j.parse(e).toString();for(let i of this.buffers.values())if(i.uri===e||t&&i.uri.toLowerCase()===e.toLowerCase())return i;return null}expand(e){if(e.startsWith("~")&&(e=WR.default.homedir()+e.slice(1)),e.includes("$")){let t=this.getDocument(this.bufnr),i=t?j.parse(t.uri).fsPath:"";e=e.replace(/\$\{(.*?)\}/g,(r,o)=>{if(o.startsWith("env:")){let s=o.split(":")[1];return s?process.env[s]:""}switch(o){case"workspace":case"workspaceRoot":case"workspaceFolder":return this._root;case"workspaceFolderBasename":return ms.default.basename(this._root);case"cwd":return this._cwd;case"file":return i;case"fileDirname":return i?ms.default.dirname(i):"";case"fileExtname":return i?ms.default.extname(i):"";case"fileBasename":return i?ms.default.basename(i):"";case"fileBasenameNoExtension":{let s=i?ms.default.basename(i):"";return s?s.slice(0,s.length-ms.default.extname(s).length):""}default:return r}}),e=e.replace(/\$[\w]+/g,r=>r=="$HOME"?WR.default.homedir():process.env[r.slice(1)]||r)}return e}get document(){return this._currentResolve?new Promise(e=>{this.resolves.push(e)}):(this._currentResolve=!0,new Promise(async e=>{let t=await this.nvim.eval(`coc#util#get_bufoptions(bufnr("%"),${this.config.maxFileSize})`),i;t!=null&&(this.creating.delete(t.bufnr),i=this._createDocument(t)),this.resolveCurrent(i),e(i),this._currentResolve=!1}))}resolveCurrent(e){if(this.resolves.length>0)for(;this.resolves.length;){let t=this.resolves.pop();t&&t(e)}}get uri(){let{bufnr:e}=this;if(e){let t=this.getDocument(e);if(t)return t.uri}return null}get filetypes(){let e=new Set;for(let t of this.documents)e.add(t.filetype);return e}getLanguageId(e){let t=ms.default.extname(e);if(!t)return"";for(let i of this.documents){let r=j.parse(i.uri).fsPath;if(ms.default.extname(r)==t)return i.languageId}return""}async getLines(e){let t=this.getDocument(e);if(t)return t.textDocument.lines;let i=j.parse(e);if(i.scheme!=="file")return[];try{return(await XW(i.fsPath,"utf8")).split(/\r?\n/)}catch{return[]}}get languageIds(){let e=new Set;for(let t of this.documents)e.add(t.languageId);return e}async getFormatOptions(e){let t;e&&(t=this.getDocument(e));let i=t?t.bufnr:0,r=await this.nvim.call("coc#util#get_format_opts",[i]),o={tabSize:r.tabsize,insertSpaces:r.expandtab==1};return o.insertFinalNewline=r.insertFinalNewline==1,r.trimTrailingWhitespace&&(o.trimTrailingWhitespace=!0),r.trimFinalNewlines&&(o.trimFinalNewlines=!0),o}async createDocument(e){let t=this.buffers.get(e);if(t)return t;if(this.creating.has(e))return await this.creating.get(e);let i=new Promise(r=>{this.nvim.call("coc#util#get_bufoptions",[e,this.config.maxFileSize]).then(o=>{if(!this.creating.has(e)){r(void 0);return}if(this.creating.delete(e),!o){r(void 0);return}t=this._createDocument(o),r(t)},()=>{this.creating.delete(e),r(void 0)})});return this.creating.set(e,i),await i}async onBufCreate(e){this.onBufUnload(e),await this.createDocument(e)}_createDocument(e){let{bufnr:t}=e;if(this.buffers.has(t))return this.buffers.get(t);let i=this.nvim.createBuffer(t),r=new Op(i,this._env,this.nvim,e);if(e.size>this.config.maxFileSize&&Ap.warn(`buffer ${e.bufnr} size exceed maxFileSize ${this.config.maxFileSize}, not attached.`),this.buffers.set(t,r),r.attached){if(r.schema=="file"){this.configurations.locateFolderConfigution(r.uri);let o=this.workspaceFolder.resolveRoot(r,this._cwd,this._initialized,this.expand.bind(this));t==this._bufnr&&o&&(this._root=o)}this._onDidOpenTextDocument.fire(r.textDocument),r.onDocumentChange(o=>this._onDidChangeDocument.fire(o))}return Ap.debug("buffer created",t,r.attached,r.uri),r}onBufEnter(e){this._bufnr=e;let t=this.buffers.get(e);if(t){let i=this.workspaceFolder.getWorkspaceFolder(j.parse(t.uri));i&&(this._root=j.parse(i.uri).fsPath)}}onBufUnload(e){this.creating.delete(e),this.onBufDetach(e,!1)}async onBufDetach(e,t=!0){this.detachBuffer(e),t&&await this.nvim.call("bufloaded",[e])&&await this.createDocument(e)}detachBuffer(e){let t=this.buffers.get(e);!t||(Ap.debug("document detach",e,t.uri),this._onDidCloseDocument.fire(t.textDocument),this.buffers.delete(e),t.detach())}async onBufWritePost(e,t){let i=this.buffers.get(e);i&&(i.changedtick!=t&&await i.patchChange(),this._onDidSaveDocument.fire(i.textDocument))}async onBufWritePre(e,t,i){let r=this.buffers.get(e);if(!r||!r.attached||r.bufname!=t&&(this.detachBuffer(e),r=await this.createDocument(e),!r.attached))return;r.changedtick!=i?await r.synchronize():await r.patchChange();let o=!0,s=[],a={document:r.textDocument,reason:jn.TextDocumentSaveReason.Manual,waitUntil:u=>{o?s.push(u):(Ap.error("Can't call waitUntil in async manner:",Error().stack),this.nvim.echoError("waitUntil can't be used in async manner, check log for details"))}};this._onWillSaveDocument.fire(a),o=!1;let l=s.length;if(l){let c=await new Promise(h=>{let d=this.config.willSaveHandlerTimeout,g=setTimeout(()=>{this.nvim.outWriteLine(`Will save handler timeout after ${d}ms`),h(void 0)},d),p=0,f=!1;for(let m of s){let b=w=>{f||(f=!0,clearTimeout(g),h(w))};m.then(w=>{if(Array.isArray(w)&&w.length&&jn.TextEdit.is(w[0]))return b(w);p=p+1,p==l&&b(void 0)},w=>{Ap.error("Error on will save handler:",w),p=p+1,p==l&&b(void 0)})}});c&&await r.applyEdits(c,!1,this.bufnr===r.bufnr)}}onFileTypeChange(e,t){let i=this.getDocument(t);!i||i.convertFiletype(e)==i.filetype||(this._onDidCloseDocument.fire(i.textDocument),i.setFiletype(e),this._onDidOpenTextDocument.fire(i.textDocument))}async getQuickfixList(e){let t={},i=e.reduce((r,o)=>{let s=j.parse(o.uri);return s.scheme=="file"&&!r.includes(s.fsPath)&&!this.getDocument(o.uri)&&r.push(s.fsPath),r},[]);return await Promise.all(i.map(r=>new Promise(o=>{BR.default.readFile(r,"utf8",(s,a)=>{if(s)return o(void 0);t[r]=a.split(/\r?\n/),o(void 0)})}))),await Promise.all(e.map(r=>{let{uri:o,range:s}=r,{fsPath:a}=j.parse(o),l,u=t[a];return u&&(l=u[s.start.line]),this.getQuickfixItem(r,l)}))}async showLocations(e){let{nvim:t,configurations:i}=this,r=await this.getQuickfixList(e);if(i.getConfiguration("coc.preferences").get("useQuickfixForLocations",!1)){let s=await t.getVar("coc_quickfix_open_command");typeof s!="string"&&(s=r.length<10?`copen ${r.length}`:"copen"),t.pauseNotification(),t.call("setqflist",[r],!0),t.command(s,!0),t.resumeNotification(!1,!0)}else await t.setVar("coc_jump_locations",r),this._env.locationlist?t.command("CocList --normal --auto-preview location",!0):t.call("coc#util#do_autocmd",["CocLocationsChange"],!0)}async getQuickfixItem(e,t,i="",r){let o=e.targetRange;jn.LocationLink.is(e)&&(e=jn.Location.create(e.targetUri,e.targetRange));let s=this.getDocument(e.uri),{uri:a,range:l}=e,{start:u,end:c}=l,h=j.parse(a);!t&&h.scheme=="file"&&(t=await this.getLine(a,u.line));let d=u.line==c.line?t:await this.getLine(a,c.line),g={uri:a,filename:h.scheme=="file"?h.fsPath:a,lnum:u.line+1,end_lnum:c.line+1,col:t?_t(t,u.character)+1:u.character+1,end_col:d?_t(d,c.character)+1:c.character+1,text:t||"",range:l};return o&&(g.targetRange=o),r&&(g.module=r),i&&(g.type=i),s&&(g.bufnr=s.bufnr),g}async getLine(e,t){let i=this.getDocument(e);if(i&&i.attached)return i.getline(t)||"";if(!e.startsWith("file:"))return"";let r=j.parse(e).fsPath;return BR.default.existsSync(r)?await zW(r,t):""}async readFile(e){let t=this.getDocument(e);if(t)return await t.patchChange(),t.content;let i=j.parse(e);return i.scheme!="file"?"":(await this.nvim.call("readfile",[i.fsPath])).join(` -`)+` -`}reset(){this.creating.clear();for(let e of this.buffers.keys())this.onBufUnload(e);this.buffers.clear(),this._root=process.cwd()}dispose(){for(let e of this.buffers.keys())this.onBufUnload(e);this._attached=!1,this.buffers.clear(),U(this.disposables)}}});var Hp,JJ,qp,$J=k(()=>{"use strict";Hp=S(W());fe();xe();JJ=q()("core-editors"),qp=class{constructor(e){this.documents=e;this.disposables=[];this.editors=new Map;this._onDidChangeActiveTextEditor=new Hp.Emitter;this._onDidChangeVisibleTextEditors=new Hp.Emitter;this.onDidChangeActiveTextEditor=this._onDidChangeActiveTextEditor.event;this.onDidChangeVisibleTextEditors=this._onDidChangeVisibleTextEditors.event}get activeTextEditor(){return this.editors.get(this.winid)}get visibleTextEditors(){return Array.from(this.editors.values())}onChange(e){let t=`${e.winid}-${e.document.bufnr}-${e.document.uri}`;t!=this.previousId&&(this.previousId=t,this._onDidChangeActiveTextEditor.fire(e))}async attach(e){this.nvim=e;let{documents:t}=this,i=t.getDocument(t.bufnr);i&&i.winid>0&&(this.winid=i.winid,await this.createTextEditor(this.winid)),P.on("WinEnter",r=>{this.winid=r;let o=this.editors.get(r);o&&this.onChange(o)},null,this.disposables),P.on("CursorHold",async()=>{let[r,o,s]=await e.eval("[win_getid(),&buftype,coc#window#is_float(win_getid())]"),a=!1;!s&&["","acwrite"].includes(o)&&!this.editors.has(r)&&await this.createTextEditor(r)&&(a=!0),a&&this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors)},null,this.disposables),P.on("WinClosed",r=>{this.editors.has(r)&&(this.editors.delete(r),this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors))},null,this.disposables),P.on("BufWinEnter",async(r,o)=>{this.winid=o,await this.createTextEditor(o,!0)},null,this.disposables)}async createTextEditor(e,t=!1){let{documents:i,nvim:r}=this,o=await r.call("coc#util#get_editoroption",[e]);if(!o)return!1;let s=!1;if(t)for(let l of this.editors.keys())o.winids.includes(l)||(s=!0,this.editors.delete(l));let a=i.getDocument(o.bufnr);if(a){let l=this.fromOptions(o,a);return this.editors.set(e,l),e==this.winid&&this.onChange(l),this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors),JJ.debug("editor created winid & bufnr & tabnr: ",e,o.bufnr,o.tabpagenr),!0}else s&&this._onDidChangeVisibleTextEditors.fire(this.visibleTextEditors);return JJ.error(`document not found for window: ${e}`),!1}fromOptions(e,t){let{visibleRanges:i}=e,r=D.getTabId(e.tabpagenr);return{get tabpagenr(){return D.getTabNumber(r)},winid:e.winid,winnr:e.winnr,document:t,visibleRanges:i.map(o=>Hp.Range.create(o[0]-1,0,o[1],0)),options:{tabSize:e.tabSize,insertSpaces:!!e.insertSpaces}}}}});function Wbe(n,e){if(typeof n.lnum!="number")return;let t=n.lnum;if(e){let i=MR(e.edits);t=cx(Mt.create(t-1,0),i).line+1}return t}function Ybe(n,e){var i;let t=new Map;for(let r of n){let o=Mp(r)??null,s=o?(i=e[o])==null?void 0:i.label:null,a=t.get(s);a?a.push(r):t.set(s,[r])}return t}var gx,px,dMe,Bbe,Bp,UJ=k(()=>{"use strict";gx=S(jp()),px=S(require("path"));Kn();Pe();fe();re();$e();so();Ta();dMe=q()("model-editInspect"),Bbe=0,Bp=class{constructor(e,t){this.nvim=e;this.keymaps=t;this.disposables=[];this.items=[];this.renameMap=new Map;P.on("BufUnload",i=>{i==this.bufnr&&this.dispose()},null,this.disposables)}addFile(e,t,i){this.items.push({index:t.length,filepath:e,lnum:i})}async show(e){let{nvim:t}=this,i=Bbe++;t.pauseNotification(),t.command(`tabe +setl\\ buftype=nofile CocWorkspaceEdit${i}`,!0),t.command("setl bufhidden=wipe nolist",!0),t.command("setl nobuflisted wrap undolevels=-1 filetype=cocedits noswapfile",!0),await t.resumeNotification(!0);let r=await t.buffer,o=await t.call("getcwd");this.bufnr=r.id;let s=c=>{let h=j.parse(c).fsPath;return Ye(o,h,!0)?px.default.relative(o,h):h},a=c=>px.default.isAbsolute(c)?c:px.default.join(o,c),l=new Hi,u=Ybe(e.edit.documentChanges??[],e.edit.changeAnnotations??{});for(let[c,h]of u.entries()){c&&(l.addLine(c,"MoreMsg"),l.addLine(""));for(let d of h)if(ua.is(d)){let g=e.changes[d.textDocument.uri],p=s(d.textDocument.uri);l.addTexts([{text:"Change",hlGroup:"Title"},{text:" "},{text:p,hlGroup:"Directory"},{text:`:${g.lnum}`,hlGroup:"LineNr"}]),this.addFile(p,l,g.lnum),l.addLine(""),this.addChangedLines(l,g,p,g.lnum),l.addLine("")}else if(ca.is(d)||as.is(d)){let g=as.is(d)?"Delete":"Create",p=s(d.uri);l.addTexts([{text:g,hlGroup:"Title"},{text:" "},{text:p,hlGroup:"Directory"}]),this.addFile(p,l),l.addLine("")}else if(ha.is(d)){let g=s(d.oldUri),p=s(d.newUri);l.addTexts([{text:"Rename",hlGroup:"Title"},{text:" "},{text:g,hlGroup:"Directory"},{text:"->",hlGroup:"Comment"},{text:p,hlGroup:"Directory"}]),this.renameMap.set(g,p),this.addFile(p,l),l.addLine("")}}t.pauseNotification(),l.render(r),r.setOption("modifiable",!1,!0),await t.resumeNotification(!0),this.disposables.push(this.keymaps.registerLocalKeymap("n","",async()=>{let c=await t.call("line","."),h=await t.call("col","."),d;for(let b=this.items.length-1;b>=0;b--){let w=this.items[b];if(c>=w.index){d=w;break}}if(!d)return;let g=j.file(a(d.filepath)).toString(),p=this.renameMap.has(d.filepath)?this.renameMap.get(d.filepath):d.filepath;await t.call("coc#util#open_file",["tab drop",a(p)]);let f=(e.edit.documentChanges??[]).find(b=>ua.is(b)&&b.textDocument.uri==g),m=Wbe(d,f);m!==void 0&&await t.call("cursor",[m,h]),t.redrawVim()},!0)),this.disposables.push(this.keymaps.registerLocalKeymap("n","",async()=>{t.command("bwipeout!",!0)},!0))}addChangedLines(e,t,i,r){let o=(0,gx.default)(t.oldLines.join(` -`),t.newLines.join(` -`));for(let s=0;s0&&e.addText(h)}r+=l.split(` -`).length-1}else a[0]==gx.default.DELETE?(r+=a[1].split(` -`).length-1,e.addText(a[1],"DiffDelete")):e.addText(a[1],"DiffAdd")}}dispose(){U(this.disposables)}}});function Jbe(n,e,t){let i=er.default.join(n,e);if(typeof t!="string"){let r=t.baseUri.fsPath;if(!Ye(r,i))return!1;let o=er.default.relative(r,i);return(0,YR.default)(o,t.pattern,{dot:!0})}return(0,YR.default)(e,t,{dot:!0})}function fx(n){return j.parse(n).fsPath}var XJ,Ht,GJ,YR,zJ,er,KJ,It,Zbe,Wp,QJ=k(()=>{"use strict";XJ=S(require("crypto")),Ht=S(require("fs")),GJ=S(vw()),YR=S(Lo()),zJ=S(require("os")),er=S(require("path")),KJ=require("util"),It=S(W());Pe();fe();UJ();xr();$e();_e();so();fp();Zbe=q()("core-files"),Wp=class{constructor(e,t,i,r){this.documents=e;this.configurations=t;this.workspaceFolderControl=i;this.keymaps=r;this.operationTimeout=500;this._onDidCreateFiles=new It.Emitter;this._onDidRenameFiles=new It.Emitter;this._onDidDeleteFiles=new It.Emitter;this._onWillCreateFiles=new It.Emitter;this._onWillRenameFiles=new It.Emitter;this._onWillDeleteFiles=new It.Emitter;this.onDidCreateFiles=this._onDidCreateFiles.event;this.onDidRenameFiles=this._onDidRenameFiles.event;this.onDidDeleteFiles=this._onDidDeleteFiles.event;this.onWillCreateFiles=this._onWillCreateFiles.event;this.onWillRenameFiles=this._onWillRenameFiles.event;this.onWillDeleteFiles=this._onWillDeleteFiles.event}attach(e,t,i){this.nvim=e,this.env=t,this.window=i}async openTextDocument(e){e=typeof e=="string"?j.file(e):e;let t=this.documents.getDocument(e.toString());if(t)return await this.jumpTo(e.toString(),null,"drop"),t;let i=e.scheme;if(i=="file"){if(!Ht.default.existsSync(e.fsPath))throw uw(e.fsPath);Ht.default.accessSync(e.fsPath,Ht.default.constants.R_OK)}return i=="untitled"?(await this.nvim.call("coc#util#open_file",["tab drop",e.path]),await this.documents.document):await this.loadResource(e.toString())}async jumpTo(e,t,i){let r=this.configurations.getConfiguration("coc.preferences"),o=i||r.get("jumpCommand","edit"),{nvim:s}=this,a=this.documents.getDocument(e),l=a?a.bufnr:-1;if(l!=-1&&o=="edit"){if(s.pauseNotification(),s.command("silent! normal! m'",!0),s.command(`buffer ${l}`,!0),s.command("if &filetype ==# '' | filetype detect | endif",!0),t){let u=a.getline(t.line),c=Q(u.slice(0,t.character))+1;s.call("cursor",[t.line+1,c],!0)}await s.resumeNotification(!0)}else{let{fsPath:u,scheme:c}=j.parse(e),h=t==null?null:[t.line,t.character];if(c=="file"){let d=In(u);await this.nvim.call("coc#util#jump",[o,d,h])}else await this.nvim.call("coc#util#jump",[o,e,h])}}async openResource(e){let{nvim:t}=this,i=j.parse(e);if(/^https?/.test(i.scheme)){await t.call("coc#ui#open_url",e);return}let r=await t.getOption("wildignore");await t.setOption("wildignore",""),await this.jumpTo(e),await t.setOption("wildignore",r)}async loadResource(e,t){let i=this.documents.getDocument(e);if(i)return i;t||(t=this.configurations.getConfiguration("workspace").get("openResourceCommand","tab drop"));let r=j.parse(e),o=r.scheme==="file"?r.fsPath:e,s;if(t){let a=await this.nvim.call("win_getid");s=await this.nvim.call("coc#util#open_file",[t,o]),await this.nvim.call("win_gotoid",[a])}else s=(await this.nvim.call("coc#ui#open_files",[[o]]))[0];return await this.documents.createDocument(s)}async loadResources(e){let{documents:t}=this,i=e.map(o=>{let s=j.parse(o);return s.scheme=="file"?s.fsPath:o}),r=await this.nvim.call("coc#ui#open_files",[i]);return await Promise.all(r.map(o=>t.createDocument(o)))}async createFile(e,t={},i){let{nvim:r}=this,o=Ht.default.existsSync(e);if(o&&!t.overwrite&&!t.ignoreIfExists)throw z0(e);if(!o||t.overwrite){let s=new It.CancellationTokenSource;await this.fireWaitUntilEvent(this._onWillCreateFiles,{files:[j.file(e)],token:s.token},i),s.cancel();let a=er.default.dirname(e);if(!Ht.default.existsSync(a)){let c,h=a;for(;![".","/",er.default.parse(a).root].includes(h);){if(Ht.default.existsSync(er.default.dirname(h))){c=h;break}h=er.default.dirname(h)}Ht.default.mkdirSync(a,{recursive:!0}),i&&i.push(()=>{Ht.default.rmSync(c,{force:!0,recursive:!0})})}Ht.default.writeFileSync(e,"","utf8"),i&&i.push(async()=>{Ht.default.rmSync(e,{force:!0,recursive:!0})});let u=(await this.loadResource(e)).bufnr;i&&i.push(()=>(P.fire("BufUnload",[u]),r.command(`silent! bd! ${u}`))),this._onDidCreateFiles.fire({files:[j.file(e)]})}}async deleteFile(e,t={},i){let{ignoreIfNotExists:r,recursive:o}=t,s=await zi(e),a=s&&s.isDirectory();if(!s&&!r)throw uw(e);if(s==null)return;let l=j.file(e);if(await this.fireWaitUntilEvent(this._onWillDeleteFiles,{files:[l]},i),!a){let h=await this.nvim.call("bufnr",[e]);h&&(P.fire("BufUnload",[h]),await this.nvim.command(`silent! bwipeout ${h}`),i&&i.push(()=>this.loadResource(l.toString())))}let u=er.default.join(zJ.default.tmpdir(),"coc-"+process.pid);Ht.default.mkdirSync(u,{recursive:!0});let c=XJ.default.createHash("md5").update(e).digest("hex");if(a&&o){let h=er.default.join(u,c),d=er.default.dirname(e);Ht.default.renameSync(e,h),i&&i.push(async()=>{Ht.default.mkdirSync(d,{recursive:!0}),Ht.default.renameSync(h,e)})}else if(a)Ht.default.rmdirSync(e),i&&i.push(()=>{Ht.default.mkdirSync(e)});else{let h=er.default.join(u,c),d=er.default.dirname(e);Ht.default.renameSync(e,h),i&&i.push(()=>{Ht.default.mkdirSync(d,{recursive:!0}),Ht.default.renameSync(h,e)})}this._onDidDeleteFiles.fire({files:[l]})}async renameFile(e,t,i={},r){let{nvim:o}=this,{overwrite:s,ignoreIfExists:a}=i;if(t===e)return;let l=Ht.default.existsSync(t);if(l&&a&&!s)return;if(l&&!s)throw z0(t);let u=await zi(e),c=u&&u.isDirectory()?0:await o.call("bufloaded",[e]);if(!c&&!u)throw uw(e);let h={newUri:j.parse(t),oldUri:j.parse(e)};if(i.skipEvent||await this.fireWaitUntilEvent(this._onWillRenameFiles,{files:[h]},r),c){let d=await o.call("coc#ui#rename_file",[e,t,u!=null]);await this.documents.onBufCreate(d)}else{if(u!=null&&u.isDirectory())for(let d of this.documents.documents){let g=j.parse(d.uri);if(g.scheme==="file"&&Ye(e,g.fsPath,!1)){let p=g.fsPath.replace(e,t),f=await o.call("coc#ui#rename_file",[g.fsPath,p,!1]);await this.documents.onBufCreate(f)}}Ht.default.renameSync(e,t)}r&&r.push(()=>this.renameFile(t,e,{skipEvent:!0})),i.skipEvent||this._onDidRenameFiles.fire({files:[h]})}async renameCurrent(){let{nvim:e}=this,t=await e.call("expand",["%:p"]),i=await e.callAsync("coc#util#with_callback",["input",["New path: ",t,"file"]]);i=i?i.trim():null,!(i===t||!i)&&(t.toLowerCase()!=i.toLowerCase()&&Ht.default.existsSync(i)&&!await Yw(this.nvim,`${i} exists, overwrite?`)||await this.renameFile(t,i,{overwrite:!0}))}get currentUri(){let e=this.documents.getDocument(this.documents.bufnr);return e?e.uri:null}async applyEdit(e,t){let i=IJ(e),r=[],o=!1;try{let{changeAnnotations:s}=e,{currentUri:a}=this,l=s?LJ(i,s):[],u={},c=[];for(let h of l){let d=s[h];d.needsConfirmation=!1,await this.window.showMenuPicker(["Yes","No"],{position:"center",title:"Confirm edits",content:d.label+(d.description?" "+d.description:"")})!==0&&c.push(h)}if(i=i.filter(h=>!c.includes(Mp(h))),!i.length)return!0;o=i.every(h=>It.TextDocumentEdit.is(h)&&h.textDocument.uri===a),this.validateChanges(i);for(let h of i)if(It.TextDocumentEdit.is(h)){let{textDocument:d,edits:g}=h,{uri:p}=d,f=await this.loadResource(p),m=await f.applyEdits(g,!1,p===a);if(m){let b=f.version,{newText:w,range:x}=m;u[p]={uri:p,lnum:x.start.line+1,newLines:f.getLines(x.start.line,x.end.line),oldLines:w.endsWith(` -`)?w.slice(0,-1).split(` -`):w.split(` -`)},r.push(async()=>{let T=this.documents.getDocument(p);!T||!T.attached||T.version!==b||(await T.applyEdits([m]),d.version=T.version)})}}else It.CreateFile.is(h)?await this.createFile(fx(h.uri),h.options,r):It.DeleteFile.is(h)?await this.deleteFile(fx(h.uri),h.options,r):It.RenameFile.is(h)&&await this.renameFile(fx(h.oldUri),fx(h.newUri),h.options,r);if(r.length===0)return!0;t||(this.editState={edit:{documentChanges:i,changeAnnotations:e.changeAnnotations},changes:u,recovers:r,applied:!0}),this.nvim.redrawVim()}catch(s){return Zbe.error("Error on applyEdits:",e,s),await this.undoChanges(r),t||this.window.showErrorMessage(`Error on applyEdits: ${s}`),!1}return t||o||this.window.showInformationMessage("Use ':wa' to save changes or ':CocCommand workspace.inspectEdit' to inspect."),!0}async undoChanges(e){for(;e.length>0;){let t=e.pop();await Promise.resolve(t())}}async inspectEdit(){if(!this.editState){this.window.showWarningMessage("No workspace edit to inspect");return}await new Bp(this.nvim,this.keymaps).show(this.editState)}async undoWorkspaceEdit(){let{editState:e}=this;if(!e||!e.applied){this.window.showWarningMessage("No workspace edit to undo");return}e.applied=!1,await this.undoChanges(e.recovers)}async redoWorkspaceEdit(){let{editState:e}=this;if(!e||e.applied){this.window.showWarningMessage("No workspace edit to redo");return}this.editState=void 0,await this.applyEdit(e.edit)}validateChanges(e){let{documents:t}=this;for(let i of e)if(It.TextDocumentEdit.is(i)){let{uri:r,version:o}=i.textDocument,s=t.getDocument(r);if(typeof o=="number"&&o>0){if(!s)throw new Error(`File ${r} not loaded`);if(s.version!=o)throw new Error(`${r} changed before apply edit`)}else if(!s&&!op(r))throw cw(j.parse(r).scheme)}else if(It.CreateFile.is(i)||It.DeleteFile.is(i)){if(!op(i.uri))throw cw(j.parse(i.uri).scheme)}else if(It.RenameFile.is(i)&&(!op(i.oldUri)||!op(i.newUri)))throw cw(j.parse(i.oldUri).scheme)}async findFiles(e,t,i,r){let o=this.workspaceFolderControl.workspaceFolders;if((r==null?void 0:r.isCancellationRequested)||!o.length||i===0)return[];i=i??1/0;let s=o.map(u=>j.parse(u.uri).fsPath);if(typeof e!="string"){let u=e.baseUri.fsPath;s=s.filter(c=>Ye(u,c,!0))}let a=typeof e=="string"?e:e.pattern,l=[];for(let u of s){if(l.length>=i)break;let c=await(0,KJ.promisify)(GJ.default)(a,{dot:!0,cwd:u,nodir:!0,absolute:!1});if(r!=null&&r.isCancellationRequested)return[];for(let h of c)if(!(t&&Jbe(u,h,t))&&(l.push(j.file(er.default.join(u,h))),l.length===i))break}return l}async fireWaitUntilEvent(e,t,i){let r=!0,o=[];e.fire({...t,waitUntil:s=>{if(!r)throw fB("waitUntil");let a=new Promise(u=>{setTimeout(u,this.operationTimeout)}),l=Promise.race([s,a]).then(u=>{if(u&&It.WorkspaceEdit.is(u))return this.applyEdit(u,!0)});o.push(l)}}),r=!1,await Promise.all(o)}}});var t$=y((RMe,e$)=>{var ZR=4294967296,VJ=[];for(xh=0;xh<256;xh++)VJ[xh]=(xh>15?"":"0")+xh.toString(16);var xh,Yp=e$.exports=function(n,e){n instanceof Buffer?(this.buffer=n,this.offset=e||0):Object.prototype.toString.call(n)=="[object Uint8Array]"?(this.buffer=new Buffer(n),this.offset=e||0):(this.buffer=this.buffer||new Buffer(8),this.offset=0,this.setValue.apply(this,arguments))};Yp.MAX_INT=Math.pow(2,53);Yp.MIN_INT=-Math.pow(2,53);Yp.prototype={constructor:Yp,_2scomp:function(){for(var n=this.buffer,e=this.offset,t=1,i=e+7;i>=e;i--){var r=(n[i]^255)+t;n[i]=r&255,t=r>>8}},setValue:function(n,e){var t=!1;if(arguments.length==1)if(typeof n=="number"){if(t=n<0,n=Math.abs(n),e=n%ZR,n=n/ZR,n>ZR)throw new RangeError(n+" is outside Int64 range");n=n|0}else if(typeof n=="string")n=(n+"").replace(/^0x/,""),e=n.substr(-8),n=n.length>8?n.substr(0,n.length-8):"",n=parseInt(n,16),e=parseInt(e,16);else throw new Error(n+" must be a Number or String");for(var i=this.buffer,r=this.offset,o=7;o>=0;o--)i[r+o]=e&255,e=o==4?n:e>>>8;t&&this._2scomp()},toNumber:function(n){for(var e=this.buffer,t=this.offset,i=e[t]&128,r=0,o=1,s=7,a=1;s>=0;s--,a*=256){var l=e[t+s];i&&(l=(l^255)+o,o=l>>8,l=l&255),r+=l*a}return!n&&r>=Yp.MAX_INT?i?-1/0:1/0:i?-r:r},valueOf:function(){return this.toNumber(!1)},toString:function(n){return this.valueOf().toString(n||10)},toOctetString:function(n){for(var e=new Array(8),t=this.buffer,i=this.offset,r=0;r<8;r++)e[r]=VJ[t[i+r]];return e.join(n||"")},toBuffer:function(n){if(n&&this.offset===0)return this.buffer;var e=new Buffer(8);return this.buffer.copy(e,0,this.offset,this.offset+8),e},copy:function(n,e){this.buffer.copy(n,e||0,this.offset,this.offset+8)},compare:function(n){if((this.buffer[this.offset]&128)!=(n.buffer[n.offset]&128))return n.buffer[n.offset]-this.buffer[this.offset];for(var e=0;e<8;e++)if(this.buffer[this.offset+e]!==n.buffer[n.offset+e])return this.buffer[this.offset+e]-n.buffer[n.offset+e];return 0},equals:function(n){return this.compare(n)===0},inspect:function(){return"[Int64 value:"+this+" octets:"+this.toOctetString(" ")+"]"}}});var d$=y(Jp=>{var n$=require("events").EventEmitter,$be=require("util"),Ube=require("os"),_Me=require("assert"),Zp=t$(),Fa=Ube.endianness()=="BE";function r$(n){return Math.pow(2,Math.ceil(Math.log(n)/Math.LN2))}function Ti(n){this.buf=Buffer.alloc(r$(n||8192)),this.readOffset=0,this.writeOffset=0}Jp.Accumulator=Ti;Ti.prototype.writeAvail=function(){return this.buf.length-this.writeOffset};Ti.prototype.readAvail=function(){return this.writeOffset-this.readOffset};Ti.prototype.reserve=function(n){if(!(n0&&(this.buf.copy(this.buf,0,this.readOffset,this.writeOffset),this.writeOffset-=this.readOffset,this.readOffset=0),!(n0)this.assertReadableSize(n);else if(n<0&&this.readOffset+n<0)throw new Error("advance with negative offset "+n+" would seek off the start of the buffer");this.readOffset+=n};Ti.prototype.writeByte=function(n){this.reserve(1),this.buf.writeInt8(n,this.writeOffset),++this.writeOffset};Ti.prototype.writeInt=function(n,e){switch(this.reserve(e),e){case 1:this.buf.writeInt8(n,this.writeOffset);break;case 2:Fa?this.buf.writeInt16BE(n,this.writeOffset):this.buf.writeInt16LE(n,this.writeOffset);break;case 4:Fa?this.buf.writeInt32BE(n,this.writeOffset):this.buf.writeInt32LE(n,this.writeOffset);break;default:throw new Error("unsupported integer size "+e)}this.writeOffset+=e};Ti.prototype.writeDouble=function(n){this.reserve(8),Fa?this.buf.writeDoubleBE(n,this.writeOffset):this.buf.writeDoubleLE(n,this.writeOffset),this.writeOffset+=8};var $R=0,UR=1,XR=2,GR=3,zR=4,vx=5,yx=6,o$=7,s$=8,a$=9,l$=10,u$=11,Xbe=12,JR=0,i$=1,Gbe=127,zbe=32767,Kbe=2147483647;function Mn(){n$.call(this),this.buf=new Ti,this.state=JR}$be.inherits(Mn,n$);Jp.BunserBuf=Mn;Mn.prototype.append=function(n,e){if(e)return this.buf.append(n),this.process(e);try{this.buf.append(n)}catch(t){this.emit("error",t);return}this.processLater()};Mn.prototype.processLater=function(){var n=this;process.nextTick(function(){try{n.process(!1)}catch(e){n.emit("error",e)}})};Mn.prototype.process=function(n){if(this.state==JR){if(this.buf.readAvail()<2)return;if(this.expectCode(0),this.expectCode(1),this.pduLen=this.decodeInt(!0),this.pduLen===!1){this.buf.readAdvance(-2);return}this.buf.reserve(this.pduLen),this.state=i$}if(this.state==i$){if(this.buf.readAvail()0&&this.processLater()};Mn.prototype.raise=function(n){throw new Error(n+", in Buffer of length "+this.buf.buf.length+" ("+this.buf.readAvail()+" readable) at offset "+this.buf.readOffset+" buffer: "+JSON.stringify(this.buf.buf.slice(this.buf.readOffset,this.buf.readOffset+32).toJSON()))};Mn.prototype.expectCode=function(n){var e=this.buf.readInt(1);e!=n&&this.raise("expected bser opcode "+n+" but got "+e)};Mn.prototype.decodeAny=function(){var n=this.buf.peekInt(1);switch(n){case GR:case zR:case vx:case yx:return this.decodeInt();case o$:return this.buf.readAdvance(1),this.buf.readDouble();case s$:return this.buf.readAdvance(1),!0;case a$:return this.buf.readAdvance(1),!1;case l$:return this.buf.readAdvance(1),null;case XR:return this.decodeString();case $R:return this.decodeArray();case UR:return this.decodeObject();case u$:return this.decodeTemplate();default:this.raise("unhandled bser opcode "+n)}};Mn.prototype.decodeArray=function(){this.expectCode($R);for(var n=this.decodeInt(),e=[],t=0;t"u")throw Error("no bser found in string and no error raised!?");return t}Jp.loadFromBuffer=Qbe;function c$(n){for(var e=Buffer.alloc(n.length),t=0;t"u"&&r--}mx(n,r);for(var t=0;t"u")){bx(n,o);try{bx(n,s)}catch(c){throw new Error(c.message+" (while serializing object property with name `"+o+"')")}}}return;default:throw new Error("cannot serialize type "+typeof e+" to BSER")}}function Vbe(n){var e=new Ti;e.writeByte(0),e.writeByte(1),e.writeByte(vx),e.writeInt(0,4),bx(e,n);var t=e.writeOffset,i=t-7;return e.writeOffset=3,e.writeInt(i,4),e.writeOffset=t,e.buf.slice(0,t)}Jp.dumpToBuffer=Vbe});var v$=y((IMe,y$)=>{"use strict";var eye=require("net"),m$=require("events").EventEmitter,tye=require("util"),iye=require("child_process"),b$=d$(),g$=["subscription","log"];function bs(n){var e=this;m$.call(this),this.watchmanBinaryPath="watchman",n&&n.watchmanBinaryPath&&(this.watchmanBinaryPath=n.watchmanBinaryPath.trim()),this.commands=[]}tye.inherits(bs,m$);y$.exports.Client=bs;bs.prototype.sendNextCommand=function(){this.currentCommand||(this.currentCommand=this.commands.shift(),this.currentCommand&&this.socket.write(b$.dumpToBuffer(this.currentCommand.cmd)))};bs.prototype.cancelCommands=function(n){var e=new Error(n),t=this.commands;this.commands=[],this.currentCommand&&(t.unshift(this.currentCommand),this.currentCommand=null),t.forEach(function(i){i.cb(e)})};bs.prototype.connect=function(){var n=this;function e(l){n.bunser=new b$.BunserBuf,n.bunser.on("value",function(u){for(var c=!1,h=0;h=0:!1}bs.prototype._synthesizeCapabilityCheck=function(n,e,t){n.capabilities={};var i=n.version;return e.forEach(function(r){n.capabilities[r]=f$(i,r)}),t.forEach(function(r){var o=f$(i,r);n.capabilities[r]=o,o||(n.error="client required capability `"+r+"` is not supported by this server")}),n};bs.prototype.capabilityCheck=function(n,e){var t=n.optional||[],i=n.required||[],r=this;this.command(["version",{optional:t,required:i}],function(o,s){if(o){e(o);return}if(!("capabilities"in s)&&(s=r._synthesizeCapabilityCheck(s,t,i),s.error)){o=new Error(s.error),o.watchmanResponse=s,e(o);return}e(null,s)})};bs.prototype.end=function(){this.cancelCommands("The client was ended"),this.socket&&(this.socket.end(),this.socket=null),this.bunser=null}});function oye(n){return!(n=="/"||n=="/tmp"||n=="/private/tmp"||Ye(n,QR.default.homedir(),!0)||wx.default.parse(n).base==n||n.startsWith("/tmp/")||n.startsWith("/private/tmp/")||Ye(QR.default.tmpdir(),n,!0))}var w$,x$,QR,wx,KR,rye,ys,VR=k(()=>{"use strict";w$=S(v$()),x$=S(Lo()),QR=S(require("os")),wx=S(require("path"));qe();$e();KR=q()("core-watchman"),rye=["relative_root","cmd-watch-project","wildmatch","field-new"],ys=class{constructor(e,t){this.channel=t;this._disposed=!1;this.client=new w$.default.Client({watchmanBinaryPath:e}),this.client.setMaxListeners(300)}checkCapability(){let{client:e}=this;return new Promise((t,i)=>{e.capabilityCheck({optional:[],required:rye},(r,o)=>{if(r)return t(!1);let{capabilities:s}=o;for(let a of Object.keys(s))if(!s[a])return t(!1);t(!0)})})}async watchProject(e){let t=await this.command(["watch-project",e]),{watch:i,warning:r,relative_path:o}=t;return i?(r&&KR.warn(r),this.watch=i,this.relative_path=o,KR.info(`watchman watching project: ${e}`),this.appendOutput(`watchman watching project: ${e}`),!0):!1}command(e){return new Promise((t,i)=>{this.client.command(e,(r,o)=>{if(r)return i(r);t(o)})})}async subscribe(e,t){let{watch:i,relative_path:r}=this;if(!i)throw new Error("watchman not watching");let{clock:o}=await this.command(["clock",i]),s=ps(),a={expression:["allof",["match","**/*","wholename"]],fields:["name","size","new","exists","type","mtime_ms","ctime_ms"],since:o},l=i;r&&(a.relative_root=r,l=wx.default.join(i,r));let{subscribe:u}=await this.command(["subscribe",i,s,a]);return this.appendOutput(`subscribing "${e}" in ${l}`),this.client.on("subscription",c=>{if(!c||c.subscription!=s)return;let{files:h}=c;if(!h||(h=h.filter(g=>g.type=="f"&&(0,x$.default)(g.name,e,{dot:!0})),!h.length))return;let d=Object.assign({},c);this.relative_path&&(d.root=wx.default.resolve(c.root,this.relative_path)),this.appendOutput(`file change detected: ${JSON.stringify(d,null,2)}`),t(d)}),{dispose:()=>{this.unsubscribe(u)},subscribe:u}}unsubscribe(e){if(this._disposed)return Promise.resolve();let{watch:t}=this;if(!!t)return this.appendOutput(`unsubscribe "${e}" in: ${t}`),this.command(["unsubscribe",t,e]).catch(i=>{var r;(r=i.message)!=null&&r.includes("The client was ended")&&KR.error(i)})}dispose(){this._disposed||(this._disposed=!0,this.client&&(this.client.removeAllListeners(),this.client.end(),this.client=void 0))}appendOutput(e,t="Info"){this.channel&&this.channel.appendLine(`[${t} - ${new Date().toLocaleTimeString()}] ${e}`)}static async createClient(e,t,i){if(!oye(t))throw new Error(`Watch for ${t} is ignored`);let r;try{if(r=new ys(e,i),!await r.checkCapability())throw new Error("required capabilities do not exist.");if(!await r.watchProject(t))throw new Error("unable to watch");return r}catch(o){throw r&&r.dispose(),o}}}});var e_,ja,Ch,$Me,$p,Sh,t_,C$=k(()=>{"use strict";e_=S(Lo()),ja=S(require("path")),Ch=S(W());Pe();re();nt();$e();VR();$Me=q()("filesystem-watcher"),$p=class{constructor(e,t){this.workspaceFolder=e;this.watchmanPath=t;this.clientsMap=new Map;this.disposables=[];this.creating=new Set;this._onDidCreateClient=new Ch.Emitter;this.onDidCreateClient=this._onDidCreateClient.event}attach(e){this.channel=e;let t=i=>{let r=j.parse(i.uri).fsPath;this.createClient(r)};this.workspaceFolder.workspaceFolders.forEach(i=>{t(i)}),this.workspaceFolder.onDidChangeWorkspaceFolders(i=>{i.added.forEach(r=>{t(r)}),i.removed.forEach(r=>{let o=j.parse(r.uri).fsPath,s=this.clientsMap.get(o);s&&(this.clientsMap.delete(o),s.dispose())})},null,this.disposables)}waitClient(e){return this.clientsMap.has(e)?Promise.resolve():new Promise(t=>{let i=this.onDidCreateClient(r=>{r==e&&(i.dispose(),t())})})}async createClient(e){if(!(this.watchmanPath==null||this.has(e)))try{this.creating.add(e);let t=await ys.createClient(this.watchmanPath,e,this.channel);this.creating.delete(e),this.clientsMap.set(e,t);for(let i of $p.watchers)i.listen(e,t);this._onDidCreateClient.fire(e)}catch(t){this.creating.delete(e),this.channel&&this.channel.appendLine("Error on create watchman client:"+(t instanceof Error?t.message:t))}}has(e){let t=Array.from(this.clientsMap.keys());return t.push(...this.creating),t.some(i=>ni(i,e))}createFileSystemWatcher(e,t,i,r){let o=new t_(e,t,i,r),s=typeof e=="string"?void 0:e.baseUri.fsPath;for(let[a,l]of this.clientsMap.entries())s&&Ye(a,s,!0)&&(s=void 0),o.listen(a,l);return s&&this.createClient(s),$p.watchers.add(o),o}dispose(){this._onDidCreateClient.dispose();for(let e of this.clientsMap.values())e&&e.dispose();this.clientsMap.clear(),$p.watchers.clear(),U(this.disposables)}},Sh=$p;Sh.watchers=new Set;t_=class{constructor(e,t,i,r){this.globPattern=e;this.ignoreCreateEvents=t;this.ignoreChangeEvents=i;this.ignoreDeleteEvents=r;this._onDidCreate=new Ch.Emitter;this._onDidChange=new Ch.Emitter;this._onDidDelete=new Ch.Emitter;this._onDidRename=new Ch.Emitter;this.disposables=[];this._disposed=!1;this.onDidCreate=this._onDidCreate.event;this.onDidChange=this._onDidChange.event;this.onDidDelete=this._onDidDelete.event;this.onDidRename=this._onDidRename.event}listen(e,t){let{globPattern:i,ignoreCreateEvents:r,ignoreChangeEvents:o,ignoreDeleteEvents:s}=this,a,l;if(typeof i=="string")a=i;else if(a=i.pattern,l=i.baseUri.fsPath,!Ye(e,l,!0))return;let u=c=>{let{root:h,files:d}=c;l&&!ni(h,l)?d=d.filter(g=>{if(g.type!="f")return!1;let p=ja.default.join(h,g.name);return Ye(l,p)?(0,e_.default)(ja.default.relative(l,p),a,{dot:!0}):!1}):d=d.filter(g=>g.type=="f"&&(0,e_.default)(g.name,a,{dot:!0}));for(let g of d){let p=j.file(ja.default.join(h,g.name));g.exists?g.new===!0?r||this._onDidCreate.fire(p):o||this._onDidChange.fire(p):s||this._onDidDelete.fire(p)}if(d.length==2&&d[0].exists!==d[1].exists){let g=d.find(f=>f.exists!==!0),p=d.find(f=>f.exists===!0);g.size==p.size&&this._onDidRename.fire({oldUri:j.file(ja.default.join(h,g.name)),newUri:j.file(ja.default.join(h,p.name))})}if(d.length>2&&d.length%2==0){let[g,p]=gw(d,f=>f.exists===!1);if(g.length==p.length)for(let f of g){let m=p.find(b=>b.size==f.size&&b.mtime_ms==f.mtime_ms);m&&this._onDidRename.fire({oldUri:j.file(ja.default.join(h,f.name)),newUri:j.file(ja.default.join(h,m.name))})}}};t.subscribe(a,u).then(c=>{if(this.subscribe=c.subscribe,this._disposed)return c.dispose();this.disposables.push(c)}).logError()}dispose(){this._disposed=!0,Sh.watchers.delete(this),this._onDidRename.dispose(),this._onDidCreate.dispose(),this._onDidChange.dispose(),U(this.disposables)}}});var Up=y((XMe,S$)=>{var sye="2.0.0",aye=Number.MAX_SAFE_INTEGER||9007199254740991,lye=16;S$.exports={SEMVER_SPEC_VERSION:sye,MAX_LENGTH:256,MAX_SAFE_INTEGER:aye,MAX_SAFE_COMPONENT_LENGTH:lye}});var Xp=y((GMe,D$)=>{var uye=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...n)=>console.error("SEMVER",...n):()=>{};D$.exports=uye});var tu=y((Ma,T$)=>{var{MAX_SAFE_COMPONENT_LENGTH:i_}=Up(),cye=Xp();Ma=T$.exports={};var hye=Ma.re=[],ae=Ma.src=[],le=Ma.t={},dye=0,Oe=(n,e,t)=>{let i=dye++;cye(n,i,e),le[n]=i,ae[i]=e,hye[i]=new RegExp(e,t?"g":void 0)};Oe("NUMERICIDENTIFIER","0|[1-9]\\d*");Oe("NUMERICIDENTIFIERLOOSE","[0-9]+");Oe("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");Oe("MAINVERSION",`(${ae[le.NUMERICIDENTIFIER]})\\.(${ae[le.NUMERICIDENTIFIER]})\\.(${ae[le.NUMERICIDENTIFIER]})`);Oe("MAINVERSIONLOOSE",`(${ae[le.NUMERICIDENTIFIERLOOSE]})\\.(${ae[le.NUMERICIDENTIFIERLOOSE]})\\.(${ae[le.NUMERICIDENTIFIERLOOSE]})`);Oe("PRERELEASEIDENTIFIER",`(?:${ae[le.NUMERICIDENTIFIER]}|${ae[le.NONNUMERICIDENTIFIER]})`);Oe("PRERELEASEIDENTIFIERLOOSE",`(?:${ae[le.NUMERICIDENTIFIERLOOSE]}|${ae[le.NONNUMERICIDENTIFIER]})`);Oe("PRERELEASE",`(?:-(${ae[le.PRERELEASEIDENTIFIER]}(?:\\.${ae[le.PRERELEASEIDENTIFIER]})*))`);Oe("PRERELEASELOOSE",`(?:-?(${ae[le.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${ae[le.PRERELEASEIDENTIFIERLOOSE]})*))`);Oe("BUILDIDENTIFIER","[0-9A-Za-z-]+");Oe("BUILD",`(?:\\+(${ae[le.BUILDIDENTIFIER]}(?:\\.${ae[le.BUILDIDENTIFIER]})*))`);Oe("FULLPLAIN",`v?${ae[le.MAINVERSION]}${ae[le.PRERELEASE]}?${ae[le.BUILD]}?`);Oe("FULL",`^${ae[le.FULLPLAIN]}$`);Oe("LOOSEPLAIN",`[v=\\s]*${ae[le.MAINVERSIONLOOSE]}${ae[le.PRERELEASELOOSE]}?${ae[le.BUILD]}?`);Oe("LOOSE",`^${ae[le.LOOSEPLAIN]}$`);Oe("GTLT","((?:<|>)?=?)");Oe("XRANGEIDENTIFIERLOOSE",`${ae[le.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);Oe("XRANGEIDENTIFIER",`${ae[le.NUMERICIDENTIFIER]}|x|X|\\*`);Oe("XRANGEPLAIN",`[v=\\s]*(${ae[le.XRANGEIDENTIFIER]})(?:\\.(${ae[le.XRANGEIDENTIFIER]})(?:\\.(${ae[le.XRANGEIDENTIFIER]})(?:${ae[le.PRERELEASE]})?${ae[le.BUILD]}?)?)?`);Oe("XRANGEPLAINLOOSE",`[v=\\s]*(${ae[le.XRANGEIDENTIFIERLOOSE]})(?:\\.(${ae[le.XRANGEIDENTIFIERLOOSE]})(?:\\.(${ae[le.XRANGEIDENTIFIERLOOSE]})(?:${ae[le.PRERELEASELOOSE]})?${ae[le.BUILD]}?)?)?`);Oe("XRANGE",`^${ae[le.GTLT]}\\s*${ae[le.XRANGEPLAIN]}$`);Oe("XRANGELOOSE",`^${ae[le.GTLT]}\\s*${ae[le.XRANGEPLAINLOOSE]}$`);Oe("COERCE",`(^|[^\\d])(\\d{1,${i_}})(?:\\.(\\d{1,${i_}}))?(?:\\.(\\d{1,${i_}}))?(?:$|[^\\d])`);Oe("COERCERTL",ae[le.COERCE],!0);Oe("LONETILDE","(?:~>?)");Oe("TILDETRIM",`(\\s*)${ae[le.LONETILDE]}\\s+`,!0);Ma.tildeTrimReplace="$1~";Oe("TILDE",`^${ae[le.LONETILDE]}${ae[le.XRANGEPLAIN]}$`);Oe("TILDELOOSE",`^${ae[le.LONETILDE]}${ae[le.XRANGEPLAINLOOSE]}$`);Oe("LONECARET","(?:\\^)");Oe("CARETTRIM",`(\\s*)${ae[le.LONECARET]}\\s+`,!0);Ma.caretTrimReplace="$1^";Oe("CARET",`^${ae[le.LONECARET]}${ae[le.XRANGEPLAIN]}$`);Oe("CARETLOOSE",`^${ae[le.LONECARET]}${ae[le.XRANGEPLAINLOOSE]}$`);Oe("COMPARATORLOOSE",`^${ae[le.GTLT]}\\s*(${ae[le.LOOSEPLAIN]})$|^$`);Oe("COMPARATOR",`^${ae[le.GTLT]}\\s*(${ae[le.FULLPLAIN]})$|^$`);Oe("COMPARATORTRIM",`(\\s*)${ae[le.GTLT]}\\s*(${ae[le.LOOSEPLAIN]}|${ae[le.XRANGEPLAIN]})`,!0);Ma.comparatorTrimReplace="$1$2$3";Oe("HYPHENRANGE",`^\\s*(${ae[le.XRANGEPLAIN]})\\s+-\\s+(${ae[le.XRANGEPLAIN]})\\s*$`);Oe("HYPHENRANGELOOSE",`^\\s*(${ae[le.XRANGEPLAINLOOSE]})\\s+-\\s+(${ae[le.XRANGEPLAINLOOSE]})\\s*$`);Oe("STAR","(<|>)?=?\\s*\\*");Oe("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");Oe("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var Gp=y((zMe,k$)=>{var gye=["includePrerelease","loose","rtl"],pye=n=>n?typeof n!="object"?{loose:!0}:gye.filter(e=>n[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};k$.exports=pye});var xx=y((KMe,R$)=>{var P$=/^[0-9]+$/,E$=(n,e)=>{let t=P$.test(n),i=P$.test(e);return t&&i&&(n=+n,e=+e),n===e?0:t&&!i?-1:i&&!t?1:nE$(e,n);R$.exports={compareIdentifiers:E$,rcompareIdentifiers:fye}});var Qi=y((QMe,F$)=>{var Cx=Xp(),{MAX_LENGTH:_$,MAX_SAFE_INTEGER:Sx}=Up(),{re:L$,t:I$}=tu(),mye=Gp(),{compareIdentifiers:Dh}=xx(),tr=class{constructor(e,t){if(t=mye(t),e instanceof tr){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>_$)throw new TypeError(`version is longer than ${_$} characters`);Cx("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?L$[I$.LOOSE]:L$[I$.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>Sx||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Sx||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Sx||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(r=>{if(/^[0-9]+$/.test(r)){let o=+r;if(o>=0&&o=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(Dh(this.prerelease[0],t)===0?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};F$.exports=tr});var iu=y((VMe,A$)=>{var{MAX_LENGTH:bye}=Up(),{re:j$,t:M$}=tu(),O$=Qi(),yye=Gp(),vye=(n,e)=>{if(e=yye(e),n instanceof O$)return n;if(typeof n!="string"||n.length>bye||!(e.loose?j$[M$.LOOSE]:j$[M$.FULL]).test(n))return null;try{return new O$(n,e)}catch{return null}};A$.exports=vye});var H$=y((eOe,N$)=>{var wye=iu(),xye=(n,e)=>{let t=wye(n,e);return t?t.version:null};N$.exports=xye});var B$=y((tOe,q$)=>{var Cye=iu(),Sye=(n,e)=>{let t=Cye(n.trim().replace(/^[=v]+/,""),e);return t?t.version:null};q$.exports=Sye});var Z$=y((iOe,Y$)=>{var W$=Qi(),Dye=(n,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new W$(n instanceof W$?n.version:n,t).inc(e,i).version}catch{return null}};Y$.exports=Dye});var Tr=y((nOe,$$)=>{var J$=Qi(),Tye=(n,e,t)=>new J$(n,t).compare(new J$(e,t));$$.exports=Tye});var Dx=y((rOe,U$)=>{var kye=Tr(),Pye=(n,e,t)=>kye(n,e,t)===0;U$.exports=Pye});var z$=y((oOe,G$)=>{var X$=iu(),Eye=Dx(),Rye=(n,e)=>{if(Eye(n,e))return null;{let t=X$(n),i=X$(e),r=t.prerelease.length||i.prerelease.length,o=r?"pre":"",s=r?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return o+a;return s}};G$.exports=Rye});var Q$=y((sOe,K$)=>{var _ye=Qi(),Lye=(n,e)=>new _ye(n,e).major;K$.exports=Lye});var eU=y((aOe,V$)=>{var Iye=Qi(),Fye=(n,e)=>new Iye(n,e).minor;V$.exports=Fye});var iU=y((lOe,tU)=>{var jye=Qi(),Mye=(n,e)=>new jye(n,e).patch;tU.exports=Mye});var rU=y((uOe,nU)=>{var Oye=iu(),Aye=(n,e)=>{let t=Oye(n,e);return t&&t.prerelease.length?t.prerelease:null};nU.exports=Aye});var sU=y((cOe,oU)=>{var Nye=Tr(),Hye=(n,e,t)=>Nye(e,n,t);oU.exports=Hye});var lU=y((hOe,aU)=>{var qye=Tr(),Bye=(n,e)=>qye(n,e,!0);aU.exports=Bye});var Tx=y((dOe,cU)=>{var uU=Qi(),Wye=(n,e,t)=>{let i=new uU(n,t),r=new uU(e,t);return i.compare(r)||i.compareBuild(r)};cU.exports=Wye});var dU=y((gOe,hU)=>{var Yye=Tx(),Zye=(n,e)=>n.sort((t,i)=>Yye(t,i,e));hU.exports=Zye});var pU=y((pOe,gU)=>{var Jye=Tx(),$ye=(n,e)=>n.sort((t,i)=>Jye(i,t,e));gU.exports=$ye});var zp=y((fOe,fU)=>{var Uye=Tr(),Xye=(n,e,t)=>Uye(n,e,t)>0;fU.exports=Xye});var kx=y((mOe,mU)=>{var Gye=Tr(),zye=(n,e,t)=>Gye(n,e,t)<0;mU.exports=zye});var n_=y((bOe,bU)=>{var Kye=Tr(),Qye=(n,e,t)=>Kye(n,e,t)!==0;bU.exports=Qye});var Px=y((yOe,yU)=>{var Vye=Tr(),eve=(n,e,t)=>Vye(n,e,t)>=0;yU.exports=eve});var Ex=y((vOe,vU)=>{var tve=Tr(),ive=(n,e,t)=>tve(n,e,t)<=0;vU.exports=ive});var r_=y((wOe,wU)=>{var nve=Dx(),rve=n_(),ove=zp(),sve=Px(),ave=kx(),lve=Ex(),uve=(n,e,t,i)=>{switch(e){case"===":return typeof n=="object"&&(n=n.version),typeof t=="object"&&(t=t.version),n===t;case"!==":return typeof n=="object"&&(n=n.version),typeof t=="object"&&(t=t.version),n!==t;case"":case"=":case"==":return nve(n,t,i);case"!=":return rve(n,t,i);case">":return ove(n,t,i);case">=":return sve(n,t,i);case"<":return ave(n,t,i);case"<=":return lve(n,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};wU.exports=uve});var CU=y((xOe,xU)=>{var cve=Qi(),hve=iu(),{re:Rx,t:_x}=tu(),dve=(n,e)=>{if(n instanceof cve)return n;if(typeof n=="number"&&(n=String(n)),typeof n!="string")return null;e=e||{};let t=null;if(!e.rtl)t=n.match(Rx[_x.COERCE]);else{let i;for(;(i=Rx[_x.COERCERTL].exec(n))&&(!t||t.index+t[0].length!==n.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),Rx[_x.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;Rx[_x.COERCERTL].lastIndex=-1}return t===null?null:hve(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};xU.exports=dve});var DU=y((COe,SU)=>{"use strict";SU.exports=function(n){n.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var Kp=y((SOe,TU)=>{"use strict";TU.exports=ze;ze.Node=nu;ze.create=ze;function ze(n){var e=this;if(e instanceof ze||(e=new ze),e.tail=null,e.head=null,e.length=0,n&&typeof n.forEach=="function")n.forEach(function(r){e.push(r)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var r=0;i!==null;r++)t=n(t,i.value,r),i=i.next;return t};ze.prototype.reduceReverse=function(n,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var r=this.length-1;i!==null;r--)t=n(t,i.value,r),i=i.prev;return t};ze.prototype.toArray=function(){for(var n=new Array(this.length),e=0,t=this.head;t!==null;e++)n[e]=t.value,t=t.next;return n};ze.prototype.toArrayReverse=function(){for(var n=new Array(this.length),e=0,t=this.tail;t!==null;e++)n[e]=t.value,t=t.prev;return n};ze.prototype.slice=function(n,e){e=e||this.length,e<0&&(e+=this.length),n=n||0,n<0&&(n+=this.length);var t=new ze;if(ethis.length&&(e=this.length);for(var i=0,r=this.head;r!==null&&ithis.length&&(e=this.length);for(var i=this.length,r=this.tail;r!==null&&i>e;i--)r=r.prev;for(;r!==null&&i>n;i--,r=r.prev)t.push(r.value);return t};ze.prototype.splice=function(n,e,...t){n>this.length&&(n=this.length-1),n<0&&(n=this.length+n);for(var i=0,r=this.head;r!==null&&i{"use strict";var mve=Kp(),ru=Symbol("max"),ws=Symbol("length"),Th=Symbol("lengthCalculator"),Vp=Symbol("allowStale"),ou=Symbol("maxAge"),vs=Symbol("dispose"),kU=Symbol("noDisposeOnSet"),ki=Symbol("lruList"),ao=Symbol("cache"),EU=Symbol("updateAgeOnGet"),o_=()=>1,a_=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[ru]=e.max||1/0,i=e.length||o_;if(this[Th]=typeof i!="function"?o_:i,this[Vp]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[ou]=e.maxAge||0,this[vs]=e.dispose,this[kU]=e.noDisposeOnSet||!1,this[EU]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[ru]=e||1/0,Qp(this)}get max(){return this[ru]}set allowStale(e){this[Vp]=!!e}get allowStale(){return this[Vp]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[ou]=e,Qp(this)}get maxAge(){return this[ou]}set lengthCalculator(e){typeof e!="function"&&(e=o_),e!==this[Th]&&(this[Th]=e,this[ws]=0,this[ki].forEach(t=>{t.length=this[Th](t.value,t.key),this[ws]+=t.length})),Qp(this)}get lengthCalculator(){return this[Th]}get length(){return this[ws]}get itemCount(){return this[ki].length}rforEach(e,t){t=t||this;for(let i=this[ki].tail;i!==null;){let r=i.prev;PU(this,e,i,t),i=r}}forEach(e,t){t=t||this;for(let i=this[ki].head;i!==null;){let r=i.next;PU(this,e,i,t),i=r}}keys(){return this[ki].toArray().map(e=>e.key)}values(){return this[ki].toArray().map(e=>e.value)}reset(){this[vs]&&this[ki]&&this[ki].length&&this[ki].forEach(e=>this[vs](e.key,e.value)),this[ao]=new Map,this[ki]=new mve,this[ws]=0}dump(){return this[ki].map(e=>Lx(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[ki]}set(e,t,i){if(i=i||this[ou],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let r=i?Date.now():0,o=this[Th](t,e);if(this[ao].has(e)){if(o>this[ru])return kh(this,this[ao].get(e)),!1;let l=this[ao].get(e).value;return this[vs]&&(this[kU]||this[vs](e,l.value)),l.now=r,l.maxAge=i,l.value=t,this[ws]+=o-l.length,l.length=o,this.get(e),Qp(this),!0}let s=new l_(e,t,o,r,i);return s.length>this[ru]?(this[vs]&&this[vs](e,t),!1):(this[ws]+=s.length,this[ki].unshift(s),this[ao].set(e,this[ki].head),Qp(this),!0)}has(e){if(!this[ao].has(e))return!1;let t=this[ao].get(e).value;return!Lx(this,t)}get(e){return s_(this,e,!0)}peek(e){return s_(this,e,!1)}pop(){let e=this[ki].tail;return e?(kh(this,e),e.value):null}del(e){kh(this,this[ao].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let r=e[i],o=r.e||0;if(o===0)this.set(r.k,r.v);else{let s=o-t;s>0&&this.set(r.k,r.v,s)}}}prune(){this[ao].forEach((e,t)=>s_(this,t,!1))}},s_=(n,e,t)=>{let i=n[ao].get(e);if(i){let r=i.value;if(Lx(n,r)){if(kh(n,i),!n[Vp])return}else t&&(n[EU]&&(i.value.now=Date.now()),n[ki].unshiftNode(i));return r.value}},Lx=(n,e)=>{if(!e||!e.maxAge&&!n[ou])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:n[ou]&&t>n[ou]},Qp=n=>{if(n[ws]>n[ru])for(let e=n[ki].tail;n[ws]>n[ru]&&e!==null;){let t=e.prev;kh(n,e),e=t}},kh=(n,e)=>{if(e){let t=e.value;n[vs]&&n[vs](t.key,t.value),n[ws]-=t.length,n[ao].delete(t.key),n[ki].removeNode(e)}},l_=class{constructor(e,t,i,r,o){this.key=e,this.value=t,this.length=i,this.now=r,this.maxAge=o||0}},PU=(n,e,t,i)=>{let r=t.value;Lx(n,r)&&(kh(n,t),n[Vp]||(r=void 0)),r&&e.call(i,r.value,r.key,n)};RU.exports=a_});var kr=y((TOe,jU)=>{var su=class{constructor(e,t){if(t=yve(t),e instanceof su)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new su(e.raw,t);if(e instanceof u_)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split("||").map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(r=>!IU(r[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let r of this.set)if(r.length===1&&Sve(r[0])){this.set=[r];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,r=LU.get(i);if(r)return r;let o=this.options.loose,s=o?On[gn.HYPHENRANGELOOSE]:On[gn.HYPHENRANGE];e=e.replace(s,Fve(this.options.includePrerelease)),qt("hyphen replace",e),e=e.replace(On[gn.COMPARATORTRIM],wve),qt("comparator trim",e),e=e.replace(On[gn.TILDETRIM],xve),e=e.replace(On[gn.CARETTRIM],Cve),e=e.split(/\s+/).join(" ");let a=e.split(" ").map(h=>Dve(h,this.options)).join(" ").split(/\s+/).map(h=>Ive(h,this.options));o&&(a=a.filter(h=>(qt("loose invalid filter",h,this.options),!!h.match(On[gn.COMPARATORLOOSE])))),qt("range list",a);let l=new Map,u=a.map(h=>new u_(h,this.options));for(let h of u){if(IU(h))return[h];l.set(h.value,h)}l.size>1&&l.has("")&&l.delete("");let c=[...l.values()];return LU.set(i,c),c}intersects(e,t){if(!(e instanceof su))throw new TypeError("a Range is required");return this.set.some(i=>FU(i,t)&&e.set.some(r=>FU(r,t)&&i.every(o=>r.every(s=>o.intersects(s,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new vve(e,this.options)}catch{return!1}for(let t=0;tn.value==="<0.0.0-0",Sve=n=>n.value==="",FU=(n,e)=>{let t=!0,i=n.slice(),r=i.pop();for(;t&&i.length;)t=i.every(o=>r.intersects(o,e)),r=i.pop();return t},Dve=(n,e)=>(qt("comp",n,e),n=Pve(n,e),qt("caret",n),n=Tve(n,e),qt("tildes",n),n=Rve(n,e),qt("xrange",n),n=Lve(n,e),qt("stars",n),n),pn=n=>!n||n.toLowerCase()==="x"||n==="*",Tve=(n,e)=>n.trim().split(/\s+/).map(t=>kve(t,e)).join(" "),kve=(n,e)=>{let t=e.loose?On[gn.TILDELOOSE]:On[gn.TILDE];return n.replace(t,(i,r,o,s,a)=>{qt("tilde",n,i,r,o,s,a);let l;return pn(r)?l="":pn(o)?l=`>=${r}.0.0 <${+r+1}.0.0-0`:pn(s)?l=`>=${r}.${o}.0 <${r}.${+o+1}.0-0`:a?(qt("replaceTilde pr",a),l=`>=${r}.${o}.${s}-${a} <${r}.${+o+1}.0-0`):l=`>=${r}.${o}.${s} <${r}.${+o+1}.0-0`,qt("tilde return",l),l})},Pve=(n,e)=>n.trim().split(/\s+/).map(t=>Eve(t,e)).join(" "),Eve=(n,e)=>{qt("caret",n,e);let t=e.loose?On[gn.CARETLOOSE]:On[gn.CARET],i=e.includePrerelease?"-0":"";return n.replace(t,(r,o,s,a,l)=>{qt("caret",n,r,o,s,a,l);let u;return pn(o)?u="":pn(s)?u=`>=${o}.0.0${i} <${+o+1}.0.0-0`:pn(a)?o==="0"?u=`>=${o}.${s}.0${i} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.0${i} <${+o+1}.0.0-0`:l?(qt("replaceCaret pr",l),o==="0"?s==="0"?u=`>=${o}.${s}.${a}-${l} <${o}.${s}.${+a+1}-0`:u=`>=${o}.${s}.${a}-${l} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.${a}-${l} <${+o+1}.0.0-0`):(qt("no pr"),o==="0"?s==="0"?u=`>=${o}.${s}.${a}${i} <${o}.${s}.${+a+1}-0`:u=`>=${o}.${s}.${a}${i} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.${a} <${+o+1}.0.0-0`),qt("caret return",u),u})},Rve=(n,e)=>(qt("replaceXRanges",n,e),n.split(/\s+/).map(t=>_ve(t,e)).join(" ")),_ve=(n,e)=>{n=n.trim();let t=e.loose?On[gn.XRANGELOOSE]:On[gn.XRANGE];return n.replace(t,(i,r,o,s,a,l)=>{qt("xRange",n,i,r,o,s,a,l);let u=pn(o),c=u||pn(s),h=c||pn(a),d=h;return r==="="&&d&&(r=""),l=e.includePrerelease?"-0":"",u?r===">"||r==="<"?i="<0.0.0-0":i="*":r&&d?(c&&(s=0),a=0,r===">"?(r=">=",c?(o=+o+1,s=0,a=0):(s=+s+1,a=0)):r==="<="&&(r="<",c?o=+o+1:s=+s+1),r==="<"&&(l="-0"),i=`${r+o}.${s}.${a}${l}`):c?i=`>=${o}.0.0${l} <${+o+1}.0.0-0`:h&&(i=`>=${o}.${s}.0${l} <${o}.${+s+1}.0-0`),qt("xRange return",i),i})},Lve=(n,e)=>(qt("replaceStars",n,e),n.trim().replace(On[gn.STAR],"")),Ive=(n,e)=>(qt("replaceGTE0",n,e),n.trim().replace(On[e.includePrerelease?gn.GTE0PRE:gn.GTE0],"")),Fve=n=>(e,t,i,r,o,s,a,l,u,c,h,d,g)=>(pn(i)?t="":pn(r)?t=`>=${i}.0.0${n?"-0":""}`:pn(o)?t=`>=${i}.${r}.0${n?"-0":""}`:s?t=`>=${t}`:t=`>=${t}${n?"-0":""}`,pn(u)?l="":pn(c)?l=`<${+u+1}.0.0-0`:pn(h)?l=`<${u}.${+c+1}.0-0`:d?l=`<=${u}.${c}.${h}-${d}`:n?l=`<${u}.${c}.${+h+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),jve=(n,e,t)=>{for(let i=0;i0){let r=n[i].semver;if(r.major===e.major&&r.minor===e.minor&&r.patch===e.patch)return!0}return!1}return!0}});var ef=y((kOe,HU)=>{var tf=Symbol("SemVer ANY"),Ph=class{static get ANY(){return tf}constructor(e,t){if(t=Mve(t),e instanceof Ph){if(e.loose===!!t.loose)return e;e=e.value}h_("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===tf?this.value="":this.value=this.operator+this.semver.version,h_("comp",this)}parse(e){let t=this.options.loose?MU[OU.COMPARATORLOOSE]:MU[OU.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new AU(i[2],this.options.loose):this.semver=tf}toString(){return this.value}test(e){if(h_("Comparator.test",e,this.options.loose),this.semver===tf||e===tf)return!0;if(typeof e=="string")try{e=new AU(e,this.options)}catch{return!1}return c_(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Ph))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new NU(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new NU(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),r=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),o=this.semver.version===e.semver.version,s=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=c_(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=c_(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||r||o&&s||a||l}};HU.exports=Ph;var Mve=Gp(),{re:MU,t:OU}=tu(),c_=r_(),h_=Xp(),AU=Qi(),NU=kr()});var nf=y((POe,qU)=>{var Ove=kr(),Ave=(n,e,t)=>{try{e=new Ove(e,t)}catch{return!1}return e.test(n)};qU.exports=Ave});var WU=y((EOe,BU)=>{var Nve=kr(),Hve=(n,e)=>new Nve(n,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));BU.exports=Hve});var ZU=y((ROe,YU)=>{var qve=Qi(),Bve=kr(),Wve=(n,e,t)=>{let i=null,r=null,o=null;try{o=new Bve(e,t)}catch{return null}return n.forEach(s=>{o.test(s)&&(!i||r.compare(s)===-1)&&(i=s,r=new qve(i,t))}),i};YU.exports=Wve});var $U=y((_Oe,JU)=>{var Yve=Qi(),Zve=kr(),Jve=(n,e,t)=>{let i=null,r=null,o=null;try{o=new Zve(e,t)}catch{return null}return n.forEach(s=>{o.test(s)&&(!i||r.compare(s)===1)&&(i=s,r=new Yve(i,t))}),i};JU.exports=Jve});var GU=y((LOe,XU)=>{var d_=Qi(),$ve=kr(),UU=zp(),Uve=(n,e)=>{n=new $ve(n,e);let t=new d_("0.0.0");if(n.test(t)||(t=new d_("0.0.0-0"),n.test(t)))return t;t=null;for(let i=0;i{let a=new d_(s.semver.version);switch(s.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!o||UU(a,o))&&(o=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${s.operator}`)}}),o&&(!t||UU(t,o))&&(t=o)}return t&&n.test(t)?t:null};XU.exports=Uve});var KU=y((IOe,zU)=>{var Xve=kr(),Gve=(n,e)=>{try{return new Xve(n,e).range||"*"}catch{return null}};zU.exports=Gve});var Ix=y((FOe,tX)=>{var zve=Qi(),eX=ef(),{ANY:Kve}=eX,Qve=kr(),Vve=nf(),QU=zp(),VU=kx(),ewe=Ex(),twe=Px(),iwe=(n,e,t,i)=>{n=new zve(n,i),e=new Qve(e,i);let r,o,s,a,l;switch(t){case">":r=QU,o=ewe,s=VU,a=">",l=">=";break;case"<":r=VU,o=twe,s=QU,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(Vve(n,e,i))return!1;for(let u=0;u{g.semver===Kve&&(g=new eX(">=0.0.0")),h=h||g,d=d||g,r(g.semver,h.semver,i)?h=g:s(g.semver,d.semver,i)&&(d=g)}),h.operator===a||h.operator===l||(!d.operator||d.operator===a)&&o(n,d.semver))return!1;if(d.operator===l&&s(n,d.semver))return!1}return!0};tX.exports=iwe});var nX=y((jOe,iX)=>{var nwe=Ix(),rwe=(n,e,t)=>nwe(n,e,">",t);iX.exports=rwe});var oX=y((MOe,rX)=>{var owe=Ix(),swe=(n,e,t)=>owe(n,e,"<",t);rX.exports=swe});var lX=y((OOe,aX)=>{var sX=kr(),awe=(n,e,t)=>(n=new sX(n,t),e=new sX(e,t),n.intersects(e));aX.exports=awe});var cX=y((AOe,uX)=>{var lwe=nf(),uwe=Tr();uX.exports=(n,e,t)=>{let i=[],r=null,o=null,s=n.sort((c,h)=>uwe(c,h,t));for(let c of s)lwe(c,e,t)?(o=c,r||(r=c)):(o&&i.push([r,o]),o=null,r=null);r&&i.push([r,null]);let a=[];for(let[c,h]of i)c===h?a.push(c):!h&&c===s[0]?a.push("*"):h?c===s[0]?a.push(`<=${h}`):a.push(`${c} - ${h}`):a.push(`>=${c}`);let l=a.join(" || "),u=typeof e.raw=="string"?e.raw:String(e);return l.length{var hX=kr(),Fx=ef(),{ANY:g_}=Fx,rf=nf(),p_=Tr(),cwe=(n,e,t={})=>{if(n===e)return!0;n=new hX(n,t),e=new hX(e,t);let i=!1;e:for(let r of n.set){for(let o of e.set){let s=hwe(r,o,t);if(i=i||s!==null,s)continue e}if(i)return!1}return!0},hwe=(n,e,t)=>{if(n===e)return!0;if(n.length===1&&n[0].semver===g_){if(e.length===1&&e[0].semver===g_)return!0;t.includePrerelease?n=[new Fx(">=0.0.0-0")]:n=[new Fx(">=0.0.0")]}if(e.length===1&&e[0].semver===g_){if(t.includePrerelease)return!0;e=[new Fx(">=0.0.0")]}let i=new Set,r,o;for(let g of n)g.operator===">"||g.operator===">="?r=dX(r,g,t):g.operator==="<"||g.operator==="<="?o=gX(o,g,t):i.add(g.semver);if(i.size>1)return null;let s;if(r&&o){if(s=p_(r.semver,o.semver,t),s>0)return null;if(s===0&&(r.operator!==">="||o.operator!=="<="))return null}for(let g of i){if(r&&!rf(g,String(r),t)||o&&!rf(g,String(o),t))return null;for(let p of e)if(!rf(g,String(p),t))return!1;return!0}let a,l,u,c,h=o&&!t.includePrerelease&&o.semver.prerelease.length?o.semver:!1,d=r&&!t.includePrerelease&&r.semver.prerelease.length?r.semver:!1;h&&h.prerelease.length===1&&o.operator==="<"&&h.prerelease[0]===0&&(h=!1);for(let g of e){if(c=c||g.operator===">"||g.operator===">=",u=u||g.operator==="<"||g.operator==="<=",r){if(d&&g.semver.prerelease&&g.semver.prerelease.length&&g.semver.major===d.major&&g.semver.minor===d.minor&&g.semver.patch===d.patch&&(d=!1),g.operator===">"||g.operator===">="){if(a=dX(r,g,t),a===g&&a!==r)return!1}else if(r.operator===">="&&!rf(r.semver,String(g),t))return!1}if(o){if(h&&g.semver.prerelease&&g.semver.prerelease.length&&g.semver.major===h.major&&g.semver.minor===h.minor&&g.semver.patch===h.patch&&(h=!1),g.operator==="<"||g.operator==="<="){if(l=gX(o,g,t),l===g&&l!==o)return!1}else if(o.operator==="<="&&!rf(o.semver,String(g),t))return!1}if(!g.operator&&(o||r)&&s!==0)return!1}return!(r&&u&&!o&&s!==0||o&&c&&!r&&s!==0||d||h)},dX=(n,e,t)=>{if(!n)return e;let i=p_(n.semver,e.semver,t);return i>0?n:i<0||e.operator===">"&&n.operator===">="?e:n},gX=(n,e,t)=>{if(!n)return e;let i=p_(n.semver,e.semver,t);return i<0?n:i>0||e.operator==="<"&&n.operator==="<="?e:n};pX.exports=cwe});var of=y((HOe,mX)=>{var f_=tu();mX.exports={re:f_.re,src:f_.src,tokens:f_.t,SEMVER_SPEC_VERSION:Up().SEMVER_SPEC_VERSION,SemVer:Qi(),compareIdentifiers:xx().compareIdentifiers,rcompareIdentifiers:xx().rcompareIdentifiers,parse:iu(),valid:H$(),clean:B$(),inc:Z$(),diff:z$(),major:Q$(),minor:eU(),patch:iU(),prerelease:rU(),compare:Tr(),rcompare:sU(),compareLoose:lU(),compareBuild:Tx(),sort:dU(),rsort:pU(),gt:zp(),lt:kx(),eq:Dx(),neq:n_(),gte:Px(),lte:Ex(),cmp:r_(),coerce:CU(),Comparator:ef(),Range:kr(),satisfies:nf(),toComparators:WU(),maxSatisfying:ZU(),minSatisfying:$U(),minVersion:GU(),validRange:KU(),outside:Ix(),gtr:nX(),ltr:oX(),intersects:lX(),simplifyRange:cX(),subset:fX()}});var Eh,bX,m_,WOe,sf,yX=k(()=>{"use strict";Eh=S(require("path")),bX=S(require("fs"));re();$e();m_=S(qw()),WOe=q()("model-resolver"),sf=class{get nodeFolder(){return Wl("npm")?this._npmFolder?Promise.resolve(this._npmFolder):_o("npm --loglevel silent root -g",{},3e3).then(e=>(this._npmFolder=(0,m_.default)(e).trim(),this._npmFolder)):Promise.resolve("")}get yarnFolder(){return Wl("yarnpkg")?this._yarnFolder?Promise.resolve(this._yarnFolder):_o("yarnpkg global dir",{},3e3).then(e=>{let t=Eh.default.join((0,m_.default)(e).trim(),"node_modules"),i=bX.default.existsSync(t);return i&&(this._yarnFolder=t),i?t:""}):Promise.resolve("")}async resolveModule(e){let t=await this.nodeFolder,i=await this.yarnFolder;if(i){let r=await zi(Eh.default.join(i,e,"package.json"));if(r&&r.isFile())return Eh.default.join(i,e)}if(t){let r=await zi(Eh.default.join(t,e,"package.json"));if(r&&r.isFile())return Eh.default.join(t,e)}return null}}});function SX(n,e){if(!e.startsWith("nvim-")&&!e.startsWith("patch-"))throw new Error("Feature param could only starts with nvim and patch");if(!n.isVim&&e.startsWith("patch-")||n.isVim&&e.startsWith("nvim-"))return!1;if(n.isVim){let[t,i,r,o]=n.version.match(/^(\d)(\d{2})(\d+)$/),s=`${i}.${parseInt(r,10)}.${parseInt(o,10)}`;return y_.default.gte(s,e.slice(6))}return y_.default.gte(n.version,e.slice(5))}function DX(n=""){return b_.has(n)?b_.get(n):(jx=jx+1,b_.set(n,jx),jx)}function TX(n){let t=n.getConfiguration("coc.preferences").get("watchmanPath","watchman");try{return CX.default.sync(t)}catch{return null}}async function kX(n,e,t){let i=await n.call("expand","%:p");i=af.default.normalize(i);let r=i&&af.default.isAbsolute(i);if(r&&!Ye(e,i,!0))return ih(t,af.default.dirname(i));let o=ih(t,e);return o&&o!=wX.default.homedir()?o:r?ih(t,af.default.dirname(i)):null}function PX(n){return dwe.resolveModule(n)}function v_(n,e,t){if(Array.isArray(n)){let i=0;for(let r of n){let o=v_(r,e,t);if(o===10)return o;o>i&&(i=o)}return i}else{if(typeof n=="string")return n==="*"?5:n===t?10:0;if(n&&xX.TextDocumentFilter.is(n)){let i=j.parse(e),{language:r,pattern:o,scheme:s}=n,a=0;if(s)if(s===i.scheme)a=5;else if(s==="*")a=3;else return 0;if(r)if(r===t)a=10;else if(r==="*")a=Math.max(a,5);else return 0;if(o){let l=En||Jc,u=l?o.toLowerCase():o,c=l?i.fsPath.toLowerCase():i.fsPath;if(u===c||(0,vX.default)(c,u,{dot:!0}))a=5;else return 0}return a}else return 0}}var vX,wX,af,y_,xX,CX,jx,dwe,b_,EX=k(()=>{"use strict";vX=S(Lo()),wX=S(require("os")),af=S(require("path")),y_=S(of()),xX=S(W());Pe();CX=S(Bg());yX();$e();$c();jx=2e3,dwe=new sf,b_=new Map});var Mx,gwe,lf,RX=k(()=>{"use strict";qe();Mx=S(W());re();gwe=q()("core-keymaps"),lf=class{constructor(e){this.documents=e;this.keymaps=new Map}attach(e){this.nvim=e}async doKeymap(e,t="",i){let r=this.keymaps.get(e);if(!r)return gwe.error(`keymap for ${e} not found`),i&&this.nvim.command(`silent! unmap ${i.startsWith("{")&&i.endsWith("}")?`<${i.slice(1,-1)}>`:i}`,!0),t;let[o,s]=r,a=await Promise.resolve(o());return s&&await this.nvim.command(`silent! call repeat#set("\\(coc-${e})", -1)`),a??t}registerKeymap(e,t,i,r={}){if(!t)throw new Error(`Invalid key ${t} of registerKeymap`);if(this.keymaps.has(t))throw new Error(`${t} already exists.`);r=Object.assign({sync:!0,cancel:!0,silent:!0,repeat:!1},r);let{nvim:o}=this;this.keymaps.set(t,[i,!!r.repeat]);let s=r.sync?"request":"notify",a=r.silent?"":"";for(let l of e)if(l=="i")o.command(`inoremap ${a} (coc-${t}) coc#_insert_key('${s}', '${t}', ${r.cancel?1:0})`,!0);else{let u=U0(l);o.command(`${l}noremap ${a} (coc-${t}) :${u}call coc#rpc#${s}('doKeymap', ['${t}'])`,!0)}return Mx.Disposable.create(()=>{this.keymaps.delete(t);for(let l of e)o.command(`${l}unmap (coc-${t})`,!0)})}registerExprKeymap(e,t,i,r=!1){let o=`${e}${global.Buffer.from(t).toString("base64")}${r?"1":"0"}`,{nvim:s}=this;return this.keymaps.set(o,[i,!1]),e=="i"?s.command(`inoremap ${r?"":""} ${t} coc#_insert_key('request', '${o}')`,!0):s.command(`${e}noremap ${r?"":""} ${t} coc#rpc#request('doKeymap', ['${o}'])`,!0),Mx.Disposable.create(()=>{this.keymaps.delete(o),s.command(`${e}unmap ${r?"":""} ${t}`,!0)})}registerLocalKeymap(e,t,i,r=!1){let o=ps(),{nvim:s}=this,a=this.documents.bufnr;this.keymaps.set(o,[i,!1]);let l=r?"notify":"request",u=U0(e),c=t.startsWith("<")&&t.endsWith(">")?`{${t.slice(1,-1)}}`:t;if(this.nvim.hasFunction("nvim_buf_set_keymap"))s.call("nvim_buf_set_keymap",[0,e,t,`:${u}call coc#rpc#${l}('doKeymap', ['${o}', '', '${c}'])`,{silent:!0,nowait:!0}],!0);else{let h=`${e}noremap ${t} :${u}call coc#rpc#${l}('doKeymap', ['${o}', '', '${c}'])`;s.command(h,!0)}return Mx.Disposable.create(()=>{this.keymaps.delete(o),s.call("coc#compat#buf_del_keymap",[a,e,t],!0)})}}});var Rh,i1e,uf,_X=k(()=>{"use strict";fe();Rh=S(W());re();i1e=q()("core-watchers"),uf=class{constructor(){this.watchedOptions=new Set;this.disposables=[];this._onDidRuntimePathChange=new Rh.Emitter;this._onDidOptionChange=new Rh.Emitter;this.onDidRuntimePathChange=this._onDidRuntimePathChange.event;this.onDidOptionChange=this._onDidOptionChange.event}get options(){return Array.from(this.watchedOptions)}attach(e,t){this.nvim=e,this.env=t,this.watchOption("runtimepath",(i,r)=>{let o=i.split(","),a=r.split(",").filter(l=>!o.includes(l));a.length>0&&this._onDidRuntimePathChange.fire(a),this.env.runtimepath=r},this.disposables)}watchOption(e,t,i){let r=this.watchedOptions.has(e);r||(this.watchedOptions.add(e),this._onDidOptionChange.fire());let o=P.on("OptionSet",async(s,a,l)=>{s==e&&t&&await Promise.resolve(t(a,l))});i&&i.push(Rh.Disposable.create(()=>{o.dispose(),!r&&(this.watchedOptions.delete(e),this._onDidOptionChange.fire())}))}watchGlobal(e,t,i){let{nvim:r}=this;r.call("coc#_watch",e,!0);let o=P.on("GlobalChange",async(s,a,l)=>{s==e&&await Promise.resolve(t(a,l))});i&&i.push(Rh.Disposable.create(()=>{o.dispose(),r.call("coc#_unwatch",e,!0)}))}dispose(){U(this.disposables),this._onDidOptionChange.dispose(),this._onDidRuntimePathChange.dispose()}}});function cf(n){if(!(!n||!hf.default.isAbsolute(n)))return{name:hf.default.basename(n),uri:j.file(n).toString()}}var hf,Ox,pwe,df,LX=k(()=>{"use strict";hf=S(require("path")),Ox=S(W());Pe();dn();fe();nt();xr();$e();pwe=q()("core-workspaceFolder");df=class{constructor(e){this.configurations=e;this._onDidChangeWorkspaceFolders=new Ox.Emitter;this.onDidChangeWorkspaceFolders=this._onDidChangeWorkspaceFolders.event;this.rootPatterns=new Map;this._workspaceFolders=[];this._tokenSources=new Set;P.on("VimLeavePre",this.cancelAll,this)}cancelAll(){for(let e of this._tokenSources)e.cancel()}setWorkspaceFolders(e){if(!e||!Array.isArray(e))return;let t=e.map(i=>cf(i));this._workspaceFolders=t.filter(i=>i!=null)}getWorkspaceFolder(e){if(e.scheme!=="file")return;let t=Array.from(this._workspaceFolders).map(o=>j.parse(o.uri).fsPath);t.sort((o,s)=>s.length-o.length);let i=e.fsPath,r=t.find(o=>Ye(o,i,!0));return cf(r)}getRelativePath(e,t){let i,r="";if(typeof e=="string"?(i=j.file(e),r=e):typeof e<"u"&&(i=e,r=e.fsPath),!i)return r;let o=this.getWorkspaceFolder(i);if(!o)return r;typeof t>"u"&&this._workspaceFolders&&(t=this._workspaceFolders.length>1);let s=hf.default.relative(j.parse(o.uri).fsPath,i.fsPath);return s=s==""?i.fsPath:s,t&&o.name&&(s=`${o.name}/${s}`),s}get workspaceFolders(){return this._workspaceFolders}addRootPattern(e,t){let i=this.rootPatterns.get(e)||[];for(let r of t)i.includes(r)||i.push(r);this.rootPatterns.set(e,i)}resolveRoot(e,t,i,r){if(e.buftype!==""||e.schema!=="file"||!e.enabled)return null;let o=[0,1,2],s=j.parse(e.uri),a=hf.default.dirname(s.fsPath),l=this.configurations.getConfiguration("workspace",e.uri),u=l.get("ignoredFiletypes",[]),c=l.get("bottomUpFiletypes",[]),h=l.get("workspaceFolderCheckCwd",!0),d=l.get("ignoredFolders",[]),g=l.get("workspaceFolderFallbackCwd",!0);if(u!=null&&u.includes(e.filetype))return null;let p=this.getWorkspaceFolder(j.parse(e.uri));if(p)return j.parse(p.uri).fsPath;d=Array.isArray(d)?d.filter(m=>m&&m.length>0).map(m=>r(m)):[];let f=null;for(let m of o){let b=this.getRootPatterns(e,m);if(b&&b.length){let w=c.includes("*")||c.includes(e.filetype),x=np(a,b,t,w,h,d);if(x){f=x;break}}}return g&&!f&&!d.includes(t)&&Ye(t,a,!0)&&(f=t),f&&this.addWorkspaceFolder(f,i),f}addWorkspaceFolder(e,t){let i=cf(e);if(!!i)return this._workspaceFolders.findIndex(r=>r.uri==i.uri)==-1&&(this._workspaceFolders.push(i),t&&this._onDidChangeWorkspaceFolders.fire({added:[i],removed:[]})),i}renameWorkspaceFolder(e,t){let i=cf(t);if(!i)return;let r=this._workspaceFolders.findIndex(s=>j.parse(s.uri).fsPath==e);if(r==-1)return;let o=this.workspaceFolders[r];this._workspaceFolders.splice(r,1,i),this._onDidChangeWorkspaceFolders.fire({removed:[o],added:[i]})}removeWorkspaceFolder(e){let t=cf(e);if(!t)return;let i=this._workspaceFolders.findIndex(r=>r.uri==t.uri);i!=-1&&(this._workspaceFolders.splice(i,1),this._onDidChangeWorkspaceFolders.fire({removed:[t],added:[]}))}getRootPatterns(e,t){let{uri:i}=e;return t==0?e.getVar("root_patterns",[])||[]:t==1?this.getServerRootPatterns(e.languageId):this.configurations.getConfiguration("coc.preferences",i).get("rootPatterns",[".git",".hg",".projections.json"]).slice()}reset(){this.rootPatterns.clear(),this._workspaceFolders=[]}getServerRootPatterns(e){let t=this.configurations.getConfiguration().get("languageserver",{}),i=[];for(let r of Object.keys(t)){let o=t[r],{filetypes:s,rootPatterns:a}=o;Array.isArray(s)&&a&&s.includes(e)&&i.push(...a)}return i=i.concat(this.rootPatterns.get(e)||[]),i.length?Ai(i):[]}checkFolder(e,t,i){return UW(e,t,i)}async checkPatterns(e,t){if(Je(e))return!1;let i=e.map(u=>j.parse(u.uri).fsPath),r=!1,o=new Ox.CancellationTokenSource;this._tokenSources.add(o);let s=o.token,a=setTimeout(()=>{o.cancel()},5e3),l=await Promise.allSettled(i.map(u=>this.checkFolder(u,t,s).then(c=>{this._tokenSources.delete(o),c&&(r=!0,clearTimeout(a),o.cancel())})));return clearTimeout(a),l.forEach(u=>{u.status==="rejected"&&!pB(u.reason)&&pwe.error("checkPatterns error:",t,u.reason)}),r}}});var gf,IX=k(()=>{"use strict";fe();re();gf=class{constructor(e,t){this._create=e;this.disposables=[];this.itemsMap=new Map;let{disposables:i}=this;for(let r of t.documents)this.create(r);t.onDidOpenTextDocument(r=>{this.create(t.getDocument(r.bufnr))},null,i),t.onDidChangeDocument(r=>{this.onChange(r)},null,i),t.onDidCloseDocument(r=>{this.delete(r.bufnr)},null,i),P.on("LinesChanged",r=>{let o=this.itemsMap.get(r);o&&typeof o.item.onTextChange=="function"&&o.item.onTextChange()},null,i)}get items(){return Array.from(this.itemsMap.values()).map(e=>e.item)}getItem(e){var i;if(typeof e=="number")return(i=this.itemsMap.get(e))==null?void 0:i.item;let t=Array.from(this.itemsMap.values()).find(r=>r.uri==e);return t?t.item:void 0}create(e){if(!e)return;let t=this.itemsMap.get(e.bufnr);t&&t.item.dispose();let i=this._create(e);i&&this.itemsMap.set(e.bufnr,{uri:e.uri,item:i})}onChange(e){let t=this.itemsMap.get(e.bufnr);t&&typeof t.item.onChange=="function"&&t.item.onChange(e)}delete(e){let t=this.itemsMap.get(e);t&&(t.item.dispose(),this.itemsMap.delete(e))}reset(){for(let e of this.itemsMap.values())e.item.dispose();this.itemsMap.clear()}dispose(){U(this.disposables);for(let e of this.itemsMap.values())e.item.dispose();this._create=void 0,this.itemsMap.clear()}}});var ir,w_,pf,FX=k(()=>{"use strict";ir=S(require("fs")),w_=S(require("path")),pf=class{constructor(e){this.filepath=e}fetch(e){let t=this.load();if(!e)return t;let i=e.split(".");for(let r of i){if(typeof t[r]>"u")return;t=t[r]}return t}exists(e){let t=this.load(),i=e.split(".");for(let r of i){if(typeof t[r]>"u")return!1;t=t[r]}return!0}delete(e){let t=this.load(),i=t,r=e.split("."),o=r.length;for(let s=0;s"u");s++){if(s==o-1){delete t[r[s]],ir.default.writeFileSync(this.filepath,JSON.stringify(i,null,2),"utf8");break}t=t[r[s]]}}push(e,t){let i=this.load()||{},r=i,o=e.split("."),s=o.length;if(r==null){let a=w_.default.dirname(this.filepath);ir.default.mkdirSync(a,{recursive:!0}),r=i}for(let a=0;a"u"&&(r[l]={}),r=r[l]}}load(){let e=w_.default.dirname(this.filepath),t=ir.default.statSync(e);if(!t||!t.isDirectory())return ir.default.mkdirSync(e,{recursive:!0}),ir.default.writeFileSync(this.filepath,"{}","utf8"),{};try{let i=ir.default.readFileSync(this.filepath,"utf8");return JSON.parse(i.trim())}catch{return ir.default.writeFileSync(this.filepath,"{}","utf8"),{}}}clear(){let e=ir.default.statSync(this.filepath);!e||!e.isFile()||ir.default.writeFileSync(this.filepath,"{}","utf8")}destroy(){ir.default.existsSync(this.filepath)&&ir.default.unlinkSync(this.filepath)}}});function _h(n,e){e=e??n.length;let t=new Uint8Array(e),i=!0;for(let r=0;r1&&(i=!1),t[r]=o}return r=>{if(r===0)return 0;if(i)return Math.min(r,e);let o=0;for(let s=0;s{"use strict"});async function OX(){let n=MX.default.resolve(__dirname,"..","bin/fuzzy.wasm"),e=jX.default.readFileSync(n);return(await global.WebAssembly.instantiate(e,{env:{}})).instance.exports}function*C_(n,e,t){t=t?Math.min(t,n.length):n.length;let i=_h(n,Math.min(n.length,4096)),r,o,s=e.length;for(let a=0;a=t){r!=null&&(yield[i(r),i(o+1)]);break}if(o!=null){let u=l-o;if(u==1)o=l;else if(u>1)yield[i(r),i(o+1)],r=l;else{yield[i(r),i(o+1)];break}}else r=l;o=l,a==s-1&&(yield[i(r),i(o+1)])}}var jX,MX,Ax,S_=k(()=>{"use strict";jX=S(require("fs")),MX=S(require("path"));x_();Ax=class{constructor(e){this.exports=e;this.patternLength=0;this.matchSeq=!1;this.sizes=[2048,1024,1024]}matchSpans(e,t,i){return C_(e,t,i)}getSizes(){return this.sizes}setPattern(e,t=!1){if(e.length>256&&(e=e.slice(0,256)),this.matchSeq=t,this.patternLength=t?e.length:e.replace(/(\s|\t)/g,"").length,this.patternPtr==null){let{malloc:s}=this.exports,{sizes:a}=this;this.contentPtr=s(a[0]),this.patternPtr=s(a[1]),this.resultPtr=s(a[2])}let i=Buffer.from(e,"utf8"),r=i.length,o=new Uint8Array(this.exports.memory.buffer,this.patternPtr,r+1);o.set(i),o[r]=0}changeContent(e){let{sizes:t}=this;e.length>4096&&(e=e.slice(0,4096));let i=Buffer.from(e,"utf8"),r=i.length;if(r>t[0]){let{malloc:s,free:a}=this.exports;a(this.contentPtr);let l=r+1;this.contentPtr=s(l),t[0]=l}let o=new Uint8Array(this.exports.memory.buffer,this.contentPtr,r+1);o.set(i),o[r]=0}match(e){if(this.patternPtr==null)throw new Error("setPattern not called before match");if(this.patternLength===0)return{score:100,positions:new Uint32Array};this.changeContent(e);let{fuzzyMatch:t,memory:i}=this.exports,{resultPtr:r}=this,o=t(this.contentPtr,this.patternPtr,r,this.matchSeq?1:0);if(!o)return;let s=new Uint32Array(i.buffer,r,this.patternLength);return{score:o,positions:s.slice()}}matchHighlights(e,t){let i=this.match(e);if(!i)return;let r=[];for(let o of this.matchSpans(e,i.positions))r.push({span:o,hlGroup:t});return{score:i.score,highlights:r}}free(){let e=[this.contentPtr,this.patternPtr,this.resultPtr],{free:t}=this.exports;e.forEach(i=>{i!=null&&t(i)}),this.contentPtr=this.patternPtr=this.resultPtr=void 0}}});var D_,au,T_,D1e,xs,Nx=k(()=>{"use strict";D_=S(require("path")),au=S(require("fs")),T_=require("util");$e();nt();D1e=q()("model-mru"),xs=class{constructor(e,t,i=5e3){this.maximum=i;this.file=D_.default.join(t||process.env.COC_DATA_HOME,e);let r=D_.default.dirname(this.file);au.default.mkdirSync(r,{recursive:!0})}async load(){try{let e=await Sa(this.file,0,this.maximum);return e.length>this.maximum&&await rp(this.file,e.join(` -`)),e[e.length-1]==""&&(e=e.slice(0,-1)),Ai(e)}catch{return[]}}loadSync(){if(!au.default.existsSync(this.file))return[];try{let e=au.default.readFileSync(this.file,"utf8");return e=e.trim(),e.length?e.trim().split(` -`):[]}catch{return[]}}async add(e){let t;try{t=au.default.readFileSync(this.file),t[0]===239&&t[1]===187&&t[2]===191&&(t=t.slice(3)),t=Buffer.concat([Buffer.from(e,"utf8"),new Uint8Array([10]),t])}catch{t=Buffer.concat([Buffer.from(e,"utf8"),new Uint8Array([10])])}await(0,T_.promisify)(au.default.writeFile)(this.file,t)}async remove(e){let t=await this.load(),i=t.length;t=t.filter(r=>r!=e),t.length!=i&&await rp(this.file,t.join(` -`))}async clean(){try{await(0,T_.promisify)(au.default.unlink)(this.file)}catch{}}}});var Hx,ff,AX=k(()=>{"use strict";Hx=S(W());fe();re();ff=class{constructor(e,t){this.nvim=e;this.id=t;this.disposables=[];this._onExit=new Hx.Emitter;this._onStderr=new Hx.Emitter;this._onStdout=new Hx.Emitter;this.onExit=this._onExit.event;this.onStdout=this._onStdout.event;this.onStderr=this._onStderr.event;P.on("TaskExit",(i,r)=>{i==this.id&&this._onExit.fire(r)},null,this.disposables),P.on("TaskStderr",(i,r)=>{i==this.id&&this._onStderr.fire(r)},null,this.disposables),P.on("TaskStdout",(i,r)=>{i==this.id&&this._onStdout.fire(r)},null,this.disposables)}async start(e){let{nvim:t}=this;return await t.call("coc#task#start",[this.id,e])}async stop(){let{nvim:e}=this;await e.call("coc#task#stop",[this.id])}get running(){let{nvim:e}=this;return e.call("coc#task#running",[this.id])}dispose(){let{nvim:e}=this;e.call("coc#task#stop",[this.id],!0),this._onStdout.dispose(),this._onStderr.dispose(),this._onExit.dispose(),U(this.disposables)}}});var qX,Lh,NX,HX,fwe,k_,v,ie=k(()=>{"use strict";qX=S(require("os")),Lh=S(require("path"));Pe();wR();uJ();hJ();pJ();jw();fJ();ZJ();$J();QJ();C$();EX();RX();fp();_X();LX();fe();IX();FX();S_();Nx();dR();AX();re();NX=32,HX=q()("workspace"),fwe=["showMessage","runTerminalCommand","openTerminal","showQuickpick","menuPick","openLocalConfig","showPrompt","createStatusBarItem","createOutputChannel","showOutputChannel","requestInput","echoLines","getCursorPosition","moveTo","getOffset","getSelectedRange","selectRange","createTerminal"],k_=class{constructor(){this.version=Kw;let e=Lh.default.normalize(process.env.COC_VIMCONFIG)??Lh.default.join(qX.default.homedir(),".vim"),t=Lh.default.join(e,Uc);this.configurations=new Ep(t,new _p(this)),this.workspaceFolderControl=new df(this.configurations);let i=this.documentsManager=new Np(this.configurations,this.workspaceFolderControl);this.contentProvider=new Ip(i),this.watchers=new uf,this.autocmds=new Lp(this.contentProvider,this.watchers),this.keymaps=new lf(i),this.files=new Wp(i,this.configurations,this.workspaceFolderControl,this.keymaps),this.editors=new qp(i),this.onDidRuntimePathChange=this.watchers.onDidRuntimePathChange,this.onDidChangeWorkspaceFolders=this.workspaceFolderControl.onDidChangeWorkspaceFolders,this.onDidChangeConfiguration=this.configurations.onDidChange,this.onDidOpenTextDocument=i.onDidOpenTextDocument,this.onDidChangeTextDocument=i.onDidChangeDocument,this.onDidCloseTextDocument=i.onDidCloseDocument,this.onDidSaveTextDocument=i.onDidSaveTextDocument,this.onWillSaveTextDocument=i.onWillSaveTextDocument,this.onDidCreateFiles=this.files.onDidCreateFiles,this.onDidRenameFiles=this.files.onDidRenameFiles,this.onDidDeleteFiles=this.files.onDidDeleteFiles,this.onWillCreateFiles=this.files.onWillCreateFiles,this.onWillRenameFiles=this.files.onWillRenameFiles,this.onWillDeleteFiles=this.files.onWillDeleteFiles;let r=this.getWatchmanPath();this.fileSystemWatchers=new Sh(this.workspaceFolderControl,r)}async init(e){let{nvim:t}=this;for(let s of fwe)Object.defineProperty(this,s,{get:()=>(...a)=>{let l=` -`+Error().stack.split(` -`).slice(2,4).join(` -`);return HX.warn(`workspace.${s} is deprecated, please use window.${s} instead.`,l),e[s].apply(e,a)}});for(let s of["onDidOpenTerminal","onDidCloseTerminal"])Object.defineProperty(this,s,{get:()=>{let a=` -`+Error().stack.split(` -`).slice(2,4).join(` -`);return HX.warn(`workspace.${s} is deprecated, please use window.${s} instead.`,a),e[s]}});let i=[],r;i.push(t.call("coc#util#vim_info").then(s=>{r=this._env=s})),i.push(OX().then(s=>{this.fuzzyExports=s})),i.push(Ea.create().then(s=>{this.strWdith=s})),await Promise.all(i),this.strWdith.setAmbw(!r.ambiguousIsNarrow),e.init(r),this.checkVersion(NX),this.workspaceFolderControl.setWorkspaceFolders(this._env.workspaceFolders),this.configurations.updateMemoryConfig(this._env.config),this.files.attach(t,r,e),this.contentProvider.attach(t),this.keymaps.attach(t),this.autocmds.attach(t,r),this.watchers.attach(t,r),await this.attach(),await this.editors.attach(t);let o=hs.create("watchman",t);this.fileSystemWatchers.attach(o)}checkVersion(e){this._env.apiversion!=e&&this.nvim.echoError(`API version ${this._env.apiversion} is not ${NX}, please build coc.nvim by 'yarn install' after pull source code.`)}getDisplayWidth(e,t=!1){return this.strWdith.getWidth(e,t)}get cwd(){return this.documentsManager.cwd}get env(){return this._env}get root(){return this.documentsManager.root||this.cwd}get rootPath(){return this.root}get bufnr(){return this.documentsManager.bufnr}get insertMode(){return P.insertMode}get floatSupported(){return!0}get uri(){return this.documentsManager.uri}get workspaceFolder(){return this.workspaceFolders[0]}get textDocuments(){return this.documentsManager.textDocuments}get documents(){return this.documentsManager.documents}get document(){return this.documentsManager.document}get workspaceFolders(){return this.workspaceFolderControl.workspaceFolders}checkPatterns(e,t){return this.workspaceFolderControl.checkPatterns(t??this.workspaceFolderControl.workspaceFolders,e)}get folderPaths(){return this.workspaceFolders.map(e=>j.parse(e.uri).fsPath)}get channelNames(){return hs.names}get pluginRoot(){return Lh.default.dirname(__dirname)}get isVim(){return this._env.isVim}get isNvim(){return!this._env.isVim}get completeOpt(){return""}get filetypes(){return this.documentsManager.filetypes}get languageIds(){return this.documentsManager.languageIds}createNameSpace(e){return DX(e)}has(e){return SX(this.env,e)}registerAutocmd(e){return this.autocmds.registerAutocmd(e)}watchOption(e,t,i){this.watchers.watchOption(e,t,i)}watchGlobal(e,t,i){this.watchers.watchGlobal(e,t||function(){},i)}match(e,t){return v_(e,t.uri,t.languageId)}createFileSystemWatcher(e,t,i,r){return this.fileSystemWatchers.createFileSystemWatcher(e,t,i,r)}createFuzzyMatch(){return new Ax(this.fuzzyExports)}getWatchmanPath(){return TX(this.configurations)}getConfiguration(e,t){return this.configurations.getConfiguration(e,t)}getDocument(e){return this.documentsManager.getDocument(e)}isAttached(e){let t=this.documentsManager.getDocument(e);return t!=null&&t.attached}getAttachedDocument(e){let t=this.getDocument(e);if(!t)throw new Error(`Buffer ${e} not created.`);if(!t.attached)throw new Error(`Buffer ${e} not attached, ${t.notAttachReason}`);return t}getQuickfixItem(e,t,i="",r){return this.documentsManager.getQuickfixItem(e,t,i,r)}createMru(e){return new xs(e)}async getQuickfixList(e){return this.documentsManager.getQuickfixList(e)}async showLocations(e){await this.documentsManager.showLocations(e)}getLine(e,t){return this.documentsManager.getLine(e,t)}getWorkspaceFolder(e){return this.workspaceFolderControl.getWorkspaceFolder(j.parse(e))}readFile(e){return this.documentsManager.readFile(e)}async getCurrentState(){let e=await this.document,t=await hh(this.nvim);return{document:e.textDocument,position:t}}async getFormatOptions(e){return this.documentsManager.getFormatOptions(e)}resolveModule(e){return PX(e)}async runCommand(e,t,i){return t=t||this.cwd,_o(e,{cwd:t},i)}expand(e){return this.documentsManager.expand(e)}async callAsync(e,t){return this.isNvim?await this.nvim.call(e,t):await this.nvim.callAsync("coc#util#with_callback",[e,t])}registerTextDocumentContentProvider(e,t){return this.contentProvider.registerTextDocumentContentProvider(e,t)}registerKeymap(e,t,i,r={}){return this.keymaps.registerKeymap(e,t,i,r)}registerExprKeymap(e,t,i,r=!1){return this.keymaps.registerExprKeymap(e,t,i,r)}registerLocalKeymap(e,t,i,r=!1){return this.keymaps.registerLocalKeymap(e,t,i,r)}createTask(e){return new ff(this.nvim,e)}createDatabase(e){let t=Lh.default.join(process.env.COC_DATA_HOME,e+".json");return new pf(t)}registerBufferSync(e){return new gf(e,this.documentsManager)}async attach(){await this.documentsManager.attach(this.nvim,this._env)}jumpTo(e,t,i){return this.files.jumpTo(e,t,i)}findUp(e){return kX(this.nvim,this.cwd,e)}applyEdit(e){return this.files.applyEdit(e)}createFile(e,t={}){return this.files.createFile(e,t)}loadFile(e,t){return this.files.loadResource(e,t)}async loadFiles(e){return this.files.loadResources(e)}async renameFile(e,t,i={}){await this.files.renameFile(e,t,i)}async deleteFile(e,t={}){await this.files.deleteFile(e,t)}async renameCurrent(){await this.files.renameCurrent()}async openResource(e){await this.files.openResource(e)}async computeWordRanges(e,t,i){let r=this.getDocument(e);return r?await r.chars.computeWordRanges(r.textDocument.lines,t,i):null}openTextDocument(e){return this.files.openTextDocument(e)}getRelativePath(e,t){return this.workspaceFolderControl.getRelativePath(e,t)}async findFiles(e,t,i,r){return this.files.findFiles(e,t,i,r)}detach(){this.documentsManager.detach()}reset(){this.configurations.reset(),this.workspaceFolderControl.reset(),this.documentsManager.reset()}dispose(){this.watchers.dispose(),this.autocmds.dispose(),this.contentProvider.dispose(),this.documentsManager.dispose(),this.configurations.dispose()}},v=new k_});var qx,Ih,mf,BX=k(()=>{"use strict";fe();qx=S(W());re();Ih="filter",mf=class{constructor(e,t){this.nvim=e;this._activated=!1;this.history=[];this.disposables=[];this._onDidUpdate=new qx.Emitter;this._onDidExit=new qx.Emitter;this._onDidKeyPress=new qx.Emitter;this.onDidKeyPress=this._onDidKeyPress.event;this.onDidUpdate=this._onDidUpdate.event;this.onDidExit=this._onDidExit.event;this.text="",P.on("InputChar",(i,r)=>{if(!(i!==Ih||!this._activated)){if(!t.includes(r)){if(r.length==1){this.text=this.text+r,this._onDidUpdate.fire(this.text);return}if(r==""||r==""){this.text=this.text.slice(0,-1),this._onDidUpdate.fire(this.text);return}if(r==""){this.text="",this._onDidUpdate.fire(this.text);return}if(r==""){let o=this.history.indexOf(this.text),s=this.history[o+1]||this.history[0];s&&(this.text=s,this._onDidUpdate.fire(this.text));return}if(r==""){let o=this.history.indexOf(this.text),s=this.history[o-1]||this.history[this.history.length-1];s&&(this.text=s,this._onDidUpdate.fire(this.text))}if(r==""||r==""){this.deactivate();return}}this._onDidKeyPress.fire(r)}},null,this.disposables)}active(){this._activated||(this._activated=!0,this.text="",this.nvim.call("coc#prompt#start_prompt",[Ih],!0))}deactivate(e){if(!this._activated)return;this.nvim.call("coc#prompt#stop_prompt",[Ih],!0),this._activated=!1;let{text:t}=this;this.text="",this._onDidExit.fire(e),t&&!this.history.includes(t)&&this.history.push(t)}get activated(){return this._activated}dispose(){this.deactivate(),this.history=[],this._onDidKeyPress.dispose(),this._onDidUpdate.dispose(),this._onDidExit.dispose(),U(this.disposables)}}});var WX,bf,lu,lo,yf=k(()=>{"use strict";Pe();WX=S(require("path"));(e=>{function n(t){return typeof t.label=="string"}e.is=n})(bf||(bf={}));lu=(i=>(i[i.None=0]="None",i[i.Collapsed=1]="Collapsed",i[i.Expanded=2]="Expanded",i))(lu||{}),lo=class{constructor(e,t=0){this.collapsibleState=t;j.isUri(e)?(this.resourceUri=e,this.label=WX.default.basename(e.path),this.id=e.toString()):this.label=e}}});var ZX={};Go(ZX,{default:()=>Fo});var Pi,YX,P_,E_,R_,Fo,vf=k(()=>{"use strict";Pi=S(W());Jt();fe();re();hR();ds();et();_e();xe();ie();BX();yf();YX=q()("BasicTreeView"),P_="tree",E_=3e3,R_=1,Fo=class{constructor(e,t){this.viewId=e;this.opts=t;this._selection=[];this._keymapDefs=[];this._onDispose=new Pi.Emitter;this._onDidRefrash=new Pi.Emitter;this._onDidExpandElement=new Pi.Emitter;this._onDidCollapseElement=new Pi.Emitter;this._onDidChangeSelection=new Pi.Emitter;this._onDidChangeVisibility=new Pi.Emitter;this._onDidFilterStateChange=new Pi.Emitter;this._onDidCursorMoved=new Pi.Emitter;this.onDidRefrash=this._onDidRefrash.event;this.onDispose=this._onDispose.event;this.onDidExpandElement=this._onDidExpandElement.event;this.onDidCollapseElement=this._onDidCollapseElement.event;this.onDidChangeSelection=this._onDidChangeSelection.event;this.onDidChangeVisibility=this._onDidChangeVisibility.event;this.onDidFilterStateChange=this._onDidFilterStateChange.event;this.onDidCursorMoved=this._onDidCursorMoved.event;this.retryTimers=0;this.renderedItems=[];this.nodesMap=new Map;this.mutex=new Di;this.disposables=[];this.lineState={titleCount:0,messageCount:0};this.loadConfiguration(),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),t.enableFilter&&(this.filter=new mf(this.nvim,[this.keys.selectNext,this.keys.selectPrevious,this.keys.invoke])),this.tooltipFactory=D.createFloatFactory({modes:["n"]}),this.provider=t.treeDataProvider,this.leafIndent=t.disableLeafIndent!==!0,this.winfixwidth=t.winfixwidth!==!1,this.autoWidth=t.autoWidth===!0;let i;Object.defineProperty(this,"message",{set:a=>{i=a?a.replace(/\r?\n/g," "):void 0,this.updateHeadLines()},get:()=>i});let r=e.replace(/\r?\n/g," ");Object.defineProperty(this,"title",{set:a=>{r=a?a.replace(/\r?\n/g," "):void 0,this.updateHeadLines()},get:()=>r});let o;Object.defineProperty(this,"description",{set:a=>{o=a?a.replace(/\r?\n/g," "):void 0,this.updateHeadLines()},get:()=>o});let s;Object.defineProperty(this,"filterText",{set:a=>{let{titleCount:l,messageCount:u}=this.lineState,c=l+u;if(a!=null){let h=[{lnum:c,colStart:Q(a),colEnd:Q(a)+1,hlGroup:"Cursor"}];this.renderedItems=[],this.updateUI([a+" "],h,c,-1,!0),this.doFilter(a)}else s!=null&&this.updateUI([],[],c,c+1);s=a},get:()=>s}),this.provider.onDidChangeTreeData&&this.provider.onDidChangeTreeData(this.onDataChange,this,this.disposables),P.on("BufUnload",a=>{if(a!=this.bufnr)return;let l=this.winid!=null;this.winid=void 0,this.bufnr=void 0,l&&this._onDidChangeVisibility.fire({visible:!1}),this.dispose()},null,this.disposables),P.on("WinClosed",a=>{this.winid===a&&(this.winid=void 0,this._onDidChangeVisibility.fire({visible:!1}))},null,this.disposables),P.on("BufWinLeave",(a,l)=>{a==this.bufnr&&l==this.winid&&(this.winid=void 0,this._onDidChangeVisibility.fire({visible:!1}))},null,this.disposables),D.onDidTabClose(a=>{this._targetTabId===a&&this.dispose()},null,this.disposables),P.on("CursorHold",async(a,l)=>{a==this.bufnr&&await this.onHover(l[0])},null,this.disposables),P.on(["CursorMoved","BufEnter"],()=>{this.cancelResolve()},null,this.disposables),P.on("CursorMoved",(a,l)=>{if(a==this.bufnr){let u=this.getElementByLnum(l[0]-1);this._onDidCursorMoved.fire(u)}},null,this.disposables),P.on("WinEnter",a=>{var d;if(a!=this.windowId||!((d=this.filter)!=null&&d.activated))return;let l=this.nvim.createBuffer(this.bufnr),u=this.startLnum-1,c=this.filterText?this.filterText.length:0,h=Pi.Range.create(u,c,u,c+1);l.highlightRanges(P_,"Cursor",[h]),this.nvim.call("coc#prompt#start_prompt",[Ih],!0),this.redraw()},null,this.disposables),P.on("WinLeave",a=>{var u;if(a!=this.windowId||!((u=this.filter)!=null&&u.activated))return;let l=this.nvim.createBuffer(this.bufnr);this.nvim.call("coc#prompt#stop_prompt",[Ih],!0),l.clearNamespace(P_,this.startLnum-1,this.startLnum)},null,this.disposables),this.disposables.push(this._onDidChangeVisibility,this._onDidCursorMoved,this._onDidChangeSelection,this._onDidCollapseElement,this._onDidExpandElement),this.filter&&(this.filter.onDidExit(a=>{this.nodesMap.clear(),this.filterText=void 0,this.itemsToFilter=void 0,a&&typeof this.provider.getParent=="function"?(this.renderedItems=[],this.reveal(a,{focus:!0})):(this.clearSelection(),this.render()),this._onDidFilterStateChange.fire(!1)}),this.filter.onDidUpdate(a=>{this.filterText=a}),this.filter.onDidKeyPress(async a=>{var c,h;let l=this.renderedItems;if(!(l!=null&&l.length))return;let u=this.selection[0];if(a==""||a==this.keys.selectPrevious){let d=l.findIndex(f=>f.node==u),g=d==-1||d==0?l.length-1:d-1,p=(c=l[g])==null?void 0:c.node;p&&this.selectItem(p,!0)}if(a==""||a==this.keys.selectNext){let d=l.findIndex(f=>f.node==u),g=d==-1||d==l.length-1?0:d+1,p=(h=l[g])==null?void 0:h.node;p&&this.selectItem(p,!0)}if(a==""||a==this.keys.invoke){if(!u)return;await this.invokeCommand(u),this.filter.deactivate(u)}}))}get windowId(){return this.winid}get targetTabnr(){return D.getTabNumber(this._targetTabId)}get targetWinId(){return this._targetWinId}get targetBufnr(){return this._targetBufnr}get startLnum(){let e=this.filterText==null?0:1;return this.lineState.messageCount+this.lineState.titleCount+e}get nvim(){return v.nvim}get filtering(){return this.filter!=null&&this.filter.activated}loadConfiguration(e){if(!e||e.affectsConfiguration("tree")){let t=v.getConfiguration("tree");this.config={openedIcon:t.get("openedIcon"," "),closedIcon:t.get("closedIcon"," ")},this.keys={close:t.get("key.close"),invoke:t.get("key.invoke"),toggle:t.get("key.toggle"),actions:t.get("key.actions"),collapseAll:t.get("key.collapseAll"),toggleSelection:t.get("key.toggleSelection"),activeFilter:t.get("key.activeFilter"),selectNext:t.get("key.selectNext"),selectPrevious:t.get("key.selectPrevious")},e&&this.render()}}async doFilter(e){let t=[],i=0,r=await this.mutex.acquire();try{if(!this.itemsToFilter){let l=[],u=async h=>{for(let d of h){l.push(d);let g=await Promise.resolve(this.provider.getChildren(d));g!=null&&g.length&&await u(g)}},c=await Promise.resolve(this.provider.getChildren());await u(c),this.itemsToFilter=l}for(let l of this.itemsToFilter){let u=await this.getTreeItem(l),c=bf.is(u.label)?u.label.label:u.label;if(!e||Uw(e,c)){let h=e?wp(e,c):[];u.collapsibleState=0,u.label={label:c,highlights:e?qZ(h):[]};let{line:d,highlights:g}=this.getRenderedLine(u,i,0);t.push({level:0,node:l,line:d,index:i,score:e?HZ(e,c):0,highlights:g}),i+=1}}t.sort((l,u)=>l.score!=u.score?u.score-l.score:l.index-u.index);let o=this.startLnum,s=[],a=this.renderedItems=t.map((l,u)=>(s.push(...l.highlights.map(c=>(c.lnum=o+u,c))),delete l.index,delete l.score,delete l.highlights,l));this.updateUI(a.map(l=>l.line),s,o,-1,!0),a.length?this.selectItem(a[0].node,!0):this.clearSelection(),this.redraw(),r()}catch(o){r(),YX.error("Error on tree filter:",o)}}async onHover(e){let t=this.getElementByLnum(e-1);if(!t||!this.nodesMap.has(t))return;let i=this.nodesMap.get(t),r=i.item;if(!r.tooltip&&!i.resolved&&(r=await this.resolveItem(t,r)),!r.tooltip||!this.winid)return;let s={filetype:Pi.MarkupContent.is(r.tooltip)&&r.tooltip.kind==Pi.MarkupKind.Markdown?"markdown":"txt",content:Pi.MarkupContent.is(r.tooltip)?r.tooltip.value:r.tooltip};await this.tooltipFactory.show([s])}async onClick(e){let{nvim:t}=this,[i,r]=await t.eval("[getline('.'),col('.')]"),o=tt(i,0,r-1),s=i[o.length];if(!s)return;let{openedIcon:a,closedIcon:l}=this.config;/^\s*$/.test(o)&&[a,l].includes(s)?await this.toggleExpand(e):await this.invokeCommand(e)}async invokeCommand(e){let t=this.nodesMap.get(e);if(!t)return;this.selectItem(e);let i=t.item;if(!(!i.command&&(i=await this.resolveItem(e,i),!i))){if(!i.command)throw new Error("Failed to resolve command from TreeItem.");await ue.execute(i.command)}}async invokeActions(e){if(!e)return;if(this.selectItem(e),typeof this.provider.resolveActions!="function"){await D.showWarningMessage("No actions");return}let t=this.nodesMap.get(e),i=await Promise.resolve(this.provider.resolveActions(t.item,e));if(!i||i.length==0){await D.showWarningMessage("No actions available");return}let r=i.map(s=>s.title),o=await D.showMenuPicker(r,"Choose action");o!=-1&&await Promise.resolve(i[o].handler(e))}async onDataChange(e){var i;if((i=this.filter)!=null&&i.activated){this.itemsToFilter=void 0,await this.doFilter(this.filterText);return}if(this.clearSelection(),!e){await this.render();return}let t=await this.mutex.acquire();try{let r=this.renderedItems,o=r.findIndex(s=>s.node===e);if(o!=-1&&this.bufnr){let a=r[o].level,l=0;for(let d=o;da)&&(l+=1)}let u=[],c=[],h=o+this.startLnum;await this.appendTreeNode(e,a,h,u,c),r.splice(o,l,...u),this.updateUI(u.map(d=>d.line),c,h,h+l)}t()}catch(r){let o=`Error on tree refresh: ${r}`;YX.error(o,r),this.nvim.errWriteLine("[coc.nvim] "+o),t()}}async resolveItem(e,t){if(typeof this.provider.resolveTreeItem=="function"){let i=this.resolveTokenSource=new Pi.CancellationTokenSource,r=i.token;if(t=await Promise.resolve(this.provider.resolveTreeItem(t,e,r)),i.dispose(),this.resolveTokenSource=void 0,r.isCancellationRequested)return}return this.nodesMap.set(e,{item:t,resolved:!0}),t}get visible(){return this.bufnr?this.winid!=null:!1}get valid(){return typeof this.bufnr=="number"}get selection(){return this._selection.slice()}async checkLines(){if(!this.bufnr)return;let t=await this.nvim.createBuffer(this.bufnr).lines,{titleCount:i,messageCount:r}=this.lineState;t=t.slice(i+r);let o=this.renderedItems.map(s=>s.line);return ye(t,o)}async toggleExpand(e){let t=this.nodesMap.get(e);if(!t)return;let i=t.item,r=this.getItemLnum(e),o=r-this.startLnum,s=this.renderedItems[o];if(!s||i.collapsibleState==0){if(typeof this.provider.getParent=="function"){let c=await Promise.resolve(this.provider.getParent(e));c&&(await this.toggleExpand(c),this.focusItem(c))}return}let a=0;if(i.collapsibleState==2){let c=s.level;for(let h=o+1;hc.line),u,r,r+a+1),this.refreshSigns(),i.collapsibleState==1?this._onDidCollapseElement.fire({element:e}):this._onDidExpandElement.fire({element:e})}toggleSelection(e){if(!e)return;let t=this._selection.findIndex(i=>i===e);t!==-1?this.unselectItem(t):this.selectItem(e)}clearSelection(){if(!this.bufnr)return;this._selection=[],this.nvim.createBuffer(this.bufnr).unplaceSign({group:"CocTree"}),this._onDidChangeSelection.fire({selection:[]})}selectItem(e,t,i){let{nvim:r}=this;if(!this.bufnr||!v.env.sign)return;let o=this.getItemLnum(e);if(o==null)return;let s=r.createBuffer(this.bufnr),a=this._selection.includes(e);!this.opts.canSelectMany||t?this._selection=[e]:a||this._selection.push(e),r.pauseNotification(),(!this.opts.canSelectMany||t)&&s.unplaceSign({group:"CocTree"}),r.call("coc#compat#execute",[this.winid,`normal! ${o+1}G`],!0),s.placeSign({id:E_+o,lnum:o+1,name:"CocTreeSelected",group:"CocTree"}),i||this.redraw(),r.resumeNotification(!1,!0),a||this._onDidChangeSelection.fire({selection:this._selection})}unselectItem(e){let t=this._selection[e],i=this.getItemLnum(t);if(i==null||!this.bufnr||!v.env.sign)return;this._selection.splice(e,1),this.nvim.createBuffer(this.bufnr).unplaceSign({group:"CocTree",id:E_+i}),this._onDidChangeSelection.fire({selection:this._selection})}focusItem(e){if(!this.winid)return;let t=this.getItemLnum(e);t!=null&&this.nvim.call("coc#compat#execute",[this.winid,`exe ${t+1}`],!0)}getElementByLnum(e){let t=this.renderedItems[e-this.startLnum];return t?t.node:void 0}getItemLnum(e){let t=this.renderedItems.findIndex(i=>i.node===e);if(t!=-1)return this.startLnum+t}async getTreeItem(e){let t,i=!1,r=this.nodesMap.get(e);r!=null&&(t=r.item,i=r.resolved);let o=await Promise.resolve(this.provider.getTreeItem(e));if(o.id&&!t){for(let s of this.nodesMap.values())if(s.item.id===o.id){i=s.resolved,t=s.item;break}}return t&&t.collapsibleState!=0&&o.collapsibleState!=0&&(o.collapsibleState=t.collapsibleState),this.nodesMap.set(e,{item:o,resolved:i}),o}getRenderedLine(e,t,i){let{openedIcon:r,closedIcon:o}=this.config,s=[],{label:a,deprecated:l,description:u}=e,c=" ".repeat(i),h=(g,p)=>{let f=Q(c);s.push({lnum:t,hlGroup:p,colStart:f,colEnd:f+Q(g)})};switch(e.collapsibleState){case 2:{h(r,"CocTreeOpenClose"),c+=r+" ";break}case 1:{h(o,"CocTreeOpenClose"),c+=o+" ";break}default:c+=this.leafIndent?" ":""}if(e.icon){let{text:g,hlGroup:p}=e.icon;h(g,p),c+=g+" "}if(bf.is(a)&&Array.isArray(a.highlights)){let g=Q(c);for(let p of a.highlights)s.push({lnum:t,hlGroup:"CocSearch",colStart:g+p[0],colEnd:g+p[1]})}let d=typeof a=="string"?a:a.label;return l&&h(d,"CocDeprecatedHighlight"),c+=d,u&&u.indexOf(` -`)==-1&&(c+=" ",h(u,"CocTreeDescription"),c+=u),{line:c,highlights:s}}async appendTreeNode(e,t,i,r,o){let s=1,a=await this.getTreeItem(e),l=this.getRenderedLine(a,i,t);if(o.push(...l.highlights),r.push({level:t,line:l.line,node:e}),a.collapsibleState==2){let u=t+1,c=await Promise.resolve(this.provider.getChildren(e))||[];for(let h of c){let d=await this.appendTreeNode(h,u,i+s,r,o);s=s+d}}return s}updateUI(e,t,i=0,r=-1,o=!1){if(!this.bufnr)return;let{nvim:s,winid:a}=this,l=s.createBuffer(this.bufnr);if(s.pauseNotification(),l.setOption("modifiable",!0,!0),l.setLines(e,{start:i,end:r,strictIndexing:!1},!0),this.autoWidth&&this.nvim.call("coc#window#adjust_width",[a],!0),t.length){let u=r==-1?-1:i+e.length;s.call("coc#highlight#update_highlights",[this.bufnr,P_,t,i,u],!0)}l.setOption("modifiable",!1,!0),o||this.redraw(),s.resumeNotification(!1,!0)}async reveal(e,t={}){var l;if((l=this.filter)!=null&&l.activated)return;let i=this.getItemLnum(e)!=null,{select:r,focus:o,expand:s}=t,a=e;if(typeof this.provider.getParent!="function")throw new Error("missing getParent function from provider for reveal.");if(!i)for(;a;){let u=await Promise.resolve(this.provider.getParent(a));if(u){let c=await this.getTreeItem(u);c.collapsibleState=2,a=u}else break}if(s){let u=await this.getTreeItem(e);if(u.collapsibleState==0)return;if(u.collapsibleState=2,typeof s=="number"&&s>1){let c=Math.min(s,2),h=await Promise.resolve(this.provider.getChildren(e));for(;(h==null?void 0:h.length)>0;){let d=[];for(let g of h){let p=await this.getTreeItem(g);if(p.collapsibleState!=0&&(p.collapsibleState=2,c>1)){let f=await Promise.resolve(this.provider.getChildren(g));d.push(...f)}}h=d,c=c-1}}}(!i||s)&&await this.render(),r!==!1&&this.selectItem(e),o&&this.focusItem(e)}updateHeadLines(e=!1){let{titleCount:t,messageCount:i}=this.lineState,r=e?-1:t+i,o=[],s=[];try{if(this.message&&(s.push({hlGroup:"MoreMsg",colStart:0,colEnd:Q(this.message),lnum:0}),o.push(this.message),o.push("")),this.title){if(s.push({hlGroup:"CocTreeTitle",colStart:0,colEnd:Q(this.title),lnum:o.length}),this.description){let a=Q(this.title)+1;s.push({hlGroup:"Comment",colStart:a,colEnd:a+Q(this.description),lnum:o.length})}o.push(this.title+(this.description?" "+this.description:""))}this.lineState.messageCount=this.message?2:0,this.lineState.titleCount=this.title?1:0,this.updateUI(o,s,0,r),e||this.refreshSigns()}catch(a){this.nvim.echoError(a)}}refreshSigns(){let{selection:e,nvim:t,bufnr:i}=this;if(!e.length||!i||!v.env.sign)return;let r=t.createBuffer(i);t.pauseNotification(),r.unplaceSign({group:"CocTree"});for(let o of e){let s=this.getItemLnum(o);s!=null&&r.placeSign({id:E_+s,lnum:s+1,name:"CocTreeSelected",group:"CocTree"})}t.resumeNotification(!1,!0)}async render(){if(!this.bufnr)return;let e=await this.mutex.acquire();try{let t=[],i=[],{startLnum:r}=this,o=await Promise.resolve(this.provider.getChildren()),s=0,a=r,l=[];if(!(o!=null&&o.length))this.message="No results";else{this.message=="No results"&&(this.message="");for(let c of o)a+=await this.appendTreeNode(c,s,a,l,i)}t.push(...l.map(c=>c.line)),this.renderedItems=l;let u=this.startLnum-r;u&&i.forEach(c=>c.lnum=c.lnum+u),this.updateUI(t,i,this.startLnum,-1),this._onDidRefrash.fire(),this.retryTimers=0,e()}catch(t){this.renderedItems=[],this.nodesMap.clear(),this.lineState={titleCount:0,messageCount:1},e();let i=`${t}`.replace(/\r?\n/g," ");if(this.updateUI([i],[{hlGroup:"WarningMsg",colStart:0,colEnd:Q(i),lnum:0}]),this.retryTimers==5)return;this.timer=setTimeout(()=>{this.retryTimers=this.retryTimers+1,this.render()},500)}}async show(e="belowright 30vs"){if(this._creating)return!1;this._creating=!0;let{nvim:t}=this,i=this.winid,[r,o,s,a]=await t.eval(`[bufnr("%"),win_getid(),tabpagenr(),bufloaded(${this.bufnr||-1})]`);this._targetBufnr=r,this._targetWinId=o,this._targetTabId=D.getTabId(s),a||(this.bufnr=void 0);let l=this.bufnr==null,u=await t.call("coc#window#find",["cocViewId",this.viewId]);if(this.bufnr&&u!==-1&&await t.call("winbufnr",[u])==this.bufnr){this._creating=!1;return}if(t.pauseNotification(),this.bufnr)u!=-1?(t.call("win_gotoid",[u],!0),t.command(`b ${this.bufnr}`,!0)):t.command(`silent keepalt ${e} ${this.bufname}`,!0);else{let d=R_;R_=R_+1,u!=-1?(t.call("win_gotoid",[u],!0),t.command(`silent edit +setl\\ buftype=nofile CocTree${d}`,!0)):t.command(`silent keepalt ${e} +setl\\ buftype=nofile CocTree${d}`,!0)}t.command(`setl bufhidden=${this.opts.bufhidden||"wipe"} nolist nonumber norelativenumber foldcolumn=0`,!0),t.command(`setl signcolumn=${this.opts.canSelectMany?"yes":"no"}${this.winfixwidth?" winfixwidth":""}`,!0),t.command("setl nocursorline nobuflisted wrap undolevels=-1 filetype=coctree nomodifiable noswapfile",!0),t.command(`let w:cocViewId = "${this.viewId.replace(/"/g,'\\"')}"`,!0),t.call("bufname",["%"],!0),t.call("bufnr",["%"],!0),t.call("win_getid",[],!0);let h=(await t.resumeNotification())[0];return this.bufname=h[h.length-3],this.bufnr=h[h.length-2],this.winid=h[h.length-1],l&&this.registerKeymaps(),i||this._onDidChangeVisibility.fire({visible:!0}),i&&i!==this.winid&&t.call("coc#window#close",[i],!0),this._creating=!1,this.updateHeadLines(!0),this.render(),!0}registerLocalKeymap(e,t,i,r=!1){this.bufnr?this.disposables.push(v.registerLocalKeymap(e,t,async()=>{let o=await this.nvim.call("line",["."]),s=this.getElementByLnum(o-1);await Promise.resolve(i(s))},r)):this._keymapDefs.push({mode:e,key:t,fn:i,notify:r})}registerKeymaps(){let{toggleSelection:e,actions:t,close:i,invoke:r,toggle:o,collapseAll:s,activeFilter:a}=this.keys,{nvim:l,_keymapDefs:u}=this,c=(h,d,g,p=!0)=>{!d||v.registerLocalKeymap(h,d,async()=>{let f=await this.nvim.call("line",["."]),m=this.getElementByLnum(f-1);await Promise.resolve(g(m))},p)};for(this.disposables.push(v.registerLocalKeymap("n","",()=>{l.call("win_gotoid",[this._targetWinId],!0)},!0)),c("n","",async h=>{h&&await this.onClick(h)}),this.filter&&c("n",a,async()=>{this.nvim.command(`exe ${this.startLnum}`,!0),this.filter.active(),this.filterText="",this._onDidFilterStateChange.fire(!0)}),c("n",e,h=>this.toggleSelection(h)),c("n",r,h=>this.invokeCommand(h)),c("n",t,h=>this.invokeActions(h)),c("n",o,h=>this.toggleExpand(h)),c("n",s,()=>this.collapseAll()),c("n",i,()=>this.hide());u.length;){let h=u.pop();c(h.mode,h.key,h.fn,h.notify)}}hide(){this.nvim.call("coc#window#close",[this.winid],!0),this.redraw(),this.winid=void 0,this._onDidChangeVisibility.fire({visible:!1})}redraw(){var e;(v.isVim||((e=this.filter)==null?void 0:e.activated))&&this.nvim.command("redraw",!0)}async collapseAll(){for(let e of this.nodesMap.values()){let t=e.item;t.collapsibleState==2&&(t.collapsibleState=1)}await this.render()}cancelResolve(){this.resolveTokenSource&&(this.resolveTokenSource.cancel(),this.resolveTokenSource=void 0)}dispose(){var t;if(!this.provider)return;this.timer&&clearTimeout(this.timer),this.cancelResolve();let{bufnr:e}=this;this.winid&&this._onDidChangeVisibility.fire({visible:!1}),e&&this.nvim.command(`silent! bwipeout! ${e}`,!0),this._keymapDefs=[],this.winid=void 0,this.bufnr=void 0,(t=this.filter)==null||t.dispose(),this._selection=[],this.itemsToFilter=[],this.tooltipFactory.dispose(),this.renderedItems=[],this.nodesMap.clear(),this.provider=void 0,this._onDispose.fire(),this._onDispose.dispose(),U(this.disposables)}}});function __(n,e){if(Fh.Location.is(e)){let{range:t,uri:i}=e;if(n.find(r=>r.uri==i&&ye(r.range,t))!=null)return;n.push(e)}else if(e&&typeof e.targetUri=="string"){let{targetUri:t,targetSelectionRange:i,targetRange:r}=e;if(n.find(o=>o.uri==t&&ye(o.range,i))!=null)return;n.push({uri:t,range:i,targetRange:r})}}var Fh,mwe,pe,dt=k(()=>{"use strict";Fh=S(W());et();ie();mwe=q()("provider-manager"),pe=class{constructor(){this.providers=new Set}hasProvider(e){return this.getProvider(e)!=null}addProvider(e){return this.providers.add(e),Fh.Disposable.create(()=>{this.providers.delete(e)})}handleResults(e,t){e.forEach(i=>{i.status==="rejected"&&mwe.error(`Provider error on ${t}:`,i.reason)})}getProvider(e){let t=0,i;for(let r of this.providers){let{selector:o,priority:s}=r,a=v.match(o,e);a!=0&&(typeof s=="number"&&s>0&&(a=a+s),!(ai.id==e);return t?t.provider:null}getProviders(e){let t=Array.from(this.providers);return t=t.filter(i=>v.match(i.selector,e)>0),t.sort((i,r)=>v.match(r.selector,e)-v.match(i.selector,e))}addLocation(e,t){if(Array.isArray(t))for(let i of t)(Fh.Location.is(i)||i&&typeof i.targetUri=="string")&&__(e,i);else Fh.Location.is(t)&&__(e,t)}}});var wf,JX=k(()=>{"use strict";qe();dt();wf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async prepareCallHierarchy(e,t,i){let r=this.getProvider(e);if(!r)return null;let{provider:o}=r;return await Promise.resolve(o.prepareCallHierarchy(e,t,i))}async provideCallHierarchyOutgoingCalls(e,t,i){let r=this.getProvider(e);if(!r)return null;let{provider:o}=r;return await Promise.resolve(o.provideCallHierarchyOutgoingCalls(t,i))}async provideCallHierarchyIncomingCalls(e,t,i){let r=this.getProvider(e);if(!r)return null;let{provider:o}=r;return await Promise.resolve(o.provideCallHierarchyIncomingCalls(t,i))}}});function UX(n,...e){return n=Object(n),e.forEach(t=>{if(t!=null){t=Object(t);for(let i in t){let r=n[i];(r===void 0||r===$X[i]&&!bwe.call(n,i))&&(n[i]=t[i])}}}),n}function fn(n,e){let t={};for(let i of Object.keys(n))e.includes(i)||(t[i]=n[i]);return t}var $X,bwe,Cs=k(()=>{"use strict";$X=Object.prototype,bwe=$X.hasOwnProperty});var XX,$Ae,xf,GX=k(()=>{"use strict";qe();XX=S(W());nt();Cs();dt();$Ae=q()("codeActionManager"),xf=class extends pe{register(e,t,i,r){return this.addProvider({id:oe(),selector:e,provider:t,kinds:r,clientId:i})}async provideCodeActions(e,t,i,r){let o=this.getProviders(e);if(i.only&&o.length>0){let{only:l}=i;o=o.filter(u=>!(Array.isArray(u.kinds)&&!u.kinds.some(c=>l.includes(c))))}let s=[],a=await Promise.allSettled(o.map(l=>{let{provider:u,id:c}=l;return(async()=>{let d=await Promise.resolve(u.provideCodeActions(e,t,i,r));if(Je(d))return;let g=s.length===0;for(let p of d)if(XX.Command.is(p)){let f={title:p.title,command:p,providerId:c};s.push(f)}else{if(i.only&&i.only.length>0&&!i.only.some(m=>{var b;return(b=p.kind)==null?void 0:b.startsWith(m)}))continue;(g||s.findIndex(f=>f.title==p.title)===-1)&&s.push(Object.assign({providerId:c},p))}})()}));return this.handleResults(a,"provideCodeActions"),s}async resolveCodeAction(e,t){if(e.edit!=null||e.providerId==null)return e;let i=this.getProviderById(e.providerId);return!i||typeof i.resolveCodeAction!="function"?e:await Promise.resolve(i.resolveCodeAction(fn(e,["providerId"]),t))??e}}});var Cf,zX=k(()=>{"use strict";qe();Cs();dt();Cf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideCodeLenses(e,t){let i=this.getProviders(e),r=[],o=await Promise.allSettled(i.map(s=>{let{provider:a,id:l}=s;return Promise.resolve(a.provideCodeLenses(e,t)).then(u=>{if(Array.isArray(u))for(let c of u)r.push(Object.assign({source:l},c))})}));return this.handleResults(o,"provideCodeLenses"),r}async resolveCodeLens(e,t){if(e.command)return e;let i=this.getProviderById(e.source);if(!i||typeof i.resolveCodeLens!="function")return e;let r=await Promise.resolve(i.resolveCodeLens(fn(e,["source"]),t));return Object.assign(e,r),e}}});var eNe,Sf,KX=k(()=>{"use strict";qe();dt();eNe=q()("definitionManager"),Sf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideDeclaration(e,t,i){let r=this.getProviders(e),o=[],s=await Promise.allSettled(r.map(a=>Promise.resolve(a.provider.provideDeclaration(e,t,i)).then(l=>{this.addLocation(o,l)})));return this.handleResults(s,"provideDeclaration"),o}}});var QX,uNe,Df,VX=k(()=>{"use strict";qe();QX=S(W());dt();uNe=q()("definitionManager"),Df=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideDefinition(e,t,i){let r=this.getProviders(e),o=[],s=await Promise.allSettled(r.map(a=>Promise.resolve(a.provider.provideDefinition(e,t,i)).then(l=>{this.addLocation(o,l)})));return this.handleResults(s,"provideDefinition"),o}async provideDefinitionLinks(e,t,i){let r=this.getProviders(e),o=[],s=await Promise.allSettled(r.map(a=>Promise.resolve(a.provider.provideDefinition(e,t,i)).then(l=>{Array.isArray(l)&&l.forEach(u=>{QX.LocationLink.is(u)&&o.push(u)})})));return this.handleResults(s,"provideDefinition"),o}}});var Tf,e2=k(()=>{"use strict";qe();et();dt();Tf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideDocumentColors(e,t){let i=this.getProviders(e),r=[],o=await Promise.allSettled(i.map(s=>{let{id:a}=s;return Promise.resolve(s.provider.provideDocumentColors(e,t)).then(l=>{let u=r.length==0;if(Array.isArray(l))for(let c of l)(u||!r.some(h=>ye(h.range,c.range)))&&r.push(Object.assign({source:a},c))})}));return this.handleResults(o,"provideDefinition"),r}async provideColorPresentations(e,t,i){let r=this.getProviderById(e.source);if(!r)return null;let{range:o,color:s}=e;return await Promise.resolve(r.provideColorPresentations(s,{document:t,range:o},i))}}});var kf,t2=k(()=>{"use strict";qe();dt();kf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideDocumentHighlights(e,t,i){let r=this.getProviders(e),o=null;for(let s of r)try{if(o=await Promise.resolve(s.provider.provideDocumentHighlights(e,t,i)),o!=null)break}catch(a){this.handleResults([{status:"rejected",reason:a}],"provideDocumentHighlights")}return o}}});var Pf,i2=k(()=>{"use strict";qe();Cs();et();dt();Pf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideDocumentLinks(e,t){let i=this.getProviders(e);if(i.length==0)return null;let r=[],o=await Promise.allSettled(i.map(s=>{let{id:a,provider:l}=s;return Promise.resolve(l.provideDocumentLinks(e,t)).then(u=>{Array.isArray(u)&&u.forEach(c=>{r.some(h=>ye(h.range,c.range))||r.push(Object.assign({source:a},c))})})}));return this.handleResults(o,"provideDocumentLinks"),r}async resolveDocumentLink(e,t){let i=this.getProviderById(e.source);if(typeof i.resolveDocumentLink=="function"){let r=await Promise.resolve(i.resolveDocumentLink(fn(e,["source"]),t));r&&Object.assign(e,r)}return e}}});var Ef,n2=k(()=>{"use strict";qe();dt();Ef=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}getMetaData(e){let t=this.getProvider(e);return t?t.provider.meta??{}:null}async provideDocumentSymbols(e,t){let i=this.getProvider(e);if(!i)return null;let{provider:r}=i;return await Promise.resolve(r.provideDocumentSymbols(e,t))??[]}}});function r2(n,e){for(let t of e)if(n>=t.startLine){if(n<=t.endLine)return t;continue}else break}var Rf,o2=k(()=>{"use strict";qe();dt();Rf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideFoldingRanges(e,t,i){let r=this.getProviders(e),o=[],s=await Promise.allSettled(r.map(a=>Promise.resolve(a.provider.provideFoldingRanges(e,t,i)).then(l=>{if(Array.isArray(l)&&l.length>0){if(o.length==0)o.push(...l);else for(let u of l){let c=r2(u.startLine,o);if((c==null?void 0:c.startLine)===u.startLine)continue;let h=r2(u.endLine,o);c===h&&o.push(u)}o.sort((u,c)=>u.startLine-c.startLine)}})));return this.handleResults(s,"provideFoldingRanges"),o}}});var _f,s2=k(()=>{"use strict";qe();dt();_f=class extends pe{register(e,t,i){return this.addProvider({id:oe(),selector:e,priority:i,provider:t})}async provideDocumentFormattingEdits(e,t,i){let r=this.getProvider(e);if(!r)return null;let{provider:o}=r;return await Promise.resolve(o.provideDocumentFormattingEdits(e,t,i))}}});var Lf,a2=k(()=>{"use strict";qe();dt();Lf=class extends pe{register(e,t,i){return this.addProvider({id:oe(),selector:e,provider:t,priority:i})}async provideDocumentRangeFormattingEdits(e,t,i,r){let o=this.getProvider(e);if(!o)return null;let{provider:s}=o;return await Promise.resolve(s.provideDocumentRangeFormattingEdits(e,t,i,r))}}});var l2,If,u2=k(()=>{"use strict";qe();l2=S(W());et();dt();If=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideHover(e,t,i){let r=this.getProviders(e),o=[],s=await Promise.allSettled(r.map(a=>Promise.resolve(a.provider.provideHover(e,t,i)).then(l=>{!l2.Hover.is(l)||o.findIndex(u=>ye(u.contents,l.contents))==-1&&o.push(l)})));return this.handleResults(s,"provideHover"),o}}});var Ff,c2=k(()=>{"use strict";qe();dt();Ff=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideImplementations(e,t,i){let r=this.getProviders(e),o=[],s=await Promise.allSettled(r.map(a=>Promise.resolve(a.provider.provideImplementation(e,t,i)).then(l=>{this.addLocation(o,l)})));return this.handleResults(s,"provideImplementations"),o}}});function ywe(n,e){return Me(n.position,e.position)!==0?!1:Mf(n)===Mf(e)}function vwe(n){return!n||!d2.Position.is(n.position)||n.label==null?!1:typeof n.label!="string"?Array.isArray(n.label)&&n.label.every(e=>typeof e.value=="string"):!0}function wwe(n,e){return n.label.length===0||Array.isArray(n.label)&&n.label.every(t=>t.value.length===0)?(h2.warn("INVALID inlay hint, empty label",n),!1):vwe(n)?!(e&&ft(n.position,e)!==0):(h2.warn("INVALID inlay hint",n),!1)}function Mf(n){return typeof n.label=="string"?n.label:n.label.map(e=>e.value).join("")}var d2,h2,jf,L_=k(()=>{"use strict";qe();d2=S(W());xt();dt();h2=q()("inlayHintManger"),jf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideInlayHints(e,t,i){let r=this.getProviders(e),o=[];return await Promise.all(r.map(s=>{let{id:a,provider:l}=s;return Promise.resolve(l.provideInlayHints(e,t,i)).then(u=>{if(!Array.isArray(u)||i.isCancellationRequested)return;let c=o.length==0;for(let h of u)!wwe(h,t)||!c&&o.findIndex(d=>ywe(d,h))!=-1||o.push({providerId:a,...h})})})),o}async resolveInlayHint(e,t){let i=this.getProviderById(e.providerId);if(!i||typeof i.resolveInlayHint!="function"||e.resolved===!0)return e;let r=await Promise.resolve(i.resolveInlayHint(e,t));return t.isCancellationRequested?e:Object.assign(e,r,{resolved:!0})}}});var Of,g2=k(()=>{"use strict";qe();et();dt();Of=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideInlineValues(e,t,i,r){let o=this.getProviders(e),s=[],a=await Promise.allSettled(o.map(l=>Promise.resolve(l.provider.provideInlineValues(e,t,i,r)).then(u=>{if(!Array.isArray(u))return;let c=s.length===0;for(let h of u)(c||s.every(d=>!ye(d,h)))&&s.push(h)})));return this.handleResults(a,"provideInlineValues"),s}}});var xwe,Af,p2=k(()=>{"use strict";qe();dt();xwe=q()("linkedEditingManager"),Af=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideLinkedEditingRanges(e,t,i){let r=this.getProviders(e);for(let o of r){let s;try{if(s=await Promise.resolve(o.provider.provideLinkedEditingRanges(e,t,i)),s!=null)return s}catch(a){xwe.error("Error on provideLinkedEditingRanges: ",a)}}return null}}});var hHe,Nf,f2=k(()=>{"use strict";qe();ie();dt();hHe=q()("onTypeFormatManager"),Nf=class extends pe{register(e,t,i){return this.addProvider({id:oe(),selector:e,provider:t,triggerCharacters:i??[]})}couldTrigger(e,t){for(let i of this.providers){let{triggerCharacters:r,selector:o}=i;if(v.match(o,e)>0&&r.includes(t))return i.provider}return null}async onCharacterType(e,t,i,r){let s=this.getProviders(t).find(l=>l.triggerCharacters.includes(e));if(!s)return null;let a=await v.getFormatOptions(t.uri);return await Promise.resolve(s.provider.provideOnTypeFormattingEdits(t,i,e,a,r))}}});var Hf,m2=k(()=>{"use strict";qe();dt();Hf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideReferences(e,t,i,r){let o=this.getProviders(e),s=[],a=await Promise.allSettled(o.map(l=>Promise.resolve(l.provider.provideReferences(e,t,i,r)).then(u=>{this.addLocation(s,u)})));return this.handleResults(a,"provideReferences"),s}}});var qf,b2=k(()=>{"use strict";qe();dt();qf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideRenameEdits(e,t,i,r){let o=this.getProviders(e),s=null;for(let a of o){try{s=await Promise.resolve(a.provider.provideRenameEdits(e,t,i,r))}catch(l){this.handleResults([{status:"rejected",reason:l}],"provideRenameEdits")}if(s!=null)break}return s}async prepareRename(e,t,i){let r=this.getProviders(e);if(r=r.filter(o=>typeof o.provider.prepareRename=="function"),r.length===0)return null;for(let o of r){let s=await Promise.resolve(o.provider.prepareRename(e,t,i));if(s!=null)return s}return!1}}});var Bf,y2=k(()=>{"use strict";qe();et();xt();dt();Bf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideSelectionRanges(e,t,i){let r=this.getProviders(e);if(r.length===0)return null;let o=[],s=await Promise.allSettled(r.map(l=>Promise.resolve(l.provider.provideSelectionRanges(e,t,i)).then(u=>{Array.isArray(u)&&u.length>0&&o.push(u)})));if(this.handleResults(s,"provideSelectionRanges"),o.length===0)return null;let a=o[0];if(o.length>1)for(let l=1;l<=o.length-1;l++){let u=a[0].range,c=a[a.length-1].range,h=o[l],d=h.length;Xt(c,h[0].range)&&!ye(c,h[0].range)?a.push(...h):Xt(h[d-1].range,u)&&!ye(h[d-1].range,u)&&a.unshift(...h)}for(let l=0;l{"use strict";qe();dt();kHe=q()("semanticTokensManager"),Wf=class extends pe{register(e,t,i){return this.addProvider({id:oe(),selector:e,provider:t,legend:i})}getLegend(e){let t=this.getProvider(e);if(!!t)return t.legend}hasSemanticTokensEdits(e){var i;let t=(i=this.getProvider(e))==null?void 0:i.provider;return t?typeof t.provideDocumentSemanticTokensEdits=="function":!1}async provideDocumentSemanticTokens(e,t){var r;let i=(r=this.getProvider(e))==null?void 0:r.provider;return!i||typeof i.provideDocumentSemanticTokens!="function"?null:await Promise.resolve(i.provideDocumentSemanticTokens(e,t))}async provideDocumentSemanticTokensEdits(e,t,i){let r=this.getProvider(e);return!r||typeof r.provider.provideDocumentSemanticTokensEdits!="function"?null:await Promise.resolve(r.provider.provideDocumentSemanticTokensEdits(e,t,i))}}});var _He,Yf,w2=k(()=>{"use strict";qe();dt();_He=q()("semanticTokensRangeManager"),Yf=class extends pe{register(e,t,i){return this.addProvider({id:oe(),selector:e,legend:i,provider:t})}getLegend(e){let t=this.getProvider(e);if(!!t)return t.legend}async provideDocumentRangeSemanticTokens(e,t,i){let r=this.getProvider(e);if(!r)return null;let{provider:o}=r;return await Promise.resolve(o.provideDocumentRangeSemanticTokens(e,t,i))}}});var Zf,x2=k(()=>{"use strict";qe();nt();dt();Zf=class extends pe{register(e,t,i){i=Je(i)?[]:i;let r=i.reduce((o,s)=>o.concat(s.length==1?[s]:s.split(/\s*/g)),[]);return this.addProvider({id:oe(),selector:e,provider:t,triggerCharacters:r})}shouldTrigger(e,t){let i=this.getProviders(e);if(i.length===0)return!1;for(let r of i)if(r.triggerCharacters.includes(t))return!0;return!1}async provideSignatureHelp(e,t,i,r){let o=this.getProviders(e);for(let s of o){let a=await Promise.resolve(s.provider.provideSignatureHelp(e,t,i,r));if(a&&a.signatures&&a.signatures.length>0)return a}return null}}});var Jf,C2=k(()=>{"use strict";qe();dt();Jf=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async provideTypeDefinition(e,t,i){let r=this.getProviders(e),o=[],s=await Promise.allSettled(r.map(a=>Promise.resolve(a.provider.provideTypeDefinition(e,t,i)).then(l=>{this.addLocation(o,l)})));return this.handleResults(s,"provideTypeDefinition"),o}}});var $f,S2=k(()=>{"use strict";qe();dt();$f=class extends pe{register(e,t){return this.addProvider({id:oe(),selector:e,provider:t})}async prepareTypeHierarchy(e,t,i){let r=this.getProviders(e),o=[],s=await Promise.allSettled(r.map(a=>{let{provider:l,id:u}=a;return Promise.resolve(l.prepareTypeHierarchy(e,t,i)).then(c=>{if(Array.isArray(c)){let h=o.length===0;c.forEach(d=>{(h||o.every(g=>g.name!==d.name))&&o.push(Object.assign({source:u},d))})}})}));return this.handleResults(s,"prepareTypeHierarchy"),o}async provideTypeHierarchySupertypes(e,t){let{source:i}=e,r=this.getProviderById(i);return r?await Promise.resolve(r.provideTypeHierarchySupertypes(e,t)).then(o=>Array.isArray(o)?o.map(s=>Object.assign({source:i},s)):[]):[]}async provideTypeHierarchySubtypes(e,t){let{source:i}=e,r=this.getProviderById(i);return r?await Promise.resolve(r.provideTypeHierarchySubtypes(e,t)).then(o=>Array.isArray(o)?o.map(s=>Object.assign({source:i},s)):[]):[]}}});var Uf,D2=k(()=>{"use strict";qe();dt();Uf=class extends pe{register(e){return this.addProvider({id:oe(),selector:[{language:"*"}],provider:e})}async provideWorkspaceSymbols(e,t){let i=Array.from(this.providers),r=[],o=await Promise.allSettled(i.map(s=>{let{id:a,provider:l}=s;return Promise.resolve(l.provideWorkspaceSymbols(e,t)).then(u=>{u&&r.push(...u.map(c=>Object.assign({source:a},c)))})}));return this.handleResults(o,"provideWorkspaceSymbols"),r}async resolveWorkspaceSymbol(e,t){let i=this.getProviderById(e.source);return!i||typeof i.resolveWorkspaceSymbol!="function"?e:i.resolveWorkspaceSymbol(e,t)}hasProvider(){return this.providers.size>0}}});var P2=y((I_,k2)=>{var Bx=require("buffer"),Ss=Bx.Buffer;function T2(n,e){for(var t in n)e[t]=n[t]}Ss.from&&Ss.alloc&&Ss.allocUnsafe&&Ss.allocUnsafeSlow?k2.exports=Bx:(T2(Bx,I_),I_.Buffer=jh);function jh(n,e,t){return Ss(n,e,t)}T2(Ss,jh);jh.from=function(n,e,t){if(typeof n=="number")throw new TypeError("Argument must not be a number");return Ss(n,e,t)};jh.alloc=function(n,e,t){if(typeof n!="number")throw new TypeError("Argument must be a number");var i=Ss(n);return e!==void 0?typeof t=="string"?i.fill(e,t):i.fill(e):i.fill(0),i};jh.allocUnsafe=function(n){if(typeof n!="number")throw new TypeError("Argument must be a number");return Ss(n)};jh.allocUnsafeSlow=function(n){if(typeof n!="number")throw new TypeError("Argument must be a number");return Bx.SlowBuffer(n)}});var F2=y((JHe,F_)=>{"use strict";F_.exports=Iwe;F_.exports.parse=Owe;var E2=require("path").basename,Cwe=P2().Buffer,Swe=/[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g,Dwe=/%[0-9A-Fa-f]{2}/,Twe=/%([0-9A-Fa-f]{2})/g,_2=/[^\x20-\x7e\xa0-\xff]/g,kwe=/\\([\u0000-\u007f])/g,Pwe=/([\\"])/g,R2=/;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g,Ewe=/^[\x20-\x7e\x80-\xff]+$/,Rwe=/^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/,_we=/^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/,Lwe=/^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/;function Iwe(n,e){var t=e||{},i=t.type||"attachment",r=Fwe(n,t.fallback);return jwe(new I2(i,r))}function Fwe(n,e){if(n!==void 0){var t={};if(typeof n!="string")throw new TypeError("filename must be a string");if(e===void 0&&(e=!0),typeof e!="string"&&typeof e!="boolean")throw new TypeError("fallback must be a string or boolean");if(typeof e=="string"&&_2.test(e))throw new TypeError("fallback must be ISO-8859-1 string");var i=E2(n),r=Ewe.test(i),o=typeof e!="string"?e&&L2(i):E2(e),s=typeof o=="string"&&o!==i;return(s||!r||Dwe.test(i))&&(t["filename*"]=i),(r||s)&&(t.filename=s?o:i),t}}function jwe(n){var e=n.parameters,t=n.type;if(!t||typeof t!="string"||!Rwe.test(t))throw new TypeError("invalid type");var i=String(t).toLowerCase();if(e&&typeof e=="object")for(var r,o=Object.keys(e).sort(),s=0;s{"use strict";var j2=new Map([["C","cwd"],["f","file"],["z","gzip"],["P","preservePaths"],["U","unlink"],["strip-components","strip"],["stripComponents","strip"],["keep-newer","newer"],["keepNewer","newer"],["keep-newer-files","newer"],["keepNewerFiles","newer"],["k","keep"],["keep-existing","keep"],["keepExisting","keep"],["m","noMtime"],["no-mtime","noMtime"],["p","preserveOwner"],["L","follow"],["h","follow"]]);M2.exports=n=>n?Object.keys(n).map(e=>[j2.has(e)?j2.get(e):e,n[e]]).reduce((e,t)=>(e[t[0]]=t[1],e),Object.create(null)):{}});var Oh=y((UHe,Z2)=>{"use strict";var Bwe=require("events"),O2=require("stream"),Xf=Kp(),A2=require("string_decoder").StringDecoder,Ds=Symbol("EOF"),Gf=Symbol("maybeEmitEnd"),Oa=Symbol("emittedEnd"),Wx=Symbol("emittingEnd"),Yx=Symbol("closed"),N2=Symbol("read"),j_=Symbol("flush"),H2=Symbol("flushChunk"),An=Symbol("encoding"),Ts=Symbol("decoder"),Zx=Symbol("flowing"),zf=Symbol("paused"),Kf=Symbol("resume"),mn=Symbol("bufferLength"),q2=Symbol("bufferPush"),M_=Symbol("bufferShift"),Vi=Symbol("objectMode"),en=Symbol("destroyed"),W2=global._MP_NO_ITERATOR_SYMBOLS_!=="1",Wwe=W2&&Symbol.asyncIterator||Symbol("asyncIterator not implemented"),Ywe=W2&&Symbol.iterator||Symbol("iterator not implemented"),B2=n=>n==="end"||n==="finish"||n==="prefinish",Zwe=n=>n instanceof ArrayBuffer||typeof n=="object"&&n.constructor&&n.constructor.name==="ArrayBuffer"&&n.byteLength>=0,Jwe=n=>!Buffer.isBuffer(n)&&ArrayBuffer.isView(n);Z2.exports=class Y2 extends O2{constructor(e){super(),this[Zx]=!1,this[zf]=!1,this.pipes=new Xf,this.buffer=new Xf,this[Vi]=e&&e.objectMode||!1,this[Vi]?this[An]=null:this[An]=e&&e.encoding||null,this[An]==="buffer"&&(this[An]=null),this[Ts]=this[An]?new A2(this[An]):null,this[Ds]=!1,this[Oa]=!1,this[Wx]=!1,this[Yx]=!1,this.writable=!0,this.readable=!0,this[mn]=0,this[en]=!1}get bufferLength(){return this[mn]}get encoding(){return this[An]}set encoding(e){if(this[Vi])throw new Error("cannot set encoding in objectMode");if(this[An]&&e!==this[An]&&(this[Ts]&&this[Ts].lastNeed||this[mn]))throw new Error("cannot change encoding");this[An]!==e&&(this[Ts]=e?new A2(e):null,this.buffer.length&&(this.buffer=this.buffer.map(t=>this[Ts].write(t)))),this[An]=e}setEncoding(e){this.encoding=e}get objectMode(){return this[Vi]}set objectMode(e){this[Vi]=this[Vi]||!!e}write(e,t,i){if(this[Ds])throw new Error("write after end");return this[en]?(this.emit("error",Object.assign(new Error("Cannot call write after a stream was destroyed"),{code:"ERR_STREAM_DESTROYED"})),!0):(typeof t=="function"&&(i=t,t="utf8"),t||(t="utf8"),!this[Vi]&&!Buffer.isBuffer(e)&&(Jwe(e)?e=Buffer.from(e.buffer,e.byteOffset,e.byteLength):Zwe(e)?e=Buffer.from(e):typeof e!="string"&&(this.objectMode=!0)),!this.objectMode&&!e.length?(this[mn]!==0&&this.emit("readable"),i&&i(),this.flowing):(typeof e=="string"&&!this[Vi]&&!(t===this[An]&&!this[Ts].lastNeed)&&(e=Buffer.from(e,t)),Buffer.isBuffer(e)&&this[An]&&(e=this[Ts].write(e)),this.flowing?(this[mn]!==0&&this[j_](!0),this.emit("data",e)):this[q2](e),this[mn]!==0&&this.emit("readable"),i&&i(),this.flowing))}read(e){if(this[en])return null;try{return this[mn]===0||e===0||e>this[mn]?null:(this[Vi]&&(e=null),this.buffer.length>1&&!this[Vi]&&(this.encoding?this.buffer=new Xf([Array.from(this.buffer).join("")]):this.buffer=new Xf([Buffer.concat(Array.from(this.buffer),this[mn])])),this[N2](e||null,this.buffer.head.value))}finally{this[Gf]()}}[N2](e,t){return e===t.length||e===null?this[M_]():(this.buffer.head.value=t.slice(e),t=t.slice(0,e),this[mn]-=e),this.emit("data",t),!this.buffer.length&&!this[Ds]&&this.emit("drain"),t}end(e,t,i){return typeof e=="function"&&(i=e,e=null),typeof t=="function"&&(i=t,t="utf8"),e&&this.write(e,t),i&&this.once("end",i),this[Ds]=!0,this.writable=!1,(this.flowing||!this[zf])&&this[Gf](),this}[Kf](){this[en]||(this[zf]=!1,this[Zx]=!0,this.emit("resume"),this.buffer.length?this[j_]():this[Ds]?this[Gf]():this.emit("drain"))}resume(){return this[Kf]()}pause(){this[Zx]=!1,this[zf]=!0}get destroyed(){return this[en]}get flowing(){return this[Zx]}get paused(){return this[zf]}[q2](e){return this[Vi]?this[mn]+=1:this[mn]+=e.length,this.buffer.push(e)}[M_](){return this.buffer.length&&(this[Vi]?this[mn]-=1:this[mn]-=this.buffer.head.value.length),this.buffer.shift()}[j_](e){do;while(this[H2](this[M_]()));!e&&!this.buffer.length&&!this[Ds]&&this.emit("drain")}[H2](e){return e?(this.emit("data",e),this.flowing):!1}pipe(e,t){if(this[en])return;let i=this[Oa];t=t||{},e===process.stdout||e===process.stderr?t.end=!1:t.end=t.end!==!1;let r={dest:e,opts:t,ondrain:o=>this[Kf]()};return this.pipes.push(r),e.on("drain",r.ondrain),this[Kf](),i&&r.opts.end&&r.dest.end(),e}addListener(e,t){return this.on(e,t)}on(e,t){try{return super.on(e,t)}finally{e==="data"&&!this.pipes.length&&!this.flowing?this[Kf]():B2(e)&&this[Oa]&&(super.emit(e),this.removeAllListeners(e))}}get emittedEnd(){return this[Oa]}[Gf](){!this[Wx]&&!this[Oa]&&!this[en]&&this.buffer.length===0&&this[Ds]&&(this[Wx]=!0,this.emit("end"),this.emit("prefinish"),this.emit("finish"),this[Yx]&&this.emit("close"),this[Wx]=!1)}emit(e,t){if(e!=="error"&&e!=="close"&&e!==en&&this[en])return;if(e==="data"){if(!t)return;this.pipes.length&&this.pipes.forEach(r=>r.dest.write(t)===!1&&this.pause())}else if(e==="end"){if(this[Oa]===!0)return;this[Oa]=!0,this.readable=!1,this[Ts]&&(t=this[Ts].end(),t&&(this.pipes.forEach(r=>r.dest.write(t)),super.emit("data",t))),this.pipes.forEach(r=>{r.dest.removeListener("drain",r.ondrain),r.opts.end&&r.dest.end()})}else if(e==="close"&&(this[Yx]=!0,!this[Oa]&&!this[en]))return;let i=new Array(arguments.length);if(i[0]=e,i[1]=t,arguments.length>2)for(let r=2;r{e.push(i),this[Vi]||(e.dataLength+=i.length)}),t.then(()=>e)}concat(){return this[Vi]?Promise.reject(new Error("cannot concat in objectMode")):this.collect().then(e=>this[Vi]?Promise.reject(new Error("cannot concat in objectMode")):this[An]?e.join(""):Buffer.concat(e,e.dataLength))}promise(){return new Promise((e,t)=>{this.on(en,()=>t(new Error("stream destroyed"))),this.on("end",()=>e()),this.on("error",i=>t(i))})}[Wwe](){return{next:()=>{let t=this.read();if(t!==null)return Promise.resolve({done:!1,value:t});if(this[Ds])return Promise.resolve({done:!0});let i=null,r=null,o=u=>{this.removeListener("data",s),this.removeListener("end",a),r(u)},s=u=>{this.removeListener("error",o),this.removeListener("end",a),this.pause(),i({value:u,done:!!this[Ds]})},a=()=>{this.removeListener("error",o),this.removeListener("data",s),i({done:!0})},l=()=>o(new Error("stream destroyed"));return new Promise((u,c)=>{r=c,i=u,this.once(en,l),this.once("error",o),this.once("end",a),this.once("data",s)})}}}[Ywe](){return{next:()=>{let t=this.read();return{value:t,done:t===null}}}}destroy(e){return this[en]?(e?this.emit("error",e):this.emit(en),this):(this[en]=!0,this.buffer=new Xf,this[mn]=0,typeof this.close=="function"&&!this[Yx]&&this.close(),e?this.emit("error",e):this.emit(en),this)}static isStream(e){return!!e&&(e instanceof Y2||e instanceof O2||e instanceof Bwe&&(typeof e.pipe=="function"||typeof e.write=="function"&&typeof e.end=="function"))}}});var $2=y((XHe,J2)=>{var $we=require("zlib").constants||{ZLIB_VERNUM:4736};J2.exports=Object.freeze(Object.assign(Object.create(null),{Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_VERSION_ERROR:-6,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,DEFLATE:1,INFLATE:2,GZIP:3,GUNZIP:4,DEFLATERAW:5,INFLATERAW:6,UNZIP:7,BROTLI_DECODE:8,BROTLI_ENCODE:9,Z_MIN_WINDOWBITS:8,Z_MAX_WINDOWBITS:15,Z_DEFAULT_WINDOWBITS:15,Z_MIN_CHUNK:64,Z_MAX_CHUNK:1/0,Z_DEFAULT_CHUNK:16384,Z_MIN_MEMLEVEL:1,Z_MAX_MEMLEVEL:9,Z_DEFAULT_MEMLEVEL:8,Z_MIN_LEVEL:-1,Z_MAX_LEVEL:9,Z_DEFAULT_LEVEL:-1,BROTLI_OPERATION_PROCESS:0,BROTLI_OPERATION_FLUSH:1,BROTLI_OPERATION_FINISH:2,BROTLI_OPERATION_EMIT_METADATA:3,BROTLI_MODE_GENERIC:0,BROTLI_MODE_TEXT:1,BROTLI_MODE_FONT:2,BROTLI_DEFAULT_MODE:0,BROTLI_MIN_QUALITY:0,BROTLI_MAX_QUALITY:11,BROTLI_DEFAULT_QUALITY:11,BROTLI_MIN_WINDOW_BITS:10,BROTLI_MAX_WINDOW_BITS:24,BROTLI_LARGE_MAX_WINDOW_BITS:30,BROTLI_DEFAULT_WINDOW:22,BROTLI_MIN_INPUT_BLOCK_BITS:16,BROTLI_MAX_INPUT_BLOCK_BITS:24,BROTLI_PARAM_MODE:0,BROTLI_PARAM_QUALITY:1,BROTLI_PARAM_LGWIN:2,BROTLI_PARAM_LGBLOCK:3,BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:4,BROTLI_PARAM_SIZE_HINT:5,BROTLI_PARAM_LARGE_WINDOW:6,BROTLI_PARAM_NPOSTFIX:7,BROTLI_PARAM_NDIRECT:8,BROTLI_DECODER_RESULT_ERROR:0,BROTLI_DECODER_RESULT_SUCCESS:1,BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT:2,BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:0,BROTLI_DECODER_PARAM_LARGE_WINDOW:1,BROTLI_DECODER_NO_ERROR:0,BROTLI_DECODER_SUCCESS:1,BROTLI_DECODER_NEEDS_MORE_INPUT:2,BROTLI_DECODER_NEEDS_MORE_OUTPUT:3,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE:-1,BROTLI_DECODER_ERROR_FORMAT_RESERVED:-2,BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE:-3,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET:-4,BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME:-5,BROTLI_DECODER_ERROR_FORMAT_CL_SPACE:-6,BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE:-7,BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT:-8,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1:-9,BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2:-10,BROTLI_DECODER_ERROR_FORMAT_TRANSFORM:-11,BROTLI_DECODER_ERROR_FORMAT_DICTIONARY:-12,BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS:-13,BROTLI_DECODER_ERROR_FORMAT_PADDING_1:-14,BROTLI_DECODER_ERROR_FORMAT_PADDING_2:-15,BROTLI_DECODER_ERROR_FORMAT_DISTANCE:-16,BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET:-19,BROTLI_DECODER_ERROR_INVALID_ARGUMENTS:-20,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES:-21,BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS:-22,BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP:-25,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1:-26,BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2:-27,BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES:-30,BROTLI_DECODER_ERROR_UNREACHABLE:-31},$we))});var K_=y(nr=>{"use strict";var q_=require("assert"),Aa=require("buffer").Buffer,G2=require("zlib"),uu=nr.constants=$2(),Uwe=Oh(),U2=Aa.concat,cu=Symbol("_superWrite"),Nh=class extends Error{constructor(e){super("zlib: "+e.message),this.code=e.code,this.errno=e.errno,this.code||(this.code="ZLIB_ERROR"),this.message="zlib: "+e.message,Error.captureStackTrace(this,this.constructor)}get name(){return"ZlibError"}},Xwe=Symbol("opts"),Qf=Symbol("flushFlag"),X2=Symbol("finishFlushFlag"),z_=Symbol("fullFlushFlag"),Ct=Symbol("handle"),Jx=Symbol("onError"),Ah=Symbol("sawError"),O_=Symbol("level"),A_=Symbol("strategy"),N_=Symbol("ended"),GHe=Symbol("_defaultFullFlush"),$x=class extends Uwe{constructor(e,t){if(!e||typeof e!="object")throw new TypeError("invalid options for ZlibBase constructor");super(e),this[Ah]=!1,this[N_]=!1,this[Xwe]=e,this[Qf]=e.flush,this[X2]=e.finishFlush;try{this[Ct]=new G2[t](e)}catch(i){throw new Nh(i)}this[Jx]=i=>{this[Ah]||(this[Ah]=!0,this.close(),this.emit("error",i))},this[Ct].on("error",i=>this[Jx](new Nh(i))),this.once("end",()=>this.close)}close(){this[Ct]&&(this[Ct].close(),this[Ct]=null,this.emit("close"))}reset(){if(!this[Ah])return q_(this[Ct],"zlib binding closed"),this[Ct].reset()}flush(e){this.ended||(typeof e!="number"&&(e=this[z_]),this.write(Object.assign(Aa.alloc(0),{[Qf]:e})))}end(e,t,i){return e&&this.write(e,t),this.flush(this[X2]),this[N_]=!0,super.end(null,null,i)}get ended(){return this[N_]}write(e,t,i){if(typeof t=="function"&&(i=t,t="utf8"),typeof e=="string"&&(e=Aa.from(e,t)),this[Ah])return;q_(this[Ct],"zlib binding closed");let r=this[Ct]._handle,o=r.close;r.close=()=>{};let s=this[Ct].close;this[Ct].close=()=>{},Aa.concat=u=>u;let a;try{let u=typeof e[Qf]=="number"?e[Qf]:this[Qf];a=this[Ct]._processChunk(e,u),Aa.concat=U2}catch(u){Aa.concat=U2,this[Jx](new Nh(u))}finally{this[Ct]&&(this[Ct]._handle=r,r.close=o,this[Ct].close=s,this[Ct].removeAllListeners("error"))}this[Ct]&&this[Ct].on("error",u=>this[Jx](new Nh(u)));let l;if(a)if(Array.isArray(a)&&a.length>0){l=this[cu](Aa.from(a[0]));for(let u=1;u{this.flush(r),o()};try{this[Ct].params(e,t)}finally{this[Ct].flush=i}this[Ct]&&(this[O_]=e,this[A_]=t)}}}},B_=class extends ks{constructor(e){super(e,"Deflate")}},W_=class extends ks{constructor(e){super(e,"Inflate")}},H_=Symbol("_portable"),Y_=class extends ks{constructor(e){super(e,"Gzip"),this[H_]=e&&!!e.portable}[cu](e){return this[H_]?(this[H_]=!1,e[9]=255,super[cu](e)):super[cu](e)}},Z_=class extends ks{constructor(e){super(e,"Gunzip")}},J_=class extends ks{constructor(e){super(e,"DeflateRaw")}},$_=class extends ks{constructor(e){super(e,"InflateRaw")}},U_=class extends ks{constructor(e){super(e,"Unzip")}},Ux=class extends $x{constructor(e,t){e=e||{},e.flush=e.flush||uu.BROTLI_OPERATION_PROCESS,e.finishFlush=e.finishFlush||uu.BROTLI_OPERATION_FINISH,super(e,t),this[z_]=uu.BROTLI_OPERATION_FLUSH}},X_=class extends Ux{constructor(e){super(e,"BrotliCompress")}},G_=class extends Ux{constructor(e){super(e,"BrotliDecompress")}};nr.Deflate=B_;nr.Inflate=W_;nr.Gzip=Y_;nr.Gunzip=Z_;nr.DeflateRaw=J_;nr.InflateRaw=$_;nr.Unzip=U_;typeof G2.BrotliCompress=="function"?(nr.BrotliCompress=X_,nr.BrotliDecompress=G_):nr.BrotliCompress=nr.BrotliDecompress=class{constructor(){throw new Error("Brotli is not supported in this version of Node.js")}}});var Hh=y((QHe,z2)=>{var Gwe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform;z2.exports=Gwe!=="win32"?n=>n:n=>n&&n.replace(/\\/g,"/")});var Xx=y((eqe,K2)=>{"use strict";var zwe=Oh(),Q_=Hh(),V_=Symbol("slurp");K2.exports=class extends zwe{constructor(e,t,i){switch(super(),this.pause(),this.extended=t,this.globalExtended=i,this.header=e,this.startBlockSize=512*Math.ceil(e.size/512),this.blockRemain=this.startBlockSize,this.remain=e.size,this.type=e.type,this.meta=!1,this.ignore=!1,this.type){case"File":case"OldFile":case"Link":case"SymbolicLink":case"CharacterDevice":case"BlockDevice":case"Directory":case"FIFO":case"ContiguousFile":case"GNUDumpDir":break;case"NextFileHasLongLinkpath":case"NextFileHasLongPath":case"OldGnuLongPath":case"GlobalExtendedHeader":case"ExtendedHeader":case"OldExtendedHeader":this.meta=!0;break;default:this.ignore=!0}this.path=Q_(e.path),this.mode=e.mode,this.mode&&(this.mode=this.mode&4095),this.uid=e.uid,this.gid=e.gid,this.uname=e.uname,this.gname=e.gname,this.size=e.size,this.mtime=e.mtime,this.atime=e.atime,this.ctime=e.ctime,this.linkpath=Q_(e.linkpath),this.uname=e.uname,this.gname=e.gname,t&&this[V_](t),i&&this[V_](i,!0)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error("writing more to entry than is appropriate");let i=this.remain,r=this.blockRemain;return this.remain=Math.max(0,i-t),this.blockRemain=Math.max(0,r-t),this.ignore?!0:i>=t?super.write(e):super.write(e.slice(0,i))}[V_](e,t){for(let i in e)e[i]!==null&&e[i]!==void 0&&!(t&&i==="path")&&(this[i]=i==="path"||i==="linkpath"?Q_(e[i]):e[i])}}});var eL=y(Gx=>{"use strict";Gx.name=new Map([["0","File"],["","OldFile"],["1","Link"],["2","SymbolicLink"],["3","CharacterDevice"],["4","BlockDevice"],["5","Directory"],["6","FIFO"],["7","ContiguousFile"],["g","GlobalExtendedHeader"],["x","ExtendedHeader"],["A","SolarisACL"],["D","GNUDumpDir"],["I","Inode"],["K","NextFileHasLongLinkpath"],["L","NextFileHasLongPath"],["M","ContinuationFile"],["N","OldGnuLongPath"],["S","SparseFile"],["V","TapeVolumeHeader"],["X","OldExtendedHeader"]]);Gx.code=new Map(Array.from(Gx.name).map(n=>[n[1],n[0]]))});var tG=y((iqe,eG)=>{"use strict";var Kwe=(n,e)=>{if(Number.isSafeInteger(n))n<0?Vwe(n,e):Qwe(n,e);else throw Error("cannot encode number outside of javascript safe integer range");return e},Qwe=(n,e)=>{e[0]=128;for(var t=e.length;t>1;t--)e[t-1]=n&255,n=Math.floor(n/256)},Vwe=(n,e)=>{e[0]=255;var t=!1;n=n*-1;for(var i=e.length;i>1;i--){var r=n&255;n=Math.floor(n/256),t?e[i-1]=Q2(r):r===0?e[i-1]=0:(t=!0,e[i-1]=V2(r))}},exe=n=>{let e=n[0],t=e===128?ixe(n.slice(1,n.length)):e===255?txe(n):null;if(t===null)throw Error("invalid base256 encoding");if(!Number.isSafeInteger(t))throw Error("parsed number outside of javascript safe integer range");return t},txe=n=>{for(var e=n.length,t=0,i=!1,r=e-1;r>-1;r--){var o=n[r],s;i?s=Q2(o):o===0?s=o:(i=!0,s=V2(o)),s!==0&&(t-=s*Math.pow(256,e-r-1))}return t},ixe=n=>{for(var e=n.length,t=0,i=e-1;i>-1;i--){var r=n[i];r!==0&&(t+=r*Math.pow(256,e-i-1))}return t},Q2=n=>(255^n)&255,V2=n=>(255^n)+1&255;eG.exports={encode:Kwe,parse:exe}});var Bh=y((nqe,nG)=>{"use strict";var tL=eL(),qh=require("path").posix,iG=tG(),iL=Symbol("slurp"),rr=Symbol("type"),oL=class{constructor(e,t,i,r){this.cksumValid=!1,this.needPax=!1,this.nullBlock=!1,this.block=null,this.path=null,this.mode=null,this.uid=null,this.gid=null,this.size=null,this.mtime=null,this.cksum=null,this[rr]="0",this.linkpath=null,this.uname=null,this.gname=null,this.devmaj=0,this.devmin=0,this.atime=null,this.ctime=null,Buffer.isBuffer(e)?this.decode(e,t||0,i,r):e&&this.set(e)}decode(e,t,i,r){if(t||(t=0),!e||!(e.length>=t+512))throw new Error("need 512 bytes for header");if(this.path=hu(e,t,100),this.mode=Na(e,t+100,8),this.uid=Na(e,t+108,8),this.gid=Na(e,t+116,8),this.size=Na(e,t+124,12),this.mtime=nL(e,t+136,12),this.cksum=Na(e,t+148,12),this[iL](i),this[iL](r,!0),this[rr]=hu(e,t+156,1),this[rr]===""&&(this[rr]="0"),this[rr]==="0"&&this.path.substr(-1)==="/"&&(this[rr]="5"),this[rr]==="5"&&(this.size=0),this.linkpath=hu(e,t+157,100),e.slice(t+257,t+265).toString()==="ustar\x0000")if(this.uname=hu(e,t+265,32),this.gname=hu(e,t+297,32),this.devmaj=Na(e,t+329,8),this.devmin=Na(e,t+337,8),e[t+475]!==0){let s=hu(e,t+345,155);this.path=s+"/"+this.path}else{let s=hu(e,t+345,130);s&&(this.path=s+"/"+this.path),this.atime=nL(e,t+476,12),this.ctime=nL(e,t+488,12)}let o=8*32;for(let s=t;s=t+512))throw new Error("need 512 bytes for header");let i=this.ctime||this.atime?130:155,r=nxe(this.path||"",i),o=r[0],s=r[1];this.needPax=r[2],this.needPax=du(e,t,100,o)||this.needPax,this.needPax=Ha(e,t+100,8,this.mode)||this.needPax,this.needPax=Ha(e,t+108,8,this.uid)||this.needPax,this.needPax=Ha(e,t+116,8,this.gid)||this.needPax,this.needPax=Ha(e,t+124,12,this.size)||this.needPax,this.needPax=rL(e,t+136,12,this.mtime)||this.needPax,e[t+156]=this[rr].charCodeAt(0),this.needPax=du(e,t+157,100,this.linkpath)||this.needPax,e.write("ustar\x0000",t+257,8),this.needPax=du(e,t+265,32,this.uname)||this.needPax,this.needPax=du(e,t+297,32,this.gname)||this.needPax,this.needPax=Ha(e,t+329,8,this.devmaj)||this.needPax,this.needPax=Ha(e,t+337,8,this.devmin)||this.needPax,this.needPax=du(e,t+345,i,s)||this.needPax,e[t+475]!==0?this.needPax=du(e,t+345,155,s)||this.needPax:(this.needPax=du(e,t+345,130,s)||this.needPax,this.needPax=rL(e,t+476,12,this.atime)||this.needPax,this.needPax=rL(e,t+488,12,this.ctime)||this.needPax);let a=8*32;for(let l=t;l{let i=n,r="",o,s=qh.parse(n).root||".";if(Buffer.byteLength(i)<100)o=[i,r,!1];else{r=qh.dirname(i),i=qh.basename(i);do Buffer.byteLength(i)<=100&&Buffer.byteLength(r)<=e?o=[i,r,!1]:Buffer.byteLength(i)>100&&Buffer.byteLength(r)<=e?o=[i.substr(0,100-1),r,!0]:(i=qh.join(qh.basename(r),i),r=qh.dirname(r));while(r!==s&&!o);o||(o=[n.substr(0,100-1),"",!0])}return o},hu=(n,e,t)=>n.slice(e,e+t).toString("utf8").replace(/\0.*/,""),nL=(n,e,t)=>rxe(Na(n,e,t)),rxe=n=>n===null?null:new Date(n*1e3),Na=(n,e,t)=>n[e]&128?iG.parse(n.slice(e,e+t)):sxe(n,e,t),oxe=n=>isNaN(n)?null:n,sxe=(n,e,t)=>oxe(parseInt(n.slice(e,e+t).toString("utf8").replace(/\0.*$/,"").trim(),8)),axe={12:8589934591,8:2097151},Ha=(n,e,t,i)=>i===null?!1:i>axe[t]||i<0?(iG.encode(i,n.slice(e,e+t)),!0):(lxe(n,e,t,i),!1),lxe=(n,e,t,i)=>n.write(uxe(i,t),e,t,"ascii"),uxe=(n,e)=>cxe(Math.floor(n).toString(8),e),cxe=(n,e)=>(n.length===e-1?n:new Array(e-n.length-1).join("0")+n+" ")+"\0",rL=(n,e,t,i)=>i===null?!1:Ha(n,e,t,i.getTime()/1e3),hxe=new Array(156).join("\0"),du=(n,e,t,i)=>i===null?!1:(n.write(i+hxe,e,t,"utf8"),i.length!==Buffer.byteLength(i)||i.length>t);nG.exports=oL});var zx=y((rqe,rG)=>{"use strict";var dxe=Bh(),gxe=require("path"),Vf=class{constructor(e,t){this.atime=e.atime||null,this.charset=e.charset||null,this.comment=e.comment||null,this.ctime=e.ctime||null,this.gid=e.gid||null,this.gname=e.gname||null,this.linkpath=e.linkpath||null,this.mtime=e.mtime||null,this.path=e.path||null,this.size=e.size||null,this.uid=e.uid||null,this.uname=e.uname||null,this.dev=e.dev||null,this.ino=e.ino||null,this.nlink=e.nlink||null,this.global=t||!1}encode(){let e=this.encodeBody();if(e==="")return null;let t=Buffer.byteLength(e),i=512*Math.ceil(1+t/512),r=Buffer.allocUnsafe(i);for(let o=0;o<512;o++)r[o]=0;new dxe({path:("PaxHeader/"+gxe.basename(this.path)).slice(0,99),mode:this.mode||420,uid:this.uid||null,gid:this.gid||null,size:t,mtime:this.mtime||null,type:this.global?"GlobalExtendedHeader":"ExtendedHeader",linkpath:"",uname:this.uname||"",gname:this.gname||"",devmaj:0,devmin:0,atime:this.atime||null,ctime:this.ctime||null}).encode(r),r.write(e,512,t,"utf8");for(let o=t+512;o=Math.pow(10,o)&&(o+=1),o+r+i}};Vf.parse=(n,e,t)=>new Vf(pxe(fxe(n),e),t);var pxe=(n,e)=>e?Object.keys(n).reduce((t,i)=>(t[i]=n[i],t),e):n,fxe=n=>n.replace(/\n$/,"").split(` -`).reduce(mxe,Object.create(null)),mxe=(n,e)=>{let t=parseInt(e,10);if(t!==Buffer.byteLength(e)+1)return n;e=e.substr((t+" ").length);let i=e.split("="),r=i.shift().replace(/^SCHILY\.(dev|ino|nlink)/,"$1");if(!r)return n;let o=i.join("=");return n[r]=/^([A-Z]+\.)?([mac]|birth|creation)time$/.test(r)?new Date(o*1e3):/^[0-9]+$/.test(o)?+o:o,n};rG.exports=Vf});var Wh=y((oqe,oG)=>{oG.exports=n=>{let e=n.length-1,t=-1;for(;e>-1&&n.charAt(e)==="/";)t=e,e--;return t===-1?n:n.slice(0,t)}});var Kx=y((sqe,sG)=>{"use strict";sG.exports=n=>class extends n{warn(e,t,i={}){this.file&&(i.file=this.file),this.cwd&&(i.cwd=this.cwd),i.code=t instanceof Error&&t.code||e,i.tarCode=e,!this.strict&&i.recoverable!==!1?(t instanceof Error&&(i=Object.assign(t,i),t=t.message),this.emit("warn",i.tarCode,t,i)):t instanceof Error?this.emit("error",Object.assign(t,i)):this.emit("error",Object.assign(new Error(`${e}: ${t}`),i))}}});var aL=y((lqe,aG)=>{"use strict";var Qx=["|","<",">","?",":"],sL=Qx.map(n=>String.fromCharCode(61440+n.charCodeAt(0))),bxe=new Map(Qx.map((n,e)=>[n,sL[e]])),yxe=new Map(sL.map((n,e)=>[n,Qx[e]]));aG.exports={encode:n=>Qx.reduce((e,t)=>e.split(t).join(bxe.get(t)),n),decode:n=>sL.reduce((e,t)=>e.split(t).join(yxe.get(t)),n)}});var lL=y((uqe,uG)=>{var{isAbsolute:vxe,parse:lG}=require("path").win32;uG.exports=n=>{let e="",t=lG(n);for(;vxe(n)||t.root;){let i=n.charAt(0)==="/"&&n.slice(0,4)!=="//?/"?"/":t.root;n=n.substr(i.length),e+=i,t=lG(n)}return[e,n]}});var hG=y((cqe,cG)=>{"use strict";cG.exports=(n,e,t)=>(n&=4095,t&&(n=(n|384)&-19),e&&(n&256&&(n|=64),n&32&&(n|=8),n&4&&(n|=1)),n)});var yL=y((gqe,TG)=>{"use strict";var yG=Oh(),vG=zx(),wG=Bh(),Mo=require("fs"),dG=require("path"),jo=Hh(),wxe=Wh(),xG=(n,e)=>e?(n=jo(n).replace(/^\.(\/|$)/,""),wxe(e)+"/"+n):jo(n),xxe=16*1024*1024,gG=Symbol("process"),pG=Symbol("file"),fG=Symbol("directory"),cL=Symbol("symlink"),mG=Symbol("hardlink"),em=Symbol("header"),Vx=Symbol("read"),hL=Symbol("lstat"),eC=Symbol("onlstat"),dL=Symbol("onread"),gL=Symbol("onreadlink"),pL=Symbol("openfile"),fL=Symbol("onopenfile"),qa=Symbol("close"),tC=Symbol("mode"),mL=Symbol("awaitDrain"),uL=Symbol("ondrain"),Oo=Symbol("prefix"),bG=Symbol("hadError"),CG=Kx(),Cxe=aL(),SG=lL(),DG=hG(),iC=CG(class extends yG{constructor(e,t){if(t=t||{},super(t),typeof e!="string")throw new TypeError("path is required");this.path=jo(e),this.portable=!!t.portable,this.myuid=process.getuid&&process.getuid()||0,this.myuser=process.env.USER||"",this.maxReadSize=t.maxReadSize||xxe,this.linkCache=t.linkCache||new Map,this.statCache=t.statCache||new Map,this.preservePaths=!!t.preservePaths,this.cwd=jo(t.cwd||process.cwd()),this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.mtime=t.mtime||null,this.prefix=t.prefix?jo(t.prefix):null,this.fd=null,this.blockLen=null,this.blockRemain=null,this.buf=null,this.offset=null,this.length=null,this.pos=null,this.remain=null,typeof t.onwarn=="function"&&this.on("warn",t.onwarn);let i=!1;if(!this.preservePaths){let[r,o]=SG(this.path);r&&(this.path=o,i=r)}this.win32=!!t.win32||process.platform==="win32",this.win32&&(this.path=Cxe.decode(this.path.replace(/\\/g,"/")),e=e.replace(/\\/g,"/")),this.absolute=jo(t.absolute||dG.resolve(this.cwd,e)),this.path===""&&(this.path="./"),i&&this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.statCache.has(this.absolute)?this[eC](this.statCache.get(this.absolute)):this[hL]()}emit(e,...t){return e==="error"&&(this[bG]=!0),super.emit(e,...t)}[hL](){Mo.lstat(this.absolute,(e,t)=>{if(e)return this.emit("error",e);this[eC](t)})}[eC](e){this.statCache.set(this.absolute,e),this.stat=e,e.isFile()||(e.size=0),this.type=Dxe(e),this.emit("stat",e),this[gG]()}[gG](){switch(this.type){case"File":return this[pG]();case"Directory":return this[fG]();case"SymbolicLink":return this[cL]();default:return this.end()}}[tC](e){return DG(e,this.type==="Directory",this.portable)}[Oo](e){return xG(e,this.prefix)}[em](){this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.header=new wG({path:this[Oo](this.path),linkpath:this.type==="Link"?this[Oo](this.linkpath):this.linkpath,mode:this[tC](this.stat.mode),uid:this.portable?null:this.stat.uid,gid:this.portable?null:this.stat.gid,size:this.stat.size,mtime:this.noMtime?null:this.mtime||this.stat.mtime,type:this.type,uname:this.portable?null:this.stat.uid===this.myuid?this.myuser:"",atime:this.portable?null:this.stat.atime,ctime:this.portable?null:this.stat.ctime}),this.header.encode()&&!this.noPax&&super.write(new vG({atime:this.portable?null:this.header.atime,ctime:this.portable?null:this.header.ctime,gid:this.portable?null:this.header.gid,mtime:this.noMtime?null:this.mtime||this.header.mtime,path:this[Oo](this.path),linkpath:this.type==="Link"?this[Oo](this.linkpath):this.linkpath,size:this.header.size,uid:this.portable?null:this.header.uid,uname:this.portable?null:this.header.uname,dev:this.portable?null:this.stat.dev,ino:this.portable?null:this.stat.ino,nlink:this.portable?null:this.stat.nlink}).encode()),super.write(this.header.block)}[fG](){this.path.substr(-1)!=="/"&&(this.path+="/"),this.stat.size=0,this[em](),this.end()}[cL](){Mo.readlink(this.absolute,(e,t)=>{if(e)return this.emit("error",e);this[gL](t)})}[gL](e){this.linkpath=jo(e),this[em](),this.end()}[mG](e){this.type="Link",this.linkpath=jo(dG.relative(this.cwd,e)),this.stat.size=0,this[em](),this.end()}[pG](){if(this.stat.nlink>1){let e=this.stat.dev+":"+this.stat.ino;if(this.linkCache.has(e)){let t=this.linkCache.get(e);if(t.indexOf(this.cwd)===0)return this[mG](t)}this.linkCache.set(e,this.absolute)}if(this[em](),this.stat.size===0)return this.end();this[pL]()}[pL](){Mo.open(this.absolute,"r",(e,t)=>{if(e)return this.emit("error",e);this[fL](t)})}[fL](e){if(this.fd=e,this[bG])return this[qa]();this.blockLen=512*Math.ceil(this.stat.size/512),this.blockRemain=this.blockLen;let t=Math.min(this.blockLen,this.maxReadSize);this.buf=Buffer.allocUnsafe(t),this.offset=0,this.pos=0,this.remain=this.stat.size,this.length=this.buf.length,this[Vx]()}[Vx](){let{fd:e,buf:t,offset:i,length:r,pos:o}=this;Mo.read(e,t,i,r,o,(s,a)=>{if(s)return this[qa](()=>this.emit("error",s));this[dL](a)})}[qa](e){Mo.close(this.fd,e)}[dL](e){if(e<=0&&this.remain>0){let r=new Error("encountered unexpected EOF");return r.path=this.absolute,r.syscall="read",r.code="EOF",this[qa](()=>this.emit("error",r))}if(e>this.remain){let r=new Error("did not encounter expected EOF");return r.path=this.absolute,r.syscall="read",r.code="EOF",this[qa](()=>this.emit("error",r))}if(e===this.remain)for(let r=e;rthis[uL]())}[mL](e){this.once("drain",e)}write(e){if(this.blockRemaine?this.emit("error",e):this.end());this.offset>=this.length&&(this.buf=Buffer.allocUnsafe(Math.min(this.blockRemain,this.buf.length)),this.offset=0),this.length=this.buf.length-this.offset,this[Vx]()}}),bL=class extends iC{[hL](){this[eC](Mo.lstatSync(this.absolute))}[cL](){this[gL](Mo.readlinkSync(this.absolute))}[pL](){this[fL](Mo.openSync(this.absolute,"r"))}[Vx](){let e=!0;try{let{fd:t,buf:i,offset:r,length:o,pos:s}=this,a=Mo.readSync(t,i,r,o,s);this[dL](a),e=!1}finally{if(e)try{this[qa](()=>{})}catch{}}}[mL](e){e()}[qa](e){Mo.closeSync(this.fd),e()}},Sxe=CG(class extends yG{constructor(e,t){t=t||{},super(t),this.preservePaths=!!t.preservePaths,this.portable=!!t.portable,this.strict=!!t.strict,this.noPax=!!t.noPax,this.noMtime=!!t.noMtime,this.readEntry=e,this.type=e.type,this.type==="Directory"&&this.portable&&(this.noMtime=!0),this.prefix=t.prefix||null,this.path=jo(e.path),this.mode=this[tC](e.mode),this.uid=this.portable?null:e.uid,this.gid=this.portable?null:e.gid,this.uname=this.portable?null:e.uname,this.gname=this.portable?null:e.gname,this.size=e.size,this.mtime=this.noMtime?null:t.mtime||e.mtime,this.atime=this.portable?null:e.atime,this.ctime=this.portable?null:e.ctime,this.linkpath=jo(e.linkpath),typeof t.onwarn=="function"&&this.on("warn",t.onwarn);let i=!1;if(!this.preservePaths){let[r,o]=SG(this.path);r&&(this.path=o,i=r)}this.remain=e.size,this.blockRemain=e.startBlockSize,this.header=new wG({path:this[Oo](this.path),linkpath:this.type==="Link"?this[Oo](this.linkpath):this.linkpath,mode:this.mode,uid:this.portable?null:this.uid,gid:this.portable?null:this.gid,size:this.size,mtime:this.noMtime?null:this.mtime,type:this.type,uname:this.portable?null:this.uname,atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime}),i&&this.warn("TAR_ENTRY_INFO",`stripping ${i} from absolute path`,{entry:this,path:i+this.path}),this.header.encode()&&!this.noPax&&super.write(new vG({atime:this.portable?null:this.atime,ctime:this.portable?null:this.ctime,gid:this.portable?null:this.gid,mtime:this.noMtime?null:this.mtime,path:this[Oo](this.path),linkpath:this.type==="Link"?this[Oo](this.linkpath):this.linkpath,size:this.size,uid:this.portable?null:this.uid,uname:this.portable?null:this.uname,dev:this.portable?null:this.readEntry.dev,ino:this.portable?null:this.readEntry.ino,nlink:this.portable?null:this.readEntry.nlink}).encode()),super.write(this.header.block),e.pipe(this)}[Oo](e){return xG(e,this.prefix)}[tC](e){return DG(e,this.type==="Directory",this.portable)}write(e){let t=e.length;if(t>this.blockRemain)throw new Error("writing more to entry than is appropriate");return this.blockRemain-=t,super.write(e)}end(){return this.blockRemain&&super.write(Buffer.alloc(this.blockRemain)),super.end()}});iC.Sync=bL;iC.Tar=Sxe;var Dxe=n=>n.isFile()?"File":n.isDirectory()?"Directory":n.isSymbolicLink()?"SymbolicLink":"Unsupported";TG.exports=iC});var hC=y((fqe,IG)=>{"use strict";var uC=class{constructor(e,t){this.path=e||"./",this.absolute=t,this.entry=null,this.stat=null,this.readdir=null,this.pending=!1,this.ignore=!1,this.piped=!1}},Txe=Oh(),kxe=K_(),Pxe=Xx(),PL=yL(),Exe=PL.Sync,Rxe=PL.Tar,_xe=Kp(),kG=Buffer.alloc(1024),oC=Symbol("onStat"),nC=Symbol("ended"),Ao=Symbol("queue"),Yh=Symbol("current"),gu=Symbol("process"),rC=Symbol("processing"),PG=Symbol("processJob"),No=Symbol("jobs"),vL=Symbol("jobDone"),sC=Symbol("addFSEntry"),EG=Symbol("addTarEntry"),SL=Symbol("stat"),DL=Symbol("readdir"),aC=Symbol("onreaddir"),lC=Symbol("pipe"),RG=Symbol("entry"),wL=Symbol("entryOpt"),TL=Symbol("writeEntryClass"),LG=Symbol("write"),xL=Symbol("ondrain"),cC=require("fs"),_G=require("path"),Lxe=Kx(),CL=Hh(),EL=Lxe(class extends Txe{constructor(e){super(e),e=e||Object.create(null),this.opt=e,this.file=e.file||"",this.cwd=e.cwd||process.cwd(),this.maxReadSize=e.maxReadSize,this.preservePaths=!!e.preservePaths,this.strict=!!e.strict,this.noPax=!!e.noPax,this.prefix=CL(e.prefix||""),this.linkCache=e.linkCache||new Map,this.statCache=e.statCache||new Map,this.readdirCache=e.readdirCache||new Map,this[TL]=PL,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),this.portable=!!e.portable,this.zip=null,e.gzip?(typeof e.gzip!="object"&&(e.gzip={}),this.portable&&(e.gzip.portable=!0),this.zip=new kxe.Gzip(e.gzip),this.zip.on("data",t=>super.write(t)),this.zip.on("end",t=>super.end()),this.zip.on("drain",t=>this[xL]()),this.on("resume",t=>this.zip.resume())):this.on("drain",this[xL]),this.noDirRecurse=!!e.noDirRecurse,this.follow=!!e.follow,this.noMtime=!!e.noMtime,this.mtime=e.mtime||null,this.filter=typeof e.filter=="function"?e.filter:t=>!0,this[Ao]=new _xe,this[No]=0,this.jobs=+e.jobs||4,this[rC]=!1,this[nC]=!1}[LG](e){return super.write(e)}add(e){return this.write(e),this}end(e){return e&&this.write(e),this[nC]=!0,this[gu](),this}write(e){if(this[nC])throw new Error("write after end");return e instanceof Pxe?this[EG](e):this[sC](e),this.flowing}[EG](e){let t=CL(_G.resolve(this.cwd,e.path));if(!this.filter(e.path,e))e.resume();else{let i=new uC(e.path,t,!1);i.entry=new Rxe(e,this[wL](i)),i.entry.on("end",r=>this[vL](i)),this[No]+=1,this[Ao].push(i)}this[gu]()}[sC](e){let t=CL(_G.resolve(this.cwd,e));this[Ao].push(new uC(e,t)),this[gu]()}[SL](e){e.pending=!0,this[No]+=1;let t=this.follow?"stat":"lstat";cC[t](e.absolute,(i,r)=>{e.pending=!1,this[No]-=1,i?this.emit("error",i):this[oC](e,r)})}[oC](e,t){this.statCache.set(e.absolute,t),e.stat=t,this.filter(e.path,t)||(e.ignore=!0),this[gu]()}[DL](e){e.pending=!0,this[No]+=1,cC.readdir(e.absolute,(t,i)=>{if(e.pending=!1,this[No]-=1,t)return this.emit("error",t);this[aC](e,i)})}[aC](e,t){this.readdirCache.set(e.absolute,t),e.readdir=t,this[gu]()}[gu](){if(!this[rC]){this[rC]=!0;for(let e=this[Ao].head;e!==null&&this[No]this.warn(t,i,r),noPax:this.noPax,cwd:this.cwd,absolute:e.absolute,preservePaths:this.preservePaths,maxReadSize:this.maxReadSize,strict:this.strict,portable:this.portable,linkCache:this.linkCache,statCache:this.statCache,noMtime:this.noMtime,mtime:this.mtime,prefix:this.prefix}}[RG](e){this[No]+=1;try{return new this[TL](e.path,this[wL](e)).on("end",()=>this[vL](e)).on("error",t=>this.emit("error",t))}catch(t){this.emit("error",t)}}[xL](){this[Yh]&&this[Yh].entry&&this[Yh].entry.resume()}[lC](e){e.piped=!0,e.readdir&&e.readdir.forEach(r=>{let o=e.path,s=o==="./"?"":o.replace(/\/*$/,"/");this[sC](s+r)});let t=e.entry,i=this.zip;i?t.on("data",r=>{i.write(r)||t.pause()}):t.on("data",r=>{super.write(r)||t.pause()})}pause(){return this.zip&&this.zip.pause(),super.pause()}}),kL=class extends EL{constructor(e){super(e),this[TL]=Exe}pause(){}resume(){}[SL](e){let t=this.follow?"statSync":"lstatSync";this[oC](e,cC[t](e.absolute))}[DL](e,t){this[aC](e,cC.readdirSync(e.absolute))}[lC](e){let t=e.entry,i=this.zip;e.readdir&&e.readdir.forEach(r=>{let o=e.path,s=o==="./"?"":o.replace(/\/*$/,"/");this[sC](s+r)}),i?t.on("data",r=>{i.write(r)}):t.on("data",r=>{super[LG](r)})}};EL.Sync=kL;IG.exports=EL});var Kh=y(im=>{"use strict";var Ixe=Oh(),Fxe=require("events").EventEmitter,Nn=require("fs"),LL=Nn.writev;if(!LL){let n=process.binding("fs"),e=n.FSReqWrap||n.FSReqCallback;LL=(t,i,r,o)=>{let s=(l,u)=>o(l,u,i),a=new e;a.oncomplete=s,n.writeBuffers(t,i,r,a)}}var Gh=Symbol("_autoClose"),uo=Symbol("_close"),tm=Symbol("_ended"),gt=Symbol("_fd"),FG=Symbol("_finished"),Wa=Symbol("_flags"),RL=Symbol("_flush"),IL=Symbol("_handleChunk"),FL=Symbol("_makeBuf"),mC=Symbol("_mode"),dC=Symbol("_needDrain"),Uh=Symbol("_onerror"),zh=Symbol("_onopen"),_L=Symbol("_onread"),Jh=Symbol("_onwrite"),Ya=Symbol("_open"),Ps=Symbol("_path"),pu=Symbol("_pos"),Ho=Symbol("_queue"),$h=Symbol("_read"),jG=Symbol("_readSize"),Ba=Symbol("_reading"),gC=Symbol("_remain"),MG=Symbol("_size"),pC=Symbol("_write"),Zh=Symbol("_writing"),fC=Symbol("_defaultFlag"),Xh=Symbol("_errored"),bC=class extends Ixe{constructor(e,t){if(t=t||{},super(t),this.readable=!0,this.writable=!1,typeof e!="string")throw new TypeError("path must be a string");this[Xh]=!1,this[gt]=typeof t.fd=="number"?t.fd:null,this[Ps]=e,this[jG]=t.readSize||16*1024*1024,this[Ba]=!1,this[MG]=typeof t.size=="number"?t.size:1/0,this[gC]=this[MG],this[Gh]=typeof t.autoClose=="boolean"?t.autoClose:!0,typeof this[gt]=="number"?this[$h]():this[Ya]()}get fd(){return this[gt]}get path(){return this[Ps]}write(){throw new TypeError("this is a readable stream")}end(){throw new TypeError("this is a readable stream")}[Ya](){Nn.open(this[Ps],"r",(e,t)=>this[zh](e,t))}[zh](e,t){e?this[Uh](e):(this[gt]=t,this.emit("open",t),this[$h]())}[FL](){return Buffer.allocUnsafe(Math.min(this[jG],this[gC]))}[$h](){if(!this[Ba]){this[Ba]=!0;let e=this[FL]();if(e.length===0)return process.nextTick(()=>this[_L](null,0,e));Nn.read(this[gt],e,0,e.length,null,(t,i,r)=>this[_L](t,i,r))}}[_L](e,t,i){this[Ba]=!1,e?this[Uh](e):this[IL](t,i)&&this[$h]()}[uo](){if(this[Gh]&&typeof this[gt]=="number"){let e=this[gt];this[gt]=null,Nn.close(e,t=>t?this.emit("error",t):this.emit("close"))}}[Uh](e){this[Ba]=!0,this[uo](),this.emit("error",e)}[IL](e,t){let i=!1;return this[gC]-=e,e>0&&(i=super.write(ethis[zh](e,t))}[zh](e,t){this[fC]&&this[Wa]==="r+"&&e&&e.code==="ENOENT"?(this[Wa]="w",this[Ya]()):e?this[Uh](e):(this[gt]=t,this.emit("open",t),this[RL]())}end(e,t){return e&&this.write(e,t),this[tm]=!0,!this[Zh]&&!this[Ho].length&&typeof this[gt]=="number"&&this[Jh](null,0),this}write(e,t){return typeof e=="string"&&(e=Buffer.from(e,t)),this[tm]?(this.emit("error",new Error("write() after end()")),!1):this[gt]===null||this[Zh]||this[Ho].length?(this[Ho].push(e),this[dC]=!0,!1):(this[Zh]=!0,this[pC](e),!0)}[pC](e){Nn.write(this[gt],e,0,e.length,this[pu],(t,i)=>this[Jh](t,i))}[Jh](e,t){e?this[Uh](e):(this[pu]!==null&&(this[pu]+=t),this[Ho].length?this[RL]():(this[Zh]=!1,this[tm]&&!this[FG]?(this[FG]=!0,this[uo](),this.emit("finish")):this[dC]&&(this[dC]=!1,this.emit("drain"))))}[RL](){if(this[Ho].length===0)this[tm]&&this[Jh](null,0);else if(this[Ho].length===1)this[pC](this[Ho].pop());else{let e=this[Ho];this[Ho]=[],LL(this[gt],e,this[pu],(t,i)=>this[Jh](t,i))}}[uo](){if(this[Gh]&&typeof this[gt]=="number"){let e=this[gt];this[gt]=null,Nn.close(e,t=>t?this.emit("error",t):this.emit("close"))}}},ML=class extends yC{[Ya](){let e;if(this[fC]&&this[Wa]==="r+")try{e=Nn.openSync(this[Ps],this[Wa],this[mC])}catch(t){if(t.code==="ENOENT")return this[Wa]="w",this[Ya]();throw t}else e=Nn.openSync(this[Ps],this[Wa],this[mC]);this[zh](null,e)}[uo](){if(this[Gh]&&typeof this[gt]=="number"){let e=this[gt];this[gt]=null,Nn.closeSync(e),this.emit("close")}}[pC](e){let t=!0;try{this[Jh](null,Nn.writeSync(this[gt],e,0,e.length,this[pu])),t=!1}finally{if(t)try{this[uo]()}catch{}}}};im.ReadStream=bC;im.ReadStreamSync=jL;im.WriteStream=yC;im.WriteStreamSync=ML});var TC=y((yqe,WG)=>{"use strict";var jxe=Kx(),Mxe=Bh(),Oxe=require("events"),Axe=Kp(),Nxe=1024*1024,Hxe=Xx(),OG=zx(),qxe=K_(),OL=Buffer.from([31,139]),Pr=Symbol("state"),fu=Symbol("writeEntry"),Es=Symbol("readEntry"),AL=Symbol("nextEntry"),AG=Symbol("processEntry"),Er=Symbol("extendedHeader"),nm=Symbol("globalExtendedHeader"),Za=Symbol("meta"),NG=Symbol("emitMeta"),Et=Symbol("buffer"),Rs=Symbol("queue"),mu=Symbol("ended"),HG=Symbol("emittedEnd"),bu=Symbol("emit"),Hn=Symbol("unzip"),vC=Symbol("consumeChunk"),wC=Symbol("consumeChunkSub"),NL=Symbol("consumeBody"),qG=Symbol("consumeMeta"),BG=Symbol("consumeHeader"),xC=Symbol("consuming"),HL=Symbol("bufferConcat"),qL=Symbol("maybeEnd"),rm=Symbol("writing"),Ja=Symbol("aborted"),CC=Symbol("onDone"),yu=Symbol("sawValidEntry"),SC=Symbol("sawNullBlock"),DC=Symbol("sawEOF"),Bxe=n=>!0;WG.exports=jxe(class extends Oxe{constructor(e){e=e||{},super(e),this.file=e.file||"",this[yu]=null,this.on(CC,t=>{(this[Pr]==="begin"||this[yu]===!1)&&this.warn("TAR_BAD_ARCHIVE","Unrecognized archive format")}),e.ondone?this.on(CC,e.ondone):this.on(CC,t=>{this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close")}),this.strict=!!e.strict,this.maxMetaEntrySize=e.maxMetaEntrySize||Nxe,this.filter=typeof e.filter=="function"?e.filter:Bxe,this.writable=!0,this.readable=!1,this[Rs]=new Axe,this[Et]=null,this[Es]=null,this[fu]=null,this[Pr]="begin",this[Za]="",this[Er]=null,this[nm]=null,this[mu]=!1,this[Hn]=null,this[Ja]=!1,this[SC]=!1,this[DC]=!1,typeof e.onwarn=="function"&&this.on("warn",e.onwarn),typeof e.onentry=="function"&&this.on("entry",e.onentry)}[BG](e,t){this[yu]===null&&(this[yu]=!1);let i;try{i=new Mxe(e,t,this[Er],this[nm])}catch(r){return this.warn("TAR_ENTRY_INVALID",r)}if(i.nullBlock)this[SC]?(this[DC]=!0,this[Pr]==="begin"&&(this[Pr]="header"),this[bu]("eof")):(this[SC]=!0,this[bu]("nullBlock"));else if(this[SC]=!1,!i.cksumValid)this.warn("TAR_ENTRY_INVALID","checksum failure",{header:i});else if(!i.path)this.warn("TAR_ENTRY_INVALID","path is required",{header:i});else{let r=i.type;if(/^(Symbolic)?Link$/.test(r)&&!i.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath required",{header:i});else if(!/^(Symbolic)?Link$/.test(r)&&i.linkpath)this.warn("TAR_ENTRY_INVALID","linkpath forbidden",{header:i});else{let o=this[fu]=new Hxe(i,this[Er],this[nm]);if(!this[yu])if(o.remain){let s=()=>{o.invalid||(this[yu]=!0)};o.on("end",s)}else this[yu]=!0;o.meta?o.size>this.maxMetaEntrySize?(o.ignore=!0,this[bu]("ignoredEntry",o),this[Pr]="ignore",o.resume()):o.size>0&&(this[Za]="",o.on("data",s=>this[Za]+=s),this[Pr]="meta"):(this[Er]=null,o.ignore=o.ignore||!this.filter(o.path,o),o.ignore?(this[bu]("ignoredEntry",o),this[Pr]=o.remain?"ignore":"header",o.resume()):(o.remain?this[Pr]="body":(this[Pr]="header",o.end()),this[Es]?this[Rs].push(o):(this[Rs].push(o),this[AL]())))}}}[AG](e){let t=!0;return e?Array.isArray(e)?this.emit.apply(this,e):(this[Es]=e,this.emit("entry",e),e.emittedEnd||(e.on("end",i=>this[AL]()),t=!1)):(this[Es]=null,t=!1),t}[AL](){do;while(this[AG](this[Rs].shift()));if(!this[Rs].length){let e=this[Es];!e||e.flowing||e.size===e.remain?this[rm]||this.emit("drain"):e.once("drain",i=>this.emit("drain"))}}[NL](e,t){let i=this[fu],r=i.blockRemain,o=r>=e.length&&t===0?e:e.slice(t,t+r);return i.write(o),i.blockRemain||(this[Pr]="header",this[fu]=null,i.end()),o.length}[qG](e,t){let i=this[fu],r=this[NL](e,t);return this[fu]||this[NG](i),r}[bu](e,t,i){!this[Rs].length&&!this[Es]?this.emit(e,t,i):this[Rs].push([e,t,i])}[NG](e){switch(this[bu]("meta",this[Za]),e.type){case"ExtendedHeader":case"OldExtendedHeader":this[Er]=OG.parse(this[Za],this[Er],!1);break;case"GlobalExtendedHeader":this[nm]=OG.parse(this[Za],this[nm],!0);break;case"NextFileHasLongPath":case"OldGnuLongPath":this[Er]=this[Er]||Object.create(null),this[Er].path=this[Za].replace(/\0.*/,"");break;case"NextFileHasLongLinkpath":this[Er]=this[Er]||Object.create(null),this[Er].linkpath=this[Za].replace(/\0.*/,"");break;default:throw new Error("unknown meta: "+e.type)}}abort(e){this[Ja]=!0,this.emit("abort",e),this.warn("TAR_ABORT",e,{recoverable:!1})}write(e){if(this[Ja])return;if(this[Hn]===null&&e){if(this[Et]&&(e=Buffer.concat([this[Et],e]),this[Et]=null),e.lengththis[vC](o)),this[Hn].on("error",o=>this.abort(o)),this[Hn].on("end",o=>{this[mu]=!0,this[vC]()}),this[rm]=!0;let r=this[Hn][i?"end":"write"](e);return this[rm]=!1,r}}this[rm]=!0,this[Hn]?this[Hn].write(e):this[vC](e),this[rm]=!1;let t=this[Rs].length?!1:this[Es]?this[Es].flowing:!0;return!t&&!this[Rs].length&&this[Es].once("drain",i=>this.emit("drain")),t}[HL](e){e&&!this[Ja]&&(this[Et]=this[Et]?Buffer.concat([this[Et],e]):e)}[qL](){if(this[mu]&&!this[HG]&&!this[Ja]&&!this[xC]){this[HG]=!0;let e=this[fu];if(e&&e.blockRemain){let t=this[Et]?this[Et].length:0;this.warn("TAR_BAD_ARCHIVE",`Truncated input (needed ${e.blockRemain} more bytes, only ${t} available)`,{entry:e}),this[Et]&&e.write(this[Et]),e.end()}this[bu](CC)}}[vC](e){if(this[xC])this[HL](e);else if(!e&&!this[Et])this[qL]();else{if(this[xC]=!0,this[Et]){this[HL](e);let t=this[Et];this[Et]=null,this[wC](t)}else this[wC](e);for(;this[Et]&&this[Et].length>=512&&!this[Ja]&&!this[DC];){let t=this[Et];this[Et]=null,this[wC](t)}this[xC]=!1}(!this[Et]||this[mu])&&this[qL]()}[wC](e){let t=0,i=e.length;for(;t+512<=i&&!this[Ja]&&!this[DC];)switch(this[Pr]){case"begin":case"header":this[BG](e,t),t+=512;break;case"ignore":case"body":t+=this[NL](e,t);break;case"meta":t+=this[qG](e,t);break;default:throw new Error("invalid state: "+this[Pr])}t{"use strict";var Wxe=Mh(),ZG=TC(),Qh=require("fs"),Yxe=Kh(),YG=require("path"),BL=Wh();$G.exports=(n,e,t)=>{typeof n=="function"?(t=n,e=null,n={}):Array.isArray(n)&&(e=n,n={}),typeof e=="function"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=Wxe(n);if(i.sync&&typeof t=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof t=="function")throw new TypeError("callback only supported with file option");return e.length&&Jxe(i,e),i.noResume||Zxe(i),i.file&&i.sync?$xe(i):i.file?Uxe(i,t):JG(i)};var Zxe=n=>{let e=n.onentry;n.onentry=e?t=>{e(t),t.resume()}:t=>t.resume()},Jxe=(n,e)=>{let t=new Map(e.map(o=>[BL(o),!0])),i=n.filter,r=(o,s)=>{let a=s||YG.parse(o).root||".",l=o===a?!1:t.has(o)?t.get(o):r(YG.dirname(o),a);return t.set(o,l),l};n.filter=i?(o,s)=>i(o,s)&&r(BL(o)):o=>r(BL(o))},$xe=n=>{let e=JG(n),t=n.file,i=!0,r;try{let o=Qh.statSync(t),s=n.maxReadSize||16*1024*1024;if(o.size{let t=new ZG(n),i=n.maxReadSize||16*1024*1024,r=n.file,o=new Promise((s,a)=>{t.on("error",a),t.on("end",s),Qh.stat(r,(l,u)=>{if(l)a(l);else{let c=new Yxe.ReadStream(r,{readSize:i,size:u.size});c.on("error",a),c.pipe(t)}})});return e?o.then(e,e):o},JG=n=>new ZG(n)});var QG=y((wqe,KG)=>{"use strict";var Xxe=Mh(),PC=hC(),UG=Kh(),XG=kC(),GG=require("path");KG.exports=(n,e,t)=>{if(typeof e=="function"&&(t=e),Array.isArray(n)&&(e=n,n={}),!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");e=Array.from(e);let i=Xxe(n);if(i.sync&&typeof t=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof t=="function")throw new TypeError("callback only supported with file option");return i.file&&i.sync?Gxe(i,e):i.file?zxe(i,e,t):i.sync?Kxe(i,e):Qxe(i,e)};var Gxe=(n,e)=>{let t=new PC.Sync(n),i=new UG.WriteStreamSync(n.file,{mode:n.mode||438});t.pipe(i),zG(t,e)},zxe=(n,e,t)=>{let i=new PC(n),r=new UG.WriteStream(n.file,{mode:n.mode||438});i.pipe(r);let o=new Promise((s,a)=>{r.on("error",a),r.on("close",s),i.on("error",a)});return WL(i,e),t?o.then(t,t):o},zG=(n,e)=>{e.forEach(t=>{t.charAt(0)==="@"?XG({file:GG.resolve(n.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>n.add(i)}):n.add(t)}),n.end()},WL=(n,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)==="@")return XG({file:GG.resolve(n.cwd,t.substr(1)),noResume:!0,onentry:i=>n.add(i)}).then(i=>WL(n,e));n.add(t)}n.end()},Kxe=(n,e)=>{let t=new PC.Sync(n);return zG(t,e),t},Qxe=(n,e)=>{let t=new PC(n);return WL(t,e),t}});var YL=y((xqe,oz)=>{"use strict";var Vxe=Mh(),VG=hC(),or=require("fs"),ez=Kh(),tz=kC(),iz=require("path"),nz=Bh();oz.exports=(n,e,t)=>{let i=Vxe(n);if(!i.file)throw new TypeError("file is required");if(i.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),i.sync?eCe(i,e):iCe(i,e,t)};var eCe=(n,e)=>{let t=new VG.Sync(n),i=!0,r,o;try{try{r=or.openSync(n.file,"r+")}catch(l){if(l.code==="ENOENT")r=or.openSync(n.file,"w+");else throw l}let s=or.fstatSync(r),a=Buffer.alloc(512);e:for(o=0;os.size)break;o+=u,n.mtimeCache&&n.mtimeCache.set(l.path,l.mtime)}i=!1,tCe(n,t,o,r,e)}finally{if(i)try{or.closeSync(r)}catch{}}},tCe=(n,e,t,i,r)=>{let o=new ez.WriteStreamSync(n.file,{fd:i,start:t});e.pipe(o),nCe(e,r)},iCe=(n,e,t)=>{e=Array.from(e);let i=new VG(n),r=(s,a,l)=>{let u=(p,f)=>{p?or.close(s,m=>l(p)):l(null,f)},c=0;if(a===0)return u(null,0);let h=0,d=Buffer.alloc(512),g=(p,f)=>{if(p)return u(p);if(h+=f,h<512&&f)return or.read(s,d,h,d.length-h,c+h,g);if(c===0&&d[0]===31&&d[1]===139)return u(new Error("cannot append to compressed archives"));if(h<512)return u(null,c);let m=new nz(d);if(!m.cksumValid)return u(null,c);let b=512*Math.ceil(m.size/512);if(c+b+512>a||(c+=b+512,c>=a))return u(null,c);n.mtimeCache&&n.mtimeCache.set(m.path,m.mtime),h=0,or.read(s,d,0,512,c,g)};or.read(s,d,0,512,c,g)},o=new Promise((s,a)=>{i.on("error",a);let l="r+",u=(c,h)=>{if(c&&c.code==="ENOENT"&&l==="r+")return l="w+",or.open(n.file,l,u);if(c)return a(c);or.fstat(h,(d,g)=>{if(d)return or.close(h,()=>a(d));r(h,g.size,(p,f)=>{if(p)return a(p);let m=new ez.WriteStream(n.file,{fd:h,start:f});i.pipe(m),m.on("error",a),m.on("close",s),rz(i,e)})})};or.open(n.file,l,u)});return t?o.then(t,t):o},nCe=(n,e)=>{e.forEach(t=>{t.charAt(0)==="@"?tz({file:iz.resolve(n.cwd,t.substr(1)),sync:!0,noResume:!0,onentry:i=>n.add(i)}):n.add(t)}),n.end()},rz=(n,e)=>{for(;e.length;){let t=e.shift();if(t.charAt(0)==="@")return tz({file:iz.resolve(n.cwd,t.substr(1)),noResume:!0,onentry:i=>n.add(i)}).then(i=>rz(n,e));n.add(t)}n.end()}});var az=y((Cqe,sz)=>{"use strict";var rCe=Mh(),oCe=YL();sz.exports=(n,e,t)=>{let i=rCe(n);if(!i.file)throw new TypeError("file is required");if(i.gzip)throw new TypeError("cannot append to compressed archives");if(!e||!Array.isArray(e)||!e.length)throw new TypeError("no files or directories specified");return e=Array.from(e),sCe(i),oCe(i,e,t)};var sCe=n=>{let e=n.filter;n.mtimeCache||(n.mtimeCache=new Map),n.filter=e?(t,i)=>e(t,i)&&!(n.mtimeCache.get(t)>i.mtime):(t,i)=>!(n.mtimeCache.get(t)>i.mtime)}});var cz=y((Sqe,uz)=>{var{promisify:lz}=require("util"),$a=require("fs"),aCe=n=>{if(!n)n={mode:511,fs:$a};else if(typeof n=="object")n={mode:511,fs:$a,...n};else if(typeof n=="number")n={mode:n,fs:$a};else if(typeof n=="string")n={mode:parseInt(n,8),fs:$a};else throw new TypeError("invalid options argument");return n.mkdir=n.mkdir||n.fs.mkdir||$a.mkdir,n.mkdirAsync=lz(n.mkdir),n.stat=n.stat||n.fs.stat||$a.stat,n.statAsync=lz(n.stat),n.statSync=n.statSync||n.fs.statSync||$a.statSync,n.mkdirSync=n.mkdirSync||n.fs.mkdirSync||$a.mkdirSync,n};uz.exports=aCe});var dz=y((Dqe,hz)=>{var lCe=process.env.__TESTING_MKDIRP_PLATFORM__||process.platform,{resolve:uCe,parse:cCe}=require("path"),hCe=n=>{if(/\0/.test(n))throw Object.assign(new TypeError("path must be a string without null bytes"),{path:n,code:"ERR_INVALID_ARG_VALUE"});if(n=uCe(n),lCe==="win32"){let e=/[*|"<>?:]/,{root:t}=cCe(n);if(e.test(n.substr(t.length)))throw Object.assign(new Error("Illegal characters in path."),{path:n,code:"EINVAL"})}return n};hz.exports=hCe});var bz=y((Tqe,mz)=>{var{dirname:gz}=require("path"),pz=(n,e,t=void 0)=>t===e?Promise.resolve():n.statAsync(e).then(i=>i.isDirectory()?t:void 0,i=>i.code==="ENOENT"?pz(n,gz(e),e):void 0),fz=(n,e,t=void 0)=>{if(t!==e)try{return n.statSync(e).isDirectory()?t:void 0}catch(i){return i.code==="ENOENT"?fz(n,gz(e),e):void 0}};mz.exports={findMade:pz,findMadeSync:fz}});var $L=y((kqe,vz)=>{var{dirname:yz}=require("path"),ZL=(n,e,t)=>{e.recursive=!1;let i=yz(n);return i===n?e.mkdirAsync(n,e).catch(r=>{if(r.code!=="EISDIR")throw r}):e.mkdirAsync(n,e).then(()=>t||n,r=>{if(r.code==="ENOENT")return ZL(i,e).then(o=>ZL(n,e,o));if(r.code!=="EEXIST"&&r.code!=="EROFS")throw r;return e.statAsync(n).then(o=>{if(o.isDirectory())return t;throw r},()=>{throw r})})},JL=(n,e,t)=>{let i=yz(n);if(e.recursive=!1,i===n)try{return e.mkdirSync(n,e)}catch(r){if(r.code!=="EISDIR")throw r;return}try{return e.mkdirSync(n,e),t||n}catch(r){if(r.code==="ENOENT")return JL(n,e,JL(i,e,t));if(r.code!=="EEXIST"&&r.code!=="EROFS")throw r;try{if(!e.statSync(n).isDirectory())throw r}catch{throw r}}};vz.exports={mkdirpManual:ZL,mkdirpManualSync:JL}});var Cz=y((Pqe,xz)=>{var{dirname:wz}=require("path"),{findMade:dCe,findMadeSync:gCe}=bz(),{mkdirpManual:pCe,mkdirpManualSync:fCe}=$L(),mCe=(n,e)=>(e.recursive=!0,wz(n)===n?e.mkdirAsync(n,e):dCe(e,n).then(i=>e.mkdirAsync(n,e).then(()=>i).catch(r=>{if(r.code==="ENOENT")return pCe(n,e);throw r}))),bCe=(n,e)=>{if(e.recursive=!0,wz(n)===n)return e.mkdirSync(n,e);let i=gCe(e,n);try{return e.mkdirSync(n,e),i}catch(r){if(r.code==="ENOENT")return fCe(n,e);throw r}};xz.exports={mkdirpNative:mCe,mkdirpNativeSync:bCe}});var kz=y((Eqe,Tz)=>{var Sz=require("fs"),yCe=process.env.__TESTING_MKDIRP_NODE_VERSION__||process.version,UL=yCe.replace(/^v/,"").split("."),Dz=+UL[0]>10||+UL[0]==10&&+UL[1]>=12,vCe=Dz?n=>n.mkdir===Sz.mkdir:()=>!1,wCe=Dz?n=>n.mkdirSync===Sz.mkdirSync:()=>!1;Tz.exports={useNative:vCe,useNativeSync:wCe}});var Iz=y((Rqe,Lz)=>{var Vh=cz(),ed=dz(),{mkdirpNative:Pz,mkdirpNativeSync:Ez}=Cz(),{mkdirpManual:Rz,mkdirpManualSync:_z}=$L(),{useNative:xCe,useNativeSync:CCe}=kz(),td=(n,e)=>(n=ed(n),e=Vh(e),xCe(e)?Pz(n,e):Rz(n,e)),SCe=(n,e)=>(n=ed(n),e=Vh(e),CCe(e)?Ez(n,e):_z(n,e));td.sync=SCe;td.native=(n,e)=>Pz(ed(n),Vh(e));td.manual=(n,e)=>Rz(ed(n),Vh(e));td.nativeSync=(n,e)=>Ez(ed(n),Vh(e));td.manualSync=(n,e)=>_z(ed(n),Vh(e));Lz.exports=td});var Hz=y((_qe,Nz)=>{"use strict";var Rr=require("fs"),vu=require("path"),DCe=Rr.lchown?"lchown":"chown",TCe=Rr.lchownSync?"lchownSync":"chownSync",jz=Rr.lchown&&!process.version.match(/v1[1-9]+\./)&&!process.version.match(/v10\.[6-9]/),Fz=(n,e,t)=>{try{return Rr[TCe](n,e,t)}catch(i){if(i.code!=="ENOENT")throw i}},kCe=(n,e,t)=>{try{return Rr.chownSync(n,e,t)}catch(i){if(i.code!=="ENOENT")throw i}},PCe=jz?(n,e,t,i)=>r=>{!r||r.code!=="EISDIR"?i(r):Rr.chown(n,e,t,i)}:(n,e,t,i)=>i,XL=jz?(n,e,t)=>{try{return Fz(n,e,t)}catch(i){if(i.code!=="EISDIR")throw i;kCe(n,e,t)}}:(n,e,t)=>Fz(n,e,t),ECe=process.version,Mz=(n,e,t)=>Rr.readdir(n,e,t),RCe=(n,e)=>Rr.readdirSync(n,e);/^v4\./.test(ECe)&&(Mz=(n,e,t)=>Rr.readdir(n,t));var EC=(n,e,t,i)=>{Rr[DCe](n,e,t,PCe(n,e,t,r=>{i(r&&r.code!=="ENOENT"?r:null)}))},Oz=(n,e,t,i,r)=>{if(typeof e=="string")return Rr.lstat(vu.resolve(n,e),(o,s)=>{if(o)return r(o.code!=="ENOENT"?o:null);s.name=e,Oz(n,s,t,i,r)});if(e.isDirectory())GL(vu.resolve(n,e.name),t,i,o=>{if(o)return r(o);let s=vu.resolve(n,e.name);EC(s,t,i,r)});else{let o=vu.resolve(n,e.name);EC(o,t,i,r)}},GL=(n,e,t,i)=>{Mz(n,{withFileTypes:!0},(r,o)=>{if(r){if(r.code==="ENOENT")return i();if(r.code!=="ENOTDIR"&&r.code!=="ENOTSUP")return i(r)}if(r||!o.length)return EC(n,e,t,i);let s=o.length,a=null,l=u=>{if(!a){if(u)return i(a=u);if(--s===0)return EC(n,e,t,i)}};o.forEach(u=>Oz(n,u,e,t,l))})},_Ce=(n,e,t,i)=>{if(typeof e=="string")try{let r=Rr.lstatSync(vu.resolve(n,e));r.name=e,e=r}catch(r){if(r.code==="ENOENT")return;throw r}e.isDirectory()&&Az(vu.resolve(n,e.name),t,i),XL(vu.resolve(n,e.name),t,i)},Az=(n,e,t)=>{let i;try{i=RCe(n,{withFileTypes:!0})}catch(r){if(r.code==="ENOENT")return;if(r.code==="ENOTDIR"||r.code==="ENOTSUP")return XL(n,e,t);throw r}return i&&i.length&&i.forEach(r=>_Ce(n,r,e,t)),XL(n,e,t)};Nz.exports=GL;GL.sync=Az});var Yz=y((Lqe,zL)=>{"use strict";var qz=Iz(),_r=require("fs"),RC=require("path"),Bz=Hz(),co=Hh(),_C=class extends Error{constructor(e,t){super("Cannot extract through symbolic link"),this.path=t,this.symlink=e}get name(){return"SylinkError"}},LC=class extends Error{constructor(e,t){super(t+": Cannot cd into '"+e+"'"),this.path=e,this.code=t}get name(){return"CwdError"}},IC=(n,e)=>n.get(co(e)),om=(n,e,t)=>n.set(co(e),t),LCe=(n,e)=>{_r.stat(n,(t,i)=>{(t||!i.isDirectory())&&(t=new LC(n,t&&t.code||"ENOTDIR")),e(t)})};zL.exports=(n,e,t)=>{n=co(n);let i=e.umask,r=e.mode|448,o=(r&i)!==0,s=e.uid,a=e.gid,l=typeof s=="number"&&typeof a=="number"&&(s!==e.processUid||a!==e.processGid),u=e.preserve,c=e.unlink,h=e.cache,d=co(e.cwd),g=(m,b)=>{m?t(m):(om(h,n,!0),b&&l?Bz(b,s,a,w=>g(w)):o?_r.chmod(n,r,t):t())};if(h&&IC(h,n)===!0)return g();if(n===d)return LCe(n,g);if(u)return qz(n,{mode:r}).then(m=>g(null,m),g);let f=co(RC.relative(d,n)).split("/");FC(d,f,r,h,c,d,null,g)};var FC=(n,e,t,i,r,o,s,a)=>{if(!e.length)return a(null,s);let l=e.shift(),u=co(RC.resolve(n+"/"+l));if(IC(i,u))return FC(u,e,t,i,r,o,s,a);_r.mkdir(u,t,Wz(u,e,t,i,r,o,s,a))},Wz=(n,e,t,i,r,o,s,a)=>l=>{l?_r.lstat(n,(u,c)=>{if(u)u.path=u.path&&co(u.path),a(u);else if(c.isDirectory())FC(n,e,t,i,r,o,s,a);else if(r)_r.unlink(n,h=>{if(h)return a(h);_r.mkdir(n,t,Wz(n,e,t,i,r,o,s,a))});else{if(c.isSymbolicLink())return a(new _C(n,n+"/"+e.join("/")));a(l)}}):(s=s||n,FC(n,e,t,i,r,o,s,a))},ICe=n=>{let e=!1,t="ENOTDIR";try{e=_r.statSync(n).isDirectory()}catch(i){t=i.code}finally{if(!e)throw new LC(n,t)}};zL.exports.sync=(n,e)=>{n=co(n);let t=e.umask,i=e.mode|448,r=(i&t)!==0,o=e.uid,s=e.gid,a=typeof o=="number"&&typeof s=="number"&&(o!==e.processUid||s!==e.processGid),l=e.preserve,u=e.unlink,c=e.cache,h=co(e.cwd),d=m=>{om(c,n,!0),m&&a&&Bz.sync(m,o,s),r&&_r.chmodSync(n,i)};if(c&&IC(c,n)===!0)return d();if(n===h)return ICe(h),d();if(l)return d(qz.sync(n,i));let p=co(RC.relative(h,n)).split("/"),f=null;for(let m=p.shift(),b=h;m&&(b+="/"+m);m=p.shift())if(b=co(RC.resolve(b)),!IC(c,b))try{_r.mkdirSync(b,i),f=f||b,om(c,b,!0)}catch{let x=_r.lstatSync(b);if(x.isDirectory()){om(c,b,!0);continue}else if(u){_r.unlinkSync(b),_r.mkdirSync(b,i),f=f||b,om(c,b,!0);continue}else if(x.isSymbolicLink())return new _C(b,b+"/"+p.join("/"))}return d(f)}});var QL=y((Iqe,Zz)=>{var KL=Object.create(null),{hasOwnProperty:FCe}=Object.prototype;Zz.exports=n=>(FCe.call(KL,n)||(KL[n]=n.normalize("NFKD")),KL[n])});var Xz=y((Fqe,Uz)=>{var Jz=require("assert"),jCe=QL(),MCe=Wh(),{join:$z}=require("path"),OCe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,ACe=OCe==="win32";Uz.exports=()=>{let n=new Map,e=new Map,t=u=>u.split("/").slice(0,-1).reduce((h,d)=>(h.length&&(d=$z(h[h.length-1],d)),h.push(d||"/"),h),[]),i=new Set,r=u=>{let c=e.get(u);if(!c)throw new Error("function does not have any path reservations");return{paths:c.paths.map(h=>n.get(h)),dirs:[...c.dirs].map(h=>n.get(h))}},o=u=>{let{paths:c,dirs:h}=r(u);return c.every(d=>d[0]===u)&&h.every(d=>d[0]instanceof Set&&d[0].has(u))},s=u=>i.has(u)||!o(u)?!1:(i.add(u),u(()=>a(u)),!0),a=u=>{if(!i.has(u))return!1;let{paths:c,dirs:h}=e.get(u),d=new Set;return c.forEach(g=>{let p=n.get(g);Jz.equal(p[0],u),p.length===1?n.delete(g):(p.shift(),typeof p[0]=="function"?d.add(p[0]):p[0].forEach(f=>d.add(f)))}),h.forEach(g=>{let p=n.get(g);Jz(p[0]instanceof Set),p[0].size===1&&p.length===1?n.delete(g):p[0].size===1?(p.shift(),d.add(p[0])):p[0].delete(u)}),i.delete(u),d.forEach(g=>s(g)),!0};return{check:o,reserve:(u,c)=>{u=ACe?["win32 parallelization disabled"]:u.map(d=>jCe(MCe($z(d))).toLowerCase());let h=new Set(u.map(d=>t(d)).reduce((d,g)=>d.concat(g)));return e.set(c,{dirs:h,paths:u}),u.forEach(d=>{let g=n.get(d);g?g.push(c):n.set(d,[c])}),h.forEach(d=>{let g=n.get(d);g?g[g.length-1]instanceof Set?g[g.length-1].add(c):g.push(new Set([c])):n.set(d,[new Set([c])])}),s(c)}}}});var Kz=y((jqe,zz)=>{var NCe=process.env.__FAKE_PLATFORM__||process.platform,HCe=NCe==="win32",qCe=global.__FAKE_TESTING_FS__||require("fs"),{O_CREAT:BCe,O_TRUNC:WCe,O_WRONLY:YCe,UV_FS_O_FILEMAP:Gz=0}=qCe.constants,ZCe=HCe&&!!Gz,JCe=512*1024,$Ce=Gz|WCe|BCe|YCe;zz.exports=ZCe?n=>n"w"});var aI=y((Mqe,h3)=>{"use strict";var UCe=require("assert"),XCe=TC(),Ke=require("fs"),GCe=Kh(),_s=require("path"),l3=Yz(),Qz=aL(),zCe=Xz(),KCe=lL(),sr=Hh(),QCe=Wh(),VCe=QL(),Vz=Symbol("onEntry"),tI=Symbol("checkFs"),e3=Symbol("checkFs2"),OC=Symbol("pruneCache"),iI=Symbol("isReusable"),Lr=Symbol("makeFs"),nI=Symbol("file"),rI=Symbol("directory"),AC=Symbol("link"),t3=Symbol("symlink"),i3=Symbol("hardlink"),n3=Symbol("unsupported"),r3=Symbol("checkPath"),Ua=Symbol("mkdir"),tn=Symbol("onError"),jC=Symbol("pending"),o3=Symbol("pend"),id=Symbol("unpend"),VL=Symbol("ended"),eI=Symbol("maybeClose"),oI=Symbol("skip"),sm=Symbol("doChown"),am=Symbol("uid"),lm=Symbol("gid"),um=Symbol("checkedCwd"),u3=require("crypto"),c3=Kz(),eSe=process.env.TESTING_TAR_FAKE_PLATFORM||process.platform,cm=eSe==="win32",tSe=(n,e)=>{if(!cm)return Ke.unlink(n,e);let t=n+".DELETE."+u3.randomBytes(16).toString("hex");Ke.rename(n,t,i=>{if(i)return e(i);Ke.unlink(t,e)})},iSe=n=>{if(!cm)return Ke.unlinkSync(n);let e=n+".DELETE."+u3.randomBytes(16).toString("hex");Ke.renameSync(n,e),Ke.unlinkSync(e)},s3=(n,e,t)=>n===n>>>0?n:e===e>>>0?e:t,a3=n=>VCe(QCe(sr(n))).toLowerCase(),nSe=(n,e)=>{e=a3(e);for(let t of n.keys()){let i=a3(t);(i===e||i.indexOf(e+"/")===0)&&n.delete(t)}},rSe=n=>{for(let e of n.keys())n.delete(e)},hm=class extends XCe{constructor(e){if(e||(e={}),e.ondone=t=>{this[VL]=!0,this[eI]()},super(e),this[um]=!1,this.reservations=zCe(),this.transform=typeof e.transform=="function"?e.transform:null,this.writable=!0,this.readable=!1,this[jC]=0,this[VL]=!1,this.dirCache=e.dirCache||new Map,typeof e.uid=="number"||typeof e.gid=="number"){if(typeof e.uid!="number"||typeof e.gid!="number")throw new TypeError("cannot set owner without number uid and gid");if(e.preserveOwner)throw new TypeError("cannot preserve owner in archive and also set owner explicitly");this.uid=e.uid,this.gid=e.gid,this.setOwner=!0}else this.uid=null,this.gid=null,this.setOwner=!1;e.preserveOwner===void 0&&typeof e.uid!="number"?this.preserveOwner=process.getuid&&process.getuid()===0:this.preserveOwner=!!e.preserveOwner,this.processUid=(this.preserveOwner||this.setOwner)&&process.getuid?process.getuid():null,this.processGid=(this.preserveOwner||this.setOwner)&&process.getgid?process.getgid():null,this.forceChown=e.forceChown===!0,this.win32=!!e.win32||cm,this.newer=!!e.newer,this.keep=!!e.keep,this.noMtime=!!e.noMtime,this.preservePaths=!!e.preservePaths,this.unlink=!!e.unlink,this.cwd=sr(_s.resolve(e.cwd||process.cwd())),this.strip=+e.strip||0,this.processUmask=e.noChmod?0:process.umask(),this.umask=typeof e.umask=="number"?e.umask:this.processUmask,this.dmode=e.dmode||511&~this.umask,this.fmode=e.fmode||438&~this.umask,this.on("entry",t=>this[Vz](t))}warn(e,t,i={}){return(e==="TAR_BAD_ARCHIVE"||e==="TAR_ABORT")&&(i.recoverable=!1),super.warn(e,t,i)}[eI](){this[VL]&&this[jC]===0&&(this.emit("prefinish"),this.emit("finish"),this.emit("end"),this.emit("close"))}[r3](e){if(this.strip){let t=sr(e.path).split("/");if(t.length=this.strip)e.linkpath=i.slice(this.strip).join("/");else return!1}}if(!this.preservePaths){let t=sr(e.path),i=t.split("/");if(i.includes("..")||cm&&/^[a-z]:\.\.$/i.test(i[0]))return this.warn("TAR_ENTRY_ERROR","path contains '..'",{entry:e,path:t}),!1;let[r,o]=KCe(t);r&&(e.path=o,this.warn("TAR_ENTRY_INFO",`stripping ${r} from absolute path`,{entry:e,path:t}))}if(_s.isAbsolute(e.path)?e.absolute=sr(_s.resolve(e.path)):e.absolute=sr(_s.resolve(this.cwd,e.path)),!this.preservePaths&&e.absolute.indexOf(this.cwd+"/")!==0&&e.absolute!==this.cwd)return this.warn("TAR_ENTRY_ERROR","path escaped extraction target",{entry:e,path:sr(e.path),resolvedPath:e.absolute,cwd:this.cwd}),!1;if(e.absolute===this.cwd&&e.type!=="Directory"&&e.type!=="GNUDumpDir")return!1;if(this.win32){let{root:t}=_s.win32.parse(e.absolute);e.absolute=t+Qz.encode(e.absolute.substr(t.length));let{root:i}=_s.win32.parse(e.path);e.path=i+Qz.encode(e.path.substr(i.length))}return!0}[Vz](e){if(!this[r3](e))return e.resume();switch(UCe.equal(typeof e.absolute,"string"),e.type){case"Directory":case"GNUDumpDir":e.mode&&(e.mode=e.mode|448);case"File":case"OldFile":case"ContiguousFile":case"Link":case"SymbolicLink":return this[tI](e);case"CharacterDevice":case"BlockDevice":case"FIFO":default:return this[n3](e)}}[tn](e,t){e.name==="CwdError"?this.emit("error",e):(this.warn("TAR_ENTRY_ERROR",e,{entry:t}),this[id](),t.resume())}[Ua](e,t,i){l3(sr(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t,noChmod:this.noChmod},i)}[sm](e){return this.forceChown||this.preserveOwner&&(typeof e.uid=="number"&&e.uid!==this.processUid||typeof e.gid=="number"&&e.gid!==this.processGid)||typeof this.uid=="number"&&this.uid!==this.processUid||typeof this.gid=="number"&&this.gid!==this.processGid}[am](e){return s3(this.uid,e.uid,this.processUid)}[lm](e){return s3(this.gid,e.gid,this.processGid)}[nI](e,t){let i=e.mode&4095||this.fmode,r=new GCe.WriteStream(e.absolute,{flags:c3(e.size),mode:i,autoClose:!1});r.on("error",l=>{r.fd&&Ke.close(r.fd,()=>{}),r.write=()=>!0,this[tn](l,e),t()});let o=1,s=l=>{if(l){r.fd&&Ke.close(r.fd,()=>{}),this[tn](l,e),t();return}--o===0&&Ke.close(r.fd,u=>{u?this[tn](u,e):this[id](),t()})};r.on("finish",l=>{let u=e.absolute,c=r.fd;if(e.mtime&&!this.noMtime){o++;let h=e.atime||new Date,d=e.mtime;Ke.futimes(c,h,d,g=>g?Ke.utimes(u,h,d,p=>s(p&&g)):s())}if(this[sm](e)){o++;let h=this[am](e),d=this[lm](e);Ke.fchown(c,h,d,g=>g?Ke.chown(u,h,d,p=>s(p&&g)):s())}s()});let a=this.transform&&this.transform(e)||e;a!==e&&(a.on("error",l=>{this[tn](l,e),t()}),e.pipe(a)),a.pipe(r)}[rI](e,t){let i=e.mode&4095||this.dmode;this[Ua](e.absolute,i,r=>{if(r){this[tn](r,e),t();return}let o=1,s=a=>{--o===0&&(t(),this[id](),e.resume())};e.mtime&&!this.noMtime&&(o++,Ke.utimes(e.absolute,e.atime||new Date,e.mtime,s)),this[sm](e)&&(o++,Ke.chown(e.absolute,this[am](e),this[lm](e),s)),s()})}[n3](e){e.unsupported=!0,this.warn("TAR_ENTRY_UNSUPPORTED",`unsupported entry type: ${e.type}`,{entry:e}),e.resume()}[t3](e,t){this[AC](e,e.linkpath,"symlink",t)}[i3](e,t){let i=sr(_s.resolve(this.cwd,e.linkpath));this[AC](e,i,"link",t)}[o3](){this[jC]++}[id](){this[jC]--,this[eI]()}[oI](e){this[id](),e.resume()}[iI](e,t){return e.type==="File"&&!this.unlink&&t.isFile()&&t.nlink<=1&&!cm}[tI](e){this[o3]();let t=[e.path];e.linkpath&&t.push(e.linkpath),this.reservations.reserve(t,i=>this[e3](e,i))}[OC](e){e.type==="SymbolicLink"?rSe(this.dirCache):e.type!=="Directory"&&nSe(this.dirCache,e.absolute)}[e3](e,t){this[OC](e);let i=a=>{this[OC](e),t(a)},r=()=>{this[Ua](this.cwd,this.dmode,a=>{if(a){this[tn](a,e),i();return}this[um]=!0,o()})},o=()=>{if(e.absolute!==this.cwd){let a=sr(_s.dirname(e.absolute));if(a!==this.cwd)return this[Ua](a,this.dmode,l=>{if(l){this[tn](l,e),i();return}s()})}s()},s=()=>{Ke.lstat(e.absolute,(a,l)=>{if(l&&(this.keep||this.newer&&l.mtime>e.mtime)){this[oI](e),i();return}if(a||this[iI](e,l))return this[Lr](null,e,i);if(l.isDirectory()){if(e.type==="Directory"){let u=!this.noChmod&&e.mode&&(l.mode&4095)!==e.mode,c=h=>this[Lr](h,e,i);return u?Ke.chmod(e.absolute,e.mode,c):c()}if(e.absolute!==this.cwd)return Ke.rmdir(e.absolute,u=>this[Lr](u,e,i))}if(e.absolute===this.cwd)return this[Lr](null,e,i);tSe(e.absolute,u=>this[Lr](u,e,i))})};this[um]?o():r()}[Lr](e,t,i){if(e){this[tn](e,t),i();return}switch(t.type){case"File":case"OldFile":case"ContiguousFile":return this[nI](t,i);case"Link":return this[i3](t,i);case"SymbolicLink":return this[t3](t,i);case"Directory":case"GNUDumpDir":return this[rI](t,i)}}[AC](e,t,i,r){Ke[i](t,e.absolute,o=>{o?this[tn](o,e):(this[id](),e.resume()),r()})}},MC=n=>{try{return[null,n()]}catch(e){return[e,null]}},sI=class extends hm{[Lr](e,t){return super[Lr](e,t,()=>{})}[tI](e){if(this[OC](e),!this[um]){let o=this[Ua](this.cwd,this.dmode);if(o)return this[tn](o,e);this[um]=!0}if(e.absolute!==this.cwd){let o=sr(_s.dirname(e.absolute));if(o!==this.cwd){let s=this[Ua](o,this.dmode);if(s)return this[tn](s,e)}}let[t,i]=MC(()=>Ke.lstatSync(e.absolute));if(i&&(this.keep||this.newer&&i.mtime>e.mtime))return this[oI](e);if(t||this[iI](e,i))return this[Lr](null,e);if(i.isDirectory()){if(e.type==="Directory"){let s=!this.noChmod&&e.mode&&(i.mode&4095)!==e.mode,[a]=s?MC(()=>{Ke.chmodSync(e.absolute,e.mode)}):[];return this[Lr](a,e)}let[o]=MC(()=>Ke.rmdirSync(e.absolute));this[Lr](o,e)}let[r]=e.absolute===this.cwd?[]:MC(()=>iSe(e.absolute));this[Lr](r,e)}[nI](e,t){let i=e.mode&4095||this.fmode,r=a=>{let l;try{Ke.closeSync(o)}catch(u){l=u}(a||l)&&this[tn](a||l,e),t()},o;try{o=Ke.openSync(e.absolute,c3(e.size),i)}catch(a){return r(a)}let s=this.transform&&this.transform(e)||e;s!==e&&(s.on("error",a=>this[tn](a,e)),e.pipe(s)),s.on("data",a=>{try{Ke.writeSync(o,a,0,a.length)}catch(l){r(l)}}),s.on("end",a=>{let l=null;if(e.mtime&&!this.noMtime){let u=e.atime||new Date,c=e.mtime;try{Ke.futimesSync(o,u,c)}catch(h){try{Ke.utimesSync(e.absolute,u,c)}catch{l=h}}}if(this[sm](e)){let u=this[am](e),c=this[lm](e);try{Ke.fchownSync(o,u,c)}catch(h){try{Ke.chownSync(e.absolute,u,c)}catch{l=l||h}}}r(l)})}[rI](e,t){let i=e.mode&4095||this.dmode,r=this[Ua](e.absolute,i);if(r){this[tn](r,e),t();return}if(e.mtime&&!this.noMtime)try{Ke.utimesSync(e.absolute,e.atime||new Date,e.mtime)}catch{}if(this[sm](e))try{Ke.chownSync(e.absolute,this[am](e),this[lm](e))}catch{}t(),e.resume()}[Ua](e,t){try{return l3.sync(sr(e),{uid:this.uid,gid:this.gid,processUid:this.processUid,processGid:this.processGid,umask:this.processUmask,preserve:this.preservePaths,unlink:this.unlink,cache:this.dirCache,cwd:this.cwd,mode:t})}catch(i){return i}}[AC](e,t,i,r){try{Ke[i+"Sync"](t,e.absolute),r(),e.resume()}catch(o){return this[tn](o,e)}}};hm.Sync=sI;h3.exports=hm});var m3=y((Oqe,f3)=>{"use strict";var oSe=Mh(),NC=aI(),g3=require("fs"),p3=Kh(),d3=require("path"),lI=Wh();f3.exports=(n,e,t)=>{typeof n=="function"?(t=n,e=null,n={}):Array.isArray(n)&&(e=n,n={}),typeof e=="function"&&(t=e,e=null),e?e=Array.from(e):e=[];let i=oSe(n);if(i.sync&&typeof t=="function")throw new TypeError("callback not supported for sync tar functions");if(!i.file&&typeof t=="function")throw new TypeError("callback only supported with file option");return e.length&&sSe(i,e),i.file&&i.sync?aSe(i):i.file?lSe(i,t):i.sync?uSe(i):cSe(i)};var sSe=(n,e)=>{let t=new Map(e.map(o=>[lI(o),!0])),i=n.filter,r=(o,s)=>{let a=s||d3.parse(o).root||".",l=o===a?!1:t.has(o)?t.get(o):r(d3.dirname(o),a);return t.set(o,l),l};n.filter=i?(o,s)=>i(o,s)&&r(lI(o)):o=>r(lI(o))},aSe=n=>{let e=new NC.Sync(n),t=n.file,i=g3.statSync(t),r=n.maxReadSize||16*1024*1024;new p3.ReadStreamSync(t,{readSize:r,size:i.size}).pipe(e)},lSe=(n,e)=>{let t=new NC(n),i=n.maxReadSize||16*1024*1024,r=n.file,o=new Promise((s,a)=>{t.on("error",a),t.on("close",s),g3.stat(r,(l,u)=>{if(l)a(l);else{let c=new p3.ReadStream(r,{readSize:i,size:u.size});c.on("error",a),c.pipe(t)}})});return e?o.then(e,e):o},uSe=n=>new NC.Sync(n),cSe=n=>new NC(n)});var b3=y(pi=>{"use strict";pi.c=pi.create=QG();pi.r=pi.replace=YL();pi.t=pi.list=kC();pi.u=pi.update=az();pi.x=pi.extract=m3();pi.Pack=hC();pi.Unpack=aI();pi.Parse=TC();pi.ReadEntry=Xx();pi.WriteEntry=yL();pi.Header=Bh();pi.Pax=zx();pi.types=eL()});var x3=y((Nqe,w3)=>{w3.exports=nn;function nn(n){if(!(this instanceof nn))return new nn(n);this.value=n}nn.prototype.get=function(n){for(var e=this.value,t=0;t{var hSe=x3(),dSe=require("events").EventEmitter;C3.exports=nd;function nd(n){var e=nd.saw(n,{}),t=n.call(e.handlers,e);return t!==void 0&&(e.handlers=t),e.record(),e.chain()}nd.light=function(e){var t=nd.saw(e,{}),i=e.call(t.handlers,t);return i!==void 0&&(t.handlers=i),t.chain()};nd.saw=function(n,e){var t=new dSe;return t.handlers=e,t.actions=[],t.chain=function(){var i=hSe(t.handlers).map(function(r){if(this.isRoot)return r;var o=this.path;typeof r=="function"&&this.update(function(){return t.actions.push({path:o,args:[].slice.call(arguments)}),i})});return process.nextTick(function(){t.emit("begin"),t.next()}),i},t.pop=function(){return t.actions.shift()},t.next=function(){var i=t.pop();if(!i)t.emit("end");else if(!i.trap){var r=t.handlers;i.path.forEach(function(o){r=r[o]}),r.apply(t.handlers,i.args)}},t.nest=function(i){var r=[].slice.call(arguments,1),o=!0;if(typeof i=="boolean"){var o=i;i=r.shift()}var s=nd.saw(n,{}),a=n.call(s.handlers,s);a!==void 0&&(s.handlers=a),typeof t.step<"u"&&s.record(),i.apply(s.chain(),r),o!==!1&&s.on("end",t.next)},t.record=function(){gSe(t)},["trap","down","jump"].forEach(function(i){t[i]=function(){throw new Error("To use the trap, down and jump features, please call record() first to start recording actions.")}}),t};function gSe(n){n.step=0,n.pop=function(){return n.actions[n.step++]},n.trap=function(e,t){var i=Array.isArray(e)?e:[e];n.actions.push({path:i,step:n.step,cb:t,trap:!0})},n.down=function(e){var t=(Array.isArray(e)?e:[e]).join("/"),i=n.actions.slice(n.step).map(function(o){return o.trap&&o.step<=n.step?!1:o.path.join("/")==t}).indexOf(!0);i>=0?n.step+=i:n.step=n.actions.length;var r=n.actions[n.step-1];r&&r.trap?(n.step=r.step,r.cb()):n.next()},n.jump=function(e){n.step=e,n.next()}}});var T3=y((qqe,D3)=>{D3.exports=bn;function bn(n){if(!(this instanceof bn))return new bn(n);this.buffers=n||[],this.length=this.buffers.reduce(function(e,t){return e+t.length},0)}bn.prototype.push=function(){for(var n=0;n=0?n:this.length-n,r=[].slice.call(arguments,2);e===void 0?e=this.length-i:e>this.length-i&&(e=this.length-i);for(var n=0;n0){var u=i-a;if(u+e0){var g=r.slice();g.unshift(h),g.push(d),t.splice.apply(t,[l,1].concat(g)),l+=g.length,r=[]}else t.splice(l,1,h,d),l+=2}else o.push(t[l].slice(u)),t[l]=t[l].slice(0,u),l++}for(r.length>0&&(t.splice.apply(t,[l,0].concat(r)),l+=r.length);o.lengththis.length&&(e=this.length);for(var i=0,r=0;r=e-n?Math.min(u+(e-n)-s,l):l;t[a].copy(o,s,u,c),s+=c-u}return o};bn.prototype.pos=function(n){if(n<0||n>=this.length)throw new Error("oob");for(var e=n,t=0,i=null;;){if(i=this.buffers[t],e=this.buffers[t].length;)if(i=0,t++,t>=this.buffers.length)return-1;var l=this.buffers[t][i];if(l==n[r]){if(r==0&&(o={i:t,j:i,pos:s}),r++,r==n.length)return o.pos}else r!=0&&(t=o.i,i=o.j,s=o.pos,r=0);i++,s++}};bn.prototype.toBuffer=function(){return this.slice()};bn.prototype.toString=function(n,e,t){return this.slice(e,t).toString(n)}});var P3=y((Bqe,k3)=>{k3.exports=function(n){function e(i,r){var o=t.store,s=i.split(".");s.slice(0,-1).forEach(function(l){o[l]===void 0&&(o[l]={}),o=o[l]});var a=s[s.length-1];return arguments.length==1?o[a]:o[a]=r}var t={get:function(i){return e(i)},set:function(i,r){return e(i,r)},store:n||{}};return t}});var F3=y((wu,I3)=>{var pSe=S3(),E3=require("events").EventEmitter,fSe=T3(),HC=P3(),mSe=require("stream").Stream;wu=I3.exports=function(n,e){if(Buffer.isBuffer(n))return wu.parse(n);var t=wu.stream();return n&&n.pipe?n.pipe(t):n&&(n.on(e||"data",function(i){t.write(i)}),n.on("end",function(){t.end()})),t};wu.stream=function(n){if(n)return wu.apply(null,arguments);var e=null;function t(h,d,g){e={bytes:h,skip:g,cb:function(p){e=null,d(p)}},r()}var i=null;function r(){if(!e){c&&(u=!0);return}if(typeof e=="function")e();else{var h=i+e.bytes;if(a.length>=h){var d;i==null?(d=a.splice(0,h),e.skip||(d=d.slice())):(e.skip||(d=a.slice(i,h)),i=h),e.skip?e.cb():e.cb(d)}}}function o(h){function d(){u||h.next()}var g=L3(function(p,f){return function(m){t(p,function(b){l.set(m,f(b)),d()})}});return g.tap=function(p){h.nest(p,l.store)},g.into=function(p,f){l.get(p)||l.set(p,{});var m=l;l=HC(m.get(p)),h.nest(function(){f.apply(this,arguments),this.tap(function(){l=m})},l.store)},g.flush=function(){l.store={},d()},g.loop=function(p){var f=!1;h.nest(!1,function m(){this.vars=l.store,p.call(this,function(){f=!0,d()},l.store),this.tap(function(){f?h.next():m.call(this)}.bind(this))},l.store)},g.buffer=function(p,f){typeof f=="string"&&(f=l.get(f)),t(f,function(m){l.set(p,m),d()})},g.skip=function(p){typeof p=="string"&&(p=l.get(p)),t(p,function(){d()})},g.scan=function(f,m){if(typeof m=="string")m=new Buffer(m);else if(!Buffer.isBuffer(m))throw new Error("search must be a Buffer or a string");var b=0;e=function(){var w=a.indexOf(m,i+b),x=w-i-b;w!==-1?(e=null,i!=null?(l.set(f,a.slice(i,i+b+x)),i+=b+x+m.length):(l.set(f,a.slice(0,b+x)),a.splice(0,b+x+m.length)),d(),r()):x=Math.max(a.length-m.length-i-b,0),b+=x},r()},g.peek=function(p){i=0,h.nest(function(){p.call(this,l.store),this.tap(function(){i=null})})},g}var s=pSe.light(o);s.writable=!0;var a=fSe();s.write=function(h){a.push(h),r()};var l=HC(),u=!1,c=!1;return s.end=function(){c=!0},s.pipe=mSe.prototype.pipe,Object.getOwnPropertyNames(E3.prototype).forEach(function(h){s[h]=E3.prototype[h]}),s};wu.parse=function(e){var t=L3(function(o,s){return function(a){if(i+o<=e.length){var l=e.slice(i,i+o);i+=o,r.set(a,s(l))}else r.set(a,null);return t}}),i=0,r=HC();return t.vars=r.store,t.tap=function(o){return o.call(t,r.store),t},t.into=function(o,s){r.get(o)||r.set(o,{});var a=r;return r=HC(a.get(o)),s.call(t,r.store),r=a,t},t.loop=function(o){for(var s=!1,a=function(){s=!0};s===!1;)o.call(t,a,r.store);return t},t.buffer=function(o,s){typeof s=="string"&&(s=r.get(s));var a=e.slice(i,Math.min(e.length,i+s));return i+=s,r.set(o,a),t},t.skip=function(o){return typeof o=="string"&&(o=r.get(o)),i+=o,t},t.scan=function(o,s){if(typeof s=="string")s=new Buffer(s);else if(!Buffer.isBuffer(s))throw new Error("search must be a Buffer or a string");r.set(o,null);for(var a=0;a+i<=e.length-s.length+1;a++){for(var l=0;l=e.length},t};function R3(n){for(var e=0,t=0;t{var j3=require("stream").Transform,vSe=require("util");function xu(n,e){if(!(this instanceof xu))return new xu;j3.call(this);var t=typeof n=="object"?n.pattern:n;this.pattern=Buffer.isBuffer(t)?t:Buffer.from(t),this.requiredLength=this.pattern.length,n.requiredExtraSize&&(this.requiredLength+=n.requiredExtraSize),this.data=new Buffer(""),this.bytesSoFar=0,this.matchFn=e}vSe.inherits(xu,j3);xu.prototype.checkDataChunk=function(n){var e=this.data.length>=this.requiredLength;if(!!e){var t=this.data.indexOf(this.pattern,n?1:0);if(t>=0&&t+this.requiredLength>this.data.length){if(t>0){var i=this.data.slice(0,t);this.push(i),this.bytesSoFar+=t,this.data=this.data.slice(t)}return}if(t===-1){var r=this.data.length-this.requiredLength+1,i=this.data.slice(0,r);this.push(i),this.bytesSoFar+=r,this.data=this.data.slice(r);return}if(t>0){var i=this.data.slice(0,t);this.data=this.data.slice(t),this.push(i),this.bytesSoFar+=t}var o=this.matchFn?this.matchFn(this.data,this.bytesSoFar):!0;if(o){this.data=new Buffer("");return}return!0}};xu.prototype._transform=function(n,e,t){this.data=Buffer.concat([this.data,n]);for(var i=!0;this.checkDataChunk(!i);)i=!1;t()};xu.prototype._flush=function(n){if(this.data.length>0)for(var e=!0;this.checkDataChunk(!e);)e=!1;this.data.length>0&&(this.push(this.data),this.data=null),n()};M3.exports=xu});var N3=y((Yqe,A3)=>{"use strict";var uI=require("stream"),wSe=require("util").inherits;function dm(){if(!(this instanceof dm))return new dm;uI.PassThrough.call(this),this.path=null,this.type=null,this.isDirectory=!1}wSe(dm,uI.PassThrough);dm.prototype.autodrain=function(){return this.pipe(new uI.Transform({transform:function(n,e,t){t()}}))};A3.exports=dm});var hI=y((Zqe,q3)=>{"use strict";var Xa=F3(),cI=require("stream"),xSe=require("util"),CSe=require("zlib"),SSe=O3(),H3=N3(),Ce={STREAM_START:0,START:1,LOCAL_FILE_HEADER:2,LOCAL_FILE_HEADER_SUFFIX:3,FILE_DATA:4,FILE_DATA_END:5,DATA_DESCRIPTOR:6,CENTRAL_DIRECTORY_FILE_HEADER:7,CENTRAL_DIRECTORY_FILE_HEADER_SUFFIX:8,CDIR64_END:9,CDIR64_END_DATA_SECTOR:10,CDIR64_LOCATOR:11,CENTRAL_DIRECTORY_END:12,CENTRAL_DIRECTORY_END_COMMENT:13,TRAILING_JUNK:14,ERROR:99},gm=4294967296,DSe=67324752,TSe=134695760,kSe=33639248,PSe=101075792,ESe=117853008,RSe=101010256;function qi(n){if(!(this instanceof qi))return new qi(n);cI.Transform.call(this),this.options=n||{},this.data=new Buffer(""),this.state=Ce.STREAM_START,this.skippedBytes=0,this.parsedEntity=null,this.outStreamInfo={}}xSe.inherits(qi,cI.Transform);qi.prototype.processDataChunk=function(n){var e;switch(this.state){case Ce.STREAM_START:case Ce.START:e=4;break;case Ce.LOCAL_FILE_HEADER:e=26;break;case Ce.LOCAL_FILE_HEADER_SUFFIX:e=this.parsedEntity.fileNameLength+this.parsedEntity.extraFieldLength;break;case Ce.DATA_DESCRIPTOR:e=12;break;case Ce.CENTRAL_DIRECTORY_FILE_HEADER:e=42;break;case Ce.CENTRAL_DIRECTORY_FILE_HEADER_SUFFIX:e=this.parsedEntity.fileNameLength+this.parsedEntity.extraFieldLength+this.parsedEntity.fileCommentLength;break;case Ce.CDIR64_END:e=52;break;case Ce.CDIR64_END_DATA_SECTOR:e=this.parsedEntity.centralDirectoryRecordSize-44;break;case Ce.CDIR64_LOCATOR:e=16;break;case Ce.CENTRAL_DIRECTORY_END:e=18;break;case Ce.CENTRAL_DIRECTORY_END_COMMENT:e=this.parsedEntity.commentLength;break;case Ce.FILE_DATA:return 0;case Ce.FILE_DATA_END:return 0;case Ce.TRAILING_JUNK:return this.options.debug&&console.log("found",n.length,"bytes of TRAILING_JUNK"),n.length;default:return n.length}var t=n.length;if(t>>8,(o&255)===80){s=a;break}return this.skippedBytes+=s,this.options.debug&&console.log("Skipped",this.skippedBytes,"bytes"),s}this.state=Ce.ERROR;var l=r?"Not a valid zip file":"Invalid signature in zip file";if(this.options.debug){var u=n.readUInt32LE(0),c;try{c=n.slice(0,4).toString()}catch{}console.log("Unexpected signature in zip file: 0x"+u.toString(16),'"'+c+'", skipped',this.skippedBytes,"bytes")}return this.emit("error",new Error(l)),n.length}return this.skippedBytes=0,e;case Ce.LOCAL_FILE_HEADER:return this.parsedEntity=this._readFile(n),this.state=Ce.LOCAL_FILE_HEADER_SUFFIX,e;case Ce.LOCAL_FILE_HEADER_SUFFIX:var h=new H3,d=(this.parsedEntity.flags&2048)!==0;h.path=this._decodeString(n.slice(0,this.parsedEntity.fileNameLength),d);var p=n.slice(this.parsedEntity.fileNameLength,this.parsedEntity.fileNameLength+this.parsedEntity.extraFieldLength),f=this._readExtraFields(p);if(f&&f.parsed&&(f.parsed.path&&!d&&(h.path=f.parsed.path),Number.isFinite(f.parsed.uncompressedSize)&&this.parsedEntity.uncompressedSize===gm-1&&(this.parsedEntity.uncompressedSize=f.parsed.uncompressedSize),Number.isFinite(f.parsed.compressedSize)&&this.parsedEntity.compressedSize===gm-1&&(this.parsedEntity.compressedSize=f.parsed.compressedSize)),this.parsedEntity.extra=f.parsed||{},this.options.debug){let T=Object.assign({},this.parsedEntity,{path:h.path,flags:"0x"+this.parsedEntity.flags.toString(16),extraFields:f&&f.debug});console.log("decoded LOCAL_FILE_HEADER:",JSON.stringify(T,null,2))}return this._prepareOutStream(this.parsedEntity,h),this.emit("entry",h),this.state=Ce.FILE_DATA,e;case Ce.CENTRAL_DIRECTORY_FILE_HEADER:return this.parsedEntity=this._readCentralDirectoryEntry(n),this.state=Ce.CENTRAL_DIRECTORY_FILE_HEADER_SUFFIX,e;case Ce.CENTRAL_DIRECTORY_FILE_HEADER_SUFFIX:var d=(this.parsedEntity.flags&2048)!==0,g=this._decodeString(n.slice(0,this.parsedEntity.fileNameLength),d),p=n.slice(this.parsedEntity.fileNameLength,this.parsedEntity.fileNameLength+this.parsedEntity.extraFieldLength),f=this._readExtraFields(p);f&&f.parsed&&f.parsed.path&&!d&&(g=f.parsed.path),this.parsedEntity.extra=f.parsed;var m=(this.parsedEntity.versionMadeBy&65280)>>8===3,b,w;if(m){b=this.parsedEntity.externalFileAttributes>>>16;var x=b>>>12;w=(x&10)===10}if(this.options.debug){let T=Object.assign({},this.parsedEntity,{path:g,flags:"0x"+this.parsedEntity.flags.toString(16),unixAttrs:b&&"0"+b.toString(8),isSymlink:w,extraFields:f.debug});console.log("decoded CENTRAL_DIRECTORY_FILE_HEADER:",JSON.stringify(T,null,2))}return this.state=Ce.START,e;case Ce.CDIR64_END:return this.parsedEntity=this._readEndOfCentralDirectory64(n),this.options.debug&&console.log("decoded CDIR64_END_RECORD:",this.parsedEntity),this.state=Ce.CDIR64_END_DATA_SECTOR,e;case Ce.CDIR64_END_DATA_SECTOR:return this.state=Ce.START,e;case Ce.CDIR64_LOCATOR:return this.state=Ce.START,e;case Ce.CENTRAL_DIRECTORY_END:return this.parsedEntity=this._readEndOfCentralDirectory(n),this.options.debug&&console.log("decoded CENTRAL_DIRECTORY_END:",this.parsedEntity),this.state=Ce.CENTRAL_DIRECTORY_END_COMMENT,e;case Ce.CENTRAL_DIRECTORY_END_COMMENT:return this.options.debug&&console.log("decoded CENTRAL_DIRECTORY_END_COMMENT:",n.slice(0,e).toString()),this.state=Ce.TRAILING_JUNK,e;case Ce.ERROR:return n.length;default:return console.log("didn't handle state #",this.state,"discarding"),n.length}};qi.prototype._prepareOutStream=function(n,e){var t=this,i=n.uncompressedSize===0&&/[\/\\]$/.test(e.path);e.path=e.path.replace(/^([/\\]*[.]+[/\\]+)*[/\\]*/,""),e.type=i?"Directory":"File",e.isDirectory=i;var r=!(n.flags&8);r&&(e.size=n.uncompressedSize);var o=n.versionsNeededToExtract<=45;if(this.outStreamInfo={stream:null,limit:r?n.compressedSize:-1,written:0},r)this.outStreamInfo.stream=new cI.PassThrough;else{var s=new Buffer(4);s.writeUInt32LE(TSe,0);var a=n.extra.zip64Mode,l=a?20:12,u={pattern:s,requiredExtraSize:l},c=new SSe(u,function(f,m){var b=t._readDataDescriptor(f,a),w=b.compressedSize===m;if(!a&&!w&&m>=gm)for(var x=m-gm;x>=0&&(w=b.compressedSize===x,!w);)x-=gm;if(!!w){t.state=Ce.FILE_DATA_END;var T=a?24:16;return t.data.length>0?t.data=Buffer.concat([f.slice(T),t.data]):t.data=f.slice(T),!0}});this.outStreamInfo.stream=c}var h=n.flags&1||n.flags&64;if(h||!o){var d=h?"Encrypted files are not supported!":"Zip version "+Math.floor(n.versionsNeededToExtract/10)+"."+n.versionsNeededToExtract%10+" is not supported";e.skip=!0,setImmediate(()=>{e.emit("error",new Error(d))}),this.outStreamInfo.stream.pipe(new H3().autodrain());return}var g=n.compressionMethod>0;if(g){var p=CSe.createInflateRaw();p.on("error",function(f){t.state=Ce.ERROR,t.emit("error",f)}),this.outStreamInfo.stream.pipe(p).pipe(e)}else this.outStreamInfo.stream.pipe(e);this._drainAllEntries&&e.autodrain()};qi.prototype._readFile=function(n){var e=Xa.parse(n).word16lu("versionsNeededToExtract").word16lu("flags").word16lu("compressionMethod").word16lu("lastModifiedTime").word16lu("lastModifiedDate").word32lu("crc32").word32lu("compressedSize").word32lu("uncompressedSize").word16lu("fileNameLength").word16lu("extraFieldLength").vars;return e};qi.prototype._readExtraFields=function(n){var e={},t={parsed:e};this.options.debug&&(t.debug=[]);for(var i=0;i=w+4&&a&1&&(e.mtime=new Date(n.readUInt32LE(i+w)*1e3),w+=4),r.extraSize>=w+4&&a&2&&(e.atime=new Date(n.readUInt32LE(i+w)*1e3),w+=4),r.extraSize>=w+4&&a&4&&(e.ctime=new Date(n.readUInt32LE(i+w)*1e3));break;case 28789:o="Info-ZIP Unicode Path Extra Field";var l=n.readUInt8(i);if(l===1){var w=1,u=n.readUInt32LE(i+w);w+=4;var c=n.slice(i+w);e.path=c.toString()}break;case 13:case 22613:o=r.extraId===13?"PKWARE Unix":"Info-ZIP UNIX (type 1)";var w=0;if(r.extraSize>=8){var h=new Date(n.readUInt32LE(i+w)*1e3);w+=4;var d=new Date(n.readUInt32LE(i+w)*1e3);if(w+=4,e.atime=h,e.mtime=d,r.extraSize>=12){var g=n.readUInt16LE(i+w);w+=2;var p=n.readUInt16LE(i+w);w+=2,e.uid=g,e.gid=p}}break;case 30805:o="Info-ZIP UNIX (type 2)";var w=0;if(r.extraSize>=4){var g=n.readUInt16LE(i+w);w+=2;var p=n.readUInt16LE(i+w);w+=2,e.uid=g,e.gid=p}break;case 30837:o="Info-ZIP New Unix";var w=0,f=n.readUInt8(i);if(w+=1,f===1){var m=n.readUInt8(i+w);w+=1,m<=6&&(e.uid=n.readUIntLE(i+w,m)),w+=m;var b=n.readUInt8(i+w);w+=1,b<=6&&(e.gid=n.readUIntLE(i+w,b))}break;case 30062:o="ASi Unix";var w=0;if(r.extraSize>=14){var x=n.readUInt32LE(i+w);w+=4;var T=n.readUInt16LE(i+w);w+=2;var R=n.readUInt32LE(i+w);w+=4;var g=n.readUInt16LE(i+w);w+=2;var p=n.readUInt16LE(i+w);if(w+=2,e.mode=T,e.uid=g,e.gid=p,r.extraSize>14){var F=i+w,N=i+r.extraSize-14,J=this._decodeString(n.slice(F,N));e.symlink=J}}break}this.options.debug&&t.debug.push({extraId:"0x"+r.extraId.toString(16),description:o,data:n.slice(i,i+r.extraSize).inspect()}),i+=r.extraSize}return t};qi.prototype._readDataDescriptor=function(n,e){if(e){var t=Xa.parse(n).word32lu("dataDescriptorSignature").word32lu("crc32").word64lu("compressedSize").word64lu("uncompressedSize").vars;return t}var t=Xa.parse(n).word32lu("dataDescriptorSignature").word32lu("crc32").word32lu("compressedSize").word32lu("uncompressedSize").vars;return t};qi.prototype._readCentralDirectoryEntry=function(n){var e=Xa.parse(n).word16lu("versionMadeBy").word16lu("versionsNeededToExtract").word16lu("flags").word16lu("compressionMethod").word16lu("lastModifiedTime").word16lu("lastModifiedDate").word32lu("crc32").word32lu("compressedSize").word32lu("uncompressedSize").word16lu("fileNameLength").word16lu("extraFieldLength").word16lu("fileCommentLength").word16lu("diskNumber").word16lu("internalFileAttributes").word32lu("externalFileAttributes").word32lu("offsetToLocalFileHeader").vars;return e};qi.prototype._readEndOfCentralDirectory64=function(n){var e=Xa.parse(n).word64lu("centralDirectoryRecordSize").word16lu("versionMadeBy").word16lu("versionsNeededToExtract").word32lu("diskNumber").word32lu("diskNumberWithCentralDirectoryStart").word64lu("centralDirectoryEntries").word64lu("totalCentralDirectoryEntries").word64lu("sizeOfCentralDirectory").word64lu("offsetToStartOfCentralDirectory").vars;return e};qi.prototype._readEndOfCentralDirectory=function(n){var e=Xa.parse(n).word16lu("diskNumber").word16lu("diskStart").word16lu("centralDirectoryEntries").word16lu("totalCentralDirectoryEntries").word32lu("sizeOfCentralDirectory").word32lu("offsetToStartOfCentralDirectory").word16lu("commentLength").vars;return e};var _Se="\0\u263A\u263B\u2665\u2666\u2663\u2660\u2022\u25D8\u25CB\u25D9\u2642\u2640\u266A\u266B\u263C\u25BA\u25C4\u2195\u203C\xB6\xA7\u25AC\u21A8\u2191\u2193\u2192\u2190\u221F\u2194\u25B2\u25BC !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\u2302\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0 ";qi.prototype._decodeString=function(n,e){if(e)return n.toString("utf8");if(this.options.decodeString)return this.options.decodeString(n);let t="";for(var i=0;i0&&(this.data=this.data.slice(t),this.data.length!==0););if(this.state===Ce.FILE_DATA){if(this.outStreamInfo.limit>=0){var i=this.outStreamInfo.limit-this.outStreamInfo.written,r;i{if(this.state===Ce.FILE_DATA_END)return this.state=Ce.START,o.end(e);e()})}return}e()};qi.prototype.drainAll=function(){this._drainAllEntries=!0};qi.prototype._transform=function(n,e,t){var i=this;i.data.length>0?i.data=Buffer.concat([i.data,n]):i.data=n;var r=i.data.length,o=function(){if(i.data.length>0&&i.data.length0){e._parseOrOutput("buffer",function(){if(e.data.length>0)return setImmediate(function(){e._flush(n)});n()});return}if(e.state===Ce.FILE_DATA)return n(new Error("Stream finished in an invalid state, uncompression failed"));setImmediate(n)};q3.exports=qi});var W3=y((Jqe,B3)=>{var pm=require("stream").Transform,LSe=require("util"),ISe=hI();function Ga(n){if(!(this instanceof Ga))return new Ga(n);var e=n||{};pm.call(this,{readableObjectMode:!0}),this.opts=n||{},this.unzipStream=new ISe(this.opts);var t=this;this.unzipStream.on("entry",function(i){t.push(i)}),this.unzipStream.on("error",function(i){t.emit("error",i)})}LSe.inherits(Ga,pm);Ga.prototype._transform=function(n,e,t){this.unzipStream.write(n,e,t)};Ga.prototype._flush=function(n){var e=this;this.unzipStream.end(function(){process.nextTick(function(){e.emit("close")}),n()})};Ga.prototype.on=function(n,e){return n==="entry"?pm.prototype.on.call(this,"data",e):pm.prototype.on.call(this,n,e)};Ga.prototype.drainAll=function(){return this.unzipStream.drainAll(),this.pipe(new pm({objectMode:!0,transform:function(n,e,t){t()}}))};B3.exports=Ga});var $3=y(($qe,J3)=>{var fm=require("path"),Y3=require("fs"),Z3=parseInt("0777",8);J3.exports=rd.mkdirp=rd.mkdirP=rd;function rd(n,e,t,i){typeof e=="function"?(t=e,e={}):(!e||typeof e!="object")&&(e={mode:e});var r=e.mode,o=e.fs||Y3;r===void 0&&(r=Z3),i||(i=null);var s=t||function(){};n=fm.resolve(n),o.mkdir(n,r,function(a){if(!a)return i=i||n,s(null,i);switch(a.code){case"ENOENT":if(fm.dirname(n)===n)return s(a);rd(fm.dirname(n),e,function(l,u){l?s(l,u):rd(n,e,s,u)});break;default:o.stat(n,function(l,u){l||!u.isDirectory()?s(a,i):s(null,i)});break}})}rd.sync=function n(e,t,i){(!t||typeof t!="object")&&(t={mode:t});var r=t.mode,o=t.fs||Y3;r===void 0&&(r=Z3),i||(i=null),e=fm.resolve(e);try{o.mkdirSync(e,r),i=i||e}catch(a){switch(a.code){case"ENOENT":i=n(fm.dirname(e),t,i),n(e,t,i);break;default:var s;try{s=o.statSync(e)}catch{throw a}if(!s.isDirectory())throw a;break}}return i}});var z3=y((Uqe,G3)=>{var FSe=require("fs"),U3=require("path"),jSe=require("util"),MSe=$3(),X3=require("stream").Transform,OSe=hI();function za(n){if(!(this instanceof za))return new za(n);X3.call(this),this.opts=n||{},this.unzipStream=new OSe(this.opts),this.unfinishedEntries=0,this.afterFlushWait=!1,this.createdDirectories={};var e=this;this.unzipStream.on("entry",this._processEntry.bind(this)),this.unzipStream.on("error",function(t){e.emit("error",t)})}jSe.inherits(za,X3);za.prototype._transform=function(n,e,t){this.unzipStream.write(n,e,t)};za.prototype._flush=function(n){var e=this,t=function(){process.nextTick(function(){e.emit("close")}),n()};this.unzipStream.end(function(){if(e.unfinishedEntries>0)return e.afterFlushWait=!0,e.on("await-finished",t);t()})};za.prototype._processEntry=function(n){var e=this,t=U3.join(this.opts.path,n.path),i=n.isDirectory?t:U3.dirname(t);this.unfinishedEntries++;var r=function(){var o=FSe.createWriteStream(t);o.on("close",function(){e.unfinishedEntries--,e._notifyAwaiter()}),o.on("error",function(s){e.emit("error",s)}),n.pipe(o)};if(this.createdDirectories[i]||i===".")return r();MSe(i,function(o){if(o)return e.emit("error",o);if(e.createdDirectories[i]=!0,n.isDirectory){e.unfinishedEntries--,e._notifyAwaiter();return}r()})};za.prototype._notifyAwaiter=function(){this.afterFlushWait&&this.unfinishedEntries===0&&(this.emit("await-finished"),this.afterFlushWait=!1)};G3.exports=za});var K3=y(dI=>{"use strict";dI.Parse=W3();dI.Extract=z3()});var V3=y((Gqe,Q3)=>{"use strict";var ASe=["aborted","complete","headers","httpVersion","httpVersionMinor","httpVersionMajor","method","rawHeaders","rawTrailers","setTimeout","socket","statusCode","statusMessage","trailers","url"];Q3.exports=(n,e)=>{if(e._readableState.autoDestroy)throw new Error("The second stream must have the `autoDestroy` option set to `false`");let t=new Set(Object.keys(n).concat(ASe)),i={};for(let r of t)r in e||(i[r]={get(){let o=n[r];return typeof o=="function"?o.bind(n):o},set(o){n[r]=o},enumerable:!0,configurable:!1});return Object.defineProperties(e,i),n.once("aborted",()=>{e.destroy(),e.emit("aborted")}),n.once("close",()=>{n.complete&&e.readable?e.once("end",()=>{e.emit("close")}):e.emit("close")}),e}});var tK=y((zqe,eK)=>{"use strict";var{Transform:NSe,PassThrough:HSe}=require("stream"),gI=require("zlib"),qSe=V3();eK.exports=n=>{let e=(n.headers["content-encoding"]||"").toLowerCase();if(!["gzip","deflate","br"].includes(e))return n;let t=e==="br";if(t&&typeof gI.createBrotliDecompress!="function")return n.destroy(new Error("Brotli is not supported on Node.js < 12")),n;let i=!0,r=new NSe({transform(a,l,u){i=!1,u(null,a)},flush(a){a()}}),o=new HSe({autoDestroy:!1,destroy(a,l){n.destroy(),l(a)}}),s=t?gI.createBrotliDecompress():gI.createUnzip();return s.once("error",a=>{if(i&&!n.readable){o.end();return}o.destroy(a)}),qSe(n,o),n.pipe(r).pipe(s).pipe(o),o}});var nK=y((Kqe,iK)=>{var mm;iK.exports=function(){if(!mm){try{mm=Yt()("follow-redirects")}catch{}typeof mm!="function"&&(mm=function(){})}mm.apply(null,arguments)}});var hK=y((Qqe,yI)=>{var Cu=require("url"),pI=Cu.URL,BSe=require("http"),WSe=require("https"),sK=require("stream").Writable,aK=require("assert"),lK=nK(),mI=["abort","aborted","connect","error","socket","timeout"],bI=Object.create(null);mI.forEach(function(n){bI[n]=function(e,t,i){this._redirectable.emit(n,e,t,i)}});var YSe=ym("ERR_INVALID_URL","Invalid URL",TypeError),rK=ym("ERR_FR_REDIRECTION_FAILURE","Redirected request failed"),ZSe=ym("ERR_FR_TOO_MANY_REDIRECTS","Maximum number of redirects exceeded"),JSe=ym("ERR_FR_MAX_BODY_LENGTH_EXCEEDED","Request body larger than maxBodyLength limit"),$Se=ym("ERR_STREAM_WRITE_AFTER_END","write after end");function ar(n,e){sK.call(this),this._sanitizeOptions(n),this._options=n,this._ended=!1,this._ending=!1,this._redirectCount=0,this._redirects=[],this._requestBodyLength=0,this._requestBodyBuffers=[],e&&this.on("response",e);var t=this;this._onNativeResponse=function(i){t._processResponse(i)},this._performRequest()}ar.prototype=Object.create(sK.prototype);ar.prototype.abort=function(){cK(this._currentRequest),this.emit("abort")};ar.prototype.write=function(n,e,t){if(this._ending)throw new $Se;if(!Su(n)&&!GSe(n))throw new TypeError("data should be a string, Buffer or Uint8Array");if(bm(e)&&(t=e,e=null),n.length===0){t&&t();return}this._requestBodyLength+n.length<=this._options.maxBodyLength?(this._requestBodyLength+=n.length,this._requestBodyBuffers.push({data:n,encoding:e}),this._currentRequest.write(n,e,t)):(this.emit("error",new JSe),this.abort())};ar.prototype.end=function(n,e,t){if(bm(n)?(t=n,n=e=null):bm(e)&&(t=e,e=null),!n)this._ended=this._ending=!0,this._currentRequest.end(null,null,t);else{var i=this,r=this._currentRequest;this.write(n,e,function(){i._ended=!0,r.end(null,null,t)}),this._ending=!0}};ar.prototype.setHeader=function(n,e){this._options.headers[n]=e,this._currentRequest.setHeader(n,e)};ar.prototype.removeHeader=function(n){delete this._options.headers[n],this._currentRequest.removeHeader(n)};ar.prototype.setTimeout=function(n,e){var t=this;function i(s){s.setTimeout(n),s.removeListener("timeout",s.destroy),s.addListener("timeout",s.destroy)}function r(s){t._timeout&&clearTimeout(t._timeout),t._timeout=setTimeout(function(){t.emit("timeout"),o()},n),i(s)}function o(){t._timeout&&(clearTimeout(t._timeout),t._timeout=null),t.removeListener("abort",o),t.removeListener("error",o),t.removeListener("response",o),e&&t.removeListener("timeout",e),t.socket||t._currentRequest.removeListener("socket",r)}return e&&this.on("timeout",e),this.socket?r(this.socket):this._currentRequest.once("socket",r),this.on("socket",i),this.on("abort",o),this.on("error",o),this.on("response",o),this};["flushHeaders","getHeader","setNoDelay","setSocketKeepAlive"].forEach(function(n){ar.prototype[n]=function(e,t){return this._currentRequest[n](e,t)}});["aborted","connection","socket"].forEach(function(n){Object.defineProperty(ar.prototype,n,{get:function(){return this._currentRequest[n]}})});ar.prototype._sanitizeOptions=function(n){if(n.headers||(n.headers={}),n.host&&(n.hostname||(n.hostname=n.host),delete n.host),!n.pathname&&n.path){var e=n.path.indexOf("?");e<0?n.pathname=n.path:(n.pathname=n.path.substring(0,e),n.search=n.path.substring(e))}};ar.prototype._performRequest=function(){var n=this._options.protocol,e=this._options.nativeProtocols[n];if(!e){this.emit("error",new TypeError("Unsupported protocol "+n));return}if(this._options.agents){var t=n.slice(0,-1);this._options.agent=this._options.agents[t]}var i=this._currentRequest=e.request(this._options,this._onNativeResponse);i._redirectable=this;for(var r of mI)i.on(r,bI[r]);if(this._currentUrl=/^\//.test(this._options.path)?Cu.format(this._options):this._options.path,this._isRedirect){var o=0,s=this,a=this._requestBodyBuffers;(function l(u){if(i===s._currentRequest)if(u)s.emit("error",u);else if(o=400){n.responseUrl=this._currentUrl,n.redirects=this._redirects,this.emit("response",n),this._requestBodyBuffers=[];return}if(cK(this._currentRequest),n.destroy(),++this._redirectCount>this._options.maxRedirects){this.emit("error",new ZSe);return}var i,r=this._options.beforeRedirect;r&&(i=Object.assign({Host:n.req.getHeader("host")},this._options.headers));var o=this._options.method;((e===301||e===302)&&this._options.method==="POST"||e===303&&!/^(?:GET|HEAD)$/.test(this._options.method))&&(this._options.method="GET",this._requestBodyBuffers=[],fI(/^content-/i,this._options.headers));var s=fI(/^host$/i,this._options.headers),a=Cu.parse(this._currentUrl),l=s||a.host,u=/^\w+:/.test(t)?this._currentUrl:Cu.format(Object.assign(a,{host:l})),c;try{c=Cu.resolve(u,t)}catch(p){this.emit("error",new rK({cause:p}));return}lK("redirecting to",c),this._isRedirect=!0;var h=Cu.parse(c);if(Object.assign(this._options,h),(h.protocol!==a.protocol&&h.protocol!=="https:"||h.host!==l&&!XSe(h.host,l))&&fI(/^(?:authorization|cookie)$/i,this._options.headers),bm(r)){var d={headers:n.headers,statusCode:e},g={url:u,method:o,headers:i};try{r(this._options,d,g)}catch(p){this.emit("error",p);return}this._sanitizeOptions(this._options)}try{this._performRequest()}catch(p){this.emit("error",new rK({cause:p}))}};function uK(n){var e={maxRedirects:21,maxBodyLength:10485760},t={};return Object.keys(n).forEach(function(i){var r=i+":",o=t[r]=n[i],s=e[i]=Object.create(o);function a(u,c,h){if(Su(u)){var d;try{d=oK(new pI(u))}catch{d=Cu.parse(u)}if(!Su(d.protocol))throw new YSe({input:u});u=d}else pI&&u instanceof pI?u=oK(u):(h=c,c=u,u={protocol:r});return bm(c)&&(h=c,c=null),c=Object.assign({maxRedirects:e.maxRedirects,maxBodyLength:e.maxBodyLength},u,c),c.nativeProtocols=t,!Su(c.host)&&!Su(c.hostname)&&(c.hostname="::1"),aK.equal(c.protocol,r,"protocol mismatch"),lK("options",c),new ar(c,h)}function l(u,c,h){var d=s.request(u,c,h);return d.end(),d}Object.defineProperties(s,{request:{value:a,configurable:!0,enumerable:!0,writable:!0},get:{value:l,configurable:!0,enumerable:!0,writable:!0}})}),e}function USe(){}function oK(n){var e={protocol:n.protocol,hostname:n.hostname.startsWith("[")?n.hostname.slice(1,-1):n.hostname,hash:n.hash,search:n.search,pathname:n.pathname,path:n.pathname+n.search,href:n.href};return n.port!==""&&(e.port=Number(n.port)),e}function fI(n,e){var t;for(var i in e)n.test(i)&&(t=e[i],delete e[i]);return t===null||typeof t>"u"?void 0:String(t).trim()}function ym(n,e,t){function i(r){Error.captureStackTrace(this,this.constructor),Object.assign(this,r||{}),this.code=n,this.message=this.cause?e+": "+this.cause.message:e}return i.prototype=new(t||Error),i.prototype.constructor=i,i.prototype.name="Error ["+n+"]",i}function cK(n){for(var e of mI)n.removeListener(e,bI[e]);n.on("error",USe),n.abort()}function XSe(n,e){aK(Su(n)&&Su(e));var t=n.length-e.length-1;return t>0&&n[t]==="."&&n.endsWith(e)}function Su(n){return typeof n=="string"||n instanceof String}function bm(n){return typeof n=="function"}function GSe(n){return typeof n=="object"&&"length"in n}yI.exports=uK({http:BSe,https:WSe});yI.exports.wrap=uK});var dK=y(vI=>{"use strict";Object.defineProperty(vI,"__esModule",{value:!0});function zSe(n,e,{signal:t}={}){return new Promise((i,r)=>{function o(){t==null||t.removeEventListener("abort",o),n.removeListener(e,s),n.removeListener("error",a)}function s(...l){o(),i(l)}function a(l){o(),r(l)}t==null||t.addEventListener("abort",o),n.on(e,s),n.on("error",a)})}vI.default=zSe});var gK=y(wI=>{"use strict";Object.defineProperty(wI,"__esModule",{value:!0});function KSe(n){return function(e,t){return new Promise((i,r)=>{n.call(this,e,t,(o,s)=>{o?r(o):i(s)})})}}wI.default=KSe});var SI=y((CI,fK)=>{"use strict";var pK=CI&&CI.__importDefault||function(n){return n&&n.__esModule?n:{default:n}},QSe=require("events"),VSe=pK(Yt()),eDe=pK(gK()),vm=VSe.default("agent-base");function tDe(n){return Boolean(n)&&typeof n.addRequest=="function"}function xI(){let{stack:n}=new Error;return typeof n!="string"?!1:n.split(` -`).some(e=>e.indexOf("(https.js:")!==-1||e.indexOf("node:https:")!==-1)}function qC(n,e){return new qC.Agent(n,e)}(function(n){class e extends QSe.EventEmitter{constructor(i,r){super();let o=r;typeof i=="function"?this.callback=i:i&&(o=i),this.timeout=null,o&&typeof o.timeout=="number"&&(this.timeout=o.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return typeof this.explicitDefaultPort=="number"?this.explicitDefaultPort:xI()?443:80}set defaultPort(i){this.explicitDefaultPort=i}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:xI()?"https:":"http:"}set protocol(i){this.explicitProtocol=i}callback(i,r,o){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(i,r){let o=Object.assign({},r);typeof o.secureEndpoint!="boolean"&&(o.secureEndpoint=xI()),o.host==null&&(o.host="localhost"),o.port==null&&(o.port=o.secureEndpoint?443:80),o.protocol==null&&(o.protocol=o.secureEndpoint?"https:":"http:"),o.host&&o.path&&delete o.path,delete o.agent,delete o.hostname,delete o._defaultAgent,delete o.defaultPort,delete o.createConnection,i._last=!0,i.shouldKeepAlive=!1;let s=!1,a=null,l=o.timeout||this.timeout,u=g=>{i._hadError||(i.emit("error",g),i._hadError=!0)},c=()=>{a=null,s=!0;let g=new Error(`A "socket" was not created for HTTP request before ${l}ms`);g.code="ETIMEOUT",u(g)},h=g=>{s||(a!==null&&(clearTimeout(a),a=null),u(g))},d=g=>{if(s)return;if(a!=null&&(clearTimeout(a),a=null),tDe(g)){vm("Callback returned another Agent instance %o",g.constructor.name),g.addRequest(i,o);return}if(g){g.once("free",()=>{this.freeSocket(g,o)}),i.onSocket(g);return}let p=new Error(`no Duplex stream was returned to agent-base for \`${i.method} ${i.path}\``);u(p)};if(typeof this.callback!="function"){u(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(vm("Converting legacy callback function to promise"),this.promisifiedCallback=eDe.default(this.callback)):this.promisifiedCallback=this.callback),typeof l=="number"&&l>0&&(a=setTimeout(c,l)),"port"in o&&typeof o.port!="number"&&(o.port=Number(o.port));try{vm("Resolving socket for %o request: %o",o.protocol,`${i.method} ${i.path}`),Promise.resolve(this.promisifiedCallback(i,o)).then(d,h)}catch(g){Promise.reject(g).catch(h)}}freeSocket(i,r){vm("Freeing socket %o %o",i.constructor.name,r),i.destroy()}destroy(){vm("Destroying agent %o",this.constructor.name)}}n.Agent=e,n.prototype=n.Agent.prototype})(qC||(qC={}));fK.exports=qC});var mK=y(Du=>{"use strict";var iDe=Du&&Du.__awaiter||function(n,e,t,i){function r(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function a(c){try{u(i.next(c))}catch(h){s(h)}}function l(c){try{u(i.throw(c))}catch(h){s(h)}}function u(c){c.done?o(c.value):r(c.value).then(a,l)}u((i=i.apply(n,e||[])).next())})},wm=Du&&Du.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Du,"__esModule",{value:!0});var nDe=wm(require("net")),rDe=wm(require("tls")),DI=wm(require("url")),oDe=wm(Yt()),sDe=wm(dK()),aDe=SI(),Ka=(0,oDe.default)("http-proxy-agent");function lDe(n){return typeof n=="string"?/^https:?$/i.test(n):!1}var TI=class extends aDe.Agent{constructor(e){let t;if(typeof e=="string"?t=DI.default.parse(e):t=e,!t)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");Ka("Creating new HttpProxyAgent instance: %o",t),super(t);let i=Object.assign({},t);this.secureProxy=t.secureProxy||lDe(i.protocol),i.host=i.hostname||i.host,typeof i.port=="string"&&(i.port=parseInt(i.port,10)),!i.port&&i.host&&(i.port=this.secureProxy?443:80),i.host&&i.path&&(delete i.path,delete i.pathname),this.proxy=i}callback(e,t){return iDe(this,void 0,void 0,function*(){let{proxy:i,secureProxy:r}=this,o=DI.default.parse(e.path);o.protocol||(o.protocol="http:"),o.hostname||(o.hostname=t.hostname||t.host||null),o.port==null&&typeof t.port&&(o.port=String(t.port)),o.port==="80"&&(o.port=""),e.path=DI.default.format(o),i.auth&&e.setHeader("Proxy-Authorization",`Basic ${Buffer.from(i.auth).toString("base64")}`);let s;if(r?(Ka("Creating `tls.Socket`: %o",i),s=rDe.default.connect(i)):(Ka("Creating `net.Socket`: %o",i),s=nDe.default.connect(i)),e._header){let a,l;Ka("Regenerating stored HTTP header string for request"),e._header=null,e._implicitHeader(),e.output&&e.output.length>0?(Ka("Patching connection write() output buffer with updated header"),a=e.output[0],l=a.indexOf(`\r -\r -`)+4,e.output[0]=e._header+a.substring(l),Ka("Output buffer: %o",e.output)):e.outputData&&e.outputData.length>0&&(Ka("Patching connection write() output buffer with updated header"),a=e.outputData[0].data,l=a.indexOf(`\r -\r -`)+4,e.outputData[0].data=e._header+a.substring(l),Ka("Output buffer: %o",e.outputData[0].data))}return yield(0,sDe.default)(s,"connect"),s})}};Du.default=TI});var yK=y((EI,bK)=>{"use strict";var uDe=EI&&EI.__importDefault||function(n){return n&&n.__esModule?n:{default:n}},kI=uDe(mK());function PI(n){return new kI.default(n)}(function(n){n.HttpProxyAgent=kI.default,n.prototype=kI.default.prototype})(PI||(PI={}));bK.exports=PI});var vK=y(Cm=>{"use strict";var cDe=Cm&&Cm.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Cm,"__esModule",{value:!0});var hDe=cDe(Yt()),xm=hDe.default("https-proxy-agent:parse-proxy-response");function dDe(n){return new Promise((e,t)=>{let i=0,r=[];function o(){let h=n.read();h?c(h):n.once("readable",o)}function s(){n.removeListener("end",l),n.removeListener("error",u),n.removeListener("close",a),n.removeListener("readable",o)}function a(h){xm("onclose had error %o",h)}function l(){xm("onend")}function u(h){s(),xm("onerror %o",h),t(h)}function c(h){r.push(h),i+=h.length;let d=Buffer.concat(r,i);if(d.indexOf(`\r -\r -`)===-1){xm("have not received end of HTTP headers yet..."),o();return}let p=d.toString("ascii",0,d.indexOf(`\r -`)),f=+p.split(" ")[1];xm("got proxy server response: %o",p),e({statusCode:f,buffered:d})}n.on("error",u),n.on("close",a),n.on("end",l),o()})}Cm.default=dDe});var CK=y(Tu=>{"use strict";var gDe=Tu&&Tu.__awaiter||function(n,e,t,i){function r(o){return o instanceof t?o:new t(function(s){s(o)})}return new(t||(t=Promise))(function(o,s){function a(c){try{u(i.next(c))}catch(h){s(h)}}function l(c){try{u(i.throw(c))}catch(h){s(h)}}function u(c){c.done?o(c.value):r(c.value).then(a,l)}u((i=i.apply(n,e||[])).next())})},od=Tu&&Tu.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(Tu,"__esModule",{value:!0});var wK=od(require("net")),xK=od(require("tls")),pDe=od(require("url")),fDe=od(require("assert")),mDe=od(Yt()),bDe=SI(),yDe=od(vK()),Sm=mDe.default("https-proxy-agent:agent"),RI=class extends bDe.Agent{constructor(e){let t;if(typeof e=="string"?t=pDe.default.parse(e):t=e,!t)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");Sm("creating new HttpsProxyAgent instance: %o",t),super(t);let i=Object.assign({},t);this.secureProxy=t.secureProxy||xDe(i.protocol),i.host=i.hostname||i.host,typeof i.port=="string"&&(i.port=parseInt(i.port,10)),!i.port&&i.host&&(i.port=this.secureProxy?443:80),this.secureProxy&&!("ALPNProtocols"in i)&&(i.ALPNProtocols=["http 1.1"]),i.host&&i.path&&(delete i.path,delete i.pathname),this.proxy=i}callback(e,t){return gDe(this,void 0,void 0,function*(){let{proxy:i,secureProxy:r}=this,o;r?(Sm("Creating `tls.Socket`: %o",i),o=xK.default.connect(i)):(Sm("Creating `net.Socket`: %o",i),o=wK.default.connect(i));let s=Object.assign({},i.headers),l=`CONNECT ${`${t.host}:${t.port}`} HTTP/1.1\r -`;i.auth&&(s["Proxy-Authorization"]=`Basic ${Buffer.from(i.auth).toString("base64")}`);let{host:u,port:c,secureEndpoint:h}=t;wDe(c,h)||(u+=`:${c}`),s.Host=u,s.Connection="close";for(let m of Object.keys(s))l+=`${m}: ${s[m]}\r -`;let d=yDe.default(o);o.write(`${l}\r -`);let{statusCode:g,buffered:p}=yield d;if(g===200){if(e.once("socket",vDe),t.secureEndpoint){let m=t.servername||t.host;if(!m)throw new Error('Could not determine "servername"');return Sm("Upgrading socket connection to TLS"),xK.default.connect(Object.assign(Object.assign({},CDe(t,"host","hostname","path","port")),{socket:o,servername:m}))}return o}o.destroy();let f=new wK.default.Socket;return f.readable=!0,e.once("socket",m=>{Sm("replaying proxy buffer for failed request"),fDe.default(m.listenerCount("data")>0),m.push(p),m.push(null)}),f})}};Tu.default=RI;function vDe(n){n.resume()}function wDe(n,e){return Boolean(!e&&n===80||e&&n===443)}function xDe(n){return typeof n=="string"?/^https:?$/i.test(n):!1}function CDe(n,...e){let t={},i;for(i in n)e.includes(i)||(t[i]=n[i]);return t}});var DK=y((II,SK)=>{"use strict";var SDe=II&&II.__importDefault||function(n){return n&&n.__esModule?n:{default:n}},_I=SDe(CK());function LI(n){return new _I.default(n)}(function(n){n.HttpsProxyAgent=_I.default,n.prototype=_I.default.prototype})(LI||(LI={}));SK.exports=LI});function FI(n){return n||""}function jI(n){return n.protocol==="https:"?WC.https:WC.http}function DDe(n){return typeof n=="string"||Buffer.isBuffer(n)?n:JSON.stringify(n)}function MI(n){if(n instanceof BC.URL)return n;let e=new BC.URL(n);if(!["https:","http:"].includes(e.protocol))throw new Error(`Not valid protocol with ${n}, should be http: or https:`);return e}function TDe(n){return n===null?"null":n===void 0?"undefined":typeof n=="string"?"string":Buffer.isBuffer(n)?"buffer":Array.isArray(n)||hi(n)?"object":"unknown"}function kDe(n,e=process.env){let t=e.NO_PROXY??e.no_proxy;if(t==="*")return null;if(t){let r=n.hostname.replace(/^\.*/,".").toLowerCase(),o=n.port||n.protocol.startsWith("https")?"443":"80",s=t.split(",");for(let a=0,l=s.length;a{if(i){let u=i.onCancellationRequested(()=>{u.dispose(),l.destroy(new ii)})}let a,l=r.request(t,u=>{let c=u;if(u.statusCode>=200&&u.statusCode<300||u.statusCode===1223){let h=u.headers,d=[],g=h["content-type"]||"";c=(0,TK.default)(u),c.on("data",p=>{d.push(p)}),c.on("end",()=>{clearTimeout(a);let p=Buffer.concat(d);if(!t.buffer&&(g.startsWith("application/json")||g.startsWith("text/"))){let f=g.match(/charset=(\S+)/),m=f?f[1]:"utf8",b=p.toString(m);if(!g.includes("application/json"))o(b);else try{let w=JSON.parse(b);o(w)}catch(w){s(new Error(`Parse response error: ${w}`))}}else o(p)}),c.on("error",p=>{s(new Error(`Connection error to ${n}: ${p.message}`))})}else s(new Error(`Bad response from ${n}: ${u.statusCode}`))});l.on("error",u=>{t.agent&&u.code=="ECONNRESET"?a=setTimeout(()=>{s(u)},500):s(u)}),l.on("timeout",()=>{l.destroy(new Error(`Request timeout after ${t.timeout}ms`))}),e&&l.write(DDe(e)),t.timeout&&l.setTimeout(t.timeout),l.end()})}function Dm(n,e={},t){let i=MI(n),r=OI(i,e);return EDe(i,e.data,r,t).catch(o=>{if(_K.error(`Fetch error for ${i}:`,r,o),r.agent&&r.agent.proxy){let{proxy:s}=r.agent;throw new Error(`Request failed using proxy ${s.host}: ${o.message}`)}else throw o})}var TK,WC,kK,PK,EK,RK,BC,_K,YC=k(()=>{"use strict";TK=S(tK()),WC=S(hK()),kK=S(require("fs")),PK=S(yK()),EK=S(DK()),RK=require("querystring"),BC=require("url");xr();wi();ie();_K=q()("model-fetch")});function RDe(n){let e=n.etag;if(typeof e=="string"&&(e=e.replace(/^W\//,""),!(!e.startsWith('"')||!e.endsWith('"'))))return e.slice(1,-1)}function Pm(n,e,t){let i=MI(n),{etagAlgorithm:r}=e,{dest:o,onProgress:s,extract:a}=e;if(!o||!km.default.isAbsolute(o))throw new Error("Expect absolute file path for dest option.");if(!Tm.default.existsSync(o))Tm.default.mkdirSync(o,{recursive:!0});else{let d=Tm.default.statSync(o);if(d&&!d.isDirectory())throw new Error(`${o} exists, but not directory!`)}let l=jI(i),u=OI(i,e);!u.agent&&e.agent&&(u.agent=e.agent);let c=km.default.extname(i.pathname),h=!1;return new Promise((d,g)=>{if(t){let m=t.onCancellationRequested(()=>{m.dispose(),f.destroy(new Error("request aborted"))})}let p,f=l.request(u,m=>{var b;if(m.statusCode>=200&&m.statusCode<300||m.statusCode===1223){let w=m.headers??{},x=w["content-disposition"],T=RDe(w),R=T&&typeof r=="string";if(!c&&x){let L=LK.default.parse(x);(b=L.parameters)!=null&&b.filename&&(c=km.default.extname(L.parameters.filename))}if(a===!0)if(c===".zip"||w["content-type"]=="application/zip")a="unzip";else if(c==".tgz")a="untar";else{g(new Error(`Unable to detect extract method for ${i}`));return}let F=Number(w["content-length"]),N=!isNaN(F),J=0;m.on("error",L=>{g(new Error(`Unable to connect ${i}: ${L.message}`))});let H=R?IK.default.createHash(r):void 0;m.on("data",L=>{if(J+=L.length,H&&H.update(L),N){let O=(J/F*100).toFixed(1);typeof s=="function"?s(O):AI.info(`Download ${i} progress ${O}%`)}}),m.on("end",()=>{h||(clearTimeout(p),p=void 0,AI.info("Download completed:",i))});let M;a==="untar"?M=m.pipe(FK.default.x({strip:e.strip??1,C:o})):a==="unzip"?M=m.pipe(jK.default.Extract({path:o})):(o=km.default.join(o,`${ps()}${c}`),M=m.pipe(Tm.default.createWriteStream(o))),M.on("finish",()=>{if(!h){if(H&&H.digest("hex")!==T){g(new Error(`Etag check failed by ${r}, content not match.`));return}AI.info(`Downloaded ${i} => ${o}`),setTimeout(()=>{d(o)},100)}}),M.on("error",g)}else g(new Error(`Invalid response from ${i}: ${m.statusCode}`))});f.on("error",m=>{if(u.agent&&m.code=="ECONNRESET")p=setTimeout(()=>{h=!0,g(m)},500);else{if(clearTimeout(p),u.agent&&u.agent.proxy){g(new Error(`Request failed using proxy ${u.agent.proxy.host}: ${m.message}`));return}h=!0,g(m)}}),f.on("timeout",()=>{f.destroy(new Error(`request timeout after ${e.timeout}ms`))}),typeof e.timeout=="number"&&e.timeout&&f.setTimeout(e.timeout),f.end()})}var LK,IK,Tm,km,FK,jK,AI,NI=k(()=>{"use strict";LK=S(F2()),IK=S(require("crypto")),Tm=S(require("fs")),km=S(require("path")),FK=S(b3()),jK=S(K3());qe();YC();AI=q()("model-download")});function LDe(n=NK.default.homedir()){let e,t=qn.default.join(n,".npmrc");if(qo.default.existsSync(t))try{let i=qo.default.readFileSync(t,"utf8"),r;for(let o of i.split(/\r?\n/)){if(o.startsWith("#"))continue;let s=o.match(/^(.*?)=(.*)$/);s&&s[1]==="coc.nvim:registry"&&(r=s[2])}r&&(e=new JC.URL(r))}catch(i){qK.debug("Error on parse .npmrc:",i)}return e??new JC.URL("https://registry.npmjs.org")}function IDe(n){let e=qn.default.basename(n);return e==="npm"||e==="npm.CMD"}function FDe(n){let e=qn.default.basename(n);return["yarn","yarn.CMD","yarnpkg","yarnpkg.CMD"].includes(e)}function jDe(n){let e=qn.default.basename(n);return e==="pnpm"||e==="pnpm.CMD"}function MK(n){return!!(qo.default.existsSync(n)&&qo.default.lstatSync(n).isSymbolicLink())}function MDe(n){return Object.keys(n.dependencies??{}).filter(e=>!_De.includes(e))}var OK,AK,qo,NK,qn,HK,ZC,JC,qK,_De,$C,BK=k(()=>{"use strict";OK=require("child_process"),AK=require("events"),qo=S(require("fs")),NK=S(require("os")),qn=S(require("path")),HK=S(require("readline")),ZC=S(of());qe();JC=require("url");NI();YC();ie();$e();qK=q()("extension-installer"),_De=["coc.nvim","esbuild","webpack","@types/node"];$C=class extends AK.EventEmitter{constructor(t,i,r){super();this.root=t;this.npm=i;this.def=r;if(/^https?:/.test(r))this.url=r;else{let o=r.match(/(.+)@([^/]+)$/);o?(this.name=o[1],this.version=o[2]):this.name=r}}get info(){return{name:this.name,version:this.version}}async getInfo(){if(this.url)return await this.getInfoFromUri();let t=LDe();this.log(`Get info from ${t}`);let i=await this.fetch(new JC.URL(this.name,t),{timeout:1e4,buffer:!0}),r=JSON.parse(i.toString());this.version||(this.version=r["dist-tags"].latest);let o=r.versions[this.version];if(!o)throw new Error(`${this.def} doesn't exists in ${t}.`);let s=o.engines&&o.engines.coc;if(!s)throw new Error(`${this.def} is not a valid coc extension, "engines" field with coc property required.`);return{"dist.tarball":o.dist.tarball,"engines.coc":s,version:o.version,name:r.name}}async getInfoFromUri(){let{url:t}=this;if(!t.startsWith("https://github.com"))throw new Error(`"${t}" is not supported, coc.nvim support github.com only`);t=t.replace(/\/$/,"");let i="master";if(t.includes("@")){let a=t.indexOf("@");i=t.substr(a+1),t=t.substring(0,a)}let r=t.replace("github.com","raw.githubusercontent.com")+`/${i}/package.json`;this.log(`Get info from ${r}`);let o=await this.fetch(r,{timeout:1e4}),s=typeof o=="string"?JSON.parse(o):o;return this.name=s.name,{"dist.tarball":`${t}/archive/${i}.tar.gz`,"engines.coc":s.engines?s.engines.coc:null,name:s.name,version:s.version}}log(t,i=!1){this.emit("message",t,i)}async install(){this.log(`Using npm from: ${this.npm}`);let t=await this.getInfo();qK.info(`Fetched info of ${this.def}`,t);let{name:i,version:r}=t,o=t["engines.coc"]?t["engines.coc"].replace(/^\^/,">="):"";if(o&&!ZC.default.satisfies(v.version,o))throw new Error(`${i} ${t.version} requires coc.nvim >= ${o}, please update coc.nvim.`);let s=await this.doInstall(t);return{name:i,updated:s,version:r,url:this.url,folder:qn.default.join(this.root,t.name)}}async update(t){t&&(this.url=t);let i;if(this.name){let l=qn.default.join(this.root,this.name);if(MK(l)){this.log("Skipped update for symbol link");return}i=gi(qn.default.join(l,"package.json")).version}this.log(`Using npm from: ${this.npm}`);let r=await this.getInfo();if(i&&r.version&&ZC.default.gte(i,r.version)){this.log(`Current version ${i} is up to date.`);return}let o=r["engines.coc"]?r["engines.coc"].replace(/^\^/,">="):"";if(o&&!ZC.default.satisfies(v.version,o))throw new Error(`${r.version} requires coc.nvim ${o}, please update coc.nvim.`);if(!await this.doInstall(r))return;let a=qn.default.join(this.root,r.name,"package.json");return this.log(`Updated to v${r.version}`),qn.default.dirname(a)}getInstallArguments(t,i){let r=["install","--ignore-scripts","--no-lockfile"];return i&&i.startsWith("https://github.com")&&(r=["install"]),IDe(t)&&(r.push("--omit=dev"),r.push("--legacy-peer-deps"),r.push("--no-global")),FDe(t)&&(r.push("--production"),r.push("--ignore-engines")),jDe(t)&&(r.push("--production"),r.push("--config.strict-peer-dependencies=false")),r}readLines(t,i){HK.default.createInterface({input:i}).on("line",o=>{this.log(`${t} ${o}`,!0)})}installDependencies(t,i){return i.length==0?Promise.resolve():new Promise((r,o)=>{let s=this.getInstallArguments(this.npm,this.url);this.log(`Installing dependencies by: ${this.npm} ${s.join(" ")}.`);let a=(0,OK.spawn)(this.npm,s,{cwd:t,env:Object.assign(process.env,{NODE_ENV:"production"})});this.readLines("[npm stdout]",a.stdout),this.readLines("[npm stderr]",a.stderr),a.stderr.setEncoding("utf8"),a.stdout.setEncoding("utf8"),a.on("error",o),a.on("exit",l=>{if(l){o(new Error(`${this.npm} install exited with ${l}`));return}r()})})}async doInstall(t){let i=qn.default.join(this.root,t.name);if(MK(i))return!1;let r=t.name.replace(/\//g,"_"),o=qn.default.join(this.root,`${r}-${oe()}`),s=t["dist.tarball"];this.log(`Downloading from ${s}`);let a=s.startsWith("https://registry.npmjs.org")?"md5":void 0;try{await this.download(s,{dest:o,etagAlgorithm:a,extract:"untar",onProgress:u=>this.log(`Download progress ${u}%`,!0)}),this.log(`Extension download at ${o}`);let l=gi(qn.default.join(o,"package.json"));await this.installDependencies(o,MDe(l))}catch(l){throw qo.default.rmSync(o,{recursive:!0,force:!0}),l}return this.log(`Download extension ${t.name}@${t.version} at ${o}`),qo.default.mkdirSync(qn.default.dirname(i),{recursive:!0}),qo.default.existsSync(i)&&qo.default.rmSync(i,{force:!0,recursive:!0}),qo.default.renameSync(o,i),this.log(`Move extension ${t.name}@${t.version} to ${i}`),!0}async download(t,i){return await Pm(t,i)}async fetch(t,i={}){return await Dm(t,i)}}});var sd,TBe,Em,WK=k(()=>{"use strict";sd=S(require("fs"));$e();et();TBe=q()("model-memos"),Em=class{constructor(e){this.filepath=e;sd.default.existsSync(e)||sd.default.writeFileSync(e,"{}","utf8")}merge(e){if(!sd.default.existsSync(e))return;let t=gi(e),i=gi(this.filepath);Object.assign(i,t),Ca(this.filepath,i),sd.default.unlinkSync(e)}fetchContent(e,t){try{let i=sd.default.readFileSync(this.filepath,"utf8"),o=JSON.parse(i)[e];return o?o[t]:void 0}catch{return}}async update(e,t,i){let{filepath:r}=this,o=gi(r);o[e]=o[e]||{},i!==void 0?o[e][t]=Rn(i):delete o[e][t],Ca(r,o)}createMemento(e){return{get:(t,i)=>{let r=this.fetchContent(e,t);return r===void 0?i:r},update:async(t,i)=>{await this.update(e,t,i)}}}}});var Qa,HI=k(()=>{"use strict";Pe();xr();Qa=class{constructor(e,t){if(typeof e!="string"&&(!e||!j.isUri(e)&&typeof e.uri!="string"))throw G0("base");if(typeof t!="string")throw G0("pattern");typeof e=="string"?this.baseUri=j.file(e):j.isUri(e)?this.baseUri=e:this.baseUri=j.parse(e.uri),this.pattern=t}toJSON(){return{pattern:this.pattern,baseUri:this.baseUri.toJSON()}}}});var ZK=y((_Be,YK)=>{"use strict";YK.exports=W()});function JK(n,e){if(!n.killed)if(ODe)try{let t={stdio:["pipe","pipe","ignore"]};return e&&(t.cwd=e),Rm.execFileSync("taskkill",["/T","/F","/PID",n.pid.toString()],t),!0}catch{return!1}else if(NDe||ADe)try{let t=(0,UC.join)(HDe,"bin/terminateProcess.sh");return!Rm.spawnSync(t,[n.pid.toString()]).error}catch{return!1}else return n.kill("SIGKILL"),!0}var Rm,UC,ODe,ADe,NDe,HDe,$K=k(()=>{"use strict";Rm=S(require("child_process")),UC=require("path"),ODe=process.platform==="win32",ADe=process.platform==="darwin",NDe=process.platform==="linux",HDe=(0,UC.dirname)(__dirname)});function Se(){return oe()}var $t=k(()=>{"use strict";qe()});function Y(n,e){return n[e]===void 0&&(n[e]={}),n[e]}var Ls,ku,ho,XC,GC,Pu,Ir,me,Ze=k(()=>{"use strict";Ls=S(W());wi();ie();$t();xr();ku=class extends ii{constructor(t){super();this.data=t}},ho=class{constructor(e){this._client=e}sendRequest(e,t,i,r){return this._client.sendRequest(e,t,i).then(o=>i.isCancellationRequested||o==null?r??null:o,o=>this._client.handleFailedRequest(e,i,o,r??null))}};(e=>{function n(t){return t!=null&&Oi(t.fillClientCapabilities)&&Oi(t.initialize)&&Oi(t.dispose)&&(t.fillInitializeParams===void 0||Oi(t.fillInitializeParams))&&t.registrationType===void 0}e.is=n})(XC||(XC={}));(e=>{function n(t){let i=t;return i!=null&&Oi(i.fillClientCapabilities)&&Oi(i.initialize)&&Oi(i.dispose)&&(i.fillInitializeParams===void 0||Oi(i.fillInitializeParams))&&Oi(i.register)&&Oi(i.unregister)&&i.registrationType!==void 0}e.is=n})(GC||(GC={}));Pu=class extends ho{constructor(e){super(e)}getState(){let e=this.getDocumentSelectors(),t=0;for(let r of e){t++;for(let o of v.textDocuments)if(v.match(r,o)>0)return{kind:"document",id:this.registrationType.method,registrations:!0,matches:!0}}let i=t>0;return{kind:"document",id:this.registrationType.method,registrations:i,matches:!1}}},Ir=class extends Pu{constructor(t,i,r,o,s,a){super(t);this._event=i,this._type=r,this._middleware=o,this._createParams=s,this._selectorFilter=a,this._selectors=new Map,this._onNotificationSent=new Ls.Emitter}static textDocumentFilter(t,i){for(let r of t)if(v.match(r,i)>0)return!0;return!1}getDocumentSelectors(){return this._selectors.values()}register(t){!t.registerOptions.documentSelector||(this._listener||(this._listener=this._event(i=>{this.callback(i).catch(r=>{this._client.error(`Sending document notification ${this._type.method} failed.`,r)})})),this._selectors.set(t.id,t.registerOptions.documentSelector))}async callback(t){if(!this.matches(t))return;let i=async o=>{let s=this._createParams(o);await this._client.sendNotification(this._type,s).catch(),this.notificationSent(o,this._type,s)},r=this._client.middleware[this._middleware];return Promise.resolve(r?r(t,o=>i(o)):i(t))}matches(t){return!this._selectorFilter||this._selectorFilter(this._selectors.values(),t)}get onNotificationSent(){return this._onNotificationSent.event}notificationSent(t,i,r){this._onNotificationSent.fire({original:t,type:i,params:r})}unregister(t){this._selectors.delete(t)}dispose(){this._selectors.clear(),this._onNotificationSent.dispose(),this._listener&&(this._listener.dispose(),this._listener=void 0)}getProvider(t){for(let i of this.getDocumentSelectors())if(v.match(i,t)>0)return{send:r=>this.callback(r)}}},me=class extends Pu{constructor(t,i){super(t);this._registrationType=i,this._registrations=new Map}*getDocumentSelectors(){for(let t of this._registrations.values()){let i=t.data.registerOptions.documentSelector;i!==null&&(yield i)}}get registrationType(){return this._registrationType}get registrationLength(){return this._registrations.size}register(t){if(!t.registerOptions.documentSelector)return;let i=this.registerLanguageProvider(t.registerOptions,t.id);this._registrations.set(t.id,{disposable:i[0],data:t,provider:i[1]})}unregister(t){let i=this._registrations.get(t);i!==void 0&&i.disposable.dispose()}dispose(){this._registrations.forEach(t=>{t.disposable.dispose()}),this._registrations.clear()}getRegistration(t,i){if(!i)return[void 0,void 0];if(fa(i)&&i===!0)return[Se(),{documentSelector:t}];if(Ls.TextDocumentRegistrationOptions.is(i)){let r=Ls.StaticRegistrationOptions.hasId(i)?i.id:Se(),o=i.documentSelector??t;return[r,Object.assign({},i,{documentSelector:o})]}return Ls.WorkDoneProgressOptions.is(i)?[Ls.StaticRegistrationOptions.hasId(i)?i.id:Se(),Object.assign({},i,{documentSelector:t})]:[void 0,void 0]}getRegistrationOptions(t,i){if(!(!t||!i))return fa(i)&&i===!0?{documentSelector:t}:Object.assign({},i,{documentSelector:t})}getProvider(t){for(let i of this._registrations.values()){let r=i.data.registerOptions.documentSelector;if(r!==null&&v.match(r,t)>0)return i.provider}}getAllProviders(){let t=[];for(let i of this._registrations.values())t.push(i.provider);return t}}});function qDe(n){return{uri:n.uri,languageId:n.languageId,version:n.version,text:n.getText()}}function UK(n){return{textDocument:qDe(n)}}function XK(n){let{baseUri:e,pattern:t}=n;return typeof e=="string"?new Qa(j.parse(e),t):new Qa(e,t)}function GK(n){return{textDocument:{uri:n.uri}}}function zK(n){return{textDocument:{uri:n.uri,version:n.version},contentChanges:[{text:n.getText()}]}}function KK(n){let{textDocument:e,contentChanges:t}=n;return{textDocument:{uri:e.uri,version:e.version},contentChanges:t.slice()}}function qI(n){return{textDocument:zC(n.document),reason:n.reason}}function zC(n){return{uri:n.uri,version:n.version}}function QK(n,e){let t={textDocument:zC(n)};return e&&(t.text=n.getText()),t}function ad(n){return n.toString()}function VK(n,e,t){return{textDocument:{uri:n.uri},position:e,context:fn(t,["option"])}}function Ei(n,e){return{textDocument:{uri:n.uri},position:e}}function eQ(n,e,t){return{textDocument:go(n),position:e,context:t}}function go(n){return{uri:n.uri}}function tQ(n,e,t){return{textDocument:{uri:n.uri},position:e,context:{includeDeclaration:t.includeDeclaration}}}function iQ(n){return{textDocument:{uri:n.uri}}}function nQ(n){return{textDocument:{uri:n.uri}}}var Bt=k(()=>{"use strict";Pe();Cs();HI()});var Eu,KC,rQ=k(()=>{"use strict";Eu=S(W());de();Ze();Bt();KC=class extends me{constructor(e){super(e,Eu.CallHierarchyPrepareRequest.type)}fillClientCapabilities(e){let i=Y(Y(e,"textDocument"),"callHierarchy");i.dynamicRegistration=!0}initialize(e,t){let[i,r]=this.getRegistration(t,e.callHierarchyProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t={prepareCallHierarchy:(i,r,o)=>{let s=this._client,a=(u,c,h)=>{let d=Ei(u,c);return this.sendRequest(Eu.CallHierarchyPrepareRequest.type,d,h)},l=s.middleware;return l.prepareCallHierarchy?l.prepareCallHierarchy(i,r,o,a):a(i,r,o)},provideCallHierarchyIncomingCalls:(i,r)=>{let o=this._client,s=(l,u)=>this.sendRequest(Eu.CallHierarchyIncomingCallsRequest.type,{item:l},u),a=o.middleware;return a.provideCallHierarchyIncomingCalls?a.provideCallHierarchyIncomingCalls(i,r,s):s(i,r)},provideCallHierarchyOutgoingCalls:(i,r)=>{let o=this._client,s=(l,u)=>this.sendRequest(Eu.CallHierarchyOutgoingCallsRequest.type,{item:l},u),a=o.middleware;return a.provideCallHierarchyOutgoingCalls?a.provideCallHierarchyOutgoingCalls(i,r,s):s(i,r)}};return[_.registerCallHierarchyProvider(e.documentSelector,t),t]}}});var Ri,QC,oQ=k(()=>{"use strict";Ri=S(W());Jt();de();Ze();$t();QC=class extends me{constructor(t){super(t,Ri.CodeActionRequest.type);this.disposables=[]}fillClientCapabilities(t){let i=Y(Y(t,"textDocument"),"codeAction");i.dynamicRegistration=!0,i.isPreferredSupport=!0,i.disabledSupport=!0,i.dataSupport=!0,i.honorsChangeAnnotations=!1,i.resolveSupport={properties:["edit"]},i.codeActionLiteralSupport={codeActionKind:{valueSet:[Ri.CodeActionKind.Empty,Ri.CodeActionKind.QuickFix,Ri.CodeActionKind.Refactor,Ri.CodeActionKind.RefactorExtract,Ri.CodeActionKind.RefactorInline,Ri.CodeActionKind.RefactorRewrite,Ri.CodeActionKind.Source,Ri.CodeActionKind.SourceOrganizeImports]}}}initialize(t,i){let r=this.getRegistrationOptions(i,t.codeActionProvider);!r||this.register({id:Se(),registerOptions:r})}registerLanguageProvider(t){let i=o=>{let s=this._client,a=(u,c)=>{let h={command:u,arguments:c};return s.sendRequest(Ri.ExecuteCommandRequest.type,h)},l=s.middleware;this.disposables.push(ue.registerCommand(o,(...u)=>l.executeCommand?l.executeCommand(o,u,a):a(o,u),null,!0))},r={provideCodeActions:(o,s,a,l)=>{let u=this._client,c=(d,g,p,f)=>{let m={textDocument:{uri:d.uri},range:g,context:p};return this.sendRequest(Ri.CodeActionRequest.type,m,f).then(b=>{if(!!b)return b.forEach(w=>{var T;let x=Ri.Command.is(w)?w.command:(T=w.command)==null?void 0:T.command;x&&!ue.has(x)&&i(x)}),b})},h=u.middleware;return h.provideCodeActions?h.provideCodeActions(o,s,a,l,c):c(o,s,a,l)},resolveCodeAction:t.resolveProvider?(o,s)=>{let a=this._client.middleware,l=(u,c)=>this.sendRequest(Ri.CodeActionResolveRequest.type,u,c,u);return a.resolveCodeAction?a.resolveCodeAction(o,s,l):l(o,s)}:void 0};return[_.registerCodeActionProvider(t.documentSelector,r,this._client.id,t.codeActionKinds),r]}dispose(){this.disposables.forEach(t=>{t.dispose()}),this.disposables=[],super.dispose()}}});var Is,VC,sQ=k(()=>{"use strict";Is=S(W());$t();Ze();Bt();de();VC=class extends me{constructor(e){super(e,Is.CodeLensRequest.type)}fillClientCapabilities(e){Y(Y(e,"textDocument"),"codeLens").dynamicRegistration=!0,Y(Y(e,"workspace"),"codeLens").refreshSupport=!0}initialize(e,t){this._client.onRequest(Is.CodeLensRefreshRequest.type,async()=>{for(let o of this.getAllProviders())o.onDidChangeCodeLensEmitter.fire()});let r=this.getRegistrationOptions(t,e.codeLensProvider);!r||this.register({id:Se(),registerOptions:r})}registerLanguageProvider(e){let t=new Is.Emitter,i={onDidChangeCodeLenses:t.event,provideCodeLenses:(r,o)=>{let s=this._client,a=(u,c)=>this.sendRequest(Is.CodeLensRequest.type,nQ(u),c),l=s.middleware;return l.provideCodeLenses?l.provideCodeLenses(r,o,a):a(r,o)},resolveCodeLens:e.resolveProvider?(r,o)=>{let s=this._client,a=(u,c)=>this.sendRequest(Is.CodeLensResolveRequest.type,u,c,u),l=s.middleware;return l.resolveCodeLens?l.resolveCodeLens(r,o,a):a(r,o)}:void 0};return[_.registerCodeLensProvider(e.documentSelector,i),{provider:i,onDidChangeCodeLensEmitter:t}]}}});var _m,eS,aQ=k(()=>{"use strict";_m=S(W());de();Ze();eS=class extends me{constructor(e){super(e,_m.DocumentColorRequest.type)}fillClientCapabilities(e){Y(Y(e,"textDocument"),"colorProvider").dynamicRegistration=!0}initialize(e,t){let[i,r]=this.getRegistration(t,e.colorProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t={provideColorPresentations:(i,r,o)=>{let s=this._client,a=(u,c,h)=>{let d={color:u,textDocument:{uri:c.document.uri},range:c.range};return this.sendRequest(_m.ColorPresentationRequest.type,d,h)},l=s.middleware;return l.provideColorPresentations?l.provideColorPresentations(i,r,o,a):a(i,r,o)},provideDocumentColors:(i,r)=>{let o=this._client,s=(l,u)=>{let c={textDocument:{uri:l.uri}};return this.sendRequest(_m.DocumentColorRequest.type,c,u)},a=o.middleware;return a.provideDocumentColors?a.provideDocumentColors(i,r,s):s(i,r)}};return[_.registerDocumentColorProvider(e.documentSelector,t),t]}}});var We,BDe,tS,lQ=k(()=>{"use strict";We=S(W());de();Ze();Bt();$t();BDe=[We.CompletionItemKind.Text,We.CompletionItemKind.Method,We.CompletionItemKind.Function,We.CompletionItemKind.Constructor,We.CompletionItemKind.Field,We.CompletionItemKind.Variable,We.CompletionItemKind.Class,We.CompletionItemKind.Interface,We.CompletionItemKind.Module,We.CompletionItemKind.Property,We.CompletionItemKind.Unit,We.CompletionItemKind.Value,We.CompletionItemKind.Enum,We.CompletionItemKind.Keyword,We.CompletionItemKind.Snippet,We.CompletionItemKind.Color,We.CompletionItemKind.File,We.CompletionItemKind.Reference,We.CompletionItemKind.Folder,We.CompletionItemKind.EnumMember,We.CompletionItemKind.Constant,We.CompletionItemKind.Struct,We.CompletionItemKind.Event,We.CompletionItemKind.Operator,We.CompletionItemKind.TypeParameter],tS=class extends me{constructor(e){super(e,We.CompletionRequest.type)}fillClientCapabilities(e){let t=this._client.clientOptions.disableSnippetCompletion!==!0,i=Y(Y(e,"textDocument"),"completion");i.dynamicRegistration=!0,i.contextSupport=!0,i.completionItem={snippetSupport:t,commitCharactersSupport:!0,documentationFormat:this._client.supportedMarkupKind,deprecatedSupport:!0,preselectSupport:!0,insertReplaceSupport:!0,tagSupport:{valueSet:[We.CompletionItemTag.Deprecated]},resolveSupport:{properties:["documentation","detail","additionalTextEdits"]},labelDetailsSupport:!0,insertTextModeSupport:{valueSet:[We.InsertTextMode.asIs,We.InsertTextMode.adjustIndentation]}},i.completionItemKind={valueSet:BDe},i.insertTextMode=We.InsertTextMode.adjustIndentation,i.completionList={itemDefaults:["commitCharacters","editRange","insertTextFormat","insertTextMode"]}}initialize(e,t){let i=this.getRegistrationOptions(t,e.completionProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e,t){let i=e.triggerCharacters||[],r=e.allCommitCharacters||[],o={provideCompletionItems:(l,u,c,h)=>{let d=this._client.middleware,g=(p,f,m,b)=>this.sendRequest(We.CompletionRequest.type,VK(p,f,m),b,[]);return d.provideCompletionItem?d.provideCompletionItem(l,u,h,c,g):g(l,u,h,c)},resolveCompletionItem:e.resolveProvider?(l,u)=>{let c=this._client.middleware,h=(d,g)=>this.sendRequest(We.CompletionResolveRequest.type,d,g,d);return c.resolveCompletionItem?c.resolveCompletionItem(l,u,h):h(l,u)}:void 0},s=this._client.id+(this.registrationLength==0?"":"-"+t);return[_.registerCompletionItemProvider(s,"LS",e.documentSelector,o,i,e.priority,r),o]}}});var Va,YZe,iS,Ru,uQ=k(()=>{"use strict";Va=S(W());Vl();wi();ie();Ze();$t();YZe=q()("languageclient-configuration"),iS=class{constructor(e){this._client=e}get method(){return Va.ConfigurationRequest.method}fillClientCapabilities(e){Y(e,"workspace").configuration=!0}getState(){return{kind:"static"}}initialize(){let e=this._client,{configuredSection:t}=e;e.onRequest(Va.ConfigurationRequest.type,(i,r)=>{let o=a=>{let l=[];for(let u of a.items){let c=t?t+(u.section?`.${u.section}`:""):u.section;l.push(this.getConfiguration(u.scopeUri,c))}return l},s=e.middleware.workspace;return s!=null&&s.configuration?s.configuration(i,r,o):o(i,r)})}getConfiguration(e,t){let i=null;if(t){let r=t.lastIndexOf(".");if(r===-1)i=fh(v.getConfiguration(void 0,e).get(t));else{let o=v.getConfiguration(t.substr(0,r),e);i=fh(o.get(t.substr(r+1)))}}else{let r=v.getConfiguration(t,e);i={};for(let o of Object.keys(r))r.has(o)&&(i[o]=fh(r.get(o)))}return i??null}dispose(){}},Ru=class{constructor(e){this._client=e;this._listeners=new Map}getState(){return{kind:"workspace",id:this.registrationType.method,registrations:this._listeners.size>0}}get registrationType(){return Va.DidChangeConfigurationNotification.type}fillClientCapabilities(e){Y(Y(e,"workspace"),"didChangeConfiguration").dynamicRegistration=!0}initialize(){var t;let e=(t=this._client.clientOptions.synchronize)==null?void 0:t.configurationSection;if(e!==void 0){let i=this.configuredUID=Se();this.register({id:i,registerOptions:{section:e}})}}register(e){if(this._client.configuredSection&&e.id!==this.configuredUID)return;let{section:t}=e.registerOptions,i=v.onDidChangeConfiguration(r=>{this.onDidChangeConfiguration(t,r)});this._listeners.set(e.id,i),t!==void 0&&this.onDidChangeConfiguration(t,void 0)}unregister(e){let t=this._listeners.get(e);t&&(this._listeners.delete(e),t.dispose())}dispose(){for(let e of this._listeners.values())e.dispose();this._listeners.clear()}onDidChangeConfiguration(e,t){var l;let{configuredSection:i}=this._client,r;if(ti(e)?r=[e]:r=e,r!=null&&t!=null&&!r.map(h=>h.startsWith("languageserver.")?"languageserver":h).some(h=>t.affectsConfiguration(h)))return;let o=u=>{if(u==null)return this._client.sendNotification(Va.DidChangeConfigurationNotification.type,{settings:null});let c=this._client.clientOptions.workspaceFolder,h=i?Ru.getConfiguredSettings(i,c):Ru.extractSettingsInformation(u,c);return this._client.sendNotification(Va.DidChangeConfigurationNotification.type,{settings:h})},s=(l=this._client.middleware.workspace)==null?void 0:l.didChangeConfiguration;(s?Promise.resolve(s(r,o)):o(r)).catch(u=>{this._client.error(`Sending notification ${Va.DidChangeConfigurationNotification.type.method} failed`,u)})}static getConfiguredSettings(e,t){let i=9,r=v.getConfiguration(e.slice(0,-i),t);return iJ(r.get("settings",{}))}static extractSettingsInformation(e,t){function i(o,s){let a=o;for(let l=0;l=0?l=v.getConfiguration(s.substr(0,a),t).get(s.substr(a+1)):l=v.getConfiguration(s,t);let u=e[o].split(".");i(r,u)[u[u.length-1]]=l}return r}}});var BI,nS,cQ=k(()=>{"use strict";BI=S(W());de();Ze();Bt();nS=class extends me{constructor(e){super(e,BI.DeclarationRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"declaration");t.dynamicRegistration=!0,t.linkSupport=!0}initialize(e,t){let[i,r]=this.getRegistration(t,e.declarationProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t={provideDeclaration:(i,r,o)=>{let s=this._client,a=(u,c,h)=>this.sendRequest(BI.DeclarationRequest.type,Ei(u,c),h),l=s.middleware;return l.provideDeclaration?l.provideDeclaration(i,r,o,a):a(i,r,o)}};return[_.registerDeclarationProvider(e.documentSelector,t),t]}}});var WI,rS,hQ=k(()=>{"use strict";WI=S(W());de();Ze();Bt();$t();rS=class extends me{constructor(e){super(e,WI.DefinitionRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"definition");t.dynamicRegistration=!0,t.linkSupport=!0}initialize(e,t){let i=this.getRegistrationOptions(t,e.definitionProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideDefinition:(i,r,o)=>{let s=this._client,a=(u,c,h)=>this.sendRequest(WI.DefinitionRequest.type,Ei(u,c),h),l=s.middleware;return l.provideDefinition?l.provideDefinition(i,r,o,a):a(i,r,o)}};return[_.registerDefinitionProvider(e.documentSelector,t),t]}}});var dQ,Fe,YI,ZI,JI,$I,oS,gQ=k(()=>{"use strict";dQ=S(Lo());qe();Fe=S(W());Pe();de();xr();xe();ie();Ze();YI=class{constructor(){this.documentPullStates=new Map,this.workspacePullStates=new Map}track(e,t,i){let r=e===1?this.documentPullStates:this.workspacePullStates,[o,s,a]=t instanceof j?[t.toString(),t,i]:[t.uri.toString(),j.parse(t.uri),t.version],l=r.get(o);return l===void 0&&(l={document:s,pulledVersion:a,resultId:void 0},r.set(o,l)),l}update(e,t,i,r){let o=e===1?this.documentPullStates:this.workspacePullStates,[s,a,l,u]=t instanceof j?[t.toString(),t,i,r]:[t.uri,j.parse(t.uri),t.version,i],c=o.get(s);c===void 0?(c={document:a,pulledVersion:l,resultId:u},o.set(s,c)):(c.pulledVersion=l,c.resultId=u)}unTrack(e,t){let i=t instanceof j?t.toString():t.uri;(e===1?this.documentPullStates:this.workspacePullStates).delete(i)}tracks(e,t){let i=t instanceof j?t.toString():t.uri;return(e===1?this.documentPullStates:this.workspacePullStates).has(i)}trackingDocuments(){return Array.from(this.documentPullStates.keys())}getResultId(e,t){var o;let i=t instanceof j?t.toString():t.uri;return(o=(e===1?this.documentPullStates:this.workspacePullStates).get(i))==null?void 0:o.resultId}getAllResultIds(){let e=[];for(let[t,i]of this.workspacePullStates)this.documentPullStates.has(t)&&(i=this.documentPullStates.get(t)),i.resultId!==void 0&&e.push({uri:t,value:i.resultId});return e}},ZI=class extends ho{constructor(t,i){var r;super(t);this.client=t,this.options=i,this.enableWorkspace=i.workspaceDiagnostics&&((r=this.client.clientOptions.diagnosticPullOptions)==null?void 0:r.workspace)!==!1,this.isDisposed=!1,this.onDidChangeDiagnosticsEmitter=new Fe.Emitter,this.provider=this.createProvider(),this.diagnostics=_.createDiagnosticCollection(i.identifier?i.identifier:t.id),this.openRequests=new Map,this.documentStates=new YI,this.workspaceErrorCounter=0}knows(t,i){return this.documentStates.tracks(t,i)}trackingDocuments(){return this.documentStates.trackingDocuments()}forget(t,i){this.documentStates.unTrack(t,i)}pull(t,i){this.pullAsync(t).then(()=>{i&&i()},r=>{this.client.error(`Document pull failed for text document ${t.uri}`,r)})}async pullAsync(t){if(this.isDisposed)return;let i=t.uri,r=t.version,o=this.openRequests.get(i),s=this.documentStates.track(1,t);if(o===void 0){let a=new Fe.CancellationTokenSource;this.openRequests.set(i,{state:"open",document:t,version:r,tokenSource:a});let l,u;try{l=await this.provider.provideDiagnostics(t,s.resultId,a.token)??{kind:Fe.DocumentDiagnosticReportKind.Full,items:[]}}catch(h){if(h instanceof ku&&h.data&&Fe.DiagnosticServerCancellationData.is(h.data)&&h.data.retriggerRequest===!1&&(u={state:"drop",document:t}),u===void 0&&h instanceof ii)u={state:"reschedule",document:t};else throw h}if(u=u??this.openRequests.get(i),u===void 0){this.client.error(`Lost request state in diagnostic pull model. Clearing diagnostics for ${i}`),this.diagnostics.delete(i);return}if(this.openRequests.delete(i),!D.visibleTextEditors.some(h=>h.document.uri===i)){this.documentStates.unTrack(1,t);return}if(u.state==="drop")return;l!==void 0&&(l.kind===Fe.DocumentDiagnosticReportKind.Full&&this.diagnostics.set(i,l.items),s.pulledVersion=r,s.resultId=l.resultId),u.state==="reschedule"&&this.pull(t)}else o.state==="open"?(o.tokenSource.cancel(),this.openRequests.set(i,{state:"reschedule",document:o.document})):o.state==="drop"&&this.openRequests.set(i,{state:"reschedule",document:o.document})}forgetDocument(t){let i=t.uri,r=this.openRequests.get(i);this.enableWorkspace?r!==void 0?this.openRequests.set(i,{state:"reschedule",document:t}):this.pull(t,()=>{this.forget(1,t)}):(r!==void 0&&(r.state==="open"&&r.tokenSource.cancel(),this.openRequests.delete(i)),this.diagnostics.delete(i.toString()),this.forget(1,t))}pullWorkspace(){!this.enableWorkspace||this.pullWorkspaceAsync().then(()=>{this.workspaceTimeout=(0,Fe.RAL)().timer.setTimeout(()=>{this.pullWorkspace()},3e3)},t=>{!(t instanceof ku)&&!Fe.DiagnosticServerCancellationData.is(t.data)&&(this.client.error("Workspace diagnostic pull failed.",t),this.workspaceErrorCounter++),this.workspaceErrorCounter<=5&&(this.workspaceTimeout=(0,Fe.RAL)().timer.setTimeout(()=>{this.pullWorkspace()},3e3))})}async pullWorkspaceAsync(){if(!this.provider.provideWorkspaceDiagnostics)return;this.workspaceCancellation!==void 0&&(this.workspaceCancellation.cancel(),this.workspaceCancellation=void 0),this.workspaceCancellation=new Fe.CancellationTokenSource;let t=this.documentStates.getAllResultIds();await this.provider.provideWorkspaceDiagnostics(t,this.workspaceCancellation.token,i=>{if(!(!i||this.isDisposed))for(let r of i.items)r.kind===Fe.DocumentDiagnosticReportKind.Full&&(this.documentStates.tracks(1,j.parse(r.uri))||this.diagnostics.set(r.uri.toString(),r.items)),this.documentStates.update(2,j.parse(r.uri),r.version??void 0,r.resultId)})}createProvider(){let t={onDidChangeDiagnostics:this.onDidChangeDiagnosticsEmitter.event,provideDiagnostics:(i,r,o)=>{let s=this.client.middleware,a=(l,u,c)=>{let h=l instanceof j?l.toString():l.uri,d={identifier:this.options.identifier,textDocument:{uri:h},previousResultId:u};return this.sendRequest(Fe.DocumentDiagnosticRequest.type,d,c,{kind:Fe.DocumentDiagnosticReportKind.Full,items:[]}).then(async g=>g==null||this.isDisposed?{kind:Fe.DocumentDiagnosticReportKind.Full,items:[]}:(s.handleDiagnostics&&g.kind==Fe.DocumentDiagnosticReportKind.Full&&s.handleDiagnostics(h,g.items,(p,f)=>{g.items=f}),g))};return s.provideDiagnostics?s.provideDiagnostics(i,r,o,a):a(i,r,o)}};return this.options.workspaceDiagnostics&&(t.provideWorkspaceDiagnostics=(i,r,o)=>{let s=(l,u)=>{let c=oe(),h=this.client.onProgress(Fe.WorkspaceDiagnosticRequest.partialResult,c,g=>{if(g==null){o(null);return}o(g)}),d={identifier:this.options.identifier,previousResultIds:l,partialResultToken:c};return this.sendRequest(Fe.WorkspaceDiagnosticRequest.type,d,u,{items:[]}).then(async g=>(o(g),{items:[]})).finally(()=>{h.dispose()})},a=this.client.middleware;return a.provideWorkspaceDiagnostics?a.provideWorkspaceDiagnostics(i,r,o,s):s(i,r,o)}),t}dispose(){var t,i;this.isDisposed=!0,(t=this.workspaceCancellation)==null||t.cancel(),(i=this.workspaceTimeout)==null||i.dispose();for(let r of this.openRequests.values())r.state==="open"&&r.tokenSource.cancel();this.openRequests.clear()}},JI=class{constructor(e){this.diagnosticRequestor=e,this.documents=new Fe.LinkedMap}add(e){let t=e.uri;this.documents.has(t)||(this.documents.set(t,e,Fe.Touch.Last),this.trigger())}remove(e){var i;let t=e.uri;this.documents.has(t)&&(this.documents.delete(t),this.diagnosticRequestor.pull(e)),this.documents.size===0?this.stop():e.uri===((i=this.endDocument)==null?void 0:i.uri)&&(this.endDocument=this.documents.last)}trigger(){if(this.intervalHandle!==void 0){this.endDocument=this.documents.last;return}this.endDocument=this.documents.last,this.intervalHandle=(0,Fe.RAL)().timer.setInterval(()=>{let e=this.documents.first;if(e!==void 0){let t=e.uri;this.diagnosticRequestor.pull(e),this.documents.set(t,e,Fe.Touch.Last),e===this.endDocument&&this.stop()}},200)}dispose(){this.stop(),this.documents.clear()}stop(){var e;(e=this.intervalHandle)==null||e.dispose(),this.intervalHandle=void 0,this.endDocument=void 0}},$I=class{constructor(e,t){var d;let i=e.clientOptions.diagnosticPullOptions,r=t.documentSelector,o=[],s=i.ignored??[],a=g=>!(v.match(r,g)<=0||!D.visibleTextEditors.some(f=>f.document.uri===g.uri)||s.length>0&&s.some(f=>(0,dQ.default)(j.parse(g.uri).fsPath,f,{dot:!0})));this.diagnosticRequestor=new ZI(e,t),this.backgroundScheduler=new JI(this.diagnosticRequestor);let l=g=>{var p;!a(g)||!t.interFileDependencies||((p=this.activeTextDocument)==null?void 0:p.uri)===g.uri||this.backgroundScheduler.add(g)};this.activeTextDocument=(d=D.activeTextEditor)==null?void 0:d.document.textDocument,D.onDidChangeActiveTextEditor(g=>{let p=this.activeTextDocument,f=this.activeTextDocument=g==null?void 0:g.document.textDocument;p!==void 0&&l(p),f!=null&&this.backgroundScheduler.remove(f)},null,o);let u=e.getFeature(Fe.DidOpenTextDocumentNotification.method);o.push(u.onNotificationSent(g=>{let p=g.original;a(p)&&this.diagnosticRequestor.pull(p,()=>{l(p)})}));let c=(g,p)=>!(i.filter&&i.filter(g,p)||!this.diagnosticRequestor.knows(1,g));if(i.onChange===!0){let g=e.getFeature(Fe.DidChangeTextDocumentNotification.method);o.push(g.onNotificationSent(async p=>{let f=v.getDocument(p.original.bufnr).textDocument;p.original.contentChanges.length!=0&&c(f,"onType")&&this.diagnosticRequestor.pull(f,()=>{this.backgroundScheduler.trigger()})}))}if(i.onSave===!0){let g=e.getFeature(Fe.DidSaveTextDocumentNotification.method);o.push(g.onNotificationSent(p=>{let f=p.original;c(f,"onSave")&&this.diagnosticRequestor.pull(p.original,()=>{this.backgroundScheduler.trigger()})}))}let h=e.getFeature(Fe.DidCloseTextDocumentNotification.method);o.push(h.onNotificationSent(g=>{this.cleanUpDocument(g.original)})),this.diagnosticRequestor.onDidChangeDiagnosticsEmitter.event(()=>{for(let g of v.textDocuments)a(g)&&this.diagnosticRequestor.pull(g)}),D.onDidChangeVisibleTextEditors(g=>{let p=new Set,f=this.diagnosticRequestor.trackingDocuments();g.forEach(m=>{let{uri:b,textDocument:w}=m.document;p.has(b)||(p.add(b),a(w)&&!f.includes(b)&&this.diagnosticRequestor.pull(w,()=>{l(w)}))}),f.forEach(m=>{if(p.has(m))return;let b=v.getDocument(m);b&&b.attached&&this.cleanUpDocument(b.textDocument)})},null,o),t.workspaceDiagnostics===!0&&t.identifier!=="da348dc5-c30a-4515-9d98-31ff3be38d14"&&this.diagnosticRequestor.pullWorkspace(),this.disposable=Fe.Disposable.create(()=>[...o,this.backgroundScheduler,this.diagnosticRequestor].forEach(g=>g.dispose()))}get onDidChangeDiagnosticsEmitter(){return this.diagnosticRequestor.onDidChangeDiagnosticsEmitter}get diagnostics(){return this.diagnosticRequestor.provider}knows(e,t){return this.diagnosticRequestor.knows(e,t)}cleanUpDocument(e){this.diagnosticRequestor.knows(1,e)&&(this.diagnosticRequestor.forgetDocument(e),this.backgroundScheduler.remove(e))}},oS=class extends me{constructor(e){super(e,Fe.DocumentDiagnosticRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"diagnostic");t.dynamicRegistration=!0,t.relatedDocumentSupport=!0,Y(Y(e,"workspace"),"diagnostics").refreshSupport=!0}initialize(e,t){let i=this._client,[r,o]=this.getRegistration(t,e.diagnosticProvider);!r||!o||(i.onRequest(Fe.DiagnosticRefreshRequest.type,async()=>{for(let s of this.getAllProviders())s.onDidChangeDiagnosticsEmitter.fire()}),this.register({id:r,registerOptions:o}))}registerLanguageProvider(e){let t=new $I(this._client,e);return[t.disposable,t]}}});var UI,sS,pQ=k(()=>{"use strict";UI=S(W());de();Ze();Bt();$t();sS=class extends me{constructor(e){super(e,UI.DocumentHighlightRequest.type)}fillClientCapabilities(e){Y(Y(e,"textDocument"),"documentHighlight").dynamicRegistration=!0}initialize(e,t){let i=this.getRegistrationOptions(t,e.documentHighlightProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideDocumentHighlights:(i,r,o)=>{let s=this._client,a=(u,c,h)=>this.sendRequest(UI.DocumentHighlightRequest.type,Ei(u,c),h),l=s.middleware;return l.provideDocumentHighlights?l.provideDocumentHighlights(i,r,o,a):a(i,r,o)}};return[_.registerDocumentHighlightProvider(e.documentSelector,t),t]}}});var Lm,aS,fQ=k(()=>{"use strict";Lm=S(W());de();Ze();$t();aS=class extends me{constructor(e){super(e,Lm.DocumentLinkRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"documentLink");t.dynamicRegistration=!0,t.tooltipSupport=!0}initialize(e,t){let i=this.getRegistrationOptions(t,e.documentLinkProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideDocumentLinks:(i,r)=>{let o=this._client,s=(l,u)=>this.sendRequest(Lm.DocumentLinkRequest.type,{textDocument:{uri:l.uri}},u),a=o.middleware;return a.provideDocumentLinks?a.provideDocumentLinks(i,r,s):s(i,r)},resolveDocumentLink:e.resolveProvider?(i,r)=>{let o=this._client,s=(l,u)=>this.sendRequest(Lm.DocumentLinkResolveRequest.type,l,u,l),a=o.middleware;return a.resolveDocumentLink?a.resolveDocumentLink(i,r,s):s(i,r)}:void 0};return[_.registerDocumentLinkProvider(e.documentSelector,t),t]}}});var Qe,XI,GI,lS,zI=k(()=>{"use strict";Qe=S(W());de();Ze();Bt();$t();XI=[Qe.SymbolKind.File,Qe.SymbolKind.Module,Qe.SymbolKind.Namespace,Qe.SymbolKind.Package,Qe.SymbolKind.Class,Qe.SymbolKind.Method,Qe.SymbolKind.Property,Qe.SymbolKind.Field,Qe.SymbolKind.Constructor,Qe.SymbolKind.Enum,Qe.SymbolKind.Interface,Qe.SymbolKind.Function,Qe.SymbolKind.Variable,Qe.SymbolKind.Constant,Qe.SymbolKind.String,Qe.SymbolKind.Number,Qe.SymbolKind.Boolean,Qe.SymbolKind.Array,Qe.SymbolKind.Object,Qe.SymbolKind.Key,Qe.SymbolKind.Null,Qe.SymbolKind.EnumMember,Qe.SymbolKind.Struct,Qe.SymbolKind.Event,Qe.SymbolKind.Operator,Qe.SymbolKind.TypeParameter],GI=[Qe.SymbolTag.Deprecated],lS=class extends me{constructor(e){super(e,Qe.DocumentSymbolRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"documentSymbol");t.dynamicRegistration=!0,t.symbolKind={valueSet:XI},t.hierarchicalDocumentSymbolSupport=!0,t.tagSupport={valueSet:GI},t.labelSupport=!0}initialize(e,t){let i=this.getRegistrationOptions(t,e.documentSymbolProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={meta:e.label?{label:e.label}:void 0,provideDocumentSymbols:(i,r)=>{let o=this._client,s=(l,u)=>this.sendRequest(Qe.DocumentSymbolRequest.type,iQ(l),u),a=o.middleware;return a.provideDocumentSymbols?a.provideDocumentSymbols(i,r,s):s(i,r)}};return[_.registerDocumentSymbolProvider(e.documentSelector,t),t]}}});var Im,uS,mQ=k(()=>{"use strict";Im=S(W());Ze();Jt();$t();uS=class extends ho{constructor(t){super(t);this._commands=new Map}getState(){return{kind:"workspace",id:this.registrationType.method,registrations:this._commands.size>0}}get registrationType(){return Im.ExecuteCommandRequest.type}fillClientCapabilities(t){Y(Y(t,"workspace"),"executeCommand").dynamicRegistration=!0}initialize(t){!t.executeCommandProvider||this.register({id:Se(),registerOptions:Object.assign({},t.executeCommandProvider)})}register(t){let r=this._client.middleware,o=(s,a)=>{let l={command:s,arguments:a};return this.sendRequest(Im.ExecuteCommandRequest.type,l,Im.CancellationToken.None)};if(t.registerOptions.commands){let s=[];for(let a of t.registerOptions.commands)s.push(ue.registerCommand(a,(...l)=>r.executeCommand?r.executeCommand(a,l,o):o(a,l),null,!0));this._commands.set(t.id,s)}}unregister(t){let i=this._commands.get(t);i&&i.forEach(r=>r.dispose())}dispose(){this._commands.forEach(t=>{t.forEach(i=>i.dispose())}),this._commands.clear()}}});function WDe(n,e){return n[e]}function bQ(n,e,t){n[e]=t}function mS(n){return{files:n.files.map(e=>({uri:e.toString()}))}}function vQ(n){return{files:n.files.map(e=>({oldUri:e.oldUri.toString(),newUri:e.newUri.toString()}))}}var yQ,_i,mUe,ld,Fm,cS,hS,dS,jm,gS,pS,fS,wQ=k(()=>{"use strict";yQ=S(Lo()),_i=S(W());dn();$e();ie();Ze();$t();mUe=q()("language-client-fileOperations");ld=class extends ho{constructor(t,i,r,o,s){super(t);this._filters=new Map;this._event=i,this._registrationType=r,this._clientCapability=o,this._serverCapability=s}getState(){return{kind:"workspace",id:this._registrationType.method,registrations:this._filters.size>0}}get registrationType(){return this._registrationType}fillClientCapabilities(t){let i=Y(Y(t,"workspace"),"fileOperations");bQ(i,"dynamicRegistration",!0),bQ(i,this._clientCapability,!0)}initialize(t){var o;let i=(o=t.workspace)==null?void 0:o.fileOperations,r=i!==void 0?WDe(i,this._serverCapability):void 0;if((r==null?void 0:r.filters)!==void 0)try{this.register({id:Se(),registerOptions:{filters:r.filters}})}catch(s){this._client.warn(`Ignoring invalid glob pattern for ${this._serverCapability} registration: ${s}`)}}register(t){this._listener||(this._listener=this._event(this.send,this));let i=t.registerOptions.filters.map(r=>{let o=new yQ.Minimatch(r.pattern.glob,ld.asMinimatchOptions(r.pattern.options));if(!o.makeRe())throw new Error(`Invalid pattern ${r.pattern.glob}!`);return{scheme:r.scheme,matcher:o,kind:r.pattern.matches}});this._filters.set(t.id,i)}unregister(t){this._filters.delete(t)}dispose(){this._filters.clear(),this._listener&&(this._listener.dispose(),this._listener=void 0)}async filter(t,i){let r=await Promise.all(t.files.map(async s=>{let a=i(s),l=a.fsPath.replace(/\\/g,"/");for(let u of this._filters.values())for(let c of u)if(!(c.scheme!==void 0&&c.scheme!==a.scheme)){if(c.matcher.match(l)){if(c.kind===void 0)return!0;let h=await ZE(a.fsPath);if(h===void 0)return this._client.error(`Failed to determine file type for ${a.toString()}.`),!0;if(h===1&&c.kind===_i.FileOperationPatternKind.file||h===2&&c.kind===_i.FileOperationPatternKind.folder)return!0}else if(c.kind===_i.FileOperationPatternKind.folder&&await ZE(a.fsPath)===2&&c.matcher.match(`${l}/`))return!0}return!1})),o=t.files.filter((s,a)=>r[a]);return{...t,files:o}}static asMinimatchOptions(t){if(t!==void 0&&t.ignoreCase===!0)return{nocase:!0}}},Fm=class extends ld{constructor(t,i,r,o,s,a,l){super(t,i,r,o,s);this._notificationType=r,this._accessUri=a,this._createParams=l}async send(t){let i=await this.filter(t,this._accessUri);if(i.files.length){let r=async s=>{if(!!this._client.isRunning())return this._client.sendNotification(this._notificationType,this._createParams(s))},o=this.doSend(i,r);o&&await o.catch(s=>{this._client.error(`Sending notification ${this.registrationType.method} failed`,s)})}}},cS=class extends Fm{constructor(e){super(e,v.onDidCreateFiles,_i.DidCreateFilesNotification.type,"didCreate","didCreate",t=>t,t=>mS(t))}doSend(e,t){let i=this._client.middleware.workspace;return i!=null&&i.didCreateFiles?i.didCreateFiles(e,t):t(e)}},hS=class extends Fm{constructor(e){super(e,v.onDidRenameFiles,_i.DidRenameFilesNotification.type,"didRename","didRename",t=>t.oldUri,t=>vQ(t))}doSend(e,t){let i=this._client.middleware.workspace;return i!=null&&i.didRenameFiles?i.didRenameFiles(e,t):t(e)}},dS=class extends Fm{constructor(e){super(e,v.onDidDeleteFiles,_i.DidDeleteFilesNotification.type,"didDelete","didDelete",t=>t,t=>mS(t))}doSend(e,t){let i=this._client.middleware.workspace;return i!=null&&i.didDeleteFiles?i.didDeleteFiles(e,t):t(e)}},jm=class extends ld{constructor(t,i,r,o,s,a,l){super(t,i,r,o,s);this._requestType=r,this._accessUri=a,this._createParams=l}async send(t){let i=this.waitUntil(t);t.waitUntil(i)}async waitUntil(t){let i=await this.filter(t,this._accessUri);if(i.files.length){let r=o=>this.sendRequest(this._requestType,this._createParams(o),_i.CancellationToken.None);return this.doSend(i,r)}else return}},gS=class extends jm{constructor(e){super(e,v.onWillCreateFiles,_i.WillCreateFilesRequest.type,"willCreate","willCreate",t=>t,t=>mS(t))}doSend(e,t){let i=this._client.middleware.workspace;return i!=null&&i.willCreateFiles?i.willCreateFiles(e,t):t(e)}},pS=class extends jm{constructor(e){super(e,v.onWillRenameFiles,_i.WillRenameFilesRequest.type,"willRename","willRename",t=>t.oldUri,t=>vQ(t))}doSend(e,t){let i=this._client.middleware.workspace;return i!=null&&i.willRenameFiles?i.willRenameFiles(e,t):t(e)}},fS=class extends jm{constructor(e){super(e,v.onWillDeleteFiles,_i.WillDeleteFilesRequest.type,"willDelete","willDelete",t=>t,t=>mS(t))}doSend(e,t){let i=this._client.middleware.workspace;return i!=null&&i.willDeleteFiles?i.willDeleteFiles(e,t):t(e)}}});var xQ,lr,LUe,bS,CQ=k(()=>{"use strict";xQ=S(Pn()),lr=S(W());wi();ie();Ze();Bt();$t();LUe=q()("language-client-fileSystemWatcher"),bS=class{constructor(e){this._client=e;this._watchers=new Map;this._fileEventsMap=new Map;this.debouncedFileNotify=(0,xQ.default)(()=>{this._notifyFileEvent()},200)}async _notifyFileEvent(){let e=this._fileEventsMap;e.size!=0&&(await this._client.forceDocumentSync(),this._client.sendNotification(lr.DidChangeWatchedFilesNotification.type,{changes:Array.from(e.values())}).catch(t=>{this._client.error("Notify file events failed.",t)}),e.clear())}notifyFileEvent(e){let t=this;function i(o){t._fileEventsMap.set(o.uri,o),t.debouncedFileNotify()}let r=this._client.middleware.workspace;r!=null&&r.didChangeWatchedFile?r.didChangeWatchedFile(e,i):i(e)}getState(){return{kind:"workspace",id:this.registrationType.method,registrations:this._watchers.size>0}}get registrationType(){return lr.DidChangeWatchedFilesNotification.type}fillClientCapabilities(e){Y(Y(e,"workspace"),"didChangeWatchedFiles").dynamicRegistration=!0,Y(Y(e,"workspace"),"didChangeWatchedFiles").relativePatternSupport=!0}initialize(e,t){var s;let i=(s=this._client.clientOptions.synchronize)==null?void 0:s.fileEvents;if(!i)return;let r=Array.isArray(i)?i:[i],o=[];for(let a of r)o.push(a),this.hookListeners(a,!a.ignoreCreateEvents,!a.ignoreChangeEvents,!a.ignoreDeleteEvents,o);this._watchers.set(Se(),o)}register(e){if(!Array.isArray(e.registerOptions.watchers))return;let t=[];for(let i of e.registerOptions.watchers){let r;if(ti(i.globPattern))r=i.globPattern;else if(lr.RelativePattern.is(i.globPattern))r=XK(i.globPattern);else continue;let o=!0,s=!0,a=!0;i.kind!=null&&(o=(i.kind&lr.WatchKind.Create)!==0,s=(i.kind&lr.WatchKind.Change)!==0,a=(i.kind&lr.WatchKind.Delete)!==0);let l=v.createFileSystemWatcher(r,!o,!s,!a);this.hookListeners(l,o,s,a,t),t.push(l)}this._watchers.set(e.id,t)}hookListeners(e,t,i,r,o){t&&e.onDidCreate(s=>this.notifyFileEvent({uri:ad(s),type:lr.FileChangeType.Created}),null,o),i&&e.onDidChange(s=>this.notifyFileEvent({uri:ad(s),type:lr.FileChangeType.Changed}),null,o),r&&e.onDidDelete(s=>this.notifyFileEvent({uri:ad(s),type:lr.FileChangeType.Deleted}),null,o)}unregister(e){let t=this._watchers.get(e);if(t){for(let i of t)i.dispose();this._watchers.delete(e)}}dispose(){this._fileEventsMap.clear(),this.debouncedFileNotify.clear(),this._watchers.forEach(e=>{for(let t of e)t.dispose()}),this._watchers.clear()}}});var _u,yS,SQ=k(()=>{"use strict";_u=S(W());de();Ze();yS=class extends me{constructor(e){super(e,_u.FoldingRangeRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"foldingRange");t.dynamicRegistration=!0,t.rangeLimit=5e3,t.lineFoldingOnly=!0,t.foldingRangeKind={valueSet:[_u.FoldingRangeKind.Comment,_u.FoldingRangeKind.Imports,_u.FoldingRangeKind.Region]},t.foldingRange={collapsedText:!1}}initialize(e,t){let[i,r]=this.getRegistration(t,e.foldingRangeProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t={provideFoldingRanges:(i,r,o)=>{let s=this._client,a=(u,c,h)=>{let d={textDocument:{uri:u.uri}};return this.sendRequest(_u.FoldingRangeRequest.type,d,h)},l=s.middleware;return l.provideFoldingRanges?l.provideFoldingRanges(i,r,o,a):a(i,r,o)}};return[_.registerFoldingRangeProvider(e.documentSelector,t),t]}}});var Fs,vS,wS,xS,DQ=k(()=>{"use strict";Fs=S(W());de();Ze();Bt();$t();vS=class extends me{constructor(e){super(e,Fs.DocumentFormattingRequest.type)}fillClientCapabilities(e){Y(Y(e,"textDocument"),"formatting").dynamicRegistration=!0}initialize(e,t){let i=this.getRegistrationOptions(t,e.documentFormattingProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideDocumentFormattingEdits:(i,r,o)=>{let s=this._client,a=(u,c,h)=>{let d={textDocument:{uri:u.uri},options:c};return this.sendRequest(Fs.DocumentFormattingRequest.type,d,h)},l=s.middleware;return l.provideDocumentFormattingEdits?l.provideDocumentFormattingEdits(i,r,o,a):a(i,r,o)}};return[_.registerDocumentFormatProvider(e.documentSelector,t,this._client.clientOptions.formatterPriority),t]}},wS=class extends me{constructor(e){super(e,Fs.DocumentRangeFormattingRequest.type)}fillClientCapabilities(e){Y(Y(e,"textDocument"),"rangeFormatting").dynamicRegistration=!0}initialize(e,t){let i=this.getRegistrationOptions(t,e.documentRangeFormattingProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideDocumentRangeFormattingEdits:(i,r,o,s)=>{let a=this._client,l=(c,h,d,g)=>{let p={textDocument:{uri:c.uri},range:h,options:d};return this.sendRequest(Fs.DocumentRangeFormattingRequest.type,p,g)},u=a.middleware;return u.provideDocumentRangeFormattingEdits?u.provideDocumentRangeFormattingEdits(i,r,o,s,l):l(i,r,o,s)}};return[_.registerDocumentRangeFormatProvider(e.documentSelector,t),t]}},xS=class extends me{constructor(e){super(e,Fs.DocumentOnTypeFormattingRequest.type)}fillClientCapabilities(e){Y(Y(e,"textDocument"),"onTypeFormatting").dynamicRegistration=!0}initialize(e,t){let i=this.getRegistrationOptions(t,e.documentOnTypeFormattingProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideOnTypeFormattingEdits:(o,s,a,l,u)=>{let c=this._client,h=(g,p,f,m,b)=>{let w={textDocument:zC(g),position:p,ch:f,options:m};return this.sendRequest(Fs.DocumentOnTypeFormattingRequest.type,w,b)},d=c.middleware;return d.provideOnTypeFormattingEdits?d.provideOnTypeFormattingEdits(o,s,a,l,u,h):h(o,s,a,l,u)}},i=e.moreTriggerCharacter||[],r=[e.firstTriggerCharacter,...i];return[_.registerOnTypeFormattingEditProvider(e.documentSelector,t,r),t]}}});var KI,CS,TQ=k(()=>{"use strict";KI=S(W());de();Ze();Bt();$t();Ze();CS=class extends me{constructor(e){super(e,KI.HoverRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"hover");t.dynamicRegistration=!0,t.contentFormat=this._client.supportedMarkupKind}initialize(e,t){let i=this.getRegistrationOptions(t,e.hoverProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideHover:(i,r,o)=>{let s=this._client,a=(u,c,h)=>this.sendRequest(KI.HoverRequest.type,Ei(u,c),h),l=s.middleware;return l.provideHover?l.provideHover(i,r,o,a):a(i,r,o)}};return[_.registerHoverProvider(e.documentSelector,t),t]}}});var QI,SS,kQ=k(()=>{"use strict";QI=S(W());de();Ze();Bt();SS=class extends me{constructor(e){super(e,QI.ImplementationRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"implementation");t.dynamicRegistration=!0,t.linkSupport=!0}initialize(e,t){let[i,r]=this.getRegistration(t,e.implementationProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t={provideImplementation:(i,r,o)=>{let s=this._client,a=(u,c,h)=>this.sendRequest(QI.ImplementationRequest.type,Ei(u,c),h),l=s.middleware;return l.provideImplementation?l.provideImplementation(i,r,o,a):a(i,r,o)}};return[_.registerImplementationProvider(e.documentSelector,t),t]}}});var js,i2e,DS,PQ=k(()=>{"use strict";js=S(W());de();Ze();Bt();i2e=q()("language-client-inlayHint"),DS=class extends me{constructor(e){super(e,js.InlayHintRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"inlayHint");t.dynamicRegistration=!0,t.resolveSupport={properties:["tooltip","textEdits","label.tooltip","label.location","label.command"]},Y(Y(e,"workspace"),"inlayHint").refreshSupport=!0}initialize(e,t){this._client.onRequest(js.InlayHintRefreshRequest.type,async()=>{for(let o of this.getAllProviders())o.onDidChangeInlayHints.fire()});let[i,r]=this.getRegistration(t,e.inlayHintProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t=new js.Emitter,i={onDidChangeInlayHints:t.event,provideInlayHints:(o,s,a)=>{let l=this._client,u=(h,d,g)=>{let p={textDocument:go(h),range:d};return this.sendRequest(js.InlayHintRequest.type,p,g,null)},c=l.middleware;return c.provideInlayHints?c.provideInlayHints(o,s,a,u):u(o,s,a)}};i.resolveInlayHint=e.resolveProvider===!0?(o,s)=>{let a=this._client,l=(c,h)=>this.sendRequest(js.InlayHintResolveRequest.type,c,h),u=a.middleware;return u.resolveInlayHint?u.resolveInlayHint(o,s,l):l(o,s)}:void 0;let r=e.documentSelector;return[_.registerInlayHintsProvider(r,i),{provider:i,onDidChangeInlayHints:t}]}}});var Lu,TS,EQ=k(()=>{"use strict";Lu=S(W());de();Bt();Ze();TS=class extends me{constructor(e){super(e,Lu.InlineValueRequest.type)}fillClientCapabilities(e){Y(Y(e,"textDocument"),"inlineValue").dynamicRegistration=!0,Y(Y(e,"workspace"),"inlineValue").refreshSupport=!0}initialize(e,t){this._client.onRequest(Lu.InlineValueRefreshRequest.type,async()=>{for(let o of this.getAllProviders())o.onDidChangeInlineValues.fire()});let[i,r]=this.getRegistration(t,e.inlineValueProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t=new Lu.Emitter,i={onDidChangeInlineValues:t.event,provideInlineValues:(o,s,a,l)=>{let u=this._client,c=(d,g,p,f)=>{let m={textDocument:go(d),range:g,context:p};return this.sendRequest(Lu.InlineValueRequest.type,m,f)},h=u.middleware;return h.provideInlineValues?h.provideInlineValues(o,s,a,l,c):c(o,s,a,l)}},r=e.documentSelector;return[_.registerInlineValuesProvider(r,i),{provider:i,onDidChangeInlineValues:t}]}}});var VI,L2e,kS,RQ=k(()=>{"use strict";VI=S(W());de();Ze();Bt();L2e=q()("languageclient-linkedEditingRange"),kS=class extends me{constructor(e){super(e,VI.LinkedEditingRangeRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"linkedEditingRange");t.dynamicRegistration=!0}initialize(e,t){let[i,r]=this.getRegistration(t,e.linkedEditingRangeProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t={provideLinkedEditingRanges:(i,r,o)=>{let s=this._client,a=(u,c,h)=>{let d=Ei(u,c);return this.sendRequest(VI.LinkedEditingRangeRequest.type,d,h)},l=s.middleware;return l.provideLinkedEditingRange?l.provideLinkedEditingRange(i,r,o,a):a(i,r,o)}};return[_.registerLinkedEditingRangeProvider(e.documentSelector,t),t]}}});function YDe(n){return typeof n!="number"?!1:n>=0&&n<=100}var PS,W2e,ud,eF=k(()=>{"use strict";PS=S(W());re();xe();W2e=q()("language-client-progressPart"),ud=class{constructor(e,t,i){this.client=e;this.token=t;this.disposables=[];this._cancelled=!1;this._percent=0;this._started=!1;this.disposables.push(e.onProgress(PS.WorkDoneProgress.type,this.token,r=>{switch(r.kind){case"begin":this.begin(r);break;case"report":this.report(r);break;case"end":this.done(r.message),i&&i(this);break}}))}begin(e){return this._started||this._cancelled?!1:(this._started=!0,D.withProgress({source:`language-client-${this.client.id}`,cancellable:e.cancellable,title:e.title},(t,i)=>(this.progress=t,this.report(e),this._cancelled?Promise.resolve():(this.disposables.push(i.onCancellationRequested(()=>{this.client.sendNotification(PS.WorkDoneProgressCancelNotification.type,{token:this.token}),this.cancel()})),new Promise((r,o)=>{this._resolve=r,this._reject=o})))),!0)}report(e){if(!this.progress)return;let t={};e.message&&(t.message=e.message),YDe(e.percentage)&&(t.increment=e.percentage-this._percent,this._percent=e.percentage),Object.keys(t).length>0&&this.progress.report(t)}cancel(){this._cancelled||(this.cleanUp(),this._reject!==void 0&&(this._reject(),this._resolve=void 0,this._reject=void 0))}done(e){if(this.progress){let t={};e&&(t.message=e),typeof this._percent=="number"&&this._percent>0&&(t.increment=100-this._percent),this.progress.report(t)}this.cleanUp(),this._resolve&&(this._resolve(),this._resolve=void 0,this._reject=void 0)}cleanUp(){this._cancelled=!0,this.progress=void 0,U(this.disposables)}}});var ES,RS,_Q=k(()=>{"use strict";ES=S(W());eF();Ze();RS=class{constructor(e){this._client=e;this.activeParts=new Set}get method(){return ES.WorkDoneProgressCreateRequest.method}fillClientCapabilities(e){Y(e,"window").workDoneProgress=!0}getState(){return{kind:"window",id:ES.WorkDoneProgressCreateRequest.method,registrations:this.activeParts.size>0}}initialize(){let e=this._client,t=r=>{this.activeParts.delete(r)},i=r=>{this.activeParts.add(new ud(this._client,r.token,t))};e.onRequest(ES.WorkDoneProgressCreateRequest.type,i)}dispose(){for(let e of this.activeParts)e.done();this.activeParts.clear()}}});var tF,_S,LQ=k(()=>{"use strict";tF=S(W());de();Ze();Bt();$t();_S=class extends me{constructor(e){super(e,tF.ReferencesRequest.type)}fillClientCapabilities(e){Y(Y(e,"textDocument"),"references").dynamicRegistration=!0}initialize(e,t){let i=this.getRegistrationOptions(t,e.referencesProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideReferences:(i,r,o,s)=>{let a=this._client,l=(c,h,d,g)=>this.sendRequest(tF.ReferencesRequest.type,tQ(c,h,d),g),u=a.middleware;return u.provideReferences?u.provideReferences(i,r,o,s,l):l(i,r,o,s)}};return[_.registerReferencesProvider(e.documentSelector,t),t]}}});var Bo,LS,IQ=k(()=>{"use strict";Bo=S(W());de();wi();Ze();Bt();$t();LS=class extends me{constructor(e){super(e,Bo.RenameRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"rename");t.dynamicRegistration=!0,t.prepareSupport=!0,t.honorsChangeAnnotations=!0,t.prepareSupportDefaultBehavior=Bo.PrepareSupportDefaultBehavior.Identifier}initialize(e,t){let i=this.getRegistrationOptions(t,e.renameProvider);!i||(fa(e.renameProvider)&&(i.prepareProvider=!1),this.register({id:Se(),registerOptions:i}))}registerLanguageProvider(e){let t={provideRenameEdits:(i,r,o,s)=>{let a=this._client,l=(c,h,d,g)=>{let p={textDocument:{uri:c.uri},position:h,newName:d};return this.sendRequest(Bo.RenameRequest.type,p,g)},u=a.middleware;return u.provideRenameEdits?u.provideRenameEdits(i,r,o,s,l):l(i,r,o,s)},prepareRename:e.prepareProvider?(i,r,o)=>{let s=this._client,a=(u,c,h)=>{let d={textDocument:go(u),position:c};return this.sendRequest(Bo.PrepareRenameRequest.type,d,h).then(g=>{if(!g)return null;if(Bo.Range.is(g))return g;if(this.isDefaultBehavior(g))return g.defaultBehavior===!0?null:Promise.reject(new Error("The element can't be renamed."));if(g&&Bo.Range.is(g.range))return{range:g.range,placeholder:g.placeholder}})},l=s.middleware;return l.prepareRename?l.prepareRename(i,r,o,a):a(i,r,o)}:void 0};return[_.registerRenameProvider(e.documentSelector,t),t]}isDefaultBehavior(e){let t=e;return t&&fa(t.defaultBehavior)}}});var iF,IS,FQ=k(()=>{"use strict";iF=S(W());de();Ze();IS=class extends me{constructor(e){super(e,iF.SelectionRangeRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"selectionRange");t.dynamicRegistration=!0}initialize(e,t){let[i,r]=this.getRegistration(t,e.selectionRangeProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t={provideSelectionRanges:(i,r,o)=>{let s=this._client,a=(u,c,h)=>{let d={textDocument:{uri:u.uri},positions:c};return this.sendRequest(iF.SelectionRangeRequest.type,d,h)},l=s.middleware;return l.provideSelectionRanges?l.provideSelectionRanges(i,r,o,a):a(i,r,o)}};return[_.registerSelectionRangeProvider(e.documentSelector,t),t]}}});var De,nze,FS,jQ=k(()=>{"use strict";De=S(W());de();wi();Ze();Bt();nze=q()("languageclient-semanticTokens"),FS=class extends me{constructor(e){super(e,De.SemanticTokensRegistrationType.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"semanticTokens");t.dynamicRegistration=!0,t.tokenTypes=[De.SemanticTokenTypes.namespace,De.SemanticTokenTypes.type,De.SemanticTokenTypes.class,De.SemanticTokenTypes.enum,De.SemanticTokenTypes.interface,De.SemanticTokenTypes.struct,De.SemanticTokenTypes.typeParameter,De.SemanticTokenTypes.parameter,De.SemanticTokenTypes.variable,De.SemanticTokenTypes.property,De.SemanticTokenTypes.enumMember,De.SemanticTokenTypes.event,De.SemanticTokenTypes.function,De.SemanticTokenTypes.method,De.SemanticTokenTypes.macro,De.SemanticTokenTypes.keyword,De.SemanticTokenTypes.modifier,De.SemanticTokenTypes.comment,De.SemanticTokenTypes.string,De.SemanticTokenTypes.number,De.SemanticTokenTypes.regexp,De.SemanticTokenTypes.decorator,De.SemanticTokenTypes.operator],t.tokenModifiers=[De.SemanticTokenModifiers.declaration,De.SemanticTokenModifiers.definition,De.SemanticTokenModifiers.readonly,De.SemanticTokenModifiers.static,De.SemanticTokenModifiers.deprecated,De.SemanticTokenModifiers.abstract,De.SemanticTokenModifiers.async,De.SemanticTokenModifiers.modification,De.SemanticTokenModifiers.documentation,De.SemanticTokenModifiers.defaultLibrary],t.formats=[De.TokenFormat.Relative],t.requests={range:!0,full:{delta:!0}},t.multilineTokenSupport=!1,t.overlappingTokenSupport=!1,t.serverCancelSupport=!0,t.augmentsSyntaxTokens=!0,Y(Y(e,"workspace"),"semanticTokens").refreshSupport=!0}initialize(e,t){this._client.onRequest(De.SemanticTokensRefreshRequest.type,async()=>{for(let s of this.getAllProviders())s.onDidChangeSemanticTokensEmitter.fire()});let[r,o]=this.getRegistration(t,e.semanticTokensProvider);!r||!o||this.register({id:r,registerOptions:o})}registerLanguageProvider(e){let t=fa(e.full)?e.full:e.full!==void 0,i=e.full!==void 0&&typeof e.full!="boolean"&&e.full.delta===!0,r=new De.Emitter,o=t?{onDidChangeSemanticTokens:r.event,provideDocumentSemanticTokens:(u,c)=>{let d=this._client.middleware,g=(p,f)=>{let m={textDocument:go(p)};return this.sendRequest(De.SemanticTokensRequest.type,m,f)};return d.provideDocumentSemanticTokens?d.provideDocumentSemanticTokens(u,c,g):g(u,c)},provideDocumentSemanticTokensEdits:i?(u,c,h)=>{let g=this._client.middleware,p=(f,m,b)=>{let w={textDocument:go(f),previousResultId:m};return this.sendRequest(De.SemanticTokensDeltaRequest.type,w,b)};return g.provideDocumentSemanticTokensEdits?g.provideDocumentSemanticTokensEdits(u,c,h,p):p(u,c,h)}:void 0}:void 0,a=e.range===!0?{provideDocumentRangeSemanticTokens:(u,c,h)=>{let g=this._client.middleware,p=(f,m,b)=>{let w={textDocument:go(f),range:m};return this.sendRequest(De.SemanticTokensRangeRequest.type,w,b)};return g.provideDocumentRangeSemanticTokens?g.provideDocumentRangeSemanticTokens(u,c,h,p):p(u,c,h)}}:void 0,l=[];return o!==void 0&&l.push(_.registerDocumentSemanticTokensProvider(e.documentSelector,o,e.legend)),a!==void 0&&l.push(_.registerDocumentRangeSemanticTokensProvider(e.documentSelector,a,e.legend)),[De.Disposable.create(()=>l.forEach(u=>u.dispose())),{range:a,full:o,onDidChangeSemanticTokensEmitter:r}]}}});var nF,jS,MQ=k(()=>{"use strict";nF=S(W());de();Ze();Bt();$t();jS=class extends me{constructor(e){super(e,nF.SignatureHelpRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"signatureHelp");t.dynamicRegistration=!0,t.contextSupport=!0,t.signatureInformation={documentationFormat:this._client.supportedMarkupKind,activeParameterSupport:!0,parameterInformation:{labelOffsetSupport:!0}}}initialize(e,t){let i=this.getRegistrationOptions(t,e.signatureHelpProvider);!i||this.register({id:Se(),registerOptions:i})}registerLanguageProvider(e){let t={provideSignatureHelp:(r,o,s,a)=>{let l=this._client,u=(h,d,g,p)=>this.sendRequest(nF.SignatureHelpRequest.type,eQ(h,d,g),p),c=l.middleware;return c.provideSignatureHelp?c.provideSignatureHelp(r,o,a,s,u):u(r,o,a,s)}};return[_.registerSignatureHelpProvider(e.documentSelector,t,e.triggerCharacters),t]}}});var ot,MS,OS,AS,NS,HS,qS,OQ=k(()=>{"use strict";ot=S(W());ie();Ze();Bt();$t();MS=class extends Ir{constructor(t,i){super(t,v.onDidOpenTextDocument,ot.DidOpenTextDocumentNotification.type,"didOpen",r=>UK(r),Ir.textDocumentFilter);this._syncedDocuments=i}get registrationType(){return ot.DidOpenTextDocumentNotification.type}fillClientCapabilities(t){Y(Y(t,"textDocument"),"synchronization").dynamicRegistration=!0}initialize(t,i){let r=t.resolvedTextDocumentSync;i&&r&&r.openClose&&this.register({id:Se(),registerOptions:{documentSelector:i}})}register(t){super.register(t),t.registerOptions.documentSelector&&v.textDocuments.forEach(i=>{let r=i.uri;this._syncedDocuments.has(r)||this.callback(i)})}notificationSent(t,i,r){super.notificationSent(t,i,r),this._syncedDocuments.set(t.uri.toString(),t)}},OS=class extends Ir{constructor(t,i){super(t,v.onDidCloseTextDocument,ot.DidCloseTextDocumentNotification.type,"didClose",r=>GK(r),Ir.textDocumentFilter);this._syncedDocuments=i}get registrationType(){return ot.DidCloseTextDocumentNotification.type}fillClientCapabilities(t){Y(Y(t,"textDocument"),"synchronization").dynamicRegistration=!0}initialize(t,i){let r=t.resolvedTextDocumentSync;i&&r&&r.openClose&&this.register({id:Se(),registerOptions:{documentSelector:i}})}notificationSent(t,i,r){super.notificationSent(t,i,r),this._syncedDocuments.delete(t.uri.toString())}unregister(t){let i=this._selectors.get(t);if(!i)return;super.unregister(t);let r=this._selectors.values();this._syncedDocuments.forEach(o=>{if(v.match(i,o)>0&&!this._selectorFilter(r,o)){let s=this._client.middleware,a=u=>this._client.sendNotification(this._type,this._createParams(u));this._syncedDocuments.delete(o.uri.toString());let l=s.didClose?s.didClose(o,a):a(o);l&&l.catch(u=>{this._client.error(`Sending document notification ${this._type.method} failed`,u)})}})}},AS=class extends Pu{constructor(t){super(t);this._changeData=new Map,this._onNotificationSent=new ot.Emitter}*getDocumentSelectors(){for(let t of this._changeData.values())yield t.documentSelector}get registrationType(){return ot.DidChangeTextDocumentNotification.type}fillClientCapabilities(t){Y(Y(t,"textDocument"),"synchronization").dynamicRegistration=!0}initialize(t,i){let r=t.resolvedTextDocumentSync;i&&r&&r.change!==void 0&&r.change!==ot.TextDocumentSyncKind.None&&this.register({id:Se(),registerOptions:Object.assign({},{documentSelector:i},{syncKind:r.change})})}register(t){!t.registerOptions.documentSelector||(this._listener||(this._listener=v.onDidChangeTextDocument(this.callback,this)),this._changeData.set(t.id,{documentSelector:t.registerOptions.documentSelector,syncKind:t.registerOptions.syncKind}))}callback(t){if(t.contentChanges.length===0)return;let i=v.getDocument(t.textDocument.uri),{textDocument:r}=i,o=[];for(let s of this._changeData.values())if(v.match(s.documentSelector,r)>0){let a=this._client.middleware,l,u;s.syncKind===ot.TextDocumentSyncKind.Incremental?u=async c=>{let h=KK(c);await this._client.sendNotification(ot.DidChangeTextDocumentNotification.type,h),this.notificationSent(c,ot.DidChangeTextDocumentNotification.type,h)}:s.syncKind===ot.TextDocumentSyncKind.Full?u=async c=>{let h=zK(r);await this._client.sendNotification(ot.DidChangeTextDocumentNotification.type,h),this.notificationSent(c,ot.DidChangeTextDocumentNotification.type,h)}:u=()=>Promise.resolve(void 0),l=a.didChange?a.didChange(t,u):u(t),l&&o.push(l)}return Promise.all(o).then(void 0,s=>{throw this._client.error(`Sending document notification ${ot.DidChangeTextDocumentNotification.type.method} failed`,s),s})}get onNotificationSent(){return this._onNotificationSent.event}notificationSent(t,i,r){this._onNotificationSent.fire({original:t,type:i,params:r})}unregister(t){this._changeData.delete(t)}dispose(){this._changeData.clear(),this._listener&&(this._listener.dispose(),this._listener=void 0)}getProvider(t){for(let i of this._changeData.values())if(v.match(i.documentSelector,t)>0)return{send:r=>this.callback(r)}}},NS=class extends Ir{constructor(e){super(e,v.onWillSaveTextDocument,ot.WillSaveTextDocumentNotification.type,"willSave",t=>qI(t),(t,i)=>Ir.textDocumentFilter(t,i.document))}get registrationType(){return ot.WillSaveTextDocumentNotification.type}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"synchronization");t.willSave=!0}initialize(e,t){let i=e.resolvedTextDocumentSync;t&&i&&i.willSave&&this.register({id:Se(),registerOptions:{documentSelector:t}})}},HS=class extends Pu{constructor(t){super(t);this._selectors=new Map}getDocumentSelectors(){return this._selectors.values()}get registrationType(){return ot.WillSaveTextDocumentWaitUntilRequest.type}fillClientCapabilities(t){let i=Y(Y(t,"textDocument"),"synchronization");i.willSaveWaitUntil=!0}initialize(t,i){let r=t.resolvedTextDocumentSync;i&&i.length>0&&r&&r.willSaveWaitUntil&&this.register({id:Se(),registerOptions:{documentSelector:i}})}register(t){!t.registerOptions.documentSelector||(this._listener||(this._listener=v.onWillSaveTextDocument(this.callback,this)),this._selectors.set(t.id,t.registerOptions.documentSelector))}callback(t){if(Ir.textDocumentFilter(this._selectors.values(),t.document)){let i=this._client.middleware,r=o=>this.sendRequest(ot.WillSaveTextDocumentWaitUntilRequest.type,qI(o),ot.CancellationToken.None);t.waitUntil(i.willSaveWaitUntil?i.willSaveWaitUntil(t,r):r(t))}}unregister(t){this._selectors.delete(t),this._selectors.size===0&&this._listener&&(this._listener.dispose(),this._listener=void 0)}dispose(){this._selectors.clear(),this._listener&&(this._listener.dispose(),this._listener=void 0)}},qS=class extends Ir{constructor(t){super(t,v.onDidSaveTextDocument,ot.DidSaveTextDocumentNotification.type,"didSave",i=>QK(i,this._includeText),Ir.textDocumentFilter);this._includeText=!1}get registrationType(){return ot.DidSaveTextDocumentNotification.type}fillClientCapabilities(t){Y(Y(t,"textDocument"),"synchronization").didSave=!0}initialize(t,i){let r=t.resolvedTextDocumentSync;if(i&&r&&r.save){let o=typeof r.save=="boolean"?{includeText:!1}:{includeText:!!r.save.includeText};this.register({id:Se(),registerOptions:Object.assign({},{documentSelector:i},o)})}}register(t){this._includeText=!!t.registerOptions.includeText,super.register(t)}}});var rF,BS,AQ=k(()=>{"use strict";rF=S(W());de();Bt();Ze();BS=class extends me{constructor(e){super(e,rF.TypeDefinitionRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"typeDefinition");t.dynamicRegistration=!0,t.linkSupport=!0}initialize(e,t){let[i,r]=this.getRegistration(t,e.typeDefinitionProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t={provideTypeDefinition:(i,r,o)=>{let s=this._client,a=(u,c,h)=>this.sendRequest(rF.TypeDefinitionRequest.type,Ei(u,c),h),l=s.middleware;return l.provideTypeDefinition?l.provideTypeDefinition(i,r,o,a):a(i,r,o)}};return[_.registerTypeDefinitionProvider(e.documentSelector,t),t]}}});var Iu,WS,NQ=k(()=>{"use strict";Iu=S(W());de();Ze();Bt();WS=class extends me{constructor(e){super(e,Iu.TypeHierarchyPrepareRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"textDocument"),"typeHierarchy");t.dynamicRegistration=!0}initialize(e,t){let[i,r]=this.getRegistration(t,e.typeHierarchyProvider);!i||!r||this.register({id:i,registerOptions:r})}registerLanguageProvider(e){let t=this._client,i=e.documentSelector,r={prepareTypeHierarchy:(o,s,a)=>{let l=(c,h,d)=>{let g=Ei(c,h);return this.sendRequest(Iu.TypeHierarchyPrepareRequest.type,g,d)},u=t.middleware;return u.prepareTypeHierarchy?u.prepareTypeHierarchy(o,s,a,l):l(o,s,a)},provideTypeHierarchySupertypes:(o,s)=>{let a=(u,c)=>this.sendRequest(Iu.TypeHierarchySupertypesRequest.type,{item:u},c),l=t.middleware;return l.provideTypeHierarchySupertypes?l.provideTypeHierarchySupertypes(o,s,a):a(o,s)},provideTypeHierarchySubtypes:(o,s)=>{let a=(u,c)=>this.sendRequest(Iu.TypeHierarchySubtypesRequest.type,{item:u},c),l=t.middleware;return l.provideTypeHierarchySubtypes?l.provideTypeHierarchySubtypes(o,s,a):a(o,s)}};return[_.registerTypeHierarchyProvider(i,r),r]}}});var ZS,JS,YS,HQ=k(()=>{"use strict";xe();ZS=(t=>(t[t.DoNotRestart=1]="DoNotRestart",t[t.Restart=2]="Restart",t))(ZS||{}),JS=(t=>(t[t.Continue=1]="Continue",t[t.Shutdown=2]="Shutdown",t))(JS||{}),YS=class{constructor(e,t){this.name=e;this.maxRestartCount=t;this.milliseconds=3*60*1e3;this.restarts=[]}error(e,t,i){return i&&i<=3?1:2}closed(){return this.restarts.push(Date.now()),this.restarts.length{"use strict";$S=q()("language-client"),US=class{error(e){$S.error(e)}warn(e){$S.warn(e)}info(e){$S.info(e)}log(e){$S.log(e)}},Mm=class{error(e){}warn(e){}info(e){}log(e){}}});function oF(n,e){if(n!==void 0)return n[e]}function BQ(n,e){return n.filter(t=>!e.includes(t))}var Fu,M3e,XS,WQ=k(()=>{"use strict";Fu=S(W());Pe();$e();ie();$t();M3e=q()("language-client-workspaceFolder");XS=class{constructor(e){this._client=e;this._listeners=new Map}getState(){return{kind:"workspace",id:this.registrationType.method,registrations:this._listeners.size>0}}get registrationType(){return Fu.DidChangeWorkspaceFoldersNotification.type}getValidWorkspaceFolders(){let{workspaceFolders:e}=v;if(!e||e.length==0)return;let t=this._client.clientOptions.ignoredRootPaths??[],i=e.filter(r=>{let o=j.parse(r.uri).fsPath;return t.every(s=>!ni(s,o))});return i.length?i:void 0}fillInitializeParams(e){let t=this.getValidWorkspaceFolders();this.initializeWithFolders(t),t===void 0?(this._client.warn("No valid workspaceFolder exists"),e.workspaceFolders=null):e.workspaceFolders=t.map(i=>this.asProtocol(i))}initializeWithFolders(e){this._initialFolders=e}fillClientCapabilities(e){e.workspace=e.workspace||{},e.workspace.workspaceFolders=!0}initialize(e){let t=this._client;t.onRequest(Fu.WorkspaceFoldersRequest.type,o=>{let s=()=>{let l=this.getValidWorkspaceFolders();return l===void 0?null:l.map(c=>this.asProtocol(c))},a=t.middleware.workspace;return a!=null&&a.workspaceFolders?a.workspaceFolders(o,s):s(o)});let i=oF(oF(oF(e,"workspace"),"workspaceFolders"),"changeNotifications"),r;typeof i=="string"?r=i:i&&(r=Se()),r&&this.register({id:r,registerOptions:void 0})}doSendEvent(e,t){let i={event:{added:e.map(r=>this.asProtocol(r)),removed:t.map(r=>this.asProtocol(r))}};return this._client.sendNotification(Fu.DidChangeWorkspaceFoldersNotification.type,i)}sendInitialEvent(e){let t;if(this._initialFolders&&e){let i=BQ(this._initialFolders,e),r=BQ(e,this._initialFolders);(r.length>0||i.length>0)&&(t=this.doSendEvent(r,i))}else this._initialFolders?t=this.doSendEvent([],this._initialFolders):e&&(t=this.doSendEvent(e,[]));t&&t.catch(i=>{this._client.error(`Sending notification ${Fu.DidChangeWorkspaceFoldersNotification.type.method} failed`,i)})}register(e){let t=e.id,i=this._client,r=v.onDidChangeWorkspaceFolders(s=>{let a=c=>this.doSendEvent(c.added,c.removed),l=i.middleware.workspace,u=l!=null&&l.didChangeWorkspaceFolders?l.didChangeWorkspaceFolders(s,a):a(s);u&&u.catch(c=>{this._client.error(`Sending notification ${Fu.DidChangeWorkspaceFoldersNotification.type.method} failed`,c)})});this._listeners.set(t,r);let o=this.getValidWorkspaceFolders();this.sendInitialEvent(o)}unregister(e){}dispose(){for(let e of this._listeners.values())e.dispose();this._listeners.clear()}asProtocol(e){return e==null?null:{uri:e.uri,name:e.name}}}});var Om,sF,GS,YQ=k(()=>{"use strict";Om=S(W());de();zI();Ze();$t();sF=class extends ho{constructor(t,i){super(t);this._registrationType=i;this._registrations=new Map}getState(){let t=this._registrations.size>0;return{kind:"workspace",id:this._registrationType.method,registrations:t}}get registrationType(){return this._registrationType}register(t){let i=this.registerLanguageProvider(t.registerOptions);this._registrations.set(t.id,{disposable:i[0],provider:i[1]})}unregister(t){let i=this._registrations.get(t);i&&i.disposable.dispose()}dispose(){this._registrations.forEach(t=>{t.disposable.dispose()}),this._registrations.clear()}getProviders(){let t=[];for(let i of this._registrations.values())t.push(i.provider);return t}},GS=class extends sF{constructor(e){super(e,Om.WorkspaceSymbolRequest.type)}fillClientCapabilities(e){let t=Y(Y(e,"workspace"),"symbol");t.dynamicRegistration=!0,t.symbolKind={valueSet:XI},t.tagSupport={valueSet:GI},t.resolveSupport={properties:["location.range"]}}initialize(e){!e.workspaceSymbolProvider||this.register({id:Se(),registerOptions:e.workspaceSymbolProvider===!0?{workDoneProgress:!1}:e.workspaceSymbolProvider})}registerLanguageProvider(e){let t={provideWorkspaceSymbols:(i,r)=>{let o=this._client,s=(l,u)=>this.sendRequest(Om.WorkspaceSymbolRequest.type,{query:l},u),a=o.middleware;return a.provideWorkspaceSymbols?a.provideWorkspaceSymbols(i,r,s):s(i,r)},resolveWorkspaceSymbol:e.resolveProvider===!0?(i,r)=>{let o=this._client,s=(l,u)=>this.sendRequest(Om.WorkspaceSymbolResolveRequest.type,l,u),a=o.middleware;return a.resolveWorkspaceSymbol?a.resolveWorkspaceSymbol(i,r,s):s(i,r)}:void 0};return[_.registerWorkspaceSymbolProvider(t),t]}}});function ZDe(n,e,t,i,r){let o=new US,s=(0,K.createProtocolConnection)(n,e,o,r);return s.onError(l=>{t(l[0],l[1],l[2])}),s.onClose(i),{id:"",hasPendingResponse:()=>s.hasPendingResponse(),listen:()=>s.listen(),sendRequest:(l,...u)=>s.sendRequest(ti(l)?l:l.method,...u),onRequest:(l,u)=>s.onRequest(ti(l)?l:l.method,u),sendNotification:(l,u)=>s.sendNotification(ti(l)?l:l.method,u),onNotification:(l,u)=>s.onNotification(ti(l)?l:l.method,u),onProgress:s.onProgress,sendProgress:s.sendProgress,trace:(l,u,c)=>s.trace(l,u,c),initialize:l=>s.sendRequest(K.InitializeRequest.type,l),shutdown:()=>s.sendRequest(K.ShutdownRequest.type,void 0),exit:()=>s.sendNotification(K.ExitNotification.type),end:()=>s.end(),dispose:()=>s.dispose()}}var ZQ,aF,K,zS,QS,VS,lF,cd,KS,Am,JDe,uF=k(()=>{"use strict";ZQ=S(require("os")),aF=S(require("path")),K=S(W());Pe();de();xr();$e();wi();xt();xe();ie();rQ();oQ();sQ();aQ();lQ();uQ();cQ();hQ();gQ();pQ();fQ();zI();mQ();Ze();wQ();CQ();SQ();DQ();TQ();kQ();PQ();EQ();RQ();_Q();eF();LQ();IQ();FQ();jQ();MQ();OQ();AQ();NQ();Bt();HQ();qQ();$t();WQ();YQ();zS=q()("language-client-client");QS=(r=>(r[r.Info=1]="Info",r[r.Warn=2]="Warn",r[r.Error=3]="Error",r[r.Never=4]="Never",r))(QS||{}),VS=(i=>(i[i.Stopped=1]="Stopped",i[i.Running=2]="Running",i[i.Starting=3]="Starting",i))(VS||{}),lF=(s=>(s[s.Initial=0]="Initial",s[s.Starting=1]="Starting",s[s.StartFailed=2]="StartFailed",s[s.Running=3]="Running",s[s.Stopping=4]="Stopping",s[s.Stopped=5]="Stopped",s))(lF||{});(e=>{function n(t){return t&&K.MessageReader.is(t.reader)&&K.MessageWriter.is(t.writer)}e.is=n})(cd||(cd={}));KS=class{constructor(e,t,i){this._features=[];this._dynamicFeatures=new Map;this._id=e,this._name=t,i.outputChannel?this._outputChannel=i.outputChannel:this._outputChannel=void 0,this._clientOptions=this.resolveClientOptions(i),this.$state=0,this._connection=void 0,this._initializeResult=void 0,this._listeners=[],this._diagnostics=void 0,this._notificationHandlers=new Map,this._pendingNotificationHandlers=new Map,this._notificationDisposables=new Map,this._requestHandlers=new Map,this._pendingRequestHandlers=new Map,this._requestDisposables=new Map,this._progressHandlers=new Map,this._pendingProgressHandlers=new Map,this._progressDisposables=new Map,this._ignoredRegistrations=new Set,this._onStop=void 0,this._stateChangeEmitter=new K.Emitter,this._trace=K.Trace.Off,this._tracer={log:(r,o)=>{ti(r)?this.logTrace(r,o):this.logObjectTrace(r)}},this._syncedDocuments=new Map,this.registerBuiltinFeatures()}resolveClientOptions(e){var u;let t={isTrusted:!1,supportHtml:!1};e.markdown!=null&&(t.isTrusted=e.markdown.isTrusted===!0,t.supportHtml=e.markdown.supportHtml===!0);let i=e.disableSnippetCompletion;e.disableSnippetCompletion===void 0&&v.getConfiguration("suggest",e.workspaceFolder).get("snippetsSupport",!0)===!1&&(i=!0);let r=e.disableMarkdown;r===void 0&&(r=v.getConfiguration("coc.preferences",e.workspaceFolder).get("enableMarkdown",!0)===!1);let o=v.getConfiguration("pullDiagnostic",e.workspaceFolder),s=e.diagnosticPullOptions??{};s.onChange===void 0&&(s.onChange=o.get("onChange")),s.onSave===void 0&&(s.onSave=o.get("onSave")),s.workspace===void 0&&(s.workspace=o.get("workspace")),s.ignored=o.get("ignored",[]).concat(s.ignored??[]);let a=e.disabledFeatures??[];for(let c of["disableCompletion","disableWorkspaceFolders","disableDiagnostics"])if(typeof e[c]=="boolean"){let h=` -`+Error().stack.split(` -`).slice(2,4).join(` -`);if(zS.warn(`${c} in the client options is deprecated. use disabledFeatures instead.`,h),e[c]===!0){let d=c.slice(7);a.push(d[0].toLowerCase()+d.slice(1))}}let l=e.separateDiagnostics;return e.separateDiagnostics===void 0&&(l=v.getConfiguration("diagnostic",e.workspaceFolder).get("separateRelatedInformationAsDiagnostics")),{disabledFeatures:a,disableMarkdown:r,disableSnippetCompletion:i,separateDiagnostics:l,diagnosticPullOptions:s,rootPatterns:e.rootPatterns??[],requireRootPattern:e.requireRootPattern,disableDynamicRegister:e.disableDynamicRegister,formatterPriority:e.formatterPriority??0,ignoredRootPaths:e.ignoredRootPaths??[],documentSelector:e.documentSelector??[],synchronize:e.synchronize??{},diagnosticCollectionName:e.diagnosticCollectionName,outputChannelName:e.outputChannelName??this._id,revealOutputChannelOn:e.revealOutputChannelOn??4,stdioEncoding:e.stdioEncoding??"utf8",initializationOptions:e.initializationOptions,initializationFailedHandler:e.initializationFailedHandler,progressOnInitialization:e.progressOnInitialization===!0,errorHandler:e.errorHandler??this.createDefaultErrorHandler((u=e.connectionOptions)==null?void 0:u.maxRestartCount),middleware:e.middleware??{},workspaceFolder:e.workspaceFolder,connectionOptions:e.connectionOptions,markdown:t}}get supportedMarkupKind(){return this.clientOptions.disableMarkdown?[K.MarkupKind.PlainText]:[K.MarkupKind.Markdown,K.MarkupKind.PlainText]}get state(){return this.getPublicState()}get $state(){return this._state}set $state(e){let t=this.getPublicState();this._state=e;let i=this.getPublicState();i!==t&&this._stateChangeEmitter.fire({oldState:t,newState:i})}get id(){return this._id}get name(){return this._name}get middleware(){return this._clientOptions.middleware}getPublicState(){return this.$state===3?2:this.$state===1?3:1}get initializeResult(){return this._initializeResult}async sendRequest(e,...t){this.checkState();try{return await(await this.$start()).sendRequest(e,...t)}catch(i){throw this.error(`Sending request ${ti(e)?e:e.method} failed.`,i),i}}onRequest(e,t){let i=typeof e=="string"?e:e.method;this._requestHandlers.set(i,t);let r=this.activeConnection(),o;return r!==void 0?(this._requestDisposables.set(i,r.onRequest(e,t)),o={dispose:()=>{let s=this._requestDisposables.get(i);s!==void 0&&(s.dispose(),this._requestDisposables.delete(i))}}):(this._pendingRequestHandlers.set(i,t),o={dispose:()=>{this._pendingRequestHandlers.delete(i);let s=this._requestDisposables.get(i);s!==void 0&&(s.dispose(),this._requestDisposables.delete(i))}}),{dispose:()=>{this._requestHandlers.delete(i),o.dispose()}}}async sendNotification(e,t){this.checkState();try{return await(await this.$start()).sendNotification(e,t)}catch(i){throw this.error(`Sending notification ${ti(e)?e:e.method} failed.`,i),i}}onNotification(e,t){let i=typeof e=="string"?e:e.method;this._notificationHandlers.set(i,t);let r=this.activeConnection(),o;return r!==void 0?(this._notificationDisposables.set(i,r.onNotification(e,t)),o={dispose:()=>{let s=this._notificationDisposables.get(i);s!==void 0&&(s.dispose(),this._notificationDisposables.delete(i))}}):(this._pendingNotificationHandlers.set(i,t),o={dispose:()=>{this._pendingNotificationHandlers.delete(i);let s=this._notificationDisposables.get(i);s!==void 0&&(s.dispose(),this._notificationDisposables.delete(i))}}),{dispose:()=>{this._notificationHandlers.delete(i),o.dispose()}}}onProgress(e,t,i){this._progressHandlers.set(t,{type:e,handler:i});let r=this.activeConnection(),o,s=this._clientOptions.middleware.handleWorkDoneProgress,a=K.WorkDoneProgress.is(e)&&s!==void 0?l=>{s(t,l,()=>i(l))}:i;return r!==void 0?(this._progressDisposables.set(t,r.onProgress(e,t,a)),o={dispose:()=>{let l=this._progressDisposables.get(t);l!==void 0&&(l.dispose(),this._progressDisposables.delete(t))}}):(this._pendingProgressHandlers.set(t,{type:e,handler:i}),o={dispose:()=>{this._pendingProgressHandlers.delete(t);let l=this._progressDisposables.get(t);l!==void 0&&(l.dispose(),this._progressDisposables.delete(t))}}),{dispose:()=>{this._progressHandlers.delete(t),o.dispose()}}}async sendProgress(e,t,i){this.checkState();try{await(await this.$start()).sendProgress(e,t,i)}catch(r){throw this.error(`Sending progress for token ${t} failed.`,r),r}}get configuredSection(){var t;let e=(t=this._clientOptions.synchronize)==null?void 0:t.configurationSection;return typeof e=="string"&&e.startsWith("languageserver.")?e:void 0}get clientOptions(){return this._clientOptions}get onDidChangeState(){return this._stateChangeEmitter.event}get outputChannel(){if(!this._outputChannel){let{outputChannelName:e}=this._clientOptions;this._outputChannel=D.createOutputChannel(e||this._name)}return this._outputChannel}get diagnostics(){return this._diagnostics}createDefaultErrorHandler(e){return new YS(this._id,e??4)}set trace(e){this._trace=e;let t=this.activeConnection();t!==void 0&&t.trace(this._trace,this._tracer,{sendNotification:!1,traceFormat:this._traceFormat})}logObjectTrace(e){e.isLSPMessage&&e.type?this.outputChannel.append(`[LSP - ${new Date().toLocaleTimeString()}] `):this.outputChannel.append(`[Trace - ${new Date().toLocaleTimeString()}] `),e&&this.outputChannel.appendLine(`${JSON.stringify(e)}`)}data2String(e){if(e instanceof K.ResponseError){let t=e;return` Message: ${t.message} - Code: ${t.code} ${t.data?` -`+t.data.toString():""}`}return e instanceof Error?ti(e.stack)?e.stack:e.message:ti(e)?e:e.toString()}info(e,t,i=!0){this.outputChannel.appendLine(`[Info - ${new Date().toLocaleTimeString()}] ${e}`),t!=null&&this.outputChannel.appendLine(this.data2String(t)),i&&this._clientOptions.revealOutputChannelOn<=1&&this.showNotificationMessage(K.MessageType.Info,e)}warn(e,t,i=!0){this.outputChannel.appendLine(`[Warn - ${new Date().toLocaleTimeString()}] ${e}`),t!=null&&this.outputChannel.appendLine(this.data2String(t)),i&&this._clientOptions.revealOutputChannelOn<=2&&this.showNotificationMessage(K.MessageType.Warning,e)}error(e,t,i=!0){this.outputChannel.appendLine(`[Error - ${new Date().toLocaleTimeString()}] ${e}`),t!=null&&this.outputChannel.appendLine(this.data2String(t)),(i==="force"||i&&this._clientOptions.revealOutputChannelOn<=3)&&this.showNotificationMessage(K.MessageType.Error,e)}showNotificationMessage(e,t){t=t??"A request has failed. See the output for more information.",(e===K.MessageType.Error?D.showErrorMessage.bind(D):e===K.MessageType.Warning?D.showWarningMessage.bind(D):D.showInformationMessage.bind(D))(t)}logTrace(e,t){this.outputChannel.appendLine(`[Trace - ${new Date().toLocaleTimeString()}] ${e}`),t&&this.outputChannel.appendLine(this.data2String(t))}needsStart(){return this.$state===0||this.$state===4||this.$state===5}needsStop(){return this.$state===1||this.$state===3}activeConnection(){return this.$state===3&&this._connection!==void 0?this._connection:void 0}get hasPendingResponse(){var e;return(e=this._connection)==null?void 0:e.hasPendingResponse()}onReady(){return this._onStart?this._onStart:new Promise(e=>{let t=this.onDidChangeState(i=>{i.newState===2&&(t.dispose(),e())})})}get started(){return this.$state!=0}isRunning(){return this.$state===3}async _start(){if(this._disposed==="disposing"||this._disposed==="disposed")throw new Error("Client got disposed and can't be restarted.");if(this.$state===4)throw new Error("Client is currently stopping. Can only restart a full stopped client");if(this._onStart!==void 0)return this._onStart;this._rootPath=this.resolveRootPath();let[e,t,i]=this.createOnStartPromise();if(this._onStart=e,this._diagnostics===void 0){let r=this._clientOptions,o=r.diagnosticCollectionName?r.diagnosticCollectionName:this._id;r.disabledFeatures.includes("diagnostics")||(this._diagnostics=_.createDiagnosticCollection(o))}for(let[r,o]of this._notificationHandlers)this._pendingNotificationHandlers.has(r)||this._pendingNotificationHandlers.set(r,o);for(let[r,o]of this._requestHandlers)this._pendingRequestHandlers.has(r)||this._pendingRequestHandlers.set(r,o);for(let[r,o]of this._progressHandlers)this._pendingProgressHandlers.has(r)||this._pendingProgressHandlers.set(r,o);this.$state=1;try{let r=await this.createConnection();this.handleConnectionEvents(r),r.listen(),await this.initialize(r),t()}catch(r){this.$state=2,this.error(`${this._name} client: couldn't create connection to server.`,r,"force"),i(r)}return this._onStart}start(){let e=this._start();return e.dispose=()=>{this.needsStop()&&this.stop()},e}async $start(){if(this.$state===2)throw new Error("Previous start failed. Can't restart server.");await this._start();let e=this.activeConnection();if(e===void 0)throw new Error("Starting server failed");return e}handleConnectionEvents(e){e.onNotification(K.LogMessageNotification.type,t=>{switch(t.type){case K.MessageType.Error:this.error(t.message);break;case K.MessageType.Warning:this.warn(t.message);break;case K.MessageType.Info:this.info(t.message);break;default:this.outputChannel.appendLine(t.message)}}),e.onNotification(K.ShowMessageNotification.type,t=>{switch(t.type){case K.MessageType.Error:D.showErrorMessage(t.message);break;case K.MessageType.Warning:D.showWarningMessage(t.message);break;case K.MessageType.Info:D.showInformationMessage(t.message);break;default:D.showInformationMessage(t.message)}}),e.onNotification(K.TelemetryEventNotification.type,t=>{}),e.onRequest(K.ShowMessageRequest.type,t=>{let i;switch(t.type){case K.MessageType.Error:i=D.showErrorMessage.bind(D);break;case K.MessageType.Warning:i=D.showWarningMessage.bind(D);break;case K.MessageType.Info:i=D.showInformationMessage.bind(D);break;default:i=D.showInformationMessage.bind(D)}let r=t.actions||[];return i(t.message,...r).then(o=>o??null)}),e.onRequest(K.ShowDocumentRequest.type,async t=>{var o;let i=async s=>{try{if(s.external===!0||/^https?:\/\//.test(s.uri))return await v.openResource(s.uri),{success:!0};{let{selection:a,takeFocus:l}=s;return l===!1?await v.loadFile(s.uri):(await v.jumpTo(s.uri,a==null?void 0:a.start),Me(a.start,a.end)!=0&&await D.selectRange(a)),{success:!0}}}catch{return{success:!1}}},r=(o=this._clientOptions.middleware.window)==null?void 0:o.showDocument;return r!==void 0?r(t,i):i(t)})}createOnStartPromise(){let e,t;return[new Promise((r,o)=>{e=r,t=o}),e,t]}resolveRootPath(){if(this._clientOptions.workspaceFolder)return j.parse(this._clientOptions.workspaceFolder.uri).fsPath;let{ignoredRootPaths:e,rootPatterns:t,requireRootPattern:i}=this._clientOptions,r;if(Array.isArray(t)&&t.length>0){let s=v.getDocument(v.bufnr);if(s&&s.schema=="file"){let a=aF.default.dirname(j.parse(s.uri).fsPath);r=np(a,t,v.cwd)}else r=np(v.cwd,t);if(i&&!r)throw new Error("Required root pattern not resolved, server won't start.")}let o=r||v.rootPath||v.cwd;return ni(o,ZQ.default.homedir())||e.some(s=>ni(o,s))?(this.warn(`Ignored rootPath ${o} of client "${this._id}"`),null):o}initialize(e){let{initializationOptions:t,workspaceFolder:i,progressOnInitialization:r}=this._clientOptions;this.refreshTrace(e,!1);let o=this._rootPath,s={processId:process.pid,rootPath:o||null,rootUri:o?ad(j.file(o)):null,capabilities:this.computeClientCapabilities(),initializationOptions:Oi(t)?t():t,trace:K.Trace.toString(this._trace),workspaceFolders:i?[i]:null,locale:this.getLocale(),clientInfo:{name:"coc.nvim",version:v.version}};if(this.fillInitializeParams(s),r){let a=Se();s.workDoneToken=a,e.id=this._id;let l=new ud(e,a);return l.begin({title:`Initializing ${this.id}`,kind:"begin"}),this.doInitialize(e,s).then(u=>(l.done(),u),u=>{throw l.cancel(),u})}else return this.doInitialize(e,s)}async doInitialize(e,t){try{let i=await e.initialize(t);if(i.capabilities.positionEncoding!==void 0&&i.capabilities.positionEncoding!==K.PositionEncodingKind.UTF16)throw await e.shutdown(),await e.exit(),e.end(),e.dispose(),new Error(`Unsupported position encoding (${i.capabilities.positionEncoding}) received from server ${this.name}`);this._initializeResult=i,this.$state=3;let r;rw(i.capabilities.textDocumentSync)?i.capabilities.textDocumentSync===K.TextDocumentSyncKind.None?r={openClose:!1,change:K.TextDocumentSyncKind.None,save:void 0}:r={openClose:!0,change:i.capabilities.textDocumentSync,save:{includeText:!1}}:i.capabilities.textDocumentSync!==void 0&&i.capabilities.textDocumentSync!==null&&(r=i.capabilities.textDocumentSync),this._capabilities=Object.assign({},i.capabilities,{resolvedTextDocumentSync:r}),e.onNotification(K.PublishDiagnosticsNotification.type,o=>this.handleDiagnostics(o)),e.onRequest(K.RegistrationRequest.type,o=>this.handleRegistrationRequest(o)),e.onRequest("client/registerFeature",o=>this.handleRegistrationRequest(o)),e.onRequest(K.UnregistrationRequest.type,o=>this.handleUnregistrationRequest(o)),e.onRequest("client/unregisterFeature",o=>this.handleUnregistrationRequest(o)),e.onRequest(K.ApplyWorkspaceEditRequest.type,o=>this.handleApplyWorkspaceEdit(o));for(let[o,s]of this._pendingNotificationHandlers)this._notificationDisposables.set(o,e.onNotification(o,s));this._pendingNotificationHandlers.clear();for(let[o,s]of this._pendingRequestHandlers)this._requestDisposables.set(o,e.onRequest(o,s));this._pendingRequestHandlers.clear();for(let[o,s]of this._pendingProgressHandlers)this._progressDisposables.set(o,e.onProgress(s.type,o,s.handler));return this._pendingProgressHandlers.clear(),await e.sendNotification(K.InitializedNotification.type,{}),this.hookConfigurationChanged(e),this.initializeFeatures(e),i}catch(i){let r=o=>{o?this.initialize(e).catch(()=>{}):this.stop().catch(()=>{})};throw this._clientOptions.initializationFailedHandler?r(this._clientOptions.initializationFailedHandler(i)):i instanceof K.ResponseError&&i.data&&i.data.retry?(this._connection&&(this._connection.end(),this._connection.dispose(),this._connection=null),D.showErrorMessage(i.message,{title:"Retry",id:"retry"}).then(o=>{r(o&&o.id==="retry")})):(i&&i.message&&D.showErrorMessage(i.message),this.error("Server initialization failed.",i),zS.error(`Server ${this.id} initialization failed.`,i),r(!1)),i}}stop(e=2e3){return this.shutdown("stop",e)}async shutdown(e,t){if(this.$state===5||this.$state===0)return;if(this.$state===4)return this._onStop;let i=this.activeConnection();if(i===void 0||this.$state!==3&&this.$state!==1)throw new Error(`Client is not running and can't be stopped. It's current state is: ${this.$state}`);this._initializeResult=void 0,this.$state=4,this.cleanUp(e);let r,o=new Promise(a=>{r=setTimeout(a,t)}),s=(async a=>(await a.shutdown(),await a.exit(),a))(i);return this._onStop=Promise.race([o,s]).then(a=>{if(r&&clearTimeout(r),a!==void 0)a.end(),a.dispose();else throw this.error("Stopping server timed out",void 0),new Error("Stopping the server timed out")},a=>{throw this.error("Stopping server failed",a),a}).finally(()=>{this.$state=5,e==="stop"&&this.cleanUpChannel(),this._onStart=void 0,this._onStop=void 0,this._connection=void 0,this._ignoredRegistrations.clear()})}dispose(e=2e3){if(!this._disposed)try{return this._disposed="disposing",this.needsStop()?this.stop(e):void 0}finally{this._disposed="disposed"}}cleanUp(e){this._listeners&&(this._listeners.forEach(t=>t.dispose()),this._listeners=[]),this._syncedDocuments&&this._syncedDocuments.clear();for(let t of this._features.values())typeof t.dispose=="function"?t.dispose():zS.error("Feature can't be disposed",t);e==="stop"&&this._diagnostics&&(this._diagnostics.dispose(),this._diagnostics=void 0)}cleanUpChannel(){this._outputChannel&&(this._outputChannel.dispose(),this._outputChannel=void 0)}async forceDocumentSync(){let e=Array.from(this._syncedDocuments.values());await Promise.all(e.map(t=>{let i=v.getDocument(t.uri);return i?i.synchronize():null}))}handleDiagnostics(e){let{uri:t,diagnostics:i,version:r}=e;if(typeof r=="number"){let s=v.getDocument(t);if(!s||s.version!=r)return}let o=this.clientOptions.middleware.handleDiagnostics;o?o(t,i,(s,a)=>this.setDiagnostics(s,a)):this.setDiagnostics(t,i)}async createConnection(){let e=(r,o,s)=>{this.handleConnectionError(r,o,s)},t=()=>{this.handleConnectionClosed()},i=await this.createMessageTransports(this._clientOptions.stdioEncoding??"utf8");return this._connection=ZDe(i.reader,i.writer,e,t,this._clientOptions.connectionOptions),this._connection}handleConnectionClosed(){if(this.$state===5){zS.debug(`client ${this._id} normal closed`);return}try{this._connection&&this._connection.dispose()}catch{}let e=1;if(this.$state!==4)try{e=this._clientOptions.errorHandler.closed()}catch{}this._connection=void 0,e===1?(this.error("Connection to server got closed. Server will not be restarted.",void 0,"force"),this.cleanUp("stop"),this.$state===1?this.$state=2:this.$state=5,this._onStop=Promise.resolve(),this._onStart=void 0):e===2&&(this.info("Connection to server got closed. Server will restart."),this.cleanUp("restart"),this.$state=0,this._onStop=Promise.resolve(),this._onStart=void 0,this.start().catch(t=>this.error("Restarting server failed",t,"force")))}checkState(){if(this.$state===2||this.$state===4||this.$state===5)throw new K.ResponseError(K.ErrorCodes.ConnectionInactive,"Client is not running")}handleConnectionError(e,t,i){this._clientOptions.errorHandler.error(e,t,i)===2&&(this.error(`Client ${this._name}: connection to server is erroring. Shutting down server.`,void 0,"force"),this.stop().catch(o=>{this.error("Stopping server failed",o)}))}hookConfigurationChanged(e){v.onDidChangeConfiguration(t=>{t.affectsConfiguration(this._id)&&this.refreshTrace(e,!0)},null,this._listeners)}refreshTrace(e,t=!1){let i=v.getConfiguration(this._id,this.clientOptions.workspaceFolder),r=K.Trace.Off,o=K.TraceFormat.Text;if(i){let s=i.get("trace.server","off");typeof s=="string"?r=K.Trace.fromString(s):(r=K.Trace.fromString(i.get("trace.server.verbosity","off")),o=K.TraceFormat.fromString(i.get("trace.server.format","text")))}t&&this._trace==r&&this._traceFormat==o||(this._trace=r,this._traceFormat=o,e.trace(this._trace,this._tracer,{sendNotification:t,traceFormat:this._traceFormat}).catch(s=>{this.error("Updating trace failed with error",s)}))}registerFeatures(e){for(let t of e)this.registerFeature(t,"")}registerFeature(e,t){let{disabledFeatures:i}=this._clientOptions;if(!(i.length>0&&i.includes(t))&&(this._features.push(e),GC.is(e))){let r=e.registrationType;this._dynamicFeatures.set(r.method,e)}}getStaticFeature(e){return this._features.find(t=>XC.is(t)&&t.method==e)}getFeature(e){return this._dynamicFeatures.get(e)}registerBuiltinFeatures(){this.registerFeature(new Ru(this),"configuration"),this.registerFeature(new MS(this,this._syncedDocuments),"document"),this.registerFeature(new AS(this),"document"),this.registerFeature(new OS(this,this._syncedDocuments),"document"),this.registerFeature(new NS(this),"willSave"),this.registerFeature(new HS(this),"willSaveWaitUntil"),this.registerFeature(new qS(this),"didSave"),this.registerFeature(new bS(this),"fileSystemWatcher"),this.registerFeature(new tS(this),"completion"),this.registerFeature(new CS(this),"hover"),this.registerFeature(new jS(this),"signatureHelp"),this.registerFeature(new _S(this),"references"),this.registerFeature(new rS(this),"definition"),this.registerFeature(new sS(this),"documentHighlight"),this.registerFeature(new lS(this),"documentSymbol"),this.registerFeature(new QC(this),"codeAction"),this.registerFeature(new VC(this),"codeLens"),this.registerFeature(new vS(this),"documentFormatting"),this.registerFeature(new wS(this),"documentRangeFormatting"),this.registerFeature(new xS(this),"documentOnTypeFormatting"),this.registerFeature(new LS(this),"rename"),this.registerFeature(new aS(this),"documentLink"),this.registerFeature(new uS(this),"executeCommand"),this.registerFeature(new iS(this),"pullConfiguration"),this.registerFeature(new BS(this),"typeDefinition"),this.registerFeature(new SS(this),"implementation"),this.registerFeature(new nS(this),"declaration"),this.registerFeature(new eS(this),"colorProvider"),this.registerFeature(new yS(this),"foldingRange"),this.registerFeature(new IS(this),"selectionRange"),this.registerFeature(new KC(this),"callHierarchy"),this.registerFeature(new RS(this),"progress"),this.registerFeature(new kS(this),"linkedEditing"),this.registerFeature(new cS(this),"fileEvents"),this.registerFeature(new hS(this),"fileEvents"),this.registerFeature(new dS(this),"fileEvents"),this.registerFeature(new gS(this),"fileEvents"),this.registerFeature(new pS(this),"fileEvents"),this.registerFeature(new fS(this),"fileEvents"),this.registerFeature(new FS(this),"semanticTokens"),this.registerFeature(new DS(this),"inlayHint"),this.registerFeature(new TS(this),"inlineValue"),this.registerFeature(new oS(this),"pullDiagnostic"),this.registerFeature(new WS(this),"typeHierarchy"),this.registerFeature(new GS(this),"workspaceSymbol"),this.clientOptions.workspaceFolder===void 0&&this.registerFeature(new XS(this),"workspaceFolders")}registerProposedFeatures(){this.registerFeatures(JDe.createAll(this))}fillInitializeParams(e){for(let t of this._features)Oi(t.fillInitializeParams)&&t.fillInitializeParams(e)}computeClientCapabilities(){let e={};Y(e,"workspace").applyEdit=!0;let t=Y(Y(e,"workspace"),"workspaceEdit");t.documentChanges=!0,t.resourceOperations=[K.ResourceOperationKind.Create,K.ResourceOperationKind.Rename,K.ResourceOperationKind.Delete],t.failureHandling=K.FailureHandlingKind.Undo,t.normalizesLineEndings=!0,t.changeAnnotationSupport={groupsOnLabel:!1};let i=Y(Y(e,"textDocument"),"publishDiagnostics");i.relatedInformation=!0,i.versionSupport=!0,i.tagSupport={valueSet:[K.DiagnosticTag.Unnecessary,K.DiagnosticTag.Deprecated]},i.codeDescriptionSupport=!0,i.dataSupport=!0;let r=Y(e,"window"),o=Y(r,"showMessage");o.messageActionItem={additionalPropertiesSupport:!0};let s=Y(r,"showDocument");s.support=!0;let a=Y(e,"general");a.regularExpressions={engine:"ECMAScript",version:"ES2020"},a.markdown={parser:"marked",version:"4.0.10"},a.positionEncodings=["utf-16"],a.staleRequestSupport={cancel:!0,retryOnContentModified:Array.from(KS.RequestsToCancelOnContentModified)};for(let l of this._features)l.fillClientCapabilities(e);return e}initializeFeatures(e){let t=this._clientOptions.documentSelector;for(let i of this._features)Oi(i.preInitialize)&&i.preInitialize(this._capabilities,t);for(let i of this._features)i.initialize(this._capabilities,t)}handleRegistrationRequest(e){if(this.clientOptions.disableDynamicRegister)return Promise.resolve();if(!this.isRunning()){for(let t of e.registrations)this._ignoredRegistrations.add(t.id);return}return new Promise((t,i)=>{for(let r of e.registrations){let o=this._dynamicFeatures.get(r.method);if(!o){i(new Error(`No feature implementation for ${r.method} found. Registration failed.`));return}let s=r.registerOptions??{};s.documentSelector=s.documentSelector??this._clientOptions.documentSelector;let a={id:r.id,registerOptions:s};try{o.register(a)}catch(l){i(l);return}}t()})}handleUnregistrationRequest(e){return new Promise((t,i)=>{for(let r of e.unregisterations){if(this._ignoredRegistrations.has(r.id))continue;let o=this._dynamicFeatures.get(r.method);if(!o){i(new Error(`No feature implementation for ${r.method} found. Unregistration failed.`));return}o.unregister(r.id)}t()})}setDiagnostics(e,t){var r;if(!this._diagnostics)return;if(this.clientOptions.separateDiagnostics&&t.length>0){let o=new Map;o.set(e,t);for(let s of t){if((r=s.relatedInformation)!=null&&r.length){let a=`${s.message} - -Related diagnostics: -`;for(let l of s.relatedInformation){let u=aF.default.basename(j.parse(l.location.uri).fsPath),c=l.location.range.start.line;a=`${a} -${u}(line ${c+1}): ${l.message}`;let h=o.get(l.location.uri)||[];h.push(K.Diagnostic.create(l.location.range,l.message,K.DiagnosticSeverity.Hint,s.code,s.source)),o.set(l.location.uri,h)}s.message=a}this._diagnostics.set(Array.from(o))}}else this._diagnostics.set(e,t)}handleApplyWorkspaceEdit(e){let t=e.edit,i=new Map;v.textDocuments.forEach(o=>i.set(o.uri.toString(),o));let r=!1;if(t.documentChanges){for(let o of t.documentChanges)if(K.TextDocumentEdit.is(o)&&o.textDocument.version&&o.textDocument.version>=0){let s=i.get(o.textDocument.uri);if(s&&s.version!==o.textDocument.version){r=!0;break}}}return r?Promise.resolve({applied:!1}):v.applyEdit(e.edit).then(o=>({applied:o}))}getLocale(){let e=process.env.LANG;return e?e.split(".")[0]:"en"}handleFailedRequest(e,t,i,r){if(t&&t.isCancellationRequested)return r;if(i instanceof K.ResponseError){if(i.code===K.ErrorCodes.PendingResponseRejected||i.code===K.ErrorCodes.ConnectionInactive)return r;if(i.code===K.LSPErrorCodes.RequestCancelled||i.code===K.LSPErrorCodes.ServerCancelled)throw i.data!=null?new ku(i.data):new ii;if(i.code===K.LSPErrorCodes.ContentModified){if(KS.RequestsToCancelOnContentModified.has(e.method))throw new ii;return r}}throw this.error(`Request ${e.method} failed.`,i),i}logFailedRequest(){}},Am=KS;Am.RequestsToCancelOnContentModified=new Set([K.InlayHintRequest.method,K.SemanticTokensRequest.method,K.SemanticTokensRangeRequest.method,K.SemanticTokensDeltaRequest.method]);JDe={createAll:n=>[]}});function GDe(n,e){if(hd.default.isAbsolute(n))return n;let t=zDe();if(t!==void 0){let i=hd.default.join(t,n);if(eD.default.existsSync(i))return i}if(e!==void 0){let i=hd.default.join(e,n);if(eD.default.existsSync(i))return i}return n}function zDe(){let n=v.workspaceFolders;return!n||n.length===0?void 0:n[0].uri}function KDe(n){let e=n&&n.cwd;return e&&!hd.default.isAbsolute(e)&&(e=hd.default.join(v.cwd,e)),e||(e=v.cwd),new Promise(t=>{eD.default.lstat(e,(i,r)=>{t(!i&&r.isDirectory()?e:void 0)})})}function QDe(n){return n?n.some(e=>UDe.some(t=>e.startsWith(t))||XDe.some(t=>e===t)):!1}var Nm,eD,hd,si,$De,UDe,XDe,cF,nD,tD,hF,dF,gF,dd,iD,pF=k(()=>{"use strict";Nm=S(require("child_process")),eD=S(require("fs")),hd=S(require("path")),si=S(ZK());re();wi();$K();ie();uF();uF();$De=q()("language-client-index"),UDe=["--debug=","--debug-brk=","--inspect=","--inspect-brk="],XDe=["--debug","--debug-brk","--inspect","--inspect-brk"];(e=>{function n(t){return ti(t.command)}e.is=n})(cF||(cF={}));nD=(r=>(r[r.stdio=0]="stdio",r[r.ipc=1]="ipc",r[r.pipe=2]="pipe",r[r.socket=3]="socket",r))(nD||{});(e=>{function n(t){let i=t;return i&&i.kind===3&&rw(i.port)}e.isSocket=n})(tD||(tD={}));(e=>{function n(t){return ti(t.module)}e.is=n})(hF||(hF={}));(e=>{function n(t){let i=t;return i&&i.writer!==void 0&&i.reader!==void 0}e.is=n})(dF||(dF={}));(e=>{function n(t){let i=t;return i&&i.process!==void 0&&typeof i.detached=="boolean"}e.is=n})(gF||(gF={}));dd=class extends Am{constructor(t,i,r,o,s){let a,l,u,c,h;ti(i)?(a=t,l=i,u=r,c=o,h=!!s):(a=t.toLowerCase(),l=t,u=i,c=r,h=o);super(a,l,c);this._serverOptions=u,this._forceDebug=!!h,this._isInDebugMode=!!h}stop(t=2e3){return super.stop(t).then(()=>{if(this._serverProcess){let i=this._serverProcess;this._serverProcess=void 0,(this._isDetached===void 0||!this._isDetached)&&this.checkProcessDied(i),this._isDetached=void 0}})}get serviceState(){return this._state}checkProcessDied(t){!t||t.pid===void 0||setTimeout(()=>{try{process.kill(t.pid,0),JK(t)}catch{}},2e3)}handleConnectionClosed(){this._serverProcess=void 0,super.handleConnectionClosed()}get isInDebugMode(){return this._isInDebugMode}async restart(){await this.stop(),this.isInDebugMode?(await new Promise(t=>setTimeout(t,1e3)),await this._start()):await this._start()}createMessageTransports(t){function i(u,c){if(!u&&!c)return;let h=Object.create(null);return Object.keys(process.env).forEach(d=>h[d]=process.env[d]),u&&Object.keys(u).forEach(d=>h[d]=u[d]),h}function r(u){if(u.stdin===null||u.stdout===null||u.stderr===null)throw new Error("Process created without stdio streams")}let o=this._serverOptions,s=this.logMessage.bind(this);if(Oi(o))return o().then(u=>{if(cd.is(u))return this._isDetached=!!u.detached,u;if(dF.is(u))return this._isDetached=!!u.detached,{reader:new si.StreamMessageReader(u.reader),writer:new si.StreamMessageWriter(u.writer)};{let c;return gF.is(u)?(c=u.process,this._isDetached=u.detached):(c=u,this._isDetached=!1),c.stderr.on("data",s),{reader:new si.StreamMessageReader(c.stdout),writer:new si.StreamMessageWriter(c.stdin)}}});let a,l=o;return l.run||l.debug?typeof v8debug=="object"||this._forceDebug||QDe(process.execArgv)?a=l.debug:a=l.run:a=o,KDe(a.options).then(u=>{if(hF.is(a)&&a.module){let c=a,h=c.transport||0,d,g=c.runtime?GDe(c.runtime,u):void 0;return new Promise((p,f)=>{let m=c.args&&c.args.slice()||[];h===1?m.push("--node-ipc"):h===0?m.push("--stdio"):h===2?(d=(0,si.generateRandomPipeName)(),m.push(`--pipe=${d}`)):tD.isSocket(h)&&m.push(`--socket=${h.port}`),m.push(`--clientProcessId=${process.pid}`);let b=c.options||Object.create(null);if(b.env=i(b.env,!0),b.execArgv=b.execArgv||[],b.cwd=u,b.silent=!0,g&&(b.execPath=g),h===1||h===0){let w=Nm.default.fork(c.module,m||[],b);r(w),this._serverProcess=w,w.stderr.on("data",s),h===1?(w.stdout.on("data",s),p({reader:new si.IPCMessageReader(this._serverProcess),writer:new si.IPCMessageWriter(this._serverProcess)})):p({reader:new si.StreamMessageReader(w.stdout),writer:new si.StreamMessageWriter(w.stdin)})}else{if(h===2)return(0,si.createClientPipeTransport)(d).then(w=>{let x=Nm.default.fork(c.module,m||[],b);r(x),this._serverProcess=x,x.stderr.on("data",s),x.stdout.on("data",s),w.onConnected().then(T=>{p({reader:T[0],writer:T[1]})})});if(tD.isSocket(h))return(0,si.createClientSocketTransport)(h.port).then(w=>{let x=Nm.default.fork(c.module,m||[],b);r(x),this._serverProcess=x,x.stderr.on("data",s),x.stdout.on("data",s),w.onConnected().then(T=>{p({reader:T[0],writer:T[1]})})})}})}else if(cF.is(a)&&a.command){let c=a,h=c.args||[],d=Object.assign({},c.options);d.env=d.env?Object.assign({},process.env,d.env):process.env,d.cwd=d.cwd||u;let g=v.expand(a.command),p=Nm.default.spawn(g,h,d);return p.on("error",f=>{this.error(f.message,f)}),!p||!p.pid?Promise.reject(new Error(`Launching server "${this.id}" using command ${c.command} failed.`)):($De.info(`Language server "${this.id}" started with ${p.pid}`),p.on("exit",f=>{f!=0&&this.error(`${c.command} exited with code: ${f}`)}),p.stderr.on("data",f=>this.outputChannel.append(ti(f)?f:f.toString(t))),this._serverProcess=p,this._isDetached=!!d.detached,Promise.resolve({reader:new si.StreamMessageReader(p.stdout),writer:new si.StreamMessageWriter(p.stdin)}))}return Promise.reject(`Unsupported server configuration ${JSON.stringify(o,null,2)}`)})}logMessage(t){let i=this.clientOptions.stdioEncoding;this.outputChannel.append(ti(t)?t:t.toString(i))}},iD=class{constructor(e,t){this._client=e;this._setting=t;this._listeners=[]}start(){return v.onDidChangeConfiguration(e=>{e.affectsConfiguration(this._setting)&&this.onDidChangeConfiguration()},null,this._listeners),this.onDidChangeConfiguration(),{dispose:()=>{U(this._listeners),this._client.dispose()}}}onDidChangeConfiguration(){let e=this._setting.indexOf("."),t=e>=0?this._setting.substr(0,e):this._setting,i=e>=0?this._setting.substr(e+1):void 0,r=i?v.getConfiguration(t).get(i,!0):v.getConfiguration(t);r&&this._client.needsStart()?this._client.start().catch(o=>this._client.error("Start failed after configuration change",o,"force")):!r&&this._client.needsStop()&&this._client.stop().catch(o=>this._client.error("Stop failed after configuration change",o,"force"))}}});function VDe(n){let e=n.map(t=>typeof t=="string"?t:t.language);return e=e.filter(t=>typeof t=="string"),Array.from(new Set(e))}function eTe(n,e,t,i){let{command:r,module:o,port:s,args:a,filetypes:l}=t;if(a=a||[],!l)return D.showErrorMessage(`Wrong configuration of LS "${e}", filetypes not found`),null;if(!r&&!o&&!s)return D.showErrorMessage(`Wrong configuration of LS "${e}", no command or module specified.`),null;let u;if(o){if(o=v.expand(o),!UQ.default.existsSync(o))return D.showErrorMessage(`Module file "${o}" not found for LS "${e}"`),null;u={module:o,runtime:t.runtime??process.execPath,args:a,transport:nTe(t),options:rTe(t)}}else r?u={command:r,args:a,options:oTe(t)}:u=()=>new Promise((p,f)=>{let m=new XQ.default.Socket,b=t.host??"127.0.0.1";ju.info(`languageserver "${n}" connecting to ${b}:${s}`),m.connect(s,b,()=>{p({reader:m,writer:m})}),m.on("error",w=>{f(new Error(`Connection error for ${n}: ${w.message}`))})});let c=Array.from(t.disabledFeatures||[]);for(let p of["disableWorkspaceFolders","disableCompletion","disableDiagnostics"])if(t[p]===!0){ju.warn(`Language server config "${p}" is deprecated, use "disabledFeatures" instead.`);let f=p.slice(7);c.push(f[0].toLowerCase()+f.slice(1))}let h=!!t.disableSnippetCompletion,d=t.ignoredRootPaths??[];return[{workspaceFolder:i==null?void 0:{name:GQ.default.basename(i.fsPath),uri:i.toString()},rootPatterns:t.rootPatterns,requireRootPattern:t.requireRootPattern,ignoredRootPaths:d.map(p=>v.expand(p)),disableSnippetCompletion:h,disableDynamicRegister:!!t.disableDynamicRegister,disabledFeatures:c,formatterPriority:t.formatterPriority,documentSelector:zQ(t.filetypes,t.additionalSchemes),revealOutputChannelOn:iTe(t.revealOutputChannelOn),synchronize:{configurationSection:`${n}.settings`},diagnosticCollectionName:e,outputChannelName:n,stdioEncoding:t.stdioEncoding,progressOnInitialization:t.progressOnInitialization===!0,initializationOptions:t.initializationOptions??{}},u]}function tTe(n,e){let t=[],i=["module","command","transport"];for(let r of i){let o=e[r];o&&typeof o!="string"&&t.push(`"${r}" field of languageserver ${n} should be string`)}return e.transportPort!=null&&typeof e.transportPort!="number"&&t.push(`"transportPort" field of languageserver ${n} should be number`),(!Array.isArray(e.filetypes)||!e.filetypes.every(r=>typeof r=="string"))&&t.push(`"filetypes" field of languageserver ${n} should be array of string`),e.additionalSchemes&&(!Array.isArray(e.additionalSchemes)||e.additionalSchemes.some(r=>typeof r!="string"))&&t.push(`"additionalSchemes" field of languageserver ${n} should be array of string`),t.length?(D.showErrorMessage(t.join(` -`)),!1):!0}function iTe(n){switch(n){case"info":return 1;case"warn":return 2;case"error":return 3;case"never":return 4;default:return 4}}function zQ(n,e){let t=[],i=["file","untitled"].concat(e||[]);return n?(n.forEach(r=>{t.push(...i.map(o=>({language:r,scheme:o})))}),t):i.map(r=>({scheme:r}))}function nTe(n){let{transport:e,transportPort:t}=n;return!e||e=="ipc"?1:e=="stdio"?0:e=="pipe"?2:{kind:3,port:t}}function rTe(n){return{cwd:n.cwd,execArgv:n.execArgv??[],env:n.env??void 0}}function oTe(n){return{cwd:n.cwd,detached:!!n.detached,shell:!!n.shell,env:n.env??void 0}}function JQ(n){switch(n){case 2:return 3;case 3:return 1;case 1:return 5;default:return}}function $Q(n){switch(n){case 2:return"running";case 3:return"starting";case 1:return"stopped";default:return"unknown"}}function sTe(n){switch(n){case 0:return"init";case 3:return"running";case 1:return"starting";case 2:return"startFailed";case 4:return"stopping";case 5:return"stopped";default:return"unknown"}}var UQ,XQ,GQ,Mu,ju,fF,yn,Hm=k(()=>{"use strict";UQ=S(require("fs")),XQ=S(require("net")),GQ=S(require("path")),Mu=S(W());Pe();pF();dn();re();xe();ie();ju=q()("services"),fF=class{constructor(){this.registered=new Map;this.disposables=[];this.pendingNotifications=new Map}init(){v.onDidOpenTextDocument(i=>{this.start(i)},null,this.disposables);let e=i=>{for(let r of i)this.registerClientsFromFolder(r)};v.onDidChangeWorkspaceFolders(i=>{e(i.added)},null,this.disposables);let t=v.getConfiguration(void 0,null).get("languageserver",{});this.registerClientsByConfig(t),e(v.workspaceFolders),this.registLanguageClient=this.registerLanguageClient}registerClientsFromFolder(e){let t=j.parse(e.uri),r=v.getConfiguration(void 0,t).inspect("languageserver").workspaceFolderValue;r&&this.registerClientsByConfig(r,t)}regist(e){return this.register(e)}register(e){let{id:t}=e;if(!this.registered.get(t))return this.registered.set(t,e),ju.info(`registered service "${t}"`),this.shouldStart(e)&&e.start(),e.onServiceReady(()=>{ju.info(`service ${t} started`)},null,this.disposables),Mu.Disposable.create(()=>{!this.registered.has(t)||(e.dispose(),this.registered.delete(t))})}getService(e){let t=this.registered.get(e);return t||(t=this.registered.get(`languageserver.${e}`)),t}shouldStart(e){if(e.state!=0)return!1;let t=e.selector;for(let i of v.documents)if(v.match(t,i.textDocument))return!0;return!1}async start(e){let t=[];for(let i of this.registered.values())i.state==0&&v.match(i.selector,e)>0&&t.push(i);await Promise.allSettled(t.map(i=>i.start()))}stop(e){let t=this.registered.get(e);if(t)return Promise.resolve(t.stop())}async toggle(e){let t=this.registered.get(e);if(!t)throw new Error(`Service ${e} not found`);let{state:i}=t;i==3?await Promise.resolve(t.stop()):i==0||i==2?await t.start():i==5&&await t.restart()}getServiceStats(){let e=[];for(let[t,i]of this.registered)e.push({id:t,languageIds:VDe(i.selector),state:sTe(i.state)});return e}registerClientsByConfig(e,t){for(let i of Object.keys(e)){let r=e[i];!tTe(i,r)||this.registerLanguageClient(i,r,t)}}async getLanguageClient(e){let t=this.getService(e);if(t||await Nt(100),t=this.getService(e),!t||!t.client)throw new Error(`Language server ${e} not found`);return t.client}async sendNotification(e,t,i){let r=await this.getLanguageClient(e);await Promise.resolve(r.sendNotification(t,i))}async sendRequest(e,t,i,r){let o=await this.getLanguageClient(e);return r=r??Mu.CancellationToken.None,await Promise.resolve(o.sendRequest(t,i,r))}async registerNotification(e,t){let i=this.getService(e);i&&i.client&&i.client.onNotification(t,async o=>{this.sendNotificationVim(e,t,o)});let r=this.pendingNotifications.get(e)??[];r.push({id:e,method:t}),this.pendingNotifications.set(e,r)}getRegisteredNotifications(e){return e=e.startsWith("languageserver")?e.slice(15):e,this.pendingNotifications.get(e)??[]}sendNotificationVim(e,t,i){v.nvim.call("coc#do_notify",[e,t,i],!0)}registLanguageClient(e,t,i){return typeof e=="string"?this.registerLanguageClient(e,t,i):this.registerLanguageClient(e)}registerLanguageClient(e,t,i){let r=typeof e=="string"?`languageserver.${e}`:e.id,o=[],s=new Mu.Emitter,a=typeof e=="string"?null:e;if(this.registered.has(r))return Mu.Disposable.create(()=>{});a&&typeof a.dispose=="function"&&o.push(a);let l=!1,u={id:r,client:a,name:typeof e=="string"?e:e.name,selector:typeof e=="string"?zQ(t.filetypes,t.additionalSchemes):e.clientOptions.documentSelector,state:a&&a.state===2?3:0,onServiceReady:s.event,start:async()=>{if(!l){if(typeof e=="string"&&!a){let c=v.getConfiguration(void 0,i).get(`languageserver.${e}`,{}),h=eTe(r,e,c,i);if(!h||c.enable===!1)return;a=new dd(r,e,h[1],h[0]),u.selector=h[0].documentSelector,u.client=a,o.push(a)}l=!0;for(let c of this.getRegisteredNotifications(r))u.client.onNotification(c.method,async h=>{this.sendNotificationVim(c.id,c.method,h)});a.onDidChangeState(c=>{let{oldState:h,newState:d}=c;u.state=JQ(d);let g=$Q(h),p=$Q(d);ju.info(`LanguageClient ${a.name} state change: ${g} => ${p}`)},null,o)}try{a.needsStart()?(u.state=1,ju.debug(`starting service: ${r}`),await a.start(),s.fire(void 0)):u.state=JQ(a.state)}catch(c){D.showErrorMessage(`Server ${r} failed to start: ${c}`),ju.error(`Server ${r} failed to start:`,c),u.state=2}},dispose:async()=>{s.dispose(),U(o)},stop:async()=>{!a||!a.needsStop()||await Promise.resolve(a.stop())},restart:async()=>{a?(u.state=1,await a.restart()):await u.start()}};return this.register(u)}dispose(){U(this.disposables);for(let e of this.registered.values())e.dispose();this.registered.clear()}};yn=new fF});var KQ,Ou,Au,rD=k(()=>{"use strict";ie();xe();KQ=require("events"),Ou=["","","","","","","","","","","","","","","","","","","","<2-LeftMouse>","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""],Au=class extends KQ.EventEmitter{constructor(){super();this.configuration=v.getConfiguration("list"),this.disposable=v.onDidChangeConfiguration(t=>{t.affectsConfiguration("list")&&(this.configuration=v.getConfiguration("list"),this.emit("change"))})}get smartcase(){return this.get("smartCase",!1)}get(t,i){return this.configuration.get(t,i)}get previousKey(){return this.fixKey(this.configuration.get("previousKeymap",""))}get nextKey(){return this.fixKey(this.configuration.get("nextKeymap",""))}dispose(){this.disposable.dispose(),this.removeAllListeners()}fixKey(t){if(Ou.includes(t))return t;let i=Ou.find(r=>r.toLowerCase()==t.toLowerCase());return i||(D.showErrorMessage(`Configured key "${t}" not supported.`),null)}}});var aVe,qm,QQ=k(()=>{"use strict";xe();rD();aVe=q()("list-mappings"),qm=class{constructor(e,t,i){this.manager=e;this.nvim=t;this.config=i;this.insertMappings=new Map;this.normalMappings=new Map;this.userInsertMappings=new Map;this.userNormalMappings=new Map;this.actions=new Map;let{prompt:r}=e;this.addAction("do:switch",async()=>{await e.switchMatcher()}),this.addAction("do:selectall",async()=>{var o;await((o=e.session)==null?void 0:o.ui.selectAll())}),this.addAction("do:help",async()=>{var o;await((o=e.session)==null?void 0:o.showHelp())}),this.addAction("do:refresh",async()=>{var o;await((o=e.session)==null?void 0:o.reloadItems())}),this.addAction("do:exit",async()=>{await e.cancel()}),this.addAction("do:stop",()=>{e.stop()}),this.addAction("do:cancel",async()=>{await e.cancel(!1)}),this.addAction("do:toggle",async()=>{var o;await((o=e.session)==null?void 0:o.ui.toggleSelection())}),this.addAction("do:jumpback",()=>{var o;(o=e.session)==null||o.jumpBack()}),this.addAction("do:previous",async()=>{await this.navigate(!0)}),this.addAction("do:next",async()=>{await this.navigate(!1)}),this.addAction("do:defaultaction",async()=>{await e.doAction()}),this.addAction("do:chooseaction",async()=>{await e.chooseAction()}),this.addAction("do:togglemode",()=>{e.toggleMode()}),this.addAction("do:previewtoggle",async()=>{await e.togglePreview()}),this.addAction("do:previewup",()=>{this.scrollPreview("up")}),this.addAction("do:previewdown",()=>{this.scrollPreview("down")}),this.addAction("do:command",async()=>{await e.cancel(!1),await t.eval('feedkeys(":")')}),this.addAction("prompt:previous",()=>{var o;(o=e.session)==null||o.history.previous()}),this.addAction("prompt:next",()=>{var o;(o=e.session)==null||o.history.next()}),this.addAction("prompt:start",()=>{r.moveToStart()}),this.addAction("prompt:end",()=>{r.moveToEnd()}),this.addAction("prompt:left",()=>{r.moveLeft()}),this.addAction("prompt:right",()=>{r.moveRight()}),this.addAction("prompt:deleteforward",()=>{r.onBackspace()}),this.addAction("prompt:deletebackward",()=>{r.removeNext()}),this.addAction("prompt:removetail",()=>{r.removeTail()}),this.addAction("prompt:removeahead",()=>{r.removeAhead()}),this.addAction("prompt:removeword",()=>{r.removeWord()}),this.addAction("prompt:insertregister",()=>{r.insertRegister()}),this.addAction("prompt:paste",async()=>{await r.paste()}),this.addAction("eval",async o=>{await r.eval(o)}),this.addAction("command",async o=>{await e.command(o)}),this.addAction("action",async o=>{await e.doAction(o)}),this.addAction("feedkeys",async o=>{await e.feedkeys(o)}),this.addAction("normal",async o=>{await e.normal(o,!1)}),this.addAction("normal!",async o=>{await e.normal(o,!0)}),this.addAction("call",async o=>{await e.call(o)}),this.addAction("expr",async o=>{let s=await e.call(o);s&&await e.doAction(s)}),this.addKeyMapping("insert","","do:switch"),this.addKeyMapping("insert","","prompt:next"),this.addKeyMapping("insert","","prompt:previous"),this.addKeyMapping("insert","","prompt:paste"),this.addKeyMapping("insert",["",""],"do:defaultaction"),this.addKeyMapping("insert",["",""," "],"do:chooseaction"),this.addKeyMapping("insert","","do:togglemode"),this.addKeyMapping("insert","","do:stop"),this.addKeyMapping("insert","","do:refresh"),this.addKeyMapping("insert","","prompt:left"),this.addKeyMapping("insert","","prompt:right"),this.addKeyMapping("insert",["",""],"prompt:end"),this.addKeyMapping("insert",["",""],"prompt:start"),this.addKeyMapping("insert",["","",""],"prompt:deleteforward"),this.addKeyMapping("insert","","prompt:removeword"),this.addKeyMapping("insert","","prompt:removeahead"),this.addKeyMapping("insert","","prompt:insertregister"),this.addKeyMapping("normal","t","action:tabe"),this.addKeyMapping("normal","s","action:split"),this.addKeyMapping("normal","d","action:drop"),this.addKeyMapping("normal",["","","\r"],"do:defaultaction"),this.addKeyMapping("normal","","do:selectall"),this.addKeyMapping("normal"," ","do:toggle"),this.addKeyMapping("normal","p","do:previewtoggle"),this.addKeyMapping("normal",[""," ",""],"do:chooseaction"),this.addKeyMapping("normal","","do:stop"),this.addKeyMapping("normal","","do:refresh"),this.addKeyMapping("normal","","do:jumpback"),this.addKeyMapping("normal","","do:previewdown"),this.addKeyMapping("normal","","do:previewup"),this.addKeyMapping("normal",["i","I","o","O","a","A"],"do:togglemode"),this.addKeyMapping("normal","?","do:help"),this.addKeyMapping("normal",":","do:command"),this.createMappings(),i.on("change",()=>{this.createMappings()})}createMappings(){let e=this.config.get("insertMappings",{});this.userInsertMappings=this.fixUserMappings(e,"list.insertMappings");let t=this.config.get("normalMappings",{});this.userNormalMappings=this.fixUserMappings(t,"list.normalMappings")}hasUserMapping(e,t){return(e=="insert"?this.userInsertMappings:this.userNormalMappings).has(t)}isValidAction(e){if(this.actions.has(e))return!0;let[t,i]=e.split(":",2);return!(!i||!this.actions.has(t))}fixUserMappings(e,t){let i=new Map;for(let[r,o]of Object.entries(e)){if(!this.isValidAction(o)){D.showWarningMessage(`Invalid configuration - unable to support action "${o}" in "${t}"`);continue}if(r.length==1)i.set(r,o);else if(r.startsWith("<")&&r.endsWith(">"))if(r.toLowerCase()=="")i.set(" ",o);else if(r.toLowerCase()=="")i.set("",o);else if(Ou.includes(r))i.set(r,o);else{let s=!1;for(let a=0;athis.doAction(e);let[t,i]=e.split(":",2);if(!i||!this.actions.has(t))throw new Error(`Invalid action ${e}`);return()=>this.doAction(t,i)}async doAction(e,t){let i=this.actions.get(e);if(!i)throw new Error(`Action ${e} doesn't exist`);await Promise.resolve(i(t))}scrollPreview(e){let{nvim:t}=this;t.pauseNotification(),t.call("coc#list#scroll_preview",[e],!0),t.command("redraw",!0),t.resumeNotification(!1,!0)}}});var VQ,cVe,Bm,e4=k(()=>{"use strict";VQ=S(W()),cVe=q()("list-prompt"),Bm=class{constructor(e,t){this.nvim=e;this.config=t;this.cusorIndex=0;this._input="";this._mode="insert";this.interactive=!1;this.requestInput=!1;this._onDidChangeInput=new VQ.Emitter;this.onDidChangeInput=this._onDidChangeInput.event}get input(){return this._input}set input(e){this._input!=e&&(this.cusorIndex=e.length,this._input=e,this.drawPrompt(),this._onDidChangeInput.fire(this._input))}get mode(){return this._mode}set mode(e){e!=this._mode&&(this._mode=e,this.drawPrompt())}set matcher(e){this._matcher=e,this.drawPrompt()}start(e){e&&(this.interactive=e.interactive,this.cusorIndex=e.input.length,this._input=e.input,this._mode=e.mode,this._matcher=e.interactive?"":e.matcher),this.nvim.call("coc#prompt#start_prompt",["list"],!0),this.drawPrompt()}cancel(){let{nvim:e}=this;e.call("coc#prompt#stop_prompt",["list"],!0)}reset(){this._input="",this.cusorIndex=0}drawPrompt(){let e=this.config.get("indicator",">"),{cusorIndex:t,interactive:i,input:r,_matcher:o}=this,s=['echo ""'];if(this.mode=="insert")if(i?s.push("echohl MoreMsg | echon 'INTERACTIVE ' | echohl None"):o&&s.push(`echohl MoreMsg | echon '${o.toUpperCase()} ' | echohl None`),s.push(`echohl Special | echon '${e} ' | echohl None`),t==r.length)s.push(`echon '${r.replace(/'/g,"''")}'`),s.push("echohl Cursor | echon ' ' | echohl None");else{let l=r.slice(0,t);l&&s.push(`echon '${l.replace(/'/g,"''")}'`),s.push(`echohl Cursor | echon '${r[t].replace(/'/,"''")}' | echohl None`);let u=r.slice(t+1);s.push(`echon '${u.replace(/'/g,"''")}'`)}else s.push('echohl MoreMsg | echo "" | echohl None');s.push("redraw");let a=s.join("|");this.nvim.command(a,!0)}moveLeft(){this.cusorIndex!=0&&(this.cusorIndex=this.cusorIndex-1,this.drawPrompt())}moveRight(){this.cusorIndex!=this._input.length&&(this.cusorIndex=this.cusorIndex+1,this.drawPrompt())}moveToEnd(){this.cusorIndex!=this._input.length&&(this.cusorIndex=this._input.length,this.drawPrompt())}moveToStart(){this.cusorIndex!=0&&(this.cusorIndex=0,this.drawPrompt())}onBackspace(){let{cusorIndex:e,input:t}=this;if(e==0)return;let i=t.slice(0,e),r=t.slice(e);this.cusorIndex=e-1,this._input=`${i.slice(0,i.length-1)}${r}`,this.drawPrompt(),this._onDidChangeInput.fire(this._input)}removeNext(){let{cusorIndex:e,input:t}=this;if(e==t.length-1)return;let i=t.slice(0,e),r=t.slice(e+1);this._input=`${i}${r}`,this.drawPrompt(),this._onDidChangeInput.fire(this._input)}removeWord(){let{cusorIndex:e,input:t}=this;if(e==0)return;let i=t.slice(0,e),r=t.slice(e),o=i.replace(/[\w$]+([^\w$]+)?$/,"");this.cusorIndex=e-(i.length-o.length),this._input=`${o}${r}`,this.drawPrompt(),this._onDidChangeInput.fire(this._input)}removeTail(){let{cusorIndex:e,input:t}=this;if(e==t.length)return;let i=t.slice(0,e);this._input=i,this.drawPrompt(),this._onDidChangeInput.fire(this._input)}removeAhead(){let{cusorIndex:e,input:t}=this;if(e==0)return;let i=t.slice(e);this.cusorIndex=0,this._input=i,this.drawPrompt(),this._onDidChangeInput.fire(this._input)}async acceptCharacter(e){if(this.requestInput){if(this.requestInput=!1,/^[0-9a-z"%#*+/:\-.]$/.test(e)){let t=await this.nvim.call("getreg",e);t=t.replace(/\n/g," "),this.addText(t)}}else this.addText(e)}insertRegister(){this.requestInput=!0}async paste(){let e=await this.nvim.eval("@*");e=e.replace(/\n/g,""),e&&this.addText(e)}async eval(e){let t=await this.nvim.call("eval",[e]);t=t.replace(/\n/g,""),this.addText(t)}addText(e){let{cusorIndex:t,input:i}=this;this.cusorIndex=t+e.length;let r=i.slice(0,t),o=i.slice(t);this._input=`${r}${e}${o}`,this.drawPrompt(),this._onDidChangeInput.fire(this._input)}}});function Fr(n){let e=[];for(let t=0,i=n.length;t=97&&n<=122||n>=65&&n<=90}function sD(n,e,t=!1){let i=n.charCodeAt(0),r=e.charCodeAt(0);return!!(i===r||i>=97&&i<=122&&r+32===i||t&&i<=90&&i+32===r)}function el(n,e){let t=n.length;if(n.length>e.length)return!1;let i=0;for(let r=0;r=97&&s<=122&&o+32===s){i=i+1;continue}}return i===t}var tl=k(()=>{"use strict";_e()});var aD,t4,aTe,mF,gd,bF=k(()=>{"use strict";aD=S(require("fs")),t4=S(require("path"));_e();aTe=q()("list-db"),mF=t4.default.join(process.env.COC_DATA_HOME,"list_history.dat"),gd=class{constructor(){this.folders=[];this.names=[];this.items=[];this._changed=!1;try{this.load()}catch(e){aTe.error("Error on load db",e)}}get currItems(){return this.items}getHistory(e,t){let i=this.names.indexOf(e),r=this.folders.indexOf(t);return i==-1||r==-1?[]:this.items.reduce((o,s)=>(s[1]==i&&s[2]==r&&o.push(s[0]),o),[])}addItem(e,t,i){let{folders:r,names:o}=this;Q(t)>255&&(t=tt(t,0,255)),r.includes(i)||r.push(i),o.includes(e)||o.push(e);let s=o.indexOf(e),a=r.indexOf(i),l=this.items.findIndex(u=>u[0]==t&&u[1]==s&&u[2]==a);l!=-1&&this.items.splice(l,1),this.items.push([t,s,a]),this._changed=!0}save(){let{folders:e,items:t,names:i}=this;if(!this._changed)return;let r=e.reduce((u,c)=>(u.push(Buffer.from(c,"utf8"),Buffer.alloc(1)),u),[]),o=Buffer.concat(r);r=i.reduce((u,c)=>(u.push(Buffer.from(c,"utf8"),Buffer.alloc(1)),u),[]);let s=Buffer.concat(r),a=Buffer.allocUnsafe(9);a.writeUInt8(2,0),a.writeUInt32BE(o.byteLength,1),a.writeUInt32BE(s.byteLength,5),r=t.reduce((u,c)=>{let h=Buffer.from(c[0],"utf8");return u.push(Buffer.from([h.byteLength]),h,Buffer.from([c[1],c[2]])),u},[]);let l=Buffer.concat([a,o,s,...r]);aD.default.writeFileSync(mF,l),this._changed=!1}load(){if(!aD.default.existsSync(mF))return;let e=aD.default.readFileSync(mF),t=e.readUInt32BE(1),i=e.readUInt32BE(5),r=e.slice(9,9+t),o=0,s=[],a=[];for(let d=0;d{"use strict";Wm=S(require("fs")),lD=S(require("path"));nt();tl();bF();lTe=q()("list-history"),Nu=class{constructor(e,t,i,r){this.prompt=e;this.name=t;this.db=i;this.cwd=r;this._index=-1;this._filtered=[]}get loaded(){return this.db.getHistory(this.name,this.cwd)}get filtered(){return this._filtered}get index(){return this._index}static migrate(e){try{let t=Wm.default.readdirSync(e);if(t=t.filter(r=>r.startsWith("list-")&&r.endsWith("-history.json")&&Wm.default.statSync(lD.default.join(e,r)).isFile()),t.length===0)return;let i=new gd;for(let r of t){let o=r.match(/^list-(.*)-history.json$/)[1],s=Wm.default.readFileSync(lD.default.join(e,r),"utf8"),a=JSON.parse(s);for(let[l,u]of Object.entries(a)){let c=Buffer.from(l,"base64").toString("utf8");Array.isArray(u)&&u.forEach(h=>{i.addItem(o,h,c)})}}t.forEach(r=>{Wm.default.unlinkSync(lD.default.join(e,r))}),i.save()}catch(t){lTe.error("Error on migrate history:",t)}}get curr(){return this._index==-1||this._filtered==null?null:this._filtered[this._index]}filter(){let{input:e}=this.prompt;if(e!==this.curr){if(this.historyInput="",e.length>0){let t=Fr(e);this._filtered=this.loaded.filter(i=>el(t,i))}else this._filtered=this.loaded;this._index=-1}}add(){let{db:e,prompt:t,cwd:i}=this,{input:r}=t;!r||r.length<2||r==this.historyInput||e.addItem(this.name,r,i)}previous(){let{_filtered:e,_index:t}=this;Je(e)||(t<=0?this._index=e.length-1:this._index=t-1,this.historyInput=this.prompt.input=e[this._index]??"")}next(){let{_filtered:e,_index:t}=this;Je(e)||(t==e.length-1?this._index=0:this._index=t+1,this.historyInput=this.prompt.input=e[this._index]??"")}}});var uD,i4=k(()=>{"use strict";uD=class{constructor(){this._busy=!1;this._fns=[];this._resolves=[]}run(e){this._busy?this._fns.push(e):(this._busy=!0,e().finally(()=>{this.next()}))}waitFinish(){return this._busy?new Promise(e=>{this._resolves.push(e)}):Promise.resolve()}next(){let e=this._fns.shift();e?e().finally(()=>{this.next()}):this.finish()}finish(){this._busy=!1;let e;for(;(e=this._resolves.pop())!=null;)e()}cancel(){this._fns=[],this.finish()}}});var n4,pd,PVe,Ym,r4=k(()=>{"use strict";n4=S(Pn()),pd=S(W());fe();re();i4();ie();PVe=q()("list-ui"),Ym=class{constructor(e,t,i,r){this.nvim=e;this.name=t;this.listOptions=i;this.config=r;this.newTab=!1;this.reversed=!1;this.currIndex=0;this.items=[];this.disposables=[];this.selected=new Set;this.sequence=new uD;this._onDidChangeLine=new pd.Emitter;this._onDidOpen=new pd.Emitter;this._onDidClose=new pd.Emitter;this._onDidLineChange=new pd.Emitter;this._onDoubleClick=new pd.Emitter;this.onDidChangeLine=this._onDidChangeLine.event;this.onDidLineChange=this._onDidLineChange.event;this.onDidOpen=this._onDidOpen.event;this.onDidClose=this._onDidClose.event;this.onDidDoubleClick=this._onDoubleClick.event;this.signOffset=r.get("signOffset"),this.newTab=i.position=="tab",this.reversed=i.reverse===!0,P.on("BufWinLeave",async s=>{s!=this.bufnr||this.window==null||(this.window=null,this._onDidClose.fire(s))},null,this.disposables),P.on("CursorMoved",async(s,a)=>{if(s!=this.bufnr)return;let l=this.lnumToIndex(a[0]);this.onLineChange(l)},null,this.disposables);let o=(0,n4.default)(async s=>{if(s!=this.bufnr)return;let[a,l,u]=await e.eval('[win_getid(),line("w0"),line("w$")]');if(u<300||a!=this.winid)return;let c=u-l+1,h=this.lnumToIndex(l),d=this.lnumToIndex(l+c*2);e.pauseNotification(),this.doHighlight(h,d),e.command("redraw",!0),e.resumeNotification(!1,!0)},100);this.disposables.push({dispose:()=>{o.clear()}}),P.on("CursorMoved",o,null,this.disposables)}onDidChangeItems(e){this.sequence.run(async()=>{let{items:t,reload:i,append:r,finished:o,sorted:s}=e;this.shouldSort&&!s&&(t=r?this.items.concat(t):t,i=r==!0,r=!1,t.sort((a,l)=>a.score!=l.score?l.score-a.score:a.sortText>l.sortText?1:-1)),r?await this.appendItems(t):await this.drawItems(t,o,i)})}lnumToIndex(e){let{reversed:t,length:i}=this;return t?Math.max(0,i-e):e-1}indexToLnum(e){let{reversed:t,length:i}=this;return t?Math.max(Math.min(i,i-e),1):Math.min(e+1,i)}get bufnr(){var e;return(e=this.buffer)==null?void 0:e.id}get winid(){var e;return(e=this.window)==null?void 0:e.id}get limitLines(){return this.config.get("limitLines",1/0)}onLineChange(e){this.currIndex!=e&&(this.currIndex=e,this._onDidChangeLine.fire(e))}get index(){return this.currIndex}getItem(e){return this.items[e]}get item(){let{window:e}=this;return e?e.cursor.then(t=>(this.currIndex=this.lnumToIndex(t[0]),this.items[this.currIndex])):Promise.resolve(null)}async echoMessage(e){let{items:t}=this,r=`[${t.indexOf(e)+1}/${t.length}] ${e.label||""}`;this.nvim.callTimer("coc#ui#echo_lines",[[r]],!0)}updateItem(e,t){if(!this.buffer||t>=this.length)return;let{nvim:i}=this,r=this.indexToLnum(t);i.pauseNotification(),this.buffer.setOption("modifiable",!0,!0),i.call("setbufline",[this.bufnr,r,e.label],!0),this.doHighlight(t,t+1),this.buffer.setOption("modifiable",!1,!0),i.resumeNotification(!0,!0)}async getItems(){if(this.length==0||!this.window)return[];let e=await this.nvim.call("mode");if(e=="v"||e=="V"){let[r,o]=await this.getSelectedRange(),s=[];for(let a=r;a<=o;a++){let l=this.lnumToIndex(a),u=this.items[l];u&&s.push(u)}return s}let{selectedItems:t}=this;if(t.length)return t;let i=await this.item;return i==null?[]:[i]}async onMouse(e){let{nvim:t,window:i}=this;if(!i)return;let[r,o,s]=await t.eval("[v:mouse_winid,v:mouse_lnum,v:mouse_col]");if(e=="mouseDown"){this.mouseDown={winid:r,lnum:o,col:s,current:r==i.id};return}let a=r==i.id;if(a&&e=="doubleClick"&&(this.setCursor(o),this._onDoubleClick.fire()),a&&e=="mouseDrag"){if(!this.mouseDown)return;await this.selectLines(this.mouseDown.lnum,o)}else if(a&&e=="mouseUp"){if(!this.mouseDown)return;this.mouseDown.lnum==o?(this.setCursor(o),t.command("redraw",!0)):await this.selectLines(this.mouseDown.lnum,o)}else!a&&e=="mouseUp"&&(t.pauseNotification(),t.call("win_gotoid",r,!0),t.call("cursor",[o,s],!0),t.command("redraw",!0),t.resumeNotification(!1,!0))}async resume(){var r;let{items:e,selected:t,nvim:i}=this;if(await this.drawItems(e,!0,!0),!(!t.size||!this.buffer)){i.pauseNotification();for(let o of t)(r=this.buffer)==null||r.placeSign({lnum:o,id:this.signOffset+o,name:"CocSelected",group:"coc-list"});i.command("redraw",!0),i.resumeNotification(!1,!0)}}async toggleSelection(){let{nvim:e,reversed:t}=this;await e.call("win_gotoid",[this.winid]);let i=await e.call("line","."),r=await e.call("mode");if(r=="v"||r=="V"){let[o,s]=await this.getSelectedRange();o>s&&([o,s]=[s,o]);for(let l=o;l<=s;l++)this.toggleLine(l);this.setCursor(s),e.command("redraw",!0),await e.resumeNotification();return}e.pauseNotification(),this.toggleLine(i),this.setCursor(t?i-1:i+1),e.command("redraw",!0),await e.resumeNotification()}toggleLine(e){let{selected:t,buffer:i,signOffset:r}=this;t.has(e)?(t.delete(e),i.unplaceSign({id:r+e,group:"coc-list"})):(t.add(e),i.placeSign({lnum:e,id:r+e,name:"CocSelected",group:"coc-list"}))}async selectLines(e,t){let{nvim:i,signOffset:r,buffer:o,length:s}=this;this.clearSelection();let{selected:a}=this;i.pauseNotification(),e>t&&([e,t]=[t,e]);for(let u=e;u<=t&&!(u>s);u++)a.add(u),o.placeSign({lnum:u,id:r+u,name:"CocSelected",group:"coc-list"});this.setCursor(t),i.command("redraw",!0),await i.resumeNotification()}async selectAll(){let{length:e}=this;e>0&&await this.selectLines(1,e)}clearSelection(){let{selected:e,buffer:t}=this;e.size>0&&(t==null||t.unplaceSign({group:"coc-list"}),this.selected.clear())}get ready(){return this.window?Promise.resolve():new Promise(e=>{let t=this.onDidLineChange(()=>{t.dispose(),e()})})}getHeight(e,t){let i=this.config.get("height",10),{listOptions:r}=this;return t&&!r.interactive&&r.input.length==0&&(i=Math.min(e,i)),Math.max(1,i)}async drawItems(e,t,i=!1){let{nvim:r,name:o,listOptions:s}=this;if(this.items=e.length>this.limitLines?e.slice(0,this.limitLines):e,!this.window){let c=this.getHeight(e.length,t),{position:h,numberSelect:d}=s,[g,p,f]=await r.call("coc#list#create",[h,c,o,d]);this.tabnr=f,this.height=c,this.buffer=r.createBuffer(g);let m=this.window=r.createWindow(p),b=this.config.get("statusLineSegments");b&&m.setOption("statusline",b.join(" "),!0),this._onDidOpen.fire(this.bufnr)}let a=[],l=0;this.items.forEach((c,h)=>{a.push(c.label),!i&&l==0&&c.preselect&&(l=h)});let u=i?this.currIndex:l;this.setLines(a,0,u),this._onDidLineChange.fire()}async appendItems(e){if(!this.window||e.length===0)return;let t=this.items.length,i=this.limitLines-t;if(i>0){let r=io.label),r.length,this.currIndex)}}get shouldSort(){let{matcher:e,interactive:t}=this.listOptions;return!(t||e!=="fuzzy")}setLines(e,t,i){let{nvim:r,buffer:o,window:s,reversed:a,newTab:l}=this;if(!(!o||!s)){if(r.pauseNotification(),t||(r.call("coc#compat#clear_matches",[s.id],!0),e.length||(e=["No results, press ? on normal mode to get help."],r.call("coc#compat#matchaddpos",["Comment",[[1]],99,s.id],!0))),o.setOption("modifiable",!0,!0),a){let u=e.reverse();t?r.call("coc#compat#prepend_lines",[o.id,u],!0):o.setLines(u,{start:0,end:-1,strictIndexing:!1},!0)}else o.setLines(e,{start:t?-1:0,end:-1,strictIndexing:!1},!0);if(o.setOption("modifiable",!1,!0),a&&!l){let u=this.config.get("height",10);r.call("coc#window#set_height",[s.id,Math.max(Math.min(u,this.length),1)],!0)}if(i>this.items.length-1&&(i=0),i==0)if(t==0)this.doHighlight(0,299);else{let u=this.length-t-1;u<300&&this.doHighlight(u,Math.min(299,this.length-1))}else{let u=l?v.env.lines:this.height;this.doHighlight(Math.max(0,i-u),Math.min(i+u+1,this.length-1))}if(!t){this.currIndex=i;let u=this.indexToLnum(i);s.setCursor([u,0],!0),r.call("coc#list#select",[o.id,u],!0)}a&&r.command("normal! zb",!0),r.command("redraws",!0),r.resumeNotification(!0,!0)}}restoreWindow(){if(this.newTab)return;let{winid:e,height:t}=this;e&&t&&this.nvim.call("coc#window#set_height",[e,t],!0)}get length(){return this.items.length}get selectedItems(){let{selected:e,items:t}=this,i=[];for(let r of e){let o=this.lnumToIndex(r);t[r-1]&&i.push(t[o])}return i}doHighlight(e,t){let{items:i,reversed:r,length:o,buffer:s}=this;if(!s)return;let a=[],l=u=>{let c=this.indexToLnum(u)-1,{ansiHighlights:h}=i[u];if(h)for(let d of h){let{span:g,hlGroup:p}=d;a.push({hlGroup:p,lnum:c,colStart:g[0],colEnd:g[1]})}};if(r)for(let u=Math.min(t,o-1);u>=e;u--)l(u);else for(let u=e;u<=Math.min(t,o-1);u++)l(u);e=this.indexToLnum(e)-1,t=this.indexToLnum(t)-1,e>t&&([e,t]=[t,e]),a.length!=0&&s.updateHighlights("list",a,{start:e,end:t+1,priority:99})}setCursor(e,t=0,i){var s;let{items:r}=this,o=r.length==0?1:r.length;e>o||(i=i??this.lnumToIndex(e),this.onLineChange(i),(s=this.window)==null||s.setCursor([e,t],!0),this.nvim.call("coc#list#select",[this.bufnr,e],!0))}async setIndex(e){if(e<0||e>=this.items.length)return;let{nvim:t}=this,i=this.indexToLnum(e);t.pauseNotification(),this.setCursor(i,0,e),t.command("redraw",!0),await t.resumeNotification(!1)}async moveCursor(e){let{index:t,reversed:i}=this;await this.setIndex(i?t-e:t+e)}async getSelectedRange(){let{nvim:e}=this;await e.call("coc#prompt#stop_prompt",["list"]),await e.eval('feedkeys("\\", "in")');let[,t]=await e.call("getpos","'<"),[,i]=await e.call("getpos","'>");return this.nvim.call("coc#prompt#start_prompt",["list"],!0),[t,i]}cancel(){this.sequence.cancel()}reset(){this.cancel(),this.window&&(this.window=null,this.buffer=null,this.tabnr=void 0)}dispose(){U(this.disposables),this.nvim.call("coc#window#close",[this.winid||-1],!0),this.reset(),this.items=[],this._onDidChangeLine.dispose(),this._onDidOpen.dispose(),this._onDidClose.dispose(),this._onDidLineChange.dispose(),this._onDoubleClick.dispose()}}});async function cD(n,e,t,i){if(n.length===0)return;let r=new vF,o=n.length;function s(l){let u=[];r.start();for(let c=l;c{setImmediate(()=>{l(s(a))})})}var o4,vF,s4=k(()=>{"use strict";o4=15,vF=class{constructor(e=o4){this.yieldAfter=Math.max(e,o4),this.startTime=Date.now(),this.counter=0,this.total=0,this.counterInterval=1}start(){this.startTime=Date.now()}shouldYield(){if(++this.counter>=this.counterInterval){let e=Date.now()-this.startTime,t=Math.max(0,this.yieldAfter-e);if(this.total+=this.counter,this.counter=0,e>=this.yieldAfter||t<=1)return this.counterInterval=1,this.total=0,!0;switch(e){case 0:case 1:this.counterInterval=this.total*2;break}}return!1}}});function hD(n){return n.filterText!=null?PJ(n.filterText,n.label):n.label}function cTe(n,e,t,i){return t?kB(e,n):i?n.toLowerCase().indexOf(e.toLowerCase()):n.indexOf(e)}function hTe(n){let e=[],t=0,i=0,r="";for(;io.replace(/\\\s/g," ").trim()).filter(o=>o.length>0)}var nl,a4,uTe,l4,il,Zm,u4=k(()=>{"use strict";nl=S(W());uh();s4();x_();FR();tl();ds();_e();ie();a4=q()("list-worker"),uTe="\x1B",l4=[32,9],il="CocListSearch",Zm=class{constructor(e,t,i,r,o){this.nvim=e;this.list=t;this.prompt=i;this.listOptions=r;this.config=o;this._loading=!1;this._finished=!1;this.mutex=new Di;this.totalItems=[];this._onDidChangeItems=new nl.Emitter;this._onDidChangeLoading=new nl.Emitter;this.onDidChangeItems=this._onDidChangeItems.event;this.onDidChangeLoading=this._onDidChangeLoading.event;this.fuzzyMatch=v.createFuzzyMatch()}set loading(e){this._loading!=e&&(this._loading=e,this._onDidChangeLoading.fire(e))}get isLoading(){return this._loading}async loadItems(e,t=!1){this.cancelFilter(),this.filteredCount=0,this._finished=!1;let{list:i,listOptions:r}=this;this.loading=!0;let{interactive:o}=r;this.tokenSource=new nl.CancellationTokenSource;let s=this.tokenSource.token,a=await i.loadItems(e,s);if(!s.isCancellationRequested)if(a=a??[],Array.isArray(a)){this.tokenSource=null,this.totalItems=a,this.loading=!1,this._finished=!0;let l;if(o)l=this.convertToHighlightItems(a),this._onDidChangeItems.fire({sorted:!0,items:l,reload:t,finished:!0});else{let u=this.filterTokenSource=new nl.CancellationTokenSource;await this.mutex.use(async()=>{let c=u.token;c.isCancellationRequested||await this.filterItems(a,{reload:t},c)})}}else{let l=a,u=this.totalItems=[],c=0,h=e.input,d=!1;this.filterTokenSource=new nl.CancellationTokenSource;let g=async w=>{d=!0,await this.mutex.use(async()=>{if(this.input!=h&&(h=this.input,c=this.filteredCount??0),c>=u.length)return;let T=c>0,R=u.slice(c);if(c=u.length,o){let F=this.convertToHighlightItems(R);this._onDidChangeItems.fire({items:F,append:T,reload:t,sorted:!0,finished:w})}else{let F=this.filterTokenSource;F&&!F.token.isCancellationRequested&&await this.filterItems(R,{append:T,reload:t},F.token)}}),d=!1},p=Promise.resolve(),f=setInterval(()=>{d||(p=g())},50);l.on("data",w=>{s.isCancellationRequested||u.push(w)});let m=()=>{l!=null&&(this.tokenSource=null,l=null,this.loading=!1,this._finished=!0,b.dispose(),clearInterval(f),p.then(()=>{if(!s.isCancellationRequested){if(u.length==0){this._onDidChangeItems.fire({items:[],append:!1,sorted:!0,reload:t,finished:!0});return}return g(!0)}}).catch(w=>{a4.error("Error on filter",w)}))},b=s.onCancellationRequested(()=>{l==null||l.dispose(),m()});l.on("error",async w=>{l!=null&&(l=null,this.tokenSource=null,this.loading=!1,b.dispose(),clearInterval(f),this.nvim.call("coc#prompt#stop_prompt",["list"],!0),this.nvim.echoError(`Task error: ${w.toString()}`),a4.error("Task error:",w))}),l.on("end",m)}}async drawItems(){let{totalItems:e}=this;if(e.length===0)return;this.cancelFilter();let t=this.filterTokenSource=new nl.CancellationTokenSource,i=t.token;await this.mutex.use(async()=>{if(i.isCancellationRequested)return;let{totalItems:r}=this;this.filteredCount=r.length,await this.filterItems(r,{},t.token)})}cancelFilter(){this.filterTokenSource&&(this.filterTokenSource.cancel(),this.filterTokenSource=null)}stop(){this.cancelFilter(),this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource=null),this.loading=!1}get length(){return this.totalItems.length}get input(){return this.prompt.input}convertToHighlightItems(e){let t=this.input??"";t.length>0&&this.fuzzyMatch.setPattern(t);let i=e.map(r=>{if(this.convertItemLabel(r),t.length>0&&r.filterText!==""){let s=hD(r),a=t.length>0?this.fuzzyMatch.matchHighlights(s,il):void 0;r.ansiHighlights=Array.isArray(r.ansiHighlights)?r.ansiHighlights.filter(l=>l.hlGroup!==il):[],a&&r.ansiHighlights.push(...a.highlights)}return r});return this.fuzzyMatch.free(),i}async filterItemsByInclude(e,t,i,r){let{ignorecase:o,smartcase:s}=this.listOptions,a=this.toInputs(e);o&&(a=a.map(l=>l.toLowerCase())),await cD(t,l=>{this.convertItemLabel(l);let u=[],c=hD(l),h=_h(c),d=0;l.ansiHighlights=Array.isArray(l.ansiHighlights)?l.ansiHighlights.filter(g=>g.hlGroup!==il):[];for(let g of a){let p=d==0?c:c.slice(d),f=cTe(p,g,s,o);if(f===-1)break;let m=f+d+g.length;u.push([h(f+d),h(m)]),d=m}return u.length!==a.length?!1:(l.ansiHighlights.push(...u.map(g=>({span:g,hlGroup:il}))),!0)},r,i)}async filterItemsByRegex(e,t,i,r){let{ignorecase:o}=this.listOptions,s=o?"iu":"u",a=this.toInputs(e),l=a.reduce((u,c)=>{try{u.push(new RegExp(c,s))}catch{}return u},[]);await cD(t,u=>{this.convertItemLabel(u),u.ansiHighlights=Array.isArray(u.ansiHighlights)?u.ansiHighlights.filter(p=>p.hlGroup!==il):[];let c=[],h=hD(u),d=_h(h),g=0;for(let p of l){let f=h.slice(g).match(p);if(f==null)break;let m=f.index+g+f[0].length;c.push([d(f.index+g),d(m)]),g=m}return c.length!==a.length?!1:(u.ansiHighlights.push(...c.map(p=>({span:p,hlGroup:il}))),!0)},r,i)}async filterItemsByFuzzyMatch(e,t,i,r){let{extendedSearchMode:o}=this.config,{sort:s,smartcase:a}=this.listOptions,l=0;this.fuzzyMatch.setPattern(e,!o);let u=Fr(e);o&&(u=u.filter(c=>!l4.includes(c))),this.config.extendedSearchMode&&await cD(t,c=>{this.convertItemLabel(c);let h=hD(c),d=this.fuzzyMatch.matchHighlights(h,il);if(!d||a&&!el(u,h))return!1;let g=Array.isArray(c.ansiHighlights)?c.ansiHighlights.filter(p=>p.hlGroup!=il):[];return g.push(...d.highlights),{sortText:typeof c.sortText=="string"?c.sortText:String.fromCharCode(l),score:d.score,ansiHighlights:g}},(c,h)=>{r(c,h,s)},i)}async filterItems(e,t,i){let{input:r}=this;if(r.length===0){let l=e.map(u=>this.convertItemLabel(u));this._onDidChangeItems.fire({items:l,sorted:!0,finished:this._finished,...t});return}let o=!1,s=[],a=(l,u,c)=>{let h=u&&this._finished;if(!(i.isCancellationRequested||!h&&l.length==0))if(c)s.push(...l),u&&this._onDidChangeItems.fire({items:s,append:!1,sorted:!1,reload:t.reload,finished:h});else{let d=t.append===!0||o;o=!0,this._onDidChangeItems.fire({items:l,append:d,sorted:!0,reload:t.reload,finished:h})}};switch(this.listOptions.matcher){case"strict":await this.filterItemsByInclude(r,e,i,a);break;case"regex":await this.filterItemsByRegex(r,e,i,a);break;default:await this.filterItemsByFuzzyMatch(r,e,i,a)}}toInputs(e){return this.config.extendedSearchMode?hTe(e):[e]}convertItemLabel(e){let{label:t,converted:i}=e;if(i)return e;if(t.includes(` -`)&&(t=e.label=t.replace(/\r?\n/g," ")),t.includes(uTe)){let{line:r,highlights:o}=lh(t);e.label=r,Array.isArray(e.ansiHighlights)||(e.ansiHighlights=o)}return e.converted=!0,e}dispose(){this.stop()}}});var wF,c4,dTe,gTe,Jm,h4=k(()=>{"use strict";wF=S(Pn()),c4=S(W());Wo();Ta();re();xe();ie();yF();r4();u4();dTe=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],gTe=q()("list-session"),Jm=class{constructor(e,t,i,r,o=[],s,a){this.nvim=e;this.prompt=t;this.list=i;this.listOptions=r;this.listArgs=o;this.config=s;this.loadingFrame="";this.hidden=!1;this.disposables=[];this.args=[];this.ui=new Ym(e,i.name,r,s),this.history=new Nu(t,i.name,a,v.cwd),this.worker=new Zm(e,i,t,r,{interactiveDebounceTime:s.get("interactiveDebounceTime",100),extendedSearchMode:s.get("extendedSearchMode",!0)}),this.interactiveDebounceTime=s.get("interactiveDebounceTime",100);let l=(0,wF.default)(async()=>{let[g,p,f]=await e.eval('[coc#list#has_preview(),win_getid(),line(".")]');if(g&&p==this.winid){let m=this.ui.lnumToIndex(f);await this.doPreview(m)}},50);this.disposables.push({dispose:()=>{l.clear()}}),this.ui.onDidChangeLine(l,null,this.disposables),this.ui.onDidChangeLine(this.resolveItem,this,this.disposables),this.ui.onDidLineChange(this.resolveItem,this,this.disposables);let u=(0,wF.default)(async()=>{this.updateStatus();let{autoPreview:g}=this.listOptions;if(!g){let[p,f]=await e.eval("[coc#list#has_preview(),mode()]");if(!p||f!="n")return}await this.doAction("preview")},50);this.disposables.push({dispose:()=>{u.clear()}}),this.ui.onDidLineChange(u,null,this.disposables),this.ui.onDidOpen(async()=>{typeof this.list.doHighlight=="function"&&this.list.doHighlight(),v.isVim&&this.prompt.drawPrompt(),this.listOptions.first&&await this.doAction()},null,this.disposables),this.ui.onDidClose(this.hide,this,this.disposables),this.ui.onDidDoubleClick(this.doAction,this,this.disposables),this.worker.onDidChangeItems(g=>{this.hidden||this.ui.onDidChangeItems(g)},null,this.disposables);let c=0,h,d;this.disposables.push(c4.Disposable.create(()=>{h&&clearTimeout(h),d&&clearInterval(d)})),this.worker.onDidChangeLoading(g=>{this.hidden||(h&&clearTimeout(h),g?(c=Date.now(),d&&clearInterval(d),d=setInterval(()=>{let p=Math.floor((Date.now()-c)%1e3/100);this.loadingFrame=dTe[p],this.updateStatus()},100)):h=setTimeout(()=>{this.loadingFrame="",d&&clearInterval(d),d=null,this.updateStatus()},Math.max(0,200-(Date.now()-c))))},null,this.disposables)}async start(e){this.args=e,this.cwd=v.cwd,this.hidden=!1;let{listArgs:t}=this,i=await this.nvim.eval('[win_getid(),bufnr("%"),winheight("%")]');this.listArgs=t,this.history.filter(),this.window=this.nvim.createWindow(i[0]),this.buffer=this.nvim.createBuffer(i[1]),this.savedHeight=i[2],await this.worker.loadItems(this.context)}async reloadItems(){!this.ui.winid||await this.worker.loadItems(this.context,!0)}async call(e){var o,s;await this.nvim.call("coc#prompt#stop_prompt",["list"]);let t=await this.ui.getItems(),i={name:this.name,args:this.listArgs,input:this.prompt.input,winid:(o=this.window)==null?void 0:o.id,bufnr:(s=this.buffer)==null?void 0:s.id,targets:t},r=await this.nvim.call(e,[i]);return this.prompt.start(),r}async chooseAction(){let{nvim:e,defaultAction:t}=this,{actions:i}=this.list,r=i.map(h=>h.name),o=r.indexOf(t.name);o!=-1&&(r.splice(o,1),r.unshift(t.name));let s=new Set,a=[],l=[],u=v.env.dialog&&this.config.get("menuAction",!1);for(let h of r){let d=0;for(let g of h){if(!s.has(g)){s.add(g),a.push(`${h.slice(0,d)}&${h.slice(d)}`);break}d++}d==h.length&&l.push(h)}l.length&&!u&&(r=r.filter(h=>!l.includes(h)));let c;u?(e.call("coc#prompt#stop_prompt",["list"],!0),c=await D.showMenuPicker(r,{title:"Choose action",shortcuts:!0}),c=c+1,v.isVim&&await Nt(10),this.prompt.start()):(await e.call("coc#prompt#stop_prompt",["list"]),c=await e.call("confirm",["Choose action:",a.join(` -`)]),await Nt(10),this.prompt.start()),c&&await this.doAction(r[c-1])}async doAction(e){let{list:t}=this,i;if(e!=null){if(i=t.actions.find(o=>o.name==e),!i){D.showErrorMessage(`Action ${e} not found`);return}}else i=this.defaultAction;let r;if(e=="preview"){let o=await this.ui.item;r=o?[o]:[]}else r=await this.ui.getItems();r.length&&await this.doItemAction(r,i)}async doPreview(e){let t=this.ui.getItem(e),i=this.list.actions.find(r=>r.name=="preview");!t||!i||await this.doItemAction([t],i)}async first(){await this.doDefaultAction(0)}async last(){await this.doDefaultAction(this.ui.length-1)}async previous(){await this.doDefaultAction(this.ui.index-1)}async next(){await this.doDefaultAction(this.ui.index+1)}async doDefaultAction(e){let{ui:t}=this,i=t.getItem(e);!i||(await this.ui.setIndex(e),await this.doItemAction([i],this.defaultAction),await t.echoMessage(i))}get name(){return this.list.name}get winid(){return this.ui.winid}get length(){return this.ui.length}get defaultAction(){let{defaultAction:e,actions:t,name:i}=this.list,r=v.getConfiguration(`list.source.${i}`),o;if(r.defaultAction&&(o=t.find(s=>s.name==r.defaultAction)),o||(o=t.find(s=>s.name==e)),o||(o=t[0]),!o)throw new Error(`default action "${e}" not found`);return o}async hide(e=!1){if(this.hidden)return;let{nvim:t,timer:i,window:r}=this,{winid:o,tabnr:s}=this.ui;i&&clearTimeout(i),this.worker.stop(),this.history.add(),this.ui.reset(),this.hidden=!0;let{isVim:a}=v;if(a&&await t.call("feedkeys",["\x1B","int"]),t.pauseNotification(),a||t.call("coc#prompt#stop_prompt",["list"],!0),s&&t.call("coc#list#close_preview",[s],!0),r&&t.call("win_gotoid",[r.id],!0),o&&t.call("coc#window#close",[o],!0),r&&this.savedHeight&&this.listOptions.position!=="tab"&&t.call("coc#window#set_height",[r.id,this.savedHeight],!0),e)return t.resumeNotification(!0,!0);await t.resumeNotification(!0)}toggleMode(){let e=this.prompt.mode=="normal"?"insert":"normal";this.prompt.mode=e,this.listOptions.mode=e,this.updateStatus()}stop(){this.worker.stop()}async resolveItem(){let e=this.ui.index,t=this.ui.getItem(e);if(!t||t.resolved)return;let{list:i}=this;if(typeof i.resolveItem=="function"){let r=t.label,o=await Promise.resolve(i.resolveItem(t));if(o&&e==this.ui.index){if(Object.assign(t,o,{resolved:!0}),r==o.label)return;this.ui.updateItem(t,e)}}}async showHelp(){await this.hide();let{list:e,nvim:t}=this;if(!e)return;t.pauseNotification(),t.command("tabe +setl\\ previewwindow [LIST HELP]",!0),t.command("setl nobuflisted noswapfile buftype=nofile bufhidden=wipe",!0),await t.resumeNotification();let i=e.options&&e.options.length,r=await t.buffer,o=new Hi;if(o.addLine("NAME","Label"),o.addLine(` ${e.name} - ${e.description||""} -`),o.addLine("SYNOPSIS","Label"),o.addLine(` :CocList [LIST OPTIONS] ${e.name}${i?" [ARGUMENTS]":""} -`),e.detail){o.addLine("DESCRIPTION","Label");let a=e.detail.split(` -`).map(l=>" "+l);o.addLine(a.join(` -`)+` -`)}if(i){o.addLine("ARGUMENTS","Label"),o.addLine("");for(let a of e.options)o.addLine(a.name,"Special"),o.addLine(` ${a.description}`),o.addLine("");o.addLine("")}let s=v.getConfiguration(`list.source.${e.name}`);if(Object.keys(s).length){o.addLine("CONFIGURATIONS","Label"),o.addLine("");let a={};je.all.forEach(l=>{let{packageJSON:u}=l,{contributes:c}=u;if(!c)return;let{configuration:h}=c;if(h){let{properties:d}=h;if(d)for(let g of Object.keys(d))a[g]=d[g]}});for(let l of Object.keys(s)){let u=s[l],c=`list.source.${e.name}.${l}`,h=a[c]&&a[c].description?a[c].description:l;o.addLine(` "${c}"`,"MoreMsg"),o.addText(` - ${h}, current value: `),o.addText(JSON.stringify(u),"Special")}o.addLine("")}o.addLine("ACTIONS","Label"),o.addLine(` ${e.actions.map(a=>a.name).join(", ")}`),o.addLine(""),o.addLine("see ':h coc-list-options' for available list options.","Comment"),t.pauseNotification(),o.render(r,0,-1),t.command("setl nomod",!0),t.command("setl nomodifiable",!0),t.command("normal! gg",!0),t.command("nnoremap q :bd!",!0),await t.resumeNotification()}async switchMatcher(){let{matcher:e,interactive:t}=this.listOptions;if(t)return;let i=["fuzzy","strict","regex"],r=i.indexOf(e)+1;r>=i.length&&(r=0),this.listOptions.matcher=i[r],this.prompt.matcher=i[r],await this.worker.drawItems()}updateStatus(){let{ui:e,list:t,nvim:i}=this;if(!e.bufnr)return;let r=i.createBuffer(e.bufnr),o={mode:this.prompt.mode.toUpperCase(),args:this.args.join(" "),name:t.name,cwd:this.cwd,loading:this.loadingFrame,total:this.worker.length};r.setVar("list_status",o,!0),i.command("redraws",!0)}get context(){let{winid:e}=this.ui;return{options:this.listOptions,args:this.listArgs,input:this.prompt.input,cwd:v.cwd,window:this.window,buffer:this.buffer,listWindow:e?this.nvim.createWindow(e):void 0}}onMouseEvent(e){switch(e){case"":return this.ui.onMouse("mouseDown");case"":return this.ui.onMouse("mouseDrag");case"":return this.ui.onMouse("mouseUp");case"<2-LeftMouse>":return this.ui.onMouse("doubleClick")}}async doNumberSelect(e){if(!this.listOptions.numberSelect)return!1;let t=e.charCodeAt(0);if(t>=48&&t<=57){let i=Number(e);if(i==0&&(i=10),this.ui.length>=i)return this.nvim.pauseNotification(),this.ui.setCursor(i),await this.nvim.resumeNotification(),await this.doAction(),!0}return!1}jumpBack(){let{window:e,nvim:t}=this;e&&(t.pauseNotification(),t.call("coc#prompt#stop_prompt",["list"],!0),this.nvim.call("win_gotoid",[e.id],!0),t.resumeNotification(!1,!0))}async resume(){this.winid&&await this.hide();let e=await this.nvim.eval('[win_getid(),bufnr("%"),winheight("%")]');this.hidden=!1,this.window=this.nvim.createWindow(e[0]),this.buffer=this.nvim.createBuffer(e[1]),this.savedHeight=e[2],this.prompt.start(),await this.ui.resume(),this.listOptions.autoPreview&&await this.doAction("preview")}async doItemAction(e,t){let{noQuit:i,position:r}=this.listOptions,{nvim:o}=this,s=t.persist===!0||t.name=="preview";r==="tab"&&t.tabPersist&&(s=!0);let a=this.winid&&(s||i);try{if(a?s||(o.pauseNotification(),o.call("coc#prompt#stop_prompt",["list"],!0),o.call("win_gotoid",[this.context.window.id],!0),await o.resumeNotification()):await this.hide(),t.multiple)await Promise.resolve(t.execute(e,this.context));else if(t.parallel)await Promise.all(e.map(l=>Promise.resolve(t.execute(l,this.context))));else for(let l of e)await Promise.resolve(t.execute(l,this.context));a&&this.ui.restoreWindow(),t.reload&&a?await this.reloadItems():a&&this.nvim.command("redraw",!0)}catch(l){gTe.error(`Error on action ${t.name}`,l),this.nvim.echoError(l)}}onInputChange(){var e;this.timer&&clearTimeout(this.timer),(e=this.ui)==null||e.cancel(),this.history.filter(),this.listOptions.input=this.prompt.input,this.listOptions.interactive?(this.worker.stop(),this.timer=setTimeout(async()=>{await this.worker.loadItems(this.context)},this.interactiveDebounceTime)):this.worker.drawItems()}dispose(){this.hide(!0),U(this.disposables),this.worker.dispose(),this.ui.dispose()}}});var d4,g4,p4,pTe,$m,f4=k(()=>{"use strict";d4=require("child_process"),g4=require("events"),p4=S(require("readline"));re();ie();pTe=q()("list-commandTask"),$m=class extends g4.EventEmitter{constructor(t){super();this.opt=t;this.disposables=[];this.start()}start(){let{cmd:t,args:i,cwd:r,onLine:o}=this.opt,s=(0,d4.spawn)(t,i,{cwd:r||v.cwd,windowsHide:!0});this.disposables.push({dispose:()=>{s.kill()}}),s.on("error",l=>{this.emit("error",l.message)}),s.stderr.on("data",l=>{pTe.error(`[${t} Error]`,l.toString("utf8"))});let a=p4.default.createInterface(s.stdout);a.on("line",l=>{let u=o(l);u&&this.emit("data",u)}),a.on("close",()=>{this.emit("end")})}dispose(){U(this.disposables)}}});function fTe(n){switch(n){case"latex":return"tex";default:return n}}var Hu,u8e,zt,Yo=k(()=>{"use strict";Hu=S(W());Pe();re();$e();xt();ie();f4();rD();u8e=q()("list-basic"),zt=class{constructor(e){this.nvim=e;this.defaultAction="open";this.actions=[];this.options=[];this.disposables=[];this.config=new Au}get alignColumns(){return this.config.get("alignColumns",!1)}get hlGroup(){return this.config.get("previewHighlightGroup","Search")}get previewHeight(){return this.config.get("maxPreviewHeight",12)}get splitRight(){return this.config.get("previewSplitRight",!1)}get toplineStyle(){return this.config.get("previewToplineStyle","offset")}get toplineOffset(){return this.config.get("previewToplineOffset",3)}parseArguments(e){if(!this.optionMap){this.optionMap=new Map;for(let i of this.options){let r=i.name.split(/,\s*/g).map(s=>s.replace(/\s+.*/g,"")),o=i.key?i.key:r[r.length-1].replace(/^-/,"");for(let s of r)this.optionMap.set(s,{name:o,hasValue:i.hasValue})}}let t={};for(let i=0;i{let r=await this.convertLocation(t.location);await this.previewLocation(r,i)}});let{nvim:e}=this;this.createAction({name:"quickfix",multiple:!0,execute:async t=>{let i=await Promise.all(t.map(o=>this.convertLocation(o.location).then(s=>v.getQuickfixItem(s))));await e.call("setqflist",[i]);let r=await e.getVar("coc_quickfix_open_command");e.command(typeof r=="string"?r:"copen",!0)}});for(let t of["open","tabe","drop","vsplit","split"])this.createAction({name:t,execute:async(i,r)=>{await this.jumpTo(i.location,t=="open"?null:t,r)},tabPersist:t==="open"})}async convertLocation(e){if(typeof e=="string")return Hu.Location.create(e,Hu.Range.create(0,0,0,0));if(Hu.Location.is(e))return e;let t=j.parse(e.uri);return t.scheme!="file"?Hu.Location.create(e.uri,Hu.Range.create(0,0,0,0)):await KW(t.fsPath,e.line,e.text)}async jumpTo(e,t,i){if(t==null&&i&&i.options.position==="tab"&&(t="tabe"),typeof e=="string"){await v.jumpTo(e,null,t);return}let{range:r,uri:o}=await this.convertLocation(e),s=r.start;s.line==0&&s.character==0&&Me(s,r.end)==0&&(s=null),await v.jumpTo(o,s,t)}createAction(e){let{name:t}=e,i=this.actions.findIndex(r=>r.name==t);i!==-1&&this.actions.splice(i,1),this.actions.push(e)}async previewLocation(e,t){let{nvim:i}=this,{uri:r,range:o}=e,s=v.getDocument(e.uri),a=j.parse(r),l=await v.documentsManager.getLines(r),u={winid:t.window.id,range:Lt(o)?null:o,lnum:o.start.line+1,name:a.scheme=="file"?a.fsPath:r,filetype:fTe(s?s.languageId:v.documentsManager.getLanguageId(a.fsPath)),position:t.options.position,maxHeight:this.previewHeight,splitRight:this.splitRight,hlGroup:this.hlGroup,scheme:a.scheme,toplineStyle:this.toplineStyle,toplineOffset:this.toplineOffset,targetRange:e.targetRange};await i.call("coc#list#preview",[l,u])}async preview(e,t){let{nvim:i}=this,{bufname:r,filetype:o,range:s,lines:a,lnum:l}=e,u={winid:t.window.id,lnum:s?s.start.line+1:l||1,filetype:o,position:t.options.position,maxHeight:this.previewHeight,splitRight:this.splitRight,hlGroup:this.hlGroup,toplineStyle:this.toplineStyle,toplineOffset:this.toplineOffset};r&&(u.name=r),s&&(u.range=s),await i.call("coc#list#preview",[a,u]),i.command("redraw",!0)}doHighlight(){}dispose(){U(this.disposables)}}});function jr(n,e){if(e.length===0)return[];let t=[];if(n){let i=Array(Math.min(...e.map(r=>r.label.length))).fill(0);for(let r of e)for(let o=0;o({...r,label:r.label.map((o,s)=>o.padEnd(i[s])).join(" ")}))}else t=e.map(i=>({...i,label:i.label.join(" ")}));return t}function m4(n,e){if(n==="hidden")return"";if(n==="full")return e;if(n==="short"){let t=e.split(dD.default.sep);return t.length<2?e:[...t.slice(0,t.length-2).filter(r=>r.length>0).map(r=>r[0]),t[t.length-1]].join(dD.default.sep)}else{let t=e.split(dD.default.sep);return t[t.length-1]??""}}var dD,qu=k(()=>{"use strict";dD=S(require("path"))});function mTe(n,e){let t=n.indexOf(e);return t==-1?-1:n.length-t}var Um,b4=k(()=>{"use strict";Jt();ie();Yo();qu();Um=class extends zt{constructor(t){super(t);this.defaultAction="run";this.description="registered commands of coc.nvim";this.name="commands";this.mru=v.createMru("commands"),this.addAction("run",async i=>{await ue.fireCommand(i.data.cmd)}),this.addAction("append",async i=>{let{cmd:r}=i.data;await t.feedKeys(`:CocCommand ${r} `,"n",!1)})}async loadItems(t){let i=[],r=await this.mru.load(),{commandList:o,onCommandList:s,titles:a}=ue,l=o.map(u=>u.id).concat(s);for(let u of[...new Set(l)])i.push({label:[u,...a.get(u)?[a.get(u)]:[]],filterText:u,data:{cmd:u,score:mTe(r,u)}});return i.sort((u,c)=>c.data.score-u.data.score),jr(this.alignColumns,i)}doHighlight(){let{nvim:t}=this;t.pauseNotification(),t.command("syntax match CocCommandsTitle /\\t.*$/ contained containedin=CocCommandsLine",!0),t.command("highlight default link CocCommandsTitle Comment",!0),t.resumeNotification(!1,!0)}}});function bTe(n,e){let t=e.uri??j.file(e.filename).toString(),i="",r=[],o=0;n.length>0&&(i=n+" ",r.push({span:[o,o+Q(n)],hlGroup:"Directory"})),o=Q(i);let s=e.lnum??e.range.start.line+1,a=e.col??Q(e.text.slice(0,e.range.start.character))+1,l=`|${e.type?e.type+" ":""}${s} Col ${a}|`;if(i+=l,r.push({span:[o,o+Q(l)],hlGroup:"LineNr"}),e.type){let h=e.type.toLowerCase()==="error"?"Error":"WarningMsg";r.push({span:[o+1,o+Q(e.type)],hlGroup:h})}if(e.range&&e.range.start.line==e.range.end.line){let h=Q(i)+1,d=h+Q(e.text.slice(0,e.range.start.character)),g=h+Q(e.text.slice(0,e.range.end.character));r.push({span:[d,g],hlGroup:"Search"})}i+=" "+e.text;let u=`${n}${e.text.trim()}`,c;if(e.range)c=Xi.create(t,e.range);else{let h=Mt.create(e.lnum-1,e.col-1),d=Mt.create((e.end_lnum??e.lnum)-1,(e.end_col??e.col)-1);c=Xi.create(t,Be.create(h,d))}return c.targetRange=e.targetRange?e.targetRange:Be.create(s-1,0,s-1,99),{label:i,location:c,filterText:u,ansiHighlights:r}}var xF,D8e,po,Xm=k(()=>{"use strict";xF=S(require("path"));Kn();Pe();Jt();$e();_e();Yo();D8e=q()("list-location"),po=class extends zt{constructor(t){super(t);this.defaultAction="open";this.description="show locations saved by g:coc_jump_locations variable";this.name="location";this.createAction({name:"refactor",multiple:!0,execute:async i=>{let r=i.map(o=>o.location);await ue.executeCommand("workspace.refactor",r)}}),this.addLocationActions()}async loadItems(t,i){let r=await this.nvim.getVar("coc_jump_locations");if(i.isCancellationRequested)return[];r=r||[];let o=t.buffer.id,s=r.every(l=>l.bufnr==o);return r.map(l=>{let u=s?"":l.filename;return u.length>0&&xF.default.isAbsolute(u)&&(u=Ye(t.cwd,u)?xF.default.relative(t.cwd,u):u),bTe(u,l)})}}});var y4,I8e,Gm,v4=k(()=>{"use strict";y4=S(require("path"));Bu();$e();qu();Xm();I8e=q()("list-symbols"),Gm=class extends po{constructor(t,i){super(t);this.defaultAction="open";this.description="diagnostics of current workspace";this.name="diagnostics";Wt.onDidRefresh(async()=>{let r=i.getSession("diagnostics");r&&await r.reloadItems()},null,this.disposables)}async loadItems(t){let i=await Wt.getDiagnosticList(),{cwd:r}=t,o=this.getConfig(),s=o.get("includeCode",!0),a=o.get("pathFormat","full"),l=i.map(u=>{let c=Ye(r,u.file)?y4.default.relative(r,u.file):u.file,h=m4(a,c),d=a!=="hidden"?[`${h}:${u.lnum}`]:[],g=s?[`[${u.source}${u.code?"":"]"}`,u.code?`${u.code}]`:""]:[];return{label:[...d,...g,u.severity,u.message],location:u.location}});return jr(this.alignColumns,l)}doHighlight(){let{nvim:t}=this;t.pauseNotification(),t.command("syntax match CocDiagnosticsFile /\\v^\\s*\\S+/ contained containedin=CocDiagnosticsLine",!0),t.command("syntax match CocDiagnosticsError /\\tError\\s*\\t/ contained containedin=CocDiagnosticsLine",!0),t.command("syntax match CocDiagnosticsWarning /\\tWarning\\s*\\t/ contained containedin=CocDiagnosticsLine",!0),t.command("syntax match CocDiagnosticsInfo /\\tInformation\\s*\\t/ contained containedin=CocDiagnosticsLine",!0),t.command("syntax match CocDiagnosticsHint /\\tHint\\s*\\t/ contained containedin=CocDiagnosticsLine",!0),t.command("highlight default link CocDiagnosticsFile Comment",!0),t.command("highlight default link CocDiagnosticsError CocErrorSign",!0),t.command("highlight default link CocDiagnosticsWarning CocWarningSign",!0),t.command("highlight default link CocDiagnosticsInfo CocInfoSign",!0),t.command("highlight default link CocDiagnosticsHint CocHintSign",!0),t.resumeNotification(!1,!0)}}});function yTe(n){switch(n){case"unknown":return 2;case"activated":return 1;case"disabled":return-1;default:return 0}}var zm,w4,gD,W8e,Km,x4=k(()=>{"use strict";zm=S(require("fs")),w4=S(require("os")),gD=S(require("path"));Pe();Wo();re();ie();xe();Yo();qu();W8e=q()("list-extensions"),Km=class extends zt{constructor(t){super(t);this.defaultAction="toggle";this.description="manage coc extensions";this.name="extensions";this.addAction("toggle",async i=>{let{id:r,state:o}=i.data;o!="disabled"&&(o=="activated"?await je.manager.deactivate(r):await je.manager.activate(r),await Nt(100))},{persist:!0,reload:!0,parallel:!0}),this.addAction("configuration",async i=>{let{root:r}=i.data,o=gD.default.join(r,"package.json");if(zm.default.existsSync(o)){let a=zm.default.readFileSync(o,"utf8").split(/\r?\n/).findIndex(l=>l.includes('"contributes"'));await v.jumpTo(j.file(o).toString(),{line:a==-1?0:a,character:0})}}),this.addAction("open",async i=>{let{root:r}=i.data;v.env.isiTerm?t.call("coc#ui#iterm_open",[r],!0):t.call("coc#ui#open_url",[r],!0)}),this.addAction("disable",async i=>{let{id:r,state:o}=i.data;o!=="disabled"&&await je.manager.toggleExtension(r)},{persist:!0,reload:!0,parallel:!0}),this.addAction("enable",async i=>{let{id:r,state:o}=i.data;o=="disabled"&&await je.manager.toggleExtension(r)},{persist:!0,reload:!0,parallel:!0}),this.addAction("lock",async i=>{let{id:r}=i.data;je.states.setLocked(r,!0)},{persist:!0,reload:!0}),this.addAction("help",async i=>{let{root:r}=i.data,s=zm.default.readdirSync(r,{encoding:"utf8"}).find(a=>/^readme/i.test(a));s&&await v.callAsync("coc#util#jump",["edit",gD.default.join(r,s)])}),this.addAction("reload",async i=>{let{id:r}=i.data;await je.manager.reloadExtension(r)},{persist:!0,reload:!0}),this.addAction("fix",async i=>{let{root:r,isLocal:o}=i.data,{npm:s}=je;if(o){D.showWarningMessage("Can't fix for local extension.");return}if(!s)return;let a=gD.default.join(r,"node_modules");zm.default.rmSync(a,{recursive:!0,force:!0});let l=await D.createTerminal({cwd:r});!await l.show(!1)||(v.nvim.command("startinsert",!0),l.sendText(`${s} install --production --ignore-scripts --no-lockfile`,!0))}),this.addMultipleAction("uninstall",async i=>{let r=[];for(let o of i)o.data.isLocal||r.push(o.data.id);await je.manager.uninstallExtensions(r)})}async loadItems(t){let i=[],r=await je.getExtensionStates();for(let o of r){let s="+";o.state=="disabled"?s="-":o.state=="activated"?s="*":o.state=="unknown"&&(s="?");let a=await this.nvim.call("resolve",o.root),l=o.isLocked;i.push({label:[`${s} ${o.id}${l?" \uE0A2":""}`,...o.isLocal?["[RTP]"]:[],o.version,a.replace(w4.default.homedir(),"~")],filterText:o.id,data:{id:o.id,root:a,state:o.state,isLocal:o.isLocal,priority:yTe(o.state)}})}return i.sort((o,s)=>o.data.priority!=s.data.priority?s.data.priority-o.data.priority:s.data.id-o.data.id?1:-1),jr(this.alignColumns,i)}doHighlight(){let{nvim:t}=this;t.pauseNotification(),t.command("syntax match CocExtensionsActivited /\\v^\\*/ contained containedin=CocExtensionsLine",!0),t.command("syntax match CocExtensionsLoaded /\\v^\\+/ contained containedin=CocExtensionsLine",!0),t.command("syntax match CocExtensionsDisabled /\\v^-/ contained containedin=CocExtensionsLine",!0),t.command("syntax match CocExtensionsName /\\v%3c\\S+/ contained containedin=CocExtensionsLine",!0),t.command("syntax match CocExtensionsRoot /\\v\\t[^\\t]*$/ contained containedin=CocExtensionsLine",!0),t.command("syntax match CocExtensionsLocal /\\v\\[RTP\\]/ contained containedin=CocExtensionsLine",!0),t.command("highlight default link CocExtensionsActivited Special",!0),t.command("highlight default link CocExtensionsLoaded Normal",!0),t.command("highlight default link CocExtensionsDisabled Comment",!0),t.command("highlight default link CocExtensionsName String",!0),t.command("highlight default link CocExtensionsLocal MoreMsg",!0),t.command("highlight default link CocExtensionsRoot Comment",!0),t.resumeNotification(!1,!0)}}});var C4,S4,Qm,D4=k(()=>{"use strict";C4=S(require("path"));Pe();S4=S(require("fs"));$e();ie();xe();Yo();Qm=class extends zt{constructor(t){super(t);this.defaultAction="edit";this.description="list of current workspace folders";this.name="folders";this.addAction("edit",async i=>{let r=await t.call("input",["Folder: ",i.label,"dir"]),o=await zi(r);if(!o||!o.isDirectory()){D.showErrorMessage(`invalid path: ${r}`);return}v.workspaceFolderControl.renameWorkspaceFolder(i.label,r)}),this.addAction("delete",async i=>{v.workspaceFolderControl.removeWorkspaceFolder(i.label)},{reload:!0,persist:!0}),this.addAction("newfile",async(i,r)=>{let o=await D.requestInput("File name",i.label+"/");if(!o)return;let s=C4.default.dirname(o),a=await zi(s);(!a||!a.isDirectory())&&S4.default.mkdirSync(s,{recursive:!0}),await v.createFile(o,{overwrite:!1,ignoreIfExists:!0}),await this.jumpTo(j.file(o).toString(),null,r)})}async loadItems(t){return v.folderPaths.map(i=>({label:i}))}}});function T4(n){if(!n.startsWith("file:"))return n;let e=j.parse(n).fsPath;return Ye(v.cwd,e)?k4.default.relative(v.cwd,e):e}var k4,Vm,P4=k(()=>{"use strict";de();ie();k4=S(require("path"));Yo();Kn();Pe();$e();Vm=class extends zt{constructor(t){super(t);this.defaultAction="open";this.description="links of current buffer";this.name="links";this.addAction("open",async i=>{let{target:r}=i.data;j.parse(r).scheme.startsWith("http")?await t.call("coc#ui#open_url",r):await v.jumpTo(r)}),this.addAction("jump",async i=>{let{location:r}=i.data;await v.jumpTo(r.uri,r.range.start)})}async loadItems(t,i){let r=await t.window.buffer,o=v.getDocument(r.id);if(!o)return null;let s=[],a=await _.getDocumentLinks(o.textDocument,i);if(i.isCancellationRequested)return null;if(a==null)throw new Error("Links provider not found.");let l=[];for(let u of a)u.target?s.push({label:T4(u.target),data:{target:u.target,location:Xi.create(o.uri,u.range)}}):(u=await _.resolveDocumentLink(u,i),u.target&&s.push({label:T4(u.target),data:{target:u.target,location:Xi.create(o.uri,u.range)}}),l.push(u));return s}}});function vTe(n,e){let t=n.indexOf(e);return t==-1?-1:n.length-t}var eb,E4=k(()=>{"use strict";Yo();Nx();qu();eb=class extends zt{constructor(t,i){super(t);this.listMap=i;this.name="lists";this.defaultAction="open";this.description="registered lists of coc.nvim";this.mru=new xs("lists");this.addAction("open",async r=>{let{name:o}=r.data;await this.mru.add(o),setTimeout(()=>{t.command(`CocList ${o}`,!0)},t.isVim?50:0)})}async loadItems(t){let i=[],r=await this.mru.load();for(let o of this.listMap.values())o.name!="lists"&&i.push({label:[o.name,...o.description?[o.description]:[]],data:{name:o.name,interactive:o.interactive,score:vTe(r,o.name)}});return i.sort((o,s)=>s.data.score-o.data.score),jr(this.alignColumns,i)}doHighlight(){let{nvim:t}=this;t.pauseNotification(),t.command("syntax match CocListsDesc /\\t.*$/ contained containedin=CocListsLine",!0),t.command("highlight default link CocListsDesc Comment",!0),t.resumeNotification(!1,!0)}}});function Ms(n){switch(n){case bt.SymbolKind.File:return"File";case bt.SymbolKind.Module:return"Module";case bt.SymbolKind.Namespace:return"Namespace";case bt.SymbolKind.Package:return"Package";case bt.SymbolKind.Class:return"Class";case bt.SymbolKind.Method:return"Method";case bt.SymbolKind.Property:return"Property";case bt.SymbolKind.Field:return"Field";case bt.SymbolKind.Constructor:return"Constructor";case bt.SymbolKind.Enum:return"Enum";case bt.SymbolKind.Interface:return"Interface";case bt.SymbolKind.Function:return"Function";case bt.SymbolKind.Variable:return"Variable";case bt.SymbolKind.Constant:return"Constant";case bt.SymbolKind.String:return"String";case bt.SymbolKind.Number:return"Number";case bt.SymbolKind.Boolean:return"Boolean";case bt.SymbolKind.Array:return"Array";case bt.SymbolKind.Object:return"Object";case bt.SymbolKind.Key:return"Key";case bt.SymbolKind.Null:return"Null";case bt.SymbolKind.EnumMember:return"EnumMember";case bt.SymbolKind.Struct:return"Struct";case bt.SymbolKind.Event:return"Event";case bt.SymbolKind.Operator:return"Operator";case bt.SymbolKind.TypeParameter:return"TypeParameter";default:return"Unknown"}}var bt,tb=k(()=>{"use strict";bt=S(W())});function R4(n,e){return`${n.name}${e?` ${e}`:""}`}function wTe(n,e){let t=n.selectionRange,i=e.selectionRange;return t.start.line!=i.start.line?t.start.line-i.start.line:t.start.character-i.start.character}var _4,L4,x5e,ib,I4=k(()=>{"use strict";_4=S(require("path"));Kn();Pe();L4=S(Bg());de();re();$e();ie();Xm();tb();qu();x5e=q()("list-symbols");ib=class extends po{constructor(){super(...arguments);this.description="symbols of current document";this.name="outline";this.options=[{name:"-k, -kind KIND",hasValue:!0,description:"filter symbol by kind"}]}async loadItems(t,i){let r=await t.window.buffer,o=v.getDocument(r.id);if(!o)return null;let a=this.getConfig().get("ctagsFiletypes",[]),l,u=this.parseArguments(t.args);if(a.includes(o.filetype)||(l=await _.getDocumentSymbol(o.textDocument,i)),i.isCancellationRequested)return[];if(!l)return await this.loadCtagsSymbols(o);if(l.length==0)return[];let c=u.kind?u.kind.toLowerCase():null,h=[];if(Eg.is(l[0])){let g=function(p,f=0){p.sort(wTe);for(let m of p){let b=Ms(m.kind),w=Xi.create(o.uri,m.selectionRange);h.push({label:[`${"| ".repeat(f)}${m.name}`,`[${b}]`,`${m.range.start.line+1}`],filterText:R4(m,u.kind==""?b:null),location:w,data:{kind:b}}),m.children&&m.children.length&&g(m.children,f+1)}};g(l),c&&(h=h.filter(p=>p.data.kind.toLowerCase().indexOf(c)==0))}else{l.sort((g,p)=>{let f=g.location.range.start,m=p.location.range.start,b=f.line-m.line;return b==0?f.character-m.character:b});for(let g of l){let p=Ms(g.kind);g.name.endsWith(") callback")||c&&!p.toLowerCase().startsWith(c)||(g.location.uri===void 0&&(g.location.uri=o.uri),h.push({label:[g.name,`[${p}]`,`${g.location.range.start.line+1}`],filterText:R4(g,u.kind==""?p:null),location:g.location}))}}return jr(this.alignColumns,h)}doHighlight(){let{nvim:t}=this;t.pauseNotification(),t.command("syntax match CocOutlineName /\\v\\s?[^\\t]+\\s/ contained containedin=CocOutlineLine",!0),t.command("syntax match CocOutlineIndentLine /\\v\\|/ contained containedin=CocOutlineLine,CocOutlineName",!0),t.command("syntax match CocOutlineKind /\\[\\w\\+\\]/ contained containedin=CocOutlineLine",!0),t.command("syntax match CocOutlineLine /\\d\\+$/ contained containedin=CocOutlineLine",!0),t.command("highlight default link CocOutlineName Normal",!0),t.command("highlight default link CocOutlineIndentLine Comment",!0),t.command("highlight default link CocOutlineKind Typedef",!0),t.command("highlight default link CocOutlineLine Comment",!0),t.resumeNotification(!1,!0)}async loadCtagsSymbols(t){if(!L4.default.sync("ctags",{nothrow:!0}))return[];let i=j.parse(t.uri),r=_4.default.extname(i.fsPath),o="",a=`${await this.nvim.call("tempname")}.${r}`,l=await this.nvim.call("fnameescape",a);await rp(l,t.getDocumentContent());try{o=await _o(`ctags -f - --excmd=number --language-force=${t.filetype} ${l}`)}catch{}if(o.trim().length||(o=await _o(`ctags -f - --excmd=number ${l}`)),o=o.trim(),!o)return[];let u=o.split(/\r?\n/),c=[];for(let h of u){let d=h.split(" ");if(d.length<4)continue;let g=Number(d[2].replace(/;"$/,"")),p=t.getline(g-1);if(!p)continue;let f=p.indexOf(d[0]),m=f==-1?0:f,b=Be.create(g-1,m,g-1,m+d[0].length);c.push({label:`${d[0]} [${d[3]}] ${g}`,filterText:d[0],location:Xi.create(t.uri,b),data:{line:g}})}return c.sort((h,d)=>h.data.line-d.data.line),c}}});var nb,F4=k(()=>{"use strict";Hm();Yo();re();qu();nb=class extends zt{constructor(t){super(t);this.defaultAction="toggle";this.description="registered services of coc.nvim";this.name="services";this.addAction("toggle",async i=>{let{id:r}=i.data;await yn.toggle(r),await Nt(100)},{persist:!0,reload:!0})}async loadItems(t){let i=yn.getServiceStats();return i.sort((r,o)=>r.id>o.id?-1:1),jr(this.alignColumns,i.map(r=>({label:[r.state=="running"?"*":" ",r.id,`[${r.state}]`,r.languageIds.join(", ")],data:{id:r.id}})))}doHighlight(){let{nvim:t}=this;t.pauseNotification(),t.command("syntax match CocServicesPrefix /\\v^./ contained containedin=CocServicesLine",!0),t.command("syntax match CocServicesName /\\v%3c\\S+/ contained containedin=CocServicesLine",!0),t.command("syntax match CocServicesStat /\\v\\t\\[\\w+\\]/ contained containedin=CocServicesLine",!0),t.command("syntax match CocServicesLanguages /\\v(\\])@<=.*$/ contained containedin=CocServicesLine",!0),t.command("highlight default link CocServicesPrefix Special",!0),t.command("highlight default link CocServicesName Type",!0),t.command("highlight default link CocServicesStat Statement",!0),t.command("highlight default link CocServicesLanguages Comment",!0),t.resumeNotification(!1,!0)}}});function pD(n,e){return n.length>e?n.slice(0,e-1)+".":n+" ".repeat(e-n.length)}var I5e,rb,j4=k(()=>{"use strict";Kn();Pe();Os();Yo();I5e=q()("list-sources"),rb=class extends zt{constructor(t){super(t);this.defaultAction="toggle";this.description="registered completion sources";this.name="sources";this.addAction("toggle",async i=>{let{name:r}=i.data;St.toggleSource(r)},{persist:!0,reload:!0}),this.addAction("refresh",async i=>{let{name:r}=i.data;await St.refresh(r)},{persist:!0,reload:!0}),this.addAction("open",async(i,r)=>{let{location:o}=i;o&&await this.jumpTo(o,null,r)})}async loadItems(t){let i=St.sourceStats();return i.sort((r,o)=>r.type!=o.type?r.typeo.name?-1:1),i.map(r=>{let o=r.disabled?" ":"*",s;return r.filepath&&(s=Xi.create(j.file(r.filepath).toString(),Be.create(0,0,0,0))),{label:`${o} ${pD(r.name,22)} ${pD("["+r.shortcut+"]",10)} ${pD(r.triggerCharacters.join(""),10)} ${pD(r.priority.toString(),3)} ${r.filetypes.join(",")}`,location:s,data:{name:r.name}}})}doHighlight(){let{nvim:t}=this;t.pauseNotification(),t.command("syntax match CocSourcesPrefix /\\v^./ contained containedin=CocSourcesLine",!0),t.command("syntax match CocSourcesName /\\v%3c\\S+/ contained containedin=CocSourcesLine",!0),t.command("syntax match CocSourcesType /\\v%25v.*%36v/ contained containedin=CocSourcesLine",!0),t.command("syntax match CocSourcesPriority /\\v%46v.*%50v/ contained containedin=CocSourcesLine",!0),t.command("syntax match CocSourcesFileTypes /\\v\\S+$/ contained containedin=CocSourcesLine",!0),t.command("highlight default link CocSourcesPrefix Special",!0),t.command("highlight default link CocSourcesName Type",!0),t.command("highlight default link CocSourcesPriority Number",!0),t.command("highlight default link CocSourcesFileTypes Comment",!0),t.command("highlight default link CocSourcesType Statement",!0),t.resumeNotification(!1,!0)}}});function M4(n){let e=fd.Location.create(n.uri,fd.Range.create(n.range.start,n.range.start));return e.targetRange=n.range,e}var O4,A4,fd,Z5e,ob,N4=k(()=>{"use strict";O4=S(Lo()),A4=S(require("path")),fd=S(W());ph();Pe();de();tb();$e();_e();ie();Xm();Z5e=q()("list-symbols"),ob=class extends po{constructor(){super(...arguments);this.interactive=!0;this.description="search workspace symbols";this.detail="Symbols list is provided by server, it works on interactive mode only.";this.fuzzyMatch=v.createFuzzyMatch();this.name="symbols";this.options=[{name:"-k, -kind KIND",description:"Filter symbols by kind.",hasValue:!0}]}async loadItems(t,i){let{input:r}=t,o=this.parseArguments(t.args),s=o.kind?o.kind.toLowerCase():"";if(!t.options.interactive)throw new Error("Symbols only works on interactive mode");if(!_.hasProvider("workspaceSymbols",Vn.create("file:///1","",1,"")))throw new Error("No workspace symbols provider registered");let a=await _.getWorkspaceSymbols(r,i),u=this.getConfig().get("excludes",[]),c=[];r.length>0&&this.fuzzyMatch.setPattern(r,!0);for(let h of a){let d=Ms(h.kind);if(s&&d.toLowerCase()!=s)continue;let g;if(h.location&&(g=j.parse(h.location.uri).fsPath,Ye(v.cwd,g)&&(g=A4.default.relative(v.cwd,g)),u.some(f=>(0,O4.default)(g,f))))continue;let p=this.createListItem(r,h,d,g);c.push(p)}return this.fuzzyMatch.free(),c.sort((h,d)=>h.data.score!=d.data.score?d.data.score-h.data.score:h.data.kind!=d.data.kind?h.data.kind-d.data.kind:h.data.file.length-d.data.file.length),c}async resolveItem(t){let i=t.data.original;if(!i)return null;let r=new fd.CancellationTokenSource,o=await _.resolveWorkspaceSymbol(i,r.token);return o?(i.location=o.location,t.location=M4(o.location),t):null}createListItem(t,i,r,o){let{name:s}=i,a="",l=[],u=[s,`[${r}]`,o],c=["Normal","Typedef","Comment"];for(let d=0;d0){let d=this.fuzzyMatch.matchHighlights(s,"CocListSearch");d&&(h=d.score,l.push(...d.highlights))}return{label:a,filterText:"",ansiHighlights:l,location:M4(i.location),data:{original:i,input:t,kind:i.kind,file:o,score:h}}}doHighlight(){}}});var q4,fD,B4,xTe,H4,CF,Bi,mD=k(()=>{"use strict";q4=S(Pn()),fD=S(W());fe();Wo();re();ie();xe();rD();QQ();e4();yF();bF();h4();b4();v4();x4();D4();P4();E4();Xm();I4();F4();j4();N4();B4=S(qw()),xTe=q()("list-manager"),H4=["","","","<2-LeftMouse>"],CF=class{constructor(){this.plugTs=0;this.sessionsMap=new Map;this.disposables=[];this.listMap=new Map}init(e){this.nvim=e,this.config=new Au,this.prompt=new Bm(e,this.config),this.mappings=new qm(this,e,this.config),this.db=new gd,Nu.migrate(process.env.COC_DATA_HOME);let t=this.config.get("selectedSignText","*");e.command(`sign define CocSelected text=${t} texthl=CocSelectedText linehl=CocSelectedLine`,!0),P.on("InputChar",this.onInputChar,this,this.disposables);let i=(0,q4.default)(async()=>{await this.getCurrentSession()&&this.prompt.drawPrompt()},100);P.on("FocusGained",i,null,this.disposables),P.on("WinEnter",o=>{let s=this.getSessionByWinid(o);s&&this.prompt.start(s.listOptions)},null,this.disposables);let r;P.on("WinLeave",o=>{r&&clearTimeout(r),this.getSessionByWinid(o)&&setTimeout(()=>{this.prompt.cancel()},v.isVim?50:0)},null,this.disposables),P.on("VimLeavePre",()=>{this.db.save()},null,this.disposables),this.disposables.push({dispose:()=>{i.clear()}}),this.prompt.onDidChangeInput(()=>{var o;(o=this.session)==null||o.onInputChange()}),this.registerList(new Vm(e)),this.registerList(new po(e)),this.registerList(new ob(e)),this.registerList(new ib(e)),this.registerList(new Um(e)),this.registerList(new Km(e)),this.registerList(new Gm(e,this)),this.registerList(new rb(e)),this.registerList(new nb(e)),this.registerList(new eb(e,this.listMap)),this.registerList(new Qm(e))}async start(e){let t=this.parseArgs(e);if(!t)return;let{name:i}=t.list,r=this.sessionsMap.get(i);r&&r.dispose(),this.prompt.start(t.options);let o=new Jm(this.nvim,this.prompt,t.list,t.options,t.listArgs,this.config,this.db);this.sessionsMap.set(i,o),this.lastSession=o;try{await o.start(e)}catch(s){this.nvim.command('echo ""',!0),this.nvim.call("coc#prompt#stop_prompt",["list"],!0);let a=s instanceof Error?s.message:s.toString();D.showErrorMessage(`Error on "CocList ${i}": ${a}`),this.nvim.redrawVim(),xTe.error(s)}}getSessionByWinid(e){for(let t of this.sessionsMap.values())if(t&&t.winid==e)return this.lastSession=t,t;return null}async getCurrentSession(){let{id:e}=await this.nvim.window;for(let t of this.sessionsMap.values())if(t&&t.winid==e)return this.lastSession=t,t;return null}async resume(e){var t;if(!e)await((t=this.session)==null?void 0:t.resume());else{let i=this.sessionsMap.get(e);if(!i){D.showWarningMessage(`Can't find exists ${e} list`);return}await i.resume()}}async doAction(e){let t=this.lastSession;!t||await t.doAction(e)}async first(e){let t=this.getSession(e);t&&await t.first()}async last(e){let t=this.getSession(e);t&&await t.last()}async previous(e){let t=this.getSession(e);t&&await t.previous()}async next(e){let t=this.getSession(e);t&&await t.next()}getSession(e){return e?this.sessionsMap.get(e):this.session}async cancel(e=!0){this.prompt.cancel(),!!e&&this.session&&await this.session.hide()}reset(){this.prompt.cancel(),this.lastSession=void 0;for(let e of this.sessionsMap.values())e.dispose();this.sessionsMap.clear(),this.nvim.call("coc#prompt#stop_prompt",["list"],!0)}async switchMatcher(){var e;await((e=this.session)==null?void 0:e.switchMatcher())}async togglePreview(){let{nvim:e}=this,t=await e.call("coc#list#get_preview",[0]);t!=-1?(await e.call("coc#window#close",[t]),await e.command("redraw")):await this.doAction("preview")}async chooseAction(){let{lastSession:e}=this;e&&await e.chooseAction()}parseArgs(e){let t=[],i=!1,r=!1,o=!1,s=!1,a=!1,l=!1,u,c="",h="fuzzy",d="bottom",g=[],p=[];for(let b of e)if(!u&&b.startsWith("-"))p.push(b);else if(u)g.push(b);else{if(!/^\w+$/.test(b))return D.showErrorMessage(`Invalid list option: "${b}"`),null;u=b}u=u||"lists";let f=v.getConfiguration(`list.source.${u}`);!p.length&&!g.length&&(p=f.get("defaultOptions",[])),g.length||(g=f.get("defaultArgs",[]));for(let b of p)if(b.startsWith("--input"))c=b.slice(8);else if(b=="--number-select"||b=="-N")o=!0;else if(b=="--auto-preview"||b=="-A")r=!0;else if(b=="--regex"||b=="-R")h="regex";else if(b=="--strict"||b=="-S")h="strict";else if(b=="--interactive"||b=="-I")i=!0;else if(b=="--top")d="top";else if(b=="--tab")d="tab";else if(b=="--ignore-case"||b=="--normal"||b=="--no-sort")t.push(b.slice(2));else if(b=="--first")a=!0;else if(b=="--reverse")l=!0;else if(b=="--no-quit")s=!0;else return D.showErrorMessage(`Invalid option "${b}" of list`),null;let m=this.listMap.get(u);return m?i&&!m.interactive?(D.showErrorMessage(`Interactive mode of "${u}" list not supported`),null):{list:m,listArgs:g,options:{numberSelect:o,autoPreview:r,reverse:l,noQuit:s,first:a,input:c,interactive:i,matcher:h,position:d,smartcase:this.config.smartcase,ignorecase:!!t.includes("ignore-case"),mode:t.includes("normal")?"normal":"insert",sort:!t.includes("no-sort")}}:(D.showErrorMessage(`List ${u} not found`),null)}async onInputChar(e,t,i){if(e!="list")return;let{mode:r}=this.prompt,o=Date.now();if(t==""||this.plugTs&&o-this.plugTs<20){this.plugTs=o;return}if(!!t){if(t==""){await this.cancel();return}r=="insert"?await this.onInsertInput(t,i):await this.onNormalInput(t,i)}}async onInsertInput(e,t){let{session:i}=this;if(!i)return;if(H4.includes(e)){await this.onMouseEvent(e);return}if(!(await i.doNumberSelect(e)||await this.mappings.doInsertKeymap(e)||t)){if(e.startsWith("<")&&e.endsWith(">")){await this.feedkeys(e,!1);return}for(let s of e){let a=s.codePointAt(0);if(a==65533||a<32||a>=127&&a<=159)return;await this.prompt.acceptCharacter(s)}}}async onNormalInput(e,t){if(H4.includes(e)){await this.onMouseEvent(e);return}await this.mappings.doNormalKeymap(e)||await this.feedkeys(e)}onMouseEvent(e){if(this.session)return this.session.onMouseEvent(e)}async feedkeys(e,t=!0){let{nvim:i}=this;e=e.startsWith("<")&&e.endsWith(">")?`\\${e}`:e,await i.call("coc#prompt#stop_prompt",["list"]),await i.call("eval",[`feedkeys("${e}", "${t?"i":"in"}")`]),this.prompt.start()}async command(e){let{nvim:t}=this;await t.call("coc#prompt#stop_prompt",["list"]),await t.command(e),this.prompt.start()}async normal(e,t=!0){let{nvim:i}=this;await i.call("coc#prompt#stop_prompt",["list"]),await i.command(`normal${t?"!":""} ${e}`),this.prompt.start()}async call(e){if(this.session)return await this.session.call(e)}get session(){return this.lastSession}registerList(e){let{name:t}=e,i=this.listMap.get(t);return this.listMap.has(t)&&(i&&(typeof i.dispose=="function"&&i.dispose(),this.listMap.delete(t)),D.showWarningMessage(`list "${t}" recreated.`)),this.listMap.set(t,e),je.addSchemeProperty(`list.source.${t}.defaultAction`,{type:"string",default:null,description:`Default action of "${t}" list.`},"list-manager"),je.addSchemeProperty(`list.source.${t}.defaultOptions`,{type:"array",default:e.interactive?["--interactive"]:[],description:`Default list options of "${t}" list, only used when both list option and argument are empty.`,uniqueItems:!0,items:{type:"string",enum:["--top","--normal","--no-sort","--input","--tab","--strict","--regex","--ignore-case","--number-select","--reverse","--interactive","--auto-preview","--first","--no-quit"]}},"list-manager"),je.addSchemeProperty(`list.source.${t}.defaultArgs`,{type:"array",default:[],description:`Default argument list of "${t}" list, only used when list argument is empty.`,uniqueItems:!0,items:{type:"string"}},"list-manager"),fD.Disposable.create(()=>{typeof e.dispose=="function"&&e.dispose(),this.listMap.delete(t)})}get names(){return Array.from(this.listMap.keys())}get descriptions(){let e={};for(let t of this.listMap.keys()){let i=this.listMap.get(t);e[t]=i.description}return e}async loadItems(e){let t=[e],i=this.parseArgs(t);if(!i)return;let{list:r,options:o,listArgs:s}=i,l=new fD.CancellationTokenSource().token,u=await this.nvim.eval('[win_getid(),bufnr("%")]'),c=await r.loadItems({options:o,args:s,input:"",cwd:v.cwd,window:this.nvim.createWindow(u[0]),buffer:this.nvim.createBuffer(u[1]),listWindow:null},l);if(!c||Array.isArray(c))return c;let h=c;return await new Promise((g,p)=>{let f=[];h.on("data",m=>{m.label=(0,B4.default)(m.label),f.push(m)}),h.on("end",()=>{g(f)}),h.on("error",m=>{p(m)})})}toggleMode(){let e=this.lastSession;e&&e.toggleMode()}get isActivated(){var e;return((e=this.session)==null?void 0:e.winid)!=null}stop(){let e=this.lastSession;e&&e.stop()}dispose(){for(let e of this.sessionsMap.values())e.dispose();this.sessionsMap.clear(),this.config&&this.config.dispose(),this.lastSession=void 0,U(this.disposables)}},Bi=new CF});var Y4=y((m7e,W4)=>{W4.exports=["\0","","","","","","","\x07","\b"," ",` -`,"\v","\f","\r","","","","","","","","","","","","","","\x1B","","","",""," ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","\x7F","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""," ","!","C/","PS","$?","Y=","|","SS",'"',"(c)","a","<<","!","","(r)","-","deg","+-","2","3","'","u","P","*",",","1","o",">>","1/4","1/2","3/4","?","A","A","A","A","A","A","AE","C","E","E","E","E","I","I","I","I","D","N","O","O","O","O","O","x","O","U","U","U","U","U","Th","ss","a","a","a","a","a","a","ae","c","e","e","e","e","i","i","i","i","d","n","o","o","o","o","o","/","o","u","u","u","u","y","th","y"]});var J4=y((b7e,Z4)=>{Z4.exports=["A","a","A","a","A","a","C","c","C","c","C","c","C","c","D","d","D","d","E","e","E","e","E","e","E","e","E","e","G","g","G","g","G","g","G","g","H","h","H","h","I","i","I","i","I","i","I","i","I","i","IJ","","J","j","K","k","k","L","l","L","l","L","l","L","l","L","l","N","n","N","n","N","n","'n","ng","NG","O","o","O","o","O","o","OE","oe","R","r","R","r","R","r","S","s","S","s","S","s","S","s","T","t","T","t","T","t","U","u","U","u","U","u","U","u","U","u","U","u","W","w","Y","y","Y","Z","z","Z","z","Z","z","s","b","B","B","b","6","6","O","C","c","D","D","D","d","d","3","@","E","F","f","G","G","hv","I","I","K","k","l","l","W","N","n","O","O","o","OI","oi","P","p","YR","2","2","SH","sh","t","T","t","T","U","u","Y","V","Y","y","Z","z","ZH","ZH","zh","zh","2","5","5","ts","w","|","||","|=","!","DZ","Dz","dz","LJ","Lj","lj","NJ","Nj","nj","A","a","I","i","O","o","U","u","U","u","U","u","U","u","U","u","@","A","a","A","a","AE","ae","G","g","G","g","K","k","O","o","O","o","ZH","zh","j","DZ","D","dz","G","g","HV","W","N","n","A","a","AE","ae","O","o"]});var U4=y((y7e,$4)=>{$4.exports=["A","a","A","a","E","e","E","e","I","i","I","i","O","o","O","o","R","r","R","r","U","u","U","u","S","s","T","t","Y","y","H","h","[?]","[?]","OU","ou","Z","z","A","a","E","e","O","o","O","o","O","o","O","o","Y","y","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","a","a","a","b","o","c","d","d","e","@","@","e","e","e","e","j","g","g","g","g","u","Y","h","h","i","i","I","l","l","l","lZ","W","W","m","n","n","n","o","OE","O","F","R","R","R","R","r","r","R","R","R","s","S","j","S","S","t","t","U","U","v","^","W","Y","Y","z","z","Z","Z","?","?","?","C","@","B","E","G","H","j","k","L","q","?","?","dz","dZ","dz","ts","tS","tC","fN","ls","lz","WW","]]","[?]","[?]","k","h","j","r","r","r","r","w","y","'",'"',"`","'","`","`","'","?","?","<",">","^","V","^","V","'","-","/","\\",",","_","\\","/",":",".","`","'","^","V","+","-","V",".","@",",","~",'"',"R","X","G","l","s","x","?","","","","","","","","V","=",'"',"[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var G4=y((v7e,X4)=>{X4.exports=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","'",",","[?]","[?]","[?]","[?]","","[?]","[?]","[?]","?","[?]","[?]","[?]","[?]","[?]","","","A",";","E","E","I","[?]","O","[?]","U","O","I","A","B","G","D","E","Z","E","Th","I","K","L","M","N","Ks","O","P","R","[?]","S","T","U","Ph","Kh","Ps","O","I","U","a","e","e","i","u","a","b","g","d","e","z","e","th","i","k","l","m","n","x","o","p","r","s","s","t","u","ph","kh","ps","o","i","u","o","u","o","[?]","b","th","U","U","U","ph","p","&","[?]","[?]","St","st","W","w","Q","q","Sp","sp","Sh","sh","F","f","Kh","kh","H","h","G","g","CH","ch","Ti","ti","k","r","c","j","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var K4=y((w7e,z4)=>{z4.exports=["Ie","Io","Dj","Gj","Ie","Dz","I","Yi","J","Lj","Nj","Tsh","Kj","I","U","Dzh","A","B","V","G","D","Ie","Zh","Z","I","I","K","L","M","N","O","P","R","S","T","U","F","Kh","Ts","Ch","Sh","Shch","","Y","'","E","Iu","Ia","a","b","v","gh","d","ie","zh","z","i","i","k","l","m","n","o","p","r","s","t","u","f","kh","ts","ch","sh","shch","","y","'","e","iu","ia","ie","io","dj","gj","ie","dz","i","yi","j","lj","nj","tsh","kj","i","u","dzh","O","o","E","e","Ie","ie","E","e","Ie","ie","O","o","Io","io","Ks","ks","Ps","ps","F","f","Y","y","Y","y","u","u","O","o","O","o","Ot","ot","Q","q","*1000*","","","","","[?]","*100.000*","*1.000.000*","[?]","[?]",'"','"',"R'","r'","G'","g'","G'","g'","G'","g'","Zh'","zh'","Z'","z'","K'","k'","K'","k'","K'","k'","K'","k'","N'","n'","Ng","ng","P'","p'","Kh","kh","S'","s'","T'","t'","U","u","U'","u'","Kh'","kh'","Tts","tts","Ch'","ch'","Ch'","ch'","H","h","Ch","ch","Ch'","ch'","`","Zh","zh","K'","k'","[?]","[?]","N'","n'","[?]","[?]","Ch","ch","[?]","[?]","[?]","a","a","A","a","Ae","ae","Ie","ie","@","@","@","@","Zh","zh","Z","z","Dz","dz","I","i","I","i","O","o","O","o","O","o","E","e","U","u","U","u","U","u","Ch","ch","[?]","[?]","Y","y","[?]","[?]","[?]","[?]","[?]"]});var V4=y((x7e,Q4)=>{Q4.exports=["[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","A","B","G","D","E","Z","E","E","T`","Zh","I","L","Kh","Ts","K","H","Dz","Gh","Ch","M","Y","N","Sh","O","Ch`","P","J","Rh","S","V","T","R","Ts`","W","P`","K`","O","F","[?]","[?]","<","'","/","!",",","?",".","[?]","a","b","g","d","e","z","e","e","t`","zh","i","l","kh","ts","k","h","dz","gh","ch","m","y","n","sh","o","ch`","p","j","rh","s","v","t","r","ts`","w","p`","k`","o","f","ew","[?]",".","-","[?]","[?]","[?]","[?]","[?]","[?]","","","","","","","","","","","","","","","","","","[?]","","","","","","","","","","","","","","@","e","a","o","i","e","e","a","a","o","[?]","u","'","","","","","","",":","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","b","g","d","h","v","z","kh","t","y","k","k","l","m","m","n","n","s","`","p","p","ts","ts","q","r","sh","t","[?]","[?]","[?]","[?]","[?]","V","oy","i","'",'"',"[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var t6=y((C7e,e6)=>{e6.exports=["[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]",",","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]",";","[?]","[?]","[?]","?","[?]","","a","'","w'","","y'","","b","@","t","th","j","H","kh","d","dh","r","z","s","sh","S","D","T","Z","aa","G","[?]","[?]","[?]","[?]","[?]","","f","q","k","l","m","n","h","w","~","y","an","un","in","a","u","i","W","","","'","'","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","%",".",",","*","[?]","[?]","","'","'","'","","'","'w","'u","'y","tt","tth","b","t","T","p","th","bh","'h","H","ny","dy","H","ch","cch","dd","D","D","Dt","dh","ddh","d","D","D","rr","R","R","R","R","R","R","j","R","S","S","S","S","S","T","GH","F","F","F","v","f","ph","Q","Q","kh","k","K","K","ng","K","g","G","N","G","G","G","L","L","L","L","N","N","N","N","N","h","Ch","hy","h","H","@","W","oe","oe","u","yu","yu","W","v","y","Y","Y","W","","","y","y'",".","ae","","","","","","","","@","#","","","","","","","","","","","^","","","","","[?]","[?]","0","1","2","3","4","5","6","7","8","9","Sh","D","Gh","&","+m"]});var n6=y((S7e,i6)=>{i6.exports=["//","/",",","!","!","-",",",",",";","?","~","{","}","*","[?]","","'","","b","g","g","d","d","h","w","z","H","t","t","y","yh","k","l","m","n","s","s","`","p","p","S","q","r","sh","t","[?]","[?]","[?]","a","a","a","A","A","A","e","e","e","E","i","i","u","u","u","o","","`","'","","","X","Q","@","@","|","+","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","h","sh","n","r","b","L","k","'","v","m","f","dh","th","l","g","ny","s","d","z","t","y","p","j","ch","tt","hh","kh","th","z","sh","s","d","t","z","`","gh","q","w","a","aa","i","ee","u","oo","e","ey","o","oa","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var o6=y((D7e,r6)=>{r6.exports=["[?]","N","N","H","[?]","a","aa","i","ii","u","uu","R","L","eN","e","e","ai","oN","o","o","au","k","kh","g","gh","ng","c","ch","j","jh","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","nnn","p","ph","b","bh","m","y","r","rr","l","l","lll","v","sh","ss","s","h","[?]","[?]","'","'","aa","i","ii","u","uu","R","RR","eN","e","e","ai","oN","o","o","au","","[?]","[?]","AUM","'","'","`","'","[?]","[?]","[?]","q","khh","ghh","z","dddh","rh","f","yy","RR","LL","L","LL"," / "," // ","0","1","2","3","4","5","6","7","8","9",".","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","N","N","H","[?]","a","aa","i","ii","u","uu","R","RR","[?]","[?]","e","ai","[?]","[?]","o","au","k","kh","g","gh","ng","c","ch","j","jh","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","[?]","p","ph","b","bh","m","y","r","[?]","l","[?]","[?]","[?]","sh","ss","s","h","[?]","[?]","'","[?]","aa","i","ii","u","uu","R","RR","[?]","[?]","e","ai","[?]","[?]","o","au","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","+","[?]","[?]","[?]","[?]","rr","rh","[?]","yy","RR","LL","L","LL","[?]","[?]","0","1","2","3","4","5","6","7","8","9","r'","r`","Rs","Rs","1/","2/","3/","4/"," 1 - 1/","/16","","[?]","[?]","[?]","[?]"]});var a6=y((T7e,s6)=>{s6.exports=["[?]","[?]","N","[?]","[?]","a","aa","i","ii","u","uu","[?]","[?]","[?]","[?]","ee","ai","[?]","[?]","oo","au","k","kh","g","gh","ng","c","ch","j","jh","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","[?]","p","ph","b","bb","m","y","r","[?]","l","ll","[?]","v","sh","[?]","s","h","[?]","[?]","'","[?]","aa","i","ii","u","uu","[?]","[?]","[?]","[?]","ee","ai","[?]","[?]","oo","au","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","khh","ghh","z","rr","[?]","f","[?]","[?]","[?]","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","N","H","","","G.E.O.","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","N","N","H","[?]","a","aa","i","ii","u","uu","R","[?]","eN","[?]","e","ai","oN","[?]","o","au","k","kh","g","gh","ng","c","ch","j","jh","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","[?]","p","ph","b","bh","m","ya","r","[?]","l","ll","[?]","v","sh","ss","s","h","[?]","[?]","'","'","aa","i","ii","u","uu","R","RR","eN","[?]","e","ai","oN","[?]","o","au","","[?]","[?]","AUM","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","RR","[?]","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var u6=y((k7e,l6)=>{l6.exports=["[?]","N","N","H","[?]","a","aa","i","ii","u","uu","R","L","[?]","[?]","e","ai","[?]","[?]","o","au","k","kh","g","gh","ng","c","ch","j","jh","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","[?]","p","ph","b","bh","m","y","r","[?]","l","ll","[?]","","sh","ss","s","h","[?]","[?]","'","'","aa","i","ii","u","uu","R","[?]","[?]","[?]","e","ai","[?]","[?]","o","au","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","+","+","[?]","[?]","[?]","[?]","rr","rh","[?]","yy","RR","LL","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","N","H","[?]","a","aa","i","ii","u","uu","[?]","[?]","[?]","e","ee","ai","[?]","o","oo","au","k","[?]","[?]","[?]","ng","c","[?]","j","[?]","ny","tt","[?]","[?]","[?]","nn","t","[?]","[?]","[?]","n","nnn","p","[?]","[?]","[?]","m","y","r","rr","l","ll","lll","v","[?]","ss","s","h","[?]","[?]","[?]","[?]","aa","i","ii","u","uu","[?]","[?]","[?]","e","ee","ai","[?]","o","oo","au","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","+","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","+10+","+100+","+1000+","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var h6=y((P7e,c6)=>{c6.exports=["[?]","N","N","H","[?]","a","aa","i","ii","u","uu","R","L","[?]","e","ee","ai","[?]","o","oo","au","k","kh","g","gh","ng","c","ch","j","jh","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","[?]","p","ph","b","bh","m","y","r","rr","l","ll","[?]","v","sh","ss","s","h","[?]","[?]","[?]","[?]","aa","i","ii","u","uu","R","RR","[?]","e","ee","ai","[?]","o","oo","au","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","+","+","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","RR","LL","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","N","H","[?]","a","aa","i","ii","u","uu","R","L","[?]","e","ee","ai","[?]","o","oo","au","k","kh","g","gh","ng","c","ch","j","jh","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","[?]","p","ph","b","bh","m","y","r","rr","l","ll","[?]","v","sh","ss","s","h","[?]","[?]","[?]","[?]","aa","i","ii","u","uu","R","RR","[?]","e","ee","ai","[?]","o","oo","au","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","+","+","[?]","[?]","[?]","[?]","[?]","[?]","[?]","lll","[?]","RR","LL","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var g6=y((E7e,d6)=>{d6.exports=["[?]","[?]","N","H","[?]","a","aa","i","ii","u","uu","R","L","[?]","e","ee","ai","[?]","o","oo","au","k","kh","g","gh","ng","c","ch","j","jh","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","[?]","p","ph","b","bh","m","y","r","rr","l","ll","lll","v","sh","ss","s","h","[?]","[?]","[?]","[?]","aa","i","ii","u","uu","R","[?]","[?]","e","ee","ai","","o","oo","au","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","+","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","RR","LL","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","N","H","[?]","a","aa","ae","aae","i","ii","u","uu","R","RR","L","LL","e","ee","ai","o","oo","au","[?]","[?]","[?]","k","kh","g","gh","ng","nng","c","ch","j","jh","ny","jny","nyj","tt","tth","dd","ddh","nn","nndd","t","th","d","dh","n","[?]","nd","p","ph","b","bh","m","mb","y","r","[?]","l","[?]","[?]","v","sh","ss","s","h","ll","f","[?]","[?]","[?]","","[?]","[?]","[?]","[?]","aa","ae","aae","i","ii","u","[?]","uu","[?]","R","e","ee","ai","o","oo","au","L","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","RR","LL"," . ","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var f6=y((R7e,p6)=>{p6.exports=["[?]","k","kh","kh","kh","kh","kh","ng","cch","ch","ch","ch","ch","y","d","t","th","th","th","n","d","t","th","th","th","n","b","p","ph","f","ph","f","ph","m","y","r","R","l","L","w","s","s","s","h","l","`","h","~","a","a","aa","am","i","ii","ue","uue","u","uu","'","[?]","[?]","[?]","[?]","Bh.","e","ae","o","ai","ai","ao","+","","","","","","","M",""," * ","0","1","2","3","4","5","6","7","8","9"," // "," /// ","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","k","kh","[?]","kh","[?]","[?]","ng","ch","[?]","s","[?]","[?]","ny","[?]","[?]","[?]","[?]","[?]","[?]","d","h","th","th","[?]","n","b","p","ph","f","ph","f","[?]","m","y","r","[?]","l","[?]","w","[?]","[?]","s","h","[?]","`","","~","a","","aa","am","i","ii","y","yy","u","uu","[?]","o","l","ny","[?]","[?]","e","ei","o","ay","ai","[?]","+","[?]","","","","","","M","[?]","[?]","0","1","2","3","4","5","6","7","8","9","[?]","[?]","hn","hm","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var b6=y((_7e,m6)=>{m6.exports=["AUM","","","","","","",""," // "," * ","","-"," / "," / "," // "," -/ "," +/ "," X/ "," /XX/ "," /X/ ",", ","","","","","","","","","","","","0","1","2","3","4","5","6","7","8","9",".5","1.5","2.5","3.5","4.5","5.5","6.5","7.5","8.5","-.5","+","*","^","_","","~","[?]","]","[[","]]","","","k","kh","g","gh","ng","c","ch","j","[?]","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","p","ph","b","bh","m","ts","tsh","dz","dzh","w","zh","z","'","y","r","l","sh","ssh","s","h","a","kss","r","[?]","[?]","[?]","[?]","[?]","[?]","aa","i","ii","u","uu","R","RR","L","LL","e","ee","o","oo","M","H","i","ii","","","","","","","","","","","[?]","[?]","[?]","[?]","k","kh","g","gh","ng","c","ch","j","[?]","ny","tt","tth","dd","ddh","nn","t","th","d","dh","n","p","ph","b","bh","m","ts","tsh","dz","dzh","w","zh","z","'","y","r","l","sh","ss","s","h","a","kss","w","y","r","[?]","X"," :X: "," /O/ "," /o/ "," \\o\\ "," (O) ","","","","","","","","","","[?]","[?]","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var v6=y((L7e,y6)=>{y6.exports=["k","kh","g","gh","ng","c","ch","j","jh","ny","nny","tt","tth","dd","ddh","nn","tt","th","d","dh","n","p","ph","b","bh","m","y","r","l","w","s","h","ll","a","[?]","i","ii","u","uu","e","[?]","o","au","[?]","aa","i","ii","u","uu","e","ai","[?]","[?]","[?]","N","'",":","","[?]","[?]","[?]","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9"," / "," // ","n*","r*","l*","e*","sh","ss","R","RR","L","LL","R","RR","L","LL","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","A","B","G","D","E","V","Z","T`","I","K","L","M","N","O","P","Zh","R","S","T","U","P`","K`","G'","Q","Sh","Ch`","C`","Z'","C","Ch","X","J","H","E","Y","W","Xh","OE","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","a","b","g","d","e","v","z","t`","i","k","l","m","n","o","p","zh","r","s","t","u","p`","k`","g'","q","sh","ch`","c`","z'","c","ch","x","j","h","e","y","w","xh","oe","f","[?]","[?]","[?]","[?]"," // ","[?]","[?]","[?]"]});var x6=y((I7e,w6)=>{w6.exports=["g","gg","n","d","dd","r","m","b","bb","s","ss","","j","jj","c","k","t","p","h","ng","nn","nd","nb","dg","rn","rr","rh","rN","mb","mN","bg","bn","","bs","bsg","bst","bsb","bss","bsj","bj","bc","bt","bp","bN","bbN","sg","sn","sd","sr","sm","sb","sbg","sss","s","sj","sc","sk","st","sp","sh","","","","","Z","g","d","m","b","s","Z","","j","c","t","p","N","j","","","","","ck","ch","","","pb","pN","hh","Q","[?]","[?]","[?]","[?]","[?]","","","a","ae","ya","yae","eo","e","yeo","ye","o","wa","wae","oe","yo","u","weo","we","wi","yu","eu","yi","i","a-o","a-u","ya-o","ya-yo","eo-o","eo-u","eo-eu","yeo-o","yeo-u","o-eo","o-e","o-ye","o-o","o-u","yo-ya","yo-yae","yo-yeo","yo-o","yo-i","u-a","u-ae","u-eo-eu","u-ye","u-u","yu-a","yu-eo","yu-e","yu-yeo","yu-ye","yu-u","yu-i","eu-u","eu-eu","yi-u","i-a","i-ya","i-o","i-u","i-eu","i-U","U","U-eo","U-u","U-i","UU","[?]","[?]","[?]","[?]","[?]","g","gg","gs","n","nj","nh","d","l","lg","lm","lb","ls","lt","lp","lh","m","b","bs","s","ss","ng","j","c","k","t","p","h","gl","gsg","ng","nd","ns","nZ","nt","dg","tl","lgs","ln","ld","lth","ll","lmg","lms","lbs","lbh","rNp","lss","lZ","lk","lQ","mg","ml","mb","ms","mss","mZ","mc","mh","mN","bl","bp","ph","pN","sg","sd","sl","sb","Z","g","ss","","kh","N","Ns","NZ","pb","pN","hn","hl","hm","hb","Q","[?]","[?]","[?]","[?]","[?]"]});var S6=y((F7e,C6)=>{C6.exports=["ha","hu","hi","haa","hee","he","ho","[?]","la","lu","li","laa","lee","le","lo","lwa","hha","hhu","hhi","hhaa","hhee","hhe","hho","hhwa","ma","mu","mi","maa","mee","me","mo","mwa","sza","szu","szi","szaa","szee","sze","szo","szwa","ra","ru","ri","raa","ree","re","ro","rwa","sa","su","si","saa","see","se","so","swa","sha","shu","shi","shaa","shee","she","sho","shwa","qa","qu","qi","qaa","qee","qe","qo","[?]","qwa","[?]","qwi","qwaa","qwee","qwe","[?]","[?]","qha","qhu","qhi","qhaa","qhee","qhe","qho","[?]","qhwa","[?]","qhwi","qhwaa","qhwee","qhwe","[?]","[?]","ba","bu","bi","baa","bee","be","bo","bwa","va","vu","vi","vaa","vee","ve","vo","vwa","ta","tu","ti","taa","tee","te","to","twa","ca","cu","ci","caa","cee","ce","co","cwa","xa","xu","xi","xaa","xee","xe","xo","[?]","xwa","[?]","xwi","xwaa","xwee","xwe","[?]","[?]","na","nu","ni","naa","nee","ne","no","nwa","nya","nyu","nyi","nyaa","nyee","nye","nyo","nywa","'a","'u","[?]","'aa","'ee","'e","'o","'wa","ka","ku","ki","kaa","kee","ke","ko","[?]","kwa","[?]","kwi","kwaa","kwee","kwe","[?]","[?]","kxa","kxu","kxi","kxaa","kxee","kxe","kxo","[?]","kxwa","[?]","kxwi","kxwaa","kxwee","kxwe","[?]","[?]","wa","wu","wi","waa","wee","we","wo","[?]","`a","`u","`i","`aa","`ee","`e","`o","[?]","za","zu","zi","zaa","zee","ze","zo","zwa","zha","zhu","zhi","zhaa","zhee","zhe","zho","zhwa","ya","yu","yi","yaa","yee","ye","yo","[?]","da","du","di","daa","dee","de","do","dwa","dda","ddu","ddi","ddaa","ddee","dde","ddo","ddwa"]});var T6=y((j7e,D6)=>{D6.exports=["ja","ju","ji","jaa","jee","je","jo","jwa","ga","gu","gi","gaa","gee","ge","go","[?]","gwa","[?]","gwi","gwaa","gwee","gwe","[?]","[?]","gga","ggu","ggi","ggaa","ggee","gge","ggo","[?]","tha","thu","thi","thaa","thee","the","tho","thwa","cha","chu","chi","chaa","chee","che","cho","chwa","pha","phu","phi","phaa","phee","phe","pho","phwa","tsa","tsu","tsi","tsaa","tsee","tse","tso","tswa","tza","tzu","tzi","tzaa","tzee","tze","tzo","[?]","fa","fu","fi","faa","fee","fe","fo","fwa","pa","pu","pi","paa","pee","pe","po","pwa","rya","mya","fya","[?]","[?]","[?]","[?]","[?]","[?]"," ",".",",",";",":",":: ","?","//","1","2","3","4","5","6","7","8","9","10+","20+","30+","40+","50+","60+","70+","80+","90+","100+","10,000+","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","a","e","i","o","u","v","ga","ka","ge","gi","go","gu","gv","ha","he","hi","ho","hu","hv","la","le","li","lo","lu","lv","ma","me","mi","mo","mu","na","hna","nah","ne","ni","no","nu","nv","qua","que","qui","quo","quu","quv","sa","s","se","si","so","su","sv","da","ta","de","te","di","ti","do","du","dv","dla","tla","tle","tli","tlo","tlu","tlv","tsa","tse","tsi","tso","tsu","tsv","wa","we","wi","wo","wu","wv","ya","ye","yi","yo","yu","yv","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var P6=y((M7e,k6)=>{k6.exports=["[?]","e","aai","i","ii","o","oo","oo","ee","i","a","aa","we","we","wi","wi","wii","wii","wo","wo","woo","woo","woo","wa","wa","waa","waa","waa","ai","w","'","t","k","sh","s","n","w","n","[?]","w","c","?","l","en","in","on","an","pe","paai","pi","pii","po","poo","poo","hee","hi","pa","paa","pwe","pwe","pwi","pwi","pwii","pwii","pwo","pwo","pwoo","pwoo","pwa","pwa","pwaa","pwaa","pwaa","p","p","h","te","taai","ti","tii","to","too","too","dee","di","ta","taa","twe","twe","twi","twi","twii","twii","two","two","twoo","twoo","twa","twa","twaa","twaa","twaa","t","tte","tti","tto","tta","ke","kaai","ki","kii","ko","koo","koo","ka","kaa","kwe","kwe","kwi","kwi","kwii","kwii","kwo","kwo","kwoo","kwoo","kwa","kwa","kwaa","kwaa","kwaa","k","kw","keh","kih","koh","kah","ce","caai","ci","cii","co","coo","coo","ca","caa","cwe","cwe","cwi","cwi","cwii","cwii","cwo","cwo","cwoo","cwoo","cwa","cwa","cwaa","cwaa","cwaa","c","th","me","maai","mi","mii","mo","moo","moo","ma","maa","mwe","mwe","mwi","mwi","mwii","mwii","mwo","mwo","mwoo","mwoo","mwa","mwa","mwaa","mwaa","mwaa","m","m","mh","m","m","ne","naai","ni","nii","no","noo","noo","na","naa","nwe","nwe","nwa","nwa","nwaa","nwaa","nwaa","n","ng","nh","le","laai","li","lii","lo","loo","loo","la","laa","lwe","lwe","lwi","lwi","lwii","lwii","lwo","lwo","lwoo","lwoo","lwa","lwa","lwaa","lwaa","l","l","l","se","saai","si","sii","so","soo","soo","sa","saa","swe","swe","swi","swi","swii","swii","swo","swo","swoo","swoo"]});var R6=y((O7e,E6)=>{E6.exports=["swa","swa","swaa","swaa","swaa","s","s","sw","s","sk","skw","sW","spwa","stwa","skwa","scwa","she","shi","shii","sho","shoo","sha","shaa","shwe","shwe","shwi","shwi","shwii","shwii","shwo","shwo","shwoo","shwoo","shwa","shwa","shwaa","shwaa","sh","ye","yaai","yi","yii","yo","yoo","yoo","ya","yaa","ywe","ywe","ywi","ywi","ywii","ywii","ywo","ywo","ywoo","ywoo","ywa","ywa","ywaa","ywaa","ywaa","y","y","y","yi","re","re","le","raai","ri","rii","ro","roo","lo","ra","raa","la","rwaa","rwaa","r","r","r","fe","faai","fi","fii","fo","foo","fa","faa","fwaa","fwaa","f","the","the","thi","thi","thii","thii","tho","thoo","tha","thaa","thwaa","thwaa","th","tthe","tthi","ttho","ttha","tth","tye","tyi","tyo","tya","he","hi","hii","ho","hoo","ha","haa","h","h","hk","qaai","qi","qii","qo","qoo","qa","qaa","q","tlhe","tlhi","tlho","tlha","re","ri","ro","ra","ngaai","ngi","ngii","ngo","ngoo","nga","ngaa","ng","nng","she","shi","sho","sha","the","thi","tho","tha","th","lhi","lhii","lho","lhoo","lha","lhaa","lh","the","thi","thii","tho","thoo","tha","thaa","th","b","e","i","o","a","we","wi","wo","wa","ne","ni","no","na","ke","ki","ko","ka","he","hi","ho","ha","ghu","gho","ghe","ghee","ghi","gha","ru","ro","re","ree","ri","ra","wu","wo","we","wee","wi","wa","hwu","hwo","hwe","hwee","hwi","hwa","thu","tho","the","thee","thi","tha","ttu","tto","tte","ttee","tti","tta","pu","po","pe","pee","pi","pa","p","gu","go","ge","gee","gi","ga","khu","kho","khe","khee","khi","kha","kku","kko","kke","kkee","kki"]});var L6=y((A7e,_6)=>{_6.exports=["kka","kk","nu","no","ne","nee","ni","na","mu","mo","me","mee","mi","ma","yu","yo","ye","yee","yi","ya","ju","ju","jo","je","jee","ji","ji","ja","jju","jjo","jje","jjee","jji","jja","lu","lo","le","lee","li","la","dlu","dlo","dle","dlee","dli","dla","lhu","lho","lhe","lhee","lhi","lha","tlhu","tlho","tlhe","tlhee","tlhi","tlha","tlu","tlo","tle","tlee","tli","tla","zu","zo","ze","zee","zi","za","z","z","dzu","dzo","dze","dzee","dzi","dza","su","so","se","see","si","sa","shu","sho","she","shee","shi","sha","sh","tsu","tso","tse","tsee","tsi","tsa","chu","cho","che","chee","chi","cha","ttsu","ttso","ttse","ttsee","ttsi","ttsa","X",".","qai","ngai","nngi","nngii","nngo","nngoo","nnga","nngaa","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"," ","b","l","f","s","n","h","d","t","c","q","m","g","ng","z","r","a","o","u","e","i","ch","th","ph","p","x","p","<",">","[?]","[?]","[?]","f","v","u","yr","y","w","th","th","a","o","ac","ae","o","o","o","oe","on","r","k","c","k","g","ng","g","g","w","h","h","h","h","n","n","n","i","e","j","g","ae","a","eo","p","z","s","s","s","c","z","t","t","d","b","b","p","p","e","m","m","m","l","l","ng","ng","d","o","ear","ior","qu","qu","qu","s","yr","yr","yr","q","x",".",":","+","17","18","19","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var F6=y((N7e,I6)=>{I6.exports=["[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","k","kh","g","gh","ng","c","ch","j","jh","ny","t","tth","d","ddh","nn","t","th","d","dh","n","p","ph","b","bh","m","y","r","l","v","sh","ss","s","h","l","q","a","aa","i","ii","u","uk","uu","uuv","ry","ryy","ly","lyy","e","ai","oo","oo","au","a","aa","aa","i","ii","y","yy","u","uu","ua","oe","ya","ie","e","ae","ai","oo","au","M","H","a`","","","","r","","!","","","","","","."," // ",":","+","++"," * "," /// ","KR","'","[?]","[?]","[?]","0","1","2","3","4","5","6","7","8","9","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var M6=y((H7e,j6)=>{j6.exports=[" @ "," ... ",", ",". ",": "," // ","","-",", ",". ","","","","","","[?]","0","1","2","3","4","5","6","7","8","9","[?]","[?]","[?]","[?]","[?]","[?]","a","e","i","o","u","O","U","ee","n","ng","b","p","q","g","m","l","s","sh","t","d","ch","j","y","r","w","f","k","kha","ts","z","h","zr","lh","zh","ch","-","e","i","o","u","O","U","ng","b","p","q","g","m","t","d","ch","j","ts","y","w","k","g","h","jy","ny","dz","e","i","iy","U","u","ng","k","g","h","p","sh","t","d","j","f","g","h","ts","z","r","ch","zh","i","k","r","f","zh","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","H","X","W","M"," 3 "," 333 ","a","i","k","ng","c","tt","tth","dd","nn","t","d","p","ph","ss","zh","z","a","t","zh","gh","ng","c","jh","tta","ddh","t","dh","ss","cy","zh","z","u","y","bh","'","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var A6=y((q7e,O6)=>{O6.exports=["A","a","B","b","B","b","B","b","C","c","D","d","D","d","D","d","D","d","D","d","E","e","E","e","E","e","E","e","E","e","F","f","G","g","H","h","H","h","H","h","H","h","H","h","I","i","I","i","K","k","K","k","K","k","L","l","L","l","L","l","L","l","M","m","M","m","M","m","N","n","N","n","N","n","N","n","O","o","O","o","O","o","O","o","P","p","P","p","R","r","R","r","R","r","R","r","S","s","S","s","S","s","S","s","S","s","T","t","T","t","T","t","T","t","U","u","U","u","U","u","U","u","U","u","V","v","V","v","W","w","W","w","W","w","W","w","W","w","X","x","X","x","Y","y","Z","z","Z","z","Z","z","h","t","w","y","a","S","[?]","[?]","[?]","[?]","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","A","a","E","e","E","e","E","e","E","e","E","e","E","e","E","e","E","e","I","i","I","i","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","O","o","U","u","U","u","U","u","U","u","U","u","U","u","U","u","Y","y","Y","y","Y","y","Y","y","[?]","[?]","[?]","[?]","[?]"]});var H6=y((B7e,N6)=>{N6.exports=["a","a","a","a","a","a","a","a","A","A","A","A","A","A","A","A","e","e","e","e","e","e","[?]","[?]","E","E","E","E","E","E","[?]","[?]","e","e","e","e","e","e","e","e","E","E","E","E","E","E","E","E","i","i","i","i","i","i","i","i","I","I","I","I","I","I","I","I","o","o","o","o","o","o","[?]","[?]","O","O","O","O","O","O","[?]","[?]","u","u","u","u","u","u","u","u","[?]","U","[?]","U","[?]","U","[?]","U","o","o","o","o","o","o","o","o","O","O","O","O","O","O","O","O","a","a","e","e","e","e","i","i","o","o","u","u","o","o","[?]","[?]","a","a","a","a","a","a","a","a","A","A","A","A","A","A","A","A","e","e","e","e","e","e","e","e","E","E","E","E","E","E","E","E","o","o","o","o","o","o","o","o","O","O","O","O","O","O","O","O","a","a","a","a","a","[?]","a","a","A","A","A","A","A","'","i","'","~",'"~',"e","e","e","[?]","e","e","E","E","E","E","E","'`","''","'~","i","i","i","i","[?]","[?]","i","i","I","I","I","I","[?]","`'","`'","`~","u","u","u","u","R","R","u","u","U","U","U","U","R",'"`',`"'`,"`","[?]","[?]","o","o","o","[?]","o","o","O","O","O","O","O","'","`"]});var B6=y((W7e,q6)=>{q6.exports=[" "," "," "," "," "," "," "," "," "," "," "," ","","","","","-","-","-","-","--","--","||","_","'","'",",","'",'"','"',",,",'"',"+","++","*","*>",".","..","...",".",` -`,` - -`,"","","","",""," ","%0","%00","'","''","'''","`","``","```","^","<",">","*","!!","!?","-","_","-","^","***","--","/","-[","]-","[?]","?!","!?","7","PP","(]","[)","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","","","","0","","","","4","5","6","7","8","9","+","-","=","(",")","n","0","1","2","3","4","5","6","7","8","9","+","-","=","(",")","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","ECU","CL","Cr","FF","L","mil","N","Pts","Rs","W","NS","D","EU","K","T","Dr","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var Y6=y((Y7e,W6)=>{W6.exports=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"," 1/3 "," 2/3 "," 1/5 "," 2/5 "," 3/5 "," 4/5 "," 1/6 "," 5/6 "," 1/8 "," 3/8 "," 5/8 "," 7/8 "," 1/","I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII","L","C","D","M","i","ii","iii","iv","v","vi","vii","viii","ix","x","xi","xii","l","c","d","m","(D","D)","((|))",")","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","-","|","-","|","-","|","\\","/","\\","/","-","-","~","~","-","|","-","|","-","-","-","|","-","|","|","-","-","-","-","-","-","|","|","|","|","|","|","|","^","V","\\","=","V","^","-","-","|","|","-","-","|","|","=","|","=","=","|","=","|","=","=","=","=","=","=","|","=","|","=","|","\\","/","\\","/","=","=","~","~","|","|","-","|","-","|","-","-","-","|","-","|","|","|","|","|","|","|","-","\\","\\","|","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var J6=y((Z7e,Z6)=>{Z6.exports=["[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var U6=y((J7e,$6)=>{$6.exports=["[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var G6=y(($7e,X6)=>{X6.exports=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var K6=y((U7e,z6)=>{z6.exports=["-","-","|","|","-","-","|","|","-","-","|","|","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","-","-","|","|","-","|","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","+","/","\\","X","-","|","-","|","-","|","-","|","-","|","-","|","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","-","|","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","#","^","^","^","^",">",">",">",">",">",">","V","V","V","V","<","<","<","<","<","<","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","*","#","#","#","#","#","^","^","^","O","#","#","#","#","#","#","#","#","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var V6=y((X7e,Q6)=>{Q6.exports=["","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var tV=y((G7e,eV)=>{eV.exports=["[?]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var nV=y((z7e,iV)=>{iV.exports=[" ","a","1","b","'","k","2","l","@","c","i","f","/","m","s","p",'"',"e","3","h","9","o","6","r","^","d","j","g",">","n","t","q",",","*","5","<","-","u","8","v",".","%","[","$","+","x","!","&",";",":","4","\\","0","z","7","(","_","?","w","]","#","y",")","=","[d7]","[d17]","[d27]","[d127]","[d37]","[d137]","[d237]","[d1237]","[d47]","[d147]","[d247]","[d1247]","[d347]","[d1347]","[d2347]","[d12347]","[d57]","[d157]","[d257]","[d1257]","[d357]","[d1357]","[d2357]","[d12357]","[d457]","[d1457]","[d2457]","[d12457]","[d3457]","[d13457]","[d23457]","[d123457]","[d67]","[d167]","[d267]","[d1267]","[d367]","[d1367]","[d2367]","[d12367]","[d467]","[d1467]","[d2467]","[d12467]","[d3467]","[d13467]","[d23467]","[d123467]","[d567]","[d1567]","[d2567]","[d12567]","[d3567]","[d13567]","[d23567]","[d123567]","[d4567]","[d14567]","[d24567]","[d124567]","[d34567]","[d134567]","[d234567]","[d1234567]","[d8]","[d18]","[d28]","[d128]","[d38]","[d138]","[d238]","[d1238]","[d48]","[d148]","[d248]","[d1248]","[d348]","[d1348]","[d2348]","[d12348]","[d58]","[d158]","[d258]","[d1258]","[d358]","[d1358]","[d2358]","[d12358]","[d458]","[d1458]","[d2458]","[d12458]","[d3458]","[d13458]","[d23458]","[d123458]","[d68]","[d168]","[d268]","[d1268]","[d368]","[d1368]","[d2368]","[d12368]","[d468]","[d1468]","[d2468]","[d12468]","[d3468]","[d13468]","[d23468]","[d123468]","[d568]","[d1568]","[d2568]","[d12568]","[d3568]","[d13568]","[d23568]","[d123568]","[d4568]","[d14568]","[d24568]","[d124568]","[d34568]","[d134568]","[d234568]","[d1234568]","[d78]","[d178]","[d278]","[d1278]","[d378]","[d1378]","[d2378]","[d12378]","[d478]","[d1478]","[d2478]","[d12478]","[d3478]","[d13478]","[d23478]","[d123478]","[d578]","[d1578]","[d2578]","[d12578]","[d3578]","[d13578]","[d23578]","[d123578]","[d4578]","[d14578]","[d24578]","[d124578]","[d34578]","[d134578]","[d234578]","[d1234578]","[d678]","[d1678]","[d2678]","[d12678]","[d3678]","[d13678]","[d23678]","[d123678]","[d4678]","[d14678]","[d24678]","[d124678]","[d34678]","[d134678]","[d234678]","[d1234678]","[d5678]","[d15678]","[d25678]","[d125678]","[d35678]","[d135678]","[d235678]","[d1235678]","[d45678]","[d145678]","[d245678]","[d1245678]","[d345678]","[d1345678]","[d2345678]","[d12345678]"]});var oV=y((K7e,rV)=>{rV.exports=["[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?]","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var aV=y((Q7e,sV)=>{sV.exports=["[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?]","[?]","[?]"]});var uV=y((V7e,lV)=>{lV.exports=[" ",", ",". ",'"',"[JIS]",'"',"/","0","<","> ","<<",">> ","[","] ","{","} ","[(",")] ","@","X ","[","] ","[[","]] ","((",")) ","[[","]] ","~ ","``","''",",,","@","1","2","3","4","5","6","7","8","9","","","","","","","~","+","+","+","+","","@"," // ","+10+","+20+","+30+","[?]","[?]","[?]","","","[?]","a","a","i","i","u","u","e","e","o","o","ka","ga","ki","gi","ku","gu","ke","ge","ko","go","sa","za","si","zi","su","zu","se","ze","so","zo","ta","da","ti","di","tu","tu","du","te","de","to","do","na","ni","nu","ne","no","ha","ba","pa","hi","bi","pi","hu","bu","pu","he","be","pe","ho","bo","po","ma","mi","mu","me","mo","ya","ya","yu","yu","yo","yo","ra","ri","ru","re","ro","wa","wa","wi","we","wo","n","vu","[?]","[?]","[?]","[?]","","","","",'"','"',"[?]","[?]","a","a","i","i","u","u","e","e","o","o","ka","ga","ki","gi","ku","gu","ke","ge","ko","go","sa","za","si","zi","su","zu","se","ze","so","zo","ta","da","ti","di","tu","tu","du","te","de","to","do","na","ni","nu","ne","no","ha","ba","pa","hi","bi","pi","hu","bu","pu","he","be","pe","ho","bo","po","ma","mi","mu","me","mo","ya","ya","yu","yu","yo","yo","ra","ri","ru","re","ro","wa","wa","wi","we","wo","n","vu","ka","ke","va","vi","ve","vo","","",'"','"']});var hV=y((e9e,cV)=>{cV.exports=["[?]","[?]","[?]","[?]","[?]","B","P","M","F","D","T","N","L","G","K","H","J","Q","X","ZH","CH","SH","R","Z","C","S","A","O","E","EH","AI","EI","AU","OU","AN","EN","ANG","ENG","ER","I","U","IU","V","NG","GN","[?]","[?]","[?]","[?]","g","gg","gs","n","nj","nh","d","dd","r","lg","lm","lb","ls","lt","lp","rh","m","b","bb","bs","s","ss","","j","jj","c","k","t","p","h","a","ae","ya","yae","eo","e","yeo","ye","o","wa","wae","oe","yo","u","weo","we","wi","yu","eu","yi","i","","nn","nd","ns","nZ","lgs","ld","lbs","lZ","lQ","mb","ms","mZ","mN","bg","","bsg","bst","bj","bt","bN","bbN","sg","sn","sd","sb","sj","Z","","N","Ns","NZ","pN","hh","Q","yo-ya","yo-yae","yo-i","yu-yeo","yu-ye","yu-i","U","U-i","[?]","","","","","","","","","","","","","","","","","BU","ZI","JI","GU","EE","ENN","OO","ONN","IR","ANN","INN","UNN","IM","NGG","AINN","AUNN","AM","OM","ONG","INNN","P","T","K","H","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var gV=y((t9e,dV)=>{dV.exports=["(g)","(n)","(d)","(r)","(m)","(b)","(s)","()","(j)","(c)","(k)","(t)","(p)","(h)","(ga)","(na)","(da)","(ra)","(ma)","(ba)","(sa)","(a)","(ja)","(ca)","(ka)","(ta)","(pa)","(ha)","(ju)","[?]","[?]","[?]","(1) ","(2) ","(3) ","(4) ","(5) ","(6) ","(7) ","(8) ","(9) ","(10) ","(Yue) ","(Huo) ","(Shui) ","(Mu) ","(Jin) ","(Tu) ","(Ri) ","(Zhu) ","(You) ","(She) ","(Ming) ","(Te) ","(Cai) ","(Zhu) ","(Lao) ","(Dai) ","(Hu) ","(Xue) ","(Jian) ","(Qi) ","(Zi) ","(Xie) ","(Ji) ","(Xiu) ","<<",">>","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","(g)","(n)","(d)","(r)","(m)","(b)","(s)","()","(j)","(c)","(k)","(t)","(p)","(h)","(ga)","(na)","(da)","(ra)","(ma)","(ba)","(sa)","(a)","(ja)","(ca)","(ka)","(ta)","(pa)","(ha)","[?]","[?]","[?]","KIS ","(1) ","(2) ","(3) ","(4) ","(5) ","(6) ","(7) ","(8) ","(9) ","(10) ","(Yue) ","(Huo) ","(Shui) ","(Mu) ","(Jin) ","(Tu) ","(Ri) ","(Zhu) ","(You) ","(She) ","(Ming) ","(Te) ","(Cai) ","(Zhu) ","(Lao) ","(Mi) ","(Nan) ","(Nu) ","(Shi) ","(You) ","(Yin) ","(Zhu) ","(Xiang) ","(Xiu) ","(Xie) ","(Zheng) ","(Shang) ","(Zhong) ","(Xia) ","(Zuo) ","(You) ","(Yi) ","(Zong) ","(Xue) ","(Jian) ","(Qi) ","(Zi) ","(Xie) ","(Ye) ","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","1M","2M","3M","4M","5M","6M","7M","8M","9M","10M","11M","12M","[?]","[?]","[?]","[?]","a","i","u","u","o","ka","ki","ku","ke","ko","sa","si","su","se","so","ta","ti","tu","te","to","na","ni","nu","ne","no","ha","hi","hu","he","ho","ma","mi","mu","me","mo","ya","yu","yo","ra","ri","ru","re","ro","wa","wi","we","wo"]});var fV=y((i9e,pV)=>{pV.exports=["apartment","alpha","ampere","are","inning","inch","won","escudo","acre","ounce","ohm","kai-ri","carat","calorie","gallon","gamma","giga","guinea","curie","guilder","kilo","kilogram","kilometer","kilowatt","gram","gram ton","cruzeiro","krone","case","koruna","co-op","cycle","centime","shilling","centi","cent","dozen","desi","dollar","ton","nano","knot","heights","percent","parts","barrel","piaster","picul","pico","building","farad","feet","bushel","franc","hectare","peso","pfennig","hertz","pence","page","beta","point","volt","hon","pound","hall","horn","micro","mile","mach","mark","mansion","micron","milli","millibar","mega","megaton","meter","yard","yard","yuan","liter","lira","rupee","ruble","rem","roentgen","watt","0h","1h","2h","3h","4h","5h","6h","7h","8h","9h","10h","11h","12h","13h","14h","15h","16h","17h","18h","19h","20h","21h","22h","23h","24h","HPA","da","AU","bar","oV","pc","[?]","[?]","[?]","[?]","Heisei","Syouwa","Taisyou","Meiji","Inc.","pA","nA","microamp","mA","kA","kB","MB","GB","cal","kcal","pF","nF","microFarad","microgram","mg","kg","Hz","kHz","MHz","GHz","THz","microliter","ml","dl","kl","fm","nm","micrometer","mm","cm","km","mm^2","cm^2","m^2","km^2","mm^4","cm^3","m^3","km^3","m/s","m/s^2","Pa","kPa","MPa","GPa","rad","rad/s","rad/s^2","ps","ns","microsecond","ms","pV","nV","microvolt","mV","kV","MV","pW","nW","microwatt","mW","kW","MW","kOhm","MOhm","a.m.","Bq","cc","cd","C/kg","Co.","dB","Gy","ha","HP","in","K.K.","KM","kt","lm","ln","log","lx","mb","mil","mol","pH","p.m.","PPM","PR","sr","Sv","Wb","[?]","[?]","1d","2d","3d","4d","5d","6d","7d","8d","9d","10d","11d","12d","13d","14d","15d","16d","17d","18d","19d","20d","21d","22d","23d","24d","25d","26d","27d","28d","29d","30d","31d"]});var bV=y((n9e,mV)=>{mV.exports=["[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?] ","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var vV=y((r9e,yV)=>{yV.exports=["Yi ","Ding ","Kao ","Qi ","Shang ","Xia ","[?] ","Mo ","Zhang ","San ","Shang ","Xia ","Ji ","Bu ","Yu ","Mian ","Gai ","Chou ","Chou ","Zhuan ","Qie ","Pi ","Shi ","Shi ","Qiu ","Bing ","Ye ","Cong ","Dong ","Si ","Cheng ","Diu ","Qiu ","Liang ","Diu ","You ","Liang ","Yan ","Bing ","Sang ","Gun ","Jiu ","Ge ","Ya ","Qiang ","Zhong ","Ji ","Jie ","Feng ","Guan ","Chuan ","Chan ","Lin ","Zhuo ","Zhu ","Ha ","Wan ","Dan ","Wei ","Zhu ","Jing ","Li ","Ju ","Pie ","Fu ","Yi ","Yi ","Nai ","Shime ","Jiu ","Jiu ","Zhe ","Yao ","Yi ","[?] ","Zhi ","Wu ","Zha ","Hu ","Fa ","Le ","Zhong ","Ping ","Pang ","Qiao ","Hu ","Guai ","Cheng ","Cheng ","Yi ","Yin ","[?] ","Mie ","Jiu ","Qi ","Ye ","Xi ","Xiang ","Gai ","Diu ","Hal ","[?] ","Shu ","Twul ","Shi ","Ji ","Nang ","Jia ","Kel ","Shi ","[?] ","Ol ","Mai ","Luan ","Cal ","Ru ","Xue ","Yan ","Fu ","Sha ","Na ","Gan ","Sol ","El ","Cwul ","[?] ","Gan ","Chi ","Gui ","Gan ","Luan ","Lin ","Yi ","Jue ","Liao ","Ma ","Yu ","Zheng ","Shi ","Shi ","Er ","Chu ","Yu ","Yu ","Yu ","Yun ","Hu ","Qi ","Wu ","Jing ","Si ","Sui ","Gen ","Gen ","Ya ","Xie ","Ya ","Qi ","Ya ","Ji ","Tou ","Wang ","Kang ","Ta ","Jiao ","Hai ","Yi ","Chan ","Heng ","Mu ","[?] ","Xiang ","Jing ","Ting ","Liang ","Xiang ","Jing ","Ye ","Qin ","Bo ","You ","Xie ","Dan ","Lian ","Duo ","Wei ","Ren ","Ren ","Ji ","La ","Wang ","Yi ","Shi ","Ren ","Le ","Ding ","Ze ","Jin ","Pu ","Chou ","Ba ","Zhang ","Jin ","Jie ","Bing ","Reng ","Cong ","Fo ","San ","Lun ","Sya ","Cang ","Zi ","Shi ","Ta ","Zhang ","Fu ","Xian ","Xian ","Tuo ","Hong ","Tong ","Ren ","Qian ","Gan ","Yi ","Di ","Dai ","Ling ","Yi ","Chao ","Chang ","Sa ","[?] ","Yi ","Mu ","Men ","Ren ","Jia ","Chao ","Yang ","Qian ","Zhong ","Pi ","Wan ","Wu ","Jian ","Jie ","Yao ","Feng ","Cang ","Ren ","Wang ","Fen ","Di ","Fang "]});var xV=y((o9e,wV)=>{wV.exports=["Zhong ","Qi ","Pei ","Yu ","Diao ","Dun ","Wen ","Yi ","Xin ","Kang ","Yi ","Ji ","Ai ","Wu ","Ji ","Fu ","Fa ","Xiu ","Jin ","Bei ","Dan ","Fu ","Tang ","Zhong ","You ","Huo ","Hui ","Yu ","Cui ","Chuan ","San ","Wei ","Chuan ","Che ","Ya ","Xian ","Shang ","Chang ","Lun ","Cang ","Xun ","Xin ","Wei ","Zhu ","[?] ","Xuan ","Nu ","Bo ","Gu ","Ni ","Ni ","Xie ","Ban ","Xu ","Ling ","Zhou ","Shen ","Qu ","Si ","Beng ","Si ","Jia ","Pi ","Yi ","Si ","Ai ","Zheng ","Dian ","Han ","Mai ","Dan ","Zhu ","Bu ","Qu ","Bi ","Shao ","Ci ","Wei ","Di ","Zhu ","Zuo ","You ","Yang ","Ti ","Zhan ","He ","Bi ","Tuo ","She ","Yu ","Yi ","Fo ","Zuo ","Kou ","Ning ","Tong ","Ni ","Xuan ","Qu ","Yong ","Wa ","Qian ","[?] ","Ka ","[?] ","Pei ","Huai ","He ","Lao ","Xiang ","Ge ","Yang ","Bai ","Fa ","Ming ","Jia ","Er ","Bing ","Ji ","Hen ","Huo ","Gui ","Quan ","Tiao ","Jiao ","Ci ","Yi ","Shi ","Xing ","Shen ","Tuo ","Kan ","Zhi ","Gai ","Lai ","Yi ","Chi ","Kua ","Guang ","Li ","Yin ","Shi ","Mi ","Zhu ","Xu ","You ","An ","Lu ","Mou ","Er ","Lun ","Tong ","Cha ","Chi ","Xun ","Gong ","Zhou ","Yi ","Ru ","Jian ","Xia ","Jia ","Zai ","Lu ","Ko ","Jiao ","Zhen ","Ce ","Qiao ","Kuai ","Chai ","Ning ","Nong ","Jin ","Wu ","Hou ","Jiong ","Cheng ","Zhen ","Zuo ","Chou ","Qin ","Lu ","Ju ","Shu ","Ting ","Shen ","Tuo ","Bo ","Nan ","Hao ","Bian ","Tui ","Yu ","Xi ","Cu ","E ","Qiu ","Xu ","Kuang ","Ku ","Wu ","Jun ","Yi ","Fu ","Lang ","Zu ","Qiao ","Li ","Yong ","Hun ","Jing ","Xian ","San ","Pai ","Su ","Fu ","Xi ","Li ","Fu ","Ping ","Bao ","Yu ","Si ","Xia ","Xin ","Xiu ","Yu ","Ti ","Che ","Chou ","[?] ","Yan ","Lia ","Li ","Lai ","[?] ","Jian ","Xiu ","Fu ","He ","Ju ","Xiao ","Pai ","Jian ","Biao ","Chu ","Fei ","Feng ","Ya ","An ","Bei ","Yu ","Xin ","Bi ","Jian "]});var SV=y((s9e,CV)=>{CV.exports=["Chang ","Chi ","Bing ","Zan ","Yao ","Cui ","Lia ","Wan ","Lai ","Cang ","Zong ","Ge ","Guan ","Bei ","Tian ","Shu ","Shu ","Men ","Dao ","Tan ","Jue ","Chui ","Xing ","Peng ","Tang ","Hou ","Yi ","Qi ","Ti ","Gan ","Jing ","Jie ","Sui ","Chang ","Jie ","Fang ","Zhi ","Kong ","Juan ","Zong ","Ju ","Qian ","Ni ","Lun ","Zhuo ","Wei ","Luo ","Song ","Leng ","Hun ","Dong ","Zi ","Ben ","Wu ","Ju ","Nai ","Cai ","Jian ","Zhai ","Ye ","Zhi ","Sha ","Qing ","[?] ","Ying ","Cheng ","Jian ","Yan ","Nuan ","Zhong ","Chun ","Jia ","Jie ","Wei ","Yu ","Bing ","Ruo ","Ti ","Wei ","Pian ","Yan ","Feng ","Tang ","Wo ","E ","Xie ","Che ","Sheng ","Kan ","Di ","Zuo ","Cha ","Ting ","Bei ","Ye ","Huang ","Yao ","Zhan ","Chou ","Yan ","You ","Jian ","Xu ","Zha ","Ci ","Fu ","Bi ","Zhi ","Zong ","Mian ","Ji ","Yi ","Xie ","Xun ","Si ","Duan ","Ce ","Zhen ","Ou ","Tou ","Tou ","Bei ","Za ","Lu ","Jie ","Wei ","Fen ","Chang ","Gui ","Sou ","Zhi ","Su ","Xia ","Fu ","Yuan ","Rong ","Li ","Ru ","Yun ","Gou ","Ma ","Bang ","Dian ","Tang ","Hao ","Jie ","Xi ","Shan ","Qian ","Jue ","Cang ","Chu ","San ","Bei ","Xiao ","Yong ","Yao ","Tan ","Suo ","Yang ","Fa ","Bing ","Jia ","Dai ","Zai ","Tang ","[?] ","Bin ","Chu ","Nuo ","Can ","Lei ","Cui ","Yong ","Zao ","Zong ","Peng ","Song ","Ao ","Chuan ","Yu ","Zhai ","Cou ","Shang ","Qiang ","Jing ","Chi ","Sha ","Han ","Zhang ","Qing ","Yan ","Di ","Xi ","Lu ","Bei ","Piao ","Jin ","Lian ","Lu ","Man ","Qian ","Xian ","Tan ","Ying ","Dong ","Zhuan ","Xiang ","Shan ","Qiao ","Jiong ","Tui ","Zun ","Pu ","Xi ","Lao ","Chang ","Guang ","Liao ","Qi ","Deng ","Chan ","Wei ","Ji ","Fan ","Hui ","Chuan ","Jian ","Dan ","Jiao ","Jiu ","Seng ","Fen ","Xian ","Jue ","E ","Jiao ","Jian ","Tong ","Lin ","Bo ","Gu ","[?] ","Su ","Xian ","Jiang ","Min ","Ye ","Jin ","Jia ","Qiao ","Pi ","Feng ","Zhou ","Ai ","Sai "]});var TV=y((a9e,DV)=>{DV.exports=["Yi ","Jun ","Nong ","Chan ","Yi ","Dang ","Jing ","Xuan ","Kuai ","Jian ","Chu ","Dan ","Jiao ","Sha ","Zai ","[?] ","Bin ","An ","Ru ","Tai ","Chou ","Chai ","Lan ","Ni ","Jin ","Qian ","Meng ","Wu ","Ning ","Qiong ","Ni ","Chang ","Lie ","Lei ","Lu ","Kuang ","Bao ","Du ","Biao ","Zan ","Zhi ","Si ","You ","Hao ","Chen ","Chen ","Li ","Teng ","Wei ","Long ","Chu ","Chan ","Rang ","Shu ","Hui ","Li ","Luo ","Zan ","Nuo ","Tang ","Yan ","Lei ","Nang ","Er ","Wu ","Yun ","Zan ","Yuan ","Xiong ","Chong ","Zhao ","Xiong ","Xian ","Guang ","Dui ","Ke ","Dui ","Mian ","Tu ","Chang ","Er ","Dui ","Er ","Xin ","Tu ","Si ","Yan ","Yan ","Shi ","Shi ","Dang ","Qian ","Dou ","Fen ","Mao ","Shen ","Dou ","Bai ","Jing ","Li ","Huang ","Ru ","Wang ","Nei ","Quan ","Liang ","Yu ","Ba ","Gong ","Liu ","Xi ","[?] ","Lan ","Gong ","Tian ","Guan ","Xing ","Bing ","Qi ","Ju ","Dian ","Zi ","Ppwun ","Yang ","Jian ","Shou ","Ji ","Yi ","Ji ","Chan ","Jiong ","Mao ","Ran ","Nei ","Yuan ","Mao ","Gang ","Ran ","Ce ","Jiong ","Ce ","Zai ","Gua ","Jiong ","Mao ","Zhou ","Mou ","Gou ","Xu ","Mian ","Mi ","Rong ","Yin ","Xie ","Kan ","Jun ","Nong ","Yi ","Mi ","Shi ","Guan ","Meng ","Zhong ","Ju ","Yuan ","Ming ","Kou ","Lam ","Fu ","Xie ","Mi ","Bing ","Dong ","Tai ","Gang ","Feng ","Bing ","Hu ","Chong ","Jue ","Hu ","Kuang ","Ye ","Leng ","Pan ","Fu ","Min ","Dong ","Xian ","Lie ","Xia ","Jian ","Jing ","Shu ","Mei ","Tu ","Qi ","Gu ","Zhun ","Song ","Jing ","Liang ","Qing ","Diao ","Ling ","Dong ","Gan ","Jian ","Yin ","Cou ","Yi ","Li ","Cang ","Ming ","Zhuen ","Cui ","Si ","Duo ","Jin ","Lin ","Lin ","Ning ","Xi ","Du ","Ji ","Fan ","Fan ","Fan ","Feng ","Ju ","Chu ","Tako ","Feng ","Mok ","Ci ","Fu ","Feng ","Ping ","Feng ","Kai ","Huang ","Kai ","Gan ","Deng ","Ping ","Qu ","Xiong ","Kuai ","Tu ","Ao ","Chu ","Ji ","Dang ","Han ","Han ","Zao "]});var PV=y((l9e,kV)=>{kV.exports=["Dao ","Diao ","Dao ","Ren ","Ren ","Chuang ","Fen ","Qie ","Yi ","Ji ","Kan ","Qian ","Cun ","Chu ","Wen ","Ji ","Dan ","Xing ","Hua ","Wan ","Jue ","Li ","Yue ","Lie ","Liu ","Ze ","Gang ","Chuang ","Fu ","Chu ","Qu ","Ju ","Shan ","Min ","Ling ","Zhong ","Pan ","Bie ","Jie ","Jie ","Bao ","Li ","Shan ","Bie ","Chan ","Jing ","Gua ","Gen ","Dao ","Chuang ","Kui ","Ku ","Duo ","Er ","Zhi ","Shua ","Quan ","Cha ","Ci ","Ke ","Jie ","Gui ","Ci ","Gui ","Kai ","Duo ","Ji ","Ti ","Jing ","Lou ","Gen ","Ze ","Yuan ","Cuo ","Xue ","Ke ","La ","Qian ","Cha ","Chuang ","Gua ","Jian ","Cuo ","Li ","Ti ","Fei ","Pou ","Chan ","Qi ","Chuang ","Zi ","Gang ","Wan ","Bo ","Ji ","Duo ","Qing ","Yan ","Zhuo ","Jian ","Ji ","Bo ","Yan ","Ju ","Huo ","Sheng ","Jian ","Duo ","Duan ","Wu ","Gua ","Fu ","Sheng ","Jian ","Ge ","Zha ","Kai ","Chuang ","Juan ","Chan ","Tuan ","Lu ","Li ","Fou ","Shan ","Piao ","Kou ","Jiao ","Gua ","Qiao ","Jue ","Hua ","Zha ","Zhuo ","Lian ","Ju ","Pi ","Liu ","Gui ","Jiao ","Gui ","Jian ","Jian ","Tang ","Huo ","Ji ","Jian ","Yi ","Jian ","Zhi ","Chan ","Cuan ","Mo ","Li ","Zhu ","Li ","Ya ","Quan ","Ban ","Gong ","Jia ","Wu ","Mai ","Lie ","Jin ","Keng ","Xie ","Zhi ","Dong ","Zhu ","Nu ","Jie ","Qu ","Shao ","Yi ","Zhu ","Miao ","Li ","Jing ","Lao ","Lao ","Juan ","Kou ","Yang ","Wa ","Xiao ","Mou ","Kuang ","Jie ","Lie ","He ","Shi ","Ke ","Jing ","Hao ","Bo ","Min ","Chi ","Lang ","Yong ","Yong ","Mian ","Ke ","Xun ","Juan ","Qing ","Lu ","Pou ","Meng ","Lai ","Le ","Kai ","Mian ","Dong ","Xu ","Xu ","Kan ","Wu ","Yi ","Xun ","Weng ","Sheng ","Lao ","Mu ","Lu ","Piao ","Shi ","Ji ","Qin ","Qiang ","Jiao ","Quan ","Yang ","Yi ","Jue ","Fan ","Juan ","Tong ","Ju ","Dan ","Xie ","Mai ","Xun ","Xun ","Lu ","Li ","Che ","Rang ","Quan ","Bao ","Shao ","Yun ","Jiu ","Bao ","Gou ","Wu "]});var RV=y((u9e,EV)=>{EV.exports=["Yun ","Mwun ","Nay ","Gai ","Gai ","Bao ","Cong ","[?] ","Xiong ","Peng ","Ju ","Tao ","Ge ","Pu ","An ","Pao ","Fu ","Gong ","Da ","Jiu ","Qiong ","Bi ","Hua ","Bei ","Nao ","Chi ","Fang ","Jiu ","Yi ","Za ","Jiang ","Kang ","Jiang ","Kuang ","Hu ","Xia ","Qu ","Bian ","Gui ","Qie ","Zang ","Kuang ","Fei ","Hu ","Tou ","Gui ","Gui ","Hui ","Dan ","Gui ","Lian ","Lian ","Suan ","Du ","Jiu ","Qu ","Xi ","Pi ","Qu ","Yi ","Qia ","Yan ","Bian ","Ni ","Qu ","Shi ","Xin ","Qian ","Nian ","Sa ","Zu ","Sheng ","Wu ","Hui ","Ban ","Shi ","Xi ","Wan ","Hua ","Xie ","Wan ","Bei ","Zu ","Zhuo ","Xie ","Dan ","Mai ","Nan ","Dan ","Ji ","Bo ","Shuai ","Bu ","Kuang ","Bian ","Bu ","Zhan ","Qia ","Lu ","You ","Lu ","Xi ","Gua ","Wo ","Xie ","Jie ","Jie ","Wei ","Ang ","Qiong ","Zhi ","Mao ","Yin ","Wei ","Shao ","Ji ","Que ","Luan ","Shi ","Juan ","Xie ","Xu ","Jin ","Que ","Wu ","Ji ","E ","Qing ","Xi ","[?] ","Han ","Zhan ","E ","Ting ","Li ","Zhe ","Han ","Li ","Ya ","Ya ","Yan ","She ","Zhi ","Zha ","Pang ","[?] ","He ","Ya ","Zhi ","Ce ","Pang ","Ti ","Li ","She ","Hou ","Ting ","Zui ","Cuo ","Fei ","Yuan ","Ce ","Yuan ","Xiang ","Yan ","Li ","Jue ","Sha ","Dian ","Chu ","Jiu ","Qin ","Ao ","Gui ","Yan ","Si ","Li ","Chang ","Lan ","Li ","Yan ","Yan ","Yuan ","Si ","Gong ","Lin ","Qiu ","Qu ","Qu ","Uk ","Lei ","Du ","Xian ","Zhuan ","San ","Can ","Can ","Can ","Can ","Ai ","Dai ","You ","Cha ","Ji ","You ","Shuang ","Fan ","Shou ","Guai ","Ba ","Fa ","Ruo ","Shi ","Shu ","Zhuo ","Qu ","Shou ","Bian ","Xu ","Jia ","Pan ","Sou ","Gao ","Wei ","Sou ","Die ","Rui ","Cong ","Kou ","Gu ","Ju ","Ling ","Gua ","Tao ","Kou ","Zhi ","Jiao ","Zhao ","Ba ","Ding ","Ke ","Tai ","Chi ","Shi ","You ","Qiu ","Po ","Xie ","Hao ","Si ","Tan ","Chi ","Le ","Diao ","Ji ","[?] ","Hong "]});var LV=y((c9e,_V)=>{_V.exports=["Mie ","Xu ","Mang ","Chi ","Ge ","Xuan ","Yao ","Zi ","He ","Ji ","Diao ","Cun ","Tong ","Ming ","Hou ","Li ","Tu ","Xiang ","Zha ","Xia ","Ye ","Lu ","A ","Ma ","Ou ","Xue ","Yi ","Jun ","Chou ","Lin ","Tun ","Yin ","Fei ","Bi ","Qin ","Qin ","Jie ","Bu ","Fou ","Ba ","Dun ","Fen ","E ","Han ","Ting ","Hang ","Shun ","Qi ","Hong ","Zhi ","Shen ","Wu ","Wu ","Chao ","Ne ","Xue ","Xi ","Chui ","Dou ","Wen ","Hou ","Ou ","Wu ","Gao ","Ya ","Jun ","Lu ","E ","Ge ","Mei ","Ai ","Qi ","Cheng ","Wu ","Gao ","Fu ","Jiao ","Hong ","Chi ","Sheng ","Ne ","Tun ","Fu ","Yi ","Dai ","Ou ","Li ","Bai ","Yuan ","Kuai ","[?] ","Qiang ","Wu ","E ","Shi ","Quan ","Pen ","Wen ","Ni ","M ","Ling ","Ran ","You ","Di ","Zhou ","Shi ","Zhou ","Tie ","Xi ","Yi ","Qi ","Ping ","Zi ","Gu ","Zi ","Wei ","Xu ","He ","Nao ","Xia ","Pei ","Yi ","Xiao ","Shen ","Hu ","Ming ","Da ","Qu ","Ju ","Gem ","Za ","Tuo ","Duo ","Pou ","Pao ","Bi ","Fu ","Yang ","He ","Zha ","He ","Hai ","Jiu ","Yong ","Fu ","Que ","Zhou ","Wa ","Ka ","Gu ","Ka ","Zuo ","Bu ","Long ","Dong ","Ning ","Tha ","Si ","Xian ","Huo ","Qi ","Er ","E ","Guang ","Zha ","Xi ","Yi ","Lie ","Zi ","Mie ","Mi ","Zhi ","Yao ","Ji ","Zhou ","Ge ","Shuai ","Zan ","Xiao ","Ke ","Hui ","Kua ","Huai ","Tao ","Xian ","E ","Xuan ","Xiu ","Wai ","Yan ","Lao ","Yi ","Ai ","Pin ","Shen ","Tong ","Hong ","Xiong ","Chi ","Wa ","Ha ","Zai ","Yu ","Di ","Pai ","Xiang ","Ai ","Hen ","Kuang ","Ya ","Da ","Xiao ","Bi ","Yue ","[?] ","Hua ","Sasou ","Kuai ","Duo ","[?] ","Ji ","Nong ","Mou ","Yo ","Hao ","Yuan ","Long ","Pou ","Mang ","Ge ","E ","Chi ","Shao ","Li ","Na ","Zu ","He ","Ku ","Xiao ","Xian ","Lao ","Bo ","Zhe ","Zha ","Liang ","Ba ","Mie ","Le ","Sui ","Fou ","Bu ","Han ","Heng ","Geng ","Shuo ","Ge "]});var FV=y((h9e,IV)=>{IV.exports=["You ","Yan ","Gu ","Gu ","Bai ","Han ","Suo ","Chun ","Yi ","Ai ","Jia ","Tu ","Xian ","Huan ","Li ","Xi ","Tang ","Zuo ","Qiu ","Che ","Wu ","Zao ","Ya ","Dou ","Qi ","Di ","Qin ","Ma ","Mal ","Hong ","Dou ","Kes ","Lao ","Liang ","Suo ","Zao ","Huan ","Lang ","Sha ","Ji ","Zuo ","Wo ","Feng ","Yin ","Hu ","Qi ","Shou ","Wei ","Shua ","Chang ","Er ","Li ","Qiang ","An ","Jie ","Yo ","Nian ","Yu ","Tian ","Lai ","Sha ","Xi ","Tuo ","Hu ","Ai ","Zhou ","Nou ","Ken ","Zhuo ","Zhuo ","Shang ","Di ","Heng ","Lan ","A ","Xiao ","Xiang ","Tun ","Wu ","Wen ","Cui ","Sha ","Hu ","Qi ","Qi ","Tao ","Dan ","Dan ","Ye ","Zi ","Bi ","Cui ","Chuo ","He ","Ya ","Qi ","Zhe ","Pei ","Liang ","Xian ","Pi ","Sha ","La ","Ze ","Qing ","Gua ","Pa ","Zhe ","Se ","Zhuan ","Nie ","Guo ","Luo ","Yan ","Di ","Quan ","Tan ","Bo ","Ding ","Lang ","Xiao ","[?] ","Tang ","Chi ","Ti ","An ","Jiu ","Dan ","Ke ","Yong ","Wei ","Nan ","Shan ","Yu ","Zhe ","La ","Jie ","Hou ","Han ","Die ","Zhou ","Chai ","Wai ","Re ","Yu ","Yin ","Zan ","Yao ","Wo ","Mian ","Hu ","Yun ","Chuan ","Hui ","Huan ","Huan ","Xi ","He ","Ji ","Kui ","Zhong ","Wei ","Sha ","Xu ","Huang ","Du ","Nie ","Xuan ","Liang ","Yu ","Sang ","Chi ","Qiao ","Yan ","Dan ","Pen ","Can ","Li ","Yo ","Zha ","Wei ","Miao ","Ying ","Pen ","Phos ","Kui ","Xi ","Yu ","Jie ","Lou ","Ku ","Sao ","Huo ","Ti ","Yao ","He ","A ","Xiu ","Qiang ","Se ","Yong ","Su ","Hong ","Xie ","Yi ","Suo ","Ma ","Cha ","Hai ","Ke ","Ta ","Sang ","Tian ","Ru ","Sou ","Wa ","Ji ","Pang ","Wu ","Xian ","Shi ","Ge ","Zi ","Jie ","Luo ","Weng ","Wa ","Si ","Chi ","Hao ","Suo ","Jia ","Hai ","Suo ","Qin ","Nie ","He ","Cis ","Sai ","Ng ","Ge ","Na ","Dia ","Ai ","[?] ","Tong ","Bi ","Ao ","Ao ","Lian ","Cui ","Zhe ","Mo ","Sou ","Sou ","Tan "]});var MV=y((d9e,jV)=>{jV.exports=["Di ","Qi ","Jiao ","Chong ","Jiao ","Kai ","Tan ","San ","Cao ","Jia ","Ai ","Xiao ","Piao ","Lou ","Ga ","Gu ","Xiao ","Hu ","Hui ","Guo ","Ou ","Xian ","Ze ","Chang ","Xu ","Po ","De ","Ma ","Ma ","Hu ","Lei ","Du ","Ga ","Tang ","Ye ","Beng ","Ying ","Saai ","Jiao ","Mi ","Xiao ","Hua ","Mai ","Ran ","Zuo ","Peng ","Lao ","Xiao ","Ji ","Zhu ","Chao ","Kui ","Zui ","Xiao ","Si ","Hao ","Fu ","Liao ","Qiao ","Xi ","Xiu ","Tan ","Tan ","Mo ","Xun ","E ","Zun ","Fan ","Chi ","Hui ","Zan ","Chuang ","Cu ","Dan ","Yu ","Tun ","Cheng ","Jiao ","Ye ","Xi ","Qi ","Hao ","Lian ","Xu ","Deng ","Hui ","Yin ","Pu ","Jue ","Qin ","Xun ","Nie ","Lu ","Si ","Yan ","Ying ","Da ","Dan ","Yu ","Zhou ","Jin ","Nong ","Yue ","Hui ","Qi ","E ","Zao ","Yi ","Shi ","Jiao ","Yuan ","Ai ","Yong ","Jue ","Kuai ","Yu ","Pen ","Dao ","Ge ","Xin ","Dun ","Dang ","Sin ","Sai ","Pi ","Pi ","Yin ","Zui ","Ning ","Di ","Lan ","Ta ","Huo ","Ru ","Hao ","Xia ","Ya ","Duo ","Xi ","Chou ","Ji ","Jin ","Hao ","Ti ","Chang ","[?] ","[?] ","Ca ","Ti ","Lu ","Hui ","Bo ","You ","Nie ","Yin ","Hu ","Mo ","Huang ","Zhe ","Li ","Liu ","Haai ","Nang ","Xiao ","Mo ","Yan ","Li ","Lu ","Long ","Fu ","Dan ","Chen ","Pin ","Pi ","Xiang ","Huo ","Mo ","Xi ","Duo ","Ku ","Yan ","Chan ","Ying ","Rang ","Dian ","La ","Ta ","Xiao ","Jiao ","Chuo ","Huan ","Huo ","Zhuan ","Nie ","Xiao ","Ca ","Li ","Chan ","Chai ","Li ","Yi ","Luo ","Nang ","Zan ","Su ","Xi ","So ","Jian ","Za ","Zhu ","Lan ","Nie ","Nang ","[?] ","[?] ","Wei ","Hui ","Yin ","Qiu ","Si ","Nin ","Jian ","Hui ","Xin ","Yin ","Nan ","Tuan ","Tuan ","Dun ","Kang ","Yuan ","Jiong ","Pian ","Yun ","Cong ","Hu ","Hui ","Yuan ","You ","Guo ","Kun ","Cong ","Wei ","Tu ","Wei ","Lun ","Guo ","Qun ","Ri ","Ling ","Gu ","Guo ","Tai ","Guo ","Tu ","You "]});var AV=y((g9e,OV)=>{OV.exports=["Guo ","Yin ","Hun ","Pu ","Yu ","Han ","Yuan ","Lun ","Quan ","Yu ","Qing ","Guo ","Chuan ","Wei ","Yuan ","Quan ","Ku ","Fu ","Yuan ","Yuan ","E ","Tu ","Tu ","Tu ","Tuan ","Lue ","Hui ","Yi ","Yuan ","Luan ","Luan ","Tu ","Ya ","Tu ","Ting ","Sheng ","Pu ","Lu ","Iri ","Ya ","Zai ","Wei ","Ge ","Yu ","Wu ","Gui ","Pi ","Yi ","Di ","Qian ","Qian ","Zhen ","Zhuo ","Dang ","Qia ","Akutsu ","Yama ","Kuang ","Chang ","Qi ","Nie ","Mo ","Ji ","Jia ","Zhi ","Zhi ","Ban ","Xun ","Tou ","Qin ","Fen ","Jun ","Keng ","Tun ","Fang ","Fen ","Ben ","Tan ","Kan ","Pi ","Zuo ","Keng ","Bi ","Xing ","Di ","Jing ","Ji ","Kuai ","Di ","Jing ","Jian ","Tan ","Li ","Ba ","Wu ","Fen ","Zhui ","Po ","Pan ","Tang ","Kun ","Qu ","Tan ","Zhi ","Tuo ","Gan ","Ping ","Dian ","Gua ","Ni ","Tai ","Pi ","Jiong ","Yang ","Fo ","Ao ","Liu ","Qiu ","Mu ","Ke ","Gou ","Xue ","Ba ","Chi ","Che ","Ling ","Zhu ","Fu ","Hu ","Zhi ","Chui ","La ","Long ","Long ","Lu ","Ao ","Tay ","Pao ","[?] ","Xing ","Dong ","Ji ","Ke ","Lu ","Ci ","Chi ","Lei ","Gai ","Yin ","Hou ","Dui ","Zhao ","Fu ","Guang ","Yao ","Duo ","Duo ","Gui ","Cha ","Yang ","Yin ","Fa ","Gou ","Yuan ","Die ","Xie ","Ken ","Jiong ","Shou ","E ","Ha ","Dian ","Hong ","Wu ","Kua ","[?] ","Tao ","Dang ","Kai ","Gake ","Nao ","An ","Xing ","Xian ","Huan ","Bang ","Pei ","Ba ","Yi ","Yin ","Han ","Xu ","Chui ","Cen ","Geng ","Ai ","Peng ","Fang ","Que ","Yong ","Xun ","Jia ","Di ","Mai ","Lang ","Xuan ","Cheng ","Yan ","Jin ","Zhe ","Lei ","Lie ","Bu ","Cheng ","Gomi ","Bu ","Shi ","Xun ","Guo ","Jiong ","Ye ","Nian ","Di ","Yu ","Bu ","Ya ","Juan ","Sui ","Pi ","Cheng ","Wan ","Ju ","Lun ","Zheng ","Kong ","Chong ","Dong ","Dai ","Tan ","An ","Cai ","Shu ","Beng ","Kan ","Zhi ","Duo ","Yi ","Zhi ","Yi ","Pei ","Ji ","Zhun ","Qi ","Sao ","Ju ","Ni "]});var HV=y((p9e,NV)=>{NV.exports=["Ku ","Ke ","Tang ","Kun ","Ni ","Jian ","Dui ","Jin ","Gang ","Yu ","E ","Peng ","Gu ","Tu ","Leng ","[?] ","Ya ","Qian ","[?] ","An ","[?] ","Duo ","Nao ","Tu ","Cheng ","Yin ","Hun ","Bi ","Lian ","Guo ","Die ","Zhuan ","Hou ","Bao ","Bao ","Yu ","Di ","Mao ","Jie ","Ruan ","E ","Geng ","Kan ","Zong ","Yu ","Huang ","E ","Yao ","Yan ","Bao ","Ji ","Mei ","Chang ","Du ","Tuo ","Yin ","Feng ","Zhong ","Jie ","Zhen ","Feng ","Gang ","Chuan ","Jian ","Pyeng ","Toride ","Xiang ","Huang ","Leng ","Duan ","[?] ","Xuan ","Ji ","Ji ","Kuai ","Ying ","Ta ","Cheng ","Yong ","Kai ","Su ","Su ","Shi ","Mi ","Ta ","Weng ","Cheng ","Tu ","Tang ","Que ","Zhong ","Li ","Peng ","Bang ","Sai ","Zang ","Dui ","Tian ","Wu ","Cheng ","Xun ","Ge ","Zhen ","Ai ","Gong ","Yan ","Kan ","Tian ","Yuan ","Wen ","Xie ","Liu ","Ama ","Lang ","Chang ","Peng ","Beng ","Chen ","Cu ","Lu ","Ou ","Qian ","Mei ","Mo ","Zhuan ","Shuang ","Shu ","Lou ","Chi ","Man ","Biao ","Jing ","Qi ","Shu ","Di ","Zhang ","Kan ","Yong ","Dian ","Chen ","Zhi ","Xi ","Guo ","Qiang ","Jin ","Di ","Shang ","Mu ","Cui ","Yan ","Ta ","Zeng ","Qi ","Qiang ","Liang ","[?] ","Zhui ","Qiao ","Zeng ","Xu ","Shan ","Shan ","Ba ","Pu ","Kuai ","Dong ","Fan ","Que ","Mo ","Dun ","Dun ","Dun ","Di ","Sheng ","Duo ","Duo ","Tan ","Deng ","Wu ","Fen ","Huang ","Tan ","Da ","Ye ","Sho ","Mama ","Yu ","Qiang ","Ji ","Qiao ","Ken ","Yi ","Pi ","Bi ","Dian ","Jiang ","Ye ","Yong ","Bo ","Tan ","Lan ","Ju ","Huai ","Dang ","Rang ","Qian ","Xun ","Lan ","Xi ","He ","Ai ","Ya ","Dao ","Hao ","Ruan ","Mama ","Lei ","Kuang ","Lu ","Yan ","Tan ","Wei ","Huai ","Long ","Long ","Rui ","Li ","Lin ","Rang ","Ten ","Xun ","Yan ","Lei ","Ba ","[?] ","Shi ","Ren ","[?] ","Zhuang ","Zhuang ","Sheng ","Yi ","Mai ","Ke ","Zhu ","Zhuang ","Hu ","Hu ","Kun ","Yi ","Hu ","Xu ","Kun ","Shou ","Mang ","Zun "]});var BV=y((f9e,qV)=>{qV.exports=["Shou ","Yi ","Zhi ","Gu ","Chu ","Jiang ","Feng ","Bei ","Cay ","Bian ","Sui ","Qun ","Ling ","Fu ","Zuo ","Xia ","Xiong ","[?] ","Nao ","Xia ","Kui ","Xi ","Wai ","Yuan ","Mao ","Su ","Duo ","Duo ","Ye ","Qing ","Uys ","Gou ","Gou ","Qi ","Meng ","Meng ","Yin ","Huo ","Chen ","Da ","Ze ","Tian ","Tai ","Fu ","Guai ","Yao ","Yang ","Hang ","Gao ","Shi ","Ben ","Tai ","Tou ","Yan ","Bi ","Yi ","Kua ","Jia ","Duo ","Kwu ","Kuang ","Yun ","Jia ","Pa ","En ","Lian ","Huan ","Di ","Yan ","Pao ","Quan ","Qi ","Nai ","Feng ","Xie ","Fen ","Dian ","[?] ","Kui ","Zou ","Huan ","Qi ","Kai ","Zha ","Ben ","Yi ","Jiang ","Tao ","Zang ","Ben ","Xi ","Xiang ","Fei ","Diao ","Xun ","Keng ","Dian ","Ao ","She ","Weng ","Pan ","Ao ","Wu ","Ao ","Jiang ","Lian ","Duo ","Yun ","Jiang ","Shi ","Fen ","Huo ","Bi ","Lian ","Duo ","Nu ","Nu ","Ding ","Nai ","Qian ","Jian ","Ta ","Jiu ","Nan ","Cha ","Hao ","Xian ","Fan ","Ji ","Shuo ","Ru ","Fei ","Wang ","Hong ","Zhuang ","Fu ","Ma ","Dan ","Ren ","Fu ","Jing ","Yan ","Xie ","Wen ","Zhong ","Pa ","Du ","Ji ","Keng ","Zhong ","Yao ","Jin ","Yun ","Miao ","Pei ","Shi ","Yue ","Zhuang ","Niu ","Yan ","Na ","Xin ","Fen ","Bi ","Yu ","Tuo ","Feng ","Yuan ","Fang ","Wu ","Yu ","Gui ","Du ","Ba ","Ni ","Zhou ","Zhuo ","Zhao ","Da ","Nai ","Yuan ","Tou ","Xuan ","Zhi ","E ","Mei ","Mo ","Qi ","Bi ","Shen ","Qie ","E ","He ","Xu ","Fa ","Zheng ","Min ","Ban ","Mu ","Fu ","Ling ","Zi ","Zi ","Shi ","Ran ","Shan ","Yang ","Man ","Jie ","Gu ","Si ","Xing ","Wei ","Zi ","Ju ","Shan ","Pin ","Ren ","Yao ","Tong ","Jiang ","Shu ","Ji ","Gai ","Shang ","Kuo ","Juan ","Jiao ","Gou ","Mu ","Jian ","Jian ","Yi ","Nian ","Zhi ","Ji ","Ji ","Xian ","Heng ","Guang ","Jun ","Kua ","Yan ","Ming ","Lie ","Pei ","Yan ","You ","Yan ","Cha ","Shen ","Yin ","Chi ","Gui ","Quan ","Zi "]});var YV=y((m9e,WV)=>{WV.exports=["Song ","Wei ","Hong ","Wa ","Lou ","Ya ","Rao ","Jiao ","Luan ","Ping ","Xian ","Shao ","Li ","Cheng ","Xiao ","Mang ","Fu ","Suo ","Wu ","Wei ","Ke ","Lai ","Chuo ","Ding ","Niang ","Xing ","Nan ","Yu ","Nuo ","Pei ","Nei ","Juan ","Shen ","Zhi ","Han ","Di ","Zhuang ","E ","Pin ","Tui ","Han ","Mian ","Wu ","Yan ","Wu ","Xi ","Yan ","Yu ","Si ","Yu ","Wa ","[?] ","Xian ","Ju ","Qu ","Shui ","Qi ","Xian ","Zhui ","Dong ","Chang ","Lu ","Ai ","E ","E ","Lou ","Mian ","Cong ","Pou ","Ju ","Po ","Cai ","Ding ","Wan ","Biao ","Xiao ","Shu ","Qi ","Hui ","Fu ","E ","Wo ","Tan ","Fei ","Wei ","Jie ","Tian ","Ni ","Quan ","Jing ","Hun ","Jing ","Qian ","Dian ","Xing ","Hu ","Wa ","Lai ","Bi ","Yin ","Chou ","Chuo ","Fu ","Jing ","Lun ","Yan ","Lan ","Kun ","Yin ","Ya ","Ju ","Li ","Dian ","Xian ","Hwa ","Hua ","Ying ","Chan ","Shen ","Ting ","Dang ","Yao ","Wu ","Nan ","Ruo ","Jia ","Tou ","Xu ","Yu ","Wei ","Ti ","Rou ","Mei ","Dan ","Ruan ","Qin ","Hui ","Wu ","Qian ","Chun ","Mao ","Fu ","Jie ","Duan ","Xi ","Zhong ","Mei ","Huang ","Mian ","An ","Ying ","Xuan ","Jie ","Wei ","Mei ","Yuan ","Zhen ","Qiu ","Ti ","Xie ","Tuo ","Lian ","Mao ","Ran ","Si ","Pian ","Wei ","Wa ","Jiu ","Hu ","Ao ","[?] ","Bou ","Xu ","Tou ","Gui ","Zou ","Yao ","Pi ","Xi ","Yuan ","Ying ","Rong ","Ru ","Chi ","Liu ","Mei ","Pan ","Ao ","Ma ","Gou ","Kui ","Qin ","Jia ","Sao ","Zhen ","Yuan ","Cha ","Yong ","Ming ","Ying ","Ji ","Su ","Niao ","Xian ","Tao ","Pang ","Lang ","Nao ","Bao ","Ai ","Pi ","Pin ","Yi ","Piao ","Yu ","Lei ","Xuan ","Man ","Yi ","Zhang ","Kang ","Yong ","Ni ","Li ","Di ","Gui ","Yan ","Jin ","Zhuan ","Chang ","Ce ","Han ","Nen ","Lao ","Mo ","Zhe ","Hu ","Hu ","Ao ","Nen ","Qiang ","Ma ","Pie ","Gu ","Wu ","Jiao ","Tuo ","Zhan ","Mao ","Xian ","Xian ","Mo ","Liao ","Lian ","Hua "]});var JV=y((b9e,ZV)=>{ZV.exports=["Gui ","Deng ","Zhi ","Xu ","Yi ","Hua ","Xi ","Hui ","Rao ","Xi ","Yan ","Chan ","Jiao ","Mei ","Fan ","Fan ","Xian ","Yi ","Wei ","Jiao ","Fu ","Shi ","Bi ","Shan ","Sui ","Qiang ","Lian ","Huan ","Xin ","Niao ","Dong ","Yi ","Can ","Ai ","Niang ","Neng ","Ma ","Tiao ","Chou ","Jin ","Ci ","Yu ","Pin ","Yong ","Xu ","Nai ","Yan ","Tai ","Ying ","Can ","Niao ","Wo ","Ying ","Mian ","Kaka ","Ma ","Shen ","Xing ","Ni ","Du ","Liu ","Yuan ","Lan ","Yan ","Shuang ","Ling ","Jiao ","Niang ","Lan ","Xian ","Ying ","Shuang ","Shuai ","Quan ","Mi ","Li ","Luan ","Yan ","Zhu ","Lan ","Zi ","Jie ","Jue ","Jue ","Kong ","Yun ","Zi ","Zi ","Cun ","Sun ","Fu ","Bei ","Zi ","Xiao ","Xin ","Meng ","Si ","Tai ","Bao ","Ji ","Gu ","Nu ","Xue ","[?] ","Zhuan ","Hai ","Luan ","Sun ","Huai ","Mie ","Cong ","Qian ","Shu ","Chan ","Ya ","Zi ","Ni ","Fu ","Zi ","Li ","Xue ","Bo ","Ru ","Lai ","Nie ","Nie ","Ying ","Luan ","Mian ","Zhu ","Rong ","Ta ","Gui ","Zhai ","Qiong ","Yu ","Shou ","An ","Tu ","Song ","Wan ","Rou ","Yao ","Hong ","Yi ","Jing ","Zhun ","Mi ","Zhu ","Dang ","Hong ","Zong ","Guan ","Zhou ","Ding ","Wan ","Yi ","Bao ","Shi ","Shi ","Chong ","Shen ","Ke ","Xuan ","Shi ","You ","Huan ","Yi ","Tiao ","Shi ","Xian ","Gong ","Cheng ","Qun ","Gong ","Xiao ","Zai ","Zha ","Bao ","Hai ","Yan ","Xiao ","Jia ","Shen ","Chen ","Rong ","Huang ","Mi ","Kou ","Kuan ","Bin ","Su ","Cai ","Zan ","Ji ","Yuan ","Ji ","Yin ","Mi ","Kou ","Qing ","Que ","Zhen ","Jian ","Fu ","Ning ","Bing ","Huan ","Mei ","Qin ","Han ","Yu ","Shi ","Ning ","Qin ","Ning ","Zhi ","Yu ","Bao ","Kuan ","Ning ","Qin ","Mo ","Cha ","Ju ","Gua ","Qin ","Hu ","Wu ","Liao ","Shi ","Zhu ","Zhai ","Shen ","Wei ","Xie ","Kuan ","Hui ","Liao ","Jun ","Huan ","Yi ","Yi ","Bao ","Qin ","Chong ","Bao ","Feng ","Cun ","Dui ","Si ","Xun ","Dao ","Lu ","Dui ","Shou "]});var UV=y((y9e,$V)=>{$V.exports=["Po ","Feng ","Zhuan ","Fu ","She ","Ke ","Jiang ","Jiang ","Zhuan ","Wei ","Zun ","Xun ","Shu ","Dui ","Dao ","Xiao ","Ji ","Shao ","Er ","Er ","Er ","Ga ","Jian ","Shu ","Chen ","Shang ","Shang ","Mo ","Ga ","Chang ","Liao ","Xian ","Xian ","[?] ","Wang ","Wang ","You ","Liao ","Liao ","Yao ","Mang ","Wang ","Wang ","Wang ","Ga ","Yao ","Duo ","Kui ","Zhong ","Jiu ","Gan ","Gu ","Gan ","Tui ","Gan ","Gan ","Shi ","Yin ","Chi ","Kao ","Ni ","Jin ","Wei ","Niao ","Ju ","Pi ","Ceng ","Xi ","Bi ","Ju ","Jie ","Tian ","Qu ","Ti ","Jie ","Wu ","Diao ","Shi ","Shi ","Ping ","Ji ","Xie ","Chen ","Xi ","Ni ","Zhan ","Xi ","[?] ","Man ","E ","Lou ","Ping ","Ti ","Fei ","Shu ","Xie ","Tu ","Lu ","Lu ","Xi ","Ceng ","Lu ","Ju ","Xie ","Ju ","Jue ","Liao ","Jue ","Shu ","Xi ","Che ","Tun ","Ni ","Shan ","[?] ","Xian ","Li ","Xue ","Nata ","[?] ","Long ","Yi ","Qi ","Ren ","Wu ","Han ","Shen ","Yu ","Chu ","Sui ","Qi ","[?] ","Yue ","Ban ","Yao ","Ang ","Ya ","Wu ","Jie ","E ","Ji ","Qian ","Fen ","Yuan ","Qi ","Cen ","Qian ","Qi ","Cha ","Jie ","Qu ","Gang ","Xian ","Ao ","Lan ","Dao ","Ba ","Zuo ","Zuo ","Yang ","Ju ","Gang ","Ke ","Gou ","Xue ","Bei ","Li ","Tiao ","Ju ","Yan ","Fu ","Xiu ","Jia ","Ling ","Tuo ","Pei ","You ","Dai ","Kuang ","Yue ","Qu ","Hu ","Po ","Min ","An ","Tiao ","Ling ","Chi ","Yuri ","Dong ","Cem ","Kui ","Xiu ","Mao ","Tong ","Xue ","Yi ","Kura ","He ","Ke ","Luo ","E ","Fu ","Xun ","Die ","Lu ","An ","Er ","Gai ","Quan ","Tong ","Yi ","Mu ","Shi ","An ","Wei ","Hu ","Zhi ","Mi ","Li ","Ji ","Tong ","Wei ","You ","Sang ","Xia ","Li ","Yao ","Jiao ","Zheng ","Luan ","Jiao ","E ","E ","Yu ","Ye ","Bu ","Qiao ","Qun ","Feng ","Feng ","Nao ","Li ","You ","Xian ","Hong ","Dao ","Shen ","Cheng ","Tu ","Geng ","Jun ","Hao ","Xia ","Yin ","Yu "]});var GV=y((v9e,XV)=>{XV.exports=["Lang ","Kan ","Lao ","Lai ","Xian ","Que ","Kong ","Chong ","Chong ","Ta ","Lin ","Hua ","Ju ","Lai ","Qi ","Min ","Kun ","Kun ","Zu ","Gu ","Cui ","Ya ","Ya ","Gang ","Lun ","Lun ","Leng ","Jue ","Duo ","Zheng ","Guo ","Yin ","Dong ","Han ","Zheng ","Wei ","Yao ","Pi ","Yan ","Song ","Jie ","Beng ","Zu ","Jue ","Dong ","Zhan ","Gu ","Yin ","[?] ","Ze ","Huang ","Yu ","Wei ","Yang ","Feng ","Qiu ","Dun ","Ti ","Yi ","Zhi ","Shi ","Zai ","Yao ","E ","Zhu ","Kan ","Lu ","Yan ","Mei ","Gan ","Ji ","Ji ","Huan ","Ting ","Sheng ","Mei ","Qian ","Wu ","Yu ","Zong ","Lan ","Jue ","Yan ","Yan ","Wei ","Zong ","Cha ","Sui ","Rong ","Yamashina ","Qin ","Yu ","Kewashii ","Lou ","Tu ","Dui ","Xi ","Weng ","Cang ","Dang ","Hong ","Jie ","Ai ","Liu ","Wu ","Song ","Qiao ","Zi ","Wei ","Beng ","Dian ","Cuo ","Qian ","Yong ","Nie ","Cuo ","Ji ","[?] ","Tao ","Song ","Zong ","Jiang ","Liao ","Kang ","Chan ","Die ","Cen ","Ding ","Tu ","Lou ","Zhang ","Zhan ","Zhan ","Ao ","Cao ","Qu ","Qiang ","Zui ","Zui ","Dao ","Dao ","Xi ","Yu ","Bo ","Long ","Xiang ","Ceng ","Bo ","Qin ","Jiao ","Yan ","Lao ","Zhan ","Lin ","Liao ","Liao ","Jin ","Deng ","Duo ","Zun ","Jiao ","Gui ","Yao ","Qiao ","Yao ","Jue ","Zhan ","Yi ","Xue ","Nao ","Ye ","Ye ","Yi ","E ","Xian ","Ji ","Xie ","Ke ","Xi ","Di ","Ao ","Zui ","[?] ","Ni ","Rong ","Dao ","Ling ","Za ","Yu ","Yue ","Yin ","[?] ","Jie ","Li ","Sui ","Long ","Long ","Dian ","Ying ","Xi ","Ju ","Chan ","Ying ","Kui ","Yan ","Wei ","Nao ","Quan ","Chao ","Cuan ","Luan ","Dian ","Dian ","[?] ","Yan ","Yan ","Yan ","Nao ","Yan ","Chuan ","Gui ","Chuan ","Zhou ","Huang ","Jing ","Xun ","Chao ","Chao ","Lie ","Gong ","Zuo ","Qiao ","Ju ","Gong ","Kek ","Wu ","Pwu ","Pwu ","Chai ","Qiu ","Qiu ","Ji ","Yi ","Si ","Ba ","Zhi ","Zhao ","Xiang ","Yi ","Jin ","Xun ","Juan ","Phas ","Xun ","Jin ","Fu "]});var KV=y((w9e,zV)=>{zV.exports=["Za ","Bi ","Shi ","Bu ","Ding ","Shuai ","Fan ","Nie ","Shi ","Fen ","Pa ","Zhi ","Xi ","Hu ","Dan ","Wei ","Zhang ","Tang ","Dai ","Ma ","Pei ","Pa ","Tie ","Fu ","Lian ","Zhi ","Zhou ","Bo ","Zhi ","Di ","Mo ","Yi ","Yi ","Ping ","Qia ","Juan ","Ru ","Shuai ","Dai ","Zheng ","Shui ","Qiao ","Zhen ","Shi ","Qun ","Xi ","Bang ","Dai ","Gui ","Chou ","Ping ","Zhang ","Sha ","Wan ","Dai ","Wei ","Chang ","Sha ","Qi ","Ze ","Guo ","Mao ","Du ","Hou ","Zheng ","Xu ","Mi ","Wei ","Wo ","Fu ","Yi ","Bang ","Ping ","Tazuna ","Gong ","Pan ","Huang ","Dao ","Mi ","Jia ","Teng ","Hui ","Zhong ","Shan ","Man ","Mu ","Biao ","Guo ","Ze ","Mu ","Bang ","Zhang ","Jiong ","Chan ","Fu ","Zhi ","Hu ","Fan ","Chuang ","Bi ","Hei ","[?] ","Mi ","Qiao ","Chan ","Fen ","Meng ","Bang ","Chou ","Mie ","Chu ","Jie ","Xian ","Lan ","Gan ","Ping ","Nian ","Qian ","Bing ","Bing ","Xing ","Gan ","Yao ","Huan ","You ","You ","Ji ","Yan ","Pi ","Ting ","Ze ","Guang ","Zhuang ","Mo ","Qing ","Bi ","Qin ","Dun ","Chuang ","Gui ","Ya ","Bai ","Jie ","Xu ","Lu ","Wu ","[?] ","Ku ","Ying ","Di ","Pao ","Dian ","Ya ","Miao ","Geng ","Ci ","Fu ","Tong ","Pang ","Fei ","Xiang ","Yi ","Zhi ","Tiao ","Zhi ","Xiu ","Du ","Zuo ","Xiao ","Tu ","Gui ","Ku ","Pang ","Ting ","You ","Bu ","Ding ","Cheng ","Lai ","Bei ","Ji ","An ","Shu ","Kang ","Yong ","Tuo ","Song ","Shu ","Qing ","Yu ","Yu ","Miao ","Sou ","Ce ","Xiang ","Fei ","Jiu ","He ","Hui ","Liu ","Sha ","Lian ","Lang ","Sou ","Jian ","Pou ","Qing ","Jiu ","Jiu ","Qin ","Ao ","Kuo ","Lou ","Yin ","Liao ","Dai ","Lu ","Yi ","Chu ","Chan ","Tu ","Si ","Xin ","Miao ","Chang ","Wu ","Fei ","Guang ","Koc ","Kuai ","Bi ","Qiang ","Xie ","Lin ","Lin ","Liao ","Lu ","[?] ","Ying ","Xian ","Ting ","Yong ","Li ","Ting ","Yin ","Xun ","Yan ","Ting ","Di ","Po ","Jian ","Hui ","Nai ","Hui ","Gong ","Nian "]});var VV=y((x9e,QV)=>{QV.exports=["Kai ","Bian ","Yi ","Qi ","Nong ","Fen ","Ju ","Yan ","Yi ","Zang ","Bi ","Yi ","Yi ","Er ","San ","Shi ","Er ","Shi ","Shi ","Gong ","Diao ","Yin ","Hu ","Fu ","Hong ","Wu ","Tui ","Chi ","Jiang ","Ba ","Shen ","Di ","Zhang ","Jue ","Tao ","Fu ","Di ","Mi ","Xian ","Hu ","Chao ","Nu ","Jing ","Zhen ","Yi ","Mi ","Quan ","Wan ","Shao ","Ruo ","Xuan ","Jing ","Dun ","Zhang ","Jiang ","Qiang ","Peng ","Dan ","Qiang ","Bi ","Bi ","She ","Dan ","Jian ","Gou ","Sei ","Fa ","Bi ","Kou ","Nagi ","Bie ","Xiao ","Dan ","Kuo ","Qiang ","Hong ","Mi ","Kuo ","Wan ","Jue ","Ji ","Ji ","Gui ","Dang ","Lu ","Lu ","Tuan ","Hui ","Zhi ","Hui ","Hui ","Yi ","Yi ","Yi ","Yi ","Huo ","Huo ","Shan ","Xing ","Wen ","Tong ","Yan ","Yan ","Yu ","Chi ","Cai ","Biao ","Diao ","Bin ","Peng ","Yong ","Piao ","Zhang ","Ying ","Chi ","Chi ","Zhuo ","Tuo ","Ji ","Pang ","Zhong ","Yi ","Wang ","Che ","Bi ","Chi ","Ling ","Fu ","Wang ","Zheng ","Cu ","Wang ","Jing ","Dai ","Xi ","Xun ","Hen ","Yang ","Huai ","Lu ","Hou ","Wa ","Cheng ","Zhi ","Xu ","Jing ","Tu ","Cong ","[?] ","Lai ","Cong ","De ","Pai ","Xi ","[?] ","Qi ","Chang ","Zhi ","Cong ","Zhou ","Lai ","Yu ","Xie ","Jie ","Jian ","Chi ","Jia ","Bian ","Huang ","Fu ","Xun ","Wei ","Pang ","Yao ","Wei ","Xi ","Zheng ","Piao ","Chi ","De ","Zheng ","Zheng ","Bie ","De ","Chong ","Che ","Jiao ","Wei ","Jiao ","Hui ","Mei ","Long ","Xiang ","Bao ","Qu ","Xin ","Shu ","Bi ","Yi ","Le ","Ren ","Dao ","Ding ","Gai ","Ji ","Ren ","Ren ","Chan ","Tan ","Te ","Te ","Gan ","Qi ","Shi ","Cun ","Zhi ","Wang ","Mang ","Xi ","Fan ","Ying ","Tian ","Min ","Min ","Zhong ","Chong ","Wu ","Ji ","Wu ","Xi ","Ye ","You ","Wan ","Cong ","Zhong ","Kuai ","Yu ","Bian ","Zhi ","Qi ","Cui ","Chen ","Tai ","Tun ","Qian ","Nian ","Hun ","Xiong ","Niu ","Wang ","Xian ","Xin ","Kang ","Hu ","Kai ","Fen "]});var t8=y((C9e,e8)=>{e8.exports=["Huai ","Tai ","Song ","Wu ","Ou ","Chang ","Chuang ","Ju ","Yi ","Bao ","Chao ","Min ","Pei ","Zuo ","Zen ","Yang ","Kou ","Ban ","Nu ","Nao ","Zheng ","Pa ","Bu ","Tie ","Gu ","Hu ","Ju ","Da ","Lian ","Si ","Chou ","Di ","Dai ","Yi ","Tu ","You ","Fu ","Ji ","Peng ","Xing ","Yuan ","Ni ","Guai ","Fu ","Xi ","Bi ","You ","Qie ","Xuan ","Cong ","Bing ","Huang ","Xu ","Chu ","Pi ","Xi ","Xi ","Tan ","Koraeru ","Zong ","Dui ","[?] ","Ki ","Yi ","Chi ","Ren ","Xun ","Shi ","Xi ","Lao ","Heng ","Kuang ","Mu ","Zhi ","Xie ","Lian ","Tiao ","Huang ","Die ","Hao ","Kong ","Gui ","Heng ","Xi ","Xiao ","Shu ","S ","Kua ","Qiu ","Yang ","Hui ","Hui ","Chi ","Jia ","Yi ","Xiong ","Guai ","Lin ","Hui ","Zi ","Xu ","Chi ","Xiang ","Nu ","Hen ","En ","Ke ","Tong ","Tian ","Gong ","Quan ","Xi ","Qia ","Yue ","Peng ","Ken ","De ","Hui ","E ","Kyuu ","Tong ","Yan ","Kai ","Ce ","Nao ","Yun ","Mang ","Yong ","Yong ","Yuan ","Pi ","Kun ","Qiao ","Yue ","Yu ","Yu ","Jie ","Xi ","Zhe ","Lin ","Ti ","Han ","Hao ","Qie ","Ti ","Bu ","Yi ","Qian ","Hui ","Xi ","Bei ","Man ","Yi ","Heng ","Song ","Quan ","Cheng ","Hui ","Wu ","Wu ","You ","Li ","Liang ","Huan ","Cong ","Yi ","Yue ","Li ","Nin ","Nao ","E ","Que ","Xuan ","Qian ","Wu ","Min ","Cong ","Fei ","Bei ","Duo ","Cui ","Chang ","Men ","Li ","Ji ","Guan ","Guan ","Xing ","Dao ","Qi ","Kong ","Tian ","Lun ","Xi ","Kan ","Kun ","Ni ","Qing ","Chou ","Dun ","Guo ","Chan ","Liang ","Wan ","Yuan ","Jin ","Ji ","Lin ","Yu ","Huo ","He ","Quan ","Tan ","Ti ","Ti ","Nie ","Wang ","Chuo ","Bu ","Hun ","Xi ","Tang ","Xin ","Wei ","Hui ","E ","Rui ","Zong ","Jian ","Yong ","Dian ","Ju ","Can ","Cheng ","De ","Bei ","Qie ","Can ","Dan ","Guan ","Duo ","Nao ","Yun ","Xiang ","Zhui ","Die ","Huang ","Chun ","Qiong ","Re ","Xing ","Ce ","Bian ","Hun ","Zong ","Ti "]});var n8=y((S9e,i8)=>{i8.exports=["Qiao ","Chou ","Bei ","Xuan ","Wei ","Ge ","Qian ","Wei ","Yu ","Yu ","Bi ","Xuan ","Huan ","Min ","Bi ","Yi ","Mian ","Yong ","Kai ","Dang ","Yin ","E ","Chen ","Mou ","Ke ","Ke ","Yu ","Ai ","Qie ","Yan ","Nuo ","Gan ","Yun ","Zong ","Sai ","Leng ","Fen ","[?] ","Kui ","Kui ","Que ","Gong ","Yun ","Su ","Su ","Qi ","Yao ","Song ","Huang ","Ji ","Gu ","Ju ","Chuang ","Ni ","Xie ","Kai ","Zheng ","Yong ","Cao ","Sun ","Shen ","Bo ","Kai ","Yuan ","Xie ","Hun ","Yong ","Yang ","Li ","Sao ","Tao ","Yin ","Ci ","Xu ","Qian ","Tai ","Huang ","Yun ","Shen ","Ming ","[?] ","She ","Cong ","Piao ","Mo ","Mu ","Guo ","Chi ","Can ","Can ","Can ","Cui ","Min ","Te ","Zhang ","Tong ","Ao ","Shuang ","Man ","Guan ","Que ","Zao ","Jiu ","Hui ","Kai ","Lian ","Ou ","Song ","Jin ","Yin ","Lu ","Shang ","Wei ","Tuan ","Man ","Qian ","She ","Yong ","Qing ","Kang ","Di ","Zhi ","Lou ","Juan ","Qi ","Qi ","Yu ","Ping ","Liao ","Cong ","You ","Chong ","Zhi ","Tong ","Cheng ","Qi ","Qu ","Peng ","Bei ","Bie ","Chun ","Jiao ","Zeng ","Chi ","Lian ","Ping ","Kui ","Hui ","Qiao ","Cheng ","Yin ","Yin ","Xi ","Xi ","Dan ","Tan ","Duo ","Dui ","Dui ","Su ","Jue ","Ce ","Xiao ","Fan ","Fen ","Lao ","Lao ","Chong ","Han ","Qi ","Xian ","Min ","Jing ","Liao ","Wu ","Can ","Jue ","Cu ","Xian ","Tan ","Sheng ","Pi ","Yi ","Chu ","Xian ","Nao ","Dan ","Tan ","Jing ","Song ","Han ","Jiao ","Wai ","Huan ","Dong ","Qin ","Qin ","Qu ","Cao ","Ken ","Xie ","Ying ","Ao ","Mao ","Yi ","Lin ","Se ","Jun ","Huai ","Men ","Lan ","Ai ","Lin ","Yan ","Gua ","Xia ","Chi ","Yu ","Yin ","Dai ","Meng ","Ai ","Meng ","Dui ","Qi ","Mo ","Lan ","Men ","Chou ","Zhi ","Nuo ","Nuo ","Yan ","Yang ","Bo ","Zhi ","Kuang ","Kuang ","You ","Fu ","Liu ","Mie ","Cheng ","[?] ","Chan ","Meng ","Lan ","Huai ","Xuan ","Rang ","Chan ","Ji ","Ju ","Huan ","She ","Yi "]});var o8=y((D9e,r8)=>{r8.exports=["Lian ","Nan ","Mi ","Tang ","Jue ","Gang ","Gang ","Gang ","Ge ","Yue ","Wu ","Jian ","Xu ","Shu ","Rong ","Xi ","Cheng ","Wo ","Jie ","Ge ","Jian ","Qiang ","Huo ","Qiang ","Zhan ","Dong ","Qi ","Jia ","Die ","Zei ","Jia ","Ji ","Shi ","Kan ","Ji ","Kui ","Gai ","Deng ","Zhan ","Chuang ","Ge ","Jian ","Jie ","Yu ","Jian ","Yan ","Lu ","Xi ","Zhan ","Xi ","Xi ","Chuo ","Dai ","Qu ","Hu ","Hu ","Hu ","E ","Shi ","Li ","Mao ","Hu ","Li ","Fang ","Suo ","Bian ","Dian ","Jiong ","Shang ","Yi ","Yi ","Shan ","Hu ","Fei ","Yan ","Shou ","T ","Cai ","Zha ","Qiu ","Le ","Bu ","Ba ","Da ","Reng ","Fu ","Hameru ","Zai ","Tuo ","Zhang ","Diao ","Kang ","Yu ","Ku ","Han ","Shen ","Cha ","Yi ","Gu ","Kou ","Wu ","Tuo ","Qian ","Zhi ","Ren ","Kuo ","Men ","Sao ","Yang ","Niu ","Ban ","Che ","Rao ","Xi ","Qian ","Ban ","Jia ","Yu ","Fu ","Ao ","Xi ","Pi ","Zhi ","Zi ","E ","Dun ","Zhao ","Cheng ","Ji ","Yan ","Kuang ","Bian ","Chao ","Ju ","Wen ","Hu ","Yue ","Jue ","Ba ","Qin ","Zhen ","Zheng ","Yun ","Wan ","Nu ","Yi ","Shu ","Zhua ","Pou ","Tou ","Dou ","Kang ","Zhe ","Pou ","Fu ","Pao ","Ba ","Ao ","Ze ","Tuan ","Kou ","Lun ","Qiang ","[?] ","Hu ","Bao ","Bing ","Zhi ","Peng ","Tan ","Pu ","Pi ","Tai ","Yao ","Zhen ","Zha ","Yang ","Bao ","He ","Ni ","Yi ","Di ","Chi ","Pi ","Za ","Mo ","Mo ","Shen ","Ya ","Chou ","Qu ","Min ","Chu ","Jia ","Fu ","Zhan ","Zhu ","Dan ","Chai ","Mu ","Nian ","La ","Fu ","Pao ","Ban ","Pai ","Ling ","Na ","Guai ","Qian ","Ju ","Tuo ","Ba ","Tuo ","Tuo ","Ao ","Ju ","Zhuo ","Pan ","Zhao ","Bai ","Bai ","Di ","Ni ","Ju ","Kuo ","Long ","Jian ","[?] ","Yong ","Lan ","Ning ","Bo ","Ze ","Qian ","Hen ","Gua ","Shi ","Jie ","Zheng ","Nin ","Gong ","Gong ","Quan ","Shuan ","Cun ","Zan ","Kao ","Chi ","Xie ","Ce ","Hui ","Pin ","Zhuai ","Shi ","Na "]});var a8=y((T9e,s8)=>{s8.exports=["Bo ","Chi ","Gua ","Zhi ","Kuo ","Duo ","Duo ","Zhi ","Qie ","An ","Nong ","Zhen ","Ge ","Jiao ","Ku ","Dong ","Ru ","Tiao ","Lie ","Zha ","Lu ","Die ","Wa ","Jue ","Mushiru ","Ju ","Zhi ","Luan ","Ya ","Zhua ","Ta ","Xie ","Nao ","Dang ","Jiao ","Zheng ","Ji ","Hui ","Xun ","Ku ","Ai ","Tuo ","Nuo ","Cuo ","Bo ","Geng ","Ti ","Zhen ","Cheng ","Suo ","Suo ","Keng ","Mei ","Long ","Ju ","Peng ","Jian ","Yi ","Ting ","Shan ","Nuo ","Wan ","Xie ","Cha ","Feng ","Jiao ","Wu ","Jun ","Jiu ","Tong ","Kun ","Huo ","Tu ","Zhuo ","Pou ","Le ","Ba ","Han ","Shao ","Nie ","Juan ","Ze ","Song ","Ye ","Jue ","Bu ","Huan ","Bu ","Zun ","Yi ","Zhai ","Lu ","Sou ","Tuo ","Lao ","Sun ","Bang ","Jian ","Huan ","Dao ","[?] ","Wan ","Qin ","Peng ","She ","Lie ","Min ","Men ","Fu ","Bai ","Ju ","Dao ","Wo ","Ai ","Juan ","Yue ","Zong ","Chen ","Chui ","Jie ","Tu ","Ben ","Na ","Nian ","Nuo ","Zu ","Wo ","Xi ","Xian ","Cheng ","Dian ","Sao ","Lun ","Qing ","Gang ","Duo ","Shou ","Diao ","Pou ","Di ","Zhang ","Gun ","Ji ","Tao ","Qia ","Qi ","Pai ","Shu ","Qian ","Ling ","Yi ","Ya ","Jue ","Zheng ","Liang ","Gua ","Yi ","Huo ","Shan ","Zheng ","Lue ","Cai ","Tan ","Che ","Bing ","Jie ","Ti ","Kong ","Tui ","Yan ","Cuo ","Zou ","Ju ","Tian ","Qian ","Ken ","Bai ","Shou ","Jie ","Lu ","Guo ","Haba ","[?] ","Zhi ","Dan ","Mang ","Xian ","Sao ","Guan ","Peng ","Yuan ","Nuo ","Jian ","Zhen ","Jiu ","Jian ","Yu ","Yan ","Kui ","Nan ","Hong ","Rou ","Pi ","Wei ","Sai ","Zou ","Xuan ","Miao ","Ti ","Nie ","Cha ","Shi ","Zong ","Zhen ","Yi ","Shun ","Heng ","Bian ","Yang ","Huan ","Yan ","Zuan ","An ","Xu ","Ya ","Wo ","Ke ","Chuai ","Ji ","Ti ","La ","La ","Cheng ","Kai ","Jiu ","Jiu ","Tu ","Jie ","Hui ","Geng ","Chong ","Shuo ","She ","Xie ","Yuan ","Qian ","Ye ","Cha ","Zha ","Bei ","Yao ","[?] ","[?] ","Lan ","Wen ","Qin "]});var u8=y((k9e,l8)=>{l8.exports=["Chan ","Ge ","Lou ","Zong ","Geng ","Jiao ","Gou ","Qin ","Yong ","Que ","Chou ","Chi ","Zhan ","Sun ","Sun ","Bo ","Chu ","Rong ","Beng ","Cuo ","Sao ","Ke ","Yao ","Dao ","Zhi ","Nu ","Xie ","Jian ","Sou ","Qiu ","Gao ","Xian ","Shuo ","Sang ","Jin ","Mie ","E ","Chui ","Nuo ","Shan ","Ta ","Jie ","Tang ","Pan ","Ban ","Da ","Li ","Tao ","Hu ","Zhi ","Wa ","Xia ","Qian ","Wen ","Qiang ","Tian ","Zhen ","E ","Xi ","Nuo ","Quan ","Cha ","Zha ","Ge ","Wu ","En ","She ","Kang ","She ","Shu ","Bai ","Yao ","Bin ","Sou ","Tan ","Sa ","Chan ","Suo ","Liao ","Chong ","Chuang ","Guo ","Bing ","Feng ","Shuai ","Di ","Qi ","Sou ","Zhai ","Lian ","Tang ","Chi ","Guan ","Lu ","Luo ","Lou ","Zong ","Gai ","Hu ","Zha ","Chuang ","Tang ","Hua ","Cui ","Nai ","Mo ","Jiang ","Gui ","Ying ","Zhi ","Ao ","Zhi ","Nie ","Man ","Shan ","Kou ","Shu ","Suo ","Tuan ","Jiao ","Mo ","Mo ","Zhe ","Xian ","Keng ","Piao ","Jiang ","Yin ","Gou ","Qian ","Lue ","Ji ","Ying ","Jue ","Pie ","Pie ","Lao ","Dun ","Xian ","Ruan ","Kui ","Zan ","Yi ","Xun ","Cheng ","Cheng ","Sa ","Nao ","Heng ","Si ","Qian ","Huang ","Da ","Zun ","Nian ","Lin ","Zheng ","Hui ","Zhuang ","Jiao ","Ji ","Cao ","Dan ","Dan ","Che ","Bo ","Che ","Jue ","Xiao ","Liao ","Ben ","Fu ","Qiao ","Bo ","Cuo ","Zhuo ","Zhuan ","Tuo ","Pu ","Qin ","Dun ","Nian ","[?] ","Xie ","Lu ","Jiao ","Cuan ","Ta ","Han ","Qiao ","Zhua ","Jian ","Gan ","Yong ","Lei ","Kuo ","Lu ","Shan ","Zhuo ","Ze ","Pu ","Chuo ","Ji ","Dang ","Suo ","Cao ","Qing ","Jing ","Huan ","Jie ","Qin ","Kuai ","Dan ","Xi ","Ge ","Pi ","Bo ","Ao ","Ju ","Ye ","[?] ","Mang ","Sou ","Mi ","Ji ","Tai ","Zhuo ","Dao ","Xing ","Lan ","Ca ","Ju ","Ye ","Ru ","Ye ","Ye ","Ni ","Hu ","Ji ","Bin ","Ning ","Ge ","Zhi ","Jie ","Kuo ","Mo ","Jian ","Xie ","Lie ","Tan ","Bai ","Sou ","Lu ","Lue ","Rao ","Zhi "]});var h8=y((P9e,c8)=>{c8.exports=["Pan ","Yang ","Lei ","Sa ","Shu ","Zan ","Nian ","Xian ","Jun ","Huo ","Li ","La ","Han ","Ying ","Lu ","Long ","Qian ","Qian ","Zan ","Qian ","Lan ","San ","Ying ","Mei ","Rang ","Chan ","[?] ","Cuan ","Xi ","She ","Luo ","Jun ","Mi ","Li ","Zan ","Luan ","Tan ","Zuan ","Li ","Dian ","Wa ","Dang ","Jiao ","Jue ","Lan ","Li ","Nang ","Zhi ","Gui ","Gui ","Qi ","Xin ","Pu ","Sui ","Shou ","Kao ","You ","Gai ","Yi ","Gong ","Gan ","Ban ","Fang ","Zheng ","Bo ","Dian ","Kou ","Min ","Wu ","Gu ","He ","Ce ","Xiao ","Mi ","Chu ","Ge ","Di ","Xu ","Jiao ","Min ","Chen ","Jiu ","Zhen ","Duo ","Yu ","Chi ","Ao ","Bai ","Xu ","Jiao ","Duo ","Lian ","Nie ","Bi ","Chang ","Dian ","Duo ","Yi ","Gan ","San ","Ke ","Yan ","Dun ","Qi ","Dou ","Xiao ","Duo ","Jiao ","Jing ","Yang ","Xia ","Min ","Shu ","Ai ","Qiao ","Ai ","Zheng ","Di ","Zhen ","Fu ","Shu ","Liao ","Qu ","Xiong ","Xi ","Jiao ","Sen ","Jiao ","Zhuo ","Yi ","Lian ","Bi ","Li ","Xiao ","Xiao ","Wen ","Xue ","Qi ","Qi ","Zhai ","Bin ","Jue ","Zhai ","[?] ","Fei ","Ban ","Ban ","Lan ","Yu ","Lan ","Wei ","Dou ","Sheng ","Liao ","Jia ","Hu ","Xie ","Jia ","Yu ","Zhen ","Jiao ","Wo ","Tou ","Chu ","Jin ","Chi ","Yin ","Fu ","Qiang ","Zhan ","Qu ","Zhuo ","Zhan ","Duan ","Zhuo ","Si ","Xin ","Zhuo ","Zhuo ","Qin ","Lin ","Zhuo ","Chu ","Duan ","Zhu ","Fang ","Xie ","Hang ","Yu ","Shi ","Pei ","You ","Mye ","Pang ","Qi ","Zhan ","Mao ","Lu ","Pei ","Pi ","Liu ","Fu ","Fang ","Xuan ","Jing ","Jing ","Ni ","Zu ","Zhao ","Yi ","Liu ","Shao ","Jian ","Es ","Yi ","Qi ","Zhi ","Fan ","Piao ","Fan ","Zhan ","Guai ","Sui ","Yu ","Wu ","Ji ","Ji ","Ji ","Huo ","Ri ","Dan ","Jiu ","Zhi ","Zao ","Xie ","Tiao ","Xun ","Xu ","Xu ","Xu ","Gan ","Han ","Tai ","Di ","Xu ","Chan ","Shi ","Kuang ","Yang ","Shi ","Wang ","Min ","Min ","Tun ","Chun ","Wu "]});var g8=y((E9e,d8)=>{d8.exports=["Yun ","Bei ","Ang ","Ze ","Ban ","Jie ","Kun ","Sheng ","Hu ","Fang ","Hao ","Gui ","Chang ","Xuan ","Ming ","Hun ","Fen ","Qin ","Hu ","Yi ","Xi ","Xin ","Yan ","Ze ","Fang ","Tan ","Shen ","Ju ","Yang ","Zan ","Bing ","Xing ","Ying ","Xuan ","Pei ","Zhen ","Ling ","Chun ","Hao ","Mei ","Zuo ","Mo ","Bian ","Xu ","Hun ","Zhao ","Zong ","Shi ","Shi ","Yu ","Fei ","Die ","Mao ","Ni ","Chang ","Wen ","Dong ","Ai ","Bing ","Ang ","Zhou ","Long ","Xian ","Kuang ","Tiao ","Chao ","Shi ","Huang ","Huang ","Xuan ","Kui ","Xu ","Jiao ","Jin ","Zhi ","Jin ","Shang ","Tong ","Hong ","Yan ","Gai ","Xiang ","Shai ","Xiao ","Ye ","Yun ","Hui ","Han ","Han ","Jun ","Wan ","Xian ","Kun ","Zhou ","Xi ","Cheng ","Sheng ","Bu ","Zhe ","Zhe ","Wu ","Han ","Hui ","Hao ","Chen ","Wan ","Tian ","Zhuo ","Zui ","Zhou ","Pu ","Jing ","Xi ","Shan ","Yi ","Xi ","Qing ","Qi ","Jing ","Gui ","Zhen ","Yi ","Zhi ","An ","Wan ","Lin ","Liang ","Chang ","Wang ","Xiao ","Zan ","Hi ","Xuan ","Xuan ","Yi ","Xia ","Yun ","Hui ","Fu ","Min ","Kui ","He ","Ying ","Du ","Wei ","Shu ","Qing ","Mao ","Nan ","Jian ","Nuan ","An ","Yang ","Chun ","Yao ","Suo ","Jin ","Ming ","Jiao ","Kai ","Gao ","Weng ","Chang ","Qi ","Hao ","Yan ","Li ","Ai ","Ji ","Gui ","Men ","Zan ","Xie ","Hao ","Mu ","Mo ","Cong ","Ni ","Zhang ","Hui ","Bao ","Han ","Xuan ","Chuan ","Liao ","Xian ","Dan ","Jing ","Pie ","Lin ","Tun ","Xi ","Yi ","Ji ","Huang ","Tai ","Ye ","Ye ","Li ","Tan ","Tong ","Xiao ","Fei ","Qin ","Zhao ","Hao ","Yi ","Xiang ","Xing ","Sen ","Jiao ","Bao ","Jing ","Yian ","Ai ","Ye ","Ru ","Shu ","Meng ","Xun ","Yao ","Pu ","Li ","Chen ","Kuang ","Die ","[?] ","Yan ","Huo ","Lu ","Xi ","Rong ","Long ","Nang ","Luo ","Luan ","Shai ","Tang ","Yan ","Chu ","Yue ","Yue ","Qu ","Yi ","Geng ","Ye ","Hu ","He ","Shu ","Cao ","Cao ","Noboru ","Man ","Ceng ","Ceng ","Ti "]});var f8=y((R9e,p8)=>{p8.exports=["Zui ","Can ","Xu ","Hui ","Yin ","Qie ","Fen ","Pi ","Yue ","You ","Ruan ","Peng ","Ban ","Fu ","Ling ","Fei ","Qu ","[?] ","Nu ","Tiao ","Shuo ","Zhen ","Lang ","Lang ","Juan ","Ming ","Huang ","Wang ","Tun ","Zhao ","Ji ","Qi ","Ying ","Zong ","Wang ","Tong ","Lang ","[?] ","Meng ","Long ","Mu ","Deng ","Wei ","Mo ","Ben ","Zha ","Zhu ","Zhu ","[?] ","Zhu ","Ren ","Ba ","Po ","Duo ","Duo ","Dao ","Li ","Qiu ","Ji ","Jiu ","Bi ","Xiu ","Ting ","Ci ","Sha ","Eburi ","Za ","Quan ","Qian ","Yu ","Gan ","Wu ","Cha ","Shan ","Xun ","Fan ","Wu ","Zi ","Li ","Xing ","Cai ","Cun ","Ren ","Shao ","Tuo ","Di ","Zhang ","Mang ","Chi ","Yi ","Gu ","Gong ","Du ","Yi ","Qi ","Shu ","Gang ","Tiao ","Moku ","Soma ","Tochi ","Lai ","Sugi ","Mang ","Yang ","Ma ","Miao ","Si ","Yuan ","Hang ","Fei ","Bei ","Jie ","Dong ","Gao ","Yao ","Xian ","Chu ","Qun ","Pa ","Shu ","Hua ","Xin ","Chou ","Zhu ","Chou ","Song ","Ban ","Song ","Ji ","Yue ","Jin ","Gou ","Ji ","Mao ","Pi ","Bi ","Wang ","Ang ","Fang ","Fen ","Yi ","Fu ","Nan ","Xi ","Hu ","Ya ","Dou ","Xun ","Zhen ","Yao ","Lin ","Rui ","E ","Mei ","Zhao ","Guo ","Zhi ","Cong ","Yun ","Waku ","Dou ","Shu ","Zao ","[?] ","Li ","Haze ","Jian ","Cheng ","Matsu ","Qiang ","Feng ","Nan ","Xiao ","Xian ","Ku ","Ping ","Yi ","Xi ","Zhi ","Guai ","Xiao ","Jia ","Jia ","Gou ","Fu ","Mo ","Yi ","Ye ","Ye ","Shi ","Nie ","Bi ","Duo ","Yi ","Ling ","Bing ","Ni ","La ","He ","Pan ","Fan ","Zhong ","Dai ","Ci ","Yang ","Fu ","Bo ","Mou ","Gan ","Qi ","Ran ","Rou ","Mao ","Zhao ","Song ","Zhe ","Xia ","You ","Shen ","Ju ","Tuo ","Zuo ","Nan ","Ning ","Yong ","Di ","Zhi ","Zha ","Cha ","Dan ","Gu ","Pu ","Jiu ","Ao ","Fu ","Jian ","Bo ","Duo ","Ke ","Nai ","Zhu ","Bi ","Liu ","Chai ","Zha ","Si ","Zhu ","Pei ","Shi ","Guai ","Cha ","Yao ","Jue ","Jiu ","Shi "]});var b8=y((_9e,m8)=>{m8.exports=["Zhi ","Liu ","Mei ","Hoy ","Rong ","Zha ","[?] ","Biao ","Zhan ","Jie ","Long ","Dong ","Lu ","Sayng ","Li ","Lan ","Yong ","Shu ","Xun ","Shuan ","Qi ","Zhen ","Qi ","Li ","Yi ","Xiang ","Zhen ","Li ","Su ","Gua ","Kan ","Bing ","Ren ","Xiao ","Bo ","Ren ","Bing ","Zi ","Chou ","Yi ","Jie ","Xu ","Zhu ","Jian ","Zui ","Er ","Er ","You ","Fa ","Gong ","Kao ","Lao ","Zhan ","Li ","Yin ","Yang ","He ","Gen ","Zhi ","Chi ","Ge ","Zai ","Luan ","Fu ","Jie ","Hang ","Gui ","Tao ","Guang ","Wei ","Kuang ","Ru ","An ","An ","Juan ","Yi ","Zhuo ","Ku ","Zhi ","Qiong ","Tong ","Sang ","Sang ","Huan ","Jie ","Jiu ","Xue ","Duo ","Zhui ","Yu ","Zan ","Kasei ","Ying ","Masu ","[?] ","Zhan ","Ya ","Nao ","Zhen ","Dang ","Qi ","Qiao ","Hua ","Kuai ","Jiang ","Zhuang ","Xun ","Suo ","Sha ","Zhen ","Bei ","Ting ","Gua ","Jing ","Bo ","Ben ","Fu ","Rui ","Tong ","Jue ","Xi ","Lang ","Liu ","Feng ","Qi ","Wen ","Jun ","Gan ","Cu ","Liang ","Qiu ","Ting ","You ","Mei ","Bang ","Long ","Peng ","Zhuang ","Di ","Xuan ","Tu ","Zao ","Ao ","Gu ","Bi ","Di ","Han ","Zi ","Zhi ","Ren ","Bei ","Geng ","Jian ","Huan ","Wan ","Nuo ","Jia ","Tiao ","Ji ","Xiao ","Lu ","Huan ","Shao ","Cen ","Fen ","Song ","Meng ","Wu ","Li ","Li ","Dou ","Cen ","Ying ","Suo ","Ju ","Ti ","Jie ","Kun ","Zhuo ","Shu ","Chan ","Fan ","Wei ","Jing ","Li ","Bing ","Fumoto ","Shikimi ","Tao ","Zhi ","Lai ","Lian ","Jian ","Zhuo ","Ling ","Li ","Qi ","Bing ","Zhun ","Cong ","Qian ","Mian ","Qi ","Qi ","Cai ","Gun ","Chan ","Te ","Fei ","Pai ","Bang ","Pou ","Hun ","Zong ","Cheng ","Zao ","Ji ","Li ","Peng ","Yu ","Yu ","Gu ","Hun ","Dong ","Tang ","Gang ","Wang ","Di ","Xi ","Fan ","Cheng ","Zhan ","Qi ","Yuan ","Yan ","Yu ","Quan ","Yi ","Sen ","Ren ","Chui ","Leng ","Qi ","Zhuo ","Fu ","Ke ","Lai ","Zou ","Zou ","Zhuo ","Guan ","Fen ","Fen ","Chen ","Qiong ","Nie "]});var v8=y((L9e,y8)=>{y8.exports=["Wan ","Guo ","Lu ","Hao ","Jie ","Yi ","Chou ","Ju ","Ju ","Cheng ","Zuo ","Liang ","Qiang ","Zhi ","Zhui ","Ya ","Ju ","Bei ","Jiao ","Zhuo ","Zi ","Bin ","Peng ","Ding ","Chu ","Chang ","Kunugi ","Momiji ","Jian ","Gui ","Xi ","Du ","Qian ","Kunugi ","Soko ","Shide ","Luo ","Zhi ","Ken ","Myeng ","Tafu ","[?] ","Peng ","Zhan ","[?] ","Tuo ","Sen ","Duo ","Ye ","Fou ","Wei ","Wei ","Duan ","Jia ","Zong ","Jian ","Yi ","Shen ","Xi ","Yan ","Yan ","Chuan ","Zhan ","Chun ","Yu ","He ","Zha ","Wo ","Pian ","Bi ","Yao ","Huo ","Xu ","Ruo ","Yang ","La ","Yan ","Ben ","Hun ","Kui ","Jie ","Kui ","Si ","Feng ","Xie ","Tuo ","Zhi ","Jian ","Mu ","Mao ","Chu ","Hu ","Hu ","Lian ","Leng ","Ting ","Nan ","Yu ","You ","Mei ","Song ","Xuan ","Xuan ","Ying ","Zhen ","Pian ","Ye ","Ji ","Jie ","Ye ","Chu ","Shun ","Yu ","Cou ","Wei ","Mei ","Di ","Ji ","Jie ","Kai ","Qiu ","Ying ","Rou ","Heng ","Lou ","Le ","Hazou ","Katsura ","Pin ","Muro ","Gai ","Tan ","Lan ","Yun ","Yu ","Chen ","Lu ","Ju ","Sakaki ","[?] ","Pi ","Xie ","Jia ","Yi ","Zhan ","Fu ","Nai ","Mi ","Lang ","Rong ","Gu ","Jian ","Ju ","Ta ","Yao ","Zhen ","Bang ","Sha ","Yuan ","Zi ","Ming ","Su ","Jia ","Yao ","Jie ","Huang ","Gan ","Fei ","Zha ","Qian ","Ma ","Sun ","Yuan ","Xie ","Rong ","Shi ","Zhi ","Cui ","Yun ","Ting ","Liu ","Rong ","Tang ","Que ","Zhai ","Si ","Sheng ","Ta ","Ke ","Xi ","Gu ","Qi ","Kao ","Gao ","Sun ","Pan ","Tao ","Ge ","Xun ","Dian ","Nou ","Ji ","Shuo ","Gou ","Chui ","Qiang ","Cha ","Qian ","Huai ","Mei ","Xu ","Gang ","Gao ","Zhuo ","Tuo ","Hashi ","Yang ","Dian ","Jia ","Jian ","Zui ","Kashi ","Ori ","Bin ","Zhu ","[?] ","Xi ","Qi ","Lian ","Hui ","Yong ","Qian ","Guo ","Gai ","Gai ","Tuan ","Hua ","Cu ","Sen ","Cui ","Beng ","You ","Hu ","Jiang ","Hu ","Huan ","Kui ","Yi ","Nie ","Gao ","Kang ","Gui ","Gui ","Cao ","Man ","Jin "]});var x8=y((I9e,w8)=>{w8.exports=["Di ","Zhuang ","Le ","Lang ","Chen ","Cong ","Li ","Xiu ","Qing ","Shuang ","Fan ","Tong ","Guan ","Ji ","Suo ","Lei ","Lu ","Liang ","Mi ","Lou ","Chao ","Su ","Ke ","Shu ","Tang ","Biao ","Lu ","Jiu ","Shu ","Zha ","Shu ","Zhang ","Men ","Mo ","Niao ","Yang ","Tiao ","Peng ","Zhu ","Sha ","Xi ","Quan ","Heng ","Jian ","Cong ","[?] ","Hokuso ","Qiang ","Tara ","Ying ","Er ","Xin ","Zhi ","Qiao ","Zui ","Cong ","Pu ","Shu ","Hua ","Kui ","Zhen ","Zun ","Yue ","Zhan ","Xi ","Xun ","Dian ","Fa ","Gan ","Mo ","Wu ","Qiao ","Nao ","Lin ","Liu ","Qiao ","Xian ","Run ","Fan ","Zhan ","Tuo ","Lao ","Yun ","Shun ","Tui ","Cheng ","Tang ","Meng ","Ju ","Cheng ","Su ","Jue ","Jue ","Tan ","Hui ","Ji ","Nuo ","Xiang ","Tuo ","Ning ","Rui ","Zhu ","Chuang ","Zeng ","Fen ","Qiong ","Ran ","Heng ","Cen ","Gu ","Liu ","Lao ","Gao ","Chu ","Zusa ","Nude ","Ca ","San ","Ji ","Dou ","Shou ","Lu ","[?] ","[?] ","Yuan ","Ta ","Shu ","Jiang ","Tan ","Lin ","Nong ","Yin ","Xi ","Sui ","Shan ","Zui ","Xuan ","Cheng ","Gan ","Ju ","Zui ","Yi ","Qin ","Pu ","Yan ","Lei ","Feng ","Hui ","Dang ","Ji ","Sui ","Bo ","Bi ","Ding ","Chu ","Zhua ","Kuai ","Ji ","Jie ","Jia ","Qing ","Zhe ","Jian ","Qiang ","Dao ","Yi ","Biao ","Song ","She ","Lin ","Kunugi ","Cha ","Meng ","Yin ","Tao ","Tai ","Mian ","Qi ","Toan ","Bin ","Huo ","Ji ","Qian ","Mi ","Ning ","Yi ","Gao ","Jian ","Yin ","Er ","Qing ","Yan ","Qi ","Mi ","Zhao ","Gui ","Chun ","Ji ","Kui ","Po ","Deng ","Chu ","[?] ","Mian ","You ","Zhi ","Guang ","Qian ","Lei ","Lei ","Sa ","Lu ","Li ","Cuan ","Lu ","Mie ","Hui ","Ou ","Lu ","Jie ","Gao ","Du ","Yuan ","Li ","Fei ","Zhuo ","Sou ","Lian ","Tamo ","Chu ","[?] ","Zhu ","Lu ","Yan ","Li ","Zhu ","Chen ","Jie ","E ","Su ","Huai ","Nie ","Yu ","Long ","Lai ","[?] ","Xian ","Kwi ","Ju ","Xiao ","Ling ","Ying ","Jian ","Yin ","You ","Ying "]});var S8=y((F9e,C8)=>{C8.exports=["Xiang ","Nong ","Bo ","Chan ","Lan ","Ju ","Shuang ","She ","Wei ","Cong ","Quan ","Qu ","Cang ","[?] ","Yu ","Luo ","Li ","Zan ","Luan ","Dang ","Jue ","Em ","Lan ","Lan ","Zhu ","Lei ","Li ","Ba ","Nang ","Yu ","Ling ","Tsuki ","Qian ","Ci ","Huan ","Xin ","Yu ","Yu ","Qian ","Ou ","Xu ","Chao ","Chu ","Chi ","Kai ","Yi ","Jue ","Xi ","Xu ","Xia ","Yu ","Kuai ","Lang ","Kuan ","Shuo ","Xi ","Ai ","Yi ","Qi ","Hu ","Chi ","Qin ","Kuan ","Kan ","Kuan ","Kan ","Chuan ","Sha ","Gua ","Yin ","Xin ","Xie ","Yu ","Qian ","Xiao ","Yi ","Ge ","Wu ","Tan ","Jin ","Ou ","Hu ","Ti ","Huan ","Xu ","Pen ","Xi ","Xiao ","Xu ","Xi ","Sen ","Lian ","Chu ","Yi ","Kan ","Yu ","Chuo ","Huan ","Zhi ","Zheng ","Ci ","Bu ","Wu ","Qi ","Bu ","Bu ","Wai ","Ju ","Qian ","Chi ","Se ","Chi ","Se ","Zhong ","Sui ","Sui ","Li ","Cuo ","Yu ","Li ","Gui ","Dai ","Dai ","Si ","Jian ","Zhe ","Mo ","Mo ","Yao ","Mo ","Cu ","Yang ","Tian ","Sheng ","Dai ","Shang ","Xu ","Xun ","Shu ","Can ","Jue ","Piao ","Qia ","Qiu ","Su ","Qing ","Yun ","Lian ","Yi ","Fou ","Zhi ","Ye ","Can ","Hun ","Dan ","Ji ","Ye ","Zhen ","Yun ","Wen ","Chou ","Bin ","Ti ","Jin ","Shang ","Yin ","Diao ","Cu ","Hui ","Cuan ","Yi ","Dan ","Du ","Jiang ","Lian ","Bin ","Du ","Tsukusu ","Jian ","Shu ","Ou ","Duan ","Zhu ","Yin ","Qing ","Yi ","Sha ","Que ","Ke ","Yao ","Jun ","Dian ","Hui ","Hui ","Gu ","Que ","Ji ","Yi ","Ou ","Hui ","Duan ","Yi ","Xiao ","Wu ","Guan ","Mu ","Mei ","Mei ","Ai ","Zuo ","Du ","Yu ","Bi ","Bi ","Bi ","Pi ","Pi ","Bi ","Chan ","Mao ","[?] ","[?] ","Pu ","Mushiru ","Jia ","Zhan ","Sai ","Mu ","Tuo ","Xun ","Er ","Rong ","Xian ","Ju ","Mu ","Hao ","Qiu ","Dou ","Mushiru ","Tan ","Pei ","Ju ","Duo ","Cui ","Bi ","San ","[?] ","Mao ","Sui ","Yu ","Yu ","Tuo ","He ","Jian ","Ta ","San "]});var T8=y((j9e,D8)=>{D8.exports=["Lu ","Mu ","Li ","Tong ","Rong ","Chang ","Pu ","Luo ","Zhan ","Sao ","Zhan ","Meng ","Luo ","Qu ","Die ","Shi ","Di ","Min ","Jue ","Mang ","Qi ","Pie ","Nai ","Qi ","Dao ","Xian ","Chuan ","Fen ","Ri ","Nei ","[?] ","Fu ","Shen ","Dong ","Qing ","Qi ","Yin ","Xi ","Hai ","Yang ","An ","Ya ","Ke ","Qing ","Ya ","Dong ","Dan ","Lu ","Qing ","Yang ","Yun ","Yun ","Shui ","San ","Zheng ","Bing ","Yong ","Dang ","Shitamizu ","Le ","Ni ","Tun ","Fan ","Gui ","Ting ","Zhi ","Qiu ","Bin ","Ze ","Mian ","Cuan ","Hui ","Diao ","Yi ","Cha ","Zhuo ","Chuan ","Wan ","Fan ","Dai ","Xi ","Tuo ","Mang ","Qiu ","Qi ","Shan ","Pai ","Han ","Qian ","Wu ","Wu ","Xun ","Si ","Ru ","Gong ","Jiang ","Chi ","Wu ","Tsuchi ","[?] ","Tang ","Zhi ","Chi ","Qian ","Mi ","Yu ","Wang ","Qing ","Jing ","Rui ","Jun ","Hong ","Tai ","Quan ","Ji ","Bian ","Bian ","Gan ","Wen ","Zhong ","Fang ","Xiong ","Jue ","Hang ","Niou ","Qi ","Fen ","Xu ","Xu ","Qin ","Yi ","Wo ","Yun ","Yuan ","Hang ","Yan ","Chen ","Chen ","Dan ","You ","Dun ","Hu ","Huo ","Qie ","Mu ","Rou ","Mei ","Ta ","Mian ","Wu ","Chong ","Tian ","Bi ","Sha ","Zhi ","Pei ","Pan ","Zhui ","Za ","Gou ","Liu ","Mei ","Ze ","Feng ","Ou ","Li ","Lun ","Cang ","Feng ","Wei ","Hu ","Mo ","Mei ","Shu ","Ju ","Zan ","Tuo ","Tuo ","Tuo ","He ","Li ","Mi ","Yi ","Fa ","Fei ","You ","Tian ","Zhi ","Zhao ","Gu ","Zhan ","Yan ","Si ","Kuang ","Jiong ","Ju ","Xie ","Qiu ","Yi ","Jia ","Zhong ","Quan ","Bo ","Hui ","Mi ","Ben ","Zhuo ","Chu ","Le ","You ","Gu ","Hong ","Gan ","Fa ","Mao ","Si ","Hu ","Ping ","Ci ","Fan ","Chi ","Su ","Ning ","Cheng ","Ling ","Pao ","Bo ","Qi ","Si ","Ni ","Ju ","Yue ","Zhu ","Sheng ","Lei ","Xuan ","Xue ","Fu ","Pan ","Min ","Tai ","Yang ","Ji ","Yong ","Guan ","Beng ","Xue ","Long ","Lu ","[?] ","Bo ","Xie ","Po ","Ze ","Jing ","Yin "]});var P8=y((M9e,k8)=>{k8.exports=["Zhou ","Ji ","Yi ","Hui ","Hui ","Zui ","Cheng ","Yin ","Wei ","Hou ","Jian ","Yang ","Lie ","Si ","Ji ","Er ","Xing ","Fu ","Sa ","Suo ","Zhi ","Yin ","Wu ","Xi ","Kao ","Zhu ","Jiang ","Luo ","[?] ","An ","Dong ","Yi ","Mou ","Lei ","Yi ","Mi ","Quan ","Jin ","Mo ","Wei ","Xiao ","Xie ","Hong ","Xu ","Shuo ","Kuang ","Tao ","Qie ","Ju ","Er ","Zhou ","Ru ","Ping ","Xun ","Xiong ","Zhi ","Guang ","Huan ","Ming ","Huo ","Wa ","Qia ","Pai ","Wu ","Qu ","Liu ","Yi ","Jia ","Jing ","Qian ","Jiang ","Jiao ","Cheng ","Shi ","Zhuo ","Ce ","Pal ","Kuai ","Ji ","Liu ","Chan ","Hun ","Hu ","Nong ","Xun ","Jin ","Lie ","Qiu ","Wei ","Zhe ","Jun ","Han ","Bang ","Mang ","Zhuo ","You ","Xi ","Bo ","Dou ","Wan ","Hong ","Yi ","Pu ","Ying ","Lan ","Hao ","Lang ","Han ","Li ","Geng ","Fu ","Wu ","Lian ","Chun ","Feng ","Yi ","Yu ","Tong ","Lao ","Hai ","Jin ","Jia ","Chong ","Weng ","Mei ","Sui ","Cheng ","Pei ","Xian ","Shen ","Tu ","Kun ","Pin ","Nie ","Han ","Jing ","Xiao ","She ","Nian ","Tu ","Yong ","Xiao ","Xian ","Ting ","E ","Su ","Tun ","Juan ","Cen ","Ti ","Li ","Shui ","Si ","Lei ","Shui ","Tao ","Du ","Lao ","Lai ","Lian ","Wei ","Wo ","Yun ","Huan ","Di ","[?] ","Run ","Jian ","Zhang ","Se ","Fu ","Guan ","Xing ","Shou ","Shuan ","Ya ","Chuo ","Zhang ","Ye ","Kong ","Wo ","Han ","Tuo ","Dong ","He ","Wo ","Ju ","Gan ","Liang ","Hun ","Ta ","Zhuo ","Dian ","Qie ","De ","Juan ","Zi ","Xi ","Yao ","Qi ","Gu ","Guo ","Han ","Lin ","Tang ","Zhou ","Peng ","Hao ","Chang ","Shu ","Qi ","Fang ","Chi ","Lu ","Nao ","Ju ","Tao ","Cong ","Lei ","Zhi ","Peng ","Fei ","Song ","Tian ","Pi ","Dan ","Yu ","Ni ","Yu ","Lu ","Gan ","Mi ","Jing ","Ling ","Lun ","Yin ","Cui ","Qu ","Huai ","Yu ","Nian ","Shen ","Piao ","Chun ","Wa ","Yuan ","Lai ","Hun ","Qing ","Yan ","Qian ","Tian ","Miao ","Zhi ","Yin ","Mi "]});var R8=y((O9e,E8)=>{E8.exports=["Ben ","Yuan ","Wen ","Re ","Fei ","Qing ","Yuan ","Ke ","Ji ","She ","Yuan ","Shibui ","Lu ","Zi ","Du ","[?] ","Jian ","Min ","Pi ","Tani ","Yu ","Yuan ","Shen ","Shen ","Rou ","Huan ","Zhu ","Jian ","Nuan ","Yu ","Qiu ","Ting ","Qu ","Du ","Feng ","Zha ","Bo ","Wo ","Wo ","Di ","Wei ","Wen ","Ru ","Xie ","Ce ","Wei ","Ge ","Gang ","Yan ","Hong ","Xuan ","Mi ","Ke ","Mao ","Ying ","Yan ","You ","Hong ","Miao ","Xing ","Mei ","Zai ","Hun ","Nai ","Kui ","Shi ","E ","Pai ","Mei ","Lian ","Qi ","Qi ","Mei ","Tian ","Cou ","Wei ","Can ","Tuan ","Mian ","Hui ","Mo ","Xu ","Ji ","Pen ","Jian ","Jian ","Hu ","Feng ","Xiang ","Yi ","Yin ","Zhan ","Shi ","Jie ","Cheng ","Huang ","Tan ","Yu ","Bi ","Min ","Shi ","Tu ","Sheng ","Yong ","Qu ","Zhong ","Suei ","Jiu ","Jiao ","Qiou ","Yin ","Tang ","Long ","Huo ","Yuan ","Nan ","Ban ","You ","Quan ","Chui ","Liang ","Chan ","Yan ","Chun ","Nie ","Zi ","Wan ","Shi ","Man ","Ying ","Ratsu ","Kui ","[?] ","Jian ","Xu ","Lu ","Gui ","Gai ","[?] ","[?] ","Po ","Jin ","Gui ","Tang ","Yuan ","Suo ","Yuan ","Lian ","Yao ","Meng ","Zhun ","Sheng ","Ke ","Tai ","Da ","Wa ","Liu ","Gou ","Sao ","Ming ","Zha ","Shi ","Yi ","Lun ","Ma ","Pu ","Wei ","Li ","Cai ","Wu ","Xi ","Wen ","Qiang ","Ze ","Shi ","Su ","Yi ","Zhen ","Sou ","Yun ","Xiu ","Yin ","Rong ","Hun ","Su ","Su ","Ni ","Ta ","Shi ","Ru ","Wei ","Pan ","Chu ","Chu ","Pang ","Weng ","Cang ","Mie ","He ","Dian ","Hao ","Huang ","Xi ","Zi ","Di ","Zhi ","Ying ","Fu ","Jie ","Hua ","Ge ","Zi ","Tao ","Teng ","Sui ","Bi ","Jiao ","Hui ","Gun ","Yin ","Gao ","Long ","Zhi ","Yan ","She ","Man ","Ying ","Chun ","Lu ","Lan ","Luan ","[?] ","Bin ","Tan ","Yu ","Sou ","Hu ","Bi ","Biao ","Zhi ","Jiang ","Kou ","Shen ","Shang ","Di ","Mi ","Ao ","Lu ","Hu ","Hu ","You ","Chan ","Fan ","Yong ","Gun ","Man "]});var L8=y((A9e,_8)=>{_8.exports=["Qing ","Yu ","Piao ","Ji ","Ya ","Jiao ","Qi ","Xi ","Ji ","Lu ","Lu ","Long ","Jin ","Guo ","Cong ","Lou ","Zhi ","Gai ","Qiang ","Li ","Yan ","Cao ","Jiao ","Cong ","Qun ","Tuan ","Ou ","Teng ","Ye ","Xi ","Mi ","Tang ","Mo ","Shang ","Han ","Lian ","Lan ","Wa ","Li ","Qian ","Feng ","Xuan ","Yi ","Man ","Zi ","Mang ","Kang ","Lei ","Peng ","Shu ","Zhang ","Zhang ","Chong ","Xu ","Huan ","Kuo ","Jian ","Yan ","Chuang ","Liao ","Cui ","Ti ","Yang ","Jiang ","Cong ","Ying ","Hong ","Xun ","Shu ","Guan ","Ying ","Xiao ","[?] ","[?] ","Xu ","Lian ","Zhi ","Wei ","Pi ","Jue ","Jiao ","Po ","Dang ","Hui ","Jie ","Wu ","Pa ","Ji ","Pan ","Gui ","Xiao ","Qian ","Qian ","Xi ","Lu ","Xi ","Xuan ","Dun ","Huang ","Min ","Run ","Su ","Liao ","Zhen ","Zhong ","Yi ","Di ","Wan ","Dan ","Tan ","Chao ","Xun ","Kui ","Yie ","Shao ","Tu ","Zhu ","San ","Hei ","Bi ","Shan ","Chan ","Chan ","Shu ","Tong ","Pu ","Lin ","Wei ","Se ","Se ","Cheng ","Jiong ","Cheng ","Hua ","Jiao ","Lao ","Che ","Gan ","Cun ","Heng ","Si ","Shu ","Peng ","Han ","Yun ","Liu ","Hong ","Fu ","Hao ","He ","Xian ","Jian ","Shan ","Xi ","Oki ","[?] ","Lan ","[?] ","Yu ","Lin ","Min ","Zao ","Dang ","Wan ","Ze ","Xie ","Yu ","Li ","Shi ","Xue ","Ling ","Man ","Zi ","Yong ","Kuai ","Can ","Lian ","Dian ","Ye ","Ao ","Huan ","Zhen ","Chan ","Man ","Dan ","Dan ","Yi ","Sui ","Pi ","Ju ","Ta ","Qin ","Ji ","Zhuo ","Lian ","Nong ","Guo ","Jin ","Fen ","Se ","Ji ","Sui ","Hui ","Chu ","Ta ","Song ","Ding ","[?] ","Zhu ","Lai ","Bin ","Lian ","Mi ","Shi ","Shu ","Mi ","Ning ","Ying ","Ying ","Meng ","Jin ","Qi ","Pi ","Ji ","Hao ","Ru ","Zui ","Wo ","Tao ","Yin ","Yin ","Dui ","Ci ","Huo ","Jing ","Lan ","Jun ","Ai ","Pu ","Zhuo ","Wei ","Bin ","Gu ","Qian ","Xing ","Hama ","Kuo ","Fei ","[?] ","Boku ","Jian ","Wei ","Luo ","Zan ","Lu ","Li "]});var F8=y((N9e,I8)=>{I8.exports=["You ","Yang ","Lu ","Si ","Jie ","Ying ","Du ","Wang ","Hui ","Xie ","Pan ","Shen ","Biao ","Chan ","Mo ","Liu ","Jian ","Pu ","Se ","Cheng ","Gu ","Bin ","Huo ","Xian ","Lu ","Qin ","Han ","Ying ","Yong ","Li ","Jing ","Xiao ","Ying ","Sui ","Wei ","Xie ","Huai ","Hao ","Zhu ","Long ","Lai ","Dui ","Fan ","Hu ","Lai ","[?] ","[?] ","Ying ","Mi ","Ji ","Lian ","Jian ","Ying ","Fen ","Lin ","Yi ","Jian ","Yue ","Chan ","Dai ","Rang ","Jian ","Lan ","Fan ","Shuang ","Yuan ","Zhuo ","Feng ","She ","Lei ","Lan ","Cong ","Qu ","Yong ","Qian ","Fa ","Guan ","Que ","Yan ","Hao ","Hyeng ","Sa ","Zan ","Luan ","Yan ","Li ","Mi ","Shan ","Tan ","Dang ","Jiao ","Chan ","[?] ","Hao ","Ba ","Zhu ","Lan ","Lan ","Nang ","Wan ","Luan ","Xun ","Xian ","Yan ","Gan ","Yan ","Yu ","Huo ","Si ","Mie ","Guang ","Deng ","Hui ","Xiao ","Xiao ","Hu ","Hong ","Ling ","Zao ","Zhuan ","Jiu ","Zha ","Xie ","Chi ","Zhuo ","Zai ","Zai ","Can ","Yang ","Qi ","Zhong ","Fen ","Niu ","Jiong ","Wen ","Po ","Yi ","Lu ","Chui ","Pi ","Kai ","Pan ","Yan ","Kai ","Pang ","Mu ","Chao ","Liao ","Gui ","Kang ","Tun ","Guang ","Xin ","Zhi ","Guang ","Guang ","Wei ","Qiang ","[?] ","Da ","Xia ","Zheng ","Zhu ","Ke ","Zhao ","Fu ","Ba ","Duo ","Duo ","Ling ","Zhuo ","Xuan ","Ju ","Tan ","Pao ","Jiong ","Pao ","Tai ","Tai ","Bing ","Yang ","Tong ","Han ","Zhu ","Zha ","Dian ","Wei ","Shi ","Lian ","Chi ","Huang ","[?] ","Hu ","Shuo ","Lan ","Jing ","Jiao ","Xu ","Xing ","Quan ","Lie ","Huan ","Yang ","Xiao ","Xiu ","Xian ","Yin ","Wu ","Zhou ","Yao ","Shi ","Wei ","Tong ","Xue ","Zai ","Kai ","Hong ","Luo ","Xia ","Zhu ","Xuan ","Zheng ","Po ","Yan ","Hui ","Guang ","Zhe ","Hui ","Kao ","[?] ","Fan ","Shao ","Ye ","Hui ","[?] ","Tang ","Jin ","Re ","[?] ","Xi ","Fu ","Jiong ","Che ","Pu ","Jing ","Zhuo ","Ting ","Wan ","Hai ","Peng ","Lang ","Shan ","Hu ","Feng ","Chi ","Rong "]});var M8=y((H9e,j8)=>{j8.exports=["Hu ","Xi ","Shu ","He ","Xun ","Ku ","Jue ","Xiao ","Xi ","Yan ","Han ","Zhuang ","Jun ","Di ","Xie ","Ji ","Wu ","[?] ","[?] ","Han ","Yan ","Huan ","Men ","Ju ","Chou ","Bei ","Fen ","Lin ","Kun ","Hun ","Tun ","Xi ","Cui ","Wu ","Hong ","Ju ","Fu ","Wo ","Jiao ","Cong ","Feng ","Ping ","Qiong ","Ruo ","Xi ","Qiong ","Xin ","Zhuo ","Yan ","Yan ","Yi ","Jue ","Yu ","Gang ","Ran ","Pi ","Gu ","[?] ","Sheng ","Chang ","Shao ","[?] ","[?] ","[?] ","[?] ","Chen ","He ","Kui ","Zhong ","Duan ","Xia ","Hui ","Feng ","Lian ","Xuan ","Xing ","Huang ","Jiao ","Jian ","Bi ","Ying ","Zhu ","Wei ","Tuan ","Tian ","Xi ","Nuan ","Nuan ","Chan ","Yan ","Jiong ","Jiong ","Yu ","Mei ","Sha ","Wei ","Ye ","Xin ","Qiong ","Rou ","Mei ","Huan ","Xu ","Zhao ","Wei ","Fan ","Qiu ","Sui ","Yang ","Lie ","Zhu ","Jie ","Gao ","Gua ","Bao ","Hu ","Yun ","Xia ","[?] ","[?] ","Bian ","Gou ","Tui ","Tang ","Chao ","Shan ","N ","Bo ","Huang ","Xie ","Xi ","Wu ","Xi ","Yun ","He ","He ","Xi ","Yun ","Xiong ","Nai ","Shan ","Qiong ","Yao ","Xun ","Mi ","Lian ","Ying ","Wen ","Rong ","Oozutsu ","[?] ","Qiang ","Liu ","Xi ","Bi ","Biao ","Zong ","Lu ","Jian ","Shou ","Yi ","Lou ","Feng ","Sui ","Yi ","Tong ","Jue ","Zong ","Yun ","Hu ","Yi ","Zhi ","Ao ","Wei ","Liao ","Han ","Ou ","Re ","Jiong ","Man ","[?] ","Shang ","Cuan ","Zeng ","Jian ","Xi ","Xi ","Xi ","Yi ","Xiao ","Chi ","Huang ","Chan ","Ye ","Qian ","Ran ","Yan ","Xian ","Qiao ","Zun ","Deng ","Dun ","Shen ","Jiao ","Fen ","Si ","Liao ","Yu ","Lin ","Tong ","Shao ","Fen ","Fan ","Yan ","Xun ","Lan ","Mei ","Tang ","Yi ","Jing ","Men ","[?] ","[?] ","Ying ","Yu ","Yi ","Xue ","Lan ","Tai ","Zao ","Can ","Sui ","Xi ","Que ","Cong ","Lian ","Hui ","Zhu ","Xie ","Ling ","Wei ","Yi ","Xie ","Zhao ","Hui ","Tatsu ","Nung ","Lan ","Ru ","Xian ","Kao ","Xun ","Jin ","Chou ","Chou ","Yao "]});var A8=y((q9e,O8)=>{O8.exports=["He ","Lan ","Biao ","Rong ","Li ","Mo ","Bao ","Ruo ","Lu ","La ","Ao ","Xun ","Kuang ","Shuo ","[?] ","Li ","Lu ","Jue ","Liao ","Yan ","Xi ","Xie ","Long ","Ye ","[?] ","Rang ","Yue ","Lan ","Cong ","Jue ","Tong ","Guan ","[?] ","Che ","Mi ","Tang ","Lan ","Zhu ","[?] ","Ling ","Cuan ","Yu ","Zhua ","Tsumekanmuri ","Pa ","Zheng ","Pao ","Cheng ","Yuan ","Ai ","Wei ","[?] ","Jue ","Jue ","Fu ","Ye ","Ba ","Die ","Ye ","Yao ","Zu ","Shuang ","Er ","Qiang ","Chuang ","Ge ","Zang ","Die ","Qiang ","Yong ","Qiang ","Pian ","Ban ","Pan ","Shao ","Jian ","Pai ","Du ","Chuang ","Tou ","Zha ","Bian ","Die ","Bang ","Bo ","Chuang ","You ","[?] ","Du ","Ya ","Cheng ","Niu ","Ushihen ","Pin ","Jiu ","Mou ","Tuo ","Mu ","Lao ","Ren ","Mang ","Fang ","Mao ","Mu ","Gang ","Wu ","Yan ","Ge ","Bei ","Si ","Jian ","Gu ","You ","Ge ","Sheng ","Mu ","Di ","Qian ","Quan ","Quan ","Zi ","Te ","Xi ","Mang ","Keng ","Qian ","Wu ","Gu ","Xi ","Li ","Li ","Pou ","Ji ","Gang ","Zhi ","Ben ","Quan ","Run ","Du ","Ju ","Jia ","Jian ","Feng ","Pian ","Ke ","Ju ","Kao ","Chu ","Xi ","Bei ","Luo ","Jie ","Ma ","San ","Wei ","Li ","Dun ","Tong ","[?] ","Jiang ","Ikenie ","Li ","Du ","Lie ","Pi ","Piao ","Bao ","Xi ","Chou ","Wei ","Kui ","Chou ","Quan ","Fan ","Ba ","Fan ","Qiu ","Ji ","Cai ","Chuo ","An ","Jie ","Zhuang ","Guang ","Ma ","You ","Kang ","Bo ","Hou ","Ya ","Yin ","Huan ","Zhuang ","Yun ","Kuang ","Niu ","Di ","Qing ","Zhong ","Mu ","Bei ","Pi ","Ju ","Ni ","Sheng ","Pao ","Xia ","Tuo ","Hu ","Ling ","Fei ","Pi ","Ni ","Ao ","You ","Gou ","Yue ","Ju ","Dan ","Po ","Gu ","Xian ","Ning ","Huan ","Hen ","Jiao ","He ","Zhao ","Ji ","Xun ","Shan ","Ta ","Rong ","Shou ","Tong ","Lao ","Du ","Xia ","Shi ","Hua ","Zheng ","Yu ","Sun ","Yu ","Bi ","Mang ","Xi ","Juan ","Li ","Xia ","Yin ","Suan ","Lang ","Bei ","Zhi ","Yan "]});var H8=y((B9e,N8)=>{N8.exports=["Sha ","Li ","Han ","Xian ","Jing ","Pai ","Fei ","Yao ","Ba ","Qi ","Ni ","Biao ","Yin ","Lai ","Xi ","Jian ","Qiang ","Kun ","Yan ","Guo ","Zong ","Mi ","Chang ","Yi ","Zhi ","Zheng ","Ya ","Meng ","Cai ","Cu ","She ","Kari ","Cen ","Luo ","Hu ","Zong ","Ji ","Wei ","Feng ","Wo ","Yuan ","Xing ","Zhu ","Mao ","Wei ","Yuan ","Xian ","Tuan ","Ya ","Nao ","Xie ","Jia ","Hou ","Bian ","You ","You ","Mei ","Zha ","Yao ","Sun ","Bo ","Ming ","Hua ","Yuan ","Sou ","Ma ","Yuan ","Dai ","Yu ","Shi ","Hao ","[?] ","Yi ","Zhen ","Chuang ","Hao ","Man ","Jing ","Jiang ","Mu ","Zhang ","Chan ","Ao ","Ao ","Hao ","Cui ","Fen ","Jue ","Bi ","Bi ","Huang ","Pu ","Lin ","Yu ","Tong ","Yao ","Liao ","Shuo ","Xiao ","Swu ","Ton ","Xi ","Ge ","Juan ","Du ","Hui ","Kuai ","Xian ","Xie ","Ta ","Xian ","Xun ","Ning ","Pin ","Huo ","Nou ","Meng ","Lie ","Nao ","Guang ","Shou ","Lu ","Ta ","Xian ","Mi ","Rang ","Huan ","Nao ","Luo ","Xian ","Qi ","Jue ","Xuan ","Miao ","Zi ","Lu ","Lu ","Yu ","Su ","Wang ","Qiu ","Ga ","Ding ","Le ","Ba ","Ji ","Hong ","Di ","Quan ","Gan ","Jiu ","Yu ","Ji ","Yu ","Yang ","Ma ","Gong ","Wu ","Fu ","Wen ","Jie ","Ya ","Fen ","Bian ","Beng ","Yue ","Jue ","Yun ","Jue ","Wan ","Jian ","Mei ","Dan ","Pi ","Wei ","Huan ","Xian ","Qiang ","Ling ","Dai ","Yi ","An ","Ping ","Dian ","Fu ","Xuan ","Xi ","Bo ","Ci ","Gou ","Jia ","Shao ","Po ","Ci ","Ke ","Ran ","Sheng ","Shen ","Yi ","Zu ","Jia ","Min ","Shan ","Liu ","Bi ","Zhen ","Zhen ","Jue ","Fa ","Long ","Jin ","Jiao ","Jian ","Li ","Guang ","Xian ","Zhou ","Gong ","Yan ","Xiu ","Yang ","Xu ","Luo ","Su ","Zhu ","Qin ","Ken ","Xun ","Bao ","Er ","Xiang ","Yao ","Xia ","Heng ","Gui ","Chong ","Xu ","Ban ","Pei ","[?] ","Dang ","Ei ","Hun ","Wen ","E ","Cheng ","Ti ","Wu ","Wu ","Cheng ","Jun ","Mei ","Bei ","Ting ","Xian ","Chuo "]});var B8=y((W9e,q8)=>{q8.exports=["Han ","Xuan ","Yan ","Qiu ","Quan ","Lang ","Li ","Xiu ","Fu ","Liu ","Ye ","Xi ","Ling ","Li ","Jin ","Lian ","Suo ","Chiisai ","[?] ","Wan ","Dian ","Pin ","Zhan ","Cui ","Min ","Yu ","Ju ","Chen ","Lai ","Wen ","Sheng ","Wei ","Dian ","Chu ","Zhuo ","Pei ","Cheng ","Hu ","Qi ","E ","Kun ","Chang ","Qi ","Beng ","Wan ","Lu ","Cong ","Guan ","Yan ","Diao ","Bei ","Lin ","Qin ","Pi ","Pa ","Que ","Zhuo ","Qin ","Fa ","[?] ","Qiong ","Du ","Jie ","Hun ","Yu ","Mao ","Mei ","Chun ","Xuan ","Ti ","Xing ","Dai ","Rou ","Min ","Zhen ","Wei ","Ruan ","Huan ","Jie ","Chuan ","Jian ","Zhuan ","Yang ","Lian ","Quan ","Xia ","Duan ","Yuan ","Ye ","Nao ","Hu ","Ying ","Yu ","Huang ","Rui ","Se ","Liu ","Shi ","Rong ","Suo ","Yao ","Wen ","Wu ","Jin ","Jin ","Ying ","Ma ","Tao ","Liu ","Tang ","Li ","Lang ","Gui ","Zhen ","Qiang ","Cuo ","Jue ","Zhao ","Yao ","Ai ","Bin ","Tu ","Chang ","Kun ","Zhuan ","Cong ","Jin ","Yi ","Cui ","Cong ","Qi ","Li ","Ying ","Suo ","Qiu ","Xuan ","Ao ","Lian ","Man ","Zhang ","Yin ","[?] ","Ying ","Zhi ","Lu ","Wu ","Deng ","Xiou ","Zeng ","Xun ","Qu ","Dang ","Lin ","Liao ","Qiong ","Su ","Huang ","Gui ","Pu ","Jing ","Fan ","Jin ","Liu ","Ji ","[?] ","Jing ","Ai ","Bi ","Can ","Qu ","Zao ","Dang ","Jiao ","Gun ","Tan ","Hui ","Huan ","Se ","Sui ","Tian ","[?] ","Yu ","Jin ","Lu ","Bin ","Shou ","Wen ","Zui ","Lan ","Xi ","Ji ","Xuan ","Ruan ","Huo ","Gai ","Lei ","Du ","Li ","Zhi ","Rou ","Li ","Zan ","Qiong ","Zhe ","Gui ","Sui ","La ","Long ","Lu ","Li ","Zan ","Lan ","Ying ","Mi ","Xiang ","Xi ","Guan ","Dao ","Zan ","Huan ","Gua ","Bo ","Die ","Bao ","Hu ","Zhi ","Piao ","Ban ","Rang ","Li ","Wa ","Dekaguramu ","Jiang ","Qian ","Fan ","Pen ","Fang ","Dan ","Weng ","Ou ","Deshiguramu ","Miriguramu ","Thon ","Hu ","Ling ","Yi ","Ping ","Ci ","Hekutogura ","Juan ","Chang ","Chi ","Sarake ","Dang ","Meng ","Pou "]});var Y8=y((Y9e,W8)=>{W8.exports=["Zhui ","Ping ","Bian ","Zhou ","Zhen ","Senchigura ","Ci ","Ying ","Qi ","Xian ","Lou ","Di ","Ou ","Meng ","Zhuan ","Peng ","Lin ","Zeng ","Wu ","Pi ","Dan ","Weng ","Ying ","Yan ","Gan ","Dai ","Shen ","Tian ","Tian ","Han ","Chang ","Sheng ","Qing ","Sheng ","Chan ","Chan ","Rui ","Sheng ","Su ","Sen ","Yong ","Shuai ","Lu ","Fu ","Yong ","Beng ","Feng ","Ning ","Tian ","You ","Jia ","Shen ","Zha ","Dian ","Fu ","Nan ","Dian ","Ping ","Ting ","Hua ","Ting ","Quan ","Zi ","Meng ","Bi ","Qi ","Liu ","Xun ","Liu ","Chang ","Mu ","Yun ","Fan ","Fu ","Geng ","Tian ","Jie ","Jie ","Quan ","Wei ","Fu ","Tian ","Mu ","Tap ","Pan ","Jiang ","Wa ","Da ","Nan ","Liu ","Ben ","Zhen ","Chu ","Mu ","Mu ","Ce ","Cen ","Gai ","Bi ","Da ","Zhi ","Lue ","Qi ","Lue ","Pan ","Kesa ","Fan ","Hua ","Yu ","Yu ","Mu ","Jun ","Yi ","Liu ","Yu ","Die ","Chou ","Hua ","Dang ","Chuo ","Ji ","Wan ","Jiang ","Sheng ","Chang ","Tuan ","Lei ","Ji ","Cha ","Liu ","Tatamu ","Tuan ","Lin ","Jiang ","Jiang ","Chou ","Bo ","Die ","Die ","Pi ","Nie ","Dan ","Shu ","Shu ","Zhi ","Yi ","Chuang ","Nai ","Ding ","Bi ","Jie ","Liao ","Gong ","Ge ","Jiu ","Zhou ","Xia ","Shan ","Xu ","Nue ","Li ","Yang ","Chen ","You ","Ba ","Jie ","Jue ","Zhi ","Xia ","Cui ","Bi ","Yi ","Li ","Zong ","Chuang ","Feng ","Zhu ","Pao ","Pi ","Gan ","Ke ","Ci ","Xie ","Qi ","Dan ","Zhen ","Fa ","Zhi ","Teng ","Ju ","Ji ","Fei ","Qu ","Dian ","Jia ","Xian ","Cha ","Bing ","Ni ","Zheng ","Yong ","Jing ","Quan ","Chong ","Tong ","Yi ","Kai ","Wei ","Hui ","Duo ","Yang ","Chi ","Zhi ","Hen ","Ya ","Mei ","Dou ","Jing ","Xiao ","Tong ","Tu ","Mang ","Pi ","Xiao ","Suan ","Pu ","Li ","Zhi ","Cuo ","Duo ","Wu ","Sha ","Lao ","Shou ","Huan ","Xian ","Yi ","Peng ","Zhang ","Guan ","Tan ","Fei ","Ma ","Lin ","Chi ","Ji ","Dian ","An ","Chi ","Bi ","Bei ","Min ","Gu ","Dui ","E ","Wei "]});var J8=y((Z9e,Z8)=>{Z8.exports=["Yu ","Cui ","Ya ","Zhu ","Cu ","Dan ","Shen ","Zhung ","Ji ","Yu ","Hou ","Feng ","La ","Yang ","Shen ","Tu ","Yu ","Gua ","Wen ","Huan ","Ku ","Jia ","Yin ","Yi ","Lu ","Sao ","Jue ","Chi ","Xi ","Guan ","Yi ","Wen ","Ji ","Chuang ","Ban ","Lei ","Liu ","Chai ","Shou ","Nue ","Dian ","Da ","Pie ","Tan ","Zhang ","Biao ","Shen ","Cu ","Luo ","Yi ","Zong ","Chou ","Zhang ","Zhai ","Sou ","Suo ","Que ","Diao ","Lou ","Lu ","Mo ","Jin ","Yin ","Ying ","Huang ","Fu ","Liao ","Long ","Qiao ","Liu ","Lao ","Xian ","Fei ","Dan ","Yin ","He ","Yan ","Ban ","Xian ","Guan ","Guai ","Nong ","Yu ","Wei ","Yi ","Yong ","Pi ","Lei ","Li ","Shu ","Dan ","Lin ","Dian ","Lin ","Lai ","Pie ","Ji ","Chi ","Yang ","Xian ","Jie ","Zheng ","[?] ","Li ","Huo ","Lai ","Shaku ","Dian ","Xian ","Ying ","Yin ","Qu ","Yong ","Tan ","Dian ","Luo ","Luan ","Luan ","Bo ","[?] ","Gui ","Po ","Fa ","Deng ","Fa ","Bai ","Bai ","Qie ","Bi ","Zao ","Zao ","Mao ","De ","Pa ","Jie ","Huang ","Gui ","Ci ","Ling ","Gao ","Mo ","Ji ","Jiao ","Peng ","Gao ","Ai ","E ","Hao ","Han ","Bi ","Wan ","Chou ","Qian ","Xi ","Ai ","Jiong ","Hao ","Huang ","Hao ","Ze ","Cui ","Hao ","Xiao ","Ye ","Po ","Hao ","Jiao ","Ai ","Xing ","Huang ","Li ","Piao ","He ","Jiao ","Pi ","Gan ","Pao ","Zhou ","Jun ","Qiu ","Cun ","Que ","Zha ","Gu ","Jun ","Jun ","Zhou ","Zha ","Gu ","Zhan ","Du ","Min ","Qi ","Ying ","Yu ","Bei ","Zhao ","Zhong ","Pen ","He ","Ying ","He ","Yi ","Bo ","Wan ","He ","Ang ","Zhan ","Yan ","Jian ","He ","Yu ","Kui ","Fan ","Gai ","Dao ","Pan ","Fu ","Qiu ","Sheng ","Dao ","Lu ","Zhan ","Meng ","Li ","Jin ","Xu ","Jian ","Pan ","Guan ","An ","Lu ","Shu ","Zhou ","Dang ","An ","Gu ","Li ","Mu ","Cheng ","Gan ","Xu ","Mang ","Mang ","Zhi ","Qi ","Ruan ","Tian ","Xiang ","Dun ","Xin ","Xi ","Pan ","Feng ","Dun ","Min "]});var U8=y((J9e,$8)=>{$8.exports=["Ming ","Sheng ","Shi ","Yun ","Mian ","Pan ","Fang ","Miao ","Dan ","Mei ","Mao ","Kan ","Xian ","Ou ","Shi ","Yang ","Zheng ","Yao ","Shen ","Huo ","Da ","Zhen ","Kuang ","Ju ","Shen ","Chi ","Sheng ","Mei ","Mo ","Zhu ","Zhen ","Zhen ","Mian ","Di ","Yuan ","Die ","Yi ","Zi ","Zi ","Chao ","Zha ","Xuan ","Bing ","Mi ","Long ","Sui ","Dong ","Mi ","Die ","Yi ","Er ","Ming ","Xuan ","Chi ","Kuang ","Juan ","Mou ","Zhen ","Tiao ","Yang ","Yan ","Mo ","Zhong ","Mai ","Zhao ","Zheng ","Mei ","Jun ","Shao ","Han ","Huan ","Di ","Cheng ","Cuo ","Juan ","E ","Wan ","Xian ","Xi ","Kun ","Lai ","Jian ","Shan ","Tian ","Hun ","Wan ","Ling ","Shi ","Qiong ","Lie ","Yai ","Jing ","Zheng ","Li ","Lai ","Sui ","Juan ","Shui ","Sui ","Du ","Bi ","Bi ","Mu ","Hun ","Ni ","Lu ","Yi ","Jie ","Cai ","Zhou ","Yu ","Hun ","Ma ","Xia ","Xing ","Xi ","Gun ","Cai ","Chun ","Jian ","Mei ","Du ","Hou ","Xuan ","Ti ","Kui ","Gao ","Rui ","Mou ","Xu ","Fa ","Wen ","Miao ","Chou ","Kui ","Mi ","Weng ","Kou ","Dang ","Chen ","Ke ","Sou ","Xia ","Qiong ","Mao ","Ming ","Man ","Shui ","Ze ","Zhang ","Yi ","Diao ","Ou ","Mo ","Shun ","Cong ","Lou ","Chi ","Man ","Piao ","Cheng ","Ji ","Meng ","[?] ","Run ","Pie ","Xi ","Qiao ","Pu ","Zhu ","Deng ","Shen ","Shun ","Liao ","Che ","Xian ","Kan ","Ye ","Xu ","Tong ","Mou ","Lin ","Kui ","Xian ","Ye ","Ai ","Hui ","Zhan ","Jian ","Gu ","Zhao ","Qu ","Wei ","Chou ","Sao ","Ning ","Xun ","Yao ","Huo ","Meng ","Mian ","Bin ","Mian ","Li ","Kuang ","Jue ","Xuan ","Mian ","Huo ","Lu ","Meng ","Long ","Guan ","Man ","Xi ","Chu ","Tang ","Kan ","Zhu ","Mao ","Jin ","Lin ","Yu ","Shuo ","Ce ","Jue ","Shi ","Yi ","Shen ","Zhi ","Hou ","Shen ","Ying ","Ju ","Zhou ","Jiao ","Cuo ","Duan ","Ai ","Jiao ","Zeng ","Huo ","Bai ","Shi ","Ding ","Qi ","Ji ","Zi ","Gan ","Wu ","Tuo ","Ku ","Qiang ","Xi ","Fan ","Kuang "]});var G8=y(($9e,X8)=>{X8.exports=["Dang ","Ma ","Sha ","Dan ","Jue ","Li ","Fu ","Min ","Nuo ","Huo ","Kang ","Zhi ","Qi ","Kan ","Jie ","Fen ","E ","Ya ","Pi ","Zhe ","Yan ","Sui ","Zhuan ","Che ","Dun ","Pan ","Yan ","[?] ","Feng ","Fa ","Mo ","Zha ","Qu ","Yu ","Luo ","Tuo ","Tuo ","Di ","Zhai ","Zhen ","Ai ","Fei ","Mu ","Zhu ","Li ","Bian ","Nu ","Ping ","Peng ","Ling ","Pao ","Le ","Po ","Bo ","Po ","Shen ","Za ","Nuo ","Li ","Long ","Tong ","[?] ","Li ","Aragane ","Chu ","Keng ","Quan ","Zhu ","Kuang ","Huo ","E ","Nao ","Jia ","Lu ","Wei ","Ai ","Luo ","Ken ","Xing ","Yan ","Tong ","Peng ","Xi ","[?] ","Hong ","Shuo ","Xia ","Qiao ","[?] ","Wei ","Qiao ","[?] ","Keng ","Xiao ","Que ","Chan ","Lang ","Hong ","Yu ","Xiao ","Xia ","Mang ","Long ","Iong ","Che ","Che ","E ","Liu ","Ying ","Mang ","Que ","Yan ","Sha ","Kun ","Yu ","[?] ","Kaki ","Lu ","Chen ","Jian ","Nue ","Song ","Zhuo ","Keng ","Peng ","Yan ","Zhui ","Kong ","Ceng ","Qi ","Zong ","Qing ","Lin ","Jun ","Bo ","Ding ","Min ","Diao ","Jian ","He ","Lu ","Ai ","Sui ","Que ","Ling ","Bei ","Yin ","Dui ","Wu ","Qi ","Lun ","Wan ","Dian ","Gang ","Pei ","Qi ","Chen ","Ruan ","Yan ","Die ","Ding ","Du ","Tuo ","Jie ","Ying ","Bian ","Ke ","Bi ","Wei ","Shuo ","Zhen ","Duan ","Xia ","Dang ","Ti ","Nao ","Peng ","Jian ","Di ","Tan ","Cha ","Seki ","Qi ","[?] ","Feng ","Xuan ","Que ","Que ","Ma ","Gong ","Nian ","Su ","E ","Ci ","Liu ","Si ","Tang ","Bang ","Hua ","Pi ","Wei ","Sang ","Lei ","Cuo ","Zhen ","Xia ","Qi ","Lian ","Pan ","Wei ","Yun ","Dui ","Zhe ","Ke ","La ","[?] ","Qing ","Gun ","Zhuan ","Chan ","Qi ","Ao ","Peng ","Lu ","Lu ","Kan ","Qiang ","Chen ","Yin ","Lei ","Biao ","Qi ","Mo ","Qi ","Cui ","Zong ","Qing ","Chuo ","[?] ","Ji ","Shan ","Lao ","Qu ","Zeng ","Deng ","Jian ","Xi ","Lin ","Ding ","Dian ","Huang ","Pan ","Za ","Qiao ","Di ","Li "]});var K8=y((U9e,z8)=>{z8.exports=["Tani ","Jiao ","[?] ","Zhang ","Qiao ","Dun ","Xian ","Yu ","Zhui ","He ","Huo ","Zhai ","Lei ","Ke ","Chu ","Ji ","Que ","Dang ","Yi ","Jiang ","Pi ","Pi ","Yu ","Pin ","Qi ","Ai ","Kai ","Jian ","Yu ","Ruan ","Meng ","Pao ","Ci ","[?] ","[?] ","Mie ","Ca ","Xian ","Kuang ","Lei ","Lei ","Zhi ","Li ","Li ","Fan ","Que ","Pao ","Ying ","Li ","Long ","Long ","Mo ","Bo ","Shuang ","Guan ","Lan ","Zan ","Yan ","Shi ","Shi ","Li ","Reng ","She ","Yue ","Si ","Qi ","Ta ","Ma ","Xie ","Xian ","Xian ","Zhi ","Qi ","Zhi ","Beng ","Dui ","Zhong ","[?] ","Yi ","Shi ","You ","Zhi ","Tiao ","Fu ","Fu ","Mi ","Zu ","Zhi ","Suan ","Mei ","Zuo ","Qu ","Hu ","Zhu ","Shen ","Sui ","Ci ","Chai ","Mi ","Lu ","Yu ","Xiang ","Wu ","Tiao ","Piao ","Zhu ","Gui ","Xia ","Zhi ","Ji ","Gao ","Zhen ","Gao ","Shui ","Jin ","Chen ","Gai ","Kun ","Di ","Dao ","Huo ","Tao ","Qi ","Gu ","Guan ","Zui ","Ling ","Lu ","Bing ","Jin ","Dao ","Zhi ","Lu ","Shan ","Bei ","Zhe ","Hui ","You ","Xi ","Yin ","Zi ","Huo ","Zhen ","Fu ","Yuan ","Wu ","Xian ","Yang ","Ti ","Yi ","Mei ","Si ","Di ","[?] ","Zhuo ","Zhen ","Yong ","Ji ","Gao ","Tang ","Si ","Ma ","Ta ","[?] ","Xuan ","Qi ","Yu ","Xi ","Ji ","Si ","Chan ","Tan ","Kuai ","Sui ","Li ","Nong ","Ni ","Dao ","Li ","Rang ","Yue ","Ti ","Zan ","Lei ","Rou ","Yu ","Yu ","Chi ","Xie ","Qin ","He ","Tu ","Xiu ","Si ","Ren ","Tu ","Zi ","Cha ","Gan ","Yi ","Xian ","Bing ","Nian ","Qiu ","Qiu ","Chong ","Fen ","Hao ","Yun ","Ke ","Miao ","Zhi ","Geng ","Bi ","Zhi ","Yu ","Mi ","Ku ","Ban ","Pi ","Ni ","Li ","You ","Zu ","Pi ","Ba ","Ling ","Mo ","Cheng ","Nian ","Qin ","Yang ","Zuo ","Zhi ","Zhi ","Shu ","Ju ","Zi ","Huo ","Ji ","Cheng ","Tong ","Zhi ","Huo ","He ","Yin ","Zi ","Zhi ","Jie ","Ren ","Du ","Yi ","Zhu ","Hui ","Nong ","Fu "]});var V8=y((X9e,Q8)=>{Q8.exports=["Xi ","Kao ","Lang ","Fu ","Ze ","Shui ","Lu ","Kun ","Gan ","Geng ","Ti ","Cheng ","Tu ","Shao ","Shui ","Ya ","Lun ","Lu ","Gu ","Zuo ","Ren ","Zhun ","Bang ","Bai ","Ji ","Zhi ","Zhi ","Kun ","Leng ","Peng ","Ke ","Bing ","Chou ","Zu ","Yu ","Su ","Lue ","[?] ","Yi ","Xi ","Bian ","Ji ","Fu ","Bi ","Nuo ","Jie ","Zhong ","Zong ","Xu ","Cheng ","Dao ","Wen ","Lian ","Zi ","Yu ","Ji ","Xu ","Zhen ","Zhi ","Dao ","Jia ","Ji ","Gao ","Gao ","Gu ","Rong ","Sui ","You ","Ji ","Kang ","Mu ","Shan ","Men ","Zhi ","Ji ","Lu ","Su ","Ji ","Ying ","Wen ","Qiu ","Se ","[?] ","Yi ","Huang ","Qie ","Ji ","Sui ","Xiao ","Pu ","Jiao ","Zhuo ","Tong ","Sai ","Lu ","Sui ","Nong ","Se ","Hui ","Rang ","Nuo ","Yu ","Bin ","Ji ","Tui ","Wen ","Cheng ","Huo ","Gong ","Lu ","Biao ","[?] ","Rang ","Zhuo ","Li ","Zan ","Xue ","Wa ","Jiu ","Qiong ","Xi ","Qiong ","Kong ","Yu ","Sen ","Jing ","Yao ","Chuan ","Zhun ","Tu ","Lao ","Qie ","Zhai ","Yao ","Bian ","Bao ","Yao ","Bing ","Wa ","Zhu ","Jiao ","Qiao ","Diao ","Wu ","Gui ","Yao ","Zhi ","Chuang ","Yao ","Tiao ","Jiao ","Chuang ","Jiong ","Xiao ","Cheng ","Kou ","Cuan ","Wo ","Dan ","Ku ","Ke ","Zhui ","Xu ","Su ","Guan ","Kui ","Dou ","[?] ","Yin ","Wo ","Wa ","Ya ","Yu ","Ju ","Qiong ","Yao ","Yao ","Tiao ","Chao ","Yu ","Tian ","Diao ","Ju ","Liao ","Xi ","Wu ","Kui ","Chuang ","Zhao ","[?] ","Kuan ","Long ","Cheng ","Cui ","Piao ","Zao ","Cuan ","Qiao ","Qiong ","Dou ","Zao ","Long ","Qie ","Li ","Chu ","Shi ","Fou ","Qian ","Chu ","Hong ","Qi ","Qian ","Gong ","Shi ","Shu ","Miao ","Ju ","Zhan ","Zhu ","Ling ","Long ","Bing ","Jing ","Jing ","Zhang ","Yi ","Si ","Jun ","Hong ","Tong ","Song ","Jing ","Diao ","Yi ","Shu ","Jing ","Qu ","Jie ","Ping ","Duan ","Shao ","Zhuan ","Ceng ","Deng ","Cui ","Huai ","Jing ","Kan ","Jing ","Zhu ","Zhu ","Le ","Peng ","Yu ","Chi ","Gan "]});var t5=y((G9e,e5)=>{e5.exports=["Mang ","Zhu ","Utsubo ","Du ","Ji ","Xiao ","Ba ","Suan ","Ji ","Zhen ","Zhao ","Sun ","Ya ","Zhui ","Yuan ","Hu ","Gang ","Xiao ","Cen ","Pi ","Bi ","Jian ","Yi ","Dong ","Shan ","Sheng ","Xia ","Di ","Zhu ","Na ","Chi ","Gu ","Li ","Qie ","Min ","Bao ","Tiao ","Si ","Fu ","Ce ","Ben ","Pei ","Da ","Zi ","Di ","Ling ","Ze ","Nu ","Fu ","Gou ","Fan ","Jia ","Ge ","Fan ","Shi ","Mao ","Po ","Sey ","Jian ","Qiong ","Long ","Souke ","Bian ","Luo ","Gui ","Qu ","Chi ","Yin ","Yao ","Xian ","Bi ","Qiong ","Gua ","Deng ","Jiao ","Jin ","Quan ","Sun ","Ru ","Fa ","Kuang ","Zhu ","Tong ","Ji ","Da ","Xing ","Ce ","Zhong ","Kou ","Lai ","Bi ","Shai ","Dang ","Zheng ","Ce ","Fu ","Yun ","Tu ","Pa ","Li ","Lang ","Ju ","Guan ","Jian ","Han ","Tong ","Xia ","Zhi ","Cheng ","Suan ","Shi ","Zhu ","Zuo ","Xiao ","Shao ","Ting ","Ce ","Yan ","Gao ","Kuai ","Gan ","Chou ","Kago ","Gang ","Yun ","O ","Qian ","Xiao ","Jian ","Pu ","Lai ","Zou ","Bi ","Bi ","Bi ","Ge ","Chi ","Guai ","Yu ","Jian ","Zhao ","Gu ","Chi ","Zheng ","Jing ","Sha ","Zhou ","Lu ","Bo ","Ji ","Lin ","Suan ","Jun ","Fu ","Zha ","Gu ","Kong ","Qian ","Quan ","Jun ","Chui ","Guan ","Yuan ","Ce ","Ju ","Bo ","Ze ","Qie ","Tuo ","Luo ","Dan ","Xiao ","Ruo ","Jian ","Xuan ","Bian ","Sun ","Xiang ","Xian ","Ping ","Zhen ","Sheng ","Hu ","Shi ","Zhu ","Yue ","Chun ","Lu ","Wu ","Dong ","Xiao ","Ji ","Jie ","Huang ","Xing ","Mei ","Fan ","Chui ","Zhuan ","Pian ","Feng ","Zhu ","Hong ","Qie ","Hou ","Qiu ","Miao ","Qian ","[?] ","Kui ","Sik ","Lou ","Yun ","He ","Tang ","Yue ","Chou ","Gao ","Fei ","Ruo ","Zheng ","Gou ","Nie ","Qian ","Xiao ","Cuan ","Gong ","Pang ","Du ","Li ","Bi ","Zhuo ","Chu ","Shai ","Chi ","Zhu ","Qiang ","Long ","Lan ","Jian ","Bu ","Li ","Hui ","Bi ","Di ","Cong ","Yan ","Peng ","Sen ","Zhuan ","Pai ","Piao ","Dou ","Yu ","Mie ","Zhuan "]});var n5=y((z9e,i5)=>{i5.exports=["Ze ","Xi ","Guo ","Yi ","Hu ","Chan ","Kou ","Cu ","Ping ","Chou ","Ji ","Gui ","Su ","Lou ","Zha ","Lu ","Nian ","Suo ","Cuan ","Sasara ","Suo ","Le ","Duan ","Yana ","Xiao ","Bo ","Mi ","Si ","Dang ","Liao ","Dan ","Dian ","Fu ","Jian ","Min ","Kui ","Dai ","Qiao ","Deng ","Huang ","Sun ","Lao ","Zan ","Xiao ","Du ","Shi ","Zan ","[?] ","Pai ","Hata ","Pai ","Gan ","Ju ","Du ","Lu ","Yan ","Bo ","Dang ","Sai ","Ke ","Long ","Qian ","Lian ","Bo ","Zhou ","Lai ","[?] ","Lan ","Kui ","Yu ","Yue ","Hao ","Zhen ","Tai ","Ti ","Mi ","Chou ","Ji ","[?] ","Hata ","Teng ","Zhuan ","Zhou ","Fan ","Sou ","Zhou ","Kuji ","Zhuo ","Teng ","Lu ","Lu ","Jian ","Tuo ","Ying ","Yu ","Lai ","Long ","Shinshi ","Lian ","Lan ","Qian ","Yue ","Zhong ","Qu ","Lian ","Bian ","Duan ","Zuan ","Li ","Si ","Luo ","Ying ","Yue ","Zhuo ","Xu ","Mi ","Di ","Fan ","Shen ","Zhe ","Shen ","Nu ","Xie ","Lei ","Xian ","Zi ","Ni ","Cun ","[?] ","Qian ","Kume ","Bi ","Ban ","Wu ","Sha ","Kang ","Rou ","Fen ","Bi ","Cui ","[?] ","Li ","Chi ","Nukamiso ","Ro ","Ba ","Li ","Gan ","Ju ","Po ","Mo ","Cu ","Nian ","Zhou ","Li ","Su ","Tiao ","Li ","Qi ","Su ","Hong ","Tong ","Zi ","Ce ","Yue ","Zhou ","Lin ","Zhuang ","Bai ","[?] ","Fen ","Ji ","[?] ","Sukumo ","Liang ","Xian ","Fu ","Liang ","Can ","Geng ","Li ","Yue ","Lu ","Ju ","Qi ","Cui ","Bai ","Zhang ","Lin ","Zong ","Jing ","Guo ","Kouji ","San ","San ","Tang ","Bian ","Rou ","Mian ","Hou ","Xu ","Zong ","Hu ","Jian ","Zan ","Ci ","Li ","Xie ","Fu ","Ni ","Bei ","Gu ","Xiu ","Gao ","Tang ","Qiu ","Sukumo ","Cao ","Zhuang ","Tang ","Mi ","San ","Fen ","Zao ","Kang ","Jiang ","Mo ","San ","San ","Nuo ","Xi ","Liang ","Jiang ","Kuai ","Bo ","Huan ","[?] ","Zong ","Xian ","Nuo ","Tuan ","Nie ","Li ","Zuo ","Di ","Nie ","Tiao ","Lan ","Mi ","Jiao ","Jiu ","Xi ","Gong ","Zheng ","Jiu ","You "]});var o5=y((K9e,r5)=>{r5.exports=["Ji ","Cha ","Zhou ","Xun ","Yue ","Hong ","Yu ","He ","Wan ","Ren ","Wen ","Wen ","Qiu ","Na ","Zi ","Tou ","Niu ","Fou ","Jie ","Shu ","Chun ","Pi ","Yin ","Sha ","Hong ","Zhi ","Ji ","Fen ","Yun ","Ren ","Dan ","Jin ","Su ","Fang ","Suo ","Cui ","Jiu ","Zha ","Kinu ","Jin ","Fu ","Zhi ","Ci ","Zi ","Chou ","Hong ","Zha ","Lei ","Xi ","Fu ","Xie ","Shen ","Bei ","Zhu ","Qu ","Ling ","Zhu ","Shao ","Gan ","Yang ","Fu ","Tuo ","Zhen ","Dai ","Zhuo ","Shi ","Zhong ","Xian ","Zu ","Jiong ","Ban ","Ju ","Mo ","Shu ","Zui ","Wata ","Jing ","Ren ","Heng ","Xie ","Jie ","Zhu ","Chou ","Gua ","Bai ","Jue ","Kuang ","Hu ","Ci ","Geng ","Geng ","Tao ","Xie ","Ku ","Jiao ","Quan ","Gai ","Luo ","Xuan ","Bing ","Xian ","Fu ","Gei ","Tong ","Rong ","Tiao ","Yin ","Lei ","Xie ","Quan ","Xu ","Lun ","Die ","Tong ","Si ","Jiang ","Xiang ","Hui ","Jue ","Zhi ","Jian ","Juan ","Chi ","Mian ","Zhen ","Lu ","Cheng ","Qiu ","Shu ","Bang ","Tong ","Xiao ","Wan ","Qin ","Geng ","Xiu ","Ti ","Xiu ","Xie ","Hong ","Xi ","Fu ","Ting ","Sui ","Dui ","Kun ","Fu ","Jing ","Hu ","Zhi ","Yan ","Jiong ","Feng ","Ji ","Sok ","Kase ","Zong ","Lin ","Duo ","Li ","Lu ","Liang ","Chou ","Quan ","Shao ","Qi ","Qi ","Zhun ","Qi ","Wan ","Qian ","Xian ","Shou ","Wei ","Qi ","Tao ","Wan ","Gang ","Wang ","Beng ","Zhui ","Cai ","Guo ","Cui ","Lun ","Liu ","Qi ","Zhan ","Bei ","Chuo ","Ling ","Mian ","Qi ","Qie ","Tan ","Zong ","Gun ","Zou ","Yi ","Zi ","Xing ","Liang ","Jin ","Fei ","Rui ","Min ","Yu ","Zong ","Fan ","Lu ","Xu ","Yingl ","Zhang ","Kasuri ","Xu ","Xiang ","Jian ","Ke ","Xian ","Ruan ","Mian ","Qi ","Duan ","Zhong ","Di ","Min ","Miao ","Yuan ","Xie ","Bao ","Si ","Qiu ","Bian ","Huan ","Geng ","Cong ","Mian ","Wei ","Fu ","Wei ","Yu ","Gou ","Miao ","Xie ","Lian ","Zong ","Bian ","Yun ","Yin ","Ti ","Gua ","Zhi ","Yun ","Cheng ","Chan ","Dai "]});var a5=y((Q9e,s5)=>{s5.exports=["Xia ","Yuan ","Zong ","Xu ","Nawa ","Odoshi ","Geng ","Sen ","Ying ","Jin ","Yi ","Zhui ","Ni ","Bang ","Gu ","Pan ","Zhou ","Jian ","Cuo ","Quan ","Shuang ","Yun ","Xia ","Shuai ","Xi ","Rong ","Tao ","Fu ","Yun ","Zhen ","Gao ","Ru ","Hu ","Zai ","Teng ","Xian ","Su ","Zhen ","Zong ","Tao ","Horo ","Cai ","Bi ","Feng ","Cu ","Li ","Suo ","Yin ","Xi ","Zong ","Lei ","Zhuan ","Qian ","Man ","Zhi ","Lu ","Mo ","Piao ","Lian ","Mi ","Xuan ","Zong ","Ji ","Shan ","Sui ","Fan ","Shuai ","Beng ","Yi ","Sao ","Mou ","Zhou ","Qiang ","Hun ","Sem ","Xi ","Jung ","Xiu ","Ran ","Xuan ","Hui ","Qiao ","Zeng ","Zuo ","Zhi ","Shan ","San ","Lin ","Yu ","Fan ","Liao ","Chuo ","Zun ","Jian ","Rao ","Chan ","Rui ","Xiu ","Hui ","Hua ","Zuan ","Xi ","Qiang ","Un ","Da ","Sheng ","Hui ","Xi ","Se ","Jian ","Jiang ","Huan ","Zao ","Cong ","Jie ","Jiao ","Bo ","Chan ","Yi ","Nao ","Sui ","Yi ","Shai ","Xu ","Ji ","Bin ","Qian ","Lan ","Pu ","Xun ","Zuan ","Qi ","Peng ","Li ","Mo ","Lei ","Xie ","Zuan ","Kuang ","You ","Xu ","Lei ","Xian ","Chan ","Kou ","Lu ","Chan ","Ying ","Cai ","Xiang ","Xian ","Zui ","Zuan ","Luo ","Xi ","Dao ","Lan ","Lei ","Lian ","Si ","Jiu ","Yu ","Hong ","Zhou ","Xian ","He ","Yue ","Ji ","Wan ","Kuang ","Ji ","Ren ","Wei ","Yun ","Hong ","Chun ","Pi ","Sha ","Gang ","Na ","Ren ","Zong ","Lun ","Fen ","Zhi ","Wen ","Fang ","Zhu ","Yin ","Niu ","Shu ","Xian ","Gan ","Xie ","Fu ","Lian ","Zu ","Shen ","Xi ","Zhi ","Zhong ","Zhou ","Ban ","Fu ","Zhuo ","Shao ","Yi ","Jing ","Dai ","Bang ","Rong ","Jie ","Ku ","Rao ","Die ","Heng ","Hui ","Gei ","Xuan ","Jiang ","Luo ","Jue ","Jiao ","Tong ","Geng ","Xiao ","Juan ","Xiu ","Xi ","Sui ","Tao ","Ji ","Ti ","Ji ","Xu ","Ling ","[?] ","Xu ","Qi ","Fei ","Chuo ","Zhang ","Gun ","Sheng ","Wei ","Mian ","Shou ","Beng ","Chou ","Tao ","Liu ","Quan ","Zong ","Zhan ","Wan ","Lu "]});var u5=y((V9e,l5)=>{l5.exports=["Zhui ","Zi ","Ke ","Xiang ","Jian ","Mian ","Lan ","Ti ","Miao ","Qi ","Yun ","Hui ","Si ","Duo ","Duan ","Bian ","Xian ","Gou ","Zhui ","Huan ","Di ","Lu ","Bian ","Min ","Yuan ","Jin ","Fu ","Ru ","Zhen ","Feng ","Shuai ","Gao ","Chan ","Li ","Yi ","Jian ","Bin ","Piao ","Man ","Lei ","Ying ","Suo ","Mou ","Sao ","Xie ","Liao ","Shan ","Zeng ","Jiang ","Qian ","Zao ","Huan ","Jiao ","Zuan ","Fou ","Xie ","Gang ","Fou ","Que ","Fou ","Kaakeru ","Bo ","Ping ","Hou ","[?] ","Gang ","Ying ","Ying ","Qing ","Xia ","Guan ","Zun ","Tan ","Chang ","Qi ","Weng ","Ying ","Lei ","Tan ","Lu ","Guan ","Wang ","Wang ","Gang ","Wang ","Han ","[?] ","Luo ","Fu ","Mi ","Fa ","Gu ","Zhu ","Ju ","Mao ","Gu ","Min ","Gang ","Ba ","Gua ","Ti ","Juan ","Fu ","Lin ","Yan ","Zhao ","Zui ","Gua ","Zhuo ","Yu ","Zhi ","An ","Fa ","Nan ","Shu ","Si ","Pi ","Ma ","Liu ","Ba ","Fa ","Li ","Chao ","Wei ","Bi ","Ji ","Zeng ","Tong ","Liu ","Ji ","Juan ","Mi ","Zhao ","Luo ","Pi ","Ji ","Ji ","Luan ","Yang ","Mie ","Qiang ","Ta ","Mei ","Yang ","You ","You ","Fen ","Ba ","Gao ","Yang ","Gu ","Qiang ","Zang ","Gao ","Ling ","Yi ","Zhu ","Di ","Xiu ","Qian ","Yi ","Xian ","Rong ","Qun ","Qun ","Qian ","Huan ","Zui ","Xian ","Yi ","Yashinau ","Qiang ","Xian ","Yu ","Geng ","Jie ","Tang ","Yuan ","Xi ","Fan ","Shan ","Fen ","Shan ","Lian ","Lei ","Geng ","Nou ","Qiang ","Chan ","Yu ","Gong ","Yi ","Chong ","Weng ","Fen ","Hong ","Chi ","Chi ","Cui ","Fu ","Xia ","Pen ","Yi ","La ","Yi ","Pi ","Ling ","Liu ","Zhi ","Qu ","Xi ","Xie ","Xiang ","Xi ","Xi ","Qi ","Qiao ","Hui ","Hui ","Xiao ","Se ","Hong ","Jiang ","Di ","Cui ","Fei ","Tao ","Sha ","Chi ","Zhu ","Jian ","Xuan ","Shi ","Pian ","Zong ","Wan ","Hui ","Hou ","He ","He ","Han ","Ao ","Piao ","Yi ","Lian ","Qu ","[?] ","Lin ","Pen ","Qiao ","Ao ","Fan ","Yi ","Hui ","Xuan ","Dao "]});var h5=y((eet,c5)=>{c5.exports=["Yao ","Lao ","[?] ","Kao ","Mao ","Zhe ","Qi ","Gou ","Gou ","Gou ","Die ","Die ","Er ","Shua ","Ruan ","Er ","Nai ","Zhuan ","Lei ","Ting ","Zi ","Geng ","Chao ","Hao ","Yun ","Pa ","Pi ","Chi ","Si ","Chu ","Jia ","Ju ","He ","Chu ","Lao ","Lun ","Ji ","Tang ","Ou ","Lou ","Nou ","Gou ","Pang ","Ze ","Lou ","Ji ","Lao ","Huo ","You ","Mo ","Huai ","Er ","Zhe ","Ting ","Ye ","Da ","Song ","Qin ","Yun ","Chi ","Dan ","Dan ","Hong ","Geng ","Zhi ","[?] ","Nie ","Dan ","Zhen ","Che ","Ling ","Zheng ","You ","Wa ","Liao ","Long ","Zhi ","Ning ","Tiao ","Er ","Ya ","Die ","Gua ","[?] ","Lian ","Hao ","Sheng ","Lie ","Pin ","Jing ","Ju ","Bi ","Di ","Guo ","Wen ","Xu ","Ping ","Cong ","Shikato ","[?] ","Ting ","Yu ","Cong ","Kui ","Tsuraneru ","Kui ","Cong ","Lian ","Weng ","Kui ","Lian ","Lian ","Cong ","Ao ","Sheng ","Song ","Ting ","Kui ","Nie ","Zhi ","Dan ","Ning ","Qie ","Ji ","Ting ","Ting ","Long ","Yu ","Yu ","Zhao ","Si ","Su ","Yi ","Su ","Si ","Zhao ","Zhao ","Rou ","Yi ","Le ","Ji ","Qiu ","Ken ","Cao ","Ge ","Di ","Huan ","Huang ","Yi ","Ren ","Xiao ","Ru ","Zhou ","Yuan ","Du ","Gang ","Rong ","Gan ","Cha ","Wo ","Chang ","Gu ","Zhi ","Han ","Fu ","Fei ","Fen ","Pei ","Pang ","Jian ","Fang ","Zhun ","You ","Na ","Hang ","Ken ","Ran ","Gong ","Yu ","Wen ","Yao ","Jin ","Pi ","Qian ","Xi ","Xi ","Fei ","Ken ","Jing ","Tai ","Shen ","Zhong ","Zhang ","Xie ","Shen ","Wei ","Zhou ","Die ","Dan ","Fei ","Ba ","Bo ","Qu ","Tian ","Bei ","Gua ","Tai ","Zi ","Ku ","Zhi ","Ni ","Ping ","Zi ","Fu ","Pang ","Zhen ","Xian ","Zuo ","Pei ","Jia ","Sheng ","Zhi ","Bao ","Mu ","Qu ","Hu ","Ke ","Yi ","Yin ","Xu ","Yang ","Long ","Dong ","Ka ","Lu ","Jing ","Nu ","Yan ","Pang ","Kua ","Yi ","Guang ","Gai ","Ge ","Dong ","Zhi ","Xiao ","Xiong ","Xiong ","Er ","E ","Xing ","Pian ","Neng ","Zi ","Gui "]});var g5=y((tet,d5)=>{d5.exports=["Cheng ","Tiao ","Zhi ","Cui ","Mei ","Xie ","Cui ","Xie ","Mo ","Mai ","Ji ","Obiyaakasu ","[?] ","Kuai ","Sa ","Zang ","Qi ","Nao ","Mi ","Nong ","Luan ","Wan ","Bo ","Wen ","Guan ","Qiu ","Jiao ","Jing ","Rou ","Heng ","Cuo ","Lie ","Shan ","Ting ","Mei ","Chun ","Shen ","Xie ","De ","Zui ","Cu ","Xiu ","Xin ","Tuo ","Pao ","Cheng ","Nei ","Fu ","Dou ","Tuo ","Niao ","Noy ","Pi ","Gu ","Gua ","Li ","Lian ","Zhang ","Cui ","Jie ","Liang ","Zhou ","Pi ","Biao ","Lun ","Pian ","Guo ","Kui ","Chui ","Dan ","Tian ","Nei ","Jing ","Jie ","La ","Yi ","An ","Ren ","Shen ","Chuo ","Fu ","Fu ","Ju ","Fei ","Qiang ","Wan ","Dong ","Pi ","Guo ","Zong ","Ding ","Wu ","Mei ","Ruan ","Zhuan ","Zhi ","Cou ","Gua ","Ou ","Di ","An ","Xing ","Nao ","Yu ","Chuan ","Nan ","Yun ","Zhong ","Rou ","E ","Sai ","Tu ","Yao ","Jian ","Wei ","Jiao ","Yu ","Jia ","Duan ","Bi ","Chang ","Fu ","Xian ","Ni ","Mian ","Wa ","Teng ","Tui ","Bang ","Qian ","Lu ","Wa ","Sou ","Tang ","Su ","Zhui ","Ge ","Yi ","Bo ","Liao ","Ji ","Pi ","Xie ","Gao ","Lu ","Bin ","Ou ","Chang ","Lu ","Guo ","Pang ","Chuai ","Piao ","Jiang ","Fu ","Tang ","Mo ","Xi ","Zhuan ","Lu ","Jiao ","Ying ","Lu ","Zhi ","Tara ","Chun ","Lian ","Tong ","Peng ","Ni ","Zha ","Liao ","Cui ","Gui ","Xiao ","Teng ","Fan ","Zhi ","Jiao ","Shan ","Wu ","Cui ","Run ","Xiang ","Sui ","Fen ","Ying ","Tan ","Zhua ","Dan ","Kuai ","Nong ","Tun ","Lian ","Bi ","Yong ","Jue ","Chu ","Yi ","Juan ","La ","Lian ","Sao ","Tun ","Gu ","Qi ","Cui ","Bin ","Xun ","Ru ","Huo ","Zang ","Xian ","Biao ","Xing ","Kuan ","La ","Yan ","Lu ","Huo ","Zang ","Luo ","Qu ","Zang ","Luan ","Ni ","Zang ","Chen ","Qian ","Wo ","Guang ","Zang ","Lin ","Guang ","Zi ","Jiao ","Nie ","Chou ","Ji ","Gao ","Chou ","Mian ","Nie ","Zhi ","Zhi ","Ge ","Jian ","Die ","Zhi ","Xiu ","Tai ","Zhen ","Jiu ","Xian ","Yu ","Cha "]});var f5=y((iet,p5)=>{p5.exports=["Yao ","Yu ","Chong ","Xi ","Xi ","Jiu ","Yu ","Yu ","Xing ","Ju ","Jiu ","Xin ","She ","She ","Yadoru ","Jiu ","Shi ","Tan ","Shu ","Shi ","Tian ","Dan ","Pu ","Pu ","Guan ","Hua ","Tan ","Chuan ","Shun ","Xia ","Wu ","Zhou ","Dao ","Gang ","Shan ","Yi ","[?] ","Pa ","Tai ","Fan ","Ban ","Chuan ","Hang ","Fang ","Ban ","Que ","Hesaki ","Zhong ","Jian ","Cang ","Ling ","Zhu ","Ze ","Duo ","Bo ","Xian ","Ge ","Chuan ","Jia ","Lu ","Hong ","Pang ","Xi ","[?] ","Fu ","Zao ","Feng ","Li ","Shao ","Yu ","Lang ","Ting ","[?] ","Wei ","Bo ","Meng ","Nian ","Ju ","Huang ","Shou ","Zong ","Bian ","Mao ","Die ","[?] ","Bang ","Cha ","Yi ","Sao ","Cang ","Cao ","Lou ","Dai ","Sori ","Yao ","Tong ","Yofune ","Dang ","Tan ","Lu ","Yi ","Jie ","Jian ","Huo ","Meng ","Qi ","Lu ","Lu ","Chan ","Shuang ","Gen ","Liang ","Jian ","Jian ","Se ","Yan ","Fu ","Ping ","Yan ","Yan ","Cao ","Cao ","Yi ","Le ","Ting ","Qiu ","Ai ","Nai ","Tiao ","Jiao ","Jie ","Peng ","Wan ","Yi ","Chai ","Mian ","Mie ","Gan ","Qian ","Yu ","Yu ","Shuo ","Qiong ","Tu ","Xia ","Qi ","Mang ","Zi ","Hui ","Sui ","Zhi ","Xiang ","Bi ","Fu ","Tun ","Wei ","Wu ","Zhi ","Qi ","Shan ","Wen ","Qian ","Ren ","Fou ","Kou ","Jie ","Lu ","Xu ","Ji ","Qin ","Qi ","Yuan ","Fen ","Ba ","Rui ","Xin ","Ji ","Hua ","Hua ","Fang ","Wu ","Jue ","Gou ","Zhi ","Yun ","Qin ","Ao ","Chu ","Mao ","Ya ","Fei ","Reng ","Hang ","Cong ","Yin ","You ","Bian ","Yi ","Susa ","Wei ","Li ","Pi ","E ","Xian ","Chang ","Cang ","Meng ","Su ","Yi ","Yuan ","Ran ","Ling ","Tai ","Tiao ","Di ","Miao ","Qiong ","Li ","Yong ","Ke ","Mu ","Pei ","Bao ","Gou ","Min ","Yi ","Yi ","Ju ","Pi ","Ruo ","Ku ","Zhu ","Ni ","Bo ","Bing ","Shan ","Qiu ","Yao ","Xian ","Ben ","Hong ","Ying ","Zha ","Dong ","Ju ","Die ","Nie ","Gan ","Hu ","Ping ","Mei ","Fu ","Sheng ","Gu ","Bi ","Wei "]});var b5=y((net,m5)=>{m5.exports=["Fu ","Zhuo ","Mao ","Fan ","Qie ","Mao ","Mao ","Ba ","Zi ","Mo ","Zi ","Di ","Chi ","Ji ","Jing ","Long ","[?] ","Niao ","[?] ","Xue ","Ying ","Qiong ","Ge ","Ming ","Li ","Rong ","Yin ","Gen ","Qian ","Chai ","Chen ","Yu ","Xiu ","Zi ","Lie ","Wu ","Ji ","Kui ","Ce ","Chong ","Ci ","Gou ","Guang ","Mang ","Chi ","Jiao ","Jiao ","Fu ","Yu ","Zhu ","Zi ","Jiang ","Hui ","Yin ","Cha ","Fa ","Rong ","Ru ","Chong ","Mang ","Tong ","Zhong ","[?] ","Zhu ","Xun ","Huan ","Kua ","Quan ","Gai ","Da ","Jing ","Xing ","Quan ","Cao ","Jing ","Er ","An ","Shou ","Chi ","Ren ","Jian ","Ti ","Huang ","Ping ","Li ","Jin ","Lao ","Shu ","Zhuang ","Da ","Jia ","Rao ","Bi ","Ze ","Qiao ","Hui ","Qi ","Dang ","[?] ","Rong ","Hun ","Ying ","Luo ","Ying ","Xun ","Jin ","Sun ","Yin ","Mai ","Hong ","Zhou ","Yao ","Du ","Wei ","Chu ","Dou ","Fu ","Ren ","Yin ","He ","Bi ","Bu ","Yun ","Di ","Tu ","Sui ","Sui ","Cheng ","Chen ","Wu ","Bie ","Xi ","Geng ","Li ","Fu ","Zhu ","Mo ","Li ","Zhuang ","Ji ","Duo ","Qiu ","Sha ","Suo ","Chen ","Feng ","Ju ","Mei ","Meng ","Xing ","Jing ","Che ","Xin ","Jun ","Yan ","Ting ","Diao ","Cuo ","Wan ","Han ","You ","Cuo ","Jia ","Wang ","You ","Niu ","Shao ","Xian ","Lang ","Fu ","E ","Mo ","Wen ","Jie ","Nan ","Mu ","Kan ","Lai ","Lian ","Shi ","Wo ","Usagi ","Lian ","Huo ","You ","Ying ","Ying ","Nuc ","Chun ","Mang ","Mang ","Ci ","Wan ","Jing ","Di ","Qu ","Dong ","Jian ","Zou ","Gu ","La ","Lu ","Ju ","Wei ","Jun ","Nie ","Kun ","He ","Pu ","Zi ","Gao ","Guo ","Fu ","Lun ","Chang ","Chou ","Song ","Chui ","Zhan ","Men ","Cai ","Ba ","Li ","Tu ","Bo ","Han ","Bao ","Qin ","Juan ","Xi ","Qin ","Di ","Jie ","Pu ","Dang ","Jin ","Zhao ","Tai ","Geng ","Hua ","Gu ","Ling ","Fei ","Jin ","An ","Wang ","Beng ","Zhou ","Yan ","Ju ","Jian ","Lin ","Tan ","Shu ","Tian ","Dao "]});var v5=y((ret,y5)=>{y5.exports=["Hu ","Qi ","He ","Cui ","Tao ","Chun ","Bei ","Chang ","Huan ","Fei ","Lai ","Qi ","Meng ","Ping ","Wei ","Dan ","Sha ","Huan ","Yan ","Yi ","Tiao ","Qi ","Wan ","Ce ","Nai ","Kutabireru ","Tuo ","Jiu ","Tie ","Luo ","[?] ","[?] ","Meng ","[?] ","Yaji ","[?] ","Ying ","Ying ","Ying ","Xiao ","Sa ","Qiu ","Ke ","Xiang ","Wan ","Yu ","Yu ","Fu ","Lian ","Xuan ","Yuan ","Nan ","Ze ","Wo ","Chun ","Xiao ","Yu ","Pian ","Mao ","An ","E ","Luo ","Ying ","Huo ","Gua ","Jiang ","Mian ","Zuo ","Zuo ","Ju ","Bao ","Rou ","Xi ","Xie ","An ","Qu ","Jian ","Fu ","Lu ","Jing ","Pen ","Feng ","Hong ","Hong ","Hou ","Yan ","Tu ","Zhu ","Zi ","Xiang ","Shen ","Ge ","Jie ","Jing ","Mi ","Huang ","Shen ","Pu ","Gai ","Dong ","Zhou ","Qian ","Wei ","Bo ","Wei ","Pa ","Ji ","Hu ","Zang ","Jia ","Duan ","Yao ","Jun ","Cong ","Quan ","Wei ","Xian ","Kui ","Ting ","Hun ","Xi ","Shi ","Qi ","Lan ","Zong ","Yao ","Yuan ","Mei ","Yun ","Shu ","Di ","Zhuan ","Guan ","Sukumo ","Xue ","Chan ","Kai ","Kui ","[?] ","Jiang ","Lou ","Wei ","Pai ","[?] ","Sou ","Yin ","Shi ","Chun ","Shi ","Yun ","Zhen ","Lang ","Nu ","Meng ","He ","Que ","Suan ","Yuan ","Li ","Ju ","Xi ","Pang ","Chu ","Xu ","Tu ","Liu ","Wo ","Zhen ","Qian ","Zu ","Po ","Cuo ","Yuan ","Chu ","Yu ","Kuai ","Pan ","Pu ","Pu ","Na ","Shuo ","Xi ","Fen ","Yun ","Zheng ","Jian ","Ji ","Ruo ","Cang ","En ","Mi ","Hao ","Sun ","Zhen ","Ming ","Sou ","Xu ","Liu ","Xi ","Gu ","Lang ","Rong ","Weng ","Gai ","Cuo ","Shi ","Tang ","Luo ","Ru ","Suo ","Xian ","Bei ","Yao ","Gui ","Bi ","Zong ","Gun ","Za ","Xiu ","Ce ","Hai ","Lan ","[?] ","Ji ","Li ","Can ","Lang ","Yu ","[?] ","Ying ","Mo ","Diao ","Tiao ","Mao ","Tong ","Zhu ","Peng ","An ","Lian ","Cong ","Xi ","Ping ","Qiu ","Jin ","Chun ","Jie ","Wei ","Tui ","Cao ","Yu ","Yi ","Ji ","Liao ","Bi ","Lu ","Su "]});var x5=y((oet,w5)=>{w5.exports=["Bu ","Zhang ","Luo ","Jiang ","Man ","Yan ","Ling ","Ji ","Piao ","Gun ","Han ","Di ","Su ","Lu ","She ","Shang ","Di ","Mie ","Xun ","Man ","Bo ","Di ","Cuo ","Zhe ","Sen ","Xuan ","Wei ","Hu ","Ao ","Mi ","Lou ","Cu ","Zhong ","Cai ","Po ","Jiang ","Mi ","Cong ","Niao ","Hui ","Jun ","Yin ","Jian ","Yan ","Shu ","Yin ","Kui ","Chen ","Hu ","Sha ","Kou ","Qian ","Ma ","Zang ","Sonoko ","Qiang ","Dou ","Lian ","Lin ","Kou ","Ai ","Bi ","Li ","Wei ","Ji ","Xun ","Sheng ","Fan ","Meng ","Ou ","Chan ","Dian ","Xun ","Jiao ","Rui ","Rui ","Lei ","Yu ","Qiao ","Chu ","Hua ","Jian ","Mai ","Yun ","Bao ","You ","Qu ","Lu ","Rao ","Hui ","E ","Teng ","Fei ","Jue ","Zui ","Fa ","Ru ","Fen ","Kui ","Shun ","Rui ","Ya ","Xu ","Fu ","Jue ","Dang ","Wu ","Tong ","Si ","Xiao ","Xi ","Long ","Yun ","[?] ","Qi ","Jian ","Yun ","Sun ","Ling ","Yu ","Xia ","Yong ","Ji ","Hong ","Si ","Nong ","Lei ","Xuan ","Yun ","Yu ","Xi ","Hao ","Bo ","Hao ","Ai ","Wei ","Hui ","Wei ","Ji ","Ci ","Xiang ","Luan ","Mie ","Yi ","Leng ","Jiang ","Can ","Shen ","Qiang ","Lian ","Ke ","Yuan ","Da ","Ti ","Tang ","Xie ","Bi ","Zhan ","Sun ","Lian ","Fan ","Ding ","Jie ","Gu ","Xie ","Shu ","Jian ","Kao ","Hong ","Sa ","Xin ","Xun ","Yao ","Hie ","Sou ","Shu ","Xun ","Dui ","Pin ","Wei ","Neng ","Chou ","Mai ","Ru ","Piao ","Tai ","Qi ","Zao ","Chen ","Zhen ","Er ","Ni ","Ying ","Gao ","Cong ","Xiao ","Qi ","Fa ","Jian ","Xu ","Kui ","Jie ","Bian ","Diao ","Mi ","Lan ","Jin ","Cang ","Miao ","Qiong ","Qie ","Xian ","[?] ","Ou ","Xian ","Su ","Lu ","Yi ","Xu ","Xie ","Li ","Yi ","La ","Lei ","Xiao ","Di ","Zhi ","Bei ","Teng ","Yao ","Mo ","Huan ","Piao ","Fan ","Sou ","Tan ","Tui ","Qiong ","Qiao ","Wei ","Liu ","Hui ","[?] ","Gao ","Yun ","[?] ","Li ","Shu ","Chu ","Ai ","Lin ","Zao ","Xuan ","Chen ","Lai ","Huo "]});var S5=y((set,C5)=>{C5.exports=["Tuo ","Wu ","Rui ","Rui ","Qi ","Heng ","Lu ","Su ","Tui ","Mang ","Yun ","Pin ","Yu ","Xun ","Ji ","Jiong ","Xian ","Mo ","Hagi ","Su ","Jiong ","[?] ","Nie ","Bo ","Rang ","Yi ","Xian ","Yu ","Ju ","Lian ","Lian ","Yin ","Qiang ","Ying ","Long ","Tong ","Wei ","Yue ","Ling ","Qu ","Yao ","Fan ","Mi ","Lan ","Kui ","Lan ","Ji ","Dang ","Katsura ","Lei ","Lei ","Hua ","Feng ","Zhi ","Wei ","Kui ","Zhan ","Huai ","Li ","Ji ","Mi ","Lei ","Huai ","Luo ","Ji ","Kui ","Lu ","Jian ","San ","[?] ","Lei ","Quan ","Xiao ","Yi ","Luan ","Men ","Bie ","Hu ","Hu ","Lu ","Nue ","Lu ","Si ","Xiao ","Qian ","Chu ","Hu ","Xu ","Cuo ","Fu ","Xu ","Xu ","Lu ","Hu ","Yu ","Hao ","Jiao ","Ju ","Guo ","Bao ","Yan ","Zhan ","Zhan ","Kui ","Ban ","Xi ","Shu ","Chong ","Qiu ","Diao ","Ji ","Qiu ","Cheng ","Shi ","[?] ","Di ","Zhe ","She ","Yu ","Gan ","Zi ","Hong ","Hui ","Meng ","Ge ","Sui ","Xia ","Chai ","Shi ","Yi ","Ma ","Xiang ","Fang ","E ","Pa ","Chi ","Qian ","Wen ","Wen ","Rui ","Bang ","Bi ","Yue ","Yue ","Jun ","Qi ","Ran ","Yin ","Qi ","Tian ","Yuan ","Jue ","Hui ","Qin ","Qi ","Zhong ","Ya ","Ci ","Mu ","Wang ","Fen ","Fen ","Hang ","Gong ","Zao ","Fu ","Ran ","Jie ","Fu ","Chi ","Dou ","Piao ","Xian ","Ni ","Te ","Qiu ","You ","Zha ","Ping ","Chi ","You ","He ","Han ","Ju ","Li ","Fu ","Ran ","Zha ","Gou ","Pi ","Bo ","Xian ","Zhu ","Diao ","Bie ","Bing ","Gu ","Ran ","Qu ","She ","Tie ","Ling ","Gu ","Dan ","Gu ","Ying ","Li ","Cheng ","Qu ","Mou ","Ge ","Ci ","Hui ","Hui ","Mang ","Fu ","Yang ","Wa ","Lie ","Zhu ","Yi ","Xian ","Kuo ","Jiao ","Li ","Yi ","Ping ","Ji ","Ha ","She ","Yi ","Wang ","Mo ","Qiong ","Qie ","Gui ","Gong ","Zhi ","Man ","Ebi ","Zhi ","Jia ","Rao ","Si ","Qi ","Xing ","Lie ","Qiu ","Shao ","Yong ","Jia ","Shui ","Che ","Bai ","E ","Han "]});var T5=y((aet,D5)=>{D5.exports=["Shu ","Xuan ","Feng ","Shen ","Zhen ","Fu ","Xian ","Zhe ","Wu ","Fu ","Li ","Lang ","Bi ","Chu ","Yuan ","You ","Jie ","Dan ","Yan ","Ting ","Dian ","Shui ","Hui ","Gua ","Zhi ","Song ","Fei ","Ju ","Mi ","Qi ","Qi ","Yu ","Jun ","Zha ","Meng ","Qiang ","Si ","Xi ","Lun ","Li ","Die ","Tiao ","Tao ","Kun ","Gan ","Han ","Yu ","Bang ","Fei ","Pi ","Wei ","Dun ","Yi ","Yuan ","Su ","Quan ","Qian ","Rui ","Ni ","Qing ","Wei ","Liang ","Guo ","Wan ","Dong ","E ","Ban ","Di ","Wang ","Can ","Yang ","Ying ","Guo ","Chan ","[?] ","La ","Ke ","Ji ","He ","Ting ","Mai ","Xu ","Mian ","Yu ","Jie ","Shi ","Xuan ","Huang ","Yan ","Bian ","Rou ","Wei ","Fu ","Yuan ","Mei ","Wei ","Fu ","Ruan ","Xie ","You ","Qiu ","Mao ","Xia ","Ying ","Shi ","Chong ","Tang ","Zhu ","Zong ","Ti ","Fu ","Yuan ","Hui ","Meng ","La ","Du ","Hu ","Qiu ","Die ","Li ","Gua ","Yun ","Ju ","Nan ","Lou ","Qun ","Rong ","Ying ","Jiang ","[?] ","Lang ","Pang ","Si ","Xi ","Ci ","Xi ","Yuan ","Weng ","Lian ","Sou ","Ban ","Rong ","Rong ","Ji ","Wu ","Qiu ","Han ","Qin ","Yi ","Bi ","Hua ","Tang ","Yi ","Du ","Nai ","He ","Hu ","Hui ","Ma ","Ming ","Yi ","Wen ","Ying ","Teng ","Yu ","Cang ","So ","Ebi ","Man ","[?] ","Shang ","Zhe ","Cao ","Chi ","Di ","Ao ","Lu ","Wei ","Zhi ","Tang ","Chen ","Piao ","Qu ","Pi ","Yu ","Jian ","Luo ","Lou ","Qin ","Zhong ","Yin ","Jiang ","Shuai ","Wen ","Jiao ","Wan ","Zhi ","Zhe ","Ma ","Ma ","Guo ","Liu ","Mao ","Xi ","Cong ","Li ","Man ","Xiao ","Kamakiri ","Zhang ","Mang ","Xiang ","Mo ","Zui ","Si ","Qiu ","Te ","Zhi ","Peng ","Peng ","Jiao ","Qu ","Bie ","Liao ","Pan ","Gui ","Xi ","Ji ","Zhuan ","Huang ","Fei ","Lao ","Jue ","Jue ","Hui ","Yin ","Chan ","Jiao ","Shan ","Rao ","Xiao ","Mou ","Chong ","Xun ","Si ","[?] ","Cheng ","Dang ","Li ","Xie ","Shan ","Yi ","Jing ","Da ","Chan ","Qi "]});var P5=y((uet,k5)=>{k5.exports=["Ci ","Xiang ","She ","Luo ","Qin ","Ying ","Chai ","Li ","Ze ","Xuan ","Lian ","Zhu ","Ze ","Xie ","Mang ","Xie ","Qi ","Rong ","Jian ","Meng ","Hao ","Ruan ","Huo ","Zhuo ","Jie ","Bin ","He ","Mie ","Fan ","Lei ","Jie ","La ","Mi ","Li ","Chun ","Li ","Qiu ","Nie ","Lu ","Du ","Xiao ","Zhu ","Long ","Li ","Long ","Feng ","Ye ","Beng ","Shang ","Gu ","Juan ","Ying ","[?] ","Xi ","Can ","Qu ","Quan ","Du ","Can ","Man ","Jue ","Jie ","Zhu ","Zha ","Xie ","Huang ","Niu ","Pei ","Nu ","Xin ","Zhong ","Mo ","Er ","Ke ","Mie ","Xi ","Xing ","Yan ","Kan ","Yuan ","[?] ","Ling ","Xuan ","Shu ","Xian ","Tong ","Long ","Jie ","Xian ","Ya ","Hu ","Wei ","Dao ","Chong ","Wei ","Dao ","Zhun ","Heng ","Qu ","Yi ","Yi ","Bu ","Gan ","Yu ","Biao ","Cha ","Yi ","Shan ","Chen ","Fu ","Gun ","Fen ","Shuai ","Jie ","Na ","Zhong ","Dan ","Ri ","Zhong ","Zhong ","Xie ","Qi ","Xie ","Ran ","Zhi ","Ren ","Qin ","Jin ","Jun ","Yuan ","Mei ","Chai ","Ao ","Niao ","Hui ","Ran ","Jia ","Tuo ","Ling ","Dai ","Bao ","Pao ","Yao ","Zuo ","Bi ","Shao ","Tan ","Ju ","He ","Shu ","Xiu ","Zhen ","Yi ","Pa ","Bo ","Di ","Wa ","Fu ","Gun ","Zhi ","Zhi ","Ran ","Pan ","Yi ","Mao ","Tuo ","Na ","Kou ","Xian ","Chan ","Qu ","Bei ","Gun ","Xi ","Ne ","Bo ","Horo ","Fu ","Yi ","Chi ","Ku ","Ren ","Jiang ","Jia ","Cun ","Mo ","Jie ","Er ","Luo ","Ru ","Zhu ","Gui ","Yin ","Cai ","Lie ","Kamishimo ","Yuki ","Zhuang ","Dang ","[?] ","Kun ","Ken ","Niao ","Shu ","Jia ","Kun ","Cheng ","Li ","Juan ","Shen ","Pou ","Ge ","Yi ","Yu ","Zhen ","Liu ","Qiu ","Qun ","Ji ","Yi ","Bu ","Zhuang ","Shui ","Sha ","Qun ","Li ","Lian ","Lian ","Ku ","Jian ","Fou ","Chan ","Bi ","Gun ","Tao ","Yuan ","Ling ","Chi ","Chang ","Chou ","Duo ","Biao ","Liang ","Chang ","Pei ","Pei ","Fei ","Yuan ","Luo ","Guo ","Yan ","Du ","Xi ","Zhi ","Ju ","Qi "]});var R5=y((cet,E5)=>{E5.exports=["Ji ","Zhi ","Gua ","Ken ","Che ","Ti ","Ti ","Fu ","Chong ","Xie ","Bian ","Die ","Kun ","Duan ","Xiu ","Xiu ","He ","Yuan ","Bao ","Bao ","Fu ","Yu ","Tuan ","Yan ","Hui ","Bei ","Chu ","Lu ","Ena ","Hitoe ","Yun ","Da ","Gou ","Da ","Huai ","Rong ","Yuan ","Ru ","Nai ","Jiong ","Suo ","Ban ","Tun ","Chi ","Sang ","Niao ","Ying ","Jie ","Qian ","Huai ","Ku ","Lian ","Bao ","Li ","Zhe ","Shi ","Lu ","Yi ","Die ","Xie ","Xian ","Wei ","Biao ","Cao ","Ji ","Jiang ","Sen ","Bao ","Xiang ","Chihaya ","Pu ","Jian ","Zhuan ","Jian ","Zui ","Ji ","Dan ","Za ","Fan ","Bo ","Xiang ","Xin ","Bie ","Rao ","Man ","Lan ","Ao ","Duo ","Gui ","Cao ","Sui ","Nong ","Chan ","Lian ","Bi ","Jin ","Dang ","Shu ","Tan ","Bi ","Lan ","Pu ","Ru ","Zhi ","[?] ","Shu ","Wa ","Shi ","Bai ","Xie ","Bo ","Chen ","Lai ","Long ","Xi ","Xian ","Lan ","Zhe ","Dai ","Tasuki ","Zan ","Shi ","Jian ","Pan ","Yi ","Ran ","Ya ","Xi ","Xi ","Yao ","Feng ","Tan ","[?] ","Biao ","Fu ","Ba ","He ","Ji ","Ji ","Jian ","Guan ","Bian ","Yan ","Gui ","Jue ","Pian ","Mao ","Mi ","Mi ","Mie ","Shi ","Si ","Zhan ","Luo ","Jue ","Mi ","Tiao ","Lian ","Yao ","Zhi ","Jun ","Xi ","Shan ","Wei ","Xi ","Tian ","Yu ","Lan ","E ","Du ","Qin ","Pang ","Ji ","Ming ","Ying ","Gou ","Qu ","Zhan ","Jin ","Guan ","Deng ","Jian ","Luo ","Qu ","Jian ","Wei ","Jue ","Qu ","Luo ","Lan ","Shen ","Di ","Guan ","Jian ","Guan ","Yan ","Gui ","Mi ","Shi ","Zhan ","Lan ","Jue ","Ji ","Xi ","Di ","Tian ","Yu ","Gou ","Jin ","Qu ","Jiao ","Jiu ","Jin ","Cu ","Jue ","Zhi ","Chao ","Ji ","Gu ","Dan ","Zui ","Di ","Shang ","Hua ","Quan ","Ge ","Chi ","Jie ","Gui ","Gong ","Hong ","Jie ","Hun ","Qiu ","Xing ","Su ","Ni ","Ji ","Lu ","Zhi ","Zha ","Bi ","Xing ","Hu ","Shang ","Gong ","Zhi ","Xue ","Chu ","Xi ","Yi ","Lu ","Jue ","Xi ","Yan ","Xi "]});var L5=y((het,_5)=>{_5.exports=["Yan ","Yan ","Ding ","Fu ","Qiu ","Qiu ","Jiao ","Hong ","Ji ","Fan ","Xun ","Diao ","Hong ","Cha ","Tao ","Xu ","Jie ","Yi ","Ren ","Xun ","Yin ","Shan ","Qi ","Tuo ","Ji ","Xun ","Yin ","E ","Fen ","Ya ","Yao ","Song ","Shen ","Yin ","Xin ","Jue ","Xiao ","Ne ","Chen ","You ","Zhi ","Xiong ","Fang ","Xin ","Chao ","She ","Xian ","Sha ","Tun ","Xu ","Yi ","Yi ","Su ","Chi ","He ","Shen ","He ","Xu ","Zhen ","Zhu ","Zheng ","Gou ","Zi ","Zi ","Zhan ","Gu ","Fu ","Quan ","Die ","Ling ","Di ","Yang ","Li ","Nao ","Pan ","Zhou ","Gan ","Yi ","Ju ","Ao ","Zha ","Tuo ","Yi ","Qu ","Zhao ","Ping ","Bi ","Xiong ","Qu ","Ba ","Da ","Zu ","Tao ","Zhu ","Ci ","Zhe ","Yong ","Xu ","Xun ","Yi ","Huang ","He ","Shi ","Cha ","Jiao ","Shi ","Hen ","Cha ","Gou ","Gui ","Quan ","Hui ","Jie ","Hua ","Gai ","Xiang ","Wei ","Shen ","Chou ","Tong ","Mi ","Zhan ","Ming ","E ","Hui ","Yan ","Xiong ","Gua ","Er ","Beng ","Tiao ","Chi ","Lei ","Zhu ","Kuang ","Kua ","Wu ","Yu ","Teng ","Ji ","Zhi ","Ren ","Su ","Lang ","E ","Kuang ","E ","Shi ","Ting ","Dan ","Bo ","Chan ","You ","Heng ","Qiao ","Qin ","Shua ","An ","Yu ","Xiao ","Cheng ","Jie ","Xian ","Wu ","Wu ","Gao ","Song ","Pu ","Hui ","Jing ","Shuo ","Zhen ","Shuo ","Du ","Yasashi ","Chang ","Shui ","Jie ","Ke ","Qu ","Cong ","Xiao ","Sui ","Wang ","Xuan ","Fei ","Chi ","Ta ","Yi ","Na ","Yin ","Diao ","Pi ","Chuo ","Chan ","Chen ","Zhun ","Ji ","Qi ","Tan ","Zhui ","Wei ","Ju ","Qing ","Jian ","Zheng ","Ze ","Zou ","Qian ","Zhuo ","Liang ","Jian ","Zhu ","Hao ","Lun ","Shen ","Biao ","Huai ","Pian ","Yu ","Die ","Xu ","Pian ","Shi ","Xuan ","Shi ","Hun ","Hua ","E ","Zhong ","Di ","Xie ","Fu ","Pu ","Ting ","Jian ","Qi ","Yu ","Zi ","Chuan ","Xi ","Hui ","Yin ","An ","Xian ","Nan ","Chen ","Feng ","Zhu ","Yang ","Yan ","Heng ","Xuan ","Ge ","Nuo ","Qi "]});var F5=y((det,I5)=>{I5.exports=["Mou ","Ye ","Wei ","[?] ","Teng ","Zou ","Shan ","Jian ","Bo ","Ku ","Huang ","Huo ","Ge ","Ying ","Mi ","Xiao ","Mi ","Xi ","Qiang ","Chen ","Nue ","Ti ","Su ","Bang ","Chi ","Qian ","Shi ","Jiang ","Yuan ","Xie ","Xue ","Tao ","Yao ","Yao ","[?] ","Yu ","Biao ","Cong ","Qing ","Li ","Mo ","Mo ","Shang ","Zhe ","Miu ","Jian ","Ze ","Jie ","Lian ","Lou ","Can ","Ou ","Guan ","Xi ","Zhuo ","Ao ","Ao ","Jin ","Zhe ","Yi ","Hu ","Jiang ","Man ","Chao ","Han ","Hua ","Chan ","Xu ","Zeng ","Se ","Xi ","She ","Dui ","Zheng ","Nao ","Lan ","E ","Ying ","Jue ","Ji ","Zun ","Jiao ","Bo ","Hui ","Zhuan ","Mu ","Zen ","Zha ","Shi ","Qiao ","Tan ","Zen ","Pu ","Sheng ","Xuan ","Zao ","Tan ","Dang ","Sui ","Qian ","Ji ","Jiao ","Jing ","Lian ","Nou ","Yi ","Ai ","Zhan ","Pi ","Hui ","Hua ","Yi ","Yi ","Shan ","Rang ","Nou ","Qian ","Zhui ","Ta ","Hu ","Zhou ","Hao ","Ye ","Ying ","Jian ","Yu ","Jian ","Hui ","Du ","Zhe ","Xuan ","Zan ","Lei ","Shen ","Wei ","Chan ","Li ","Yi ","Bian ","Zhe ","Yan ","E ","Chou ","Wei ","Chou ","Yao ","Chan ","Rang ","Yin ","Lan ","Chen ","Huo ","Zhe ","Huan ","Zan ","Yi ","Dang ","Zhan ","Yan ","Du ","Yan ","Ji ","Ding ","Fu ","Ren ","Ji ","Jie ","Hong ","Tao ","Rang ","Shan ","Qi ","Tuo ","Xun ","Yi ","Xun ","Ji ","Ren ","Jiang ","Hui ","Ou ","Ju ","Ya ","Ne ","Xu ","E ","Lun ","Xiong ","Song ","Feng ","She ","Fang ","Jue ","Zheng ","Gu ","He ","Ping ","Zu ","Shi ","Xiong ","Zha ","Su ","Zhen ","Di ","Zou ","Ci ","Qu ","Zhao ","Bi ","Yi ","Yi ","Kuang ","Lei ","Shi ","Gua ","Shi ","Jie ","Hui ","Cheng ","Zhu ","Shen ","Hua ","Dan ","Gou ","Quan ","Gui ","Xun ","Yi ","Zheng ","Gai ","Xiang ","Cha ","Hun ","Xu ","Zhou ","Jie ","Wu ","Yu ","Qiao ","Wu ","Gao ","You ","Hui ","Kuang ","Shuo ","Song ","Ai ","Qing ","Zhu ","Zou ","Nuo ","Du ","Zhuo ","Fei ","Ke ","Wei "]});var M5=y((get,j5)=>{j5.exports=["Yu ","Shui ","Shen ","Diao ","Chan ","Liang ","Zhun ","Sui ","Tan ","Shen ","Yi ","Mou ","Chen ","Die ","Huang ","Jian ","Xie ","Nue ","Ye ","Wei ","E ","Yu ","Xuan ","Chan ","Zi ","An ","Yan ","Di ","Mi ","Pian ","Xu ","Mo ","Dang ","Su ","Xie ","Yao ","Bang ","Shi ","Qian ","Mi ","Jin ","Man ","Zhe ","Jian ","Miu ","Tan ","Zen ","Qiao ","Lan ","Pu ","Jue ","Yan ","Qian ","Zhan ","Chen ","Gu ","Qian ","Hong ","Xia ","Jue ","Hong ","Han ","Hong ","Xi ","Xi ","Huo ","Liao ","Han ","Du ","Long ","Dou ","Jiang ","Qi ","Shi ","Li ","Deng ","Wan ","Bi ","Shu ","Xian ","Feng ","Zhi ","Zhi ","Yan ","Yan ","Shi ","Chu ","Hui ","Tun ","Yi ","Tun ","Yi ","Jian ","Ba ","Hou ","E ","Cu ","Xiang ","Huan ","Jian ","Ken ","Gai ","Qu ","Fu ","Xi ","Bin ","Hao ","Yu ","Zhu ","Jia ","[?] ","Xi ","Bo ","Wen ","Huan ","Bin ","Di ","Zong ","Fen ","Yi ","Zhi ","Bao ","Chai ","Han ","Pi ","Na ","Pi ","Gou ","Na ","You ","Diao ","Mo ","Si ","Xiu ","Huan ","Kun ","He ","He ","Mo ","Han ","Mao ","Li ","Ni ","Bi ","Yu ","Jia ","Tuan ","Mao ","Pi ","Xi ","E ","Ju ","Mo ","Chu ","Tan ","Huan ","Jue ","Bei ","Zhen ","Yuan ","Fu ","Cai ","Gong ","Te ","Yi ","Hang ","Wan ","Pin ","Huo ","Fan ","Tan ","Guan ","Ze ","Zhi ","Er ","Zhu ","Shi ","Bi ","Zi ","Er ","Gui ","Pian ","Bian ","Mai ","Dai ","Sheng ","Kuang ","Fei ","Tie ","Yi ","Chi ","Mao ","He ","Bi ","Lu ","Ren ","Hui ","Gai ","Pian ","Zi ","Jia ","Xu ","Zei ","Jiao ","Gai ","Zang ","Jian ","Ying ","Xun ","Zhen ","She ","Bin ","Bin ","Qiu ","She ","Chuan ","Zang ","Zhou ","Lai ","Zan ","Si ","Chen ","Shang ","Tian ","Pei ","Geng ","Xian ","Mai ","Jian ","Sui ","Fu ","Tan ","Cong ","Cong ","Zhi ","Ji ","Zhang ","Du ","Jin ","Xiong ","Shun ","Yun ","Bao ","Zai ","Lai ","Feng ","Cang ","Ji ","Sheng ","Ai ","Zhuan ","Fu ","Gou ","Sai ","Ze ","Liao "]});var A5=y((pet,O5)=>{O5.exports=["Wei ","Bai ","Chen ","Zhuan ","Zhi ","Zhui ","Biao ","Yun ","Zeng ","Tan ","Zan ","Yan ","[?] ","Shan ","Wan ","Ying ","Jin ","Gan ","Xian ","Zang ","Bi ","Du ","Shu ","Yan ","[?] ","Xuan ","Long ","Gan ","Zang ","Bei ","Zhen ","Fu ","Yuan ","Gong ","Cai ","Ze ","Xian ","Bai ","Zhang ","Huo ","Zhi ","Fan ","Tan ","Pin ","Bian ","Gou ","Zhu ","Guan ","Er ","Jian ","Bi ","Shi ","Tie ","Gui ","Kuang ","Dai ","Mao ","Fei ","He ","Yi ","Zei ","Zhi ","Jia ","Hui ","Zi ","Ren ","Lu ","Zang ","Zi ","Gai ","Jin ","Qiu ","Zhen ","Lai ","She ","Fu ","Du ","Ji ","Shu ","Shang ","Si ","Bi ","Zhou ","Geng ","Pei ","Tan ","Lai ","Feng ","Zhui ","Fu ","Zhuan ","Sai ","Ze ","Yan ","Zan ","Yun ","Zeng ","Shan ","Ying ","Gan ","Chi ","Xi ","She ","Nan ","Xiong ","Xi ","Cheng ","He ","Cheng ","Zhe ","Xia ","Tang ","Zou ","Zou ","Li ","Jiu ","Fu ","Zhao ","Gan ","Qi ","Shan ","Qiong ","Qin ","Xian ","Ci ","Jue ","Qin ","Chi ","Ci ","Chen ","Chen ","Die ","Ju ","Chao ","Di ","Se ","Zhan ","Zhu ","Yue ","Qu ","Jie ","Chi ","Chu ","Gua ","Xue ","Ci ","Tiao ","Duo ","Lie ","Gan ","Suo ","Cu ","Xi ","Zhao ","Su ","Yin ","Ju ","Jian ","Que ","Tang ","Chuo ","Cui ","Lu ","Qu ","Dang ","Qiu ","Zi ","Ti ","Qu ","Chi ","Huang ","Qiao ","Qiao ","Yao ","Zao ","Ti ","[?] ","Zan ","Zan ","Zu ","Pa ","Bao ","Ku ","Ke ","Dun ","Jue ","Fu ","Chen ","Jian ","Fang ","Zhi ","Sa ","Yue ","Pa ","Qi ","Yue ","Qiang ","Tuo ","Tai ","Yi ","Nian ","Ling ","Mei ","Ba ","Die ","Ku ","Tuo ","Jia ","Ci ","Pao ","Qia ","Zhu ","Ju ","Die ","Zhi ","Fu ","Pan ","Ju ","Shan ","Bo ","Ni ","Ju ","Li ","Gen ","Yi ","Ji ","Dai ","Xian ","Jiao ","Duo ","Zhu ","Zhuan ","Kua ","Zhuai ","Gui ","Qiong ","Kui ","Xiang ","Chi ","Lu ","Beng ","Zhi ","Jia ","Tiao ","Cai ","Jian ","Ta ","Qiao ","Bi ","Xian ","Duo ","Ji ","Ju ","Ji ","Shu ","Tu "]});var H5=y((fet,N5)=>{N5.exports=["Chu ","Jing ","Nie ","Xiao ","Bo ","Chi ","Qun ","Mou ","Shu ","Lang ","Yong ","Jiao ","Chou ","Qiao ","[?] ","Ta ","Jian ","Qi ","Wo ","Wei ","Zhuo ","Jie ","Ji ","Nie ","Ju ","Ju ","Lun ","Lu ","Leng ","Huai ","Ju ","Chi ","Wan ","Quan ","Ti ","Bo ","Zu ","Qie ","Ji ","Cu ","Zong ","Cai ","Zong ","Peng ","Zhi ","Zheng ","Dian ","Zhi ","Yu ","Duo ","Dun ","Chun ","Yong ","Zhong ","Di ","Zhe ","Chen ","Chuai ","Jian ","Gua ","Tang ","Ju ","Fu ","Zu ","Die ","Pian ","Rou ","Nuo ","Ti ","Cha ","Tui ","Jian ","Dao ","Cuo ","Xi ","Ta ","Qiang ","Zhan ","Dian ","Ti ","Ji ","Nie ","Man ","Liu ","Zhan ","Bi ","Chong ","Lu ","Liao ","Cu ","Tang ","Dai ","Suo ","Xi ","Kui ","Ji ","Zhi ","Qiang ","Di ","Man ","Zong ","Lian ","Beng ","Zao ","Nian ","Bie ","Tui ","Ju ","Deng ","Ceng ","Xian ","Fan ","Chu ","Zhong ","Dun ","Bo ","Cu ","Zu ","Jue ","Jue ","Lin ","Ta ","Qiao ","Qiao ","Pu ","Liao ","Dun ","Cuan ","Kuang ","Zao ","Ta ","Bi ","Bi ","Zhu ","Ju ","Chu ","Qiao ","Dun ","Chou ","Ji ","Wu ","Yue ","Nian ","Lin ","Lie ","Zhi ","Li ","Zhi ","Chan ","Chu ","Duan ","Wei ","Long ","Lin ","Xian ","Wei ","Zuan ","Lan ","Xie ","Rang ","Xie ","Nie ","Ta ","Qu ","Jie ","Cuan ","Zuan ","Xi ","Kui ","Jue ","Lin ","Shen ","Gong ","Dan ","Segare ","Qu ","Ti ","Duo ","Duo ","Gong ","Lang ","Nerau ","Luo ","Ai ","Ji ","Ju ","Tang ","Utsuke ","[?] ","Yan ","Shitsuke ","Kang ","Qu ","Lou ","Lao ","Tuo ","Zhi ","Yagate ","Ti ","Dao ","Yagate ","Yu ","Che ","Ya ","Gui ","Jun ","Wei ","Yue ","Xin ","Di ","Xuan ","Fan ","Ren ","Shan ","Qiang ","Shu ","Tun ","Chen ","Dai ","E ","Na ","Qi ","Mao ","Ruan ","Ren ","Fan ","Zhuan ","Hong ","Hu ","Qu ","Huang ","Di ","Ling ","Dai ","Ao ","Zhen ","Fan ","Kuang ","Ang ","Peng ","Bei ","Gu ","Ku ","Pao ","Zhu ","Rong ","E ","Ba ","Zhou ","Zhi ","Yao ","Ke ","Yi ","Qing ","Shi ","Ping "]});var B5=y((met,q5)=>{q5.exports=["Er ","Qiong ","Ju ","Jiao ","Guang ","Lu ","Kai ","Quan ","Zhou ","Zai ","Zhi ","She ","Liang ","Yu ","Shao ","You ","Huan ","Yun ","Zhe ","Wan ","Fu ","Qing ","Zhou ","Ni ","Ling ","Zhe ","Zhan ","Liang ","Zi ","Hui ","Wang ","Chuo ","Guo ","Kan ","Yi ","Peng ","Qian ","Gun ","Nian ","Pian ","Guan ","Bei ","Lun ","Pai ","Liang ","Ruan ","Rou ","Ji ","Yang ","Xian ","Chuan ","Cou ","Qun ","Ge ","You ","Hong ","Shu ","Fu ","Zi ","Fu ","Wen ","Ben ","Zhan ","Yu ","Wen ","Tao ","Gu ","Zhen ","Xia ","Yuan ","Lu ","Jiu ","Chao ","Zhuan ","Wei ","Hun ","Sori ","Che ","Jiao ","Zhan ","Pu ","Lao ","Fen ","Fan ","Lin ","Ge ","Se ","Kan ","Huan ","Yi ","Ji ","Dui ","Er ","Yu ","Xian ","Hong ","Lei ","Pei ","Li ","Li ","Lu ","Lin ","Che ","Ya ","Gui ","Xuan ","Di ","Ren ","Zhuan ","E ","Lun ","Ruan ","Hong ","Ku ","Ke ","Lu ","Zhou ","Zhi ","Yi ","Hu ","Zhen ","Li ","Yao ","Qing ","Shi ","Zai ","Zhi ","Jiao ","Zhou ","Quan ","Lu ","Jiao ","Zhe ","Fu ","Liang ","Nian ","Bei ","Hui ","Gun ","Wang ","Liang ","Chuo ","Zi ","Cou ","Fu ","Ji ","Wen ","Shu ","Pei ","Yuan ","Xia ","Zhan ","Lu ","Che ","Lin ","Xin ","Gu ","Ci ","Ci ","Pi ","Zui ","Bian ","La ","La ","Ci ","Xue ","Ban ","Bian ","Bian ","Bian ","[?] ","Bian ","Ban ","Ci ","Bian ","Bian ","Chen ","Ru ","Nong ","Nong ","Zhen ","Chuo ","Chuo ","Suberu ","Reng ","Bian ","Bian ","Sip ","Ip ","Liao ","Da ","Chan ","Gan ","Qian ","Yu ","Yu ","Qi ","Xun ","Yi ","Guo ","Mai ","Qi ","Za ","Wang ","Jia ","Zhun ","Ying ","Ti ","Yun ","Jin ","Hang ","Ya ","Fan ","Wu ","Da ","E ","Huan ","Zhe ","Totemo ","Jin ","Yuan ","Wei ","Lian ","Chi ","Che ","Ni ","Tiao ","Zhi ","Yi ","Jiong ","Jia ","Chen ","Dai ","Er ","Di ","Po ","Wang ","Die ","Ze ","Tao ","Shu ","Tuo ","Kep ","Jing ","Hui ","Tong ","You ","Mi ","Beng ","Ji ","Nai ","Yi ","Jie ","Zhui ","Lie ","Xun "]});var Y5=y((bet,W5)=>{W5.exports=["Tui ","Song ","Gua ","Tao ","Pang ","Hou ","Ni ","Dun ","Jiong ","Xuan ","Xun ","Bu ","You ","Xiao ","Qiu ","Tou ","Zhu ","Qiu ","Di ","Di ","Tu ","Jing ","Ti ","Dou ","Yi ","Zhe ","Tong ","Guang ","Wu ","Shi ","Cheng ","Su ","Zao ","Qun ","Feng ","Lian ","Suo ","Hui ","Li ","Sako ","Lai ","Ben ","Cuo ","Jue ","Beng ","Huan ","Dai ","Lu ","You ","Zhou ","Jin ","Yu ","Chuo ","Kui ","Wei ","Ti ","Yi ","Da ","Yuan ","Luo ","Bi ","Nuo ","Yu ","Dang ","Sui ","Dun ","Sui ","Yan ","Chuan ","Chi ","Ti ","Yu ","Shi ","Zhen ","You ","Yun ","E ","Bian ","Guo ","E ","Xia ","Huang ","Qiu ","Dao ","Da ","Wei ","Appare ","Yi ","Gou ","Yao ","Chu ","Liu ","Xun ","Ta ","Di ","Chi ","Yuan ","Su ","Ta ","Qian ","[?] ","Yao ","Guan ","Zhang ","Ao ","Shi ","Ce ","Chi ","Su ","Zao ","Zhe ","Dun ","Di ","Lou ","Chi ","Cuo ","Lin ","Zun ","Rao ","Qian ","Xuan ","Yu ","Yi ","Wu ","Liao ","Ju ","Shi ","Bi ","Yao ","Mai ","Xie ","Sui ","Huan ","Zhan ","Teng ","Er ","Miao ","Bian ","Bian ","La ","Li ","Yuan ","Yao ","Luo ","Li ","Yi ","Ting ","Deng ","Qi ","Yong ","Shan ","Han ","Yu ","Mang ","Ru ","Qiong ","[?] ","Kuang ","Fu ","Kang ","Bin ","Fang ","Xing ","Na ","Xin ","Shen ","Bang ","Yuan ","Cun ","Huo ","Xie ","Bang ","Wu ","Ju ","You ","Han ","Tai ","Qiu ","Bi ","Pei ","Bing ","Shao ","Bei ","Wa ","Di ","Zou ","Ye ","Lin ","Kuang ","Gui ","Zhu ","Shi ","Ku ","Yu ","Gai ","Ge ","Xi ","Zhi ","Ji ","Xun ","Hou ","Xing ","Jiao ","Xi ","Gui ","Nuo ","Lang ","Jia ","Kuai ","Zheng ","Otoko ","Yun ","Yan ","Cheng ","Dou ","Chi ","Lu ","Fu ","Wu ","Fu ","Gao ","Hao ","Lang ","Jia ","Geng ","Jun ","Ying ","Bo ","Xi ","Bei ","Li ","Yun ","Bu ","Xiao ","Qi ","Pi ","Qing ","Guo ","Zhou ","Tan ","Zou ","Ping ","Lai ","Ni ","Chen ","You ","Bu ","Xiang ","Dan ","Ju ","Yong ","Qiao ","Yi ","Du ","Yan ","Mei "]});var J5=y((yet,Z5)=>{Z5.exports=["Ruo ","Bei ","E ","Yu ","Juan ","Yu ","Yun ","Hou ","Kui ","Xiang ","Xiang ","Sou ","Tang ","Ming ","Xi ","Ru ","Chu ","Zi ","Zou ","Ju ","Wu ","Xiang ","Yun ","Hao ","Yong ","Bi ","Mo ","Chao ","Fu ","Liao ","Yin ","Zhuan ","Hu ","Qiao ","Yan ","Zhang ","Fan ","Qiao ","Xu ","Deng ","Bi ","Xin ","Bi ","Ceng ","Wei ","Zheng ","Mao ","Shan ","Lin ","Po ","Dan ","Meng ","Ye ","Cao ","Kuai ","Feng ","Meng ","Zou ","Kuang ","Lian ","Zan ","Chan ","You ","Qi ","Yan ","Chan ","Zan ","Ling ","Huan ","Xi ","Feng ","Zan ","Li ","You ","Ding ","Qiu ","Zhuo ","Pei ","Zhou ","Yi ","Hang ","Yu ","Jiu ","Yan ","Zui ","Mao ","Dan ","Xu ","Tou ","Zhen ","Fen ","Sakenomoto ","[?] ","Yun ","Tai ","Tian ","Qia ","Tuo ","Zuo ","Han ","Gu ","Su ","Po ","Chou ","Zai ","Ming ","Luo ","Chuo ","Chou ","You ","Tong ","Zhi ","Xian ","Jiang ","Cheng ","Yin ","Tu ","Xiao ","Mei ","Ku ","Suan ","Lei ","Pu ","Zui ","Hai ","Yan ","Xi ","Niang ","Wei ","Lu ","Lan ","Yan ","Tao ","Pei ","Zhan ","Chun ","Tan ","Zui ","Chuo ","Cu ","Kun ","Ti ","Mian ","Du ","Hu ","Xu ","Xing ","Tan ","Jiu ","Chun ","Yun ","Po ","Ke ","Sou ","Mi ","Quan ","Chou ","Cuo ","Yun ","Yong ","Ang ","Zha ","Hai ","Tang ","Jiang ","Piao ","Shan ","Yu ","Li ","Zao ","Lao ","Yi ","Jiang ","Pu ","Jiao ","Xi ","Tan ","Po ","Nong ","Yi ","Li ","Ju ","Jiao ","Yi ","Niang ","Ru ","Xun ","Chou ","Yan ","Ling ","Mi ","Mi ","Niang ","Xin ","Jiao ","Xi ","Mi ","Yan ","Bian ","Cai ","Shi ","You ","Shi ","Shi ","Li ","Zhong ","Ye ","Liang ","Li ","Jin ","Jin ","Qiu ","Yi ","Diao ","Dao ","Zhao ","Ding ","Po ","Qiu ","He ","Fu ","Zhen ","Zhi ","Ba ","Luan ","Fu ","Nai ","Diao ","Shan ","Qiao ","Kou ","Chuan ","Zi ","Fan ","Yu ","Hua ","Han ","Gong ","Qi ","Mang ","Ri ","Di ","Si ","Xi ","Yi ","Chai ","Shi ","Tu ","Xi ","Nu ","Qian ","Ishiyumi ","Jian ","Pi ","Ye ","Yin "]});var U5=y((vet,$5)=>{$5.exports=["Ba ","Fang ","Chen ","Xing ","Tou ","Yue ","Yan ","Fu ","Pi ","Na ","Xin ","E ","Jue ","Dun ","Gou ","Yin ","Qian ","Ban ","Ji ","Ren ","Chao ","Niu ","Fen ","Yun ","Ji ","Qin ","Pi ","Guo ","Hong ","Yin ","Jun ","Shi ","Yi ","Zhong ","Nie ","Gai ","Ri ","Huo ","Tai ","Kang ","Habaki ","Irori ","Ngaak ","[?] ","Duo ","Zi ","Ni ","Tu ","Shi ","Min ","Gu ","E ","Ling ","Bing ","Yi ","Gu ","Ba ","Pi ","Yu ","Si ","Zuo ","Bu ","You ","Dian ","Jia ","Zhen ","Shi ","Shi ","Tie ","Ju ","Zhan ","Shi ","She ","Xuan ","Zhao ","Bao ","He ","Bi ","Sheng ","Chu ","Shi ","Bo ","Zhu ","Chi ","Za ","Po ","Tong ","Qian ","Fu ","Zhai ","Liu ","Qian ","Fu ","Li ","Yue ","Pi ","Yang ","Ban ","Bo ","Jie ","Gou ","Shu ","Zheng ","Mu ","Ni ","Nie ","Di ","Jia ","Mu ","Dan ","Shen ","Yi ","Si ","Kuang ","Ka ","Bei ","Jian ","Tong ","Xing ","Hong ","Jiao ","Chi ","Er ","Ge ","Bing ","Shi ","Mou ","Jia ","Yin ","Jun ","Zhou ","Chong ","Shang ","Tong ","Mo ","Lei ","Ji ","Yu ","Xu ","Ren ","Zun ","Zhi ","Qiong ","Shan ","Chi ","Xian ","Xing ","Quan ","Pi ","Tie ","Zhu ","Hou ","Ming ","Kua ","Yao ","Xian ","Xian ","Xiu ","Jun ","Cha ","Lao ","Ji ","Pi ","Ru ","Mi ","Yi ","Yin ","Guang ","An ","Diou ","You ","Se ","Kao ","Qian ","Luan ","Kasugai ","Ai ","Diao ","Han ","Rui ","Shi ","Keng ","Qiu ","Xiao ","Zhe ","Xiu ","Zang ","Ti ","Cuo ","Gua ","Gong ","Zhong ","Dou ","Lu ","Mei ","Lang ","Wan ","Xin ","Yun ","Bei ","Wu ","Su ","Yu ","Chan ","Ting ","Bo ","Han ","Jia ","Hong ","Cuan ","Feng ","Chan ","Wan ","Zhi ","Si ","Xuan ","Wu ","Wu ","Tiao ","Gong ","Zhuo ","Lue ","Xing ","Qian ","Shen ","Han ","Lue ","Xie ","Chu ","Zheng ","Ju ","Xian ","Tie ","Mang ","Pu ","Li ","Pan ","Rui ","Cheng ","Gao ","Li ","Te ","Pyeng ","Zhu ","[?] ","Tu ","Liu ","Zui ","Ju ","Chang ","Yuan ","Jian ","Gang ","Diao ","Tao ","Chang "]});var G5=y((wet,X5)=>{X5.exports=["Lun ","Kua ","Ling ","Bei ","Lu ","Li ","Qiang ","Pou ","Juan ","Min ","Zui ","Peng ","An ","Pi ","Xian ","Ya ","Zhui ","Lei ","A ","Kong ","Ta ","Kun ","Du ","Wei ","Chui ","Zi ","Zheng ","Ben ","Nie ","Cong ","Qun ","Tan ","Ding ","Qi ","Qian ","Zhuo ","Qi ","Yu ","Jin ","Guan ","Mao ","Chang ","Tian ","Xi ","Lian ","Tao ","Gu ","Cuo ","Shu ","Zhen ","Lu ","Meng ","Lu ","Hua ","Biao ","Ga ","Lai ","Ken ","Kazari ","Bu ","Nai ","Wan ","Zan ","[?] ","De ","Xian ","[?] ","Huo ","Liang ","[?] ","Men ","Kai ","Ying ","Di ","Lian ","Guo ","Xian ","Du ","Tu ","Wei ","Cong ","Fu ","Rou ","Ji ","E ","Rou ","Chen ","Ti ","Zha ","Hong ","Yang ","Duan ","Xia ","Yu ","Keng ","Xing ","Huang ","Wei ","Fu ","Zhao ","Cha ","Qie ","She ","Hong ","Kui ","Tian ","Mou ","Qiao ","Qiao ","Hou ","Tou ","Cong ","Huan ","Ye ","Min ","Jian ","Duan ","Jian ","Song ","Kui ","Hu ","Xuan ","Duo ","Jie ","Zhen ","Bian ","Zhong ","Zi ","Xiu ","Ye ","Mei ","Pai ","Ai ","Jie ","[?] ","Mei ","Chuo ","Ta ","Bang ","Xia ","Lian ","Suo ","Xi ","Liu ","Zu ","Ye ","Nou ","Weng ","Rong ","Tang ","Suo ","Qiang ","Ge ","Shuo ","Chui ","Bo ","Pan ","Sa ","Bi ","Sang ","Gang ","Zi ","Wu ","Ying ","Huang ","Tiao ","Liu ","Kai ","Sun ","Sha ","Sou ","Wan ","Hao ","Zhen ","Zhen ","Luo ","Yi ","Yuan ","Tang ","Nie ","Xi ","Jia ","Ge ","Ma ","Juan ","Kasugai ","Habaki ","Suo ","[?] ","[?] ","[?] ","Na ","Lu ","Suo ","Ou ","Zu ","Tuan ","Xiu ","Guan ","Xuan ","Lian ","Shou ","Ao ","Man ","Mo ","Luo ","Bi ","Wei ","Liu ","Di ","Qiao ","Cong ","Yi ","Lu ","Ao ","Keng ","Qiang ","Cui ","Qi ","Chang ","Tang ","Man ","Yong ","Chan ","Feng ","Jing ","Biao ","Shu ","Lou ","Xiu ","Cong ","Long ","Zan ","Jian ","Cao ","Li ","Xia ","Xi ","Kang ","[?] ","Beng ","[?] ","[?] ","Zheng ","Lu ","Hua ","Ji ","Pu ","Hui ","Qiang ","Po ","Lin ","Suo ","Xiu ","San ","Cheng "]});var K5=y((xet,z5)=>{z5.exports=["Kui ","Si ","Liu ","Nao ","Heng ","Pie ","Sui ","Fan ","Qiao ","Quan ","Yang ","Tang ","Xiang ","Jue ","Jiao ","Zun ","Liao ","Jie ","Lao ","Dui ","Tan ","Zan ","Ji ","Jian ","Zhong ","Deng ","Ya ","Ying ","Dui ","Jue ","Nou ","Ti ","Pu ","Tie ","[?] ","[?] ","Ding ","Shan ","Kai ","Jian ","Fei ","Sui ","Lu ","Juan ","Hui ","Yu ","Lian ","Zhuo ","Qiao ","Qian ","Zhuo ","Lei ","Bi ","Tie ","Huan ","Ye ","Duo ","Guo ","Dang ","Ju ","Fen ","Da ","Bei ","Yi ","Ai ","Zong ","Xun ","Diao ","Zhu ","Heng ","Zhui ","Ji ","Nie ","Ta ","Huo ","Qing ","Bin ","Ying ","Kui ","Ning ","Xu ","Jian ","Jian ","Yari ","Cha ","Zhi ","Mie ","Li ","Lei ","Ji ","Zuan ","Kuang ","Shang ","Peng ","La ","Du ","Shuo ","Chuo ","Lu ","Biao ","Bao ","Lu ","[?] ","[?] ","Long ","E ","Lu ","Xin ","Jian ","Lan ","Bo ","Jian ","Yao ","Chan ","Xiang ","Jian ","Xi ","Guan ","Cang ","Nie ","Lei ","Cuan ","Qu ","Pan ","Luo ","Zuan ","Luan ","Zao ","Nie ","Jue ","Tang ","Shu ","Lan ","Jin ","Qiu ","Yi ","Zhen ","Ding ","Zhao ","Po ","Diao ","Tu ","Qian ","Chuan ","Shan ","Ji ","Fan ","Diao ","Men ","Nu ","Xi ","Chai ","Xing ","Gai ","Bu ","Tai ","Ju ","Dun ","Chao ","Zhong ","Na ","Bei ","Gang ","Ban ","Qian ","Yao ","Qin ","Jun ","Wu ","Gou ","Kang ","Fang ","Huo ","Tou ","Niu ","Ba ","Yu ","Qian ","Zheng ","Qian ","Gu ","Bo ","E ","Po ","Bu ","Ba ","Yue ","Zuan ","Mu ","Dan ","Jia ","Dian ","You ","Tie ","Bo ","Ling ","Shuo ","Qian ","Liu ","Bao ","Shi ","Xuan ","She ","Bi ","Ni ","Pi ","Duo ","Xing ","Kao ","Lao ","Er ","Mang ","Ya ","You ","Cheng ","Jia ","Ye ","Nao ","Zhi ","Dang ","Tong ","Lu ","Diao ","Yin ","Kai ","Zha ","Zhu ","Xian ","Ting ","Diu ","Xian ","Hua ","Quan ","Sha ","Jia ","Yao ","Ge ","Ming ","Zheng ","Se ","Jiao ","Yi ","Chan ","Chong ","Tang ","An ","Yin ","Ru ","Zhu ","Lao ","Pu ","Wu ","Lai ","Te ","Lian ","Keng "]});var V5=y((Cet,Q5)=>{Q5.exports=["Xiao ","Suo ","Li ","Zheng ","Chu ","Guo ","Gao ","Tie ","Xiu ","Cuo ","Lue ","Feng ","Xin ","Liu ","Kai ","Jian ","Rui ","Ti ","Lang ","Qian ","Ju ","A ","Qiang ","Duo ","Tian ","Cuo ","Mao ","Ben ","Qi ","De ","Kua ","Kun ","Chang ","Xi ","Gu ","Luo ","Chui ","Zhui ","Jin ","Zhi ","Xian ","Juan ","Huo ","Pou ","Tan ","Ding ","Jian ","Ju ","Meng ","Zi ","Qie ","Ying ","Kai ","Qiang ","Song ","E ","Cha ","Qiao ","Zhong ","Duan ","Sou ","Huang ","Huan ","Ai ","Du ","Mei ","Lou ","Zi ","Fei ","Mei ","Mo ","Zhen ","Bo ","Ge ","Nie ","Tang ","Juan ","Nie ","Na ","Liu ","Hao ","Bang ","Yi ","Jia ","Bin ","Rong ","Biao ","Tang ","Man ","Luo ","Beng ","Yong ","Jing ","Di ","Zu ","Xuan ","Liu ","Tan ","Jue ","Liao ","Pu ","Lu ","Dui ","Lan ","Pu ","Cuan ","Qiang ","Deng ","Huo ","Lei ","Huan ","Zhuo ","Lian ","Yi ","Cha ","Biao ","La ","Chan ","Xiang ","Chang ","Chang ","Jiu ","Ao ","Die ","Qu ","Liao ","Mi ","Chang ","Men ","Ma ","Shuan ","Shan ","Huo ","Men ","Yan ","Bi ","Han ","Bi ","San ","Kai ","Kang ","Beng ","Hong ","Run ","San ","Xian ","Xian ","Jian ","Min ","Xia ","Yuru ","Dou ","Zha ","Nao ","Jian ","Peng ","Xia ","Ling ","Bian ","Bi ","Run ","He ","Guan ","Ge ","Ge ","Fa ","Chu ","Hong ","Gui ","Min ","Se ","Kun ","Lang ","Lu ","Ting ","Sha ","Ju ","Yue ","Yue ","Chan ","Qu ","Lin ","Chang ","Shai ","Kun ","Yan ","Min ","Yan ","E ","Hun ","Yu ","Wen ","Xiang ","Bao ","Xiang ","Qu ","Yao ","Wen ","Ban ","An ","Wei ","Yin ","Kuo ","Que ","Lan ","Du ","[?] ","Phwung ","Tian ","Nie ","Ta ","Kai ","He ","Que ","Chuang ","Guan ","Dou ","Qi ","Kui ","Tang ","Guan ","Piao ","Kan ","Xi ","Hui ","Chan ","Pi ","Dang ","Huan ","Ta ","Wen ","[?] ","Men ","Shuan ","Shan ","Yan ","Han ","Bi ","Wen ","Chuang ","Run ","Wei ","Xian ","Hong ","Jian ","Min ","Kang ","Men ","Zha ","Nao ","Gui ","Wen ","Ta ","Min ","Lu ","Kai "]});var t7=y((Det,e7)=>{e7.exports=["Fa ","Ge ","He ","Kun ","Jiu ","Yue ","Lang ","Du ","Yu ","Yan ","Chang ","Xi ","Wen ","Hun ","Yan ","E ","Chan ","Lan ","Qu ","Hui ","Kuo ","Que ","Ge ","Tian ","Ta ","Que ","Kan ","Huan ","Fu ","Fu ","Le ","Dui ","Xin ","Qian ","Wu ","Yi ","Tuo ","Yin ","Yang ","Dou ","E ","Sheng ","Ban ","Pei ","Keng ","Yun ","Ruan ","Zhi ","Pi ","Jing ","Fang ","Yang ","Yin ","Zhen ","Jie ","Cheng ","E ","Qu ","Di ","Zu ","Zuo ","Dian ","Ling ","A ","Tuo ","Tuo ","Po ","Bing ","Fu ","Ji ","Lu ","Long ","Chen ","Xing ","Duo ","Lou ","Mo ","Jiang ","Shu ","Duo ","Xian ","Er ","Gui ","Yu ","Gai ","Shan ","Xun ","Qiao ","Xing ","Chun ","Fu ","Bi ","Xia ","Shan ","Sheng ","Zhi ","Pu ","Dou ","Yuan ","Zhen ","Chu ","Xian ","Tou ","Nie ","Yun ","Xian ","Pei ","Pei ","Zou ","Yi ","Dui ","Lun ","Yin ","Ju ","Chui ","Chen ","Pi ","Ling ","Tao ","Xian ","Lu ","Sheng ","Xian ","Yin ","Zhu ","Yang ","Reng ","Shan ","Chong ","Yan ","Yin ","Yu ","Ti ","Yu ","Long ","Wei ","Wei ","Nie ","Dui ","Sui ","An ","Huang ","Jie ","Sui ","Yin ","Gai ","Yan ","Hui ","Ge ","Yun ","Wu ","Wei ","Ai ","Xi ","Tang ","Ji ","Zhang ","Dao ","Ao ","Xi ","Yin ","[?] ","Rao ","Lin ","Tui ","Deng ","Pi ","Sui ","Sui ","Yu ","Xian ","Fen ","Ni ","Er ","Ji ","Dao ","Xi ","Yin ","E ","Hui ","Long ","Xi ","Li ","Li ","Li ","Zhui ","He ","Zhi ","Zhun ","Jun ","Nan ","Yi ","Que ","Yan ","Qian ","Ya ","Xiong ","Ya ","Ji ","Gu ","Huan ","Zhi ","Gou ","Jun ","Ci ","Yong ","Ju ","Chu ","Hu ","Za ","Luo ","Yu ","Chou ","Diao ","Sui ","Han ","Huo ","Shuang ","Guan ","Chu ","Za ","Yong ","Ji ","Xi ","Chou ","Liu ","Li ","Nan ","Xue ","Za ","Ji ","Ji ","Yu ","Yu ","Xue ","Na ","Fou ","Se ","Mu ","Wen ","Fen ","Pang ","Yun ","Li ","Li ","Ang ","Ling ","Lei ","An ","Bao ","Meng ","Dian ","Dang ","Xing ","Wu ","Zhao "]});var n7=y((Tet,i7)=>{i7.exports=["Xu ","Ji ","Mu ","Chen ","Xiao ","Zha ","Ting ","Zhen ","Pei ","Mei ","Ling ","Qi ","Chou ","Huo ","Sha ","Fei ","Weng ","Zhan ","Yin ","Ni ","Chou ","Tun ","Lin ","[?] ","Dong ","Ying ","Wu ","Ling ","Shuang ","Ling ","Xia ","Hong ","Yin ","Mo ","Mai ","Yun ","Liu ","Meng ","Bin ","Wu ","Wei ","Huo ","Yin ","Xi ","Yi ","Ai ","Dan ","Deng ","Xian ","Yu ","Lu ","Long ","Dai ","Ji ","Pang ","Yang ","Ba ","Pi ","Wei ","[?] ","Xi ","Ji ","Mai ","Meng ","Meng ","Lei ","Li ","Huo ","Ai ","Fei ","Dai ","Long ","Ling ","Ai ","Feng ","Li ","Bao ","[?] ","He ","He ","Bing ","Qing ","Qing ","Jing ","Tian ","Zhen ","Jing ","Cheng ","Qing ","Jing ","Jing ","Dian ","Jing ","Tian ","Fei ","Fei ","Kao ","Mi ","Mian ","Mian ","Pao ","Ye ","Tian ","Hui ","Ye ","Ge ","Ding ","Cha ","Jian ","Ren ","Di ","Du ","Wu ","Ren ","Qin ","Jin ","Xue ","Niu ","Ba ","Yin ","Sa ","Na ","Mo ","Zu ","Da ","Ban ","Yi ","Yao ","Tao ","Tuo ","Jia ","Hong ","Pao ","Yang ","Tomo ","Yin ","Jia ","Tao ","Ji ","Xie ","An ","An ","Hen ","Gong ","Kohaze ","Da ","Qiao ","Ting ","Wan ","Ying ","Sui ","Tiao ","Qiao ","Xuan ","Kong ","Beng ","Ta ","Zhang ","Bing ","Kuo ","Ju ","La ","Xie ","Rou ","Bang ","Yi ","Qiu ","Qiu ","He ","Xiao ","Mu ","Ju ","Jian ","Bian ","Di ","Jian ","On ","Tao ","Gou ","Ta ","Bei ","Xie ","Pan ","Ge ","Bi ","Kuo ","Tang ","Lou ","Gui ","Qiao ","Xue ","Ji ","Jian ","Jiang ","Chan ","Da ","Huo ","Xian ","Qian ","Du ","Wa ","Jian ","Lan ","Wei ","Ren ","Fu ","Mei ","Juan ","Ge ","Wei ","Qiao ","Han ","Chang ","[?] ","Rou ","Xun ","She ","Wei ","Ge ","Bei ","Tao ","Gou ","Yun ","[?] ","Bi ","Wei ","Hui ","Du ","Wa ","Du ","Wei ","Ren ","Fu ","Han ","Wei ","Yun ","Tao ","Jiu ","Jiu ","Xian ","Xie ","Xian ","Ji ","Yin ","Za ","Yun ","Shao ","Le ","Peng ","Heng ","Ying ","Yun ","Peng ","Yin ","Yin ","Xiang "]});var o7=y((ket,r7)=>{r7.exports=["Hu ","Ye ","Ding ","Qing ","Pan ","Xiang ","Shun ","Han ","Xu ","Yi ","Xu ","Gu ","Song ","Kui ","Qi ","Hang ","Yu ","Wan ","Ban ","Dun ","Di ","Dan ","Pan ","Po ","Ling ","Ce ","Jing ","Lei ","He ","Qiao ","E ","E ","Wei ","Jie ","Gua ","Shen ","Yi ","Shen ","Hai ","Dui ","Pian ","Ping ","Lei ","Fu ","Jia ","Tou ","Hui ","Kui ","Jia ","Le ","Tian ","Cheng ","Ying ","Jun ","Hu ","Han ","Jing ","Tui ","Tui ","Pin ","Lai ","Tui ","Zi ","Zi ","Chui ","Ding ","Lai ","Yan ","Han ","Jian ","Ke ","Cui ","Jiong ","Qin ","Yi ","Sai ","Ti ","E ","E ","Yan ","Hun ","Kan ","Yong ","Zhuan ","Yan ","Xian ","Xin ","Yi ","Yuan ","Sang ","Dian ","Dian ","Jiang ","Ku ","Lei ","Liao ","Piao ","Yi ","Man ","Qi ","Rao ","Hao ","Qiao ","Gu ","Xun ","Qian ","Hui ","Zhan ","Ru ","Hong ","Bin ","Xian ","Pin ","Lu ","Lan ","Nie ","Quan ","Ye ","Ding ","Qing ","Han ","Xiang ","Shun ","Xu ","Xu ","Wan ","Gu ","Dun ","Qi ","Ban ","Song ","Hang ","Yu ","Lu ","Ling ","Po ","Jing ","Jie ","Jia ","Tian ","Han ","Ying ","Jiong ","Hai ","Yi ","Pin ","Hui ","Tui ","Han ","Ying ","Ying ","Ke ","Ti ","Yong ","E ","Zhuan ","Yan ","E ","Nie ","Man ","Dian ","Sang ","Hao ","Lei ","Zhan ","Ru ","Pin ","Quan ","Feng ","Biao ","Oroshi ","Fu ","Xia ","Zhan ","Biao ","Sa ","Ba ","Tai ","Lie ","Gua ","Xuan ","Shao ","Ju ","Bi ","Si ","Wei ","Yang ","Yao ","Sou ","Kai ","Sao ","Fan ","Liu ","Xi ","Liao ","Piao ","Piao ","Liu ","Biao ","Biao ","Biao ","Liao ","[?] ","Se ","Feng ","Biao ","Feng ","Yang ","Zhan ","Biao ","Sa ","Ju ","Si ","Sou ","Yao ","Liu ","Piao ","Biao ","Biao ","Fei ","Fan ","Fei ","Fei ","Shi ","Shi ","Can ","Ji ","Ding ","Si ","Tuo ","Zhan ","Sun ","Xiang ","Tun ","Ren ","Yu ","Juan ","Chi ","Yin ","Fan ","Fan ","Sun ","Yin ","Zhu ","Yi ","Zhai ","Bi ","Jie ","Tao ","Liu ","Ci ","Tie ","Si ","Bao ","Shi ","Duo "]});var a7=y((Pet,s7)=>{s7.exports=["Hai ","Ren ","Tian ","Jiao ","Jia ","Bing ","Yao ","Tong ","Ci ","Xiang ","Yang ","Yang ","Er ","Yan ","Le ","Yi ","Can ","Bo ","Nei ","E ","Bu ","Jun ","Dou ","Su ","Yu ","Shi ","Yao ","Hun ","Guo ","Shi ","Jian ","Zhui ","Bing ","Xian ","Bu ","Ye ","Tan ","Fei ","Zhang ","Wei ","Guan ","E ","Nuan ","Hun ","Hu ","Huang ","Tie ","Hui ","Jian ","Hou ","He ","Xing ","Fen ","Wei ","Gu ","Cha ","Song ","Tang ","Bo ","Gao ","Xi ","Kui ","Liu ","Sou ","Tao ","Ye ","Yun ","Mo ","Tang ","Man ","Bi ","Yu ","Xiu ","Jin ","San ","Kui ","Zhuan ","Shan ","Chi ","Dan ","Yi ","Ji ","Rao ","Cheng ","Yong ","Tao ","Hui ","Xiang ","Zhan ","Fen ","Hai ","Meng ","Yan ","Mo ","Chan ","Xiang ","Luo ","Zuan ","Nang ","Shi ","Ding ","Ji ","Tuo ","Xing ","Tun ","Xi ","Ren ","Yu ","Chi ","Fan ","Yin ","Jian ","Shi ","Bao ","Si ","Duo ","Yi ","Er ","Rao ","Xiang ","Jia ","Le ","Jiao ","Yi ","Bing ","Bo ","Dou ","E ","Yu ","Nei ","Jun ","Guo ","Hun ","Xian ","Guan ","Cha ","Kui ","Gu ","Sou ","Chan ","Ye ","Mo ","Bo ","Liu ","Xiu ","Jin ","Man ","San ","Zhuan ","Nang ","Shou ","Kui ","Guo ","Xiang ","Fen ","Ba ","Ni ","Bi ","Bo ","Tu ","Han ","Fei ","Jian ","An ","Ai ","Fu ","Xian ","Wen ","Xin ","Fen ","Bin ","Xing ","Ma ","Yu ","Feng ","Han ","Di ","Tuo ","Tuo ","Chi ","Xun ","Zhu ","Zhi ","Pei ","Xin ","Ri ","Sa ","Yin ","Wen ","Zhi ","Dan ","Lu ","You ","Bo ","Bao ","Kuai ","Tuo ","Yi ","Qu ","[?] ","Qu ","Jiong ","Bo ","Zhao ","Yuan ","Peng ","Zhou ","Ju ","Zhu ","Nu ","Ju ","Pi ","Zang ","Jia ","Ling ","Zhen ","Tai ","Fu ","Yang ","Shi ","Bi ","Tuo ","Tuo ","Si ","Liu ","Ma ","Pian ","Tao ","Zhi ","Rong ","Teng ","Dong ","Xun ","Quan ","Shen ","Jiong ","Er ","Hai ","Bo ","Zhu ","Yin ","Luo ","Shuu ","Dan ","Xie ","Liu ","Ju ","Song ","Qin ","Mang ","Liang ","Han ","Tu ","Xuan ","Tui ","Jun "]});var u7=y((Eet,l7)=>{l7.exports=["E ","Cheng ","Xin ","Ai ","Lu ","Zhui ","Zhou ","She ","Pian ","Kun ","Tao ","Lai ","Zong ","Ke ","Qi ","Qi ","Yan ","Fei ","Sao ","Yan ","Jie ","Yao ","Wu ","Pian ","Cong ","Pian ","Qian ","Fei ","Huang ","Jian ","Huo ","Yu ","Ti ","Quan ","Xia ","Zong ","Kui ","Rou ","Si ","Gua ","Tuo ","Kui ","Sou ","Qian ","Cheng ","Zhi ","Liu ","Pang ","Teng ","Xi ","Cao ","Du ","Yan ","Yuan ","Zou ","Sao ","Shan ","Li ","Zhi ","Shuang ","Lu ","Xi ","Luo ","Zhang ","Mo ","Ao ","Can ","Piao ","Cong ","Qu ","Bi ","Zhi ","Yu ","Xu ","Hua ","Bo ","Su ","Xiao ","Lin ","Chan ","Dun ","Liu ","Tuo ","Zeng ","Tan ","Jiao ","Tie ","Yan ","Luo ","Zhan ","Jing ","Yi ","Ye ","Tuo ","Bin ","Zou ","Yan ","Peng ","Lu ","Teng ","Xiang ","Ji ","Shuang ","Ju ","Xi ","Huan ","Li ","Biao ","Ma ","Yu ","Tuo ","Xun ","Chi ","Qu ","Ri ","Bo ","Lu ","Zang ","Shi ","Si ","Fu ","Ju ","Zou ","Zhu ","Tuo ","Nu ","Jia ","Yi ","Tai ","Xiao ","Ma ","Yin ","Jiao ","Hua ","Luo ","Hai ","Pian ","Biao ","Li ","Cheng ","Yan ","Xin ","Qin ","Jun ","Qi ","Qi ","Ke ","Zhui ","Zong ","Su ","Can ","Pian ","Zhi ","Kui ","Sao ","Wu ","Ao ","Liu ","Qian ","Shan ","Piao ","Luo ","Cong ","Chan ","Zou ","Ji ","Shuang ","Xiang ","Gu ","Wei ","Wei ","Wei ","Yu ","Gan ","Yi ","Ang ","Tou ","Xie ","Bao ","Bi ","Chi ","Ti ","Di ","Ku ","Hai ","Qiao ","Gou ","Kua ","Ge ","Tui ","Geng ","Pian ","Bi ","Ke ","Ka ","Yu ","Sui ","Lou ","Bo ","Xiao ","Pang ","Bo ","Ci ","Kuan ","Bin ","Mo ","Liao ","Lou ","Nao ","Du ","Zang ","Sui ","Ti ","Bin ","Kuan ","Lu ","Gao ","Gao ","Qiao ","Kao ","Qiao ","Lao ","Zao ","Biao ","Kun ","Kun ","Ti ","Fang ","Xiu ","Ran ","Mao ","Dan ","Kun ","Bin ","Fa ","Tiao ","Peng ","Zi ","Fa ","Ran ","Ti ","Pao ","Pi ","Mao ","Fu ","Er ","Rong ","Qu ","Gong ","Xiu ","Gua ","Ji ","Peng ","Zhua ","Shao ","Sha "]});var h7=y((Ret,c7)=>{c7.exports=["Ti ","Li ","Bin ","Zong ","Ti ","Peng ","Song ","Zheng ","Quan ","Zong ","Shun ","Jian ","Duo ","Hu ","La ","Jiu ","Qi ","Lian ","Zhen ","Bin ","Peng ","Mo ","San ","Man ","Man ","Seng ","Xu ","Lie ","Qian ","Qian ","Nong ","Huan ","Kuai ","Ning ","Bin ","Lie ","Rang ","Dou ","Dou ","Nao ","Hong ","Xi ","Dou ","Han ","Dou ","Dou ","Jiu ","Chang ","Yu ","Yu ","Li ","Juan ","Fu ","Qian ","Gui ","Zong ","Liu ","Gui ","Shang ","Yu ","Gui ","Mei ","Ji ","Qi ","Jie ","Kui ","Hun ","Ba ","Po ","Mei ","Xu ","Yan ","Xiao ","Liang ","Yu ","Tui ","Qi ","Wang ","Liang ","Wei ","Jian ","Chi ","Piao ","Bi ","Mo ","Ji ","Xu ","Chou ","Yan ","Zhan ","Yu ","Dao ","Ren ","Ji ","Eri ","Gong ","Tuo ","Diao ","Ji ","Xu ","E ","E ","Sha ","Hang ","Tun ","Mo ","Jie ","Shen ","Fan ","Yuan ","Bi ","Lu ","Wen ","Hu ","Lu ","Za ","Fang ","Fen ","Na ","You ","Namazu ","Todo ","He ","Xia ","Qu ","Han ","Pi ","Ling ","Tuo ","Bo ","Qiu ","Ping ","Fu ","Bi ","Ji ","Wei ","Ju ","Diao ","Bo ","You ","Gun ","Pi ","Nian ","Xing ","Tai ","Bao ","Fu ","Zha ","Ju ","Gu ","Kajika ","Tong ","[?] ","Ta ","Jie ","Shu ","Hou ","Xiang ","Er ","An ","Wei ","Tiao ","Zhu ","Yin ","Lie ","Luo ","Tong ","Yi ","Qi ","Bing ","Wei ","Jiao ","Bu ","Gui ","Xian ","Ge ","Hui ","Bora ","Mate ","Kao ","Gori ","Duo ","Jun ","Ti ","Man ","Xiao ","Za ","Sha ","Qin ","Yu ","Nei ","Zhe ","Gun ","Geng ","Su ","Wu ","Qiu ","Ting ","Fu ","Wan ","You ","Li ","Sha ","Sha ","Gao ","Meng ","Ugui ","Asari ","Subashiri ","Kazunoko ","Yong ","Ni ","Zi ","Qi ","Qing ","Xiang ","Nei ","Chun ","Ji ","Diao ","Qie ","Gu ","Zhou ","Dong ","Lai ","Fei ","Ni ","Yi ","Kun ","Lu ","Jiu ","Chang ","Jing ","Lun ","Ling ","Zou ","Li ","Meng ","Zong ","Zhi ","Nian ","Shachi ","Dojou ","Sukesou ","Shi ","Shen ","Hun ","Shi ","Hou ","Xing ","Zhu ","La ","Zong ","Ji ","Bian ","Bian "]});var g7=y((_et,d7)=>{d7.exports=["Huan ","Quan ","Ze ","Wei ","Wei ","Yu ","Qun ","Rou ","Die ","Huang ","Lian ","Yan ","Qiu ","Qiu ","Jian ","Bi ","E ","Yang ","Fu ","Sai ","Jian ","Xia ","Tuo ","Hu ","Muroaji ","Ruo ","Haraka ","Wen ","Jian ","Hao ","Wu ","Fang ","Sao ","Liu ","Ma ","Shi ","Shi ","Yin ","Z ","Teng ","Ta ","Yao ","Ge ","Rong ","Qian ","Qi ","Wen ","Ruo ","Hatahata ","Lian ","Ao ","Le ","Hui ","Min ","Ji ","Tiao ","Qu ","Jian ","Sao ","Man ","Xi ","Qiu ","Biao ","Ji ","Ji ","Zhu ","Jiang ","Qiu ","Zhuan ","Yong ","Zhang ","Kang ","Xue ","Bie ","Jue ","Qu ","Xiang ","Bo ","Jiao ","Xun ","Su ","Huang ","Zun ","Shan ","Shan ","Fan ","Jue ","Lin ","Xun ","Miao ","Xi ","Eso ","Kyou ","Fen ","Guan ","Hou ","Kuai ","Zei ","Sao ","Zhan ","Gan ","Gui ","Sheng ","Li ","Chang ","Hatahata ","Shiira ","Mutsu ","Ru ","Ji ","Xu ","Huo ","Shiira ","Li ","Lie ","Li ","Mie ","Zhen ","Xiang ","E ","Lu ","Guan ","Li ","Xian ","Yu ","Dao ","Ji ","You ","Tun ","Lu ","Fang ","Ba ","He ","Bo ","Ping ","Nian ","Lu ","You ","Zha ","Fu ","Bo ","Bao ","Hou ","Pi ","Tai ","Gui ","Jie ","Kao ","Wei ","Er ","Tong ","Ze ","Hou ","Kuai ","Ji ","Jiao ","Xian ","Za ","Xiang ","Xun ","Geng ","Li ","Lian ","Jian ","Li ","Shi ","Tiao ","Gun ","Sha ","Wan ","Jun ","Ji ","Yong ","Qing ","Ling ","Qi ","Zou ","Fei ","Kun ","Chang ","Gu ","Ni ","Nian ","Diao ","Jing ","Shen ","Shi ","Zi ","Fen ","Die ","Bi ","Chang ","Shi ","Wen ","Wei ","Sai ","E ","Qiu ","Fu ","Huang ","Quan ","Jiang ","Bian ","Sao ","Ao ","Qi ","Ta ","Yin ","Yao ","Fang ","Jian ","Le ","Biao ","Xue ","Bie ","Man ","Min ","Yong ","Wei ","Xi ","Jue ","Shan ","Lin ","Zun ","Huo ","Gan ","Li ","Zhan ","Guan ","Niao ","Yi ","Fu ","Li ","Jiu ","Bu ","Yan ","Fu ","Diao ","Ji ","Feng ","Nio ","Gan ","Shi ","Feng ","Ming ","Bao ","Yuan ","Zhi ","Hu ","Qin ","Fu ","Fen ","Wen ","Jian ","Shi ","Yu "]});var f7=y((Let,p7)=>{p7.exports=["Fou ","Yiao ","Jue ","Jue ","Pi ","Huan ","Zhen ","Bao ","Yan ","Ya ","Zheng ","Fang ","Feng ","Wen ","Ou ","Te ","Jia ","Nu ","Ling ","Mie ","Fu ","Tuo ","Wen ","Li ","Bian ","Zhi ","Ge ","Yuan ","Zi ","Qu ","Xiao ","Zhi ","Dan ","Ju ","You ","Gu ","Zhong ","Yu ","Yang ","Rong ","Ya ","Tie ","Yu ","Shigi ","Ying ","Zhui ","Wu ","Er ","Gua ","Ai ","Zhi ","Yan ","Heng ","Jiao ","Ji ","Lie ","Zhu ","Ren ","Yi ","Hong ","Luo ","Ru ","Mou ","Ge ","Ren ","Jiao ","Xiu ","Zhou ","Zhi ","Luo ","Chidori ","Toki ","Ten ","Luan ","Jia ","Ji ","Yu ","Huan ","Tuo ","Bu ","Wu ","Juan ","Yu ","Bo ","Xun ","Xun ","Bi ","Xi ","Jun ","Ju ","Tu ","Jing ","Ti ","E ","E ","Kuang ","Hu ","Wu ","Shen ","Lai ","Ikaruga ","Kakesu ","Lu ","Ping ","Shu ","Fu ","An ","Zhao ","Peng ","Qin ","Qian ","Bei ","Diao ","Lu ","Que ","Jian ","Ju ","Tu ","Ya ","Yuan ","Qi ","Li ","Ye ","Zhui ","Kong ","Zhui ","Kun ","Sheng ","Qi ","Jing ","Yi ","Yi ","Jing ","Zi ","Lai ","Dong ","Qi ","Chun ","Geng ","Ju ","Qu ","Isuka ","Kikuitadaki ","Ji ","Shu ","[?] ","Chi ","Miao ","Rou ","An ","Qiu ","Ti ","Hu ","Ti ","E ","Jie ","Mao ","Fu ","Chun ","Tu ","Yan ","He ","Yuan ","Pian ","Yun ","Mei ","Hu ","Ying ","Dun ","Mu ","Ju ","Tsugumi ","Cang ","Fang ","Gu ","Ying ","Yuan ","Xuan ","Weng ","Shi ","He ","Chu ","Tang ","Xia ","Ruo ","Liu ","Ji ","Gu ","Jian ","Zhun ","Han ","Zi ","Zi ","Ni ","Yao ","Yan ","Ji ","Li ","Tian ","Kou ","Ti ","Ti ","Ni ","Tu ","Ma ","Jiao ","Gao ","Tian ","Chen ","Li ","Zhuan ","Zhe ","Ao ","Yao ","Yi ","Ou ","Chi ","Zhi ","Liao ","Rong ","Lou ","Bi ","Shuang ","Zhuo ","Yu ","Wu ","Jue ","Yin ","Quan ","Si ","Jiao ","Yi ","Hua ","Bi ","Ying ","Su ","Huang ","Fan ","Jiao ","Liao ","Yan ","Kao ","Jiu ","Xian ","Xian ","Tu ","Mai ","Zun ","Yu ","Ying ","Lu ","Tuan ","Xian ","Xue ","Yi ","Pi "]});var b7=y((Iet,m7)=>{m7.exports=["Shu ","Luo ","Qi ","Yi ","Ji ","Zhe ","Yu ","Zhan ","Ye ","Yang ","Pi ","Ning ","Huo ","Mi ","Ying ","Meng ","Di ","Yue ","Yu ","Lei ","Bao ","Lu ","He ","Long ","Shuang ","Yue ","Ying ","Guan ","Qu ","Li ","Luan ","Niao ","Jiu ","Ji ","Yuan ","Ming ","Shi ","Ou ","Ya ","Cang ","Bao ","Zhen ","Gu ","Dong ","Lu ","Ya ","Xiao ","Yang ","Ling ","Zhi ","Qu ","Yuan ","Xue ","Tuo ","Si ","Zhi ","Er ","Gua ","Xiu ","Heng ","Zhou ","Ge ","Luan ","Hong ","Wu ","Bo ","Li ","Juan ","Hu ","E ","Yu ","Xian ","Ti ","Wu ","Que ","Miao ","An ","Kun ","Bei ","Peng ","Qian ","Chun ","Geng ","Yuan ","Su ","Hu ","He ","E ","Gu ","Qiu ","Zi ","Mei ","Mu ","Ni ","Yao ","Weng ","Liu ","Ji ","Ni ","Jian ","He ","Yi ","Ying ","Zhe ","Liao ","Liao ","Jiao ","Jiu ","Yu ","Lu ","Xuan ","Zhan ","Ying ","Huo ","Meng ","Guan ","Shuang ","Lu ","Jin ","Ling ","Jian ","Xian ","Cuo ","Jian ","Jian ","Yan ","Cuo ","Lu ","You ","Cu ","Ji ","Biao ","Cu ","Biao ","Zhu ","Jun ","Zhu ","Jian ","Mi ","Mi ","Wu ","Liu ","Chen ","Jun ","Lin ","Ni ","Qi ","Lu ","Jiu ","Jun ","Jing ","Li ","Xiang ","Yan ","Jia ","Mi ","Li ","She ","Zhang ","Lin ","Jing ","Ji ","Ling ","Yan ","Cu ","Mai ","Mai ","Ge ","Chao ","Fu ","Mian ","Mian ","Fu ","Pao ","Qu ","Qu ","Mou ","Fu ","Xian ","Lai ","Qu ","Mian ","[?] ","Feng ","Fu ","Qu ","Mian ","Ma ","Mo ","Mo ","Hui ","Ma ","Zou ","Nen ","Fen ","Huang ","Huang ","Jin ","Guang ","Tian ","Tou ","Heng ","Xi ","Kuang ","Heng ","Shu ","Li ","Nian ","Chi ","Hei ","Hei ","Yi ","Qian ","Dan ","Xi ","Tuan ","Mo ","Mo ","Qian ","Dai ","Chu ","You ","Dian ","Yi ","Xia ","Yan ","Qu ","Mei ","Yan ","Jing ","Yu ","Li ","Dang ","Du ","Can ","Yin ","An ","Yan ","Tan ","An ","Zhen ","Dai ","Can ","Yi ","Mei ","Dan ","Yan ","Du ","Lu ","Zhi ","Fen ","Fu ","Fu ","Min ","Min ","Yuan "]});var v7=y((Fet,y7)=>{y7.exports=["Cu ","Qu ","Chao ","Wa ","Zhu ","Zhi ","Mang ","Ao ","Bie ","Tuo ","Bi ","Yuan ","Chao ","Tuo ","Ding ","Mi ","Nai ","Ding ","Zi ","Gu ","Gu ","Dong ","Fen ","Tao ","Yuan ","Pi ","Chang ","Gao ","Qi ","Yuan ","Tang ","Teng ","Shu ","Shu ","Fen ","Fei ","Wen ","Ba ","Diao ","Tuo ","Tong ","Qu ","Sheng ","Shi ","You ","Shi ","Ting ","Wu ","Nian ","Jing ","Hun ","Ju ","Yan ","Tu ","Ti ","Xi ","Xian ","Yan ","Lei ","Bi ","Yao ","Qiu ","Han ","Wu ","Wu ","Hou ","Xi ","Ge ","Zha ","Xiu ","Weng ","Zha ","Nong ","Nang ","Qi ","Zhai ","Ji ","Zi ","Ji ","Ji ","Qi ","Ji ","Chi ","Chen ","Chen ","He ","Ya ","Ken ","Xie ","Pao ","Cuo ","Shi ","Zi ","Chi ","Nian ","Ju ","Tiao ","Ling ","Ling ","Chu ","Quan ","Xie ","Ken ","Nie ","Jiu ","Yao ","Chuo ","Kun ","Yu ","Chu ","Yi ","Ni ","Cuo ","Zou ","Qu ","Nen ","Xian ","Ou ","E ","Wo ","Yi ","Chuo ","Zou ","Dian ","Chu ","Jin ","Ya ","Chi ","Chen ","He ","Ken ","Ju ","Ling ","Pao ","Tiao ","Zi ","Ken ","Yu ","Chuo ","Qu ","Wo ","Long ","Pang ","Gong ","Pang ","Yan ","Long ","Long ","Gong ","Kan ","Ta ","Ling ","Ta ","Long ","Gong ","Kan ","Gui ","Qiu ","Bie ","Gui ","Yue ","Chui ","He ","Jue ","Xie ","Yu ","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var x7=y((jet,w7)=>{w7.exports=["it","ix","i","ip","iet","iex","ie","iep","at","ax","a","ap","uox","uo","uop","ot","ox","o","op","ex","e","wu","bit","bix","bi","bip","biet","biex","bie","biep","bat","bax","ba","bap","buox","buo","buop","bot","box","bo","bop","bex","be","bep","but","bux","bu","bup","burx","bur","byt","byx","by","byp","byrx","byr","pit","pix","pi","pip","piex","pie","piep","pat","pax","pa","pap","puox","puo","puop","pot","pox","po","pop","put","pux","pu","pup","purx","pur","pyt","pyx","py","pyp","pyrx","pyr","bbit","bbix","bbi","bbip","bbiet","bbiex","bbie","bbiep","bbat","bbax","bba","bbap","bbuox","bbuo","bbuop","bbot","bbox","bbo","bbop","bbex","bbe","bbep","bbut","bbux","bbu","bbup","bburx","bbur","bbyt","bbyx","bby","bbyp","nbit","nbix","nbi","nbip","nbiex","nbie","nbiep","nbat","nbax","nba","nbap","nbot","nbox","nbo","nbop","nbut","nbux","nbu","nbup","nburx","nbur","nbyt","nbyx","nby","nbyp","nbyrx","nbyr","hmit","hmix","hmi","hmip","hmiex","hmie","hmiep","hmat","hmax","hma","hmap","hmuox","hmuo","hmuop","hmot","hmox","hmo","hmop","hmut","hmux","hmu","hmup","hmurx","hmur","hmyx","hmy","hmyp","hmyrx","hmyr","mit","mix","mi","mip","miex","mie","miep","mat","max","ma","map","muot","muox","muo","muop","mot","mox","mo","mop","mex","me","mut","mux","mu","mup","murx","mur","myt","myx","my","myp","fit","fix","fi","fip","fat","fax","fa","fap","fox","fo","fop","fut","fux","fu","fup","furx","fur","fyt","fyx","fy","fyp","vit","vix","vi","vip","viet","viex","vie","viep","vat","vax","va","vap","vot","vox","vo","vop","vex","vep","vut","vux","vu","vup","vurx","vur","vyt","vyx","vy","vyp","vyrx","vyr"]});var S7=y((Met,C7)=>{C7.exports=["dit","dix","di","dip","diex","die","diep","dat","dax","da","dap","duox","duo","dot","dox","do","dop","dex","de","dep","dut","dux","du","dup","durx","dur","tit","tix","ti","tip","tiex","tie","tiep","tat","tax","ta","tap","tuot","tuox","tuo","tuop","tot","tox","to","top","tex","te","tep","tut","tux","tu","tup","turx","tur","ddit","ddix","ddi","ddip","ddiex","ddie","ddiep","ddat","ddax","dda","ddap","dduox","dduo","dduop","ddot","ddox","ddo","ddop","ddex","dde","ddep","ddut","ddux","ddu","ddup","ddurx","ddur","ndit","ndix","ndi","ndip","ndiex","ndie","ndat","ndax","nda","ndap","ndot","ndox","ndo","ndop","ndex","nde","ndep","ndut","ndux","ndu","ndup","ndurx","ndur","hnit","hnix","hni","hnip","hniet","hniex","hnie","hniep","hnat","hnax","hna","hnap","hnuox","hnuo","hnot","hnox","hnop","hnex","hne","hnep","hnut","nit","nix","ni","nip","niex","nie","niep","nax","na","nap","nuox","nuo","nuop","not","nox","no","nop","nex","ne","nep","nut","nux","nu","nup","nurx","nur","hlit","hlix","hli","hlip","hliex","hlie","hliep","hlat","hlax","hla","hlap","hluox","hluo","hluop","hlox","hlo","hlop","hlex","hle","hlep","hlut","hlux","hlu","hlup","hlurx","hlur","hlyt","hlyx","hly","hlyp","hlyrx","hlyr","lit","lix","li","lip","liet","liex","lie","liep","lat","lax","la","lap","luot","luox","luo","luop","lot","lox","lo","lop","lex","le","lep","lut","lux","lu","lup","lurx","lur","lyt","lyx","ly","lyp","lyrx","lyr","git","gix","gi","gip","giet","giex","gie","giep","gat","gax","ga","gap","guot","guox","guo","guop","got","gox","go","gop","get","gex","ge","gep","gut","gux","gu","gup","gurx","gur","kit","kix","ki","kip","kiex","kie","kiep","kat"]});var T7=y((Oet,D7)=>{D7.exports=["kax","ka","kap","kuox","kuo","kuop","kot","kox","ko","kop","ket","kex","ke","kep","kut","kux","ku","kup","kurx","kur","ggit","ggix","ggi","ggiex","ggie","ggiep","ggat","ggax","gga","ggap","gguot","gguox","gguo","gguop","ggot","ggox","ggo","ggop","gget","ggex","gge","ggep","ggut","ggux","ggu","ggup","ggurx","ggur","mgiex","mgie","mgat","mgax","mga","mgap","mguox","mguo","mguop","mgot","mgox","mgo","mgop","mgex","mge","mgep","mgut","mgux","mgu","mgup","mgurx","mgur","hxit","hxix","hxi","hxip","hxiet","hxiex","hxie","hxiep","hxat","hxax","hxa","hxap","hxuot","hxuox","hxuo","hxuop","hxot","hxox","hxo","hxop","hxex","hxe","hxep","ngiex","ngie","ngiep","ngat","ngax","nga","ngap","nguot","nguox","nguo","ngot","ngox","ngo","ngop","ngex","nge","ngep","hit","hiex","hie","hat","hax","ha","hap","huot","huox","huo","huop","hot","hox","ho","hop","hex","he","hep","wat","wax","wa","wap","wuox","wuo","wuop","wox","wo","wop","wex","we","wep","zit","zix","zi","zip","ziex","zie","ziep","zat","zax","za","zap","zuox","zuo","zuop","zot","zox","zo","zop","zex","ze","zep","zut","zux","zu","zup","zurx","zur","zyt","zyx","zy","zyp","zyrx","zyr","cit","cix","ci","cip","ciet","ciex","cie","ciep","cat","cax","ca","cap","cuox","cuo","cuop","cot","cox","co","cop","cex","ce","cep","cut","cux","cu","cup","curx","cur","cyt","cyx","cy","cyp","cyrx","cyr","zzit","zzix","zzi","zzip","zziet","zziex","zzie","zziep","zzat","zzax","zza","zzap","zzox","zzo","zzop","zzex","zze","zzep","zzux","zzu","zzup","zzurx","zzur","zzyt","zzyx","zzy","zzyp","zzyrx","zzyr","nzit","nzix","nzi","nzip","nziex","nzie","nziep","nzat","nzax","nza","nzap","nzuox","nzuo","nzox","nzop","nzex","nze","nzux","nzu"]});var P7=y((Aet,k7)=>{k7.exports=["nzup","nzurx","nzur","nzyt","nzyx","nzy","nzyp","nzyrx","nzyr","sit","six","si","sip","siex","sie","siep","sat","sax","sa","sap","suox","suo","suop","sot","sox","so","sop","sex","se","sep","sut","sux","su","sup","surx","sur","syt","syx","sy","syp","syrx","syr","ssit","ssix","ssi","ssip","ssiex","ssie","ssiep","ssat","ssax","ssa","ssap","ssot","ssox","sso","ssop","ssex","sse","ssep","ssut","ssux","ssu","ssup","ssyt","ssyx","ssy","ssyp","ssyrx","ssyr","zhat","zhax","zha","zhap","zhuox","zhuo","zhuop","zhot","zhox","zho","zhop","zhet","zhex","zhe","zhep","zhut","zhux","zhu","zhup","zhurx","zhur","zhyt","zhyx","zhy","zhyp","zhyrx","zhyr","chat","chax","cha","chap","chuot","chuox","chuo","chuop","chot","chox","cho","chop","chet","chex","che","chep","chux","chu","chup","churx","chur","chyt","chyx","chy","chyp","chyrx","chyr","rrax","rra","rruox","rruo","rrot","rrox","rro","rrop","rret","rrex","rre","rrep","rrut","rrux","rru","rrup","rrurx","rrur","rryt","rryx","rry","rryp","rryrx","rryr","nrat","nrax","nra","nrap","nrox","nro","nrop","nret","nrex","nre","nrep","nrut","nrux","nru","nrup","nrurx","nrur","nryt","nryx","nry","nryp","nryrx","nryr","shat","shax","sha","shap","shuox","shuo","shuop","shot","shox","sho","shop","shet","shex","she","shep","shut","shux","shu","shup","shurx","shur","shyt","shyx","shy","shyp","shyrx","shyr","rat","rax","ra","rap","ruox","ruo","ruop","rot","rox","ro","rop","rex","re","rep","rut","rux","ru","rup","rurx","rur","ryt","ryx","ry","ryp","ryrx","ryr","jit","jix","ji","jip","jiet","jiex","jie","jiep","juot","juox","juo","juop","jot","jox","jo","jop","jut","jux","ju","jup","jurx","jur","jyt","jyx","jy","jyp","jyrx","jyr","qit","qix","qi","qip"]});var R7=y((Net,E7)=>{E7.exports=["qiet","qiex","qie","qiep","quot","quox","quo","quop","qot","qox","qo","qop","qut","qux","qu","qup","qurx","qur","qyt","qyx","qy","qyp","qyrx","qyr","jjit","jjix","jji","jjip","jjiet","jjiex","jjie","jjiep","jjuox","jjuo","jjuop","jjot","jjox","jjo","jjop","jjut","jjux","jju","jjup","jjurx","jjur","jjyt","jjyx","jjy","jjyp","njit","njix","nji","njip","njiet","njiex","njie","njiep","njuox","njuo","njot","njox","njo","njop","njux","nju","njup","njurx","njur","njyt","njyx","njy","njyp","njyrx","njyr","nyit","nyix","nyi","nyip","nyiet","nyiex","nyie","nyiep","nyuox","nyuo","nyuop","nyot","nyox","nyo","nyop","nyut","nyux","nyu","nyup","xit","xix","xi","xip","xiet","xiex","xie","xiep","xuox","xuo","xot","xox","xo","xop","xyt","xyx","xy","xyp","xyrx","xyr","yit","yix","yi","yip","yiet","yiex","yie","yiep","yuot","yuox","yuo","yuop","yot","yox","yo","yop","yut","yux","yu","yup","yurx","yur","yyt","yyx","yy","yyp","yyrx","yyr","[?]","[?]","[?]","Qot","Li","Kit","Nyip","Cyp","Ssi","Ggop","Gep","Mi","Hxit","Lyr","Bbut","Mop","Yo","Put","Hxuo","Tat","Ga","[?]","[?]","Ddur","Bur","Gguo","Nyop","Tu","Op","Jjut","Zot","Pyt","Hmo","Yit","Vur","Shy","Vep","Za","Jo","[?]","Jjy","Got","Jjie","Wo","Du","Shur","Lie","Cy","Cuop","Cip","Hxop","Shat","[?]","Shop","Che","Zziet","[?]","Ke","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var L7=y((Het,_7)=>{_7.exports=["ga","gag","gagg","gags","gan","ganj","ganh","gad","gal","galg","galm","galb","gals","galt","galp","galh","gam","gab","gabs","gas","gass","gang","gaj","gac","gak","gat","gap","gah","gae","gaeg","gaegg","gaegs","gaen","gaenj","gaenh","gaed","gael","gaelg","gaelm","gaelb","gaels","gaelt","gaelp","gaelh","gaem","gaeb","gaebs","gaes","gaess","gaeng","gaej","gaec","gaek","gaet","gaep","gaeh","gya","gyag","gyagg","gyags","gyan","gyanj","gyanh","gyad","gyal","gyalg","gyalm","gyalb","gyals","gyalt","gyalp","gyalh","gyam","gyab","gyabs","gyas","gyass","gyang","gyaj","gyac","gyak","gyat","gyap","gyah","gyae","gyaeg","gyaegg","gyaegs","gyaen","gyaenj","gyaenh","gyaed","gyael","gyaelg","gyaelm","gyaelb","gyaels","gyaelt","gyaelp","gyaelh","gyaem","gyaeb","gyaebs","gyaes","gyaess","gyaeng","gyaej","gyaec","gyaek","gyaet","gyaep","gyaeh","geo","geog","geogg","geogs","geon","geonj","geonh","geod","geol","geolg","geolm","geolb","geols","geolt","geolp","geolh","geom","geob","geobs","geos","geoss","geong","geoj","geoc","geok","geot","geop","geoh","ge","geg","gegg","gegs","gen","genj","genh","ged","gel","gelg","gelm","gelb","gels","gelt","gelp","gelh","gem","geb","gebs","ges","gess","geng","gej","gec","gek","get","gep","geh","gyeo","gyeog","gyeogg","gyeogs","gyeon","gyeonj","gyeonh","gyeod","gyeol","gyeolg","gyeolm","gyeolb","gyeols","gyeolt","gyeolp","gyeolh","gyeom","gyeob","gyeobs","gyeos","gyeoss","gyeong","gyeoj","gyeoc","gyeok","gyeot","gyeop","gyeoh","gye","gyeg","gyegg","gyegs","gyen","gyenj","gyenh","gyed","gyel","gyelg","gyelm","gyelb","gyels","gyelt","gyelp","gyelh","gyem","gyeb","gyebs","gyes","gyess","gyeng","gyej","gyec","gyek","gyet","gyep","gyeh","go","gog","gogg","gogs","gon","gonj","gonh","god","gol","golg","golm","golb","gols","golt","golp","golh","gom","gob","gobs","gos","goss","gong","goj","goc","gok","got","gop","goh","gwa","gwag","gwagg","gwags"]});var F7=y((qet,I7)=>{I7.exports=["gwan","gwanj","gwanh","gwad","gwal","gwalg","gwalm","gwalb","gwals","gwalt","gwalp","gwalh","gwam","gwab","gwabs","gwas","gwass","gwang","gwaj","gwac","gwak","gwat","gwap","gwah","gwae","gwaeg","gwaegg","gwaegs","gwaen","gwaenj","gwaenh","gwaed","gwael","gwaelg","gwaelm","gwaelb","gwaels","gwaelt","gwaelp","gwaelh","gwaem","gwaeb","gwaebs","gwaes","gwaess","gwaeng","gwaej","gwaec","gwaek","gwaet","gwaep","gwaeh","goe","goeg","goegg","goegs","goen","goenj","goenh","goed","goel","goelg","goelm","goelb","goels","goelt","goelp","goelh","goem","goeb","goebs","goes","goess","goeng","goej","goec","goek","goet","goep","goeh","gyo","gyog","gyogg","gyogs","gyon","gyonj","gyonh","gyod","gyol","gyolg","gyolm","gyolb","gyols","gyolt","gyolp","gyolh","gyom","gyob","gyobs","gyos","gyoss","gyong","gyoj","gyoc","gyok","gyot","gyop","gyoh","gu","gug","gugg","gugs","gun","gunj","gunh","gud","gul","gulg","gulm","gulb","guls","gult","gulp","gulh","gum","gub","gubs","gus","guss","gung","guj","guc","guk","gut","gup","guh","gweo","gweog","gweogg","gweogs","gweon","gweonj","gweonh","gweod","gweol","gweolg","gweolm","gweolb","gweols","gweolt","gweolp","gweolh","gweom","gweob","gweobs","gweos","gweoss","gweong","gweoj","gweoc","gweok","gweot","gweop","gweoh","gwe","gweg","gwegg","gwegs","gwen","gwenj","gwenh","gwed","gwel","gwelg","gwelm","gwelb","gwels","gwelt","gwelp","gwelh","gwem","gweb","gwebs","gwes","gwess","gweng","gwej","gwec","gwek","gwet","gwep","gweh","gwi","gwig","gwigg","gwigs","gwin","gwinj","gwinh","gwid","gwil","gwilg","gwilm","gwilb","gwils","gwilt","gwilp","gwilh","gwim","gwib","gwibs","gwis","gwiss","gwing","gwij","gwic","gwik","gwit","gwip","gwih","gyu","gyug","gyugg","gyugs","gyun","gyunj","gyunh","gyud","gyul","gyulg","gyulm","gyulb","gyuls","gyult","gyulp","gyulh","gyum","gyub","gyubs","gyus","gyuss","gyung","gyuj","gyuc","gyuk","gyut","gyup","gyuh","geu","geug","geugg","geugs","geun","geunj","geunh","geud"]});var M7=y((Bet,j7)=>{j7.exports=["geul","geulg","geulm","geulb","geuls","geult","geulp","geulh","geum","geub","geubs","geus","geuss","geung","geuj","geuc","geuk","geut","geup","geuh","gyi","gyig","gyigg","gyigs","gyin","gyinj","gyinh","gyid","gyil","gyilg","gyilm","gyilb","gyils","gyilt","gyilp","gyilh","gyim","gyib","gyibs","gyis","gyiss","gying","gyij","gyic","gyik","gyit","gyip","gyih","gi","gig","gigg","gigs","gin","ginj","ginh","gid","gil","gilg","gilm","gilb","gils","gilt","gilp","gilh","gim","gib","gibs","gis","giss","ging","gij","gic","gik","git","gip","gih","gga","ggag","ggagg","ggags","ggan","gganj","gganh","ggad","ggal","ggalg","ggalm","ggalb","ggals","ggalt","ggalp","ggalh","ggam","ggab","ggabs","ggas","ggass","ggang","ggaj","ggac","ggak","ggat","ggap","ggah","ggae","ggaeg","ggaegg","ggaegs","ggaen","ggaenj","ggaenh","ggaed","ggael","ggaelg","ggaelm","ggaelb","ggaels","ggaelt","ggaelp","ggaelh","ggaem","ggaeb","ggaebs","ggaes","ggaess","ggaeng","ggaej","ggaec","ggaek","ggaet","ggaep","ggaeh","ggya","ggyag","ggyagg","ggyags","ggyan","ggyanj","ggyanh","ggyad","ggyal","ggyalg","ggyalm","ggyalb","ggyals","ggyalt","ggyalp","ggyalh","ggyam","ggyab","ggyabs","ggyas","ggyass","ggyang","ggyaj","ggyac","ggyak","ggyat","ggyap","ggyah","ggyae","ggyaeg","ggyaegg","ggyaegs","ggyaen","ggyaenj","ggyaenh","ggyaed","ggyael","ggyaelg","ggyaelm","ggyaelb","ggyaels","ggyaelt","ggyaelp","ggyaelh","ggyaem","ggyaeb","ggyaebs","ggyaes","ggyaess","ggyaeng","ggyaej","ggyaec","ggyaek","ggyaet","ggyaep","ggyaeh","ggeo","ggeog","ggeogg","ggeogs","ggeon","ggeonj","ggeonh","ggeod","ggeol","ggeolg","ggeolm","ggeolb","ggeols","ggeolt","ggeolp","ggeolh","ggeom","ggeob","ggeobs","ggeos","ggeoss","ggeong","ggeoj","ggeoc","ggeok","ggeot","ggeop","ggeoh","gge","ggeg","ggegg","ggegs","ggen","ggenj","ggenh","gged","ggel","ggelg","ggelm","ggelb","ggels","ggelt","ggelp","ggelh","ggem","ggeb","ggebs","gges","ggess","ggeng","ggej","ggec","ggek","gget","ggep","ggeh","ggyeo","ggyeog","ggyeogg","ggyeogs","ggyeon","ggyeonj","ggyeonh","ggyeod","ggyeol","ggyeolg","ggyeolm","ggyeolb"]});var A7=y((Wet,O7)=>{O7.exports=["ggyeols","ggyeolt","ggyeolp","ggyeolh","ggyeom","ggyeob","ggyeobs","ggyeos","ggyeoss","ggyeong","ggyeoj","ggyeoc","ggyeok","ggyeot","ggyeop","ggyeoh","ggye","ggyeg","ggyegg","ggyegs","ggyen","ggyenj","ggyenh","ggyed","ggyel","ggyelg","ggyelm","ggyelb","ggyels","ggyelt","ggyelp","ggyelh","ggyem","ggyeb","ggyebs","ggyes","ggyess","ggyeng","ggyej","ggyec","ggyek","ggyet","ggyep","ggyeh","ggo","ggog","ggogg","ggogs","ggon","ggonj","ggonh","ggod","ggol","ggolg","ggolm","ggolb","ggols","ggolt","ggolp","ggolh","ggom","ggob","ggobs","ggos","ggoss","ggong","ggoj","ggoc","ggok","ggot","ggop","ggoh","ggwa","ggwag","ggwagg","ggwags","ggwan","ggwanj","ggwanh","ggwad","ggwal","ggwalg","ggwalm","ggwalb","ggwals","ggwalt","ggwalp","ggwalh","ggwam","ggwab","ggwabs","ggwas","ggwass","ggwang","ggwaj","ggwac","ggwak","ggwat","ggwap","ggwah","ggwae","ggwaeg","ggwaegg","ggwaegs","ggwaen","ggwaenj","ggwaenh","ggwaed","ggwael","ggwaelg","ggwaelm","ggwaelb","ggwaels","ggwaelt","ggwaelp","ggwaelh","ggwaem","ggwaeb","ggwaebs","ggwaes","ggwaess","ggwaeng","ggwaej","ggwaec","ggwaek","ggwaet","ggwaep","ggwaeh","ggoe","ggoeg","ggoegg","ggoegs","ggoen","ggoenj","ggoenh","ggoed","ggoel","ggoelg","ggoelm","ggoelb","ggoels","ggoelt","ggoelp","ggoelh","ggoem","ggoeb","ggoebs","ggoes","ggoess","ggoeng","ggoej","ggoec","ggoek","ggoet","ggoep","ggoeh","ggyo","ggyog","ggyogg","ggyogs","ggyon","ggyonj","ggyonh","ggyod","ggyol","ggyolg","ggyolm","ggyolb","ggyols","ggyolt","ggyolp","ggyolh","ggyom","ggyob","ggyobs","ggyos","ggyoss","ggyong","ggyoj","ggyoc","ggyok","ggyot","ggyop","ggyoh","ggu","ggug","ggugg","ggugs","ggun","ggunj","ggunh","ggud","ggul","ggulg","ggulm","ggulb","gguls","ggult","ggulp","ggulh","ggum","ggub","ggubs","ggus","gguss","ggung","gguj","gguc","gguk","ggut","ggup","gguh","ggweo","ggweog","ggweogg","ggweogs","ggweon","ggweonj","ggweonh","ggweod","ggweol","ggweolg","ggweolm","ggweolb","ggweols","ggweolt","ggweolp","ggweolh","ggweom","ggweob","ggweobs","ggweos","ggweoss","ggweong","ggweoj","ggweoc","ggweok","ggweot","ggweop","ggweoh","ggwe","ggweg","ggwegg","ggwegs","ggwen","ggwenj","ggwenh","ggwed","ggwel","ggwelg","ggwelm","ggwelb","ggwels","ggwelt","ggwelp","ggwelh"]});var H7=y((Yet,N7)=>{N7.exports=["ggwem","ggweb","ggwebs","ggwes","ggwess","ggweng","ggwej","ggwec","ggwek","ggwet","ggwep","ggweh","ggwi","ggwig","ggwigg","ggwigs","ggwin","ggwinj","ggwinh","ggwid","ggwil","ggwilg","ggwilm","ggwilb","ggwils","ggwilt","ggwilp","ggwilh","ggwim","ggwib","ggwibs","ggwis","ggwiss","ggwing","ggwij","ggwic","ggwik","ggwit","ggwip","ggwih","ggyu","ggyug","ggyugg","ggyugs","ggyun","ggyunj","ggyunh","ggyud","ggyul","ggyulg","ggyulm","ggyulb","ggyuls","ggyult","ggyulp","ggyulh","ggyum","ggyub","ggyubs","ggyus","ggyuss","ggyung","ggyuj","ggyuc","ggyuk","ggyut","ggyup","ggyuh","ggeu","ggeug","ggeugg","ggeugs","ggeun","ggeunj","ggeunh","ggeud","ggeul","ggeulg","ggeulm","ggeulb","ggeuls","ggeult","ggeulp","ggeulh","ggeum","ggeub","ggeubs","ggeus","ggeuss","ggeung","ggeuj","ggeuc","ggeuk","ggeut","ggeup","ggeuh","ggyi","ggyig","ggyigg","ggyigs","ggyin","ggyinj","ggyinh","ggyid","ggyil","ggyilg","ggyilm","ggyilb","ggyils","ggyilt","ggyilp","ggyilh","ggyim","ggyib","ggyibs","ggyis","ggyiss","ggying","ggyij","ggyic","ggyik","ggyit","ggyip","ggyih","ggi","ggig","ggigg","ggigs","ggin","gginj","gginh","ggid","ggil","ggilg","ggilm","ggilb","ggils","ggilt","ggilp","ggilh","ggim","ggib","ggibs","ggis","ggiss","gging","ggij","ggic","ggik","ggit","ggip","ggih","na","nag","nagg","nags","nan","nanj","nanh","nad","nal","nalg","nalm","nalb","nals","nalt","nalp","nalh","nam","nab","nabs","nas","nass","nang","naj","nac","nak","nat","nap","nah","nae","naeg","naegg","naegs","naen","naenj","naenh","naed","nael","naelg","naelm","naelb","naels","naelt","naelp","naelh","naem","naeb","naebs","naes","naess","naeng","naej","naec","naek","naet","naep","naeh","nya","nyag","nyagg","nyags","nyan","nyanj","nyanh","nyad","nyal","nyalg","nyalm","nyalb","nyals","nyalt","nyalp","nyalh","nyam","nyab","nyabs","nyas","nyass","nyang","nyaj","nyac","nyak","nyat","nyap","nyah","nyae","nyaeg","nyaegg","nyaegs","nyaen","nyaenj","nyaenh","nyaed","nyael","nyaelg","nyaelm","nyaelb","nyaels","nyaelt","nyaelp","nyaelh","nyaem","nyaeb","nyaebs","nyaes"]});var B7=y((Zet,q7)=>{q7.exports=["nyaess","nyaeng","nyaej","nyaec","nyaek","nyaet","nyaep","nyaeh","neo","neog","neogg","neogs","neon","neonj","neonh","neod","neol","neolg","neolm","neolb","neols","neolt","neolp","neolh","neom","neob","neobs","neos","neoss","neong","neoj","neoc","neok","neot","neop","neoh","ne","neg","negg","negs","nen","nenj","nenh","ned","nel","nelg","nelm","nelb","nels","nelt","nelp","nelh","nem","neb","nebs","nes","ness","neng","nej","nec","nek","net","nep","neh","nyeo","nyeog","nyeogg","nyeogs","nyeon","nyeonj","nyeonh","nyeod","nyeol","nyeolg","nyeolm","nyeolb","nyeols","nyeolt","nyeolp","nyeolh","nyeom","nyeob","nyeobs","nyeos","nyeoss","nyeong","nyeoj","nyeoc","nyeok","nyeot","nyeop","nyeoh","nye","nyeg","nyegg","nyegs","nyen","nyenj","nyenh","nyed","nyel","nyelg","nyelm","nyelb","nyels","nyelt","nyelp","nyelh","nyem","nyeb","nyebs","nyes","nyess","nyeng","nyej","nyec","nyek","nyet","nyep","nyeh","no","nog","nogg","nogs","non","nonj","nonh","nod","nol","nolg","nolm","nolb","nols","nolt","nolp","nolh","nom","nob","nobs","nos","noss","nong","noj","noc","nok","not","nop","noh","nwa","nwag","nwagg","nwags","nwan","nwanj","nwanh","nwad","nwal","nwalg","nwalm","nwalb","nwals","nwalt","nwalp","nwalh","nwam","nwab","nwabs","nwas","nwass","nwang","nwaj","nwac","nwak","nwat","nwap","nwah","nwae","nwaeg","nwaegg","nwaegs","nwaen","nwaenj","nwaenh","nwaed","nwael","nwaelg","nwaelm","nwaelb","nwaels","nwaelt","nwaelp","nwaelh","nwaem","nwaeb","nwaebs","nwaes","nwaess","nwaeng","nwaej","nwaec","nwaek","nwaet","nwaep","nwaeh","noe","noeg","noegg","noegs","noen","noenj","noenh","noed","noel","noelg","noelm","noelb","noels","noelt","noelp","noelh","noem","noeb","noebs","noes","noess","noeng","noej","noec","noek","noet","noep","noeh","nyo","nyog","nyogg","nyogs","nyon","nyonj","nyonh","nyod","nyol","nyolg","nyolm","nyolb","nyols","nyolt","nyolp","nyolh","nyom","nyob","nyobs","nyos","nyoss","nyong","nyoj","nyoc"]});var Y7=y((Jet,W7)=>{W7.exports=["nyok","nyot","nyop","nyoh","nu","nug","nugg","nugs","nun","nunj","nunh","nud","nul","nulg","nulm","nulb","nuls","nult","nulp","nulh","num","nub","nubs","nus","nuss","nung","nuj","nuc","nuk","nut","nup","nuh","nweo","nweog","nweogg","nweogs","nweon","nweonj","nweonh","nweod","nweol","nweolg","nweolm","nweolb","nweols","nweolt","nweolp","nweolh","nweom","nweob","nweobs","nweos","nweoss","nweong","nweoj","nweoc","nweok","nweot","nweop","nweoh","nwe","nweg","nwegg","nwegs","nwen","nwenj","nwenh","nwed","nwel","nwelg","nwelm","nwelb","nwels","nwelt","nwelp","nwelh","nwem","nweb","nwebs","nwes","nwess","nweng","nwej","nwec","nwek","nwet","nwep","nweh","nwi","nwig","nwigg","nwigs","nwin","nwinj","nwinh","nwid","nwil","nwilg","nwilm","nwilb","nwils","nwilt","nwilp","nwilh","nwim","nwib","nwibs","nwis","nwiss","nwing","nwij","nwic","nwik","nwit","nwip","nwih","nyu","nyug","nyugg","nyugs","nyun","nyunj","nyunh","nyud","nyul","nyulg","nyulm","nyulb","nyuls","nyult","nyulp","nyulh","nyum","nyub","nyubs","nyus","nyuss","nyung","nyuj","nyuc","nyuk","nyut","nyup","nyuh","neu","neug","neugg","neugs","neun","neunj","neunh","neud","neul","neulg","neulm","neulb","neuls","neult","neulp","neulh","neum","neub","neubs","neus","neuss","neung","neuj","neuc","neuk","neut","neup","neuh","nyi","nyig","nyigg","nyigs","nyin","nyinj","nyinh","nyid","nyil","nyilg","nyilm","nyilb","nyils","nyilt","nyilp","nyilh","nyim","nyib","nyibs","nyis","nyiss","nying","nyij","nyic","nyik","nyit","nyip","nyih","ni","nig","nigg","nigs","nin","ninj","ninh","nid","nil","nilg","nilm","nilb","nils","nilt","nilp","nilh","nim","nib","nibs","nis","niss","ning","nij","nic","nik","nit","nip","nih","da","dag","dagg","dags","dan","danj","danh","dad","dal","dalg","dalm","dalb","dals","dalt","dalp","dalh","dam","dab","dabs","das","dass","dang","daj","dac","dak","dat","dap","dah"]});var J7=y(($et,Z7)=>{Z7.exports=["dae","daeg","daegg","daegs","daen","daenj","daenh","daed","dael","daelg","daelm","daelb","daels","daelt","daelp","daelh","daem","daeb","daebs","daes","daess","daeng","daej","daec","daek","daet","daep","daeh","dya","dyag","dyagg","dyags","dyan","dyanj","dyanh","dyad","dyal","dyalg","dyalm","dyalb","dyals","dyalt","dyalp","dyalh","dyam","dyab","dyabs","dyas","dyass","dyang","dyaj","dyac","dyak","dyat","dyap","dyah","dyae","dyaeg","dyaegg","dyaegs","dyaen","dyaenj","dyaenh","dyaed","dyael","dyaelg","dyaelm","dyaelb","dyaels","dyaelt","dyaelp","dyaelh","dyaem","dyaeb","dyaebs","dyaes","dyaess","dyaeng","dyaej","dyaec","dyaek","dyaet","dyaep","dyaeh","deo","deog","deogg","deogs","deon","deonj","deonh","deod","deol","deolg","deolm","deolb","deols","deolt","deolp","deolh","deom","deob","deobs","deos","deoss","deong","deoj","deoc","deok","deot","deop","deoh","de","deg","degg","degs","den","denj","denh","ded","del","delg","delm","delb","dels","delt","delp","delh","dem","deb","debs","des","dess","deng","dej","dec","dek","det","dep","deh","dyeo","dyeog","dyeogg","dyeogs","dyeon","dyeonj","dyeonh","dyeod","dyeol","dyeolg","dyeolm","dyeolb","dyeols","dyeolt","dyeolp","dyeolh","dyeom","dyeob","dyeobs","dyeos","dyeoss","dyeong","dyeoj","dyeoc","dyeok","dyeot","dyeop","dyeoh","dye","dyeg","dyegg","dyegs","dyen","dyenj","dyenh","dyed","dyel","dyelg","dyelm","dyelb","dyels","dyelt","dyelp","dyelh","dyem","dyeb","dyebs","dyes","dyess","dyeng","dyej","dyec","dyek","dyet","dyep","dyeh","do","dog","dogg","dogs","don","donj","donh","dod","dol","dolg","dolm","dolb","dols","dolt","dolp","dolh","dom","dob","dobs","dos","doss","dong","doj","doc","dok","dot","dop","doh","dwa","dwag","dwagg","dwags","dwan","dwanj","dwanh","dwad","dwal","dwalg","dwalm","dwalb","dwals","dwalt","dwalp","dwalh","dwam","dwab","dwabs","dwas","dwass","dwang","dwaj","dwac","dwak","dwat","dwap","dwah","dwae","dwaeg","dwaegg","dwaegs"]});var U7=y((Uet,$7)=>{$7.exports=["dwaen","dwaenj","dwaenh","dwaed","dwael","dwaelg","dwaelm","dwaelb","dwaels","dwaelt","dwaelp","dwaelh","dwaem","dwaeb","dwaebs","dwaes","dwaess","dwaeng","dwaej","dwaec","dwaek","dwaet","dwaep","dwaeh","doe","doeg","doegg","doegs","doen","doenj","doenh","doed","doel","doelg","doelm","doelb","doels","doelt","doelp","doelh","doem","doeb","doebs","does","doess","doeng","doej","doec","doek","doet","doep","doeh","dyo","dyog","dyogg","dyogs","dyon","dyonj","dyonh","dyod","dyol","dyolg","dyolm","dyolb","dyols","dyolt","dyolp","dyolh","dyom","dyob","dyobs","dyos","dyoss","dyong","dyoj","dyoc","dyok","dyot","dyop","dyoh","du","dug","dugg","dugs","dun","dunj","dunh","dud","dul","dulg","dulm","dulb","duls","dult","dulp","dulh","dum","dub","dubs","dus","duss","dung","duj","duc","duk","dut","dup","duh","dweo","dweog","dweogg","dweogs","dweon","dweonj","dweonh","dweod","dweol","dweolg","dweolm","dweolb","dweols","dweolt","dweolp","dweolh","dweom","dweob","dweobs","dweos","dweoss","dweong","dweoj","dweoc","dweok","dweot","dweop","dweoh","dwe","dweg","dwegg","dwegs","dwen","dwenj","dwenh","dwed","dwel","dwelg","dwelm","dwelb","dwels","dwelt","dwelp","dwelh","dwem","dweb","dwebs","dwes","dwess","dweng","dwej","dwec","dwek","dwet","dwep","dweh","dwi","dwig","dwigg","dwigs","dwin","dwinj","dwinh","dwid","dwil","dwilg","dwilm","dwilb","dwils","dwilt","dwilp","dwilh","dwim","dwib","dwibs","dwis","dwiss","dwing","dwij","dwic","dwik","dwit","dwip","dwih","dyu","dyug","dyugg","dyugs","dyun","dyunj","dyunh","dyud","dyul","dyulg","dyulm","dyulb","dyuls","dyult","dyulp","dyulh","dyum","dyub","dyubs","dyus","dyuss","dyung","dyuj","dyuc","dyuk","dyut","dyup","dyuh","deu","deug","deugg","deugs","deun","deunj","deunh","deud","deul","deulg","deulm","deulb","deuls","deult","deulp","deulh","deum","deub","deubs","deus","deuss","deung","deuj","deuc","deuk","deut","deup","deuh","dyi","dyig","dyigg","dyigs","dyin","dyinj","dyinh","dyid"]});var G7=y((Xet,X7)=>{X7.exports=["dyil","dyilg","dyilm","dyilb","dyils","dyilt","dyilp","dyilh","dyim","dyib","dyibs","dyis","dyiss","dying","dyij","dyic","dyik","dyit","dyip","dyih","di","dig","digg","digs","din","dinj","dinh","did","dil","dilg","dilm","dilb","dils","dilt","dilp","dilh","dim","dib","dibs","dis","diss","ding","dij","dic","dik","dit","dip","dih","dda","ddag","ddagg","ddags","ddan","ddanj","ddanh","ddad","ddal","ddalg","ddalm","ddalb","ddals","ddalt","ddalp","ddalh","ddam","ddab","ddabs","ddas","ddass","ddang","ddaj","ddac","ddak","ddat","ddap","ddah","ddae","ddaeg","ddaegg","ddaegs","ddaen","ddaenj","ddaenh","ddaed","ddael","ddaelg","ddaelm","ddaelb","ddaels","ddaelt","ddaelp","ddaelh","ddaem","ddaeb","ddaebs","ddaes","ddaess","ddaeng","ddaej","ddaec","ddaek","ddaet","ddaep","ddaeh","ddya","ddyag","ddyagg","ddyags","ddyan","ddyanj","ddyanh","ddyad","ddyal","ddyalg","ddyalm","ddyalb","ddyals","ddyalt","ddyalp","ddyalh","ddyam","ddyab","ddyabs","ddyas","ddyass","ddyang","ddyaj","ddyac","ddyak","ddyat","ddyap","ddyah","ddyae","ddyaeg","ddyaegg","ddyaegs","ddyaen","ddyaenj","ddyaenh","ddyaed","ddyael","ddyaelg","ddyaelm","ddyaelb","ddyaels","ddyaelt","ddyaelp","ddyaelh","ddyaem","ddyaeb","ddyaebs","ddyaes","ddyaess","ddyaeng","ddyaej","ddyaec","ddyaek","ddyaet","ddyaep","ddyaeh","ddeo","ddeog","ddeogg","ddeogs","ddeon","ddeonj","ddeonh","ddeod","ddeol","ddeolg","ddeolm","ddeolb","ddeols","ddeolt","ddeolp","ddeolh","ddeom","ddeob","ddeobs","ddeos","ddeoss","ddeong","ddeoj","ddeoc","ddeok","ddeot","ddeop","ddeoh","dde","ddeg","ddegg","ddegs","dden","ddenj","ddenh","dded","ddel","ddelg","ddelm","ddelb","ddels","ddelt","ddelp","ddelh","ddem","ddeb","ddebs","ddes","ddess","ddeng","ddej","ddec","ddek","ddet","ddep","ddeh","ddyeo","ddyeog","ddyeogg","ddyeogs","ddyeon","ddyeonj","ddyeonh","ddyeod","ddyeol","ddyeolg","ddyeolm","ddyeolb","ddyeols","ddyeolt","ddyeolp","ddyeolh","ddyeom","ddyeob","ddyeobs","ddyeos","ddyeoss","ddyeong","ddyeoj","ddyeoc","ddyeok","ddyeot","ddyeop","ddyeoh","ddye","ddyeg","ddyegg","ddyegs","ddyen","ddyenj","ddyenh","ddyed","ddyel","ddyelg","ddyelm","ddyelb"]});var K7=y((Get,z7)=>{z7.exports=["ddyels","ddyelt","ddyelp","ddyelh","ddyem","ddyeb","ddyebs","ddyes","ddyess","ddyeng","ddyej","ddyec","ddyek","ddyet","ddyep","ddyeh","ddo","ddog","ddogg","ddogs","ddon","ddonj","ddonh","ddod","ddol","ddolg","ddolm","ddolb","ddols","ddolt","ddolp","ddolh","ddom","ddob","ddobs","ddos","ddoss","ddong","ddoj","ddoc","ddok","ddot","ddop","ddoh","ddwa","ddwag","ddwagg","ddwags","ddwan","ddwanj","ddwanh","ddwad","ddwal","ddwalg","ddwalm","ddwalb","ddwals","ddwalt","ddwalp","ddwalh","ddwam","ddwab","ddwabs","ddwas","ddwass","ddwang","ddwaj","ddwac","ddwak","ddwat","ddwap","ddwah","ddwae","ddwaeg","ddwaegg","ddwaegs","ddwaen","ddwaenj","ddwaenh","ddwaed","ddwael","ddwaelg","ddwaelm","ddwaelb","ddwaels","ddwaelt","ddwaelp","ddwaelh","ddwaem","ddwaeb","ddwaebs","ddwaes","ddwaess","ddwaeng","ddwaej","ddwaec","ddwaek","ddwaet","ddwaep","ddwaeh","ddoe","ddoeg","ddoegg","ddoegs","ddoen","ddoenj","ddoenh","ddoed","ddoel","ddoelg","ddoelm","ddoelb","ddoels","ddoelt","ddoelp","ddoelh","ddoem","ddoeb","ddoebs","ddoes","ddoess","ddoeng","ddoej","ddoec","ddoek","ddoet","ddoep","ddoeh","ddyo","ddyog","ddyogg","ddyogs","ddyon","ddyonj","ddyonh","ddyod","ddyol","ddyolg","ddyolm","ddyolb","ddyols","ddyolt","ddyolp","ddyolh","ddyom","ddyob","ddyobs","ddyos","ddyoss","ddyong","ddyoj","ddyoc","ddyok","ddyot","ddyop","ddyoh","ddu","ddug","ddugg","ddugs","ddun","ddunj","ddunh","ddud","ddul","ddulg","ddulm","ddulb","dduls","ddult","ddulp","ddulh","ddum","ddub","ddubs","ddus","dduss","ddung","dduj","dduc","dduk","ddut","ddup","dduh","ddweo","ddweog","ddweogg","ddweogs","ddweon","ddweonj","ddweonh","ddweod","ddweol","ddweolg","ddweolm","ddweolb","ddweols","ddweolt","ddweolp","ddweolh","ddweom","ddweob","ddweobs","ddweos","ddweoss","ddweong","ddweoj","ddweoc","ddweok","ddweot","ddweop","ddweoh","ddwe","ddweg","ddwegg","ddwegs","ddwen","ddwenj","ddwenh","ddwed","ddwel","ddwelg","ddwelm","ddwelb","ddwels","ddwelt","ddwelp","ddwelh","ddwem","ddweb","ddwebs","ddwes","ddwess","ddweng","ddwej","ddwec","ddwek","ddwet","ddwep","ddweh","ddwi","ddwig","ddwigg","ddwigs","ddwin","ddwinj","ddwinh","ddwid","ddwil","ddwilg","ddwilm","ddwilb","ddwils","ddwilt","ddwilp","ddwilh"]});var V7=y((zet,Q7)=>{Q7.exports=["ddwim","ddwib","ddwibs","ddwis","ddwiss","ddwing","ddwij","ddwic","ddwik","ddwit","ddwip","ddwih","ddyu","ddyug","ddyugg","ddyugs","ddyun","ddyunj","ddyunh","ddyud","ddyul","ddyulg","ddyulm","ddyulb","ddyuls","ddyult","ddyulp","ddyulh","ddyum","ddyub","ddyubs","ddyus","ddyuss","ddyung","ddyuj","ddyuc","ddyuk","ddyut","ddyup","ddyuh","ddeu","ddeug","ddeugg","ddeugs","ddeun","ddeunj","ddeunh","ddeud","ddeul","ddeulg","ddeulm","ddeulb","ddeuls","ddeult","ddeulp","ddeulh","ddeum","ddeub","ddeubs","ddeus","ddeuss","ddeung","ddeuj","ddeuc","ddeuk","ddeut","ddeup","ddeuh","ddyi","ddyig","ddyigg","ddyigs","ddyin","ddyinj","ddyinh","ddyid","ddyil","ddyilg","ddyilm","ddyilb","ddyils","ddyilt","ddyilp","ddyilh","ddyim","ddyib","ddyibs","ddyis","ddyiss","ddying","ddyij","ddyic","ddyik","ddyit","ddyip","ddyih","ddi","ddig","ddigg","ddigs","ddin","ddinj","ddinh","ddid","ddil","ddilg","ddilm","ddilb","ddils","ddilt","ddilp","ddilh","ddim","ddib","ddibs","ddis","ddiss","dding","ddij","ddic","ddik","ddit","ddip","ddih","ra","rag","ragg","rags","ran","ranj","ranh","rad","ral","ralg","ralm","ralb","rals","ralt","ralp","ralh","ram","rab","rabs","ras","rass","rang","raj","rac","rak","rat","rap","rah","rae","raeg","raegg","raegs","raen","raenj","raenh","raed","rael","raelg","raelm","raelb","raels","raelt","raelp","raelh","raem","raeb","raebs","raes","raess","raeng","raej","raec","raek","raet","raep","raeh","rya","ryag","ryagg","ryags","ryan","ryanj","ryanh","ryad","ryal","ryalg","ryalm","ryalb","ryals","ryalt","ryalp","ryalh","ryam","ryab","ryabs","ryas","ryass","ryang","ryaj","ryac","ryak","ryat","ryap","ryah","ryae","ryaeg","ryaegg","ryaegs","ryaen","ryaenj","ryaenh","ryaed","ryael","ryaelg","ryaelm","ryaelb","ryaels","ryaelt","ryaelp","ryaelh","ryaem","ryaeb","ryaebs","ryaes","ryaess","ryaeng","ryaej","ryaec","ryaek","ryaet","ryaep","ryaeh","reo","reog","reogg","reogs","reon","reonj","reonh","reod","reol","reolg","reolm","reolb","reols","reolt","reolp","reolh","reom","reob","reobs","reos"]});var t9=y((Ket,e9)=>{e9.exports=["reoss","reong","reoj","reoc","reok","reot","reop","reoh","re","reg","regg","regs","ren","renj","renh","red","rel","relg","relm","relb","rels","relt","relp","relh","rem","reb","rebs","res","ress","reng","rej","rec","rek","ret","rep","reh","ryeo","ryeog","ryeogg","ryeogs","ryeon","ryeonj","ryeonh","ryeod","ryeol","ryeolg","ryeolm","ryeolb","ryeols","ryeolt","ryeolp","ryeolh","ryeom","ryeob","ryeobs","ryeos","ryeoss","ryeong","ryeoj","ryeoc","ryeok","ryeot","ryeop","ryeoh","rye","ryeg","ryegg","ryegs","ryen","ryenj","ryenh","ryed","ryel","ryelg","ryelm","ryelb","ryels","ryelt","ryelp","ryelh","ryem","ryeb","ryebs","ryes","ryess","ryeng","ryej","ryec","ryek","ryet","ryep","ryeh","ro","rog","rogg","rogs","ron","ronj","ronh","rod","rol","rolg","rolm","rolb","rols","rolt","rolp","rolh","rom","rob","robs","ros","ross","rong","roj","roc","rok","rot","rop","roh","rwa","rwag","rwagg","rwags","rwan","rwanj","rwanh","rwad","rwal","rwalg","rwalm","rwalb","rwals","rwalt","rwalp","rwalh","rwam","rwab","rwabs","rwas","rwass","rwang","rwaj","rwac","rwak","rwat","rwap","rwah","rwae","rwaeg","rwaegg","rwaegs","rwaen","rwaenj","rwaenh","rwaed","rwael","rwaelg","rwaelm","rwaelb","rwaels","rwaelt","rwaelp","rwaelh","rwaem","rwaeb","rwaebs","rwaes","rwaess","rwaeng","rwaej","rwaec","rwaek","rwaet","rwaep","rwaeh","roe","roeg","roegg","roegs","roen","roenj","roenh","roed","roel","roelg","roelm","roelb","roels","roelt","roelp","roelh","roem","roeb","roebs","roes","roess","roeng","roej","roec","roek","roet","roep","roeh","ryo","ryog","ryogg","ryogs","ryon","ryonj","ryonh","ryod","ryol","ryolg","ryolm","ryolb","ryols","ryolt","ryolp","ryolh","ryom","ryob","ryobs","ryos","ryoss","ryong","ryoj","ryoc","ryok","ryot","ryop","ryoh","ru","rug","rugg","rugs","run","runj","runh","rud","rul","rulg","rulm","rulb","ruls","rult","rulp","rulh","rum","rub","rubs","rus","russ","rung","ruj","ruc"]});var n9=y((Qet,i9)=>{i9.exports=["ruk","rut","rup","ruh","rweo","rweog","rweogg","rweogs","rweon","rweonj","rweonh","rweod","rweol","rweolg","rweolm","rweolb","rweols","rweolt","rweolp","rweolh","rweom","rweob","rweobs","rweos","rweoss","rweong","rweoj","rweoc","rweok","rweot","rweop","rweoh","rwe","rweg","rwegg","rwegs","rwen","rwenj","rwenh","rwed","rwel","rwelg","rwelm","rwelb","rwels","rwelt","rwelp","rwelh","rwem","rweb","rwebs","rwes","rwess","rweng","rwej","rwec","rwek","rwet","rwep","rweh","rwi","rwig","rwigg","rwigs","rwin","rwinj","rwinh","rwid","rwil","rwilg","rwilm","rwilb","rwils","rwilt","rwilp","rwilh","rwim","rwib","rwibs","rwis","rwiss","rwing","rwij","rwic","rwik","rwit","rwip","rwih","ryu","ryug","ryugg","ryugs","ryun","ryunj","ryunh","ryud","ryul","ryulg","ryulm","ryulb","ryuls","ryult","ryulp","ryulh","ryum","ryub","ryubs","ryus","ryuss","ryung","ryuj","ryuc","ryuk","ryut","ryup","ryuh","reu","reug","reugg","reugs","reun","reunj","reunh","reud","reul","reulg","reulm","reulb","reuls","reult","reulp","reulh","reum","reub","reubs","reus","reuss","reung","reuj","reuc","reuk","reut","reup","reuh","ryi","ryig","ryigg","ryigs","ryin","ryinj","ryinh","ryid","ryil","ryilg","ryilm","ryilb","ryils","ryilt","ryilp","ryilh","ryim","ryib","ryibs","ryis","ryiss","rying","ryij","ryic","ryik","ryit","ryip","ryih","ri","rig","rigg","rigs","rin","rinj","rinh","rid","ril","rilg","rilm","rilb","rils","rilt","rilp","rilh","rim","rib","ribs","ris","riss","ring","rij","ric","rik","rit","rip","rih","ma","mag","magg","mags","man","manj","manh","mad","mal","malg","malm","malb","mals","malt","malp","malh","mam","mab","mabs","mas","mass","mang","maj","mac","mak","mat","map","mah","mae","maeg","maegg","maegs","maen","maenj","maenh","maed","mael","maelg","maelm","maelb","maels","maelt","maelp","maelh","maem","maeb","maebs","maes","maess","maeng","maej","maec","maek","maet","maep","maeh"]});var o9=y((Vet,r9)=>{r9.exports=["mya","myag","myagg","myags","myan","myanj","myanh","myad","myal","myalg","myalm","myalb","myals","myalt","myalp","myalh","myam","myab","myabs","myas","myass","myang","myaj","myac","myak","myat","myap","myah","myae","myaeg","myaegg","myaegs","myaen","myaenj","myaenh","myaed","myael","myaelg","myaelm","myaelb","myaels","myaelt","myaelp","myaelh","myaem","myaeb","myaebs","myaes","myaess","myaeng","myaej","myaec","myaek","myaet","myaep","myaeh","meo","meog","meogg","meogs","meon","meonj","meonh","meod","meol","meolg","meolm","meolb","meols","meolt","meolp","meolh","meom","meob","meobs","meos","meoss","meong","meoj","meoc","meok","meot","meop","meoh","me","meg","megg","megs","men","menj","menh","med","mel","melg","melm","melb","mels","melt","melp","melh","mem","meb","mebs","mes","mess","meng","mej","mec","mek","met","mep","meh","myeo","myeog","myeogg","myeogs","myeon","myeonj","myeonh","myeod","myeol","myeolg","myeolm","myeolb","myeols","myeolt","myeolp","myeolh","myeom","myeob","myeobs","myeos","myeoss","myeong","myeoj","myeoc","myeok","myeot","myeop","myeoh","mye","myeg","myegg","myegs","myen","myenj","myenh","myed","myel","myelg","myelm","myelb","myels","myelt","myelp","myelh","myem","myeb","myebs","myes","myess","myeng","myej","myec","myek","myet","myep","myeh","mo","mog","mogg","mogs","mon","monj","monh","mod","mol","molg","molm","molb","mols","molt","molp","molh","mom","mob","mobs","mos","moss","mong","moj","moc","mok","mot","mop","moh","mwa","mwag","mwagg","mwags","mwan","mwanj","mwanh","mwad","mwal","mwalg","mwalm","mwalb","mwals","mwalt","mwalp","mwalh","mwam","mwab","mwabs","mwas","mwass","mwang","mwaj","mwac","mwak","mwat","mwap","mwah","mwae","mwaeg","mwaegg","mwaegs","mwaen","mwaenj","mwaenh","mwaed","mwael","mwaelg","mwaelm","mwaelb","mwaels","mwaelt","mwaelp","mwaelh","mwaem","mwaeb","mwaebs","mwaes","mwaess","mwaeng","mwaej","mwaec","mwaek","mwaet","mwaep","mwaeh","moe","moeg","moegg","moegs"]});var a9=y((ett,s9)=>{s9.exports=["moen","moenj","moenh","moed","moel","moelg","moelm","moelb","moels","moelt","moelp","moelh","moem","moeb","moebs","moes","moess","moeng","moej","moec","moek","moet","moep","moeh","myo","myog","myogg","myogs","myon","myonj","myonh","myod","myol","myolg","myolm","myolb","myols","myolt","myolp","myolh","myom","myob","myobs","myos","myoss","myong","myoj","myoc","myok","myot","myop","myoh","mu","mug","mugg","mugs","mun","munj","munh","mud","mul","mulg","mulm","mulb","muls","mult","mulp","mulh","mum","mub","mubs","mus","muss","mung","muj","muc","muk","mut","mup","muh","mweo","mweog","mweogg","mweogs","mweon","mweonj","mweonh","mweod","mweol","mweolg","mweolm","mweolb","mweols","mweolt","mweolp","mweolh","mweom","mweob","mweobs","mweos","mweoss","mweong","mweoj","mweoc","mweok","mweot","mweop","mweoh","mwe","mweg","mwegg","mwegs","mwen","mwenj","mwenh","mwed","mwel","mwelg","mwelm","mwelb","mwels","mwelt","mwelp","mwelh","mwem","mweb","mwebs","mwes","mwess","mweng","mwej","mwec","mwek","mwet","mwep","mweh","mwi","mwig","mwigg","mwigs","mwin","mwinj","mwinh","mwid","mwil","mwilg","mwilm","mwilb","mwils","mwilt","mwilp","mwilh","mwim","mwib","mwibs","mwis","mwiss","mwing","mwij","mwic","mwik","mwit","mwip","mwih","myu","myug","myugg","myugs","myun","myunj","myunh","myud","myul","myulg","myulm","myulb","myuls","myult","myulp","myulh","myum","myub","myubs","myus","myuss","myung","myuj","myuc","myuk","myut","myup","myuh","meu","meug","meugg","meugs","meun","meunj","meunh","meud","meul","meulg","meulm","meulb","meuls","meult","meulp","meulh","meum","meub","meubs","meus","meuss","meung","meuj","meuc","meuk","meut","meup","meuh","myi","myig","myigg","myigs","myin","myinj","myinh","myid","myil","myilg","myilm","myilb","myils","myilt","myilp","myilh","myim","myib","myibs","myis","myiss","mying","myij","myic","myik","myit","myip","myih","mi","mig","migg","migs","min","minj","minh","mid"]});var u9=y((ttt,l9)=>{l9.exports=["mil","milg","milm","milb","mils","milt","milp","milh","mim","mib","mibs","mis","miss","ming","mij","mic","mik","mit","mip","mih","ba","bag","bagg","bags","ban","banj","banh","bad","bal","balg","balm","balb","bals","balt","balp","balh","bam","bab","babs","bas","bass","bang","baj","bac","bak","bat","bap","bah","bae","baeg","baegg","baegs","baen","baenj","baenh","baed","bael","baelg","baelm","baelb","baels","baelt","baelp","baelh","baem","baeb","baebs","baes","baess","baeng","baej","baec","baek","baet","baep","baeh","bya","byag","byagg","byags","byan","byanj","byanh","byad","byal","byalg","byalm","byalb","byals","byalt","byalp","byalh","byam","byab","byabs","byas","byass","byang","byaj","byac","byak","byat","byap","byah","byae","byaeg","byaegg","byaegs","byaen","byaenj","byaenh","byaed","byael","byaelg","byaelm","byaelb","byaels","byaelt","byaelp","byaelh","byaem","byaeb","byaebs","byaes","byaess","byaeng","byaej","byaec","byaek","byaet","byaep","byaeh","beo","beog","beogg","beogs","beon","beonj","beonh","beod","beol","beolg","beolm","beolb","beols","beolt","beolp","beolh","beom","beob","beobs","beos","beoss","beong","beoj","beoc","beok","beot","beop","beoh","be","beg","begg","begs","ben","benj","benh","bed","bel","belg","belm","belb","bels","belt","belp","belh","bem","beb","bebs","bes","bess","beng","bej","bec","bek","bet","bep","beh","byeo","byeog","byeogg","byeogs","byeon","byeonj","byeonh","byeod","byeol","byeolg","byeolm","byeolb","byeols","byeolt","byeolp","byeolh","byeom","byeob","byeobs","byeos","byeoss","byeong","byeoj","byeoc","byeok","byeot","byeop","byeoh","bye","byeg","byegg","byegs","byen","byenj","byenh","byed","byel","byelg","byelm","byelb","byels","byelt","byelp","byelh","byem","byeb","byebs","byes","byess","byeng","byej","byec","byek","byet","byep","byeh","bo","bog","bogg","bogs","bon","bonj","bonh","bod","bol","bolg","bolm","bolb"]});var h9=y((itt,c9)=>{c9.exports=["bols","bolt","bolp","bolh","bom","bob","bobs","bos","boss","bong","boj","boc","bok","bot","bop","boh","bwa","bwag","bwagg","bwags","bwan","bwanj","bwanh","bwad","bwal","bwalg","bwalm","bwalb","bwals","bwalt","bwalp","bwalh","bwam","bwab","bwabs","bwas","bwass","bwang","bwaj","bwac","bwak","bwat","bwap","bwah","bwae","bwaeg","bwaegg","bwaegs","bwaen","bwaenj","bwaenh","bwaed","bwael","bwaelg","bwaelm","bwaelb","bwaels","bwaelt","bwaelp","bwaelh","bwaem","bwaeb","bwaebs","bwaes","bwaess","bwaeng","bwaej","bwaec","bwaek","bwaet","bwaep","bwaeh","boe","boeg","boegg","boegs","boen","boenj","boenh","boed","boel","boelg","boelm","boelb","boels","boelt","boelp","boelh","boem","boeb","boebs","boes","boess","boeng","boej","boec","boek","boet","boep","boeh","byo","byog","byogg","byogs","byon","byonj","byonh","byod","byol","byolg","byolm","byolb","byols","byolt","byolp","byolh","byom","byob","byobs","byos","byoss","byong","byoj","byoc","byok","byot","byop","byoh","bu","bug","bugg","bugs","bun","bunj","bunh","bud","bul","bulg","bulm","bulb","buls","bult","bulp","bulh","bum","bub","bubs","bus","buss","bung","buj","buc","buk","but","bup","buh","bweo","bweog","bweogg","bweogs","bweon","bweonj","bweonh","bweod","bweol","bweolg","bweolm","bweolb","bweols","bweolt","bweolp","bweolh","bweom","bweob","bweobs","bweos","bweoss","bweong","bweoj","bweoc","bweok","bweot","bweop","bweoh","bwe","bweg","bwegg","bwegs","bwen","bwenj","bwenh","bwed","bwel","bwelg","bwelm","bwelb","bwels","bwelt","bwelp","bwelh","bwem","bweb","bwebs","bwes","bwess","bweng","bwej","bwec","bwek","bwet","bwep","bweh","bwi","bwig","bwigg","bwigs","bwin","bwinj","bwinh","bwid","bwil","bwilg","bwilm","bwilb","bwils","bwilt","bwilp","bwilh","bwim","bwib","bwibs","bwis","bwiss","bwing","bwij","bwic","bwik","bwit","bwip","bwih","byu","byug","byugg","byugs","byun","byunj","byunh","byud","byul","byulg","byulm","byulb","byuls","byult","byulp","byulh"]});var g9=y((ntt,d9)=>{d9.exports=["byum","byub","byubs","byus","byuss","byung","byuj","byuc","byuk","byut","byup","byuh","beu","beug","beugg","beugs","beun","beunj","beunh","beud","beul","beulg","beulm","beulb","beuls","beult","beulp","beulh","beum","beub","beubs","beus","beuss","beung","beuj","beuc","beuk","beut","beup","beuh","byi","byig","byigg","byigs","byin","byinj","byinh","byid","byil","byilg","byilm","byilb","byils","byilt","byilp","byilh","byim","byib","byibs","byis","byiss","bying","byij","byic","byik","byit","byip","byih","bi","big","bigg","bigs","bin","binj","binh","bid","bil","bilg","bilm","bilb","bils","bilt","bilp","bilh","bim","bib","bibs","bis","biss","bing","bij","bic","bik","bit","bip","bih","bba","bbag","bbagg","bbags","bban","bbanj","bbanh","bbad","bbal","bbalg","bbalm","bbalb","bbals","bbalt","bbalp","bbalh","bbam","bbab","bbabs","bbas","bbass","bbang","bbaj","bbac","bbak","bbat","bbap","bbah","bbae","bbaeg","bbaegg","bbaegs","bbaen","bbaenj","bbaenh","bbaed","bbael","bbaelg","bbaelm","bbaelb","bbaels","bbaelt","bbaelp","bbaelh","bbaem","bbaeb","bbaebs","bbaes","bbaess","bbaeng","bbaej","bbaec","bbaek","bbaet","bbaep","bbaeh","bbya","bbyag","bbyagg","bbyags","bbyan","bbyanj","bbyanh","bbyad","bbyal","bbyalg","bbyalm","bbyalb","bbyals","bbyalt","bbyalp","bbyalh","bbyam","bbyab","bbyabs","bbyas","bbyass","bbyang","bbyaj","bbyac","bbyak","bbyat","bbyap","bbyah","bbyae","bbyaeg","bbyaegg","bbyaegs","bbyaen","bbyaenj","bbyaenh","bbyaed","bbyael","bbyaelg","bbyaelm","bbyaelb","bbyaels","bbyaelt","bbyaelp","bbyaelh","bbyaem","bbyaeb","bbyaebs","bbyaes","bbyaess","bbyaeng","bbyaej","bbyaec","bbyaek","bbyaet","bbyaep","bbyaeh","bbeo","bbeog","bbeogg","bbeogs","bbeon","bbeonj","bbeonh","bbeod","bbeol","bbeolg","bbeolm","bbeolb","bbeols","bbeolt","bbeolp","bbeolh","bbeom","bbeob","bbeobs","bbeos","bbeoss","bbeong","bbeoj","bbeoc","bbeok","bbeot","bbeop","bbeoh","bbe","bbeg","bbegg","bbegs","bben","bbenj","bbenh","bbed","bbel","bbelg","bbelm","bbelb","bbels","bbelt","bbelp","bbelh","bbem","bbeb","bbebs","bbes"]});var f9=y((rtt,p9)=>{p9.exports=["bbess","bbeng","bbej","bbec","bbek","bbet","bbep","bbeh","bbyeo","bbyeog","bbyeogg","bbyeogs","bbyeon","bbyeonj","bbyeonh","bbyeod","bbyeol","bbyeolg","bbyeolm","bbyeolb","bbyeols","bbyeolt","bbyeolp","bbyeolh","bbyeom","bbyeob","bbyeobs","bbyeos","bbyeoss","bbyeong","bbyeoj","bbyeoc","bbyeok","bbyeot","bbyeop","bbyeoh","bbye","bbyeg","bbyegg","bbyegs","bbyen","bbyenj","bbyenh","bbyed","bbyel","bbyelg","bbyelm","bbyelb","bbyels","bbyelt","bbyelp","bbyelh","bbyem","bbyeb","bbyebs","bbyes","bbyess","bbyeng","bbyej","bbyec","bbyek","bbyet","bbyep","bbyeh","bbo","bbog","bbogg","bbogs","bbon","bbonj","bbonh","bbod","bbol","bbolg","bbolm","bbolb","bbols","bbolt","bbolp","bbolh","bbom","bbob","bbobs","bbos","bboss","bbong","bboj","bboc","bbok","bbot","bbop","bboh","bbwa","bbwag","bbwagg","bbwags","bbwan","bbwanj","bbwanh","bbwad","bbwal","bbwalg","bbwalm","bbwalb","bbwals","bbwalt","bbwalp","bbwalh","bbwam","bbwab","bbwabs","bbwas","bbwass","bbwang","bbwaj","bbwac","bbwak","bbwat","bbwap","bbwah","bbwae","bbwaeg","bbwaegg","bbwaegs","bbwaen","bbwaenj","bbwaenh","bbwaed","bbwael","bbwaelg","bbwaelm","bbwaelb","bbwaels","bbwaelt","bbwaelp","bbwaelh","bbwaem","bbwaeb","bbwaebs","bbwaes","bbwaess","bbwaeng","bbwaej","bbwaec","bbwaek","bbwaet","bbwaep","bbwaeh","bboe","bboeg","bboegg","bboegs","bboen","bboenj","bboenh","bboed","bboel","bboelg","bboelm","bboelb","bboels","bboelt","bboelp","bboelh","bboem","bboeb","bboebs","bboes","bboess","bboeng","bboej","bboec","bboek","bboet","bboep","bboeh","bbyo","bbyog","bbyogg","bbyogs","bbyon","bbyonj","bbyonh","bbyod","bbyol","bbyolg","bbyolm","bbyolb","bbyols","bbyolt","bbyolp","bbyolh","bbyom","bbyob","bbyobs","bbyos","bbyoss","bbyong","bbyoj","bbyoc","bbyok","bbyot","bbyop","bbyoh","bbu","bbug","bbugg","bbugs","bbun","bbunj","bbunh","bbud","bbul","bbulg","bbulm","bbulb","bbuls","bbult","bbulp","bbulh","bbum","bbub","bbubs","bbus","bbuss","bbung","bbuj","bbuc","bbuk","bbut","bbup","bbuh","bbweo","bbweog","bbweogg","bbweogs","bbweon","bbweonj","bbweonh","bbweod","bbweol","bbweolg","bbweolm","bbweolb","bbweols","bbweolt","bbweolp","bbweolh","bbweom","bbweob","bbweobs","bbweos","bbweoss","bbweong","bbweoj","bbweoc"]});var b9=y((ott,m9)=>{m9.exports=["bbweok","bbweot","bbweop","bbweoh","bbwe","bbweg","bbwegg","bbwegs","bbwen","bbwenj","bbwenh","bbwed","bbwel","bbwelg","bbwelm","bbwelb","bbwels","bbwelt","bbwelp","bbwelh","bbwem","bbweb","bbwebs","bbwes","bbwess","bbweng","bbwej","bbwec","bbwek","bbwet","bbwep","bbweh","bbwi","bbwig","bbwigg","bbwigs","bbwin","bbwinj","bbwinh","bbwid","bbwil","bbwilg","bbwilm","bbwilb","bbwils","bbwilt","bbwilp","bbwilh","bbwim","bbwib","bbwibs","bbwis","bbwiss","bbwing","bbwij","bbwic","bbwik","bbwit","bbwip","bbwih","bbyu","bbyug","bbyugg","bbyugs","bbyun","bbyunj","bbyunh","bbyud","bbyul","bbyulg","bbyulm","bbyulb","bbyuls","bbyult","bbyulp","bbyulh","bbyum","bbyub","bbyubs","bbyus","bbyuss","bbyung","bbyuj","bbyuc","bbyuk","bbyut","bbyup","bbyuh","bbeu","bbeug","bbeugg","bbeugs","bbeun","bbeunj","bbeunh","bbeud","bbeul","bbeulg","bbeulm","bbeulb","bbeuls","bbeult","bbeulp","bbeulh","bbeum","bbeub","bbeubs","bbeus","bbeuss","bbeung","bbeuj","bbeuc","bbeuk","bbeut","bbeup","bbeuh","bbyi","bbyig","bbyigg","bbyigs","bbyin","bbyinj","bbyinh","bbyid","bbyil","bbyilg","bbyilm","bbyilb","bbyils","bbyilt","bbyilp","bbyilh","bbyim","bbyib","bbyibs","bbyis","bbyiss","bbying","bbyij","bbyic","bbyik","bbyit","bbyip","bbyih","bbi","bbig","bbigg","bbigs","bbin","bbinj","bbinh","bbid","bbil","bbilg","bbilm","bbilb","bbils","bbilt","bbilp","bbilh","bbim","bbib","bbibs","bbis","bbiss","bbing","bbij","bbic","bbik","bbit","bbip","bbih","sa","sag","sagg","sags","san","sanj","sanh","sad","sal","salg","salm","salb","sals","salt","salp","salh","sam","sab","sabs","sas","sass","sang","saj","sac","sak","sat","sap","sah","sae","saeg","saegg","saegs","saen","saenj","saenh","saed","sael","saelg","saelm","saelb","saels","saelt","saelp","saelh","saem","saeb","saebs","saes","saess","saeng","saej","saec","saek","saet","saep","saeh","sya","syag","syagg","syags","syan","syanj","syanh","syad","syal","syalg","syalm","syalb","syals","syalt","syalp","syalh","syam","syab","syabs","syas","syass","syang","syaj","syac","syak","syat","syap","syah"]});var v9=y((stt,y9)=>{y9.exports=["syae","syaeg","syaegg","syaegs","syaen","syaenj","syaenh","syaed","syael","syaelg","syaelm","syaelb","syaels","syaelt","syaelp","syaelh","syaem","syaeb","syaebs","syaes","syaess","syaeng","syaej","syaec","syaek","syaet","syaep","syaeh","seo","seog","seogg","seogs","seon","seonj","seonh","seod","seol","seolg","seolm","seolb","seols","seolt","seolp","seolh","seom","seob","seobs","seos","seoss","seong","seoj","seoc","seok","seot","seop","seoh","se","seg","segg","segs","sen","senj","senh","sed","sel","selg","selm","selb","sels","selt","selp","selh","sem","seb","sebs","ses","sess","seng","sej","sec","sek","set","sep","seh","syeo","syeog","syeogg","syeogs","syeon","syeonj","syeonh","syeod","syeol","syeolg","syeolm","syeolb","syeols","syeolt","syeolp","syeolh","syeom","syeob","syeobs","syeos","syeoss","syeong","syeoj","syeoc","syeok","syeot","syeop","syeoh","sye","syeg","syegg","syegs","syen","syenj","syenh","syed","syel","syelg","syelm","syelb","syels","syelt","syelp","syelh","syem","syeb","syebs","syes","syess","syeng","syej","syec","syek","syet","syep","syeh","so","sog","sogg","sogs","son","sonj","sonh","sod","sol","solg","solm","solb","sols","solt","solp","solh","som","sob","sobs","sos","soss","song","soj","soc","sok","sot","sop","soh","swa","swag","swagg","swags","swan","swanj","swanh","swad","swal","swalg","swalm","swalb","swals","swalt","swalp","swalh","swam","swab","swabs","swas","swass","swang","swaj","swac","swak","swat","swap","swah","swae","swaeg","swaegg","swaegs","swaen","swaenj","swaenh","swaed","swael","swaelg","swaelm","swaelb","swaels","swaelt","swaelp","swaelh","swaem","swaeb","swaebs","swaes","swaess","swaeng","swaej","swaec","swaek","swaet","swaep","swaeh","soe","soeg","soegg","soegs","soen","soenj","soenh","soed","soel","soelg","soelm","soelb","soels","soelt","soelp","soelh","soem","soeb","soebs","soes","soess","soeng","soej","soec","soek","soet","soep","soeh","syo","syog","syogg","syogs"]});var x9=y((att,w9)=>{w9.exports=["syon","syonj","syonh","syod","syol","syolg","syolm","syolb","syols","syolt","syolp","syolh","syom","syob","syobs","syos","syoss","syong","syoj","syoc","syok","syot","syop","syoh","su","sug","sugg","sugs","sun","sunj","sunh","sud","sul","sulg","sulm","sulb","suls","sult","sulp","sulh","sum","sub","subs","sus","suss","sung","suj","suc","suk","sut","sup","suh","sweo","sweog","sweogg","sweogs","sweon","sweonj","sweonh","sweod","sweol","sweolg","sweolm","sweolb","sweols","sweolt","sweolp","sweolh","sweom","sweob","sweobs","sweos","sweoss","sweong","sweoj","sweoc","sweok","sweot","sweop","sweoh","swe","sweg","swegg","swegs","swen","swenj","swenh","swed","swel","swelg","swelm","swelb","swels","swelt","swelp","swelh","swem","sweb","swebs","swes","swess","sweng","swej","swec","swek","swet","swep","sweh","swi","swig","swigg","swigs","swin","swinj","swinh","swid","swil","swilg","swilm","swilb","swils","swilt","swilp","swilh","swim","swib","swibs","swis","swiss","swing","swij","swic","swik","swit","swip","swih","syu","syug","syugg","syugs","syun","syunj","syunh","syud","syul","syulg","syulm","syulb","syuls","syult","syulp","syulh","syum","syub","syubs","syus","syuss","syung","syuj","syuc","syuk","syut","syup","syuh","seu","seug","seugg","seugs","seun","seunj","seunh","seud","seul","seulg","seulm","seulb","seuls","seult","seulp","seulh","seum","seub","seubs","seus","seuss","seung","seuj","seuc","seuk","seut","seup","seuh","syi","syig","syigg","syigs","syin","syinj","syinh","syid","syil","syilg","syilm","syilb","syils","syilt","syilp","syilh","syim","syib","syibs","syis","syiss","sying","syij","syic","syik","syit","syip","syih","si","sig","sigg","sigs","sin","sinj","sinh","sid","sil","silg","silm","silb","sils","silt","silp","silh","sim","sib","sibs","sis","siss","sing","sij","sic","sik","sit","sip","sih","ssa","ssag","ssagg","ssags","ssan","ssanj","ssanh","ssad"]});var S9=y((ltt,C9)=>{C9.exports=["ssal","ssalg","ssalm","ssalb","ssals","ssalt","ssalp","ssalh","ssam","ssab","ssabs","ssas","ssass","ssang","ssaj","ssac","ssak","ssat","ssap","ssah","ssae","ssaeg","ssaegg","ssaegs","ssaen","ssaenj","ssaenh","ssaed","ssael","ssaelg","ssaelm","ssaelb","ssaels","ssaelt","ssaelp","ssaelh","ssaem","ssaeb","ssaebs","ssaes","ssaess","ssaeng","ssaej","ssaec","ssaek","ssaet","ssaep","ssaeh","ssya","ssyag","ssyagg","ssyags","ssyan","ssyanj","ssyanh","ssyad","ssyal","ssyalg","ssyalm","ssyalb","ssyals","ssyalt","ssyalp","ssyalh","ssyam","ssyab","ssyabs","ssyas","ssyass","ssyang","ssyaj","ssyac","ssyak","ssyat","ssyap","ssyah","ssyae","ssyaeg","ssyaegg","ssyaegs","ssyaen","ssyaenj","ssyaenh","ssyaed","ssyael","ssyaelg","ssyaelm","ssyaelb","ssyaels","ssyaelt","ssyaelp","ssyaelh","ssyaem","ssyaeb","ssyaebs","ssyaes","ssyaess","ssyaeng","ssyaej","ssyaec","ssyaek","ssyaet","ssyaep","ssyaeh","sseo","sseog","sseogg","sseogs","sseon","sseonj","sseonh","sseod","sseol","sseolg","sseolm","sseolb","sseols","sseolt","sseolp","sseolh","sseom","sseob","sseobs","sseos","sseoss","sseong","sseoj","sseoc","sseok","sseot","sseop","sseoh","sse","sseg","ssegg","ssegs","ssen","ssenj","ssenh","ssed","ssel","sselg","sselm","sselb","ssels","sselt","sselp","sselh","ssem","sseb","ssebs","sses","ssess","sseng","ssej","ssec","ssek","sset","ssep","sseh","ssyeo","ssyeog","ssyeogg","ssyeogs","ssyeon","ssyeonj","ssyeonh","ssyeod","ssyeol","ssyeolg","ssyeolm","ssyeolb","ssyeols","ssyeolt","ssyeolp","ssyeolh","ssyeom","ssyeob","ssyeobs","ssyeos","ssyeoss","ssyeong","ssyeoj","ssyeoc","ssyeok","ssyeot","ssyeop","ssyeoh","ssye","ssyeg","ssyegg","ssyegs","ssyen","ssyenj","ssyenh","ssyed","ssyel","ssyelg","ssyelm","ssyelb","ssyels","ssyelt","ssyelp","ssyelh","ssyem","ssyeb","ssyebs","ssyes","ssyess","ssyeng","ssyej","ssyec","ssyek","ssyet","ssyep","ssyeh","sso","ssog","ssogg","ssogs","sson","ssonj","ssonh","ssod","ssol","ssolg","ssolm","ssolb","ssols","ssolt","ssolp","ssolh","ssom","ssob","ssobs","ssos","ssoss","ssong","ssoj","ssoc","ssok","ssot","ssop","ssoh","sswa","sswag","sswagg","sswags","sswan","sswanj","sswanh","sswad","sswal","sswalg","sswalm","sswalb"]});var T9=y((utt,D9)=>{D9.exports=["sswals","sswalt","sswalp","sswalh","sswam","sswab","sswabs","sswas","sswass","sswang","sswaj","sswac","sswak","sswat","sswap","sswah","sswae","sswaeg","sswaegg","sswaegs","sswaen","sswaenj","sswaenh","sswaed","sswael","sswaelg","sswaelm","sswaelb","sswaels","sswaelt","sswaelp","sswaelh","sswaem","sswaeb","sswaebs","sswaes","sswaess","sswaeng","sswaej","sswaec","sswaek","sswaet","sswaep","sswaeh","ssoe","ssoeg","ssoegg","ssoegs","ssoen","ssoenj","ssoenh","ssoed","ssoel","ssoelg","ssoelm","ssoelb","ssoels","ssoelt","ssoelp","ssoelh","ssoem","ssoeb","ssoebs","ssoes","ssoess","ssoeng","ssoej","ssoec","ssoek","ssoet","ssoep","ssoeh","ssyo","ssyog","ssyogg","ssyogs","ssyon","ssyonj","ssyonh","ssyod","ssyol","ssyolg","ssyolm","ssyolb","ssyols","ssyolt","ssyolp","ssyolh","ssyom","ssyob","ssyobs","ssyos","ssyoss","ssyong","ssyoj","ssyoc","ssyok","ssyot","ssyop","ssyoh","ssu","ssug","ssugg","ssugs","ssun","ssunj","ssunh","ssud","ssul","ssulg","ssulm","ssulb","ssuls","ssult","ssulp","ssulh","ssum","ssub","ssubs","ssus","ssuss","ssung","ssuj","ssuc","ssuk","ssut","ssup","ssuh","ssweo","ssweog","ssweogg","ssweogs","ssweon","ssweonj","ssweonh","ssweod","ssweol","ssweolg","ssweolm","ssweolb","ssweols","ssweolt","ssweolp","ssweolh","ssweom","ssweob","ssweobs","ssweos","ssweoss","ssweong","ssweoj","ssweoc","ssweok","ssweot","ssweop","ssweoh","sswe","ssweg","sswegg","sswegs","sswen","sswenj","sswenh","sswed","sswel","sswelg","sswelm","sswelb","sswels","sswelt","sswelp","sswelh","sswem","ssweb","sswebs","sswes","sswess","ssweng","sswej","sswec","sswek","sswet","sswep","ssweh","sswi","sswig","sswigg","sswigs","sswin","sswinj","sswinh","sswid","sswil","sswilg","sswilm","sswilb","sswils","sswilt","sswilp","sswilh","sswim","sswib","sswibs","sswis","sswiss","sswing","sswij","sswic","sswik","sswit","sswip","sswih","ssyu","ssyug","ssyugg","ssyugs","ssyun","ssyunj","ssyunh","ssyud","ssyul","ssyulg","ssyulm","ssyulb","ssyuls","ssyult","ssyulp","ssyulh","ssyum","ssyub","ssyubs","ssyus","ssyuss","ssyung","ssyuj","ssyuc","ssyuk","ssyut","ssyup","ssyuh","sseu","sseug","sseugg","sseugs","sseun","sseunj","sseunh","sseud","sseul","sseulg","sseulm","sseulb","sseuls","sseult","sseulp","sseulh"]});var P9=y((ctt,k9)=>{k9.exports=["sseum","sseub","sseubs","sseus","sseuss","sseung","sseuj","sseuc","sseuk","sseut","sseup","sseuh","ssyi","ssyig","ssyigg","ssyigs","ssyin","ssyinj","ssyinh","ssyid","ssyil","ssyilg","ssyilm","ssyilb","ssyils","ssyilt","ssyilp","ssyilh","ssyim","ssyib","ssyibs","ssyis","ssyiss","ssying","ssyij","ssyic","ssyik","ssyit","ssyip","ssyih","ssi","ssig","ssigg","ssigs","ssin","ssinj","ssinh","ssid","ssil","ssilg","ssilm","ssilb","ssils","ssilt","ssilp","ssilh","ssim","ssib","ssibs","ssis","ssiss","ssing","ssij","ssic","ssik","ssit","ssip","ssih","a","ag","agg","ags","an","anj","anh","ad","al","alg","alm","alb","als","alt","alp","alh","am","ab","abs","as","ass","ang","aj","ac","ak","at","ap","ah","ae","aeg","aegg","aegs","aen","aenj","aenh","aed","ael","aelg","aelm","aelb","aels","aelt","aelp","aelh","aem","aeb","aebs","aes","aess","aeng","aej","aec","aek","aet","aep","aeh","ya","yag","yagg","yags","yan","yanj","yanh","yad","yal","yalg","yalm","yalb","yals","yalt","yalp","yalh","yam","yab","yabs","yas","yass","yang","yaj","yac","yak","yat","yap","yah","yae","yaeg","yaegg","yaegs","yaen","yaenj","yaenh","yaed","yael","yaelg","yaelm","yaelb","yaels","yaelt","yaelp","yaelh","yaem","yaeb","yaebs","yaes","yaess","yaeng","yaej","yaec","yaek","yaet","yaep","yaeh","eo","eog","eogg","eogs","eon","eonj","eonh","eod","eol","eolg","eolm","eolb","eols","eolt","eolp","eolh","eom","eob","eobs","eos","eoss","eong","eoj","eoc","eok","eot","eop","eoh","e","eg","egg","egs","en","enj","enh","ed","el","elg","elm","elb","els","elt","elp","elh","em","eb","ebs","es","ess","eng","ej","ec","ek","et","ep","eh","yeo","yeog","yeogg","yeogs","yeon","yeonj","yeonh","yeod","yeol","yeolg","yeolm","yeolb","yeols","yeolt","yeolp","yeolh","yeom","yeob","yeobs","yeos"]});var R9=y((htt,E9)=>{E9.exports=["yeoss","yeong","yeoj","yeoc","yeok","yeot","yeop","yeoh","ye","yeg","yegg","yegs","yen","yenj","yenh","yed","yel","yelg","yelm","yelb","yels","yelt","yelp","yelh","yem","yeb","yebs","yes","yess","yeng","yej","yec","yek","yet","yep","yeh","o","og","ogg","ogs","on","onj","onh","od","ol","olg","olm","olb","ols","olt","olp","olh","om","ob","obs","os","oss","ong","oj","oc","ok","ot","op","oh","wa","wag","wagg","wags","wan","wanj","wanh","wad","wal","walg","walm","walb","wals","walt","walp","walh","wam","wab","wabs","was","wass","wang","waj","wac","wak","wat","wap","wah","wae","waeg","waegg","waegs","waen","waenj","waenh","waed","wael","waelg","waelm","waelb","waels","waelt","waelp","waelh","waem","waeb","waebs","waes","waess","waeng","waej","waec","waek","waet","waep","waeh","oe","oeg","oegg","oegs","oen","oenj","oenh","oed","oel","oelg","oelm","oelb","oels","oelt","oelp","oelh","oem","oeb","oebs","oes","oess","oeng","oej","oec","oek","oet","oep","oeh","yo","yog","yogg","yogs","yon","yonj","yonh","yod","yol","yolg","yolm","yolb","yols","yolt","yolp","yolh","yom","yob","yobs","yos","yoss","yong","yoj","yoc","yok","yot","yop","yoh","u","ug","ugg","ugs","un","unj","unh","ud","ul","ulg","ulm","ulb","uls","ult","ulp","ulh","um","ub","ubs","us","uss","ung","uj","uc","uk","ut","up","uh","weo","weog","weogg","weogs","weon","weonj","weonh","weod","weol","weolg","weolm","weolb","weols","weolt","weolp","weolh","weom","weob","weobs","weos","weoss","weong","weoj","weoc","weok","weot","weop","weoh","we","weg","wegg","wegs","wen","wenj","wenh","wed","wel","welg","welm","welb","wels","welt","welp","welh","wem","web","webs","wes","wess","weng","wej","wec"]});var L9=y((dtt,_9)=>{_9.exports=["wek","wet","wep","weh","wi","wig","wigg","wigs","win","winj","winh","wid","wil","wilg","wilm","wilb","wils","wilt","wilp","wilh","wim","wib","wibs","wis","wiss","wing","wij","wic","wik","wit","wip","wih","yu","yug","yugg","yugs","yun","yunj","yunh","yud","yul","yulg","yulm","yulb","yuls","yult","yulp","yulh","yum","yub","yubs","yus","yuss","yung","yuj","yuc","yuk","yut","yup","yuh","eu","eug","eugg","eugs","eun","eunj","eunh","eud","eul","eulg","eulm","eulb","euls","eult","eulp","eulh","eum","eub","eubs","eus","euss","eung","euj","euc","euk","eut","eup","euh","yi","yig","yigg","yigs","yin","yinj","yinh","yid","yil","yilg","yilm","yilb","yils","yilt","yilp","yilh","yim","yib","yibs","yis","yiss","ying","yij","yic","yik","yit","yip","yih","i","ig","igg","igs","in","inj","inh","id","il","ilg","ilm","ilb","ils","ilt","ilp","ilh","im","ib","ibs","is","iss","ing","ij","ic","ik","it","ip","ih","ja","jag","jagg","jags","jan","janj","janh","jad","jal","jalg","jalm","jalb","jals","jalt","jalp","jalh","jam","jab","jabs","jas","jass","jang","jaj","jac","jak","jat","jap","jah","jae","jaeg","jaegg","jaegs","jaen","jaenj","jaenh","jaed","jael","jaelg","jaelm","jaelb","jaels","jaelt","jaelp","jaelh","jaem","jaeb","jaebs","jaes","jaess","jaeng","jaej","jaec","jaek","jaet","jaep","jaeh","jya","jyag","jyagg","jyags","jyan","jyanj","jyanh","jyad","jyal","jyalg","jyalm","jyalb","jyals","jyalt","jyalp","jyalh","jyam","jyab","jyabs","jyas","jyass","jyang","jyaj","jyac","jyak","jyat","jyap","jyah","jyae","jyaeg","jyaegg","jyaegs","jyaen","jyaenj","jyaenh","jyaed","jyael","jyaelg","jyaelm","jyaelb","jyaels","jyaelt","jyaelp","jyaelh","jyaem","jyaeb","jyaebs","jyaes","jyaess","jyaeng","jyaej","jyaec","jyaek","jyaet","jyaep","jyaeh"]});var F9=y((gtt,I9)=>{I9.exports=["jeo","jeog","jeogg","jeogs","jeon","jeonj","jeonh","jeod","jeol","jeolg","jeolm","jeolb","jeols","jeolt","jeolp","jeolh","jeom","jeob","jeobs","jeos","jeoss","jeong","jeoj","jeoc","jeok","jeot","jeop","jeoh","je","jeg","jegg","jegs","jen","jenj","jenh","jed","jel","jelg","jelm","jelb","jels","jelt","jelp","jelh","jem","jeb","jebs","jes","jess","jeng","jej","jec","jek","jet","jep","jeh","jyeo","jyeog","jyeogg","jyeogs","jyeon","jyeonj","jyeonh","jyeod","jyeol","jyeolg","jyeolm","jyeolb","jyeols","jyeolt","jyeolp","jyeolh","jyeom","jyeob","jyeobs","jyeos","jyeoss","jyeong","jyeoj","jyeoc","jyeok","jyeot","jyeop","jyeoh","jye","jyeg","jyegg","jyegs","jyen","jyenj","jyenh","jyed","jyel","jyelg","jyelm","jyelb","jyels","jyelt","jyelp","jyelh","jyem","jyeb","jyebs","jyes","jyess","jyeng","jyej","jyec","jyek","jyet","jyep","jyeh","jo","jog","jogg","jogs","jon","jonj","jonh","jod","jol","jolg","jolm","jolb","jols","jolt","jolp","jolh","jom","job","jobs","jos","joss","jong","joj","joc","jok","jot","jop","joh","jwa","jwag","jwagg","jwags","jwan","jwanj","jwanh","jwad","jwal","jwalg","jwalm","jwalb","jwals","jwalt","jwalp","jwalh","jwam","jwab","jwabs","jwas","jwass","jwang","jwaj","jwac","jwak","jwat","jwap","jwah","jwae","jwaeg","jwaegg","jwaegs","jwaen","jwaenj","jwaenh","jwaed","jwael","jwaelg","jwaelm","jwaelb","jwaels","jwaelt","jwaelp","jwaelh","jwaem","jwaeb","jwaebs","jwaes","jwaess","jwaeng","jwaej","jwaec","jwaek","jwaet","jwaep","jwaeh","joe","joeg","joegg","joegs","joen","joenj","joenh","joed","joel","joelg","joelm","joelb","joels","joelt","joelp","joelh","joem","joeb","joebs","joes","joess","joeng","joej","joec","joek","joet","joep","joeh","jyo","jyog","jyogg","jyogs","jyon","jyonj","jyonh","jyod","jyol","jyolg","jyolm","jyolb","jyols","jyolt","jyolp","jyolh","jyom","jyob","jyobs","jyos","jyoss","jyong","jyoj","jyoc","jyok","jyot","jyop","jyoh","ju","jug","jugg","jugs"]});var M9=y((ptt,j9)=>{j9.exports=["jun","junj","junh","jud","jul","julg","julm","julb","juls","jult","julp","julh","jum","jub","jubs","jus","juss","jung","juj","juc","juk","jut","jup","juh","jweo","jweog","jweogg","jweogs","jweon","jweonj","jweonh","jweod","jweol","jweolg","jweolm","jweolb","jweols","jweolt","jweolp","jweolh","jweom","jweob","jweobs","jweos","jweoss","jweong","jweoj","jweoc","jweok","jweot","jweop","jweoh","jwe","jweg","jwegg","jwegs","jwen","jwenj","jwenh","jwed","jwel","jwelg","jwelm","jwelb","jwels","jwelt","jwelp","jwelh","jwem","jweb","jwebs","jwes","jwess","jweng","jwej","jwec","jwek","jwet","jwep","jweh","jwi","jwig","jwigg","jwigs","jwin","jwinj","jwinh","jwid","jwil","jwilg","jwilm","jwilb","jwils","jwilt","jwilp","jwilh","jwim","jwib","jwibs","jwis","jwiss","jwing","jwij","jwic","jwik","jwit","jwip","jwih","jyu","jyug","jyugg","jyugs","jyun","jyunj","jyunh","jyud","jyul","jyulg","jyulm","jyulb","jyuls","jyult","jyulp","jyulh","jyum","jyub","jyubs","jyus","jyuss","jyung","jyuj","jyuc","jyuk","jyut","jyup","jyuh","jeu","jeug","jeugg","jeugs","jeun","jeunj","jeunh","jeud","jeul","jeulg","jeulm","jeulb","jeuls","jeult","jeulp","jeulh","jeum","jeub","jeubs","jeus","jeuss","jeung","jeuj","jeuc","jeuk","jeut","jeup","jeuh","jyi","jyig","jyigg","jyigs","jyin","jyinj","jyinh","jyid","jyil","jyilg","jyilm","jyilb","jyils","jyilt","jyilp","jyilh","jyim","jyib","jyibs","jyis","jyiss","jying","jyij","jyic","jyik","jyit","jyip","jyih","ji","jig","jigg","jigs","jin","jinj","jinh","jid","jil","jilg","jilm","jilb","jils","jilt","jilp","jilh","jim","jib","jibs","jis","jiss","jing","jij","jic","jik","jit","jip","jih","jja","jjag","jjagg","jjags","jjan","jjanj","jjanh","jjad","jjal","jjalg","jjalm","jjalb","jjals","jjalt","jjalp","jjalh","jjam","jjab","jjabs","jjas","jjass","jjang","jjaj","jjac","jjak","jjat","jjap","jjah","jjae","jjaeg","jjaegg","jjaegs","jjaen","jjaenj","jjaenh","jjaed"]});var A9=y((ftt,O9)=>{O9.exports=["jjael","jjaelg","jjaelm","jjaelb","jjaels","jjaelt","jjaelp","jjaelh","jjaem","jjaeb","jjaebs","jjaes","jjaess","jjaeng","jjaej","jjaec","jjaek","jjaet","jjaep","jjaeh","jjya","jjyag","jjyagg","jjyags","jjyan","jjyanj","jjyanh","jjyad","jjyal","jjyalg","jjyalm","jjyalb","jjyals","jjyalt","jjyalp","jjyalh","jjyam","jjyab","jjyabs","jjyas","jjyass","jjyang","jjyaj","jjyac","jjyak","jjyat","jjyap","jjyah","jjyae","jjyaeg","jjyaegg","jjyaegs","jjyaen","jjyaenj","jjyaenh","jjyaed","jjyael","jjyaelg","jjyaelm","jjyaelb","jjyaels","jjyaelt","jjyaelp","jjyaelh","jjyaem","jjyaeb","jjyaebs","jjyaes","jjyaess","jjyaeng","jjyaej","jjyaec","jjyaek","jjyaet","jjyaep","jjyaeh","jjeo","jjeog","jjeogg","jjeogs","jjeon","jjeonj","jjeonh","jjeod","jjeol","jjeolg","jjeolm","jjeolb","jjeols","jjeolt","jjeolp","jjeolh","jjeom","jjeob","jjeobs","jjeos","jjeoss","jjeong","jjeoj","jjeoc","jjeok","jjeot","jjeop","jjeoh","jje","jjeg","jjegg","jjegs","jjen","jjenj","jjenh","jjed","jjel","jjelg","jjelm","jjelb","jjels","jjelt","jjelp","jjelh","jjem","jjeb","jjebs","jjes","jjess","jjeng","jjej","jjec","jjek","jjet","jjep","jjeh","jjyeo","jjyeog","jjyeogg","jjyeogs","jjyeon","jjyeonj","jjyeonh","jjyeod","jjyeol","jjyeolg","jjyeolm","jjyeolb","jjyeols","jjyeolt","jjyeolp","jjyeolh","jjyeom","jjyeob","jjyeobs","jjyeos","jjyeoss","jjyeong","jjyeoj","jjyeoc","jjyeok","jjyeot","jjyeop","jjyeoh","jjye","jjyeg","jjyegg","jjyegs","jjyen","jjyenj","jjyenh","jjyed","jjyel","jjyelg","jjyelm","jjyelb","jjyels","jjyelt","jjyelp","jjyelh","jjyem","jjyeb","jjyebs","jjyes","jjyess","jjyeng","jjyej","jjyec","jjyek","jjyet","jjyep","jjyeh","jjo","jjog","jjogg","jjogs","jjon","jjonj","jjonh","jjod","jjol","jjolg","jjolm","jjolb","jjols","jjolt","jjolp","jjolh","jjom","jjob","jjobs","jjos","jjoss","jjong","jjoj","jjoc","jjok","jjot","jjop","jjoh","jjwa","jjwag","jjwagg","jjwags","jjwan","jjwanj","jjwanh","jjwad","jjwal","jjwalg","jjwalm","jjwalb","jjwals","jjwalt","jjwalp","jjwalh","jjwam","jjwab","jjwabs","jjwas","jjwass","jjwang","jjwaj","jjwac","jjwak","jjwat","jjwap","jjwah","jjwae","jjwaeg","jjwaegg","jjwaegs","jjwaen","jjwaenj","jjwaenh","jjwaed","jjwael","jjwaelg","jjwaelm","jjwaelb"]});var H9=y((mtt,N9)=>{N9.exports=["jjwaels","jjwaelt","jjwaelp","jjwaelh","jjwaem","jjwaeb","jjwaebs","jjwaes","jjwaess","jjwaeng","jjwaej","jjwaec","jjwaek","jjwaet","jjwaep","jjwaeh","jjoe","jjoeg","jjoegg","jjoegs","jjoen","jjoenj","jjoenh","jjoed","jjoel","jjoelg","jjoelm","jjoelb","jjoels","jjoelt","jjoelp","jjoelh","jjoem","jjoeb","jjoebs","jjoes","jjoess","jjoeng","jjoej","jjoec","jjoek","jjoet","jjoep","jjoeh","jjyo","jjyog","jjyogg","jjyogs","jjyon","jjyonj","jjyonh","jjyod","jjyol","jjyolg","jjyolm","jjyolb","jjyols","jjyolt","jjyolp","jjyolh","jjyom","jjyob","jjyobs","jjyos","jjyoss","jjyong","jjyoj","jjyoc","jjyok","jjyot","jjyop","jjyoh","jju","jjug","jjugg","jjugs","jjun","jjunj","jjunh","jjud","jjul","jjulg","jjulm","jjulb","jjuls","jjult","jjulp","jjulh","jjum","jjub","jjubs","jjus","jjuss","jjung","jjuj","jjuc","jjuk","jjut","jjup","jjuh","jjweo","jjweog","jjweogg","jjweogs","jjweon","jjweonj","jjweonh","jjweod","jjweol","jjweolg","jjweolm","jjweolb","jjweols","jjweolt","jjweolp","jjweolh","jjweom","jjweob","jjweobs","jjweos","jjweoss","jjweong","jjweoj","jjweoc","jjweok","jjweot","jjweop","jjweoh","jjwe","jjweg","jjwegg","jjwegs","jjwen","jjwenj","jjwenh","jjwed","jjwel","jjwelg","jjwelm","jjwelb","jjwels","jjwelt","jjwelp","jjwelh","jjwem","jjweb","jjwebs","jjwes","jjwess","jjweng","jjwej","jjwec","jjwek","jjwet","jjwep","jjweh","jjwi","jjwig","jjwigg","jjwigs","jjwin","jjwinj","jjwinh","jjwid","jjwil","jjwilg","jjwilm","jjwilb","jjwils","jjwilt","jjwilp","jjwilh","jjwim","jjwib","jjwibs","jjwis","jjwiss","jjwing","jjwij","jjwic","jjwik","jjwit","jjwip","jjwih","jjyu","jjyug","jjyugg","jjyugs","jjyun","jjyunj","jjyunh","jjyud","jjyul","jjyulg","jjyulm","jjyulb","jjyuls","jjyult","jjyulp","jjyulh","jjyum","jjyub","jjyubs","jjyus","jjyuss","jjyung","jjyuj","jjyuc","jjyuk","jjyut","jjyup","jjyuh","jjeu","jjeug","jjeugg","jjeugs","jjeun","jjeunj","jjeunh","jjeud","jjeul","jjeulg","jjeulm","jjeulb","jjeuls","jjeult","jjeulp","jjeulh","jjeum","jjeub","jjeubs","jjeus","jjeuss","jjeung","jjeuj","jjeuc","jjeuk","jjeut","jjeup","jjeuh","jjyi","jjyig","jjyigg","jjyigs","jjyin","jjyinj","jjyinh","jjyid","jjyil","jjyilg","jjyilm","jjyilb","jjyils","jjyilt","jjyilp","jjyilh"]});var B9=y((btt,q9)=>{q9.exports=["jjyim","jjyib","jjyibs","jjyis","jjyiss","jjying","jjyij","jjyic","jjyik","jjyit","jjyip","jjyih","jji","jjig","jjigg","jjigs","jjin","jjinj","jjinh","jjid","jjil","jjilg","jjilm","jjilb","jjils","jjilt","jjilp","jjilh","jjim","jjib","jjibs","jjis","jjiss","jjing","jjij","jjic","jjik","jjit","jjip","jjih","ca","cag","cagg","cags","can","canj","canh","cad","cal","calg","calm","calb","cals","calt","calp","calh","cam","cab","cabs","cas","cass","cang","caj","cac","cak","cat","cap","cah","cae","caeg","caegg","caegs","caen","caenj","caenh","caed","cael","caelg","caelm","caelb","caels","caelt","caelp","caelh","caem","caeb","caebs","caes","caess","caeng","caej","caec","caek","caet","caep","caeh","cya","cyag","cyagg","cyags","cyan","cyanj","cyanh","cyad","cyal","cyalg","cyalm","cyalb","cyals","cyalt","cyalp","cyalh","cyam","cyab","cyabs","cyas","cyass","cyang","cyaj","cyac","cyak","cyat","cyap","cyah","cyae","cyaeg","cyaegg","cyaegs","cyaen","cyaenj","cyaenh","cyaed","cyael","cyaelg","cyaelm","cyaelb","cyaels","cyaelt","cyaelp","cyaelh","cyaem","cyaeb","cyaebs","cyaes","cyaess","cyaeng","cyaej","cyaec","cyaek","cyaet","cyaep","cyaeh","ceo","ceog","ceogg","ceogs","ceon","ceonj","ceonh","ceod","ceol","ceolg","ceolm","ceolb","ceols","ceolt","ceolp","ceolh","ceom","ceob","ceobs","ceos","ceoss","ceong","ceoj","ceoc","ceok","ceot","ceop","ceoh","ce","ceg","cegg","cegs","cen","cenj","cenh","ced","cel","celg","celm","celb","cels","celt","celp","celh","cem","ceb","cebs","ces","cess","ceng","cej","cec","cek","cet","cep","ceh","cyeo","cyeog","cyeogg","cyeogs","cyeon","cyeonj","cyeonh","cyeod","cyeol","cyeolg","cyeolm","cyeolb","cyeols","cyeolt","cyeolp","cyeolh","cyeom","cyeob","cyeobs","cyeos","cyeoss","cyeong","cyeoj","cyeoc","cyeok","cyeot","cyeop","cyeoh","cye","cyeg","cyegg","cyegs","cyen","cyenj","cyenh","cyed","cyel","cyelg","cyelm","cyelb","cyels","cyelt","cyelp","cyelh","cyem","cyeb","cyebs","cyes"]});var Y9=y((ytt,W9)=>{W9.exports=["cyess","cyeng","cyej","cyec","cyek","cyet","cyep","cyeh","co","cog","cogg","cogs","con","conj","conh","cod","col","colg","colm","colb","cols","colt","colp","colh","com","cob","cobs","cos","coss","cong","coj","coc","cok","cot","cop","coh","cwa","cwag","cwagg","cwags","cwan","cwanj","cwanh","cwad","cwal","cwalg","cwalm","cwalb","cwals","cwalt","cwalp","cwalh","cwam","cwab","cwabs","cwas","cwass","cwang","cwaj","cwac","cwak","cwat","cwap","cwah","cwae","cwaeg","cwaegg","cwaegs","cwaen","cwaenj","cwaenh","cwaed","cwael","cwaelg","cwaelm","cwaelb","cwaels","cwaelt","cwaelp","cwaelh","cwaem","cwaeb","cwaebs","cwaes","cwaess","cwaeng","cwaej","cwaec","cwaek","cwaet","cwaep","cwaeh","coe","coeg","coegg","coegs","coen","coenj","coenh","coed","coel","coelg","coelm","coelb","coels","coelt","coelp","coelh","coem","coeb","coebs","coes","coess","coeng","coej","coec","coek","coet","coep","coeh","cyo","cyog","cyogg","cyogs","cyon","cyonj","cyonh","cyod","cyol","cyolg","cyolm","cyolb","cyols","cyolt","cyolp","cyolh","cyom","cyob","cyobs","cyos","cyoss","cyong","cyoj","cyoc","cyok","cyot","cyop","cyoh","cu","cug","cugg","cugs","cun","cunj","cunh","cud","cul","culg","culm","culb","culs","cult","culp","culh","cum","cub","cubs","cus","cuss","cung","cuj","cuc","cuk","cut","cup","cuh","cweo","cweog","cweogg","cweogs","cweon","cweonj","cweonh","cweod","cweol","cweolg","cweolm","cweolb","cweols","cweolt","cweolp","cweolh","cweom","cweob","cweobs","cweos","cweoss","cweong","cweoj","cweoc","cweok","cweot","cweop","cweoh","cwe","cweg","cwegg","cwegs","cwen","cwenj","cwenh","cwed","cwel","cwelg","cwelm","cwelb","cwels","cwelt","cwelp","cwelh","cwem","cweb","cwebs","cwes","cwess","cweng","cwej","cwec","cwek","cwet","cwep","cweh","cwi","cwig","cwigg","cwigs","cwin","cwinj","cwinh","cwid","cwil","cwilg","cwilm","cwilb","cwils","cwilt","cwilp","cwilh","cwim","cwib","cwibs","cwis","cwiss","cwing","cwij","cwic"]});var J9=y((vtt,Z9)=>{Z9.exports=["cwik","cwit","cwip","cwih","cyu","cyug","cyugg","cyugs","cyun","cyunj","cyunh","cyud","cyul","cyulg","cyulm","cyulb","cyuls","cyult","cyulp","cyulh","cyum","cyub","cyubs","cyus","cyuss","cyung","cyuj","cyuc","cyuk","cyut","cyup","cyuh","ceu","ceug","ceugg","ceugs","ceun","ceunj","ceunh","ceud","ceul","ceulg","ceulm","ceulb","ceuls","ceult","ceulp","ceulh","ceum","ceub","ceubs","ceus","ceuss","ceung","ceuj","ceuc","ceuk","ceut","ceup","ceuh","cyi","cyig","cyigg","cyigs","cyin","cyinj","cyinh","cyid","cyil","cyilg","cyilm","cyilb","cyils","cyilt","cyilp","cyilh","cyim","cyib","cyibs","cyis","cyiss","cying","cyij","cyic","cyik","cyit","cyip","cyih","ci","cig","cigg","cigs","cin","cinj","cinh","cid","cil","cilg","cilm","cilb","cils","cilt","cilp","cilh","cim","cib","cibs","cis","ciss","cing","cij","cic","cik","cit","cip","cih","ka","kag","kagg","kags","kan","kanj","kanh","kad","kal","kalg","kalm","kalb","kals","kalt","kalp","kalh","kam","kab","kabs","kas","kass","kang","kaj","kac","kak","kat","kap","kah","kae","kaeg","kaegg","kaegs","kaen","kaenj","kaenh","kaed","kael","kaelg","kaelm","kaelb","kaels","kaelt","kaelp","kaelh","kaem","kaeb","kaebs","kaes","kaess","kaeng","kaej","kaec","kaek","kaet","kaep","kaeh","kya","kyag","kyagg","kyags","kyan","kyanj","kyanh","kyad","kyal","kyalg","kyalm","kyalb","kyals","kyalt","kyalp","kyalh","kyam","kyab","kyabs","kyas","kyass","kyang","kyaj","kyac","kyak","kyat","kyap","kyah","kyae","kyaeg","kyaegg","kyaegs","kyaen","kyaenj","kyaenh","kyaed","kyael","kyaelg","kyaelm","kyaelb","kyaels","kyaelt","kyaelp","kyaelh","kyaem","kyaeb","kyaebs","kyaes","kyaess","kyaeng","kyaej","kyaec","kyaek","kyaet","kyaep","kyaeh","keo","keog","keogg","keogs","keon","keonj","keonh","keod","keol","keolg","keolm","keolb","keols","keolt","keolp","keolh","keom","keob","keobs","keos","keoss","keong","keoj","keoc","keok","keot","keop","keoh"]});var U9=y((wtt,$9)=>{$9.exports=["ke","keg","kegg","kegs","ken","kenj","kenh","ked","kel","kelg","kelm","kelb","kels","kelt","kelp","kelh","kem","keb","kebs","kes","kess","keng","kej","kec","kek","ket","kep","keh","kyeo","kyeog","kyeogg","kyeogs","kyeon","kyeonj","kyeonh","kyeod","kyeol","kyeolg","kyeolm","kyeolb","kyeols","kyeolt","kyeolp","kyeolh","kyeom","kyeob","kyeobs","kyeos","kyeoss","kyeong","kyeoj","kyeoc","kyeok","kyeot","kyeop","kyeoh","kye","kyeg","kyegg","kyegs","kyen","kyenj","kyenh","kyed","kyel","kyelg","kyelm","kyelb","kyels","kyelt","kyelp","kyelh","kyem","kyeb","kyebs","kyes","kyess","kyeng","kyej","kyec","kyek","kyet","kyep","kyeh","ko","kog","kogg","kogs","kon","konj","konh","kod","kol","kolg","kolm","kolb","kols","kolt","kolp","kolh","kom","kob","kobs","kos","koss","kong","koj","koc","kok","kot","kop","koh","kwa","kwag","kwagg","kwags","kwan","kwanj","kwanh","kwad","kwal","kwalg","kwalm","kwalb","kwals","kwalt","kwalp","kwalh","kwam","kwab","kwabs","kwas","kwass","kwang","kwaj","kwac","kwak","kwat","kwap","kwah","kwae","kwaeg","kwaegg","kwaegs","kwaen","kwaenj","kwaenh","kwaed","kwael","kwaelg","kwaelm","kwaelb","kwaels","kwaelt","kwaelp","kwaelh","kwaem","kwaeb","kwaebs","kwaes","kwaess","kwaeng","kwaej","kwaec","kwaek","kwaet","kwaep","kwaeh","koe","koeg","koegg","koegs","koen","koenj","koenh","koed","koel","koelg","koelm","koelb","koels","koelt","koelp","koelh","koem","koeb","koebs","koes","koess","koeng","koej","koec","koek","koet","koep","koeh","kyo","kyog","kyogg","kyogs","kyon","kyonj","kyonh","kyod","kyol","kyolg","kyolm","kyolb","kyols","kyolt","kyolp","kyolh","kyom","kyob","kyobs","kyos","kyoss","kyong","kyoj","kyoc","kyok","kyot","kyop","kyoh","ku","kug","kugg","kugs","kun","kunj","kunh","kud","kul","kulg","kulm","kulb","kuls","kult","kulp","kulh","kum","kub","kubs","kus","kuss","kung","kuj","kuc","kuk","kut","kup","kuh","kweo","kweog","kweogg","kweogs"]});var G9=y((xtt,X9)=>{X9.exports=["kweon","kweonj","kweonh","kweod","kweol","kweolg","kweolm","kweolb","kweols","kweolt","kweolp","kweolh","kweom","kweob","kweobs","kweos","kweoss","kweong","kweoj","kweoc","kweok","kweot","kweop","kweoh","kwe","kweg","kwegg","kwegs","kwen","kwenj","kwenh","kwed","kwel","kwelg","kwelm","kwelb","kwels","kwelt","kwelp","kwelh","kwem","kweb","kwebs","kwes","kwess","kweng","kwej","kwec","kwek","kwet","kwep","kweh","kwi","kwig","kwigg","kwigs","kwin","kwinj","kwinh","kwid","kwil","kwilg","kwilm","kwilb","kwils","kwilt","kwilp","kwilh","kwim","kwib","kwibs","kwis","kwiss","kwing","kwij","kwic","kwik","kwit","kwip","kwih","kyu","kyug","kyugg","kyugs","kyun","kyunj","kyunh","kyud","kyul","kyulg","kyulm","kyulb","kyuls","kyult","kyulp","kyulh","kyum","kyub","kyubs","kyus","kyuss","kyung","kyuj","kyuc","kyuk","kyut","kyup","kyuh","keu","keug","keugg","keugs","keun","keunj","keunh","keud","keul","keulg","keulm","keulb","keuls","keult","keulp","keulh","keum","keub","keubs","keus","keuss","keung","keuj","keuc","keuk","keut","keup","keuh","kyi","kyig","kyigg","kyigs","kyin","kyinj","kyinh","kyid","kyil","kyilg","kyilm","kyilb","kyils","kyilt","kyilp","kyilh","kyim","kyib","kyibs","kyis","kyiss","kying","kyij","kyic","kyik","kyit","kyip","kyih","ki","kig","kigg","kigs","kin","kinj","kinh","kid","kil","kilg","kilm","kilb","kils","kilt","kilp","kilh","kim","kib","kibs","kis","kiss","king","kij","kic","kik","kit","kip","kih","ta","tag","tagg","tags","tan","tanj","tanh","tad","tal","talg","talm","talb","tals","talt","talp","talh","tam","tab","tabs","tas","tass","tang","taj","tac","tak","tat","tap","tah","tae","taeg","taegg","taegs","taen","taenj","taenh","taed","tael","taelg","taelm","taelb","taels","taelt","taelp","taelh","taem","taeb","taebs","taes","taess","taeng","taej","taec","taek","taet","taep","taeh","tya","tyag","tyagg","tyags","tyan","tyanj","tyanh","tyad"]});var K9=y((Ctt,z9)=>{z9.exports=["tyal","tyalg","tyalm","tyalb","tyals","tyalt","tyalp","tyalh","tyam","tyab","tyabs","tyas","tyass","tyang","tyaj","tyac","tyak","tyat","tyap","tyah","tyae","tyaeg","tyaegg","tyaegs","tyaen","tyaenj","tyaenh","tyaed","tyael","tyaelg","tyaelm","tyaelb","tyaels","tyaelt","tyaelp","tyaelh","tyaem","tyaeb","tyaebs","tyaes","tyaess","tyaeng","tyaej","tyaec","tyaek","tyaet","tyaep","tyaeh","teo","teog","teogg","teogs","teon","teonj","teonh","teod","teol","teolg","teolm","teolb","teols","teolt","teolp","teolh","teom","teob","teobs","teos","teoss","teong","teoj","teoc","teok","teot","teop","teoh","te","teg","tegg","tegs","ten","tenj","tenh","ted","tel","telg","telm","telb","tels","telt","telp","telh","tem","teb","tebs","tes","tess","teng","tej","tec","tek","tet","tep","teh","tyeo","tyeog","tyeogg","tyeogs","tyeon","tyeonj","tyeonh","tyeod","tyeol","tyeolg","tyeolm","tyeolb","tyeols","tyeolt","tyeolp","tyeolh","tyeom","tyeob","tyeobs","tyeos","tyeoss","tyeong","tyeoj","tyeoc","tyeok","tyeot","tyeop","tyeoh","tye","tyeg","tyegg","tyegs","tyen","tyenj","tyenh","tyed","tyel","tyelg","tyelm","tyelb","tyels","tyelt","tyelp","tyelh","tyem","tyeb","tyebs","tyes","tyess","tyeng","tyej","tyec","tyek","tyet","tyep","tyeh","to","tog","togg","togs","ton","tonj","tonh","tod","tol","tolg","tolm","tolb","tols","tolt","tolp","tolh","tom","tob","tobs","tos","toss","tong","toj","toc","tok","tot","top","toh","twa","twag","twagg","twags","twan","twanj","twanh","twad","twal","twalg","twalm","twalb","twals","twalt","twalp","twalh","twam","twab","twabs","twas","twass","twang","twaj","twac","twak","twat","twap","twah","twae","twaeg","twaegg","twaegs","twaen","twaenj","twaenh","twaed","twael","twaelg","twaelm","twaelb","twaels","twaelt","twaelp","twaelh","twaem","twaeb","twaebs","twaes","twaess","twaeng","twaej","twaec","twaek","twaet","twaep","twaeh","toe","toeg","toegg","toegs","toen","toenj","toenh","toed","toel","toelg","toelm","toelb"]});var V9=y((Stt,Q9)=>{Q9.exports=["toels","toelt","toelp","toelh","toem","toeb","toebs","toes","toess","toeng","toej","toec","toek","toet","toep","toeh","tyo","tyog","tyogg","tyogs","tyon","tyonj","tyonh","tyod","tyol","tyolg","tyolm","tyolb","tyols","tyolt","tyolp","tyolh","tyom","tyob","tyobs","tyos","tyoss","tyong","tyoj","tyoc","tyok","tyot","tyop","tyoh","tu","tug","tugg","tugs","tun","tunj","tunh","tud","tul","tulg","tulm","tulb","tuls","tult","tulp","tulh","tum","tub","tubs","tus","tuss","tung","tuj","tuc","tuk","tut","tup","tuh","tweo","tweog","tweogg","tweogs","tweon","tweonj","tweonh","tweod","tweol","tweolg","tweolm","tweolb","tweols","tweolt","tweolp","tweolh","tweom","tweob","tweobs","tweos","tweoss","tweong","tweoj","tweoc","tweok","tweot","tweop","tweoh","twe","tweg","twegg","twegs","twen","twenj","twenh","twed","twel","twelg","twelm","twelb","twels","twelt","twelp","twelh","twem","tweb","twebs","twes","twess","tweng","twej","twec","twek","twet","twep","tweh","twi","twig","twigg","twigs","twin","twinj","twinh","twid","twil","twilg","twilm","twilb","twils","twilt","twilp","twilh","twim","twib","twibs","twis","twiss","twing","twij","twic","twik","twit","twip","twih","tyu","tyug","tyugg","tyugs","tyun","tyunj","tyunh","tyud","tyul","tyulg","tyulm","tyulb","tyuls","tyult","tyulp","tyulh","tyum","tyub","tyubs","tyus","tyuss","tyung","tyuj","tyuc","tyuk","tyut","tyup","tyuh","teu","teug","teugg","teugs","teun","teunj","teunh","teud","teul","teulg","teulm","teulb","teuls","teult","teulp","teulh","teum","teub","teubs","teus","teuss","teung","teuj","teuc","teuk","teut","teup","teuh","tyi","tyig","tyigg","tyigs","tyin","tyinj","tyinh","tyid","tyil","tyilg","tyilm","tyilb","tyils","tyilt","tyilp","tyilh","tyim","tyib","tyibs","tyis","tyiss","tying","tyij","tyic","tyik","tyit","tyip","tyih","ti","tig","tigg","tigs","tin","tinj","tinh","tid","til","tilg","tilm","tilb","tils","tilt","tilp","tilh"]});var tee=y((Dtt,eee)=>{eee.exports=["tim","tib","tibs","tis","tiss","ting","tij","tic","tik","tit","tip","tih","pa","pag","pagg","pags","pan","panj","panh","pad","pal","palg","palm","palb","pals","palt","palp","palh","pam","pab","pabs","pas","pass","pang","paj","pac","pak","pat","pap","pah","pae","paeg","paegg","paegs","paen","paenj","paenh","paed","pael","paelg","paelm","paelb","paels","paelt","paelp","paelh","paem","paeb","paebs","paes","paess","paeng","paej","paec","paek","paet","paep","paeh","pya","pyag","pyagg","pyags","pyan","pyanj","pyanh","pyad","pyal","pyalg","pyalm","pyalb","pyals","pyalt","pyalp","pyalh","pyam","pyab","pyabs","pyas","pyass","pyang","pyaj","pyac","pyak","pyat","pyap","pyah","pyae","pyaeg","pyaegg","pyaegs","pyaen","pyaenj","pyaenh","pyaed","pyael","pyaelg","pyaelm","pyaelb","pyaels","pyaelt","pyaelp","pyaelh","pyaem","pyaeb","pyaebs","pyaes","pyaess","pyaeng","pyaej","pyaec","pyaek","pyaet","pyaep","pyaeh","peo","peog","peogg","peogs","peon","peonj","peonh","peod","peol","peolg","peolm","peolb","peols","peolt","peolp","peolh","peom","peob","peobs","peos","peoss","peong","peoj","peoc","peok","peot","peop","peoh","pe","peg","pegg","pegs","pen","penj","penh","ped","pel","pelg","pelm","pelb","pels","pelt","pelp","pelh","pem","peb","pebs","pes","pess","peng","pej","pec","pek","pet","pep","peh","pyeo","pyeog","pyeogg","pyeogs","pyeon","pyeonj","pyeonh","pyeod","pyeol","pyeolg","pyeolm","pyeolb","pyeols","pyeolt","pyeolp","pyeolh","pyeom","pyeob","pyeobs","pyeos","pyeoss","pyeong","pyeoj","pyeoc","pyeok","pyeot","pyeop","pyeoh","pye","pyeg","pyegg","pyegs","pyen","pyenj","pyenh","pyed","pyel","pyelg","pyelm","pyelb","pyels","pyelt","pyelp","pyelh","pyem","pyeb","pyebs","pyes","pyess","pyeng","pyej","pyec","pyek","pyet","pyep","pyeh","po","pog","pogg","pogs","pon","ponj","ponh","pod","pol","polg","polm","polb","pols","polt","polp","polh","pom","pob","pobs","pos"]});var nee=y((Ttt,iee)=>{iee.exports=["poss","pong","poj","poc","pok","pot","pop","poh","pwa","pwag","pwagg","pwags","pwan","pwanj","pwanh","pwad","pwal","pwalg","pwalm","pwalb","pwals","pwalt","pwalp","pwalh","pwam","pwab","pwabs","pwas","pwass","pwang","pwaj","pwac","pwak","pwat","pwap","pwah","pwae","pwaeg","pwaegg","pwaegs","pwaen","pwaenj","pwaenh","pwaed","pwael","pwaelg","pwaelm","pwaelb","pwaels","pwaelt","pwaelp","pwaelh","pwaem","pwaeb","pwaebs","pwaes","pwaess","pwaeng","pwaej","pwaec","pwaek","pwaet","pwaep","pwaeh","poe","poeg","poegg","poegs","poen","poenj","poenh","poed","poel","poelg","poelm","poelb","poels","poelt","poelp","poelh","poem","poeb","poebs","poes","poess","poeng","poej","poec","poek","poet","poep","poeh","pyo","pyog","pyogg","pyogs","pyon","pyonj","pyonh","pyod","pyol","pyolg","pyolm","pyolb","pyols","pyolt","pyolp","pyolh","pyom","pyob","pyobs","pyos","pyoss","pyong","pyoj","pyoc","pyok","pyot","pyop","pyoh","pu","pug","pugg","pugs","pun","punj","punh","pud","pul","pulg","pulm","pulb","puls","pult","pulp","pulh","pum","pub","pubs","pus","puss","pung","puj","puc","puk","put","pup","puh","pweo","pweog","pweogg","pweogs","pweon","pweonj","pweonh","pweod","pweol","pweolg","pweolm","pweolb","pweols","pweolt","pweolp","pweolh","pweom","pweob","pweobs","pweos","pweoss","pweong","pweoj","pweoc","pweok","pweot","pweop","pweoh","pwe","pweg","pwegg","pwegs","pwen","pwenj","pwenh","pwed","pwel","pwelg","pwelm","pwelb","pwels","pwelt","pwelp","pwelh","pwem","pweb","pwebs","pwes","pwess","pweng","pwej","pwec","pwek","pwet","pwep","pweh","pwi","pwig","pwigg","pwigs","pwin","pwinj","pwinh","pwid","pwil","pwilg","pwilm","pwilb","pwils","pwilt","pwilp","pwilh","pwim","pwib","pwibs","pwis","pwiss","pwing","pwij","pwic","pwik","pwit","pwip","pwih","pyu","pyug","pyugg","pyugs","pyun","pyunj","pyunh","pyud","pyul","pyulg","pyulm","pyulb","pyuls","pyult","pyulp","pyulh","pyum","pyub","pyubs","pyus","pyuss","pyung","pyuj","pyuc"]});var oee=y((ktt,ree)=>{ree.exports=["pyuk","pyut","pyup","pyuh","peu","peug","peugg","peugs","peun","peunj","peunh","peud","peul","peulg","peulm","peulb","peuls","peult","peulp","peulh","peum","peub","peubs","peus","peuss","peung","peuj","peuc","peuk","peut","peup","peuh","pyi","pyig","pyigg","pyigs","pyin","pyinj","pyinh","pyid","pyil","pyilg","pyilm","pyilb","pyils","pyilt","pyilp","pyilh","pyim","pyib","pyibs","pyis","pyiss","pying","pyij","pyic","pyik","pyit","pyip","pyih","pi","pig","pigg","pigs","pin","pinj","pinh","pid","pil","pilg","pilm","pilb","pils","pilt","pilp","pilh","pim","pib","pibs","pis","piss","ping","pij","pic","pik","pit","pip","pih","ha","hag","hagg","hags","han","hanj","hanh","had","hal","halg","halm","halb","hals","halt","halp","halh","ham","hab","habs","has","hass","hang","haj","hac","hak","hat","hap","hah","hae","haeg","haegg","haegs","haen","haenj","haenh","haed","hael","haelg","haelm","haelb","haels","haelt","haelp","haelh","haem","haeb","haebs","haes","haess","haeng","haej","haec","haek","haet","haep","haeh","hya","hyag","hyagg","hyags","hyan","hyanj","hyanh","hyad","hyal","hyalg","hyalm","hyalb","hyals","hyalt","hyalp","hyalh","hyam","hyab","hyabs","hyas","hyass","hyang","hyaj","hyac","hyak","hyat","hyap","hyah","hyae","hyaeg","hyaegg","hyaegs","hyaen","hyaenj","hyaenh","hyaed","hyael","hyaelg","hyaelm","hyaelb","hyaels","hyaelt","hyaelp","hyaelh","hyaem","hyaeb","hyaebs","hyaes","hyaess","hyaeng","hyaej","hyaec","hyaek","hyaet","hyaep","hyaeh","heo","heog","heogg","heogs","heon","heonj","heonh","heod","heol","heolg","heolm","heolb","heols","heolt","heolp","heolh","heom","heob","heobs","heos","heoss","heong","heoj","heoc","heok","heot","heop","heoh","he","heg","hegg","hegs","hen","henj","henh","hed","hel","helg","helm","helb","hels","helt","help","helh","hem","heb","hebs","hes","hess","heng","hej","hec","hek","het","hep","heh"]});var aee=y((Ptt,see)=>{see.exports=["hyeo","hyeog","hyeogg","hyeogs","hyeon","hyeonj","hyeonh","hyeod","hyeol","hyeolg","hyeolm","hyeolb","hyeols","hyeolt","hyeolp","hyeolh","hyeom","hyeob","hyeobs","hyeos","hyeoss","hyeong","hyeoj","hyeoc","hyeok","hyeot","hyeop","hyeoh","hye","hyeg","hyegg","hyegs","hyen","hyenj","hyenh","hyed","hyel","hyelg","hyelm","hyelb","hyels","hyelt","hyelp","hyelh","hyem","hyeb","hyebs","hyes","hyess","hyeng","hyej","hyec","hyek","hyet","hyep","hyeh","ho","hog","hogg","hogs","hon","honj","honh","hod","hol","holg","holm","holb","hols","holt","holp","holh","hom","hob","hobs","hos","hoss","hong","hoj","hoc","hok","hot","hop","hoh","hwa","hwag","hwagg","hwags","hwan","hwanj","hwanh","hwad","hwal","hwalg","hwalm","hwalb","hwals","hwalt","hwalp","hwalh","hwam","hwab","hwabs","hwas","hwass","hwang","hwaj","hwac","hwak","hwat","hwap","hwah","hwae","hwaeg","hwaegg","hwaegs","hwaen","hwaenj","hwaenh","hwaed","hwael","hwaelg","hwaelm","hwaelb","hwaels","hwaelt","hwaelp","hwaelh","hwaem","hwaeb","hwaebs","hwaes","hwaess","hwaeng","hwaej","hwaec","hwaek","hwaet","hwaep","hwaeh","hoe","hoeg","hoegg","hoegs","hoen","hoenj","hoenh","hoed","hoel","hoelg","hoelm","hoelb","hoels","hoelt","hoelp","hoelh","hoem","hoeb","hoebs","hoes","hoess","hoeng","hoej","hoec","hoek","hoet","hoep","hoeh","hyo","hyog","hyogg","hyogs","hyon","hyonj","hyonh","hyod","hyol","hyolg","hyolm","hyolb","hyols","hyolt","hyolp","hyolh","hyom","hyob","hyobs","hyos","hyoss","hyong","hyoj","hyoc","hyok","hyot","hyop","hyoh","hu","hug","hugg","hugs","hun","hunj","hunh","hud","hul","hulg","hulm","hulb","huls","hult","hulp","hulh","hum","hub","hubs","hus","huss","hung","huj","huc","huk","hut","hup","huh","hweo","hweog","hweogg","hweogs","hweon","hweonj","hweonh","hweod","hweol","hweolg","hweolm","hweolb","hweols","hweolt","hweolp","hweolh","hweom","hweob","hweobs","hweos","hweoss","hweong","hweoj","hweoc","hweok","hweot","hweop","hweoh","hwe","hweg","hwegg","hwegs"]});var uee=y((Ett,lee)=>{lee.exports=["hwen","hwenj","hwenh","hwed","hwel","hwelg","hwelm","hwelb","hwels","hwelt","hwelp","hwelh","hwem","hweb","hwebs","hwes","hwess","hweng","hwej","hwec","hwek","hwet","hwep","hweh","hwi","hwig","hwigg","hwigs","hwin","hwinj","hwinh","hwid","hwil","hwilg","hwilm","hwilb","hwils","hwilt","hwilp","hwilh","hwim","hwib","hwibs","hwis","hwiss","hwing","hwij","hwic","hwik","hwit","hwip","hwih","hyu","hyug","hyugg","hyugs","hyun","hyunj","hyunh","hyud","hyul","hyulg","hyulm","hyulb","hyuls","hyult","hyulp","hyulh","hyum","hyub","hyubs","hyus","hyuss","hyung","hyuj","hyuc","hyuk","hyut","hyup","hyuh","heu","heug","heugg","heugs","heun","heunj","heunh","heud","heul","heulg","heulm","heulb","heuls","heult","heulp","heulh","heum","heub","heubs","heus","heuss","heung","heuj","heuc","heuk","heut","heup","heuh","hyi","hyig","hyigg","hyigs","hyin","hyinj","hyinh","hyid","hyil","hyilg","hyilm","hyilb","hyils","hyilt","hyilp","hyilh","hyim","hyib","hyibs","hyis","hyiss","hying","hyij","hyic","hyik","hyit","hyip","hyih","hi","hig","higg","higs","hin","hinj","hinh","hid","hil","hilg","hilm","hilb","hils","hilt","hilp","hilh","him","hib","hibs","his","hiss","hing","hij","hic","hik","hit","hip","hih","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var hee=y((Rtt,cee)=>{cee.exports=["Kay ","Kayng ","Ke ","Ko ","Kol ","Koc ","Kwi ","Kwi ","Kyun ","Kul ","Kum ","Na ","Na ","Na ","La ","Na ","Na ","Na ","Na ","Na ","Nak ","Nak ","Nak ","Nak ","Nak ","Nak ","Nak ","Nan ","Nan ","Nan ","Nan ","Nan ","Nan ","Nam ","Nam ","Nam ","Nam ","Nap ","Nap ","Nap ","Nang ","Nang ","Nang ","Nang ","Nang ","Nay ","Nayng ","No ","No ","No ","No ","No ","No ","No ","No ","No ","No ","No ","No ","Nok ","Nok ","Nok ","Nok ","Nok ","Nok ","Non ","Nong ","Nong ","Nong ","Nong ","Noy ","Noy ","Noy ","Noy ","Nwu ","Nwu ","Nwu ","Nwu ","Nwu ","Nwu ","Nwu ","Nwu ","Nuk ","Nuk ","Num ","Nung ","Nung ","Nung ","Nung ","Nung ","Twu ","La ","Lak ","Lak ","Lan ","Lyeng ","Lo ","Lyul ","Li ","Pey ","Pen ","Pyen ","Pwu ","Pwul ","Pi ","Sak ","Sak ","Sam ","Sayk ","Sayng ","Sep ","Sey ","Sway ","Sin ","Sim ","Sip ","Ya ","Yak ","Yak ","Yang ","Yang ","Yang ","Yang ","Yang ","Yang ","Yang ","Yang ","Ye ","Ye ","Ye ","Ye ","Ye ","Ye ","Ye ","Ye ","Ye ","Ye ","Ye ","Yek ","Yek ","Yek ","Yek ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yen ","Yel ","Yel ","Yel ","Yel ","Yel ","Yel ","Yem ","Yem ","Yem ","Yem ","Yem ","Yep ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yeng ","Yey ","Yey ","Yey ","Yey ","O ","Yo ","Yo ","Yo ","Yo ","Yo ","Yo ","Yo ","Yo ","Yo ","Yo ","Yong ","Wun ","Wen ","Yu ","Yu ","Yu ","Yu ","Yu ","Yu ","Yu ","Yu ","Yu ","Yu ","Yuk ","Yuk ","Yuk ","Yun ","Yun ","Yun ","Yun ","Yul ","Yul ","Yul ","Yul ","Yung ","I ","I ","I ","I ","I ","I ","I ","I ","I ","I ","I ","I ","I ","I ","Ik ","Ik ","In ","In ","In ","In ","In ","In ","In ","Im ","Im ","Im ","Ip ","Ip ","Ip ","Cang ","Cek ","Ci ","Cip ","Cha ","Chek "]});var gee=y((_tt,dee)=>{dee.exports=["Chey ","Thak ","Thak ","Thang ","Thayk ","Thong ","Pho ","Phok ","Hang ","Hang ","Hyen ","Hwak ","Wu ","Huo ","[?] ","[?] ","Zhong ","[?] ","Qing ","[?] ","[?] ","Xi ","Zhu ","Yi ","Li ","Shen ","Xiang ","Fu ","Jing ","Jing ","Yu ","[?] ","Hagi ","[?] ","Zhu ","[?] ","[?] ","Yi ","Du ","[?] ","[?] ","[?] ","Fan ","Si ","Guan ","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]"]});var fee=y((Ltt,pee)=>{pee.exports=["ff","fi","fl","ffi","ffl","st","st","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","mn","me","mi","vn","mkh","[?]","[?]","[?]","[?]","[?]","yi","","ay","`","","d","h","k","l","m","m","t","+","sh","s","sh","s","a","a","","b","g","d","h","v","z","[?]","t","y","k","k","l","[?]","l","[?]","n","n","[?]","p","p","[?]","ts","ts","r","sh","t","vo","b","k","p","l","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]});var bee=y((Itt,mee)=>{mee.exports=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","",""]});var vee=y((Ftt,yee)=>{yee.exports=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","","","","","","","","","","[?]","[?]","[?]"]});var xee=y((jtt,wee)=>{wee.exports=["[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","","","","~","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","..","--","-","_","_","(",") ","{","} ","[","] ","[(",")] ","<<",">> ","<","> ","[","] ","{","}","[?]","[?]","[?]","[?]","","","","","","","",",",",",".","",";",":","?","!","-","(",")","{","}","{","}","#","&","*","+","-","<",">","=","","\\","$","%","@","[?]","[?]","[?]","[?]","","","","[?]","","[?]","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","[?]","[?]",""]});var See=y((Mtt,Cee)=>{Cee.exports=["[?]","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","@","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\","]","^","_","`","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","{","|","}","~","[?]","[?]",".","[","]",",","*","wo","a","i","u","e","o","ya","yu","yo","tu","+","a","i","u","e","o","ka","ki","ku","ke","ko","sa","si","su","se","so","ta","ti","tu","te","to","na","ni","nu","ne","no","ha","hi","hu","he","ho","ma","mi","mu","me","mo","ya","yu","yo","ra","ri","ru","re","ro","wa","n",":",";","","g","gg","gs","n","nj","nh","d","dd","r","lg","lm","lb","ls","lt","lp","rh","m","b","bb","bs","s","ss","","j","jj","c","k","t","p","h","[?]","[?]","[?]","a","ae","ya","yae","eo","e","[?]","[?]","yeo","ye","o","wa","wae","oe","[?]","[?]","yo","u","weo","we","wi","yu","[?]","[?]","eu","yi","i","[?]","[?]","[?]","/C","PS","!","-","|","Y=","W=","[?]","|","-","|","-","|","#","O","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","[?]","{","|","}","","","",""]});var bD=y((Ott,Dee)=>{"use strict";var I={},CTe=/(?![\x00-\x7F]|[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3})./g;Dee.exports=function(n){return n.replace(CTe,STe)};function STe(n){var e=TTe(n);if(e>65535)return"_";var t=e>>8,i=e&255;if(t>24&&t<30||t>215&&t<249)return"";if(!I[t])switch(DTe(t)){case"00":I[t]=Y4();break;case"01":I[t]=J4();break;case"02":I[t]=U4();break;case"03":I[t]=G4();break;case"04":I[t]=K4();break;case"05":I[t]=V4();break;case"06":I[t]=t6();break;case"07":I[t]=n6();break;case"09":I[t]=o6();break;case"0a":I[t]=a6();break;case"0b":I[t]=u6();break;case"0c":I[t]=h6();break;case"0d":I[t]=g6();break;case"0e":I[t]=f6();break;case"0f":I[t]=b6();break;case"10":I[t]=v6();break;case"11":I[t]=x6();break;case"12":I[t]=S6();break;case"13":I[t]=T6();break;case"14":I[t]=P6();break;case"15":I[t]=R6();break;case"16":I[t]=L6();break;case"17":I[t]=F6();break;case"18":I[t]=M6();break;case"1e":I[t]=A6();break;case"1f":I[t]=H6();break;case"20":I[t]=B6();break;case"21":I[t]=Y6();break;case"22":I[t]=J6();break;case"23":I[t]=U6();break;case"24":I[t]=G6();break;case"25":I[t]=K6();break;case"26":I[t]=V6();break;case"27":I[t]=tV();break;case"28":I[t]=nV();break;case"2e":I[t]=oV();break;case"2f":I[t]=aV();break;case"30":I[t]=uV();break;case"31":I[t]=hV();break;case"32":I[t]=gV();break;case"33":I[t]=fV();break;case"4d":I[t]=bV();break;case"4e":I[t]=vV();break;case"4f":I[t]=xV();break;case"50":I[t]=SV();break;case"51":I[t]=TV();break;case"52":I[t]=PV();break;case"53":I[t]=RV();break;case"54":I[t]=LV();break;case"55":I[t]=FV();break;case"56":I[t]=MV();break;case"57":I[t]=AV();break;case"58":I[t]=HV();break;case"59":I[t]=BV();break;case"5a":I[t]=YV();break;case"5b":I[t]=JV();break;case"5c":I[t]=UV();break;case"5d":I[t]=GV();break;case"5e":I[t]=KV();break;case"5f":I[t]=VV();break;case"60":I[t]=t8();break;case"61":I[t]=n8();break;case"62":I[t]=o8();break;case"63":I[t]=a8();break;case"64":I[t]=u8();break;case"65":I[t]=h8();break;case"66":I[t]=g8();break;case"67":I[t]=f8();break;case"68":I[t]=b8();break;case"69":I[t]=v8();break;case"6a":I[t]=x8();break;case"6b":I[t]=S8();break;case"6c":I[t]=T8();break;case"6d":I[t]=P8();break;case"6e":I[t]=R8();break;case"6f":I[t]=L8();break;case"70":I[t]=F8();break;case"71":I[t]=M8();break;case"72":I[t]=A8();break;case"73":I[t]=H8();break;case"74":I[t]=B8();break;case"75":I[t]=Y8();break;case"76":I[t]=J8();break;case"77":I[t]=U8();break;case"78":I[t]=G8();break;case"79":I[t]=K8();break;case"7a":I[t]=V8();break;case"7b":I[t]=t5();break;case"7c":I[t]=n5();break;case"7d":I[t]=o5();break;case"7e":I[t]=a5();break;case"7f":I[t]=u5();break;case"80":I[t]=h5();break;case"81":I[t]=g5();break;case"82":I[t]=f5();break;case"83":I[t]=b5();break;case"84":I[t]=v5();break;case"85":I[t]=x5();break;case"86":I[t]=S5();break;case"87":I[t]=T5();break;case"88":I[t]=P5();break;case"89":I[t]=R5();break;case"8a":I[t]=L5();break;case"8b":I[t]=F5();break;case"8c":I[t]=M5();break;case"8d":I[t]=A5();break;case"8e":I[t]=H5();break;case"8f":I[t]=B5();break;case"90":I[t]=Y5();break;case"91":I[t]=J5();break;case"92":I[t]=U5();break;case"93":I[t]=G5();break;case"94":I[t]=K5();break;case"95":I[t]=V5();break;case"96":I[t]=t7();break;case"97":I[t]=n7();break;case"98":I[t]=o7();break;case"99":I[t]=a7();break;case"9a":I[t]=u7();break;case"9b":I[t]=h7();break;case"9c":I[t]=g7();break;case"9d":I[t]=f7();break;case"9e":I[t]=b7();break;case"9f":I[t]=v7();break;case"a0":I[t]=x7();break;case"a1":I[t]=S7();break;case"a2":I[t]=T7();break;case"a3":I[t]=P7();break;case"a4":I[t]=R7();break;case"ac":I[t]=L7();break;case"ad":I[t]=F7();break;case"ae":I[t]=M7();break;case"af":I[t]=A7();break;case"b0":I[t]=H7();break;case"b1":I[t]=B7();break;case"b2":I[t]=Y7();break;case"b3":I[t]=J7();break;case"b4":I[t]=U7();break;case"b5":I[t]=G7();break;case"b6":I[t]=K7();break;case"b7":I[t]=V7();break;case"b8":I[t]=t9();break;case"b9":I[t]=n9();break;case"ba":I[t]=o9();break;case"bb":I[t]=a9();break;case"bc":I[t]=u9();break;case"bd":I[t]=h9();break;case"be":I[t]=g9();break;case"bf":I[t]=f9();break;case"c0":I[t]=b9();break;case"c1":I[t]=v9();break;case"c2":I[t]=x9();break;case"c3":I[t]=S9();break;case"c4":I[t]=T9();break;case"c5":I[t]=P9();break;case"c6":I[t]=R9();break;case"c7":I[t]=L9();break;case"c8":I[t]=F9();break;case"c9":I[t]=M9();break;case"ca":I[t]=A9();break;case"cb":I[t]=H9();break;case"cc":I[t]=B9();break;case"cd":I[t]=Y9();break;case"ce":I[t]=J9();break;case"cf":I[t]=U9();break;case"d0":I[t]=G9();break;case"d1":I[t]=K9();break;case"d2":I[t]=V9();break;case"d3":I[t]=tee();break;case"d4":I[t]=nee();break;case"d5":I[t]=oee();break;case"d6":I[t]=aee();break;case"d7":I[t]=uee();break;case"f9":I[t]=hee();break;case"fa":I[t]=gee();break;case"fb":I[t]=fee();break;case"fc":I[t]=bee();break;case"fd":I[t]=vee();break;case"fe":I[t]=xee();break;case"ff":I[t]=See();break;default:return""}return I[t][i]}function DTe(n){return(n+256).toString(16).substr(-2)}function TTe(n){for(var e,t,i,r,o,s,a;Array.isArray(n);)n=n[0];switch(n.length){case 1:return Zo(n);case 2:return e=Zo(n.substr(0,1)),t=Zo(n.substr(1,1)),o=(e&3)<<6|t&63,s=(e&28)>>2,s<<8|o;case 3:return e=Zo(n.substr(0,1)),t=Zo(n.substr(1,1)),i=Zo(n.substr(2,1)),o=(t&3)<<6|i&63,s=(e&15)<<4|(t&60)>>2,s<<8|o;default:return e=Zo(n.substr(0,1)),t=Zo(n.substr(1,1)),i=Zo(n.substr(2,1)),r=Zo(n.substr(3,1)),o=(i&3)<<6|r&63,s=(t&15)<<4|(i&60)>>2,a=(e&7)<<5|(t&48)>>4,a<<16|s<<8|o}}function Zo(n){var e=n+"",t=e.charCodeAt(0);if(55296<=t&&t<=56319){var i=t;if(e.length===1)return t;var r=e.charCodeAt(1);return(i-55296)*1024+(r-56320)+65536}return 56320<=t&&t<=57343,t}});var Tee=k(()=>{"use strict"});async function Eee(n,e,t,i=""){if(e=="vim")return(await n.eval(t)).toString();if(e=="shell"){let s=await(0,Pee.promisify)(kee.exec)(t);return s.stdout.replace(/\s*$/,"")||s.stderr}let r=[`snip._reset("${sb(i)}")`];r.push(...t.split(/\r?\n/).map(s=>s.replace(/\t/g," "))),await md(n,r);let o=await n.call("pyxeval","str(snip.rv)");return typeof o=="string"?o:""}function yD(n){let{range:e,regex:t,line:i}=n,r=[];if(t&&e!=null){let o=i.slice(e.start.character,e.end.character);r.push(`pattern = re.compile("${sb(t)}")`),r.push(`match = pattern.search("${sb(o)}")`)}else r.push("match = None");return r.join(` -`)}function Ree(n){let{range:e,context:t,line:i}=n,r=["import re, os, vim, string, random",`path = vim.eval('expand("%:p")') or ""`,"fn = os.path.basename(path)"];t?(r.push("snip = ContextSnippet()"),r.push(`context = ${t}`)):r.push("context = True");let o=`(${e.start.line},${Buffer.byteLength(i.slice(0,e.start.character))})`,s=`(${e.start.line},${Buffer.byteLength(i.slice(0,e.end.character))})`,a=i.match(/^\s*/)[0];return r.push(`snip = SnippetUtil("${sb(a)}", ${o}, ${s}, context)`),r}async function md(n,e){try{await n.command(`pyx ${PTe(e.join(` -`))}`)}catch(t){let i=new Error(t instanceof Error?t.message:t.toString());throw i.stack=`Error on execute python code: -${e.join(` -`)} -`+(t instanceof Error?t.stack:t),i}}function ab(n){let e=Object.keys(n),t=e.length?Math.max.apply(null,e.map(r=>Number(r))):0,i=new Array(t).fill('""');for(let[r,o]of Object.entries(n))i[r]=`"${sb(o)}"`;return`t = (${i.join(",")},)`}function PTe(n,e=!1){if(!kTe&&e===!1)return n;let t=["import traceback, vim","vim.vars['errmsg'] = ''","try:"];return t.push(...n.split(` -`).map(i=>" "+i)),t.push("except Exception as e:"),t.push(" vim.vars['errmsg'] = traceback.format_exc()"),t.join(` -`)}function sb(n){return n.replace(/\\/g,"\\\\").replace(/"/g,'\\"').replace(/\t/g,"\\t").replace(/\n/g,"\\n")}function _ee(n){if(n.indexOf("\\z")!==-1)throw new Error("pattern \\z not supported");if(n.indexOf("(?s)")!==-1)throw new Error("pattern (?s) not supported");if(n.indexOf("(?x)")!==-1)throw new Error("pattern (?x) not supported");if(n.indexOf(` -`)!==-1)throw new Error("pattern \\n not supported");if(RTe.test(n))throw new Error("pattern (?id/name)yes-pattern|no-pattern not supported");return n.replace(FTe,(e,t)=>e=="\\A"?"^":e.startsWith("(?#")?"":e.startsWith("(?P<")?"(?"+e.slice(3):e.startsWith("(?P=")?`\\k<${t}>`:"")}var kee,Pee,Ntt,kTe,ETe,RTe,_Te,LTe,ITe,FTe,SF=k(()=>{"use strict";kee=require("child_process"),Pee=require("util"),Ntt=q()("snippets-eval"),kTe=process.env.VIM_NODE_RPC=="1";ETe=/\\A/,RTe=/\(\?\(\w+\).+\|/,_Te=/\(\?#.*?\)/,LTe=/\(\?P<\w+>.*?\)/,ITe=/\(\?P=(\w+)\)/,FTe=new RegExp(`${_Te.source}|${ETe.source}|${LTe.source}|${ITe.source}`,"g")});function Iee(n,e){let t=[...n];for(;t.length>0;){let i=t.shift();if(!e(i))break;t.unshift(...i.children)}}function ATe(n,e=[]){let t="",i=n.length,r=0,o=!1,s=!1;for(;r{"use strict";Fee=S(bD());nt();Tee();_e();SF();jTe=q()("snippets-parser"),Lee=["VISUAL","YANK","UUID"],MTe=["d","g","i","m","s","u","y"],fo=class{static isDigitCharacter(e){return e>=48&&e<=57}static isVariableCharacter(e){return e===95||e>=97&&e<=122||e>=65&&e<=90}constructor(){this.text("")}text(e){this.value=e,this.pos=0}tokenText(e){return this.value.substr(e.pos,e.len)}next(){if(this.pos>=this.value.length)return{type:14,pos:this.pos,len:0};let e=this.pos,t=0,i=this.value.charCodeAt(e),r;if(r=fo._table[i],typeof r=="number")return this.pos+=1,{type:r,pos:e,len:1};if(fo.isDigitCharacter(i)){r=8;do t+=1,i=this.value.charCodeAt(e+t);while(fo.isDigitCharacter(i));return this.pos+=t,{type:r,pos:e,len:t}}if(fo.isVariableCharacter(i)){r=9;do i=this.value.charCodeAt(e+ ++t);while(fo.isVariableCharacter(i)||fo.isDigitCharacter(i));return this.pos+=t,{type:r,pos:e,len:t}}r=10;do t+=1,i=this.value.charCodeAt(e+t);while(!isNaN(i)&&typeof fo._table[i]>"u"&&!fo.isDigitCharacter(i)&&!fo.isVariableCharacter(i));return this.pos+=t,{type:r,pos:e,len:t}}},vD=fo;vD._table={[36]:0,[58]:1,[44]:2,[123]:3,[125]:4,[92]:5,[47]:6,[124]:7,[43]:11,[45]:12,[63]:13,[40]:15,[41]:16,[96]:17,[33]:18};$o=class{constructor(){this._children=[]}appendChild(e){return e instanceof yt&&this._children[this._children.length-1]instanceof yt?this._children[this._children.length-1].value+=e.value:(e.parent=this,this._children.push(e)),this}setOnlyChild(e){e.parent=this,this._children=[e]}replaceChildren(e){for(let t of e)t.parent=this;this._children=e}get children(){return this._children}get snippet(){let e=this;for(;;){if(!e)return;if(e instanceof vd)return e;e=e.parent}}toString(){return this.children.reduce((e,t)=>e+t.toString(),"")}len(){return 0}},yt=class extends $o{constructor(t){super();this.value=t}static escape(t){return t.replace(/\$|}|\\/g,"\\$&")}toString(){return this.value}toTextmateString(){return yt.escape(this.value)}len(){return this.value.length}clone(){return new yt(this.value)}},Jo=class extends $o{constructor(t,i,r){super();this.code=t;this.kind=i;this._value="";this._related=[];if(i==="python"){let{_related:o}=this,s,a=/\bt\[(\d+)\]/g;for(;s=a.exec(t),s!=null;){let l=parseInt(s[1],10);o.includes(l)||o.push(l)}}typeof r=="string"&&(this._value=r)}get related(){return this._related}update(t){if(this.kind!=="python")return;let i=new Set;this.code=this.code.replace(/\bt\[(\d+)\]/g,(r,o)=>{let s=Number(o),a=t.has(s)?t.get(s):s;return i.add(a),`t[${a}]`}),this._related=Array.from(i)}get index(){if(this.parent instanceof ct)return this.parent.index}async resolve(t){if(!this.code.length)return;let i=await Eee(t,this.kind,this.code,this._value??"");i!=null&&(this._value=i)}len(){return this._value.length}toString(){return this._value}get value(){return this._value}toTextmateString(){let t="";return this.kind=="python"?t="!p ":this.kind=="shell"?t="":this.kind=="vim"&&(t="!v "),"`"+t+this.code+"`"}clone(){return new Jo(this.code,this.kind,this.value)}},wD=class extends $o{},ct=class extends wD{constructor(t){super();this.index=t;this.primary=!1}get isFinalTabstop(){return this.index===0}get choice(){return this._children.length===1&&this._children[0]instanceof bd?this._children[0]:void 0}toTextmateString(){let t="";return this.transform&&(t=this.transform.toTextmateString()),this.children.length===0&&!this.transform?`$${this.index}`:this.children.length===0?`\${${this.index}${t}}`:this.choice?`\${${this.index}|${this.choice.toTextmateString()}|${t}}`:`\${${this.index}:${this.children.map(i=>i.toTextmateString()).join("")}${t}}`}clone(){let t=new ct(this.index);return this.transform&&(t.transform=this.transform.clone()),t._children=this.children.map(i=>i.clone()),t}},bd=class extends $o{constructor(){super(...arguments);this.options=[]}appendChild(t){return t instanceof yt&&(t.parent=this,this.options.push(t)),this}toString(){return this.options[0].value}toTextmateString(){return this.options.map(t=>t.value.replace(/\||,/g,"\\$&")).join(",")}len(){return this.options[0].len()}clone(){let t=new bd;for(let i of this.options)t.appendChild(i);return t}},lb=class extends $o{constructor(){super(...arguments);this.ascii=!1;this.ultisnip=!1}resolve(t){let i=!1,r=t.replace(this.regexp,(...o)=>(i=!0,this._replace(o.slice(0,-2))));return!i&&this._children.some(o=>o instanceof ur&&Boolean(o.elseValue))&&(r=this._replace([])),r}_replace(t){let i="",r=[];for(let o of this._children)if(o instanceof ur){let s=o.resolve(t[o.index]||"");if(this.ultisnip&&s.indexOf("\\")!==-1){let a=i.length;r.push(...CB(s,"\\").map(l=>l+a))}i+=s}else o instanceof yd?i+=o.resolve(t[o.index]):i+=o.toString();return this.ascii&&(i=(0,Fee.default)(i)),this.ultisnip?ATe(i,r):i}toString(){return""}toTextmateString(){return`/${this.regexp.source}/${this.children.map(t=>t.toTextmateString())}/${(this.regexp.ignoreCase?"i":"")+(this.regexp.global?"g":"")}`}clone(){let t=new lb;return t.regexp=new RegExp(this.regexp.source,(this.regexp.ignoreCase?"i":"")+(this.regexp.global?"g":"")),t._children=this.children.map(i=>i.clone()),t}},yd=class extends $o{constructor(t,i,r){super();this.index=t;this.ifValue=i;this.elseValue=r}resolve(t){return t?this.ifValue:this.elseValue}toTextmateString(){return"(?"+this.index+":"+this.ifValue+(this.elseValue?":"+this.elseValue:"")+")"}clone(){return new yd(this.index,this.ifValue,this.elseValue)}},ur=class extends $o{constructor(t,i,r,o){super();this.index=t;this.shorthandName=i;this.ifValue=r;this.elseValue=o}resolve(t){return this.shorthandName==="upcase"?t?t.toLocaleUpperCase():"":this.shorthandName==="downcase"?t?t.toLocaleLowerCase():"":this.shorthandName==="capitalize"?t?t[0].toLocaleUpperCase()+t.substr(1):"":this.shorthandName==="pascalcase"?t?this._toPascalCase(t):"":Boolean(t)&&typeof this.ifValue=="string"?this.ifValue:!t&&typeof this.elseValue=="string"?this.elseValue:t||""}_toPascalCase(t){let i=t.match(/[a-z]+/gi);return i?i.map(r=>r.charAt(0).toUpperCase()+r.substr(1).toLowerCase()).join(""):t}toTextmateString(){let t="${";return t+=this.index,this.shorthandName?t+=`:/${this.shorthandName}`:this.ifValue&&this.elseValue?t+=`:?${this.ifValue}:${this.elseValue}`:this.ifValue?t+=`:+${this.ifValue}`:this.elseValue&&(t+=`:-${this.elseValue}`),t+="}",t}clone(){return new ur(this.index,this.shorthandName,this.ifValue,this.elseValue)}},mo=class extends wD{constructor(t,i){super();this.name=t;this._resolved=!1;typeof i=="boolean"&&(this._resolved=i)}get resolved(){return this._resolved}async resolve(t){let i=await t.resolve(this);if(this._resolved=!0,i&&i.includes(` -`)){let r="";this.snippet.walk(u=>{if(u==this)return!1;if(u instanceof yt){let c=u.toString().split(/\r?\n/);r=c[c.length-1].match(/^\s*/)[0]}return!0});let o=i.split(` -`),s=o.filter(u=>u.length>0).map(u=>u.match(/^\s*/)[0]),a=s.length==0?"":s.reduce((u,c)=>u.lengthc==0||u.length==0||!u.startsWith(a)?u:r+u.slice(a.length)).join(` -`)}return this.transform&&(i=this.transform.resolve(i||"")),i!==void 0?(this._children=[new yt(i)],!0):!1}toTextmateString(){let t="";return this.transform&&(t=this.transform.toTextmateString()),this.children.length===0?`\${${this.name}${t}}`:`\${${this.name}:${this.children.map(i=>i.toTextmateString()).join("")}${t}}`}clone(){let t=new mo(this.name,this.resolved);return this.transform&&(t.transform=this.transform.clone()),t._children=this.children.map(i=>i.clone()),t}};vd=class extends $o{constructor(t){super();this.ultisnip=t===!0}get hasPython(){return this.ultisnip?this.pyBlocks.length>0:!1}get hasCodeBlock(){if(!this.ultisnip)return!1;let{pyBlocks:t,otherBlocks:i}=this;return t.length>0||i.length>0}get values(){if(this._values)return this._values;let t={},i=0;this.placeholders.forEach(r=>{i=Math.max(r.index,i),r.transform==null&&(r.primary||t[r.index]===void 0)&&(t[r.index]=r.toString())});for(let r=0;r<=i;r++)t[r]===void 0&&(t[r]="");return this._values=t,t}get orderedPyIndexBlocks(){let t=[],i=this.pyBlocks.filter(a=>typeof a.index=="number");if(i.length==0)return t;let r=i.map(a=>a.index),o=[],s=a=>{let{related:l}=a;return l.length==0||l.every(u=>!r.includes(u)||o.includes(u))?(o.push(a.index),t.push(a),!0):!1};for(;i.length>0;){let a=!1;for(let l of i)s(l)&&(a=!0);if(!a)break;i=i.filter(l=>!o.includes(l.index))}return t}async evalCodeBlocks(t,i){let{pyBlocks:r,otherBlocks:o}=this;if(await Promise.all(o.map(s=>{let a=s.value;return s.resolve(t).then(()=>{s.parent instanceof ct&&a!==s.value&&this.onPlaceholderUpdate(s.parent)})})),r.length){let s=ab(this.values);await md(t,[...i,s]);for(let l of r){let u=l.value;await l.resolve(t),u!==l.value&&l.parent instanceof ct&&(this.onPlaceholderUpdate(l.parent),await md(t,[ab(this.values)]))}for(let l of this.orderedPyIndexBlocks)await this.updatePyIndexBlock(t,l);let a=r.filter(l=>l.index===void 0&&l.related.length>0);for(let l of a)await l.resolve(t)}}async updatePythonCodes(t,i){let r;if(i instanceof ct)r=i.index;else for(;i.parent;){if(i instanceof ct){r=i.index;break}i=i.parent}if(r===void 0)return;let o=this.getDependentPyIndexBlocks(r);await md(t,[ab(this.values)]);for(let a of o)await this.updatePyIndexBlock(t,a);let s=this.pyBlocks.filter(a=>a.index===void 0&&a.related.length>0);for(let a of s)await a.resolve(t)}getDependentPyIndexBlocks(t){let i=[],r=[],o=this.pyBlocks.filter(a=>typeof a.index=="number"),s=a=>{let l=o.filter(u=>!r.includes(u.index)&&u.related.includes(a));l.length>0&&(i.push(...l),l.forEach(u=>{s(u.index)}))};return s(t),i}async updatePyIndexBlock(t,i){let r=i.value;await i.resolve(t),r!==i.value&&(i.parent instanceof ct&&this.onPlaceholderUpdate(i.parent),await md(t,[ab(this.values)]))}get placeholderInfo(){if(!this._placeholders){let t=[],i=[],r=[],o=[];this.walk(s=>{if(s instanceof ct)o.push(s);else if(s instanceof mo){let a=s.name.charCodeAt(0);(a<65||a>90)&&t.push(s)}else s instanceof Jo&&(s.kind==="python"?i.push(s):r.push(s));return!0}),this._placeholders={placeholders:o,pyBlocks:i,otherBlocks:r,variables:t}}return this._placeholders}get variables(){return this.placeholderInfo.variables}get placeholders(){return this.placeholderInfo.placeholders}get pyBlocks(){return this.placeholderInfo.pyBlocks}get otherBlocks(){return this.placeholderInfo.otherBlocks}get maxIndexNumber(){let{placeholders:t}=this;return t.reduce((i,r)=>Math.max(i,r.index),0)}get first(){let{placeholders:t,variables:i}=this,[r,o]=_B(t.filter(s=>!s.transform),s=>s.index!==0);if(r.length){let s=Math.min.apply(null,r.map(l=>l.index)),a=r.filter(l=>l.index==s);return a.find(l=>l.primary)??a[0]}return i.length?i[0]:o.find(s=>s.primary)??o[0]}insertSnippet(t,i,r,o){let s=i instanceof ct?i.index:this.maxIndexNumber+1,[a,l]=r,u=o?yD(o):void 0,c=new As(!!o,u).parse(t,!0),h=c.maxIndexNumber+1,d=new Map;for(let m of c.placeholders){let b=m.index;m.isFinalTabstop?m.index=h+s:m.index=m.index+s,d.set(b,m.index)}o&&c.pyBlocks.forEach(m=>{m.update(d)});let g=new Map;this.walk(m=>{if(m instanceof ct&&m.index>s){let b=m.index;m.index=m.index+h,g.set(b,m.index)}return!0}),this.hasPython&&this.walk(m=>(m instanceof Jo&&m.update(g),!0));let p=c.first,f=c.children.slice();return a&&f.unshift(new yt(a)),l&&f.push(new yt(l)),this.replace(i,f),p}async update(t,i,r){this.resetMarker(i,r),this.hasPython&&await this.updatePythonCodes(t,i)}deleteText(t,i){let r=0,o,s=t+i,a=0;if(this.walk(g=>{let p=g.len();return g instanceof yt&&t>=r&&r+p>=s?(o=g,a=t-r,!1):(r+=p,!0)}),!o)return!1;let l=o.parent,u=o.value,c=u.slice(0,a)+u.slice(a+i),h=l.children.slice(),d=h.indexOf(o);return h.splice(d,1,new yt(c)),l.replaceChildren(h),!0}resetMarker(t,i){let r;t instanceof ct?r=this.placeholders.filter(o=>o.index==t.index):r=this.variables.filter(o=>o.name==t.name);for(let o of r){let s=o.transform?o.transform.resolve(i):i;o.setOnlyChild(new yt(s||""))}this.synchronizeParents(r),this.reset()}onPlaceholderUpdate(t){let i=t.toString(),r;t instanceof ct?(this.values[t.index]=i,r=this.placeholders.filter(o=>o.index==t.index)):r=this.variables.filter(o=>o.name==t.name);for(let o of r){if(o===t)continue;let s=o.transform?o.transform.resolve(i):i;o.setOnlyChild(new yt(s||""))}this.synchronizeParents(r)}synchronizeParents(t){let i=[];t.forEach(r=>{let o=r.parent;o instanceof ct&&!i.includes(o)&&i.push(o)}),i.forEach(r=>{this.onPlaceholderUpdate(r)})}offset(t){let i=0,r=!1;return this.walk(o=>o===t?(r=!0,!1):(i+=o.len(),!0)),r?i:-1}fullLen(t){let i=0;return Iee([t],r=>(i+=r.len(),!0)),i}getTextBefore(t,i){let r="",o=s=>{let a=s.parent;if(!a)return;let l="";for(let u of a.children){if(u===s)break;l=l+u.toString()}r=l+r,a!=i&&o(a)};return o(t),r}enclosingPlaceholders(t){let i=[],{parent:r}=t;for(;r;)r instanceof ct&&i.push(r),r=r.parent;return i}async resolveVariables(t){let i=[];this.walk(r=>(r instanceof mo&&!r.resolved&&i.push(r),!0)),i.length&&(await Promise.all(i.map(r=>r.resolve(t))),this.synchronizeParents(i))}appendChild(t){return this.reset(),super.appendChild(t)}replace(t,i){t.replaceChildren(i),(t instanceof ct||t instanceof mo)&&this.onPlaceholderUpdate(t),this.reset()}reset(){this._placeholders=void 0,this._values=void 0}toTextmateString(){return this.children.reduce((t,i)=>t+i.toTextmateString(),"")}clone(){let t=new vd(this.ultisnip);return t._children=this.children.map(i=>i.clone()),t}walk(t){Iee(this.children,t)}},As=class{constructor(e,t){this.ultisnip=e;this.matchCode=t;this._scanner=new vD}static escape(e){return e.replace(/\$|}|\\/g,"\\$&")}static isPlainText(e){let t=new As().parse(e.replace(/\$0$/,""),!1);return t.children.length==1&&t.children[0]instanceof yt}text(e){return this.parse(e,!1).toString()}parse(e,t){this._scanner.text(e),this._token=this._scanner.next();let i=new vd(this.ultisnip);for(;this._parse(i););let r=new Map,o=[],s=[],a=!1;i.walk(c=>(c instanceof ct&&(c.index==0&&(a=!0),c.children.some(h=>h instanceof ct)?s.push(c):!r.has(c.index)&&c.children.length>0?(c.primary=!0,r.set(c.index,c.toString())):o.push(c)),!0));let l=s.map(c=>c.index);for(let c of o)if(r.has(c.index)){let h=r.get(c.index),d=new yt(c.transform?c.transform.resolve(h):h);c.setOnlyChild(d)}else if(!l.includes(c.index))if(c.transform){let h=new yt(c.transform.resolve(""));c.setOnlyChild(h)}else c.primary=!0,r.set(c.index,"");let u=()=>{let c=new Set;for(let h of s)if(h.children.every(d=>!(d instanceof ct)||r.has(d.index))){let d=h.toString();r.set(h.index,d);for(let g of o.filter(p=>p.index==h.index)){let p=new yt(g.transform?g.transform.resolve(d):d);g.setOnlyChild(p)}c.add(h.index)}s=s.filter(h=>!c.has(h.index)),!(s.length==0||!c.size)&&u()};return u(),!a&&t&&i.appendChild(new ct(0)),i}_accept(e,t){if(e===void 0||this._token.type===e){let i=t?this._scanner.tokenText(this._token):!0;return this._token=this._scanner.next(),i}return!1}_backTo(e){return this._scanner.pos=e.pos+e.len,this._token=e,!1}_until(e,t=!1){if(this._token.type===14)return!1;let i=this._token,r;for(;this._token.type!==e||t&&(r==null?void 0:r.type)===5;)if(t&&(r=this._token),this._token=this._scanner.next(),this._token.type===14)return!1;let o=this._scanner.value.substring(i.pos,this._token.pos);return this._token=this._scanner.next(),o}_parse(e){return this._parseEscaped(e)||this._parseCodeBlock(e)||this._parseTabstopOrVariableName(e)||this._parseComplexPlaceholder(e)||this._parseComplexVariable(e)||this._parseAnything(e)}_parseEscaped(e){let t;return(t=this._accept(5,!0))?(t=this._accept(0,!0)||this._accept(4,!0)||this._accept(5,!0)||this.ultisnip&&this._accept(3,!0)||this.ultisnip&&this._accept(17,!0)||t,e.appendChild(new yt(t)),!0):!1}_parseTabstopOrVariableName(e){let t,i=this._token;return this._accept(0)&&(t=this._accept(9,!0)||this._accept(8,!0))?(/^\d+$/.test(t)?e.appendChild(new ct(Number(t))):this.ultisnip&&!Lee.includes(t)?e.appendChild(new yt("${"+t+"}")):e.appendChild(new mo(t)),!0):this._backTo(i)}_parseComplexPlaceholder(e){let t,i=this._token;if(!(this._accept(0)&&this._accept(3)&&(t=this._accept(8,!0))))return this._backTo(i);let o=new ct(Number(t));if(this._accept(1))for(;;){if(this._accept(4))return e.appendChild(o),!0;if(!this._parse(o))return e.appendChild(new yt("${"+t+":")),o.children.forEach(e.appendChild,e),!0}else if(o.index>0&&this._accept(7)){let s=new bd;for(;;){if(this._parseChoiceElement(s)){if(this._accept(2))continue;if(this._accept(7)&&(o.appendChild(s),this._accept(4)))return e.appendChild(o),!0}return this._backTo(i),!1}}else return this._accept(6)?this._parseTransform(o)?(e.appendChild(o),!0):(this._backTo(i),!1):this._accept(4)?(e.appendChild(o),!0):this._backTo(i)}_parseChoiceElement(e){let t=this._token,i=[];for(;!(this._token.type===2||this._token.type===7);){let r;if((r=this._accept(5,!0))?r=this._accept(2,!0)||this._accept(7,!0)||this._accept(5,!0)||r:r=this._accept(void 0,!0),!r)return this._backTo(t),!1;i.push(r)}return i.length===0?(this._backTo(t),!1):(e.appendChild(new yt(i.join(""))),!0)}_parseComplexVariable(e){let t,i=this._token;if(!(this._accept(0)&&this._accept(3)&&(t=this._accept(9,!0))))return this._backTo(i);if(this.ultisnip&&!Lee.includes(t))return this._backTo(i);let o=new mo(t);if(this._accept(1))for(;;){if(this._accept(4))return e.appendChild(o),!0;if(!this._parse(o))return e.appendChild(new yt("${"+t+":")),o.children.forEach(e.appendChild,e),!0}else return this._accept(6)?this._parseTransform(o)?(e.appendChild(o),!0):(this._backTo(i),!1):this._accept(4)?(e.appendChild(o),!0):this._backTo(i)}_parseTransform(e){let t=new lb;t.ultisnip=this.ultisnip===!0;let i="",r="";for(;!this._accept(6);){let s;if(s=this._accept(5,!0)){s=this._accept(6,!0)||s,i+=s;continue}if(this._token.type!==14){i+=this._accept(void 0,!0);continue}return!1}for(;!this._accept(6);){let s;if(s=this._accept(5,!0)){s=this._accept(6,!0)||s,t.appendChild(new yt(s));continue}if(!(this._parseFormatString(t)||this._parseConditionString(t)||this._parseAnything(t)))return!1}let o=!1;for(;!this._accept(4);){if(this._token.type!==14){let s=this._accept(void 0,!0);s=="a"?o=!0:(MTe.includes(s)||jTe.error(`Unknown regex option: ${s}`),r+=s);continue}return!1}try{o&&(t.ascii=!0),this.ultisnip&&(i=_ee(i)),t.regexp=new RegExp(i,r)}catch{return!1}return e.transform=t,!0}_parseConditionString(e){if(!this.ultisnip)return!1;let t=this._token;if(!this._accept(15))return!1;if(!this._accept(13))return this._backTo(t),!1;let i=this._accept(8,!0);if(!i)return this._backTo(t),!1;if(!this._accept(1))return this._backTo(t),!1;let r=this._until(16,!0);if(r){let o=0;for(;o!/^\s*$/.test(u));let a=s[0]?s[0].match(/^\s*/)[0]:"";a.length&&s.every(u=>u.startsWith(a))&&(s=s.map(u=>u.slice(a.length))),a==" "&&s[0].startsWith(a)&&(s[0]=s[0].slice(1));let l=new Jo(o+s.join(` -`),"python");e.appendChild(l)}return!0}}return this._backTo(t),!1}_parseAnything(e){if(this._token.type!==14){let t=this._scanner.tokenText(this._token);return e.appendChild(new yt(t)),this._accept(void 0),!0}return!1}},OTe=[":","(",")","{","}"]});function DF(n,e){let{range:t,newText:i}=n,r=e.length,o=i.length;if(r===0||o===0)return n;let{start:s,end:a}=t,l=0;for(let d=1;d<=Math.min(o,r)&&i[d-1]===e[d-1];d++)l=d;let u=0,c=Math.min(o-l,r-l);if(c>0)for(let d=1;d<=c&&i[o-d]===e[r-d];d++)u=d;let h=u==0?i.slice(l):i.slice(l,-u);return l>0&&(s=Ki(s,i.slice(0,l))),u>0&&(a=Ki(t.start,e.slice(0,-u))),rn.TextEdit.replace(rn.Range.create(s,a),h)}function jee(n,e,t){let i=rn.Range.create(n,Ki(n,t));return ft(e,i)==0}function Mee(n,e,t){if(t.lines.length=0;o--){let s=t.lines[o]??"";if(o===n.line){let a=e.lines[o].slice(0,n.character);if(!s.startsWith(a)){r=!1;break}}else if(s!==e.lines[o]){r=!1;break}}return r}function Oee(n,e,t){let i=e.lines.length;if(t.lines.length{let l=s.match(/^\s*/)[0],u=l,c=l.startsWith(" ");return c&&t.insertSpaces?u=r.repeat(l.length):!c&&!t.insertSpaces&&(u=r.repeat(l.length/o)),(a==0||s.length==0?"":e)+u+s.slice(l.length)}),i.join(` -`)}function Hee(n){return!!(/^\s/.test(n)||n.indexOf(` -`)!==-1)}var rn,Vtt,ub,TF=k(()=>{"use strict";rn=S(W());ph();xt();so();SF();xD();Vtt=q()("snippets-snipet"),ub=class{constructor(e,t,i,r){this.snippetString=e;this.position=t;this.nvim=i;this.resolver=r}async init(e,t=!1){let i=e?yD(e):void 0,o=new As(!!e,i).parse(this.snippetString,!0);this.tmSnippet=o,await this.resolve(e),this.synchronize(),t||(this.nvim.call("coc#compat#del_var",["coc_selected_text"],!0),this.nvim.call("coc#compat#del_var",["coc_last_placeholder"],!0))}async resolve(e){let{snippet:t}=this.tmSnippet,{resolver:i,nvim:r}=this;if(i&&await t.resolveVariables(i),e&&e.noPython!==!0){let o=[];t.hasPython&&(o=Ree(e)),await t.evalCodeBlocks(r,o)}}getRanges(e){let t=e.marker;if(e.value.length==0)return[];let r=this._placeholders.filter(l=>l.index==e.index).map(l=>l.range),o=this.tmSnippet.enclosingPlaceholders(t),s,a=t.parent;if(t instanceof ct){let l=t.index;s=this.tmSnippet.placeholders.filter(u=>u.index==l&&u.parent==a)}else{let l=t.name;s=this.tmSnippet.variables.filter(u=>u.name==l&&u.parent==a)}return o.forEach(l=>{let u=this._placeholders.filter(c=>c.index==l.index&&c.marker!==l);if(!!u.length)for(let c of s){let h=this.tmSnippet.getTextBefore(c,l);u.forEach(d=>{if(d.transform)r.push(d.range);else{let g=d.range.start;r.push(rn.Range.create(Ki(g,h),Ki(g,h+c.toString())))}})}}),r.filter(l=>!Lt(l))}getSortedPlaceholders(e){let t=e?[e]:[],i=this._placeholders.filter(r=>r!==e&&!r.transform);return i.sort((r,o)=>r.primary!==o.primary?r.primary?-1:1:r.index==0||o.index==0?r.index==0?1:-1:r.index-o.index),t.push(...i),t}get hasPython(){return this.tmSnippet.pyBlocks.length>0}resetStartPosition(e){this.position=e,this.synchronize()}get start(){return Object.assign({},this.position)}get range(){return rn.Range.create(this.position,Ki(this.position,this._text))}get text(){return this._text}get finalCount(){return this._placeholders.filter(e=>e.index==0).length}get placeholders(){return this._placeholders.map(e=>e.marker)}get firstPlaceholder(){let e=0;for(let t of this._placeholders)t.index==0||t.transform||(e==0||t.indext.marker===e)}getPlaceholder(e){let t=this._placeholders.filter(r=>r.index==e&&!r.transform);return(t.find(r=>r.primary)||t[0])??t[0]}getPrevPlaceholder(e){if(e<=1)return;let t=this._placeholders.filter(r=>r.index1;){e=e-1;let r=t.filter(o=>o.index==e);if(r.length){i=r.find(o=>o.primary)||r[0];break}}return i}getNextPlaceholder(e){let t=this._placeholders.filter(s=>!s.transform),i,r=t.map(s=>s.index),o=Math.max.apply(null,r);for(let s=e+1;s<=o+1;s++){let a=s==o+1?0:s,l=t.filter(u=>u.index==a);if(l.length){i=l.find(u=>u.primary)||l[0];break}}return i}getPlaceholderByRange(e){return this._placeholders.find(t=>Xt(e,t.range))}async insertSnippet(e,t,i,r){if(r){let{start:s,end:a}=e.range;this.nvim.setVar("coc_last_placeholder",{current_text:e.value,start:{line:s.line,col:s.character,character:s.character},end:{line:a.line,col:a.character,character:a.character}},!0)}let o=this.tmSnippet.insertSnippet(t,e.marker,i,r);return await this.resolve(r),this.synchronize(),o}getNewText(e,t){let{before:i,after:r}=e;if(!!t.startsWith(i)&&!(t.length{this.tmSnippet=l,this.synchronize()});let u=rn.Range.create(o,Ki(o,a));if(await this.tmSnippet.update(this.nvim,s,i),r.isCancellationRequested)return;this.synchronize();let c=this._placeholders.find(d=>d.marker==s),h=c?c.before:a;return{text:this._text,delta:lx(t,rn.TextEdit.replace(u,h))}}removeText(e,t){let i=this.tmSnippet.deleteText(e,t);return i&&this.synchronize(),i}synchronize(){let e=this.tmSnippet,{line:t,character:i}=this.position,r=Vn.create("untitled:/1","snippet",0,e.toString()),{placeholders:o,variables:s,maxIndexNumber:a}=e,l=new Map,u=a+1;this._placeholders=[...o,...s].map(c=>{let h=e.offset(c),d=r.positionAt(h),g={line:t+d.line,character:d.line==0?i+d.character:d.character},p;if(c instanceof mo){let w=c.name;l.has(w)?p=l.get(w):(l.set(w,u),p=u,u=u+1)}else p=c.index;let f=c.toString(),m=Ki(d,f);return{index:p,value:f,marker:c,transform:!!c.transform,range:rn.Range.create(g,Ki(g,f)),before:r.getText(rn.Range.create(rn.Position.create(0,0),d)),after:r.getText(rn.Range.create(m,rn.Position.create(r.lineCount,0))),primary:c instanceof ct&&c.primary===!0}}),this._text=this.tmSnippet.toString()}}});function cb(n){return n<10?"0"+n:n.toString()}function qee(n){let e,t,i,r=n.split(",");for(let o of r){if(e&&t&&i)break;if(!o.includes(":"))continue;let[s,a]=o.split(":");s.includes("s")?e=a:s.includes("e")?t=a:!i&&s==""&&(i=a)}return{start:e,end:t,single:i}}function HTe(n){if(n.endsWith("%s"))return n.slice(0,-2).trim()}var hb,rit,db,Bee=k(()=>{"use strict";hb=S(require("path"));qe();Pe();et();rit=q()("snippets-variable");db=class{constructor(e,t){this.nvim=e;this.workspaceFolder=t;this._variableToValue={};let i=new Date,r=i.getFullYear().toString();Object.assign(this._variableToValue,{CURRENT_YEAR:r,CURRENT_YEAR_SHORT:r.slice(-2),CURRENT_MONTH:cb(i.getMonth()+1),CURRENT_DATE:cb(i.getDate()),CURRENT_HOUR:cb(i.getHours()),CURRENT_MINUTE:cb(i.getMinutes()),CURRENT_SECOND:cb(i.getSeconds()),CURRENT_DAY_NAME:i.toLocaleString("en-US",{weekday:"long"}),CURRENT_DAY_NAME_SHORT:i.toLocaleString("en-US",{weekday:"short"}),CURRENT_MONTH_NAME:i.toLocaleString("en-US",{month:"long"}),CURRENT_MONTH_NAME_SHORT:i.toLocaleString("en-US",{month:"short"}),TM_FILENAME:null,TM_FILENAME_BASE:null,TM_DIRECTORY:null,TM_FILEPATH:null,YANK:null,TM_LINE_INDEX:null,TM_LINE_NUMBER:null,TM_CURRENT_LINE:null,TM_CURRENT_WORD:null,TM_SELECTED_TEXT:null,VISUAL:null,CLIPBOARD:null,RELATIVE_FILEPATH:null,RANDOM:null,RANDOM_HEX:null,UUID:null,BLOCK_COMMENT_START:null,BLOCK_COMMENT_END:null,LINE_COMMENT:null,WORKSPACE_NAME:null,WORKSPACE_FOLDER:null})}async resolveValue(e){let{nvim:t}=this;if(["TM_FILENAME","TM_FILENAME_BASE","TM_DIRECTORY","TM_FILEPATH"].includes(e)){let i=await t.eval('expand("%:p")');if(e==="TM_FILENAME")return hb.default.basename(i);if(e==="TM_FILENAME_BASE")return hb.default.basename(i,hb.default.extname(i));if(e==="TM_DIRECTORY")return hb.default.dirname(i);if(e==="TM_FILEPATH")return i}if(e==="YANK")return await t.call("getreg",['""']);if(e==="TM_LINE_INDEX")return(await t.call("line",["."])-1).toString();if(e==="TM_LINE_NUMBER")return(await t.call("line",["."])).toString();if(e==="TM_CURRENT_LINE")return await t.call("getline",["."]);if(e==="TM_CURRENT_WORD")return await t.eval("expand('')");if(e==="TM_SELECTED_TEXT"||e=="VISUAL")return await t.eval("get(g:,'coc_selected_text', v:null)");if(e==="CLIPBOARD")return await t.eval("@*");if(e==="RANDOM")return Math.random().toString().slice(-6);if(e==="RANDOM_HEX")return Math.random().toString(16).slice(-6);if(e==="UUID")return oe();if(["RELATIVE_FILEPATH","WORKSPACE_NAME","WORKSPACE_FOLDER"].includes(e)){let i=await t.eval('expand("%:p")'),r=this.workspaceFolder.getWorkspaceFolder(j.file(i));if(e==="RELATIVE_FILEPATH")return this.workspaceFolder.getRelativePath(i);if(e==="WORKSPACE_NAME")return r.name;if(e==="WORKSPACE_FOLDER")return j.parse(r.uri).fsPath}if(e==="LINE_COMMENT"){let i=await t.eval("&commentstring"),r=HTe(i);if(r)return r;let o=await t.eval("&comments"),{single:s}=qee(o);return s??""}if(["BLOCK_COMMENT_START","BLOCK_COMMENT_END"].includes(e)){let i=await t.eval("&comments"),{start:r,end:o}=qee(i);if(e==="BLOCK_COMMENT_START")return r??"";if(e==="BLOCK_COMMENT_END")return o??""}}async resolve(e){let t=e.name,i=this._variableToValue[t];if(i!=null)return i.toString();if(Qr(this._variableToValue,t)){let r=await this.resolveValue(t);return!r&&e.children.length?e.toString():r==null?"":r.toString()}return e.children.length?e.toString():t}}});var fi,Ns,kF,gb,Wee=k(()=>{"use strict";fi=S(W());ds();et();xt();_e();xe();ie();xD();TF();Bee();Ns=q()("snippets-session"),kF="snippets",gb=class{constructor(e,t,i){this.nvim=e;this.document=t;this.config=i;this.mutex=new Di;this._applying=!1;this._isActive=!1;this._snippet=null;this._onCancelEvent=new fi.Emitter;this.onCancel=this._onCancelEvent.event;this.disposable=t.onDocumentChange(async r=>{if(this._applying||!this._isActive)return;let o=r.contentChanges;o.length!==0&&await this.synchronize({version:r.textDocument.version,change:o[0]})})}async start(e,t,i=!0,r){var l;let{document:o}=this,s=this.getReplacePlaceholder(t),a=[];if(s){let u=this.snippet.range,c=o.textDocument.getText(u),h=Aee(s.value,s.range,t);this.current=await this.snippet.insertSnippet(s,e,h,r);let d=DF({range:u,newText:this.snippet.text},c);a.push(d)}else{let u=new db(this.nvim,v.workspaceFolderControl),c=new ub(e,t.start,this.nvim,u);if(await c.init(r),this._snippet=c,this.current=(l=c.firstPlaceholder)==null?void 0:l.marker,a.push(fi.TextEdit.replace(t,c.text)),e.replace(/\$0$/,"").endsWith(` -`)){let h=o.getline(t.start.line),d=h.slice(t.end.character);if(d.length){let g=t.end.character,p=d.match(/^\s*/)[0].length,f=fi.Range.create(t.end.line,g,t.end.line,g+p);a.push(fi.TextEdit.replace(f,h.match(/^\s*/)[0]))}}}if(await this.applyEdits(a),this.textDocument=o.textDocument,this.activate(),i&&this.current){let u=this.snippet.getPlaceholderByMarker(this.current);await this.selectPlaceholder(u,!0)}return this._isActive}async applyEdits(e){this._applying=!0,await this.document.applyEdits(e),this._applying=!1}getReplacePlaceholder(e){if(!this.snippet)return;let t=this.findPlaceholder(e);if(!(!t||t.index==0))return t}activate(){this._isActive||(this._isActive=!0,this.nvim.call("coc#snippet#enable",[this.config.preferComplete?1:0],!0))}deactivate(){this.cancel(),this._isActive&&(this.disposable.dispose(),this._isActive=!1,this.current=null,this.nvim.call("coc#snippet#disable",[],!0),this.config.highlight&&this.nvim.call("coc#highlight#clear_highlight",[this.bufnr,kF,0,-1],!0),this._onCancelEvent.fire(void 0),Ns.debug(`session ${this.bufnr} cancelled`))}get isActive(){return this._isActive}get bufnr(){return this.document.bufnr}async nextPlaceholder(){await this.forceSynchronize();let e=this.placeholder;if(!e)return;let t=this.snippet.getNextPlaceholder(e.index);t&&await this.selectPlaceholder(t)}async previousPlaceholder(){await this.forceSynchronize();let e=this.placeholder;if(!e)return;let t=this.snippet.getPrevPlaceholder(e.index);t&&await this.selectPlaceholder(t)}async selectCurrentPlaceholder(e=!0){if(await this.forceSynchronize(),!this.snippet)return;let t=this.snippet.getPlaceholderByMarker(this.current);t&&await this.selectPlaceholder(t,e)}async selectPlaceholder(e,t=!0){let{nvim:i,document:r,config:o}=this;if(!r||!e)return;let{start:s,end:a}=e.range,l=a.character-s.character,u=Q(r.getline(s.line).slice(0,s.character))+1,c=this.current=e.marker;if(c instanceof ct&&c.choice&&c.choice.options.length){let h=c.choice.options.map(d=>d.value);if(o.choicesMenuPicker){await i.call("coc#snippet#cursor",[s.line+1,u+l]);let d=await D.showMenuPicker(h,{title:"Pick word"});if(d<0)return;let g=fi.TextEdit.replace(e.range,h[d]);await r.applyEdits([g],!1,fi.Position.create(a.line,a.character))}else await i.call("coc#snippet#show_choices",[s.line+1,u,l,h]);t&&i.call("coc#util#do_autocmd",["CocJumpPlaceholder"],!0)}else{let h=this.snippet.finalCount;await this.select(e,t),this.highlights(e),e.index==0&&(h==1?(Ns.info("Jump to final placeholder, cancelling snippet session"),this.deactivate()):i.call("coc#snippet#disable",[],!0))}}highlights(e,t=!0){if(!this.config.highlight)return;let i=this.document.buffer;this.nvim.pauseNotification(),i.clearNamespace(kF);let r=this.snippet.getRanges(e);r.length&&i.highlightRanges(kF,"CocSnippetVisual",r),this.nvim.resumeNotification(t,!0)}async select(e,t=!0){let{range:i,value:r}=e,{nvim:o}=this;r.length>0?await o.call("coc#snippet#select",[i.start,i.end,r]):await o.call("coc#snippet#move",[i.start]),t&&o.call("coc#util#do_autocmd",["CocJumpPlaceholder"],!0),o.redrawVim()}async checkPosition(){if(!this.isActive)return;let e=await D.getCursorPosition();this.snippet&&ft(e,this.snippet.range)!=0&&(Ns.info("Cursor insert out of range, cancelling snippet session"),this.deactivate())}findPlaceholder(e){let{placeholder:t}=this;return t&&Xt(e,t.range)?t:this.snippet.getPlaceholderByRange(e)||null}async synchronize(e){await this.mutex.use(()=>{let t=this.textDocument?this.textDocument.version:-1;return e&&(this.document.version!=e.version||e.version-t!==1)&&(e=void 0),this._synchronize(e?e.change:void 0)})}async _synchronize(e){let{document:t,textDocument:i}=this;if(!t.attached||!this._isActive)return;let r=Date.now(),o=t.textDocument;if(o.version==i.version||ye(i.lines,o.lines))return;let{range:s,text:a}=this.snippet;e&&!Xt(e.range,s)&&(e=void 0);let l=Oee(s.end,i,o);if(!l){Ns.info("Content change after snippet, cancel snippet session"),this.deactivate();return}if(!Mee(s.start,i,o)){let b=o.getText(fi.Range.create(fi.Position.create(0,0),l));if(b.endsWith(a)){let w=o.positionAt(b.length-a.length);this.snippet.resetStartPosition(w),this.textDocument=o,Ns.info("Content change before snippet, reset snippet position");return}Ns.info("Before and snippet body changed, cancel snippet session"),this.deactivate();return}let c=this.tokenSource=new fi.CancellationTokenSource,h=await D.getCursorPosition();if(c.token.isCancellationRequested||t.hasChanged)return;let d,g,p=o.getText(fi.Range.create(s.start,l)),f=this.placeholder;if(e){for(let b of this.snippet.getSortedPlaceholders(f))if(Xt(e.range,b.range)){d=b,g=this.snippet.getNewText(b,p);break}if(!d&&e.text.length==0&&!Lt(e.range)&&nY(e.range)){let b=e.range.end.character-e.range.start.character,w=o.getText(fi.Range.create(s.start,e.range.start)).length;if(this.snippet.removeText(w,b)){this.textDocument=o;return}}}else for(let b of this.snippet.getSortedPlaceholders(f))if(!(Me(h,b.range.start)<0)&&(g=this.snippet.getNewText(b,p),g!=null&&jee(b.range.start,h,g))){d=b;break}if(!d&&p.endsWith(a)){let b=Ki(s.start,p.slice(0,-a.length));this.snippet.resetStartPosition(b),this.textDocument=o,Ns.info("Content change before snippet, reset snippet position");return}if(!d){Ns.info("Unable to find changed placeholder, cancel snippet session"),this.deactivate();return}let m=await this.snippet.updatePlaceholder(d,h,g,c.token);if(!(m==null||c.token.isCancellationRequested)){if(t.hasChanged){c.cancel(),c.dispose();return}if(c.dispose(),this.current=d.marker,m.text!==p){let b=DF({range:fi.Range.create(this.snippet.start,l),newText:m.text},p);await this.applyEdits([b]);let{delta:w}=m;(w.line!=0||w.character!=0)&&this.nvim.call("coc#cursor#move_to",[h.line+w.line,h.character+w.character],!0),this.highlights(d,!1),this.nvim.redrawVim()}else this.highlights(d);if(Ns.debug("update cost:",Date.now()-r,m.delta),this.textDocument=this.document.textDocument,this.config.nextOnDelete&&f&&f.value.length>0&&d.marker.toString()===""){let b=this.snippet.getNextPlaceholder(d.index);b&&await this.selectPlaceholder(b)}}}async waitSynchronize(){(await this.mutex.acquire())()}async forceSynchronize(){var t;await this.document.patchChange(),(await this.mutex.acquire())(),this.document.version!==((t=this.textDocument)==null?void 0:t.version)&&await this.synchronize()}cancel(){this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource.dispose(),this.tokenSource=null)}get placeholder(){if(!(!this.snippet||!this.current))return this.snippet.getPlaceholderByMarker(this.current)}get snippet(){return this._snippet}static async resolveSnippet(e,t,i){let r=i&&fi.Range.is(i.range)?i.range.start:await D.getCursorPosition(),o=i&&typeof i.line=="string"?i.line:await e.line,s;i&&(s=Object.assign({range:fi.Range.create(r,r),line:o},i));let a=new db(e,v.workspaceFolderControl),l=new ub(t,r,e,a);return await l.init(s,!0),l.text}}});var Mr,PF=k(()=>{"use strict";Mr=class{constructor(e){this._tabstop=1;this.value=e||""}static isSnippetString(e){return e instanceof Mr?!0:e?typeof e.value=="string":!1}static _escape(e){return e.replace(/\$|}|\\/g,"\\$&")}appendText(e){return this.value+=Mr._escape(e),this}appendTabstop(e=this._tabstop++){return this.value+="$",this.value+=e,this}appendPlaceholder(e,t=this._tabstop++){if(typeof e=="function"){let i=new Mr;i._tabstop=this._tabstop,e(i),this._tabstop=i._tabstop,e=i.value}else e=Mr._escape(e);return this.value+="${",this.value+=t,this.value+=":",this.value+=e,this.value+="}",this}appendChoice(e,t=this._tabstop++){let i=e.map(r=>r.replace(/\$|}|\\|,/g,"\\$&")).join(",");return this.value+="${",this.value+=t,this.value+="|",this.value+=i,this.value+="|}",this}appendVariable(e,t){if(typeof t=="function"){let i=new Mr;i._tabstop=this._tabstop,t(i),this._tabstop=i._tabstop,t=i.value}else typeof t=="string"&&(t=t.replace(/\$|}/g,"\\$&"));return this.value+="${",this.value+=e,t&&(this.value+=":",this.value+=t),this.value+="}",this}}});var Wu,Iit,EF,ai,Yu=k(()=>{"use strict";Wu=S(W());fe();et();xt();xe();ie();Wee();TF();PF();Iit=q()("snippets-manager"),EF=class{constructor(){this.sessionMap=new Map;this.disposables=[]}get nvim(){return v.nvim}init(){P.on("InsertCharPre",(t,i)=>{let r=this.getSession(i);r&&r.cancel()},null,this.disposables),D.onDidChangeActiveTextEditor(t=>{if(!this.statusItem)return;this.getSession(t.document.bufnr)?this.statusItem.show():this.statusItem.hide()},null,this.disposables),P.on("InsertEnter",async t=>{let i=this.getSession(t);i&&await i.checkPosition()},null,this.disposables),v.onDidCloseTextDocument(t=>{let i=this.getSession(t.bufnr);i&&i.deactivate()},null,this.disposables),this.statusItem||(this.statusItem=D.createStatusBarItem(0));let e=v.getConfiguration("snippet");this.statusItem.text=e.get("statusText","")}getSnippetConfig(e){let t=v.getConfiguration("coc.preferences",e),i=v.getConfiguration("snippet",e),r=v.getConfiguration("suggest",e);return{highlight:t.get("snippetHighlight",i.get("highlight",!1)),nextOnDelete:t.get("nextPlaceholderOnDelete",i.get("nextPlaceholderOnDelete",!1)),preferComplete:r.get("preferCompleteThanJumpPlaceholder",!1),choicesMenuPicker:i.get("choicesMenuPicker",!1)}}async insertSnippet(e,t=!0,i,r,o){let{bufnr:s}=v,a=v.getAttachedDocument(s);if(i&&!Xt(i,Wu.Range.create(0,0,a.lineCount+1,0)))throw new Error("Unable to insert snippet, invalid range.");let l;if(!i){let p=await D.getCursorPosition();i=Wu.Range.create(p,p)}let u=a.getline(i.start.line),c=Mr.isSnippetString(e)?e.value:e,h=await this.normalizeInsertText(a.uri,c,u,r);o!=null&&(l=Object.assign({range:Rn(i),line:u},o),!Lt(i)&&h.includes("`!p")&&(this.nvim.call("coc#cursor#move_to",[i.start.line,i.start.character],!0),await a.applyEdits([{range:i,newText:""}]),i.end=Wu.Position.create(i.start.line,i.start.character)));let d=this.getSession(s);if(d?(await d.forceSynchronize(),d=this.getSession(s)):await a.patchChange(!0),!d){let p=this.getSnippetConfig(a.uri);d=new gb(this.nvim,a,p),d.onCancel(()=>{this.sessionMap.delete(s),this.statusItem.hide()})}let g=await d.start(h,i,t,l);return g?(this.statusItem.show(),this.sessionMap.set(s,d)):(this.statusItem.hide(),this.sessionMap.delete(s)),g}async selectCurrentPlaceholder(e=!0){let{session:t}=this;if(t)return await t.selectCurrentPlaceholder(e)}async nextPlaceholder(){let{session:e}=this;return e?await e.nextPlaceholder():(this.nvim.call("coc#snippet#disable",[],!0),this.statusItem.hide()),""}async previousPlaceholder(){let{session:e}=this;return e?await e.previousPlaceholder():(this.nvim.call("coc#snippet#disable",[],!0),this.statusItem.hide()),""}cancel(){let e=this.getSession(v.bufnr);if(e)return e.deactivate();this.nvim.call("coc#snippet#disable",[],!0),this.statusItem&&this.statusItem.hide()}get session(){return this.getSession(v.bufnr)}getSession(e){return this.sessionMap.get(e)}jumpable(){let{session:e}=this;return e?e.placeholder!=null&&e.placeholder.index!=0:!1}async editsInsideSnippet(e){let t=this.getSession(v.bufnr);if(!t||!t.snippet)return!1;await t.forceSynchronize();let i=t.snippet.range;return!!e.some(r=>rh(r.range,i))}async resolveSnippet(e,t){if(t){let i=this.getSession(v.bufnr);t.noPython=i!=null&&i.snippet.hasPython}return await gb.resolveSnippet(this.nvim,e,t)}async normalizeInsertText(e,t,i,r){let o="";if(r===Wu.InsertTextMode.asIs||!Hee(t))o=t;else{let s=i.match(/^\s*/)[0],a=D.activeTextEditor?D.activeTextEditor.options:await v.getFormatOptions(e);o=Nee(t,s,a)}return o}dispose(){this.cancel();for(let e of this.disposables)e.dispose()}},ai=new EF});var Yee=k(()=>{"use strict";yf()});function qTe(n){return Array.isArray(n)&&n.every(e=>typeof e=="string")}function BTe(n){return typeof n>"u"||qTe(n)}var Zee,wd,Jee=k(()=>{"use strict";Zee=S(W());wd=class{constructor(e){if(this._prevLine=0,this._prevChar=0,this._dataIsSortedAndDeltaEncoded=!0,this._data=[],this._dataLen=0,this._tokenTypeStrToInt=new Map,this._tokenModifierStrToInt=new Map,this._hasLegend=!1,e){this._hasLegend=!0;for(let t=0,i=e.tokenTypes.length;t"u"))return typeof o>"u"&&(o=0),this._pushEncoded(e,t,i,r,o);if(Zee.Range.is(e)&&typeof t=="string"&&BTe(i))return this._push(e,t,i);throw new Error("Illegal argument")}_push(e,t,i){if(!this._hasLegend)throw new Error("Legend must be provided in constructor");if(e.start.line!==e.end.line)throw new Error("`range` cannot span multiple lines");if(!this._tokenTypeStrToInt.has(t))throw new Error("`tokenType` is not in the provided legend");let r=e.start.line,o=e.start.character,s=e.end.character-e.start.character,a=this._tokenTypeStrToInt.get(t),l=0;if(i)for(let u of i){if(!this._tokenModifierStrToInt.has(u))throw new Error("`tokenModifier` is not in the provided legend");let c=this._tokenModifierStrToInt.get(u);l|=1<>>0}this._pushEncoded(r,o,s,a,l)}_pushEncoded(e,t,i,r,o){if(this._dataIsSortedAndDeltaEncoded&&(e0&&(s-=this._prevLine,s===0&&(a-=this._prevChar)),this._data[this._dataLen++]=s,this._data[this._dataLen++]=a,this._data[this._dataLen++]=i,this._data[this._dataLen++]=r,this._data[this._dataLen++]=o,this._prevLine=e,this._prevChar=t}static _sortAndDeltaEncode(e){let t=[],i=e.length/5|0;for(let a=0;a{let u=e[5*a],c=e[5*l];if(u===c){let h=e[5*a+1],d=e[5*l+1];return h-d}return u-c});let r=new Array(e.length),o=0,s=0;for(let a=0;a{"use strict";_e();pb=class{constructor(e=!1){this.addSpace=e;this._label="";this._len=0;this._highlights=[]}append(e,t,i){if(e.length==0)return;let r=this._len>0&&this.addSpace?" ":"",o=this._len+r.length;if(this._label=this._label+r+e,this._len=this._len+Q(e)+r.length,t&&this._highlights.push({hlGroup:t,span:[o,o+Q(e)]}),i)for(let s of i){let a=o+Q(e.slice(0,s.offset)),l=o+Q(e.slice(0,s.offset+s.length));this._highlights.push({hlGroup:s.hlGroup,span:[a,l]})}}appendBuilder(e){let t=this._len>0&&this.addSpace?" ":"",i=this._len+t.length;this._label=this._label+t+e.label,this._len=this._len+Q(e.label)+t.length,this._highlights.push(...e.highlights.map(r=>({hlGroup:r.hlGroup,span:r.span.map(o=>i+o)})))}get label(){return this._label}get highlights(){return this._highlights}}});var Xee=y((fnt,Uee)=>{"use strict";Jt();fe();de();Nx();oR();YC();NI();Ta();HI();Hm();Os();ie();xe();Wo();mD();Yu();PF();Bu();uh();Yo();ds();Pe();var ce=S(W());dn();pF();re();Yee();Jee();$ee();Uee.exports={Uri:j,LineBuilder:pb,NullLogger:Mm,SettingMonitor:iD,LanguageClient:dd,CancellationTokenSource:ce.CancellationTokenSource,ProgressType:ce.ProgressType,RequestType:ce.RequestType,RequestType0:ce.RequestType0,NotificationType:ce.NotificationType,NotificationType0:ce.NotificationType0,Highligher:Hi,Mru:xs,Emitter:ce.Emitter,SnippetString:Mr,BasicList:zt,Mutex:Di,TreeItem:lo,SemanticTokensBuilder:wd,FloatFactory:Kl,RelativePattern:Qa,DocumentDiagnosticReportKind:ce.DocumentDiagnosticReportKind,UniquenessLevel:ce.UniquenessLevel,MonikerKind:ce.MonikerKind,PatternType:Kg,SourceType:Ul,MessageLevel:Sw,ConfigurationTarget:Tw,ServiceStat:Dw,FileType:Qg,State:VS,ClientState:lF,CloseAction:ZS,ErrorAction:JS,TransportKind:nD,MessageTransports:cd,RevealOutputChannelOn:QS,MarkupKind:ce.MarkupKind,DiagnosticTag:ce.DiagnosticTag,DocumentHighlightKind:ce.DocumentHighlightKind,SymbolKind:ce.SymbolKind,SignatureHelpTriggerKind:ce.SignatureHelpTriggerKind,FileChangeType:ce.FileChangeType,CodeActionKind:ce.CodeActionKind,Diagnostic:ce.Diagnostic,DiagnosticSeverity:ce.DiagnosticSeverity,CompletionItemKind:ce.CompletionItemKind,InsertTextFormat:ce.InsertTextFormat,Location:ce.Location,LocationLink:ce.LocationLink,CancellationToken:ce.CancellationToken,Position:ce.Position,Range:ce.Range,TextEdit:ce.TextEdit,Disposable:ce.Disposable,Event:ce.Event,workspace:v,window:D,CodeActionTriggerKind:ce.CodeActionTriggerKind,CompletionTriggerKind:ce.CompletionTriggerKind,snippetManager:ai,events:P,services:yn,commands:ue,sources:St,languages:_,diagnosticManager:Wt,extensions:je,listManager:Bi,TreeItemCollapsibleState:lu,fetch:Dm,download:Pm,ansiparse:pp,disposeAll:U,concurrent:Yg,watchFile:Xc,wait:Nt,runCommand:_o,isRunning:gB,executable:Wl}});function YTe(n){return()=>{throw new Error(`process.${n}() is not allowed in extension sandbox`)}}function ZTe(){let n=e=>e==="coc.nvim"?Xee():this.require(e);return n.resolve=e=>Uo._resolveFilename(e,this),n.main=process.mainModule,n.extensions=Uo._extensions,n.cache=Uo._cache,n}function JTe(n){return function(e,t){let i=ZTe.call(this),r=zee.default.dirname(t),o=e.replace(/^\#\!.*/,""),s=Uo.wrap(o),a=CD.runInContext(s,n,{filename:t}),l=[this.exports,i,this,t,r];return a.apply(this.exports,l)}}function $Te(n,e){let t=new Uo(n);t.paths=Uo._nodeModulePaths(n);let i=CD.createContext({module:t,Buffer,URL:globalThis.URL,console:{debug:(...r)=>{e.debug.apply(e,r)},log:(...r)=>{e.info.apply(e,r)},error:(...r)=>{e.error.apply(e,r)},info:(...r)=>{e.info.apply(e,r)},warn:(...r)=>{e.warn.apply(e,r)}}});UX(i,global),i.Reflect=Reflect,i.require=function(o){let s=Uo.prototype._compile;Uo.prototype._compile=JTe(i);let a=i.module.require(o);return Uo.prototype._compile=s,a},i.process=new process.constructor;for(let r of Object.keys(process))i.process[r]=process[r];return WTe.forEach(r=>{i.process[r]=YTe(r)}),i.process.chdir=()=>{},i.process.umask=r=>{if(typeof r<"u")throw new Error("Cannot use process.umask() to change mask (read-only)");return process.umask()},i}function Qee(n,e,t=!1){if(t||!Gee.default.existsSync(e))return{activate:()=>{},deactivate:null};let i=$Te(e,Kee(`extension:${n}`));delete Uo._cache[require.resolve(e)];let r=i.require(e),o=r&&r.activate||r;return typeof o!="function"?{activate:()=>{},deactivate:null}:{activate:o,deactivate:typeof r.deactivate=="function"?r.deactivate:null}}var Gee,zee,CD,Kee,bnt,Uo,WTe,Vee=k(()=>{"use strict";Gee=S(require("fs")),zee=S(require("path")),CD=S(require("vm"));Cs();Kee=q(),bnt=Kee("util-factoroy"),Uo=require("module"),WTe=["reallyExit","abort","umask","setuid","setgid","setgroups","_fatalException","exit","kill"]});function UTe(n){return n==="daily"?ete:ete*7}function rte(n,e){let t=[];return xd(n,e,t)!=null&&t.length==0}function xd(n,e,t){let i=rl.default.join(n,"package.json");if(!vn.default.existsSync(i)){t.push(`package.json not found in ${n}`);return}let r=gi(i),{name:o,engines:s,main:a}=r;if(a=a??"index.js",a.endsWith(".js")||(a=a+".js"),o||t.push("can't find name in package.json"),(!s||!hi(s))&&t.push(`invalid engines in ${i}`),s&&!s.vscode&&!vn.default.existsSync(rl.default.join(n,a))&&t.push(`main file ${a} not found, you may need to build the project.`),hi(s)){let l=Object.keys(s);if(!l.includes("coc")&&!l.includes("vscode")&&t.push("Engines in package.json doesn't have coc or vscode"),l.includes("coc")){let u=s.coc.replace(/^\^/,">=");tte.default.satisfies(e,u)||t.push(`Please update coc.nvim, ${r.name} requires coc.nvim ${s.coc}`)}}return r}function XTe(n){return/^https?:/.test(n)||!n.includes("@")?n:n.replace(/@[\d.]+$/,"")}function ote(n){try{vn.default.existsSync(n)||vn.default.mkdirSync(n,{recursive:!0}),vn.default.statSync(n).isDirectory()||(nte.info(`Trying to delete ${n}`),vn.default.unlinkSync(n),vn.default.mkdirSync(n,{recursive:!0}));let t=rl.default.join(n,"package.json");vn.default.existsSync(t)||vn.default.writeFileSync(t,'{"dependencies":{}}',"utf8")}catch(e){return console.error(`Unexpected error when check data home ${n}: ${e}`),!1}return!0}async function ste(n){return vn.default.existsSync(n)?(await(0,ite.promisify)(vn.default.readdir)(n)).filter(t=>t.endsWith(".js")):[]}var vn,rl,tte,ite,nte,ete,SD,RF=k(()=>{"use strict";vn=S(require("fs")),rl=S(require("path")),tte=S(of()),ite=require("util");$e();wi();nte=q()("extension-stat"),ete=24*60*60*1e3,SD=class{constructor(e){this.folder=e;this.disabled=new Set;this.locked=new Set;this.extensions=new Set;this.localExtensions=new Map;try{this.migrate()}catch(t){nte.error(`Error on update package.json at ${e}`,t)}}migrate(){let e=gi(this.jsonFile),t=rl.default.join(this.folder,"db.json"),i=!1;if(vn.default.existsSync(t)){let o=gi(t),s=o.extension??{};for(let[a,l]of Object.entries(s))l.disabled&&this.disabled.add(a),l.locked&&this.locked.add(a);e.disabled=Array.from(this.disabled),e.locked=Array.from(this.locked),e.lastUpdate-o.lastUpdate,vn.default.unlinkSync(t),i=!0}else this.disabled=new Set(e.disabled??[]),this.locked=new Set(e.locked??[]);i&&Ca(this.jsonFile,e);let r=Object.keys(e.dependencies??{});this.extensions=new Set(r)}addLocalExtension(e,t){this.localExtensions.set(e,t)}getFolder(e){return this.extensions.has(e)?rl.default.join(this.folder,"node_modules",e):this.localExtensions.get(e)}getExtensionsStat(){let e={};for(let t of this.extensions)this.disabled.has(t)?e[t]=1:this.locked.has(t)?e[t]=2:e[t]=0;return e}hasExtension(e){return this.extensions.has(e)}addExtension(e,t){let i=gi(this.jsonFile);i.dependencies=i.dependencies??{},i.dependencies[e]=t,this.extensions.add(e),Ca(this.jsonFile,i)}removeExtension(e){let t=gi(this.jsonFile);t.disabled&&(t.disabled=t.disabled.filter(i=>i!==e)),t.locked&&(t.locked=t.locked.filter(i=>i!==e)),t.dependencies=t.dependencies??{},delete t.dependencies[e],this.extensions.delete(e),Ca(this.jsonFile,t)}isDisabled(e){return this.disabled.has(e)}get lockedExtensions(){return Array.from(this.locked)}get disabledExtensions(){return Array.from(this.disabled)}get dependencies(){return gi(this.jsonFile).dependencies??{}}setDisable(e,t){t?this.disabled.add(e):this.disabled.delete(e),this.update("disabled",Array.from(this.disabled))}setLocked(e,t){t?this.locked.add(e):this.locked.delete(e),this.update("locked",Array.from(this.disabled))}setLastUpdate(){this.update("lastUpdate",Date.now())}shouldUpdate(e){if(e==="never")return!1;let t=UTe(e),i=gi(this.jsonFile);return i.lastUpdate==null||Date.now()-i.lastUpdate>t}get globalIds(){let e=gi(this.jsonFile);return Object.keys(e.dependencies??{})}filterGlobalExtensions(e){let t=this.disabledExtensions,i=this.dependencies,r=new Map;e.forEach(a=>{let l=XTe(a);r.set(l,a)});let o=[],s=[];for(let[a,l]of Object.entries(i))vn.default.existsSync(rl.default.join(this.folder,"node_modules",a,"package.json"))&&(s.push(a),typeof l=="string"&&/^https?:/.test(l)&&o.push(l));for(let a of r.keys()){if(t.includes(a)||this.extensions.has(a)){r.delete(a);continue}(/^https?:/.test(a)&&o.some(l=>l.startsWith(a))||s.includes(a))&&r.delete(a)}return Array.from(r.values())}update(e,t){let i=gi(this.jsonFile);i[e]=t,Ca(this.jsonFile,i)}get jsonFile(){return rl.default.join(this.folder,"package.json")}}});function ate(n){let e=[];for(let t of n??[]){let i=t.split(":")[0];i&&!e.includes(i)&&e.push(i)}return e}function GTe(n,e){for(let t of e){let i=t.split(":");if(i[0]=="onLanguage"&&(n.languageId==i[1]||n.filetype==i[1]))return!0}return!1}function zTe(n,e){for(let t of e){let i=t.split(":");if(i[0]=="onCommand"&&n==i[1])return!0}return!1}function KTe(n,e){let t=j.parse(n).scheme;for(let i of e){let r=i.split(":");if(r[0]=="onFileSystem"&&t==r[1])return!0}return!1}function lte(n){let{activationEvents:e}=n;return!e||!Array.isArray(e)?[]:e.filter(t=>typeof t=="string"&&t.length>0)}function QTe(n){let e=[];for(let t of n){let i=t.split(":");i[0]=="workspaceContains"&&i[1]&&e.push(i[1])}return e}var ute,wn,DD,cte,fb,TD,hte=k(()=>{"use strict";ute=S(require("fs")),wn=S(require("path")),DD=S(W());Pe();Jt();VR();fe();WK();re();nt();Vee();$e();xe();ie();RF();cte=q(),fb=cte("extensions-manager"),TD=class{constructor(e,t){this.states=e;this.folder=t;this.activated=!1;this.disposables=[];this.extensions=new Map;this._onDidLoadExtension=new DD.Emitter;this._onDidActiveExtension=new DD.Emitter;this._onDidUnloadExtension=new DD.Emitter;this.singleExtensionsRoot=wn.default.join(process.env.COC_VIMCONFIG,"coc-extensions");this.onDidLoadExtension=this._onDidLoadExtension.event;this.onDidActiveExtension=this._onDidActiveExtension.event;this.onDidUnloadExtension=this._onDidUnloadExtension.event;let i=this.memos=new Em(wn.default.resolve(process.env.COC_DATA_HOME,"memos.json")),r=wn.default.resolve(process.env.COC_DATA_HOME,"../memos.json");i.merge(r)}get modulesFolder(){return wn.default.join(this.folder,"node_modules")}activateExtensions(){this.activated=!0,this.attachEvents();let e=Array.from(this.extensions.keys());return Promise.allSettled(e.map(t=>{let{extension:i}=this.extensions.get(t);return this.autoActiavte(t,i)}))}async loadFileExtensions(){let e=this.singleExtensionsRoot,t=await ste(e);await Promise.allSettled(t.map(i=>this.loadExtensionFile(wn.default.join(e,i))))}attachEvents(){v.onDidRuntimePathChange(async e=>{let t=e.filter(r=>r&&rte(r,v.version)),i=D.createOutputChannel("extensions");await Promise.allSettled(t.map(r=>(i.appendLine(`Loading extension from runtimepath: ${r}`),this.loadExtension(r))))},null,this.disposables),v.onDidOpenTextDocument(e=>{let t=v.getDocument(e.bufnr);this.tryActivateExtensions("onLanguage",i=>GTe(t,i)),this.tryActivateExtensions("onFileSystem",i=>KTe(t.uri,i))},null,this.disposables),P.on("Command",async e=>{let t=!1;this.tryActivateExtensions("onCommand",i=>{let r=zTe(e,i);return r&&(t=!0),r}),t&&await Nt(50)},null,this.disposables),v.onDidChangeWorkspaceFolders(e=>{e.added.length>0&&this.tryActivateExtensions("workspaceContains",t=>{let i=QTe(t);return v.checkPatterns(i,e.added)})},null,this.disposables)}async cleanExtensions(){let{globalIds:e}=this.states;return await YE(this.modulesFolder),e.filter(t=>!this.states.isDisabled(t))}tryActivateExtensions(e,t){for(let i of this.extensions.values()){if(i.extension.isActive||!i.events.includes(e))continue;let{extension:o}=i,s=lte(o.packageJSON);Promise.resolve(t(s)).then(a=>{a&&Promise.resolve(o.activate())})}}async checkAutoActivate(e){let t=lte(e);if(t.length===0||t.includes("*"))return!0;let i=[];for(let r of t){let o=r.split(":"),s=o[0];if(s==="onLanguage"){if(v.languageIds.has(o[1])||v.filetypes.has(o[1]))return!0}else if(s==="workspaceContains"&&o[1])i.push(o[1]);else if(s==="onFileSystem"){for(let a of v.documents)if(j.parse(a.uri).scheme==o[1])return!0}}return!!(i.length>0&&await v.checkPatterns(i))}has(e){return this.extensions.has(e)}getExtension(e){return this.extensions.get(e)}get loadedExtensions(){return Array.from(this.extensions.keys())}get all(){return Array.from(this.extensions.values()).map(e=>e.extension)}async activate(e){let t=this.extensions.get(e);if(!t)throw new Error(`Extension ${e} not registered!`);let{extension:i}=t;return i.isActive?!0:(await Promise.resolve(i.activate()),i.isActive===!0)}async deactivate(e){let t=this.extensions.get(e);!t||!t.extension.isActive||await Promise.resolve(t.deactivate())}async loadExtension(e){if(Array.isArray(e))return(await Promise.allSettled(e.map(a=>this.loadExtension(a)))).forEach(a=>{if(a.status==="rejected")throw new Error(`Error on loadExtension ${a.reason}`)}),!0;let t=[],i=xd(e,v.version,t);if(t.length>0)throw new Error(t[0]);let{name:r}=i;if(this.states.isDisabled(r))return!1;await this.unloadExtension(r);let o=!this.states.hasExtension(r);return o&&this.states.addLocalExtension(r,e),await this.registerExtension(e,Object.freeze(i),o?1:0),!0}async unloadExtension(e){this.extensions.get(e)&&(await this.deactivate(e),this.extensions.delete(e),this._onDidUnloadExtension.fire(e))}async reloadExtension(e){let t=this.extensions.get(e);if(!t||t.type==3)throw new Error(`Extension ${e} not registered`);t.type==2?await this.loadExtensionFile(t.filepath):await this.loadExtension(t.directory)}async call(e,t,i){let r=this.extensions.get(e);if(!r)throw new Error(`extension ${e} not registered`);let{extension:o}=r;o.isActive||await this.activate(e);let{exports:s}=o;if(!s||typeof s[t]!="function")throw new Error(`method ${t} not found on extension ${e}`);return await Promise.resolve(s[t].apply(null,i))}getExtensionsInfo(){let e=[];for(let[t,i]of this.extensions.entries()){let{directory:r,filepath:o}=i;e.push({name:t,filepath:o,directory:r})}return e}registContribution(e,t){let{contributes:i}=t;if(i){let{configuration:r,rootPatterns:o,commands:s}=i;if(r&&r.properties){let{properties:a}=r,l={};for(let u of Object.keys(a)){let c=a[u].default;c!=null&&(l[u]=c)}v.configurations.extendsDefaults(l,e)}if(o&&o.length)for(let a of o)v.workspaceFolderControl.addRootPattern(a.filetype,a.patterns);if(s&&s.length)for(let a of s)ue.titles.set(a.command,a.title)}}getExtensionState(e){if(this.states.isDisabled(e))return"disabled";let i=this.getExtension(e);if(!i)return"unknown";let{extension:r}=i;return r.isActive?"activated":"loaded"}async autoActiavte(e,t){try{await this.checkAutoActivate(t.packageJSON)&&await Promise.resolve(t.activate())}catch(i){fb.error(`Error on activate ${e}`,i)}}async loadExtensionFile(e){if(!ute.default.existsSync(e))return;let t=wn.default.basename(e),i=wn.default.basename(e,".js"),r="single-"+i,o=wn.default.dirname(e),s={name:r,main:t,engines:{coc:">=0.0.82"}},a=wn.default.join(o,i+".json"),l=gi(a);for(let u of["activationEvents","contributes"])s[u]=l[u];await this.unloadExtension(r),await this.registerExtension(o,s,2)}registerExtensions(e){for(let t of e)try{let i=t.isLocal?1:0;this.registerExtension(t.root,t.packageJSON,i)}catch(i){fb.error("Error on regist extension: ",i)}}async registerExtension(e,t,i){let r=t.name;if(this.states.isDisabled(r))return;let o=!1,s,a=wn.default.join(e,t.main||"index.js"),l=i===2?a:e,u,c,h=[],d={activate:()=>s||(s=new Promise(async(g,p)=>{fb.debug(`activating extension ${r}`);try{let f=typeof t.engines.coc>"u";c=Qee(r,a,f);let m={subscriptions:h,extensionPath:l,globalState:this.memos.createMemento(`${r}|global`),workspaceState:this.memos.createMemento(`${r}|${v.rootPath}`),asAbsolutePath:w=>wn.default.join(e,w),storagePath:wn.default.join(this.folder,`${r}-data`),logger:cte(r)},b=await Promise.resolve(c.activate(m));o=!0,u=b,this._onDidActiveExtension.fire(d),g(b)}catch(f){fb.error(`Error on active extension ${r}:`,f),p(f)}}),s),id:r,packageJSON:t,extensionPath:l,get isActive(){return o},get exports(){if(!o)throw new Error(`Invalid access to exports, extension "${r}" not activated`);return u}};Object.freeze(d),this.extensions.set(r,{id:r,type:i,isLocal:i==1,extension:d,directory:e,filepath:a,events:ate(t.activationEvents),deactivate:async()=>{if(!!o&&(o=!1,s=void 0,u=void 0,U(h),c&&typeof c.deactivate=="function"))try{await Promise.resolve(c.deactivate()),c=void 0}catch(g){fb.error(`Error on ${r} deactivate: `,g)}}}),this.registContribution(r,t),this._onDidLoadExtension.fire(d),this.activated&&await this.autoActiavte(r,d)}async registerInternalExtension(e,t){let{id:i,packageJSON:r}=e;this.extensions.set(i,{id:i,directory:__dirname,type:3,events:ate(r.activationEvents),extension:e,deactivate:t,isLocal:!0}),this.registContribution(i,r),this._onDidLoadExtension.fire(e),await this.autoActiavte(i,e)}async uninstallExtensions(e){let[t,i]=gw(e,r=>this.states.hasExtension(r));for(let r of t)await this.unloadExtension(r),this.states.removeExtension(r),await YE(wn.default.join(this.modulesFolder,r));i.length>0&&D.showWarningMessage(`Global extensions ${i.join(", ")} not found`),t.length>0&&D.showInformationMessage(`Removed extensions: ${t.join(" ")}`)}async toggleExtension(e){let t=this.getExtensionState(e);if(t=="activated"&&await this.deactivate(e),t!="disabled")this.states.setDisable(e,!0),await this.unloadExtension(e);else if(this.states.setDisable(e,!1),e.startsWith("single-")){let i=wn.default.join(this.singleExtensionsRoot,`${e.replace(/^single-/,"")}.js`);await this.loadExtensionFile(i)}else{let i=this.states.getFolder(e);i?await this.loadExtension(i):D.showWarningMessage(`Extension ${e} not found`)}}async watchExtension(e){let t=this.getExtension(e);if(!t)throw new Error(`extension ${e} not found`);if(e.startsWith("single-"))D.showInformationMessage(`watching ${t.filepath}`),this.disposables.push(Xc(t.filepath,async()=>{await this.loadExtensionFile(t.filepath),D.showInformationMessage(`reloaded ${e}`)},!1));else{let i=v.getWatchmanPath();if(!i)throw new Error("watchman not found");let r=await ys.createClient(i,t.directory);this.disposables.push(r),D.showInformationMessage(`watching ${t.directory}`),await r.subscribe("**/*.js",async()=>{await this.reloadExtension(e),D.showInformationMessage(`reloaded ${e}`)})}}dispose(){U(this.disposables)}}});var dte,gte,$nt,kD,PD,pte=k(()=>{"use strict";dte=S(Pn()),gte=S(W());fe();vR();re();_e();xe();ie();$nt=q()("extension-ui"),kD=class{constructor(e,t){this.isUpdate=e;this.channel=t}start(e){this.channel.appendLine(`${this.isUpdate?"Updating":"Installing"} ${e.join(", ")}`)}addMessage(e,t,i){i||this.channel.appendLine(`${e} - ${t}`)}startProgress(e){this.channel.appendLine(`Start ${this.isUpdate?"update":"install"} ${e}`)}finishProgress(e,t){t?this.channel.appendLine(`${e} ${this.isUpdate?"update":"install"} succeed!`):this.channel.appendLine(`${e} ${this.isUpdate?"update":"install"} failed!`)}},PD=class{constructor(e){this.isUpdate=e;this.statMap=new Map;this.updated=new Set;this.messagesMap=new Map;this.disposables=[];this.names=[];let t=D.createFloatFactory({modes:["n"]});this.disposables.push(t);let i=(0,dte.debounce)(async(r,o)=>{if(r==this.bufnr){let s=this.getMessages(o[0]-1),a=s.length>0?[{content:s.join(` -`),filetype:"txt"}]:[];await t.show(a)}},500);this.disposables.push(gte.Disposable.create(()=>{i.clear()})),P.on("CursorMoved",i,this.disposables),P.on("BufUnload",r=>{r===this.bufnr&&this.dispose()},null,this.disposables)}async start(e){this.statMap.clear(),this.names=e;for(let t of e)this.statMap.set(t,0);await this.show()}addMessage(e,t){let i=this.messagesMap.get(e)||[];this.messagesMap.set(e,i.concat(t.trim().split(/\r?\n/))),(t.startsWith("Updated to")||t.startsWith("Installed extension"))&&this.updated.add(e)}startProgress(e){this.statMap.set(e,2)}finishProgress(e,t){this.statMap.set(e,t?3:1)}get remains(){let e=0;for(let t of this.names){let i=this.statMap.get(t);[3,1].includes(i)||(e=e+1)}return e}getLinesAndHighlights(e){let t=[],i=[];for(let r of this.names){let o=this.statMap.get(r),s="*",a,l=e+t.length;switch(o){case 2:{let d=new Date,g=Math.floor(d.getMilliseconds()/100);s=yR[g],a=void 0;break}case 1:s="\u2717",a="ErrorMsg";break;case 3:s="\u2713",a=this.updated.has(r)?"MoreMsg":"Comment";break}let u=this.messagesMap.get(r)||[],c=`- ${s} `,h=Q(c);a&&i.push({hlGroup:a,lnum:l,colStart:h,colEnd:h+Q(r)}),t.push(`${c}${r} ${u.length?u[u.length-1]:""}`)}return{lines:t,highlights:i}}getMessages(e){let t=this.names[e-2];return this.messagesMap.get(t)??[]}get stopped(){return this.interval==null}draw(){let{remains:e,bufnr:t}=this,{nvim:i}=v;if(!t)return;let r=i.createBuffer(t),o=e==0?`${this.isUpdate?"Update":"Install"} finished`:`Installing, ${e} remaining...`,{lines:s,highlights:a}=this.getLinesAndHighlights(2);i.pauseNotification(),r.setLines([o,"",...s],{start:0,end:-1,strictIndexing:!1},!0),r.updateHighlights("coc-extensions",a,{priority:99}),e==0&&this.interval&&(clearInterval(this.interval),this.interval=null),i.resumeNotification(!0,!0)}highlight(){let{nvim:e}=v;e.call("matchadd",["CocListFgCyan","^\\-\\s\\zs\\*"],!0),e.call("matchadd",["CocListFgGreen","^\\-\\s\\zs\u2713"],!0),e.call("matchadd",["CocListFgRed","^\\-\\s\\zs\u2717"],!0)}async show(){let e=P.requesting===!0,{nvim:t}=v;t.pauseNotification(),t.command(e?"enew":"vs +enew",!0),t.call("bufnr",["%"],!0),t.command("setl buftype=nofile bufhidden=wipe noswapfile nobuflisted wrap undolevels=-1",!0),e||t.command("nnoremap q :q",!0),this.highlight();let i=await t.resumeNotification();this.bufnr=i[0][1],this.interval=setInterval(()=>{this.draw()},100)}dispose(){this.bufnr=void 0,this.messagesMap.clear(),this.statMap.clear(),U(this.disposables),clearInterval(this.interval),this.interval=null}}});var bte={};Go(bte,{Extensions:()=>RD,default:()=>je,toUrl:()=>mte});function mte(n){return nw(n)?n.replace(/\.git(#master|#main)?$/,""):""}var Zu,mb,fte,VTe,_F,eke,ED,RD,je,Wo=k(()=>{"use strict";Zu=S(require("fs")),mb=S(require("path")),fte=S(Bg());Jt();re();nt();jT();wi();xe();ie();BK();hte();RF();pte();VTe=q(),_F=VTe("extensions-index"),eke=process.env.COC_DATA_HOME,ED=mb.default.join(eke,"extensions"),RD=class{constructor(){this.modulesFolder=mb.default.join(ED,"node_modules");this._additionalSchemes={};ote(ED),this.states=new SD(ED),this.manager=new TD(this.states,ED)}async init(){if(process.env.COC_NO_PLUGINS)return;let e=this.globalExtensionStats(),t=await v.nvim.eval('join(globpath(&runtimepath, "", 0, 1), ",")'),i=this.runtimeExtensionStats(t);e=e.concat(i),this.manager.registerExtensions(e),await this.manager.loadFileExtensions(),ue.register({id:"extensions.forceUpdateAll",execute:async()=>{let r=await this.manager.cleanExtensions();_F.info(`Force update extensions: ${r}`),await this.installExtensions(r)}},!1,"remove all global extensions and install them")}activateExtensions(){if(process.env.COC_NO_PLUGINS)return;this.manager.activateExtensions();let e=this.states.filterGlobalExtensions(v.env.globalExtensions);this.installExtensions(e);let t=v.getConfiguration("coc.preferences",null),i=t.get("extensionUpdateCheck","never"),r=t.get("silentAutoupdate",!0);this.states.shouldUpdate(i)&&(this.outputChannel.appendLine("Start auto update..."),this.updateExtensions(r).catch(o=>{this.outputChannel.appendLine(`Error on updateExtensions ${o}`)}))}get onDidLoadExtension(){return this.manager.onDidLoadExtension}get onDidActiveExtension(){return this.manager.onDidActiveExtension}get onDidUnloadExtension(){return this.manager.onDidUnloadExtension}get schemes(){return this._additionalSchemes}get outputChannel(){return D.createOutputChannel("extensions")}get all(){return this.manager.all}has(e){return this.manager.has(e)}getExtension(e){return this.manager.getExtension(e)}addSchemeProperty(e,t,i){this._additionalSchemes[e]=t,v.configurations.extendsDefaults({[e]:t.default},i)}getExtensionState(e){return this.manager.getExtensionState(e)}isActivated(e){let t=this.manager.getExtension(e);return t!=null&&t.extension.isActive}async call(e,t,i){return await this.manager.call(e,t,i)}get npm(){let e=v.getConfiguration("npm",null).get("binPath","npm");e=v.expand(e);for(let t of[e,"yarnpkg","yarn","npm"])if(Wl(t))return fte.default.sync(t);return D.showErrorMessage("Can't find npm or yarn in your $PATH"),null}createInstallerUI(e,t){return t?new kD(e,this.outputChannel):new PD(e)}creteInstaller(e,t){return new $C(this.modulesFolder,e,t)}async installExtensions(e){let{npm:t}=this;if(!t||e.length==0)return;e=Ai(e);let i=this.createInstallerUI(!1,!1);await Promise.resolve(i.start(e)),await Yg(e,async o=>{try{i.startProgress(o);let s=this.creteInstaller(t,o);s.on("message",(u,c)=>{i.addMessage(o,u,c)});let a=await s.install();i.finishProgress(o,!0),this.states.addExtension(a.name,a.url?a.url:`>=${a.version}`),o.match(/@[\d.]+$/)!=null&&this.states.setLocked(a.name,!0),await this.manager.loadExtension(a.folder)}catch(s){i.addMessage(o,s.message),i.finishProgress(o,!1),D.showErrorMessage(`Error on install ${o}: ${s}`),_F.error(`Error on install ${o}`,s)}})}async updateExtensions(e=!1){let{npm:t}=this;if(!t)return;let i=this.globalExtensionStats();i=i.filter(s=>s.isLocked||s.state==="disabled"?(this.outputChannel.appendLine(`Skipped update for ${s.isLocked?"locked":"disabled"} extension "${s.id}"`),!1):!0),this.states.setLastUpdate(),this.cleanModulesFolder();let r=this.createInstallerUI(!0,e);await Promise.resolve(r.start(i.map(s=>s.id))),await Yg(i,async s=>{let{id:a}=s;try{r.startProgress(a);let l=s.exotic?s.uri:null,u=this.creteInstaller(t,a);u.on("message",(h,d)=>{r.addMessage(a,h,d)});let c=await u.update(l);r.finishProgress(a,!0),c&&await this.manager.loadExtension(c)}catch(l){r.addMessage(a,l.message),r.finishProgress(a,!1),D.showErrorMessage(`Error on update ${a}: ${l}`),_F.error(`Error on update ${a}`,l)}},e?1:3)}async getExtensionStates(){let e=await v.nvim.eval('join(globpath(&runtimepath, "", 0, 1), ",")'),t=this.runtimeExtensionStats(e),i=this.globalExtensionStats();return t.concat(i)}globalExtensionStats(){let e=this.states.dependencies,t=this.states.lockedExtensions,i=[];return Object.entries(e).map(([r,o])=>{let s=mb.default.join(this.modulesFolder,r),a=[],l=xd(s,v.version,a);if(a.length>0){this.outputChannel.appendLine(`Error on load ${r} at ${s}: ${a.join(` -`)}`);return}l.name=r,i.push({id:r,isLocal:!1,version:l.version,description:l.description??"",isLocked:t.includes(r),exotic:/^https?:/.test(o),uri:mte(o),root:Zu.default.realpathSync(s),state:this.getExtensionState(r),packageJSON:Object.freeze(l)})}),i}runtimeExtensionStats(e){let t=this.states.lockedExtensions,i=e.split(","),r=[],o=new Set;return i.map(s=>{let a=[],l=xd(s,v.version,a);if(a.length>0)return;let{name:u}=l;!u||this.states.hasExtension(u)||o.has(u)||(this.states.addLocalExtension(u,s),o.add(u),r.push({id:l.name,isLocal:!0,isLocked:t.includes(u),version:l.version,description:l.description??"",exotic:!1,root:s,state:this.getExtensionState(l.name),packageJSON:Object.freeze(l)}))}),r}cleanModulesFolder(){let t=this.states.globalIds.map(r=>r.replace(/\/.*$/,""));if(!Zu.default.existsSync(this.modulesFolder))return;let i=Zu.default.readdirSync(this.modulesFolder);for(let r of i){if(t.includes(r))continue;let o=mb.default.join(this.modulesFolder,r),s=Zu.default.lstatSync(o);s.isSymbolicLink()?Zu.default.unlinkSync(o):s.isDirectory()&&Zu.default.rmSync(o,{recursive:!0,force:!0})}}dispose(){this.manager.dispose()}};je=new RD});var LF,frt,tke,_D,yte=k(()=>{"use strict";LF=S(bD());Pe();$e();tl();frt=q()("sources-keywords"),tke=["_","$"],_D=class{constructor(e){this.doc=e;this.lineWords=[];this._gitIgnored=!1;this.parseWords();let t=j.parse(e.uri);t.scheme==="file"&&$W(t.fsPath).then(i=>{this._gitIgnored=i})}getWords(){let e=[];for(let t of this.lineWords)t.forEach(i=>{e.includes(i)||e.push(i)});return e}parseWords(){let{lineWords:e,doc:t}=this,{chars:i}=t;for(let r of this.doc.textDocument.lines){let o=i.matchLine(r,2);e.push(o)}}get bufnr(){return this.doc.bufnr}get gitIgnored(){return this._gitIgnored}get words(){return new Set}onChange(e){if(e.contentChanges.length==0)return;let{lineWords:t,doc:i}=this,{range:r,text:o}=e.contentChanges[0],{start:s,end:a}=r,l=s.line,c=a.line-l,d=i.textDocument.lines.slice(l,l+o.split(/\n/).length).map(g=>i.chars.matchLine(g,2));t.splice(l,c+1,...d)}*matchWords(e,t,i){let r=t[0],o=oD(t.charCodeAt(0)),s=t.length,a=Fr(t),l=[],{lineWords:u}=this;e>=u.length&&(e=u.length-1);for(let c=0;c1&&!el(a,o?(0,LF.default)(g):g)||(l.push(g),yield g))}}}dispose(){this.lineWords=void 0}}});var Prt,cr,Cd=k(()=>{"use strict";dn();et();_e();ie();Prt=q()("sources-source"),cr=class{constructor(e){this._disabled=!1;this.nvim=v.nvim,this.name=e.name,this.filepath=e.filepath||"",this.sourceType=e.sourceType||0,this.isSnippet=!!e.isSnippet,this.defaults=e}get priority(){return this.getConfig("priority",1)}get triggerOnly(){let e=this.defaults.triggerOnly;return typeof e=="boolean"?e:!this.triggerCharacters&&!this.triggerPatterns?!1:Array.isArray(this.triggerPatterns)&&this.triggerPatterns.length!=0}get triggerCharacters(){return this.getConfig("triggerCharacters",null)}get optionalFns(){return this.defaults.optionalFns||[]}get triggerPatterns(){let e=this.getConfig("triggerPatterns",null);return!e||e.length==0?null:e.map(t=>typeof t=="string"?new RegExp(t+"$"):t)}get shortcut(){let e=this.getConfig("shortcut","");return e||this.name.slice(0,3)}get enable(){return this._disabled?!1:this.getConfig("enable",!0)}get filetypes(){return this.getConfig("filetypes",null)}get disableSyntaxes(){return this.getConfig("disableSyntaxes",[])}getConfig(e,t){let i=v.getConfiguration(`coc.source.${this.name}`);return t=Qr(this.defaults,e)?this.defaults[e]:t,i.get(e,t)}toggle(){this._disabled=!this._disabled}get firstMatch(){return this.getConfig("firstMatch",!0)}get menu(){return""}fixStartcol(e,t){let{col:i,input:r,line:o,bufnr:s}=e,a=tt(o,0,i),l=v.getDocument(s);if(!l)return i;let{chars:u}=l;for(let c=a.length-1;c>=0;c--){let h=a[c];if(!u.isKeywordChar(h)&&!t.includes(h))break;r=`${h}${r}`,i=i-1}return e.col=i,e.input=r,i}async shouldComplete(e){let{disableSyntaxes:t}=this;if(e.synname&&t&&t.length){let r=(e.synname||"").toLowerCase();if(t.findIndex(o=>r.includes(o.toLowerCase()))!==-1)return!1}let i=this.defaults.shouldComplete;return typeof i=="function"?await Promise.resolve(i.call(this,e)):!0}async refresh(){let e=this.defaults.refresh;typeof e=="function"&&await Promise.resolve(e.call(this))}async onCompleteDone(e,t){let i=this.defaults.onCompleteDone;typeof i=="function"&&await Promise.resolve(i.call(this,e,t))}async doComplete(e,t){let i=this.defaults.doComplete;return typeof i=="function"?await Promise.resolve(i.call(this,e,t)):null}async onCompleteResolve(e,t,i){let r=this.defaults.onCompleteResolve;typeof r=="function"&&await Promise.resolve(r.call(this,e,t,i))}}});function wte(n,e){if(!n)return;if(n.textEdit){let i=Ut.InsertReplaceEdit.is(n.textEdit)?n.textEdit.replace:n.textEdit.range;if(i)return i}let t=e==null?void 0:e.editRange;if(!!t)return Ut.Range.is(t)?t:t.replace}function ike(n,e,t){let i=e[0],r=wte(i,t);if(r===void 0)return;let{character:o}=r.start;for(let s=1;sp&&(l=h.slice(p,u.start.character)+l);if(p=g.character,u.end.character>p){let f=h.slice(p,u.end.character);l.endsWith(f)&&(l=l.slice(0,-f.length))}}let c=e?new As().text(l):l;return c.indexOf(` -`)===-1?c:c.replace(/\n.*$/s,"")}function rke(n,e,t){let i=n.match(/^\s*/)[0],r=e.match(/^\s*/)[0];if(i===r)return 0;let o=r.length-i.length;return t.start.character+=o,t.end.character+=o,o}function xte(n){return n?!n.detail&&!n.description:!0}var Ut,vte,bb,Cte=k(()=>{"use strict";Ut=S(W());Jt();fp();Yu();xD();dn();re();nt();tl();wi();_e();ie();vte=q()("source-language"),bb=class{constructor(e,t,i,r,o,s,a){this.name=e;this.shortcut=t;this.provider=i;this.documentSelector=r;this.triggerCharacters=o;this.allCommitCharacters=s;this.priority=a;this.sourceType=2;this._enabled=!0;this.completeItems=[];this.itemDefaults={};this.resolving=new WeakMap}get enable(){return this._enabled}toggle(){this._enabled=!this._enabled}shouldCommit(e,t){let i=this.completeItems[e.index];return i?this.allCommitCharacters.includes(t)?!0:(i.commitCharacters??this.itemDefaults.commitCharacters??[]).includes(t):!1}async doComplete(e,t){let{triggerCharacter:i,input:r,bufnr:o,position:s}=e;this.completeItems=[];let a=this.getTriggerKind(e);this.triggerContext={lnum:s.line,character:s.character,line:e.line};let l={triggerKind:a,option:e};a==Ut.CompletionTriggerKind.TriggerCharacter&&(l.triggerCharacter=i);let u=v.getDocument(o);await wr();let c=await Promise.resolve(this.provider.provideCompletionItems(u.textDocument,s,t,l));if(!c||t.isCancellationRequested)return null;let h=Array.isArray(c)?c:c.items;if(!h||h.length==0)return null;this.itemDefaults=Y0(c)?c.itemDefaults??{}:{},this.completeItems=h;let d=Object.assign({},e),g=ike(e.line,h,this.itemDefaults);if(g>e.col&&r.length>0){g=e.col;let b=Gi(e.line,g);h.forEach(w=>{let{textEdit:x}=w;Ut.TextEdit.is(x)?x.range.start.character=b:Ut.InsertReplaceEdit.is(x)&&(x.replace.start.character=b,x.insert.start.character=b)})}let p,f=Y0(c)?c.isIncomplete==!0:!1;g==null&&r.length>0&&this.triggerCharacters.includes(e.triggerCharacter)&&(h.every(b=>(b.insertText??b.label).startsWith(e.input))||(g=e.col+Q(e.input))),typeof g=="number"&&g{let x=this.convertVimCompleteItem(b,d,p);return x.index=w,x});return{startcol:g,isIncomplete:f,items:m}}onCompleteResolve(e,t,i){let{index:r}=e,o=this.completeItems[r];if(!o)return Promise.resolve();if(!(typeof this.provider.resolveCompletionItem=="function"))return this.addDocumentation(e,o,t.filetype),Promise.resolve();let a=this.resolving.get(o);return a||(a=new Promise((l,u)=>{let c=i.onCancellationRequested(()=>{this.resolving.delete(o)});Promise.resolve(this.provider.resolveCompletionItem(o,i)).then(h=>{if(c.dispose(),i.isCancellationRequested||!h){this.resolving.delete(o),l();return}Object.assign(o,h),this.addDocumentation(e,o,t.filetype),l()},u)}),this.resolving.set(o,a),a)}addDocumentation(e,t,i){let{detailRendered:r}=e,{documentation:o,detail:s,labelDetails:a}=t,l=[];if(!xte(a)&&!r){let u=(a.detail??"")+(a.description?` ${a.description}`:"");l.push({filetype:"txt",content:u})}else if(s&&!e.detailRendered&&s!=e.abbr){let u=/^[\w-\s.,\t\n]+$/.test(s);l.push({filetype:u?"txt":i,content:s})}o&&(typeof o=="string"?l.push({filetype:"txt",content:o}):o.value&&l.push({filetype:o.kind=="markdown"?"markdown":"txt",content:o.value})),l.length!=0&&(e.documentation=l)}async onCompleteDone(e,t,i){let r=this.completeItems[e.index];if(!r)return;let o=v.getDocument(t.bufnr);await o.patchChange(!0);let s=!Je(r.additionalTextEdits);s&&await ai.editsInsideSnippet(r.additionalTextEdits)&&ai.cancel();let a=o.version,l=!1;i?l=await this.applyTextEdit(o,s,r,t):vte.info("Snippets support is disabled, no textEdit applied."),s&&(await o.applyEdits(r.additionalTextEdits,o.version!=a,!l),l&&await ai.selectCurrentPlaceholder()),r.command&&(ue.has(r.command.command)?await ue.execute(r.command):vte.warn(`Command "${r.command.command}" not registered to coc.nvim`))}isSnippetItem(e){return(e.insertTextFormat??this.itemDefaults.insertTextFormat)===Ut.InsertTextFormat.Snippet}async applyTextEdit(e,t,i,r){var x,T;let{linenr:o,col:s}=r,{character:a,line:l}=this.triggerContext,u=await hh(v.nvim);if(u.line!=o-1)return;let c,{textEdit:h,insertText:d,label:g}=i;if(h)c=Ut.InsertReplaceEdit.is(h)?h.replace:h.range;else{let R=this.itemDefaults.editRange;R?c=Ut.Range.is(R)?R:R.replace:i.insertText&&(c=Ut.Range.create(u.line,Gi(l,s),u.line,a))}if(!c)return!1;c.end.character{"use strict";tl();_e();ie();xe();Cd();iot=q()("sources-source-vim"),yb=class extends cr{async callOptionalFunc(e,t){if(!this.optionalFns.includes(e))return null;let r=`coc#source#${this.name}#${e}`,o;try{o=await this.nvim.call(r,t)}catch(s){return D.showErrorMessage(`Vim error from source ${this.name}: ${s}`),null}return o}async shouldComplete(e){return await super.shouldComplete(e)?this.optionalFns.includes("should_complete")?!!await this.callOptionalFunc("should_complete",[e]):!0:!1}async refresh(){await this.callOptionalFunc("refresh",[])}async onCompleteDone(e,t){!this.optionalFns.includes("on_complete")||await this.callOptionalFunc("on_complete",[e])}onEnter(e){if(!this.optionalFns.includes("on_enter"))return;let t=v.getDocument(e);if(!t)return;let{filetypes:i}=this;i&&!i.includes(t.filetype)||this.callOptionalFunc("on_enter",[{bufnr:e,uri:t.uri,languageId:t.filetype}]).logError()}async doComplete(e,t){let{col:i,input:r,line:o,colnr:s}=e,a=await this.callOptionalFunc("get_startcol",[e]);if(t.isCancellationRequested)return;if(a){if(a<0)return null;a=Number(a),(isNaN(a)||a<0)&&(a=i),a!==i&&(r=tt(o,a,s-1),e=Object.assign({},e,{col:a,changed:i-a,input:r}))}let l=await this.nvim.callAsync("coc#util#do_complete",[this.name,e]);if(!l||l.length==0||t.isCancellationRequested)return null;if(this.firstMatch&&r.length){let c=r[0];l=l.filter(h=>{let d=h.filterText?h.filterText[0]:h.word[0];return sD(c,d)})}l=l.map(c=>{if(typeof c=="string")return{word:c,menu:this.menu,isSnippet:this.isSnippet};let h=c.menu?c.menu+" ":"";return c.menu=`${h}${this.menu}`,c.isSnippet=this.isSnippet,c});let u={items:l};return a&&(u.startcol=a),u}}});var Tte={};Go(Tte,{default:()=>vb,register:()=>oke});function oke(n,e){return n.set("around",new vb(e)),Dte.Disposable.create(()=>{n.delete("around")})}var Dte,aot,vb,kte=k(()=>{"use strict";Dte=S(W());re();Cd();aot=q()("sources-around"),vb=class extends cr{constructor(t){super({name:"around",filepath:__filename});this.keywords=t}async getResults(t,i,r,o){let{menu:s}=this,a=Date.now(),l=a,u=0;for(let c of t){let h=Date.now();if(h-l>15&&(await wr(),l=h),o.isCancellationRequested||h-a>80)return!0;if(c!=i&&(u++,r.push({word:c,menu:s}),u==100))return!0}return!1}async doComplete(t,i){let{bufnr:r,input:o,word:s,linenr:a}=t,l=this.keywords.getItem(r);if(o.length===0||!l||i.isCancellationRequested)return null;let u=l.matchWords(a-1,o,!0),c=[];return{isIncomplete:await this.getResults(u,s,c,i),items:c}}}});var Ete={};Go(Ete,{default:()=>wb,register:()=>ske});function ske(n,e){return n.set("buffer",new wb(e)),Pte.Disposable.create(()=>{n.delete("buffer")})}var Pte,hot,wb,Rte=k(()=>{"use strict";Pte=S(W());re();Cd();hot=q()("sources-buffer"),wb=class extends cr{constructor(t){super({name:"buffer",filepath:__filename});this.keywords=t}get ignoreGitignore(){return this.getConfig("ignoreGitignore",!0)}async doComplete(t,i){let{bufnr:r,input:o,word:s}=t;if(await wr(),o.length===0||i.isCancellationRequested)return null;let{menu:a}=this,l=!1,u=Date.now(),c=u,h=new Set,d=[];for(let g of this.keywords.items){if(g.bufnr===r||this.ignoreGitignore&&g.gitIgnored)continue;let p=g.matchWords(0,o,!0);for(let f of p){let m=Date.now();if(i.isCancellationRequested)return null;if(m-c>15&&(await wr(),c=m),m-u>80||h.size>100){l=!0;break}f==s||h.has(f)||(h.add(f),d.push({word:f,menu:a}))}if(l)break}return{isIncomplete:l,items:d}}}});var Fte={};Go(Fte,{default:()=>xb,register:()=>uke});function uke(n){return n.set("file",new xb),Ite.Disposable.create(()=>{n.delete("file")})}var LD,_te,Bn,Lte,Ite,ake,lke,xb,jte=k(()=>{"use strict";LD=S(require("fs")),_te=S(Lo()),Bn=S(require("path")),Lte=S(require("util")),Ite=S(W());Cd();$e();_e();$c();ie();ake=q()("sources-file"),lke=/(?:\.{0,2}|~|\$HOME|([\w]+)|[a-zA-Z]:|)(\/|\\+)(?:[\u4E00-\u9FA5\u00A0-\u024F\w .@()-]+(\/|\\+))*(?:[\u4E00-\u9FA5\u00A0-\u024F\w .@()-])*$/,xb=class extends cr{constructor(){super({name:"file",filepath:__filename})}get triggerCharacters(){let e=this.getConfig("triggerCharacters",[]);return En?e:e.filter(t=>t!="\\")}resolveEnvVariables(e){let t=e;return t=t.replace(/%([^%]+)%/g,(i,r)=>process.env[r]),t=t.replace(/\$([A-Z_]+[A-Z0-9_]*)|\${([A-Z0-9_]*)}/gi,(i,r,o)=>process.env[r||o]),t}getPathOption(e){let{line:t,colnr:i}=e,r=tt(t,0,i-1);if(r=this.resolveEnvVariables(r),!r||r.endsWith("//"))return null;let o=r.match(lke);if(o&&o.length){let s=v.expand(o[0]),a=o[0].match(/[^/\\]*$/)[0];return{pathstr:s,part:o[1],startcol:i-a.length-1,input:a}}return null}async getFileItem(e,t){let i=Bn.default.join(e,t),r=await zi(i);if(r){let o=r.isDirectory()?t+"/":t;return{word:t,abbr:o}}return null}filterFiles(e){let t=this.getConfig("ignoreHidden",!0),i=this.getConfig("ignorePatterns",[]);return e.filter(r=>{if(r==null||t&&r.startsWith("."))return!1;for(let o of i)if((0,_te.default)(r,o,{dot:!0}))return!1;return!0})}async getItemsFromRoot(e,t){let i=[],r=/[\\/]$/.test(e)?e:Bn.default.dirname(e),o=Bn.default.isAbsolute(e)?r:Bn.default.join(t,r);try{let s=await zi(o);if(s&&s.isDirectory()){let a=await Lte.default.promisify(LD.default.readdir)(o);a=this.filterFiles(a);let l=await Promise.all(a.map(u=>this.getFileItem(o,u)));i=i.concat(l)}return i=i.filter(a=>a!=null),i}catch(s){return ake.error("Error on list files:",s),i}}get trimSameExts(){return this.getConfig("trimSameExts",[])}async doComplete(e){let{col:t,filepath:i}=e,r=this.getPathOption(e);if(!r)return null;let{pathstr:o,part:s,startcol:a,input:l}=r;if(ab.word[0]===m)),{items:p.map(b=>{let w=Bn.default.extname(b.word);return b.word=f&&w===h?b.word.replace(h,""):b.word,{word:`${u}${b.word}`,abbr:`${u}${b.abbr}`,menu:this.menu}})}}}});var Hte={};Go(Hte,{Sources:()=>FD,default:()=>St});var Ote,ID,Ate,Nte,Mte,FD,St,Os=k(()=>{"use strict";Ote=S(require("fs")),ID=S(require("path")),Ate=S(require("util")),Nte=S(W());fe();Wo();dn();re();nt();$e();_e();xe();ie();yte();Cd();Cte();Ste();Mte=q()("sources"),FD=class{constructor(){this.sourceMap=new Map;this.disposables=[];this.remoteSourcePaths=[]}init(){this.keywords=v.registerBufferSync(e=>new _D(e)),this.createNativeSources(),this.createRemoteSources(),P.on("BufEnter",this.onDocumentEnter,this,this.disposables),v.onDidRuntimePathChange(e=>{for(let t of e)t&&this.createVimSources(t)},null,this.disposables)}getShortcut(e){let t=this.sourceMap.get(e);return t?t.shortcut:""}get nvim(){return v.nvim}getKeywordsBuffer(e){return this.keywords.getItem(e)}createNativeSources(){this.disposables.push((kte(),Co(Tte)).register(this.sourceMap,this.keywords)),this.disposables.push((Rte(),Co(Ete)).register(this.sourceMap,this.keywords)),this.disposables.push((jte(),Co(Fte)).register(this.sourceMap))}createLanguageSource(e,t,i,r,o,s,a){let l=new bb(e,t,r,i,o||[],a||[],s);return Mte.debug("created service source",e),this.sourceMap.set(e,l),{dispose:()=>{this.sourceMap.delete(e)}}}async createVimSourceExtension(e,t){let i=ID.default.basename(t,".vim");try{await e.command(`source ${t}`);let r=await e.call("coc#util#remote_fns",i);for(let c of["init","complete"])if(!r.includes(c))return D.showErrorMessage(`${c} not found for source ${i}`),null;let o=await e.call(`coc#source#${i}#init`,[]),s={name:`coc-source-${i}`,engines:{coc:">= 0.0.1"},activationEvents:o.filetypes?o.filetypes.map(c=>`onLanguage:${c}`):["*"],contributes:{configuration:{properties:{[`coc.source.${i}.enable`]:{type:"boolean",default:!0},[`coc.source.${i}.firstMatch`]:{type:"boolean",default:!!o.firstMatch},[`coc.source.${i}.triggerCharacters`]:{type:"number",default:o.triggerCharacters||[]},[`coc.source.${i}.priority`]:{type:"number",default:o.priority??9},[`coc.source.${i}.shortcut`]:{type:"string",default:o.shortcut??i.slice(0,3).toUpperCase(),description:"Shortcut text shown in complete menu."},[`coc.source.${i}.disableSyntaxes`]:{type:"array",default:[],items:{type:"string"}},[`coc.source.${i}.filetypes`]:{type:"array",default:o.filetypes||null,description:"Enabled filetypes.",items:{type:"string"}}}}}},a=new yb({name:i,filepath:t,sourceType:1,optionalFns:r.filter(c=>!["init","complete"].includes(c))}),l=!1,u={id:s.name,packageJSON:s,exports:void 0,extensionPath:t,activate:()=>(l=!0,this.addSource(a),Promise.resolve())};Object.defineProperty(u,"isActive",{get:()=>l}),je.manager.registerInternalExtension(u,()=>{l=!1,this.removeSource(a)})}catch(r){D.showErrorMessage(`Error on create vim source ${i}: ${r}`)}}createRemoteSources(){let{runtimepath:e}=v.env,t=e.split(",");for(let i of t)this.createVimSources(i).logError()}async createVimSources(e){if(this.remoteSourcePaths.includes(e))return;this.remoteSourcePaths.push(e);let t=ID.default.join(e,"autoload/coc/source"),i=await zi(t);if(i&&i.isDirectory()){let r=await Ate.default.promisify(Ote.default.readdir)(t);r=r.filter(s=>s.endsWith(".vim"));let o=r.map(s=>ID.default.join(t,s));if(o.length==0)return;await Promise.all(o.map(s=>this.createVimSourceExtension(this.nvim,s)))}}get names(){return Array.from(this.sourceMap.keys())}get sources(){return Array.from(this.sourceMap.values())}has(e){return this.names.findIndex(t=>t==e)!=-1}getSource(e){return e&&this.sourceMap.get(e)||null}shouldCommit(e,t){if(!e||!e.source)return!1;let i=this.getSource(e.source);return i&&typeof i.shouldCommit=="function"?i.shouldCommit(e,t):!1}getCompleteSources(e){let{filetype:t}=e,i=tt(e.line,0,e.colnr-1),r=e.input==""&&!!e.triggerCharacter,o=v.getDocument(e.bufnr),s=o?o.uri:`unknown:${e.bufnr}`;return r?this.getTriggerSources(i,t,s):this.getNormalSources(e.filetype,s)}getNormalSources(e,t){let i=e.split(".");return this.sources.filter(r=>{let{filetypes:o,triggerOnly:s,documentSelector:a,enable:l}=r;return!(!l||s||o&&!Zg(o,i)||a&&i.every(u=>v.match(a,{uri:t,languageId:u})==0))})}checkTrigger(e,t,i){let{triggerCharacters:r,triggerPatterns:o}=e;return!!((r==null?void 0:r.length)>0&&r.includes(i)||(o==null?void 0:o.length)>0&&o.findIndex(s=>s.test(t))!==-1)}shouldTrigger(e,t,i){return this.getTriggerSources(e,t,i).length>0}getTriggerSources(e,t,i,r=[]){if(!e)return[];let o=e[e.length-1],s=t.split(".");return this.sources.filter(a=>{let{filetypes:l,enable:u,documentSelector:c,name:h}=a;return r.includes(h)||!u||l&&!Zg(l,s)||c&&s.every(d=>v.match(c,{uri:i,languageId:d})==0)?!1:this.checkTrigger(a,e,o)})}addSource(e){let{name:t}=e;return this.names.includes(t)&&Mte.warn(`Recreate source ${t}`),this.sourceMap.set(t,e),Nte.Disposable.create(()=>{this.sourceMap.delete(t)})}removeSource(e){let t=typeof e=="string"?e:e.name;this.sourceMap.delete(t)}async refresh(e){for(let t of this.sources)(!e||t.name==e)&&typeof t.refresh=="function"&&await Promise.resolve(t.refresh())}toggleSource(e){if(!e)return;let t=this.getSource(e);!t||typeof t.toggle=="function"&&t.toggle()}sourceStats(){let e=[],t=this.sources,i=v.getDocument(v.bufnr),o=v.getConfiguration("suggest",i).get("languageSourcePriority",99);for(let s of t){let a=typeof s.priority=="number"?s.priority:s.sourceType==2?o:0;e.push({name:s.name,priority:a,triggerCharacters:s.triggerCharacters||[],shortcut:s.shortcut||"",filetypes:s.filetypes||[],filepath:s.filepath||"",type:s.sourceType==0?"native":s.sourceType==1?"remote":"service",disabled:!s.enable})}return e}onDocumentEnter(e){let{sources:t}=this;for(let i of t)i.enable&&typeof i.onEnter=="function"&&i.onEnter(e)}createSource(e){if(!e.name||!e.doComplete)throw new Error("name and doComplete required for createSource");let t=new cr(Object.assign({sourceType:2},e));return this.addSource(t)}dispose(){U(this.disposables)}},St=new FD});var qte={};Go(qte,{default:()=>_});var bo,Jst,IF,_,de=k(()=>{"use strict";bo=S(W());Bu();JX();GX();zX();KX();VX();e2();t2();i2();n2();o2();s2();a2();u2();c2();L_();g2();p2();f2();m2();b2();y2();v2();w2();x2();C2();S2();D2();re();Jst=q()("languages"),IF=class{constructor(){this._onDidSemanticTokensRefresh=new bo.Emitter;this._onDidInlayHintRefresh=new bo.Emitter;this.onDidSemanticTokensRefresh=this._onDidSemanticTokensRefresh.event;this.onDidInlayHintRefresh=this._onDidInlayHintRefresh.event;this.onTypeFormatManager=new Nf;this.documentLinkManager=new Pf;this.documentColorManager=new Tf;this.foldingRangeManager=new Rf;this.renameManager=new qf;this.formatManager=new _f;this.codeActionManager=new xf;this.workspaceSymbolsManager=new Uf;this.formatRangeManager=new Lf;this.hoverManager=new If;this.signatureManager=new Zf;this.documentSymbolManager=new Ef;this.documentHighlightManager=new kf;this.definitionManager=new Df;this.declarationManager=new Sf;this.typeDefinitionManager=new Jf;this.typeHierarchyManager=new $f;this.referenceManager=new Hf;this.implementationManager=new Ff;this.codeLensManager=new Cf;this.selectionRangeManager=new Bf;this.callHierarchyManager=new wf;this.semanticTokensManager=new Wf;this.semanticTokensRangeManager=new Yf;this.linkedEditingManager=new Af;this.inlayHintManager=new jf;this.inlineValueManager=new Of}hasFormatProvider(e){return!!(this.formatManager.hasProvider(e)||this.formatRangeManager.hasProvider(e))}registerOnTypeFormattingEditProvider(e,t,i){return this.onTypeFormatManager.register(e,t,i)}registerCompletionItemProvider(e,t,i,r,o=[],s,a){i=typeof i=="string"?[{language:i}]:i;let l=(Os(),Co(Hte)).default;return l.removeSource(e),l.createLanguageSource(e,t,i,r,o,s,a)}registerCodeActionProvider(e,t,i,r){return this.codeActionManager.register(e,t,i,r)}registerHoverProvider(e,t){return this.hoverManager.register(e,t)}registerSelectionRangeProvider(e,t){return this.selectionRangeManager.register(e,t)}registerSignatureHelpProvider(e,t,i){return this.signatureManager.register(e,t,i)}registerDocumentSymbolProvider(e,t,i){return i&&(t.meta=i),this.documentSymbolManager.register(e,t)}registerFoldingRangeProvider(e,t){return this.foldingRangeManager.register(e,t)}registerDocumentHighlightProvider(e,t){return this.documentHighlightManager.register(e,t)}registerCodeLensProvider(e,t){return this.codeLensManager.register(e,t)}registerDocumentLinkProvider(e,t){return this.documentLinkManager.register(e,t)}registerDocumentColorProvider(e,t){return this.documentColorManager.register(e,t)}registerDefinitionProvider(e,t){return this.definitionManager.register(e,t)}registerDeclarationProvider(e,t){return this.declarationManager.register(e,t)}registerTypeDefinitionProvider(e,t){return this.typeDefinitionManager.register(e,t)}registerTypeHierarchyProvider(e,t){return this.typeHierarchyManager.register(e,t)}registerImplementationProvider(e,t){return this.implementationManager.register(e,t)}registerReferencesProvider(e,t){return this.referenceManager.register(e,t)}registerRenameProvider(e,t){return this.renameManager.register(e,t)}registerWorkspaceSymbolProvider(e){return arguments.length>1&&typeof arguments[1].provideWorkspaceSymbols=="function"&&(e=arguments[1]),this.workspaceSymbolsManager.register(e)}registerDocumentFormatProvider(e,t,i=0){return this.formatManager.register(e,t,i)}registerDocumentRangeFormatProvider(e,t,i=0){return this.formatRangeManager.register(e,t,i)}registerCallHierarchyProvider(e,t){return this.callHierarchyManager.register(e,t)}registerDocumentSemanticTokensProvider(e,t,i){let r=[],o=setTimeout(()=>{this._onDidSemanticTokensRefresh.fire(e)},500);return r.push(bo.Disposable.create(()=>{clearTimeout(o)})),t.onDidChangeSemanticTokens&&t.onDidChangeSemanticTokens(()=>{clearTimeout(o),this._onDidSemanticTokensRefresh.fire(e)},null,r),r.push(this.semanticTokensManager.register(e,t,i)),bo.Disposable.create(()=>{U(r)})}registerDocumentRangeSemanticTokensProvider(e,t,i){return this._onDidSemanticTokensRefresh.fire(e),this.semanticTokensRangeManager.register(e,t,i)}registerInlayHintsProvider(e,t){let i=[];return i.push(this.inlayHintManager.register(e,t)),this._onDidInlayHintRefresh.fire(e),typeof t.onDidChangeInlayHints=="function"&&t.onDidChangeInlayHints(()=>{this._onDidInlayHintRefresh.fire(e)},null,i),bo.Disposable.create(()=>{U(i),this._onDidInlayHintRefresh.fire(e)})}registerInlineValuesProvider(e,t){return this.inlineValueManager.register(e,t)}registerLinkedEditingRangeProvider(e,t){return this.linkedEditingManager.register(e,t)}shouldTriggerSignatureHelp(e,t){return this.signatureManager.shouldTrigger(e,t)}async getHover(e,t,i){return await this.hoverManager.provideHover(e,t,i)}async getSignatureHelp(e,t,i,r){return await this.signatureManager.provideSignatureHelp(e,t,i,r)}async getDefinition(e,t,i){return await this.definitionManager.provideDefinition(e,t,i)}async getDefinitionLinks(e,t,i){return await this.definitionManager.provideDefinitionLinks(e,t,i)}async getDeclaration(e,t,i){return await this.declarationManager.provideDeclaration(e,t,i)}async getTypeDefinition(e,t,i){return await this.typeDefinitionManager.provideTypeDefinition(e,t,i)}async getImplementation(e,t,i){return await this.implementationManager.provideImplementations(e,t,i)}async getReferences(e,t,i,r){return await this.referenceManager.provideReferences(e,i,t,r)}async getDocumentSymbol(e,t){return await this.documentSymbolManager.provideDocumentSymbols(e,t)}getDocumentSymbolMetadata(e){return this.documentSymbolManager.getMetaData(e)}async getSelectionRanges(e,t,i){return await this.selectionRangeManager.provideSelectionRanges(e,t,i)}async getWorkspaceSymbols(e,t){return await this.workspaceSymbolsManager.provideWorkspaceSymbols(e??"",t)}async resolveWorkspaceSymbol(e,t){return await this.workspaceSymbolsManager.resolveWorkspaceSymbol(e,t)}async prepareRename(e,t,i){return await this.renameManager.prepareRename(e,t,i)}async provideRenameEdits(e,t,i,r){return await this.renameManager.provideRenameEdits(e,t,i,r)}async provideDocumentFormattingEdits(e,t,i){let r=await this.formatManager.provideDocumentFormattingEdits(e,t,i);if(r==null){if(!this.formatRangeManager.hasProvider(e))return null;let s=e.positionAt(e.getText().length),a=bo.Range.create(bo.Position.create(0,0),s);return await this.provideDocumentRangeFormattingEdits(e,a,t,i)}return r}async provideDocumentRangeFormattingEdits(e,t,i,r){return await this.formatRangeManager.provideDocumentRangeFormattingEdits(e,t,i,r)}async getCodeActions(e,t,i,r){return await this.codeActionManager.provideCodeActions(e,t,i,r)}async getDocumentHighLight(e,t,i){return await this.documentHighlightManager.provideDocumentHighlights(e,t,i)}async getDocumentLinks(e,t){return await this.documentLinkManager.provideDocumentLinks(e,t)}async resolveDocumentLink(e,t){return await this.documentLinkManager.resolveDocumentLink(e,t)}async provideDocumentColors(e,t){return await this.documentColorManager.provideDocumentColors(e,t)}async provideFoldingRanges(e,t,i){return await this.foldingRangeManager.provideFoldingRanges(e,t,i)}async provideColorPresentations(e,t,i){return await this.documentColorManager.provideColorPresentations(e,t,i)}async getCodeLens(e,t){return await this.codeLensManager.provideCodeLenses(e,t)}async resolveCodeLens(e,t){return await this.codeLensManager.resolveCodeLens(e,t)}async resolveCodeAction(e,t){return await this.codeActionManager.resolveCodeAction(e,t)}async provideDocumentOnTypeEdits(e,t,i,r){return this.onTypeFormatManager.onCharacterType(e,t,i,r)}canFormatOnType(e,t){return this.onTypeFormatManager.couldTrigger(t,e)!=null}async prepareCallHierarchy(e,t,i){return this.callHierarchyManager.prepareCallHierarchy(e,t,i)}async provideIncomingCalls(e,t,i){return this.callHierarchyManager.provideCallHierarchyIncomingCalls(e,t,i)}async provideOutgoingCalls(e,t,i){return this.callHierarchyManager.provideCallHierarchyOutgoingCalls(e,t,i)}getLegend(e,t){return t?this.semanticTokensRangeManager.getLegend(e):this.semanticTokensManager.getLegend(e)}hasSemanticTokensEdits(e){return this.semanticTokensManager.hasSemanticTokensEdits(e)}async provideDocumentSemanticTokens(e,t){return this.semanticTokensManager.provideDocumentSemanticTokens(e,t)}async provideDocumentSemanticTokensEdits(e,t,i){return this.semanticTokensManager.provideDocumentSemanticTokensEdits(e,t,i)}async provideDocumentRangeSemanticTokens(e,t,i){return this.semanticTokensRangeManager.provideDocumentRangeSemanticTokens(e,t,i)}async provideInlayHints(e,t,i){return this.inlayHintManager.provideInlayHints(e,t,i)}async resolveInlayHint(e,t){return this.inlayHintManager.resolveInlayHint(e,t)}hasLinkedEditing(e){return this.linkedEditingManager.hasProvider(e)}async provideLinkedEdits(e,t,i){return this.linkedEditingManager.provideLinkedEditingRanges(e,t,i)}async provideInlineValues(e,t,i,r){return this.inlineValueManager.provideInlineValues(e,t,i,r)}async prepareTypeHierarchy(e,t,i){return this.typeHierarchyManager.prepareTypeHierarchy(e,t,i)}async provideTypeHierarchySupertypes(e,t){return this.typeHierarchyManager.provideTypeHierarchySupertypes(e,t)}async provideTypeHierarchySubtypes(e,t){return this.typeHierarchyManager.provideTypeHierarchySubtypes(e,t)}createDiagnosticCollection(e){return Wt.create(e)}hasProvider(e,t){switch(e){case"formatOnType":return this.onTypeFormatManager.hasProvider(t);case"rename":return this.renameManager.hasProvider(t);case"onTypeEdit":return this.onTypeFormatManager.hasProvider(t);case"documentLink":return this.documentLinkManager.hasProvider(t);case"documentColor":return this.documentColorManager.hasProvider(t);case"foldingRange":return this.foldingRangeManager.hasProvider(t);case"format":return this.formatManager.hasProvider(t)||this.formatRangeManager.hasProvider(t);case"codeAction":return this.codeActionManager.hasProvider(t);case"workspaceSymbols":return this.workspaceSymbolsManager.hasProvider();case"formatRange":return this.formatRangeManager.hasProvider(t);case"hover":return this.hoverManager.hasProvider(t);case"signature":return this.signatureManager.hasProvider(t);case"documentSymbol":return this.documentSymbolManager.hasProvider(t);case"documentHighlight":return this.documentHighlightManager.hasProvider(t);case"definition":return this.definitionManager.hasProvider(t);case"declaration":return this.declarationManager.hasProvider(t);case"typeDefinition":return this.typeDefinitionManager.hasProvider(t);case"reference":return this.referenceManager.hasProvider(t);case"implementation":return this.implementationManager.hasProvider(t);case"codeLens":return this.codeLensManager.hasProvider(t);case"selectionRange":return this.selectionRangeManager.hasProvider(t);case"callHierarchy":return this.callHierarchyManager.hasProvider(t);case"semanticTokens":return this.semanticTokensManager.hasProvider(t);case"semanticTokensRange":return this.semanticTokensRangeManager.hasProvider(t);case"linkedEditing":return this.linkedEditingManager.hasProvider(t);case"inlayHint":return this.inlayHintManager.hasProvider(t);case"inlineValue":return this.inlineValueManager.hasProvider(t);case"typeHierarchy":return this.typeHierarchyManager.hasProvider(t);default:throw new Error(`Invalid provider name: ${String(e)}`)}}},_=new IF});function Bte(){return hke++}function jD(n){return[n.hlGroup,n.lnum,n.colStart,n.colEnd,n.combine?1:0,n.start_incl?1:0,n.end_incl?1:0]}function Wte(n,e){let t=[n.hlGroup,n.lnum,n.colStart,n.colEnd];return ye(t,e.slice(0,4))}var FF,Sd,Cb,Yat,cke,hke,dke,jF,D,xe=k(()=>{"use strict";FF=S(require("fs")),Sd=S(require("path")),Cb=S(W());Pe();jw();sY();fp();fe();_Z();Ta();lR();IZ();cR();jZ();OZ();YZ();vR();dn();re();$e();ds();et();$c();Yat=q()("window"),cke=Sd.default.dirname(__dirname),hke=3e3,dke=["formatOnType","rename","onTypeEdit","documentLink","documentColor","foldingRange","format","codeAction","formatRange","hover","signature","documentSymbol","documentHighlight","definition","declaration","typeDefinition","reference","implementation","codeLens","selectionRange","callHierarchy","semanticTokens","semanticTokensRange","linkedEditing","inlayHint","inlineValue","typeHierarchy"];jF=class{constructor(){this.mutex=new Di;this.tabIds=[];this.terminalManager=new lp;this._onDidTabClose=new Cb.Emitter;this.onDidTabClose=this._onDidTabClose.event}init(e){for(let t=1;t<=e.tabCount;t++)this.tabIds.push(Bte());P.on("TabNew",t=>{this.tabIds.splice(t-1,0,Bte())}),P.on("TabClosed",t=>{let i=this.tabIds[t-1];this.tabIds.splice(t-1,1),i&&this._onDidTabClose.fire(i)})}getTabNumber(e){if(!!this.tabIds.includes(e))return this.tabIds.indexOf(e)+1}getTabId(e){return this.tabIds[e-1]}get nvim(){return this.workspace.nvim}dispose(){var e;this.terminalManager.dispose(),(e=this.statusLine)==null||e.dispose()}get activeTextEditor(){return this.workspace.editors.activeTextEditor}get visibleTextEditors(){return this.workspace.editors.visibleTextEditors}get onDidChangeActiveTextEditor(){return this.workspace.editors.onDidChangeActiveTextEditor}get onDidChangeVisibleTextEditors(){return this.workspace.editors.onDidChangeVisibleTextEditors}get terminals(){return this.terminalManager.terminals}get onDidOpenTerminal(){return this.terminalManager.onDidOpenTerminal}get onDidCloseTerminal(){return this.terminalManager.onDidCloseTerminal}async createTerminal(e){return await this.terminalManager.createTerminal(this.nvim,e)}createFloatFactory(e){let i=this.workspace.getConfiguration("coc.preferences").get("excludeImageLinksInMarkdownDocument",!0),o=this.workspace.getConfiguration("floatFactory").get("floatConfig",{});return CZ(this.workspace.nvim,Object.assign({excludeImages:i,maxWidth:80},e),o)}showMessage(e,t="more"){let{messageLevel:i}=this,r="Error",o=2;switch(t){case"more":o=0,r="MoreMsg";break;case"warning":o=1,r="WarningMsg";break}o>=i&&kZ(this.nvim,e,r)}async runTerminalCommand(e,t,i=!1){return t=t||this.workspace.cwd,await this.nvim.callAsync("coc#ui#run_terminal",{cmd:e,cwd:t,keepfocus:i?1:0})}async openTerminal(e,t={}){return await this.nvim.call("coc#ui#open_terminal",{cmd:e,...t})}async showQuickpick(e,t="Choose by number"){return await this.showMenuPicker(e,{title:t,position:"center"})}async showQuickPick(e,t,i=Cb.CancellationToken.None){this.checkDialog("showQuickPick"),t=t||{};let r=await Promise.resolve(e),o=r.some(s=>typeof s=="string");if(!i.isCancellationRequested)return await this.mutex.use(()=>new Promise((s,a)=>{if(i.isCancellationRequested)return s(void 0);let l=new gh(this.nvim,{items:r.map(u=>typeof u=="string"?{label:u}:u),title:t.title??"",canSelectMany:t.canPickMany});l.matchOnDescription=t.matchOnDescription,l.onDidFinish(u=>{if(u==null)return s(void 0);let c=o?u.map(h=>h.label):u;if(t.canPickMany)return s(c);s(c[0])}),l.show(this.dialogPreference).catch(a)}))}async createQuickPick(e){return this.checkDialog("createQuickPick"),await this.mutex.use(async()=>{let t=new gh(this.nvim,e);return await t.show(this.dialogPreference),t})}async showMenuPicker(e,t,i){return await this.mutex.use(async()=>{if(i&&i.isCancellationRequested)return-1;t=t||{},typeof t=="string"&&(t={title:t});let r=new bp(this.nvim,{items:e,...t},i),o=new Promise(s=>{r.onDidClose(a=>{P.race(["InputChar"],20).finally(()=>{s(a)})})});return await r.show(this.dialogPreference),await o})}async openLocalConfig(){let e=await this.nvim.call("expand",["%:p"]),t=await this.nvim.eval("&filetype");if(!e||!Sd.default.isAbsolute(e)){this.showWarningMessage("Current buffer doesn't have valid file path.");return}let i=this.workspace.getWorkspaceFolder(j.file(e).toString());if(!i){let l=this.workspace.getConfiguration("coc.preferences").get("rootPatterns",[]),c=this.workspace.getConfiguration("workspace").get("ignoredFiletypes",[]),h;c.includes(t)&&(h=`Filetype '${t}' is ignored for this.workspace folder resolve.`),h||(h=`Can't resolve this.workspace folder for file '${e}, consider create one of ${l.join(", ")} in your project root.'.`),this.showWarningMessage(h);return}let r=j.parse(i.uri).fsPath,o=Sd.default.join(r,".vim");if(!FF.default.existsSync(o)){if(!await this.showPrompt(`Would you like to create folder'${r}/.vim'?`))return;FF.default.mkdirSync(o)}let s=Sd.default.join(o,Uc);await this.nvim.call("coc#util#open_file",["edit",s])}async showPrompt(e){return await this.mutex.use(()=>Yw(this.nvim,e))}async showDialog(e){return this.checkDialog("showDialog"),await this.mutex.use(async()=>{let t=new mp(this.nvim,e);return await t.show(this.dialogPreference),t})}async requestInput(e,t,i){let{nvim:r}=this,o=this.workspace.getConfiguration("coc.preferences");return this.workspace.env.dialog&&o.get("promptInput",!0)&&!En?await this.mutex.use(async()=>{let s=new ka(r,t??"");return await s.show(e,Object.assign(this.inputPreference,i??{})),await new Promise(a=>{s.onDidFinish(l=>{a(l)})})}):await this.mutex.use(async()=>{let s=await this.workspace.callAsync("input",[e+": ",t||""]);return r.command("normal! :",!0),s})}async createInputBox(e,t,i){this.checkDialog("createInputBox");let r=new ka(this.nvim,t??"");return await r.show(e,Object.assign(this.inputPreference,i)),r}createStatusBarItem(e=0,t={}){return this.statusLine||(this.statusLine=new Sp(this.nvim)),this.statusLine.createStatusBarItem(e,t.progress)}createOutputChannel(e){return hs.create(e,this.nvim)}showOutputChannel(e,t){let r=this.workspace.getConfiguration("workspace").get("openOutputCommand","vs");hs.show(e,r,t)}async echoLines(e,t=!1){let{nvim:i}=this,r=this.workspace.env.cmdheight;e.length>r&&t&&(e=e.slice(0,r));let o=this.workspace.env.columns-12;if(e=e.map(s=>(s=s.replace(/\n/g," "),t&&(s=s.slice(0,o)),s)),t&&e.length==r){let s=e[e.length-1];e[r-1]=`${s.length==o?s.slice(0,-4):s} ...`}await i.call("coc#ui#echo_lines",[e])}getCursorPosition(){return hh(this.nvim)}async moveTo(e){await SZ(this.nvim,e,this.workspace.env.isVim)}getSelectedRange(e){return PZ(this.nvim,e)}async selectRange(e){await EZ(this.nvim,e,this.nvim.isVim)}getOffset(){return DZ(this.nvim)}getCursorScreenPosition(){return TZ(this.nvim)}async showPickerDialog(e,t,i){return this.checkDialog("showPickerDialog"),await this.mutex.use(async()=>{if(i&&i.isCancellationRequested)return;let r=typeof e[0]=="string",o=new yp(this.nvim,{title:t,items:r?e.map(u=>({label:u})):e},i),s=new Promise(u=>{o.onDidClose(c=>{u(c)})});await o.show(this.dialogPreference);let a=await s;return a==null?void 0:e.filter((u,c)=>a.includes(c))})}async showInformationMessage(e,...t){let i=Error().stack;return await this._showMessage("Info",e,t,i)}async showWarningMessage(e,...t){let i=Error().stack;return await this._showMessage("Warning",e,t,i)}async showErrorMessage(e,...t){if(!this.workspace)return;let i=Error().stack;return await this._showMessage("Error",e,t,i)}async showMessagePicker(e,t,i,r){let o=r.map(a=>typeof a=="string"?a:a.title),s=await this.showMenuPicker(o,{position:"center",content:t,title:e.replace(/\r?\n/," "),borderhighlight:i});return r[s]}async _showMessage(e,t,i,r){if(!this.enableMessageDialog)return await this.showConfirm(t,i,e);if(i.length>0){let o=this.parseSource(r);return await this.showMessagePicker(`Choose action (${o})`,t,`Coc${e}Float`,i)}await this.createNotification(e.toLowerCase(),t,[],r)}async showNotification(e){this.checkDialog("showNotification");let t=Error().stack;await new Pa(this.nvim,e).show(this.getNotificationPreference(t))}async showConfirm(e,t,i){if(!t||t.length==0){let a=i=="Info"?"more":i=="Error"?"error":"warning";this.showMessage(e,a);return}let o=(typeof t[0]=="string"?t.slice():t.map(a=>a.title)).map((a,l)=>`${l+1}${a}`),s=await this.nvim.callAsync("coc#util#with_callback",["confirm",[e,o.join(` -`),0,i]]);return t[s-1]}async withProgress(e,t){this.checkDialog("withProgress");let i=this.workspace.getConfiguration("notification"),r=Error().stack;if(i.get("statusLineProgress",!0))return await this.createStatusLineProgress(e,t);let o=new vp(this.nvim,{task:t,title:e.title,cancellable:e.cancellable}),s=i.get("minProgressWidth",30),a=new Promise(l=>{o.onDidFinish(l)});return await o.show(Object.assign(this.getNotificationPreference(r,e.source),{minWidth:s})),await a}async createStatusLineProgress(e,t){let{title:i}=e,r=this.createStatusBarItem(0,{progress:!0});r.text=i??"",r.show();let o=0,s=await t({report:a=>{a.increment&&(o+=a.increment),r.text=MZ(i,a.message,o)}},Cb.CancellationToken.None);return r.dispose(),s}createTreeView(e,t){let i=(vf(),Co(ZX)).default;return new i(e,t)}async diffHighlights(e,t,i,r,o){let s=[e,t];Array.isArray(r)&&s.push(r[0],r[1]-1);let a=await this.nvim.call("coc#highlight#get_highlights",s);if(!a||(o==null?void 0:o.isCancellationRequested))return null;i.sort((m,b)=>m.lnum-b.lnum);let l=[],u=this.workspace.has("nvim-0.5.1")||this.workspace.isVim,c=[],h=[],d=0,g=i.length-1,p=0,f=new Map;if(a.forEach(m=>{p=Math.max(p,m[1]);let b=f.get(m[1]);b?b.push(m):f.set(m[1],[m])}),a.length>0){let m=Array.isArray(r)?r[0]:0;for(let b=m;b<=p;b++){let w=f.get(b)??[],x=[];for(let T=d;T<=g;T++){let R=i[T];if(R.lnum==b)d=T+1,x.push(R);else{d=T;break}}if(x.length==0)w.length>0&&(u?c.push(...w.map(T=>T[4])):l.push(b));else if(w.length==0)h.push(...x.map(T=>jD(T)));else if(u){let T=0,R=Math.min(w.length,x.length);for(;TF[4])),h.push(...x.slice(T).map(F=>jD(F)))}else(x.length!=w.length||!x.every((T,R)=>Wte(T,w[R])))&&(l.push(b),h.push(...x.map(T=>jD(T))))}}for(let m=d;m<=g;m++)h.push(jD(i[m]));return{remove:l,add:h,removeMarkers:c}}async applyDiffHighlights(e,t,i,r,o=!1){let{nvim:s}=this,{remove:a,add:l,removeMarkers:u}=r;a.length===0&&l.length===0&&u.length===0||(s.pauseNotification(),u.length&&s.call("coc#highlight#del_markers",[e,t,u],!0),a.length&&s.call("coc#highlight#clear",[e,t,a],!0),l.length&&s.call("coc#highlight#set",[e,t,l,i],!0),o?s.resumeNotification(!0,!0):await s.resumeNotification(!0))}async bufferCheck(){let e=await this.workspace.document;if(!e.attached){await this.showDialog({title:"Buffer check result",content:`Document not attached, ${e.notAttachReason}`,highlight:"WarningMsg"});return}let t=new Hi;t.addLine("Provider state","Title"),t.addLine("");let i=(de(),Co(qte)).default;for(let r of dke){let o=i.hasProvider(r,e.textDocument);t.addTexts([{text:"-",hlGroup:"Comment"},{text:" "},o?{text:"\u2713",hlGroup:"CocListFgGreen"}:{text:"\u2717",hlGroup:"CocListFgRed"},{text:" "},{text:r,hlGroup:o?"Normal":"CocFadeOut"}])}await this.showDialog({title:"Buffer check result",content:t.content,highlights:t.highlights})}createNotification(e,t,i,r){return new Promise((o,s)=>{let a={kind:e,content:t,buttons:i.map((u,c)=>({text:u,index:c})),callback:u=>{o(u)}};new Pa(this.nvim,a).show(this.getNotificationPreference(r)).catch(s)})}parseSource(e,t=2){let i=e.split(/\r?\n/).slice(t)[0];if(!i)return;i=i.replace(/^\s*at\s*/,"");let r;if(i.endsWith(")")){let a=i.match(/(\((.*?):\d+:\d+\))$/);a&&(r=a[2])}else{let a=i.match(/(.*?):\d+:\d+$/);a&&(r=a[1])}if(!r)return;let o=(Wo(),Co(bte)).default.manager.getExtensionsInfo(),s=o.find(a=>ni(a.filepath,r));if(s)return s.name.startsWith("single")?Sd.default.basename(s.filepath):s.name;if(s=o.find(a=>Ye(a.directory,r)),s)return s.name;if(Ye(cke,r))return"coc.nvim"}get dialogPreference(){let e=this.workspace.getConfiguration("dialog");return{rounded:e.get("rounded",!0),maxWidth:e.get("maxWidth"),maxHeight:e.get("maxHeight"),floatHighlight:e.get("floatHighlight"),floatBorderHighlight:e.get("floatBorderHighlight"),pickerButtons:e.get("pickerButtons"),pickerButtonShortcut:e.get("pickerButtonShortcut"),confirmKey:e.get("confirmKey"),shortcutHighlight:e.get("shortcutHighlight")}}get inputPreference(){let e=this.workspace.getConfiguration("dialog");return{rounded:e.get("rounded",!0),maxWidth:e.get("maxWidth",80),highlight:e.get("floatHighlight"),borderhighlight:e.get("floatBorderHighlight")}}getNotificationPreference(e,t){t||(t=this.parseSource(e));let i=this.workspace.getConfiguration("notification"),r=i.get("disabledProgressSources",[]),o=Array.isArray(r)&&(r.includes("*")||r.includes(t));return{border:i.get("border",!0),focusable:i.get("focusable",!0),marginRight:i.get("marginRight",10),timeout:i.get("timeout",10),maxWidth:i.get("maxWidth"),maxHeight:i.get("maxHeight"),highlight:i.get("highlightGroup"),winblend:i.get("winblend"),disabled:o,source:t}}checkDialog(e){if(!this.workspace.env.dialog)throw new Error(`API window.${e} requires vim >= 8.2.0750 or neovim >= 0.4.0, please upgrade your vim`)}get enableMessageDialog(){return this.workspace.getConfiguration("coc.preferences").get("enableMessageDialog",!1)}get messageLevel(){switch(this.workspace.getConfiguration("coc.preferences").get("messageLevel","more")){case"error":return 2;case"warning":return 1;default:return 0}}},D=new jF});function MD(n,e){let{source:t,code:i,severity:r,message:o}=e,s=Sb(r)[0],a=i?" "+i:"";return n.replace("%source",t).replace("%code",a).replace("%severity",s).replace("%message",o)}function Sb(n){switch(n){case Ft.DiagnosticSeverity.Warning:return"Warning";case Ft.DiagnosticSeverity.Information:return"Information";case Ft.DiagnosticSeverity.Hint:return"Hint";default:return"Error"}}function Yte(n){switch(n){case Ft.DiagnosticSeverity.Warning:return"W";case Ft.DiagnosticSeverity.Information:return"I";case Ft.DiagnosticSeverity.Hint:return"I";default:return"E"}}function Hs(n){if(n!=null)switch(n){case"hint":return Ft.DiagnosticSeverity.Hint;case"information":return Ft.DiagnosticSeverity.Information;case"warning":return Ft.DiagnosticSeverity.Warning;case"error":return Ft.DiagnosticSeverity.Error;default:return Ft.DiagnosticSeverity.Hint}}function MF(n){switch(n){case Ft.DiagnosticSeverity.Error:return"CocError";case Ft.DiagnosticSeverity.Warning:return"CocWarning";case Ft.DiagnosticSeverity.Information:return"CocInfo";case Ft.DiagnosticSeverity.Hint:return"CocHint";default:return"CocError"}}function Zte(n,e,t){let{start:i,end:r}=e.range,o=e.source||"coc.nvim",s=e.message.split(` -`)[0],a=Sb(e.severity).slice(0,1).toUpperCase();return{bufnr:n,lnum:i.line+1,end_lnum:r.line+1,col:Array.isArray(t)?_t(t[i.line]??"",i.character)+1:i.character+1,end_col:Array.isArray(t)?_t(t[r.line]??"",r.character)+1:r.character+1,text:`[${o}${e.code?" "+e.code:""}] ${s} [${a}]`,type:a}}function OD(n,e){let t=n.severity??1,i=e.severity??1;if(t!=i)return t-i;let r=Me(n.range.start,e.range.start);return r!=0?r:n.source>e.source?1:-1}function Jte(n){let e=n.tags||[];if(e.includes(Ft.DiagnosticTag.Deprecated))return"CocDeprecatedHighlight";if(e.includes(Ft.DiagnosticTag.Unnecessary))return"CocUnusedHighlight";switch(n.severity){case Ft.DiagnosticSeverity.Warning:return"CocWarningHighlight";case Ft.DiagnosticSeverity.Information:return"CocInfoHighlight";case Ft.DiagnosticSeverity.Hint:return"CocHintHighlight";default:return"CocErrorHighlight"}}function $te(n,e){let t=[],{range:i}=e;for(let r of n){let o=r.range;if(!rh(i,o)){if(Me(o.start,i.end)>0){let s=ux(o.start,e),a=ux(o.end,e);s.line>=0&&s.character>=0&&a.line>=0&&a.character>=0&&(r.range=Ft.Range.create(s,a))}t.push(r)}}return t}var Ft,OF=k(()=>{"use strict";Ft=S(W());xt();_e();so()});var Wn,slt,Ute,Xte,Gte,gke,zte,Db,AD,Kte=k(()=>{"use strict";Wn=S(W());fe();nt();xt();xe();ie();OF();slt=q()("diagnostic-buffer"),Ute="CocDiagnostic",Xte="diagnostic",Gte=["CocErrorHighlight","CocWarningHighlight","CocInfoHighlight","CocHintHighlight","CocDeprecatedHighlight","CocUnusedHighlight"],gke=500,zte="ale#other_source#ShowResults",AD=class{constructor(e,t,i){this.nvim=e;this.doc=t;this.floatFactory=i;this.diagnosticsMap=new Map;this.versionsMap=new Map;this._disposed=!1;this._dirties=new Set;this._refreshing=!1;this._onDidRefresh=new Wn.Emitter;this.onDidRefresh=this._onDidRefresh.event;this.loadConfiguration();let r,o=()=>{clearTimeout(r),this._refreshing=!0,r=setTimeout(()=>{this._refreshing=!1,this._autoRefresh&&this._refresh(!0)},gke)};o.clear=()=>{this._refreshing=!1,clearTimeout(r)},this.refreshHighlights=o}get _autoRefresh(){return this.config.enable&&this.config.autoRefresh&&this.dirty&&!this.doc.hasChanged}get config(){return this._config}loadConfiguration(){let e=v.getConfiguration("diagnostic",this.doc),t=this._config&&e.enable!=this._config.enable;this._config={enable:e.get("enable",!0),floatConfig:e.get("floatConfig",{}),messageTarget:e.get("messageTarget","float"),enableHighlightLineNumber:e.get("enableHighlightLineNumber",!0),highlightLimit:e.get("highlightLimit",1e3),highlightPriority:e.get("highlightPriority"),autoRefresh:e.get("autoRefresh",!0),checkCurrentLine:e.get("checkCurrentLine",!1),enableSign:v.env.sign&&e.get("enableSign",!0),locationlistUpdate:e.get("locationlistUpdate",!0),enableMessage:e.get("enableMessage","always"),virtualText:e.get("virtualText",!1),virtualTextAlign:e.get("virtualTextAlign","after"),virtualTextWinCol:v.has("nvim-0.5.1")?e.get("virtualTextWinCol",null):null,virtualTextCurrentLineOnly:e.get("virtualTextCurrentLineOnly"),virtualTextPrefix:e.get("virtualTextPrefix"," "),virtualTextFormat:e.get("virtualTextFormat","%message"),virtualTextLimitInOneLine:e.get("virtualTextLimitInOneLine",999),virtualTextLineSeparator:e.get("virtualTextLineSeparator"," \\ "),virtualTextLines:e.get("virtualTextLines",3),displayByAle:e.get("displayByAle",!1),level:Hs(e.get("level","hint")),locationlistLevel:Hs(e.get("locationlistLevel")),signLevel:Hs(e.get("signLevel")),virtualTextLevel:Hs(e.get("virtualTextLevel")),messageLevel:Hs(e.get("messageLevel")),signPriority:e.get("signPriority",10),refreshOnInsertMode:e.get("refreshOnInsertMode",!1),filetypeMap:e.get("filetypeMap",{}),showUnused:e.get("showUnused",!0),showDeprecated:e.get("showDeprecated",!0),format:e.get("format","[%source%code] [%severity] %message")},this._config.virtualText&&!Db&&this.nvim.createNamespace("coc-diagnostic-virtualText").then(i=>{Db=i}),t&&(this.config.enable?this._refresh(!1):this.clear())}async setState(e){this._config.enable!=e&&(this._config.enable=e,e?await this._refresh(!1):this.clear())}get dirty(){return this._dirties.size>0}get bufnr(){return this.doc.bufnr}get uri(){return this.doc.uri}onChange(e){let t=e.contentChanges;if(t.length>0){let i=Wn.TextEdit.replace(t[0].range,t[0].text);for(let[r,o]of this.diagnosticsMap.entries()){let s=$te(o,i);this.diagnosticsMap.set(r,s)}this._dirties=new Set(this.diagnosticsMap.keys())}!this.config.autoRefresh||this.refreshHighlights()}onTextChange(){this._dirties=new Set(this.diagnosticsMap.keys()),this.refreshHighlights.clear()}get displayByAle(){return this._config.displayByAle}clearHighlight(e){this.buffer.clearNamespace(Xte+e)}clearSigns(e){this.buffer.unplaceSign({group:Ute+e})}get diagnostics(){let e=[];for(let t of this.diagnosticsMap.values())e.push(...t);return e}get buffer(){return this.nvim.createBuffer(this.bufnr)}refreshAle(e,t){let i=t.map(r=>{let o=r.range;return{text:r.message,code:r.code,lnum:o.start.line+1,col:o.start.character+1,end_lnum:o.end.line+1,end_col:o.end.character,type:Yte(r.severity)}});this.nvim.call(zte,[this.bufnr,"coc"+e,i],!0)}async update(e,t){let{diagnosticsMap:i,versionsMap:r}=this,o=i.get(e);if(r.set(e,this.doc.version),!this._dirties.has(e)&&Je(t)&&Je(o))return;if(i.set(e,t),this.checkFloat(),!this.config.enable||t.length>0&&this._refreshing){this._dirties.add(e);return}let s=await this.getDiagnosticInfo(t.length===0);if(!s||s.winid==-1){this._dirties.add(e);return}let a=new Map;a.set(e,t),this.refresh(a,s)}async checkFloat(){if(v.bufnr!=this.bufnr)return;let e=await D.getCursorPosition();this.getDiagnosticsAtPosition(e).length==0&&this.floatFactory&&this.floatFactory.close()}async reset(e){this.refreshHighlights.clear(),this.versionsMap.clear();let{diagnosticsMap:t}=this;for(let i of t.keys())Je(e[i])&&(e[i]=[]);for(let[i,r]of Object.entries(e))t.set(i,r);this._dirties=new Set(t.keys()),await this._refresh(!1)}async echoMessage(e=!1,t){let i=this.config;if(!i.enable||i.enableMessage==="never"||i.displayByAle)return!1;let r=i.messageTarget=="float",o=this.getDiagnosticsAtPosition(t);if(i.messageLevel&&(o=o.filter(s=>s.severity&&s.severity<=i.messageLevel)),r)await this.showFloat(o);else{let s=[];o.forEach(a=>{s.push(MD(i.format,a))}),s.length&&(await this.nvim.command('echo ""'),await D.echoLines(s,e))}return!0}async showVirtualTextCurrentLine(e){let{config:t}=this;return!t.virtualTextCurrentLineOnly||P.insertMode&&!t.refreshOnInsertMode||!await this.isEnabled()?!1:(this.showVirtualText(e),!0)}async showFloat(e){if(this.config.messageTarget!=="float"||!this.floatFactory)return!1;if(e.length==0)return this.floatFactory.close(),!1;if(P.insertMode)return!1;let t=this.config,i="",r=[];if(Object.keys(t.filetypeMap).length>0){let o=this.doc.filetype,s=t.filetypeMap.default||"";i=t.filetypeMap[o]||(s=="bufferType"?o:s)}return e.forEach(o=>{var a;let s="Error";if(i==="")switch(o.severity){case Wn.DiagnosticSeverity.Hint:s="Hint";break;case Wn.DiagnosticSeverity.Warning:s="Warning";break;case Wn.DiagnosticSeverity.Information:s="Info";break}else s=i;r.push({filetype:s,content:MD(t.format,o)}),(a=o.codeDescription)!=null&&a.href&&r.push({filetype:"txt",content:o.codeDescription.href})}),await this.floatFactory.show(r,this.config.floatConfig),!0}async getDiagnosticInfo(e){let{refreshOnInsertMode:t}=this._config,{nvim:i,bufnr:r}=this,o=!t;if(e)o=!1;else if(P.insertMode&&!t)return;return await i.call("coc#util#diagnostic_info",[r,o])}refresh(e,t){let{nvim:i,displayByAle:r}=this;for(let o of e.keys())this._dirties.delete(o);if(r){i.pauseNotification();for(let[o,s]of e.entries())this.refreshAle(o,s);i.resumeNotification(!0,!0)}else{let o=[];i.pauseNotification();for(let[s,a]of e.entries())a.length==0&&o.push(s),this.addSigns(s,a),this.updateHighlights(s,a);this.showVirtualText(t.lnum),this.updateLocationList(t.winid,t.locationlist),this.setDiagnosticInfo(),i.resumeNotification(!0,!0),o.forEach(s=>{this.diagnosticsMap.delete(s)})}this._onDidRefresh.fire(this.diagnostics)}updateLocationList(e,t){if(!this._config.locationlistUpdate||e==-1||t!=="Diagnostics of coc")return;let i=this.toLocationListItems(this.diagnostics);this.nvim.call("setloclist",[e,[],"r",{title:"Diagnostics of coc",items:i}],!0)}toLocationListItems(e){let{locationlistLevel:t}=this._config,i=[],r=this.doc.textDocument.lines;e.sort(OD);for(let o of e)t&&o.severity&&o.severity>t||i.push(Zte(this.bufnr,o,r));return i}addSigns(e,t){let{enableSign:i,signLevel:r}=this._config;if(!i)return;let o=Ute+e,s=[],a=new Map;for(let l of t){let{range:u,severity:c}=l;if(!c||r&&c>r)continue;let h=u.start.line,d=a.get(h)||[];if(d.includes(c))continue;d.push(c),a.set(h,d);let g=this._config.signPriority+4-c;s.push({name:MF(c),lnum:h+1,priority:g})}this.nvim.call("coc#ui#update_signs",[this.bufnr,o,s],!0)}setDiagnosticInfo(){let e=[0,0,0,0],t={error:0,warning:0,information:0,hint:0,lnums:e};for(let r of this.diagnosticsMap.values())for(let o of r){let s=o.range.start.line+1;switch(o.severity){case Wn.DiagnosticSeverity.Warning:t.warning=t.warning+1,e[1]=e[1]?Math.min(e[1],s):s;break;case Wn.DiagnosticSeverity.Information:t.information=t.information+1,e[2]=e[2]?Math.min(e[2],s):s;break;case Wn.DiagnosticSeverity.Hint:t.hint=t.hint+1,e[3]=e[3]?Math.min(e[3],s):s;break;default:e[0]=e[0]?Math.min(e[0],s):s,t.error=t.error+1}}this.nvim.createBuffer(this.bufnr).setVar("coc_diagnostic_info",t,!0),this.nvim.call("coc#util#do_autocmd",["CocDiagnosticChange"],!0)}showVirtualText(e){let{_config:t}=this,{virtualText:i,virtualTextLevel:r}=t;if(!i||e<0)return;let{virtualTextPrefix:o,virtualTextLimitInOneLine:s,virtualTextCurrentLineOnly:a}=this._config,{diagnostics:l,buffer:u}=this;a&&(l=l.filter(d=>{let{start:g,end:p}=d.range;return g.line<=e-1&&p.line>=e-1})),l.sort(OD),u.clearNamespace(Db);let c=new Map,h={};h.text_align=t.virtualTextAlign,typeof t.virtualTextWinCol=="number"&&(h.virt_text_win_col=t.virtualTextWinCol);for(let d=l.length-1;d>=0;d--){let g=l[d];if(r&&g.severity&&g.severity>r)continue;let{line:p}=g.range.start,f=MF(g.severity)+"VirtualText",m=g.message.split(/\n/).map(w=>w.trim()).filter(w=>w.length>0).slice(0,this._config.virtualTextLines).join(this._config.virtualTextLineSeparator),b=c.get(p)??[];b.unshift([o+MD(this._config.virtualTextFormat,{...g,message:m}),f]),c.set(p,b)}for(let[d,g]of c.entries())u.setVirtualText(Db,d,g.slice(0,s),h)}updateHighlights(e,t){if(!t.length)this.clearHighlight(e);else{let i=this.getHighlightItems(t),r=this._config.highlightPriority;this.buffer.updateHighlights(Xte+e,i,{priority:r})}}async _refresh(e){let t=await this.getDiagnosticInfo(!e);if(!t||t.winid==-1||!this.config.enable)return;let{_dirties:i}=this;if(e){let r=new Map;for(let[o,s]of this.diagnosticsMap.entries()){if(!i.has(o))continue;let a=this.versionsMap.get(o);s.length>0&&a!=null&&this.doc.version>a||r.set(o,s)}this.refresh(r,t)}else this.refresh(this.diagnosticsMap,t)}getHighlightItems(e){let t=[];for(let i=0;ii.lnum!=r.lnum?i.lnum-r.lnum:i.colStart!=r.colStart?i.colStart-r.colStart:Gte.indexOf(r.hlGroup)-Gte.indexOf(i.hlGroup)),t}clear(){let{nvim:e}=this,t=Array.from(this.diagnosticsMap.keys());if(this.refreshHighlights.clear(),this.versionsMap.clear(),this._dirties.clear(),this.displayByAle)for(let i of t)this.nvim.call(zte,[this.bufnr,i,[]],!0);else{e.pauseNotification(),this.buffer.deleteVar("coc_diagnostic_info");for(let i of t)this.clearHighlight(i),this.clearSigns(i);this._config.virtualText&&this.buffer.clearNamespace(Db),e.resumeNotification(!0,!0)}}getDiagnosticsAt(e,t){let i=[];for(let r of this.diagnosticsMap.values())t?i.push(...r.filter(o=>iY(e.line,o.range))):i.push(...r.filter(o=>ft(e,o.range)==0));return i.sort(OD),i}getDiagnosticsAtPosition(e){let{config:t,doc:i}=this,r=this.getDiagnosticsAt(e,t.checkCurrentLine);if(t.checkCurrentLine||r.length)return r;let o=i.getline(e.line).length;return e.character+1==o&&(r=this.getDiagnosticsAt(Wn.Position.create(e.line,e.character+1),!1),r.length)||e.line===i.lineCount-1&&e.character==0&&(e=Wn.Position.create(e.line+1,0),r=this.getDiagnosticsAt(e,!0)),r}async isEnabled(){return this._disposed||!this.config.enable?!1:await this.nvim.createBuffer(this.bufnr).getVar("coc_diagnostic_disable")!=1}dispose(){this.clear(),this.diagnosticsMap.clear(),this._onDidRefresh.dispose(),this._disposed=!0}}});var qs,glt,pke,Tb,Qte=k(()=>{"use strict";qs=S(W());Pe();ie();nt();glt=q()("diagnostic-collection"),pke=[qs.DiagnosticTag.Deprecated,qs.DiagnosticTag.Unnecessary],Tb=class{constructor(e,t){this.name=e;this.onDispose=t;this.diagnosticsMap=new Map;this._onDidDiagnosticsChange=new qs.Emitter;this.onDidDiagnosticsChange=this._onDidDiagnosticsChange.event}set(e,t){let i=new Map;if(Array.isArray(e))for(let r of e){let[o,s]=r,a=v.getDocument(o);o=a?a.uri:o,s==null?s=[]:s=(i.get(o)||[]).concat(s),i.set(o,s)}else{let r=v.getDocument(e),o=r?r.uri:e;i.set(o,t||[])}for(let r of i){let[o,s]=r;o=j.parse(o).toString(),s.forEach(a=>{a.range=a.range??qs.Range.create(0,0,0,0),a.message=a.message??"",a.source=a.source||this.name,!a.severity&&Array.isArray(a.tags)&&Zg(a.tags,pke)&&(a.severity=qs.DiagnosticSeverity.Hint)}),this.diagnosticsMap.set(o,s),this._onDidDiagnosticsChange.fire(o)}}delete(e){this.diagnosticsMap.delete(e),this._onDidDiagnosticsChange.fire(e)}clear(){let e=Array.from(this.diagnosticsMap.keys());e=e.filter(t=>this.diagnosticsMap.get(t).length>0),this.diagnosticsMap.clear();for(let t of e)this._onDidDiagnosticsChange.fire(t)}forEach(e,t){for(let i of this.diagnosticsMap.keys()){let r=this.diagnosticsMap.get(i);e.call(t,i,r,this)}}entries(){return this.diagnosticsMap.entries()}get(e){let t=this.diagnosticsMap.get(e);return t==null?[]:t.slice()}has(e){return this.diagnosticsMap.has(e)}dispose(){this.clear(),this.onDispose&&this.onDispose(),this._onDidDiagnosticsChange.dispose()}}});var xn,_lt,AF,Wt,Bu=k(()=>{"use strict";xn=S(W());Pe();fe();re();nt();$e();xt();_e();xe();ie();Kte();Qte();OF();_lt=q()("diagnostic-manager"),AF=class{constructor(){this._onDidRefresh=new xn.Emitter;this.onDidRefresh=this._onDidRefresh.event;this.enabled=!0;this.collections=[];this.disposables=[]}init(){let e=v.getConfiguration("diagnostic");this.floatFactory=D.createFloatFactory({modes:["n"],autoHide:!0}),this.buffers=v.registerBufferSync(i=>{let r=new AD(this.nvim,i,this.floatFactory);r.onDidRefresh(s=>{this._onDidRefresh.fire({diagnostics:s,uri:r.uri,bufnr:r.bufnr})});let o=this.getDiagnostics(r);return Object.keys(o).length>0&&r.config.autoRefresh&&r.reset(o),r}),v.onDidChangeConfiguration(i=>{for(let r of this.buffers.items)i.affectsConfiguration("diagnostic",r.doc)&&r.loadConfiguration()},null,this.disposables),v.onDidCloseTextDocument(i=>{for(let r of this.collections)r.delete(i.uri)},null,this.disposables),P.on("CursorMoved",(i,r)=>{this.messageTimer&&clearTimeout(this.messageTimer),this.messageTimer=setTimeout(()=>{let o=this.buffers.getItem(i);if(o==null||o.dirty)return;let s=async()=>{if(o.config.enableMessage!=="always")return;let a=o.doc.getPosition(r[0],r[1]);await o.echoMessage(!0,a)};Promise.all([s(),o.showVirtualTextCurrentLine(r[0])])},e.messageDelay)},null,this.disposables),P.on(["InsertEnter","BufEnter"],()=>{this.messageTimer&&clearTimeout(this.messageTimer)},null,this.disposables),P.on("InsertLeave",async i=>{let r=this.buffers.getItem(i);if(!(!r||r.config.refreshOnInsertMode))for(let o of this.buffers.items)o.refreshHighlights()},null,this.disposables),P.on("BufWinEnter",i=>{let r=this.buffers.getItem(i);r&&r.refreshHighlights()},null,this.disposables);let t=v.configurations.errorItems;this.setConfigurationErrors(t),v.configurations.onError(i=>{this.setConfigurationErrors(i)},null,this.disposables),this.defineSigns(e)}defineSigns(e){let{nvim:t}=this;t.pauseNotification();for(let i of["Error","Warning","Info","Hint"]){let r=`sign define Coc${i} linehl=Coc${i}Line`,o=e[i.toLowerCase()+"Sign"];o&&(r+=` texthl=Coc${i}Sign text=${o}`),v.isNvim&&e.enableHighlightLineNumber&&(r+=` numhl=Coc${i}Sign`),t.command(r,!0)}t.resumeNotification(!1,!0)}getItem(e){return this.buffers.getItem(e)}async setLocationlist(e){let t=this.buffers.getItem(e),i=v.getDocument(e);if(!t)throw new Error(`buffer ${e} not attached, ${i?i.notAttachReason:""}`);let r=[];for(let l of Object.values(this.getDiagnostics(t)))r.push(...l);let o=t.toLocationListItems(r),s=await this.nvim.call("getloclist",[0,{title:1}]),a=s.title&&s.title.indexOf("Diagnostics of coc")!=-1?"r":" ";await this.nvim.call("setloclist",[0,[],a,{title:"Diagnostics of coc",items:o}])}setConfigurationErrors(e){let t=this.create("config");if(e!=null&&e.length){let i=j.parse(e[0].location.uri).fsPath;D.showErrorMessage(`Error detected for config file ${i}, please check diagnostics list.`);let r=new Map;for(let o of e){let{uri:s}=o.location,a=r.get(s)||[];a.push(xn.Diagnostic.create(o.location.range,o.message,xn.DiagnosticSeverity.Error)),r.set(s,a)}t.set(Array.from(r))}else t.clear()}create(e){let t=this.getCollectionByName(e);return t||(t=new Tb(e,()=>{let i=this.collections.findIndex(r=>r==t);i!==-1&&this.collections.splice(i,1)}),this.collections.push(t),t.onDidDiagnosticsChange(i=>{let r=this.buffers.getItem(i);r&&r.config.autoRefresh&&r.update(e,this.getDiagnosticsByCollection(r,t))}),t)}getSortedRanges(e,t,i){let r=this.getCollections(e),o=[],s=i?Hs(i):0;for(let a of r){let l=a.get(e);s?l=l.filter(c=>c.severity==s):t&&t!(c.severity&&c.severity>t)));let u=l.map(c=>c.range);o.push(...u)}return o.sort((a,l)=>a.start.line!=l.start.line?a.start.line-l.start.line:a.start.character-l.start.character),o}getDiagnostics(e){let t={};for(let i of this.collections)!i.has(e.uri)||(t[i.name]=this.getDiagnosticsByCollection(e,i));return t}getDiagnosticsByCollection(e,t){let{level:i,showUnused:r,showDeprecated:o}=e.config,s=t.get(e.uri)??[];return s.length&&(s=s.filter(a=>{var l,u;return!(i&&a.severity&&a.severity>i||!r&&((l=a.tags)==null?void 0:l.includes(xn.DiagnosticTag.Unnecessary))||!o&&((u=a.tags)==null?void 0:u.includes(xn.DiagnosticTag.Deprecated)))}),s.sort((a,l)=>Me(a.range.start,l.range.start))),s}getDiagnosticsInRange(e,t){let i=[];for(let r of this.collections)for(let o of r.get(e.uri)??[])Gl(o.range,t)&&i.push(o);return i}async preview(){let e=await this.getCurrentDiagnostics();if(e.length==0){this.nvim.command("pclose",!0);return}let t=[];for(let i of e){let{source:r,code:o,severity:s,message:a}=i,l=Sb(s)[0];t.push(`[${r}${o?" "+o:""}] [${l}]`),t.push(...a.split(/\r?\n/)),t.push("")}this.nvim.call("coc#ui#preview_info",[t,"txt"],!0)}async prepareJump(e){let t=await this.nvim.call("bufnr",["%"]),i=this.buffers.getItem(t);if(!i)return;let r=this.getSortedRanges(i.uri,i.config.level,e);if(Je(r))return;let o=await D.getCursorPosition(),s=await this.nvim.getOption("wrapscan");return{item:i,curpos:o,wrapscan:s!=0,ranges:r}}async jumpPrevious(e){let t=await this.prepareJump(e);if(!t)return;let{curpos:i,item:r,wrapscan:o,ranges:s}=t,a;for(let l=s.length-1;l>=0;l--){let u=s[l].end;if(Me(u,i)<0){a=s[l].start;break}}!a&&o&&(a=s[s.length-1].start),a?(await D.moveTo(a),await r.echoMessage(!1,a)):D.showWarningMessage("No more diagnostic before cursor position")}async jumpNext(e){let t=await this.prepareJump(e);if(!t)return;let{curpos:i,item:r,wrapscan:o,ranges:s}=t,a;for(let l=0;l<=s.length-1;l++){let u=s[l].start;if(Me(u,i)>0){let c=await this.nvim.call("coc#util#valid_position",[u.line,u.character]);if((c[0]!=u.line||c[1]!=u.character)&&Me(xn.Position.create(c[0],c[1]),i)<=0)continue;a=xn.Position.create(c[0],c[1]);break}}!a&&o&&(a=s[0].start),a?(await D.moveTo(a),await r.echoMessage(!1,a)):D.showWarningMessage("No more diagnostic after cursor position")}async getDiagnosticList(){let e=[],t=v.getConfiguration("diagnostic"),i=Hs(t.get("level","hint"));for(let r of this.collections)for(let[o,s]of r.entries()){if(s.length==0)continue;let a=j.parse(o),l=v.getDocument(o),u=l&&l.attached?l.textDocument.lines:void 0;if(!u&&a.scheme==="file")try{let c=s.reduce((h,d)=>Math.max(d.range.end.line,h),0);u=await Sa(a.fsPath,0,c)}catch{}for(let c of s){if(c.severity&&c.severity>i)continue;let{start:h,end:d}=c.range,g={file:a.fsPath,lnum:h.line+1,end_lnum:d.line+1,col:Array.isArray(u)?_t(u[h.line]??"",h.character)+1:h.character+1,end_col:Array.isArray(u)?_t(u[d.line]??"",d.character)+1:d.character+1,code:c.code,source:c.source??r.name,message:c.message,severity:Sb(c.severity),level:c.severity??0,location:xn.Location.create(o,c.range)};e.push(g)}}return e.sort((r,o)=>r.level!==o.level?r.level-o.level:r.file!==o.file?r.file>o.file?1:-1:r.lnum!=o.lnum?r.lnum-o.lnum:r.col-o.col),e}async getBufferAndPosition(){let[e,t,i]=await this.nvim.eval(`[bufnr("%"),line('.'),col('.')]`),r=this.buffers.getItem(e);if(!r)return;let o=r.doc.getPosition(t,i);return[r,o]}async getCurrentDiagnostics(){let e=await this.getBufferAndPosition();if(!!e)return e[0].getDiagnosticsAtPosition(e[1])}async echoCurrentMessage(){let e=await this.getBufferAndPosition();if(!e)return;let[t,i]=e;await t.echoMessage(!1,i)}async jumpRelated(){let t=(await this.getCurrentDiagnostics()).find(r=>r.relatedInformation!=null),i=t?t.relatedInformation.map(r=>r.location):[];i.length==1?await v.jumpTo(i[0].uri,i[0].range.start):i.length>1?await v.showLocations(i):D.showWarningMessage("No related information found.")}reset(){this.messageTimer&&clearTimeout(this.messageTimer),this.buffers.reset();for(let e of this.collections)e.dispose();this.collections=[]}dispose(){this.messageTimer&&clearTimeout(this.messageTimer),this.buffers.dispose();for(let e of this.collections)e.dispose();this.floatFactory.dispose(),this.collections=[],U(this.disposables)}get nvim(){return v.nvim}getCollectionByName(e){return this.collections.find(t=>t.name==e)}getCollections(e){return this.collections.filter(t=>t.has(e))}async toggleDiagnostic(e){this.enabled=e==null?!this.enabled:e!=0,await Promise.allSettled(this.buffers.items.map(t=>t.setState(this.enabled)))}async toggleDiagnosticBuffer(e,t){e=e??v.bufnr;let i=this.buffers.getItem(e);if(i){let r=t==null?await i.isEnabled():t==0;await this.nvim.call("setbufvar",[e,"coc_diagnostic_disable",r?1:0]),await i.setState(!r)}}async refreshBuffer(e){let t=this.buffers.getItem(e);return t?(await t.reset(this.getDiagnostics(t)),!0):!1}async refresh(e){let t;if(!e)t=this.buffers.items;else{let i=this.buffers.getItem(e);t=i?[i]:[]}for(let i of t)await this.refreshBuffer(i.uri)}},Wt=new AF});var ol,Vte,eie,tie,Jlt,NF,HF,ue,Jt=k(()=>{"use strict";ol=S(W());Pe();Bu();Yu();re();xe();ie();fe();Vte=S(require("path")),eie=S(require("os"));qe();tie=require("v8"),Jlt=q()("commands"),NF=class{constructor(e,t,i,r=!1){this.id=e;this.impl=t;this.thisArg=i;this.internal=r}execute(...e){let{impl:t,thisArg:i}=this;return t.apply(i,e||[])}dispose(){this.thisArg=null,this.impl=null}},HF=class{constructor(){this.commands=new Map;this.titles=new Map;this.onCommandList=[]}init(e,t){this.mru=v.createMru("commands"),this.register({id:"vscode.open",execute:async i=>{e.call("coc#ui#open_url",i.toString(),!0)}},!0),this.register({id:"workbench.action.reloadWindow",execute:async()=>{e.command("CocRestart",!0)}},!0),this.register({id:"editor.action.insertSnippet",execute:async(i,r)=>{let o=r===!0?{}:r;return await ai.insertSnippet(i.newText,!0,i.range,ol.InsertTextMode.adjustIndentation,o||void 0)}},!0),this.register({id:"editor.action.doCodeAction",execute:async i=>{await t.cocAction("doCodeAction",i)}},!0),this.register({id:"editor.action.triggerSuggest",execute:async()=>{e.call("coc#refresh",[],!0)}},!0),this.register({id:"editor.action.triggerParameterHints",execute:async()=>{let i=v.getDocument(v.bufnr);i&&await i.synchronize(),await t.cocAction("showSignatureHelp")}},!0),this.register({id:"editor.action.addRanges",execute:async i=>{await t.cocAction("addRanges",i)}},!0),this.register({id:"editor.action.restart",execute:async()=>{await Nt(30),e.command("CocRestart",!0)}},!0),this.register({id:"editor.action.showReferences",execute:async(i,r,o)=>{await v.showLocations(o)}},!0),this.register({id:"editor.action.rename",execute:async(i,r)=>{await v.jumpTo(i,r),await t.cocAction("rename")}},!0),this.register({id:"editor.action.format",execute:async()=>{await t.cocAction("format")}},!0),this.register({id:"workspace.refactor",execute:async i=>{let r=i.filter(o=>ol.Location.is(o));await t.getHandler().refactor.fromLocations(r)}},!0),this.register({id:"workspace.clearWatchman",execute:async()=>{(await D.runTerminalCommand("watchman watch-del-all")).success&&D.showInformationMessage("Cleared watchman watching directories.")}},!1,"run watch-del-all for watchman to free up memory."),this.register({id:"workspace.workspaceFolders",execute:async()=>{let r=v.workspaceFolders.map(o=>j.parse(o.uri).fsPath);await D.echoLines(r)}},!1,"show opened workspaceFolders."),this.register({id:"workspace.renameCurrentFile",execute:async()=>{await v.renameCurrent()}},!1,"change current filename to a new name and reload it."),this.register({id:"extensions.toggleAutoUpdate",execute:async()=>{let i=v.getConfiguration("coc.preferences",null);i.get("extensionUpdateCheck","daily")=="never"?(await i.update("extensionUpdateCheck","daily",!0),await D.showInformationMessage("Extension auto update enabled.")):(await i.update("extensionUpdateCheck","never",!0),await D.showInformationMessage("Extension auto update disabled."))}},!1,"toggle auto update of extensions."),this.register({id:"workspace.diagnosticRelated",execute:()=>Wt.jumpRelated()},!1,"jump to related locations of current diagnostic."),this.register({id:"workspace.showOutput",execute:async i=>{if(i)D.showOutputChannel(i);else{let r=v.channelNames;if(r.length==0)return;if(r.length==1)D.showOutputChannel(r[0]);else{let o=await D.showQuickpick(r);if(o==-1)return;let s=r[o];D.showOutputChannel(s)}}}},!1,"open output buffer to show output from languageservers or extensions."),this.register({id:"document.showIncomingCalls",execute:async()=>{await t.cocAction("showIncomingCalls")}},!1,"show incoming calls in tree view."),this.register({id:"document.showOutgoingCalls",execute:async()=>{await t.cocAction("showOutgoingCalls")}},!1,"show outgoing calls in tree view."),this.register({id:"document.echoFiletype",execute:async()=>{let i=await e.call("bufnr","%"),r=v.getDocument(i);!r||await D.echoLines([r.filetype])}},!1,"echo the mapped filetype of the current buffer"),this.register({id:"document.renameCurrentWord",execute:async()=>{let i=await e.call("bufnr","%"),r=v.getDocument(i);if(!r)return;let o=await t.cocAction("getWordEdit");if(!o){D.showWarningMessage("Invalid position");return}let s=[],{changes:a,documentChanges:l}=o;if(a){let u=a[r.uri];u&&(s=u.map(c=>c.range))}else if(l)for(let u of l)ol.TextDocumentEdit.is(u)&&u.textDocument.uri==r.uri&&(s=u.edits.map(c=>c.range));s.length&&await t.cocAction("addRanges",s)}},!1,"rename word under cursor in current buffer by use multiple cursors."),this.register({id:"document.jumpToNextSymbol",execute:async()=>{let i=await v.document;if(!i)return;let r=await t.cocAction("symbolRanges");if(!r)return;let{textDocument:o}=i,s=await D.getOffset();r.sort((a,l)=>a.start.line!=l.start.line?a.start.line-l.start.line:a.start.character-l.start.character);for(let a=0;a<=r.length-1;a++)if(o.offsetAt(r[a].start)>s){await D.moveTo(r[a].start);return}await D.moveTo(r[0].start)}},!1,"Jump to next symbol highlight position."),this.register({id:"workspace.undo",execute:async()=>{await v.files.undoWorkspaceEdit()}},!1,"Undo previous workspace edit"),this.register({id:"workspace.redo",execute:async()=>{await v.files.redoWorkspaceEdit()}},!1,"Redo previous workspace edit"),this.register({id:"workspace.inspectEdit",execute:async()=>{await v.files.inspectEdit()}},!1,"Inspect previous workspace edit in new tab"),this.register({id:"workspace.openLocation",execute:async(i,r,o)=>{i&&await e.call("win_gotoid",[i]),await v.jumpTo(r.uri,r.range.start,o)}},!0),this.register({id:"document.jumpToPrevSymbol",execute:async()=>{let i=await v.document;if(!i)return;let r=await t.cocAction("symbolRanges");if(!r)return;let{textDocument:o}=i,s=await D.getOffset();r.sort((a,l)=>a.start.line!=l.start.line?a.start.line-l.start.line:a.start.character-l.start.character);for(let a=r.length-1;a>=0;a--)if(o.offsetAt(r[a].end){await t.cocAction("bufferCheck")}},!1,"Check providers for current buffer."),this.register({id:"workspace.writeHeapSnapshot",execute:async()=>{let i=Vte.default.join(eie.default.homedir(),`${oe()}-${process.pid}.heapsnapshot`);(0,tie.writeHeapSnapshot)(i),D.showInformationMessage(`Create heapdump at: ${i}`)}},!1,"Generates a snapshot of the current V8 heap and writes it to a JSON file.")}get commandList(){let e=[];for(let t of this.commands.values())t.internal||e.push(t);return e}dispose(){for(let e of this.commands.values())e.dispose();this.commands.clear()}execute(e){return this.executeCommand(e.command,...e.arguments??[])}register(e,t=!1,i){for(let r of Array.isArray(e.id)?e.id:[e.id])this.registerCommand(r,e.execute,e,t),i&&this.titles.set(r,i);return e}has(e){return this.commands.has(e)}unregister(e){let t=this.commands.get(e);!t||(t.dispose(),this.commands.delete(e))}registerCommand(e,t,i,r=!1){return e.startsWith("_")&&(r=!0),this.commands.set(e,new NF(e,t,i,r)),ol.Disposable.create(()=>{this.commands.delete(e)})}executeCommand(e,...t){let i=this.commands.get(e);if(!i)throw new Error(`Command: ${e} not found`);return Promise.resolve(i.execute.apply(i,t))}async fireCommand(e,...t){await P.fire("Command",[e]);let i=Date.now(),r=await this.executeCommand(e,...t);return t.length==0&&await this.addRecent(e,P.lastChangeTs>i),r}async addRecent(e,t){await this.mru.add(e),t&&await v.nvim.command('silent! call repeat#set("\\(coc-command-repeat)", -1)')}async repeatCommand(){let t=(await this.mru.load())[0];t&&(await this.executeCommand(t),await v.nvim.command('silent! call repeat#set("\\(coc-command-repeat)", -1)'))}},ue=new HF});jT();var $ie=S(yH()),Uie=S(LT());fe();var Jie=require("events"),ij=S(W());Jt();var ND=S(W());Pe();fe();Os();re();nt();_e();xe();ie();var nie=S(bD()),$u=S(W());dn();re();nt();tl();_e();nt();tl();_e();function qF(n,e,t=1){return n===e?1/t:e+32===n?.5/t:0}function iie(n,e){if(!(e.length==0||n.length0){let d=Dd(n,e+1,s,[...i,e]);return d===void 0?void 0:[l+d[0],d[1]]}let u=new Map,c=xB(n,e+1);if(c!=null){let d=qF(o,c[1],a?.5:1);if(d>0){let g=[...i,c[0]];d===.5&&(d=.75);let p=Dd(n,c[0]+1,s,g);p!==void 0&&u.set(d+p[0],p[1])}}for(let d=e+1;d0){let p=Dd(n,d+1,s,[...i,d]);p!==void 0&&u.set(g+p[0],p[1]);break}}if(u.size==0){if(i.length>0){let d=i[i.length-1];if(d>0&&n[d]!==o&&n[d-1]===o){let g=i.slice();g.splice(i.length-1,0,d-1);let p=Dd(n,d+1,s,g);return p===void 0?void 0:[.5+p[0],p[1]]}}return}let h=Math.max(...u.keys());return[h,u.get(h)]}var Td=S(W());fe();de();nt();et();xt();ie();var out=q()("completion-wordDistance"),Ju=class{static async create(e,t){let{position:i}=t,r=[t.linenr,t.colnr];if(!e)return Ju.None;let o=v.getDocument(t.bufnr),s=new Td.CancellationTokenSource,a=await _.getSelectionRanges(o.textDocument,[i],s.token);if(Je(a))return Ju.None;let l=[],u=d=>{d&&d.range.end.line-d.range.start.line<2e3&&(l.unshift(d.range),u(d.parent))};u(a[0]);let c=new Promise(d=>{setTimeout(()=>{s.cancel(),d(void 0)},100)}),h=await Promise.race([c,v.computeWordRanges(t.bufnr,l[0],s.token)]);return h?(delete h[t.word],new class extends Ju{distance(d,g){if(!ye([P.cursor.lnum,P.cursor.col],r))return 0;if(g.kind===Td.CompletionItemKind.Keyword||g.source==="snippets")return 2<<20;let p=h[g.word];if(Je(p))return 2<<20;let f=EB(p,Td.Range.create(d,d),VW),m=f>=0?p[f]:p[Math.max(0,~f-1)],b=l.length;for(let w of l){if(!Xt(m,w))break;b-=1}return b}}):Ju.None}},kb=Ju;kb.None=new class extends Ju{distance(){return 0}};var kd=q()("completion-complete"),fke=2<<20,Pb=class{constructor(e,t,i,r,o){this.option=e;this.document=t;this.config=i;this.sources=r;this.nvim=o;this.results=new Map;this._input="";this._completing=!1;this.names=[];this.inputOffset=0;this._onDidRefresh=new $u.Emitter;this.onDidRefresh=this._onDidRefresh.event;this.tokenSource=new $u.CancellationTokenSource,r.sort((s,a)=>(a.priority??99)-(s.priority??99)),this.names=r.map(s=>s.name),this.asciiMatch=i.asciiMatch&&e.input.length>0&&e.input.charCodeAt(0)<128}fireRefresh(e){this.timer&&clearTimeout(this.timer),this.timer=setTimeout(()=>{this._onDidRefresh.fire()},e)}getPriority(e){return typeof e.priority=="number"?e.priority:e.sourceType===2?this.config.languageSourcePriority:0}get isCompleting(){return this._completing}get input(){return this._input}get isEmpty(){let e=!0;for(let t of this.results.values())if(t.items.length>0){e=!1;break}return e}getIncompleteSources(){let e=[];for(let[t,i]of this.results.entries())i.isIncomplete&&e.push(t);return e}async doComplete(){let e=this.tokenSource.token,t=await Promise.all([this.nvim.call("coc#util#synname",[]),this.nvim.call("coc#util#suggest_variables",[this.option.bufnr]),this.document.patchChange()]);if(e.isCancellationRequested)return;this.option.synname=t[0];let i=t[1];if(i.disable)return kd.warn("suggest cancelled by b:coc_suggest_disable"),!0;if(!Je(i.disabled_sources)&&(this.sources=this.sources.filter(r=>!i.disabled_sources.includes(r.name)),this.sources.length===0))return kd.warn("suggest cancelled by b:coc_disabled_sources"),!0;if(!Je(i.blacklist)&&i.blacklist.includes(this.option.input))return kd.warn("suggest cancelled by b:coc_suggest_blacklist"),!0;await Nt(Math.min(this.config.triggerCompletionWait??0,50)),!e.isCancellationRequested&&await this.completeSources(this.sources,!1)}async completeSources(e,t){let{timeout:i,localityBonus:r}=this.config,{results:o,tokenSource:s}=this,a=this.option.col,l=e.map(f=>f.name),u=l.length;this._completing=!0;let c=s.token,h,d=new Promise(f=>{h=setTimeout(()=>{c.isCancellationRequested||(l=l.filter(m=>!g.includes(m)),s.cancel(),kd.warn(`Completion timeout after ${i}ms`,l),this.nvim.setVar("coc_timeout_sources",l,!0)),f()},typeof i=="number"?i:500)}),g=[],p=[kb.create(r,this.option).then(f=>{this.wordDistance=f}),...e.map(f=>this.completeSource(f,c).then(()=>{if(g.push(f.name),c.isCancellationRequested||t)return;let m=this.option.col!==a;m&&this.cancel(),m||g.length===u?this.fireRefresh(0):o.has(f.name)&&this.fireRefresh(16)}))];await Promise.race([d,Promise.all(p)]),clearTimeout(h),this._completing=!1}async completeSource(e,t){let i=Object.assign({},this.option),{asciiMatch:r}=this,{name:o}=e;try{if(typeof e.shouldComplete=="function"&&(!await Promise.resolve(e.shouldComplete(i))||t.isCancellationRequested))return;let s=this.getPriority(e),a=Date.now();await new Promise((l,u)=>{Promise.resolve(e.doComplete(i,t)).then(c=>{if(t.isCancellationRequested){l(void 0);return}let h=c?c.items.length:0;kd.debug(`Source "${o}" finished with ${h} items ${Date.now()-a}ms`),h>0?(c.items.forEach(d=>{let g=d.filterText??d.word;d.word=d.word??"",d.abbr=d.abbr??d.word,d.source=o,d.priority=s,d.filterText=r?(0,nie.default)(g):g}),this.setResult(o,c)):this.results.delete(o),l()},c=>{u(c)})})}catch(s){kd.error("Complete error:",e.name,s)}}async completeInComplete(e,t){let{document:i}=this;this.cancel(),this.tokenSource=new $u.CancellationTokenSource;let r=this.tokenSource.token;if(await i.patchChange(!0),r.isCancellationRequested)return;let{input:o,colnr:s,linenr:a,followWord:l,position:u}=this.option,c=e+l;Object.assign(this.option,{word:c,input:e,line:i.getline(a-1),position:{line:u.line,character:u.character+e.length-o.length},colnr:s+(e.length-o.length),triggerCharacter:void 0,triggerForInComplete:!0});let h=this.sources.filter(d=>t.includes(d.name));if(await this.completeSources(h,!0),!r.isCancellationRequested)return this.filterItems(e)}filterItems(e){let{results:t,names:i,inputOffset:r,option:o}=this;if(r>0&&(e=tt(e,r)),this._input=e,t.size==0)return[];let s=e.length,a=$u.Position.create(o.linenr-1,Gi(o.line,o.col)),l=s==0,{maxItemCount:u,defaultSortMethod:c,removeDuplicateItems:h}=this.config,d=[],g=Fr(e),p=new Set;for(let f of i){let m=t.get(f);if(!m)continue;let b=m.items;for(let w=0;w{let b=f.sortText,w=m.sortText;if(f.score!==m.score)return m.score-f.score;if(f.priority!==m.priority)return m.priority-f.priority;if(f.source===m.source&&b!==w)return b{let{priority:s,source:a}=o,l=s<90,u=r.get(a)||0;return i&&l&&u==i||t&&!l&&u==t?!1:(r.set(a,u+1),!0)})}setResult(e,t){let{results:i}=this,{line:r,colnr:o,col:s}=this.option;if(typeof t.startcol=="number"&&t.startcol!=s){let{startcol:a}=t;ai.content.trim().length>0),e.length===0)this.close();else{let{lines:i,codes:r,highlights:o}=Ww(e,{excludeImages:this.excludeImages}),s={codes:r,highlights:o,highlight:t.highlight??"CocFloating",maxWidth:t.maxWidth||80,rounded:t.rounded?1:0,focusable:t.focusable===!0?1:0};t.shadow&&(s.shadow=1),t.border&&(s.border=[1,1,1,1]),t.borderhighlight&&(s.borderhighlight=t.borderhighlight),typeof t.winblend=="number"&&(s.winblend=t.winblend),this.nvim.call("coc#dialog#create_pum_float",[i,s],!0),this.nvim.redrawVim()}}doCompleteResolve(e,t,i){let r=St.getSource(e.source);return new Promise(o=>{if(r&&typeof r.onCompleteResolve=="function"){let s=setTimeout(()=>{i.isCancellationRequested||(this.cancel(),this.close()),rie.warn(`Resolve timeout after 500ms: ${r.name}`),o()},500);Promise.resolve(r.onCompleteResolve(e,t,i)).then(()=>{clearTimeout(s),o()},a=>{rie.error("Error on complete resolve:",a),clearTimeout(s),o()})}else o()})}cancel(){this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource=void 0)}close(){this.nvim.call("coc#pum#close_detail",[],!0)}};var Eut=q()("completion-mru"),Rb=class{constructor(){this.max=0;this.items=new Map;this.itemsNoPrefex=new Map}getScore(e,t,i){let r=sie(t);return e.length==0?this.itemsNoPrefex.get(r)??-1:(i==="recentlyUsedByPrefix"&&(r=`${e}|${r}`),(i==="recentlyUsed"?this.itemsNoPrefex:this.items).get(r)??-1)}add(e,t){if(["around","buffer","word"].includes(t.source))return;let i=sie(t);t.word.toLowerCase().startsWith(e.toLowerCase())||(e="");let r=`${e}|${i}`;this.items.set(r,this.max),this.itemsNoPrefex.set(i,this.max),this.max+=1}};function sie(n){let e=n.filterText,t=n.source,i=n.kind??"";return`${e}|${t}|${i}`}var Dt=S(W());S_();Os();_e();Kn();Os();nt();_e();var jut=q()("completion-util");function BF(n,e,t){return typeof n=="number"?e.get(n)??t:n}function aie(n,e){let t=Buffer.from(e,"utf8");if(t.length{try{return new RegExp(t).test(e)}catch{return!1}})}function uie(n){return new Map([[ut.Text,n.text??"v"],[ut.Method,n.method??"f"],[ut.Function,n.function??"f"],[ut.Constructor,typeof n.constructor=="function"?"f":n["constructor"]??""],[ut.Field,n.field??"m"],[ut.Variable,n.variable??"v"],[ut.Class,n.class??"C"],[ut.Interface,n.interface??"I"],[ut.Module,n.module??"M"],[ut.Property,n.property??"m"],[ut.Unit,n.unit??"U"],[ut.Value,n.value??"v"],[ut.Enum,n.enum??"E"],[ut.Keyword,n.keyword??"k"],[ut.Snippet,n.snippet??"S"],[ut.Color,n.color??"v"],[ut.File,n.file??"F"],[ut.Reference,n.reference??"r"],[ut.Folder,n.folder??"F"],[ut.EnumMember,n.enumMember??"m"],[ut.Constant,n.constant??"v"],[ut.Struct,n.struct??"S"],[ut.Event,n.event??"E"],[ut.Operator,n.operator??"O"],[ut.TypeParameter,n.typeParameter??"T"]])}function cie(n){return n?{word:n.word,abbr:n.abbr,kind:n.kind,source:n.source,isSnippet:n.isSnippet===!0,menu:n.menu??`[${n.source}]`,user_data:typeof n.index=="number"?`${n.source}:${n.index}`:n.user_data}:{}}function hie(n,e,t,i){let{pre:r}=t;if(r.length===0||r[r.length-1]===" "||r.length=0;r--){let o=e[r];if(n.isWord(o)&&(t?o.charCodeAt(0)<255:!0))i+=1;else break}return i==0?"":e.slice(-i)}function gie(n){let{source:e}=n;return e?dw(St.getSource(e)):St.getCompleteSources(n)}function pie(n,e,t=2){if(e.length===0)return n;for(let i=t;iM.preselect):-1,d=-1,g=0,p=0,f=0,m=0,b=h==-1&&!r&&s!="first",w=[];for(let M=0;Md&&(d=ne,h=M)}let O=St.getShortcut(L.source),Z=this.getLabel(L);w.push(Z),g=Math.max(this.stringWidth(Z.text,!0),g),L.kind&&(f=Math.max(this.stringWidth(BF(L.kind,l,u),!0),f)),L.menu&&(p=Math.max(this.stringWidth(L.menu,!0),p)),O&&(m=Math.max(this.stringWidth(O,!0)+2,m))}if(h!==-1&&t.length>0&&(e[h].word.startsWith(t)||(h=-1)),!r)h=h==-1?0:h;else{if(h>0){let[M]=e.splice(h,1);e.unshift(M)}h=-1}let x={input:t,index:h,bufnr:i.bufnr,line:i.linenr,col:i.col,virtualText:a,words:e.map(M=>this.getInsertWord(M,t,c))},T=this.pumConfig,R=[],F=[],N=0,J={border:!!T.border,menuWidth:p,abbrWidth:g,kindWidth:f,shortcutWidth:m};this.adjustAbbrWidth(J);for(let M=0;Mo&&(u=u.slice(0,o-1)+"."),{text:u,highlights:c}}adjustAbbrWidth(e){let{formatItems:t}=this.config,i=this.env.pumwidth||15,r=0;for(let o of t)o=="abbr"?r+=e.abbrWidth+1:o=="menu"&&e.menuWidth?r+=e.menuWidth+1:o=="kind"&&e.kindWidth?r+=e.kindWidth+1:o=="shortcut"&&e.shortcutWidth&&(r+=e.shortcutWidth+1);r{let b=this.fillWidth(f,m);g+=m,d+=Q(b),h+=b};for(let f of l)switch(f){case"abbr":{if(e.length>0){let w=fie(d,t);w!=-1&&(t.filterText===e?r.push({hlGroup:"CocPumSearch",lnum:o,colStart:w,colEnd:w+Q(t.filterText)}):t.positions&&t.positions.length>0&&yke(r,t.abbr,t.positions,w,o,a))}let m=i.text,b=d;p(m,s.abbrWidth+1),i.highlights.forEach(w=>{r.push({hlGroup:w.hlGroup,lnum:o,colStart:b+w.start,colEnd:b+w.end})}),t.deprecated&&r.push({hlGroup:"CocPumDeprecated",lnum:o,colStart:b,colEnd:d-1});break}case"menu":{if(s.menuWidth>0){let m=d;p(t.menu??"",s.menuWidth+1),t.menu&&r.push({hlGroup:"CocPumMenu",lnum:o,colStart:m,colEnd:m+Q(t.menu)})}break}case"kind":if(s.kindWidth>0){let{kind:m}=t,b=BF(m,u,c),w=d;if(p(b??"",s.kindWidth+1),b){let x=typeof m=="number"?mke[m]??"CocSymbolDefault":"CocSymbolDefault";r.push({hlGroup:x,lnum:o,colStart:w,colEnd:w+Q(b)})}}break;case"shortcut":if(s.shortcutWidth>0){let m=d,b=St.getShortcut(t.source);p(b?`[${b}]`:"",s.shortcutWidth+1),b&&r.push({hlGroup:"CocPumShortcut",lnum:o,colStart:m,colEnd:m+Q(b)+2})}break}return[g,h]}fillWidth(e,t){let i=t-this.stringWidth(e);return i<=0?e:e+" ".repeat(i)}};function bke(n,e,t){return t.length===0?n:e.length+t.length<=n.length&&n.endsWith(t)?n.slice(0,n.length-t.length):n}function yke(n,e,t,i,r,o){for(let s of C_(e,t,o))n.push({hlGroup:"CocPumSearch",lnum:r,colStart:i+s[0],colEnd:i+s[1]})}var WF=q()("completion"),YF=class{constructor(){this._activated=!1;this.disposables=[];this.complete=null;this.activeItems=[]}init(){this.nvim=v.nvim,this.loadConfiguration(),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),D.onDidChangeActiveTextEditor(e=>{this.loadLocallConfig(e.document)},null,this.disposables),this.mru=new Rb,this.pum=new _b(this.nvim,this.staticConfig,v.env,this.mru),this.floating=new Eb(v.nvim,this.staticConfig),v.nvim.call("coc#ui#check_pum_keymappings",[this.config.autoTrigger],!0),P.on("CursorMovedI",this.onCursorMovedI,this,this.disposables),P.on("InsertLeave",()=>{this.stop(!0)},null,this.disposables),P.on("CompleteStop",e=>{this.stop(!1,e)},null,this.disposables),P.on("InsertEnter",this.onInsertEnter,this,this.disposables),P.on("TextChangedI",this.onTextChangedI,this,this.disposables),P.on("TextChangedP",this.onTextChangedP,this,this.disposables),P.on("MenuPopupChanged",async e=>{var i;if(!this.option)return;this.popupEvent=e,this.floating.cancel();let t=this.selectedItem;!t||!e.move&&((i=this.complete)==null?void 0:i.isCompleting)||await this.floating.resolveItem(t,this.option)},null,this.disposables)}onCursorMovedI(e,t,i){var a;if(clearTimeout(this.triggerTimer),i||!this.option||e!==this.option.bufnr)return;let{linenr:r,colnr:o,col:s}=this.option;if(r===t[0]){if(t[1]==o&&t[1]===Q(this.pretext??"")+1)return;let l=this.document.getline(t[0]-1);if(l.match(/^\s*/)[0]!==this.option.line.match(/^\s*/)[0])return;let u=Gi(l,t[1]-1),c=Gi(l,s);if(c{if(clearTimeout(this.triggerTimer),r.isEmpty){this.stop(!1);return}this.inserted||await this.filterResults()}),await r.doComplete()&&this.stop(!1)}async onTextChangedP(e,t){var i;e===((i=this.option)==null?void 0:i.bufnr)&&(!t.insertChar&&this.complete&&this.complete.cancel(),this.pretext=t.pre)}async onTextChangedI(e,t){let i=v.getDocument(e);if(!i||!i.attached)return;let{option:r}=this;if(r!=null){if(!t.insertChar){let s=tt(r.line,0,r.col);if(this.selectedItem){if(s+this.popupEvent.word==t.pre){this.pretext=t.pre;return}}else if(s+this.pum.search==t.pre)return}if(t.pre.match(/^\s*/)[0]!==r.line.match(/^\s*/)[0]){await this.triggerCompletion(i,t);return}hie(e,this.pretext,t,r)&&this.stop(!0)}if(t.pre===this.pretext)return;clearTimeout(this.triggerTimer);let o=this.pretext=t.pre;if(!t.insertChar){this.complete&&await this.filterResults();return}if(this.config.acceptSuggestionOnCommitCharacter&&this.selectedItem){let s=o.slice(-1),a=this.selectedItem;if(St.shouldCommit(a,s)){WF.debug("commit by commit character.");let{linenr:l,col:u,line:c,colnr:h}=this.option;this.stop(!0);let{word:d}=a,g=`${c.slice(0,u)}${d}${t.insertChar}${c.slice(h-1)}`;await this.nvim.call("coc#util#setline",[l,g]);let p=u+d.length+2;await this.nvim.call("cursor",[l,p]),await i.patchChange();return}}if(!i.chars.isKeywordChar(t.insertChar)){let s=this.getTriggerSources(i,o);if(s.length>0){await this.triggerCompletion(i,t,s);return}}if(!this.complete){await this.triggerCompletion(i,t);return}if(this.complete.isEmpty){this.triggerTimer=setTimeout(async()=>{await this.triggerCompletion(i,t)},200);return}await this.filterResults(t)}getTriggerSources(e,t){let i=e.getVar("disabled_sources",[]);return St.getTriggerSources(t,e.filetype,e.uri,i)}async triggerCompletion(e,t,i){let{minTriggerInputLength:r,asciiCharactersOnly:o,autoTrigger:s}=this.config;if(s==="none")return!1;let{pre:a}=t;if(!i&&!this.shouldTrigger(e,a))return!1;let l=die(e,a,o),u=e.getStartWord(t.line.slice(t.pre.length)),c={input:l,position:ND.Position.create(t.lnum-1,t.pre.length),line:t.line,followWord:u,filetype:e.filetype,linenr:t.lnum,col:t.col-1-Q(l),colnr:t.col,bufnr:e.bufnr,word:l+u,changedtick:t.changedtick,synname:"",filepath:e.schema==="file"?j.parse(e.uri).fsPath:"",triggerCharacter:a.length?a.slice(-1):void 0};return i==null&&l.length0){await this.triggerCompletion(a,e,l);return}}if(s.length==0){let l=o.slice(-1);(!t.isCompleting||l.length===0||!a.chars.isKeywordChar(l))&&this.stop(!0);return}this.activeItems=s,this.pum.show(s,o,this.option)}cancel(){this.complete!=null&&(this.complete.dispose(),this.complete=null),this.triggerTimer!=null&&(clearTimeout(this.triggerTimer),this.triggerTimer=null),this.pretext=void 0,this.activeItems=[],this.popupEvent=void 0}dispose(){U(this.disposables)}},Lb=new YF;jw();var Xu=S(W());xe();ie();var Pd=S(jp()),Bs=S(W());ph();re();xt();so();xe();ie();Kn();xt();so();var ZF=S(W());et();so();function JF(n,e){let t=[];for(let i=e.start.line;i<=e.end.line;i++){let r=n.getline(i)||"",o=i==e.start.line?e.start.character:0,s=i==e.end.line?e.end.character:r.length;o!=s&&t.push(ZF.Range.create(i,o,i,s))}return t}function mie(n,e){let{start:t,end:i}=ax(e),r=t.characterr}};var jb=q()("cursors-session"),Mb=class{constructor(e,t,i){this.nvim=e;this.doc=t;this.config=i;this._onDidCancel=new Bs.Emitter;this._onDidUpdate=new Bs.Emitter;this.onDidCancel=this._onDidCancel.event;this.onDidUpdate=this._onDidUpdate.event;this.disposables=[];this.ranges=[];this.activated=!0;this.changing=!1;t.buffer.setVar("coc_cursors_activated",1,!0);let{cancelKey:r,nextKey:o,previousKey:s}=this.config;this.disposables.push(v.registerLocalKeymap("n",r,()=>{this.cancel()})),this.disposables.push(v.registerLocalKeymap("n",o,async()=>{let a=this.ranges.map(c=>c.range),l=await D.getCursorPosition();for(let c of a)if(Me(c.start,l)>0){await D.moveTo(c.start);return}let u=this.config.wrapscan;a.length&&u&&await D.moveTo(a[0].start)})),this.disposables.push(v.registerLocalKeymap("n",s,async()=>{let a=this.ranges.map(c=>c.range),l=await D.getCursorPosition();for(let c=a.length-1;c>=0;c--){let h=a[c];if(Me(h.end,l)<0){await D.moveTo(h.start);return}}let u=this.config.wrapscan;a.length&&u&&await D.moveTo(a[a.length-1].start)})),this.doc.onDocumentChange(async a=>{await this.onChange(a),this.activated&&!this.changing&&this._onDidUpdate.fire()},this,this.disposables)}addRange(e){let{ranges:t}=this,i=t.findIndex(r=>Gl(r.range,e));i!==-1?t.splice(i,1):(this.createRange(e),t.sort((r,o)=>Me(r.range.start,o.range.start))),this.ranges.length==0?this.cancel():this.doHighlights()}addRanges(e){this.doc._forceSync(),this.ranges=this.ranges.filter(t=>!e.some(i=>rh(i,t.range)));for(let t of e)this.createRange(t);return this.ranges.sort((t,i)=>Me(t.range.start,i.range.start)),this.doHighlights(),!0}createRange(e){let{textDocument:t}=this.doc,{line:i,character:r}=e.start,o=t.getText(e);this.ranges.push(new Uu(i,r,o))}async onChange(e){if(!this.activated||this.changing)return;if(e.contentChanges.length===0){this.doHighlights();return}let t=e.contentChanges[0],{text:i,range:r}=t,o=this.ranges.filter(s=>!(!Gl(r,s.range)||Fw(r,s.range)&&(i.includes(` -`)||!Lt(r))));if(Lt(r)&&o.length>0&&(o=o.slice(0,1)),o.length==0)jb.debug("no affected ranges"),this.ranges.forEach(s=>{s.adjustFromEdit({range:r,newText:i})}),this.doHighlights();else if(o.length==1&&Xt(r,o[0].range)){if(jb.debug("affected single range"),i.includes(` -`)){this.cancel();return}await this.applySingleEdit(o[0],{range:r,newText:i})}else if(!i.length||!this.validChange(r,i)){jb.debug("filter affected ranges.");let s=this.ranges.filter(a=>!o.includes(a));s.length>0?(this.ranges=s,s.forEach(a=>{a.adjustFromEdit({range:r,newText:i})}),this.doHighlights()):this.cancel()}else{jb.debug("Check undo & redo");let s=this.ranges[0],a=this.ranges[this.ranges.length-1],l=e.originalLines.slice(s.line,a.line+1),u=this.doc.textDocument.lines.slice(s.line,a.line+1);this.applyComposedEdit(l,u)}}validChange(e,t){if(Ia(Bs.TextEdit.replace(e,t))!=0||!Xt(e,this.range))return!1;let i=this.ranges[0],r=this.ranges[this.ranges.length-1];return!(e.start.line!=i.position.line||e.end.line!=r.position.line)}get range(){let e=this.ranges[0],t=this.ranges[this.ranges.length-1];return Bs.Range.create(e.position,t.range.end)}doHighlights(){let{nvim:e,ranges:t,doc:i}=this,r=i.buffer,o=[];t.forEach(s=>{i.addHighlights(o,"CocCursorRange",s.range,{combine:!1,start_incl:!0,end_incl:!0})}),o.sort((s,a)=>s.lnum!=a.lnum?s.lnum-a.lnum:s.colStart!=a.colStart?s.colStart-a.colStart:0),r.updateHighlights("cursors",o,{priority:4096}),e.redrawVim()}get currentRanges(){return this.ranges.map(e=>e.range)}cancel(){if(!this.activated)return;jb.debug("cursors cancel");let e=this.doc.buffer;this.activated=!1,this.ranges=[],e.clearNamespace("cursors"),e.setVar("coc_cursors_activated",0,!0),this._onDidUpdate.fire(),this._onDidCancel.fire()}dispose(){!this.doc||(this._onDidCancel.dispose(),this._onDidUpdate.dispose(),U(this.disposables),this.ranges=[],this.doc=null)}async applySingleEdit(e,t){let{doc:i,ranges:r}=this;r.filter(u=>u!==e&&u.position.line==e.position.line).forEach(u=>u.adjustFromEdit(t));let s=HD(e,t.range,t.newText),a=Ib(s);r.forEach(u=>u.applyChange(s));let l=r.filter(u=>u!==e).map(u=>u.textEdit);if(this.changing=!0,await i.applyEdits(l,!0,!0),this.changing=!1,a!=0)for(let u of r){let c=Fb(u,this.ranges,e);u.move(c*a)}this.doHighlights()}applyComposedEdit(e,t){let i=(0,Pd.default)(e[0],t[0]),r=this.ranges[0],o=r.position.character,s=r.position.line,a=r.text.length,l=i[0];if(o>0&&(l[0]!=Pd.default.EQUAL||!l[1].startsWith(e[0].slice(0,o))))return this.cancel(),!1;let u=0,c=!1,h=[];for(let b=0;b0&&(x=x.slice(o)),w==Pd.default.EQUAL){if(u+=x.length,u>a)break}else if(w==Pd.default.DELETE){let T=u;if(u+=x.length,u>a){c=!0;break}h.push({offset:T,remove:x})}else{let T=i[b-1];T&&T[0]==Pd.default.DELETE?h[h.length-1].add=x:h.push({offset:u,add:x})}}if(c||!h.length)return this.cancel(),!1;let d=Vn.create("file:///1","",0,e.join(` -`)),g;if(h.length==1)g={offset:h[0].offset,remove:h[0].remove?h[0].remove.length:0,insert:h[0].add??""};else if(vke(h,a))g={prepend:[h[0].remove?h[0].remove.length:0,h[0].add??""],append:[h[1].remove?h[1].remove.length:0,h[1].add??""]};else{let b=r.text,w="",x="",T=h[0].offset;for(let R of h){if(R.offset>T+w.length){let F=b.slice(T+w.length,R.offset);w+=F,x+=F}R.add&&(x+=R.add),R.remove&&(w+=R.remove)}g={offset:T,remove:w.length,insert:x}}let p=this.ranges.map(b=>{let w=b.position.line-s,{start:x,end:T}=b.range,R=Bs.Range.create(w,x.character,w,T.character);return b.applyChange(g),Bs.TextEdit.replace(R,b.text)});if(Vn.applyEdits(d,p)!==t.join(` -`))return this.cancel(),!1;let m=Ib(g);if(m!=0)for(let b of this.ranges){let w=Fb(b,this.ranges);b.move(w*m)}return this.doHighlights(),!0}};function vke(n,e){return!(n.length!=2||n[0].offset!=0||n[1].offset+(n[1].remove?n[1].remove.length:0)!==e)}var Hct=q()("cursors"),Ob=class{constructor(e){this.nvim=e;this.sessionsMap=new Map;this.disposables=[];this.loadConfiguration(),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),v.onDidCloseTextDocument(t=>{let i=this.getSession(t.bufnr);!i||(this.sessionsMap.delete(t.bufnr),i.cancel())},null,this.disposables)}loadConfiguration(e){if(!e||e.affectsConfiguration("cursors")){let t=v.getConfiguration("cursors",null);this.config=Object.assign(this.config??{},{nextKey:t.get("nextKey",""),previousKey:t.get("previousKey",""),cancelKey:t.get("cancelKey",""),wrapscan:t.get("wrapscan",!0)})}}cancel(e){let t=v.getDocument(e);if(!t)return;let i=this.getSession(t.bufnr);i&&i.cancel()}getSession(e){return this.sessionsMap.get(e)}async isActivated(){let e=await this.nvim.call("bufnr",["%"]);return this.sessionsMap.get(e)!=null}async select(e,t,i){let r=v.getAttachedDocument(e),{nvim:o}=this,s=this.createSession(r),a;if(t=="operator"){let l=await o.eval(`[getpos("'["),getpos("']")]`);if(i=="char"){let u=r.getPosition(l[0][1],l[0][2]),c=r.getPosition(l[1][1],l[1][2]+1),h=JF(r,Xu.Range.create(u,c));s.addRanges(h)}else{let u=[];for(let c=l[0][1]-1;c<=l[1][1]-1;c++){let h=r.getline(c);u.push(Xu.Range.create(c,0,c,h.length))}s.addRanges(u)}}else if(t=="word"){let l=await D.getCursorPosition();if(a=r.getWordRangeAtPosition(l),!a){let u=r.getline(l.line);l.character==u.length?a=Xu.Range.create(l.line,Math.max(0,u.length-1),l.line,u.length):a=Xu.Range.create(l.line,l.character,l.line,l.character+1)}s.addRange(a),await o.command(`silent! call repeat#set("\\(coc-cursors-${t})", -1)`)}else if(t=="position"){let l=await D.getCursorPosition(),u=r.getline(l.line);l.character>=u.length?a=Xu.Range.create(l.line,u.length-1,l.line,u.length):a=Xu.Range.create(l.line,l.character,l.line,l.character+1),s.addRange(a),await o.command(`silent! call repeat#set("\\(coc-cursors-${t})", -1)`)}else if(t=="range"){await o.call("eval",'feedkeys("\\", "in")');let l=await D.getSelectedRange(i);if(!l)return;let u=i==""?mie(r,l):JF(r,l);for(let c of u)s.addRange(c)}else throw new Error(`select kind "${t}" not supported`)}createSession(e){let{bufnr:t}=e,i=this.getSession(t);return i||(i=new Mb(this.nvim,e,this.config),this.sessionsMap.set(t,i),i.onDidCancel(()=>{i.dispose(),this.sessionsMap.delete(t)}),i)}async addRanges(e){let{nvim:t}=this,i=await t.call("bufnr",["%"]),r=v.getAttachedDocument(i);return this.createSession(r).addRanges(e)}reset(){for(let e of this.sessionsMap.values())e.cancel();this.sessionsMap.clear()}};Bu();fe();Wo();var JD=S(W());fe();de();re();xe();ie();var Ed=S(W());Jt();Bu();de();xe();ie();var Uct=q()("handler-codeActions"),Ab=class{constructor(e,t){this.nvim=e;this.handler=t;t.addDisposable(ue.registerCommand("editor.action.organizeImport",async i=>{await this.organizeImport(i)})),ue.titles.set("editor.action.organizeImport","run organize import code action.")}async codeActionRange(e,t,i){let{doc:r}=await this.handler.getCurrentState();await r.synchronize();let o=r.getline(t-1),s=Ed.Range.create(e-1,0,t-1,o.length),a=await this.getCodeActions(r,s,i?[i]:null);if(a=a.filter(c=>!c.disabled),!a||a.length==0){D.showWarningMessage(`No${i?" "+i:""} code action available`);return}let l=await D.showMenuPicker(a.map(c=>c.title),"Choose action"),u=a[l];u&&await this.applyCodeAction(u)}async organizeImport(e){let{doc:t}=await this.handler.getCurrentState();if(e&&t.bufnr!=e)return;await t.synchronize();let i=await this.getCodeActions(t,void 0,[Ed.CodeActionKind.SourceOrganizeImports]);if(i&&i.length){await this.applyCodeAction(i[0]);return}throw new Error("Organize import action not found.")}async getCodeActions(e,t,i){t=t||Ed.Range.create(0,0,e.lineCount,0);let o={diagnostics:Wt.getDiagnosticsInRange(e.textDocument,t)};i&&Array.isArray(i)&&(o.only=i);let s=await this.handler.withRequestToken("code action",a=>_.getCodeActions(e.textDocument,t,o,a));return!s||s.length==0?[]:(s.sort((a,l)=>a.isPreferred&&!l.isPreferred?-1:l.isPreferred&&!a.isPreferred||a.disabled&&!l.disabled?1:l.disabled&&!a.disabled?-1:0),s)}get floatActions(){return v.floatSupported?v.getConfiguration("coc.preferences").get("floatActions",!0):!1}async doCodeAction(e,t){let{doc:i}=await this.handler.getCurrentState(),r;e&&(r=await D.getSelectedRange(e)),await i.synchronize();let o=await this.getCodeActions(i,r,Array.isArray(t)?t:null);if(typeof t=="string"?o=o.filter(l=>l.title==t||l.command&&l.command.title==t):Array.isArray(t)&&(o=o.filter(l=>t.some(u=>l.kind&&l.kind.startsWith(u)))),!o||o.length==0){D.showWarningMessage(`No${t?" "+t:""} code action available`);return}if(t&&o.length==1&&!o[0].disabled){await this.applyCodeAction(o[0]);return}this.floatActions||(o=o.filter(l=>!l.disabled));let s=this.floatActions?await D.showMenuPicker(o.map(l=>({text:l.title,disabled:l.disabled})),"Choose action"):await D.showQuickpick(o.map(l=>l.title)),a=o[s];a&&await this.applyCodeAction(a)}async getCurrentCodeActions(e,t){let{doc:i}=await this.handler.getCurrentState(),r;return e&&(r=await D.getSelectedRange(e)),(await this.getCodeActions(i,r,t)).filter(s=>!s.disabled)}async doQuickfix(){let e=await this.getCurrentCodeActions("currline",[Ed.CodeActionKind.QuickFix]);if(!e||e.length==0){D.showWarningMessage("No quickfix action available");return}await this.applyCodeAction(e[0]),this.nvim.command('silent! call repeat#set("\\(coc-fix-current)", -1)',!0)}async applyCodeAction(e){if(e.disabled)throw new Error(`Action "${e.title}" is disabled: ${e.disabled.reason}`);if(!e.providerId)throw new Error("providerId not found with codeAction");let t=await this.handler.withRequestToken("resolve codeAction",o=>_.resolveCodeAction(e,o)),{edit:i,command:r}=t;i&&await v.applyEdit(i),r&&await ue.execute(r)}};fe();re();ie();var UF=S(Pn()),XF=S(W());Jt();de();xe();ie();var tht=q()("codelens-buffer"),sl,Nb=class{constructor(e,t){this.nvim=e;this.document=t;this.loadConfiguration(),this.resolveCodeLens=(0,UF.default)(()=>{this._resolveCodeLenses()},200),this.debounceFetch=(0,UF.default)(()=>{this.fetchCodeLenses()},100),this.debounceFetch()}loadConfiguration(){let e=v.getConfiguration("codeLens",this.document),t=this.nvim.hasFunction("nvim_buf_set_virtual_text")&&e.get("enable",!1);this.config={enabled:t,position:e.get("position","top"),separator:e.get("separator","\u2023"),subseparator:e.get("subseparator"," ")}}get bufnr(){return this.document.bufnr}onChange(e){e.contentChanges.length===0&&this.codeLenses!=null?this._resolveCodeLenses():(this.cancel(),this.debounceFetch())}get currentCodeLens(){var e;return(e=this.codeLenses)==null?void 0:e.codeLenses}get enabled(){var e;return(e=this.document)!=null&&e.attached?this.config.enabled&&_.hasProvider("codeLens",this.document.textDocument):!1}async forceFetch(){!this.enabled||(await this.document.synchronize(),this.cancel(),await this.fetchCodeLenses())}async fetchCodeLenses(){var t;if(!this.enabled)return;if(!(((t=this.codeLenses)==null?void 0:t.version)==this.document.version)){let{textDocument:i}=this.document,r=i.version,s=(this.tokenSource=new XF.CancellationTokenSource).token;if(s.isCancellationRequested)return;let a=await _.getCodeLens(i,s);if(a=Array.isArray(a)?a.filter(l=>l!=null):[],this.tokenSource=void 0,s.isCancellationRequested||a.length==0)return;this.codeLenses={version:r,codeLenses:a}}await this._resolveCodeLenses()}async _resolveCodeLenses(){if(!this.enabled||!this.codeLenses||this.isChanged)return;let{codeLenses:e}=this.codeLenses,[t,i,r,o]=await this.nvim.eval("[bufnr('%'),line('w0'),line('w$'),line('$')]");if(sl||(sl=await this.nvim.createNamespace("coc-codelens")),!(this.isChanged||t!=this.bufnr)){if(this.resolveTokenSource&&this.resolveTokenSource.cancel(),e=e.filter(s=>{let a=s.range.start.line+1;return a>=i&&a<=r}),e.length){let a=(this.resolveTokenSource=new XF.CancellationTokenSource).token;if(await Promise.all(e.map(l=>_.resolveCodeLens(l,a))),this.resolveTokenSource=void 0,a.isCancellationRequested||this.isChanged)return}r==o&&(r=-1),this.nvim.pauseNotification(),this.clear(i-1,r),this.setVirtualText(e),this.nvim.resumeNotification(!1,!0)}}get isChanged(){if(!this.codeLenses||this.document.dirty)return!0;let{version:e}=this.codeLenses;return this.document.textDocument.version!==e}setVirtualText(e){let{document:t}=this;if(!sl||!t||!e.length)return;let i=new Map,{position:r}=this.config;for(let o of e){let{range:s,command:a}=o;if(!a)continue;let{line:l}=s.start;i.has(l)?i.get(l).push(o):i.set(l,[o])}for(let o of i.keys()){let a=i.get(o).map(c=>c.command);a=a.filter(c=>c&&c.title);let l=[],u=a.length;for(let c=0;c0&&l.unshift([d,"Normal"]),c.setExtMark(sl,o,0,{virt_lines:[l],virt_lines_above:!0})}else c.setExtMark(sl,o,0,{hl_mode:"combine",virt_text:l,virt_text_pos:r})}else this.nvim.call("nvim_buf_set_virtual_text",[this.bufnr,sl,o,l,{}],!0)}}clear(e=0,t=-1){if(!sl)return;this.nvim.createBuffer(this.bufnr).clearNamespace(sl,e,t)}async doAction(e){var i;let t=wke(e,(i=this.codeLenses)==null?void 0:i.codeLenses);if(t.length==1)await ue.execute(t[0]);else if(t.length>1){let r=await D.showMenuPicker(t.map(o=>o.title));r!=-1&&await ue.execute(t[r])}}cancel(){this.resolveCodeLens.clear(),this.debounceFetch.clear(),this.resolveTokenSource&&(this.resolveTokenSource.cancel(),this.resolveTokenSource.dispose(),this.resolveTokenSource=null),this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource.dispose(),this.tokenSource=null)}dispose(){this.cancel(),this.codeLenses=void 0}};function wke(n,e){if(!(e!=null&&e.length))return[];let t=[];for(let i of e){let{range:r,command:o}=i;!o||n==r.start.line&&t.push(o)}return t}var aht=q()("codelens"),Hb=class{constructor(e){this.nvim=e;this.disposables=[];v.onDidChangeConfiguration(t=>{for(let i of this.buffers.items)t.affectsConfiguration("codeLens",i.document)&&i.loadConfiguration()},this,this.disposables),this.buffers=v.registerBufferSync(t=>{if(t.buftype=="")return new Nb(e,t)}),this.disposables.push(this.buffers),this.listen()}listen(){P.on("CursorMoved",e=>{let t=this.buffers.getItem(e);t&&t.resolveCodeLens()},null,this.disposables),P.on("CursorHold",async e=>{let t=this.buffers.getItem(e);t&&await t.forceFetch()},this,this.disposables)}async checkProvider(){for(let e of this.buffers.items)await e.forceFetch()}async doAction(){let[e,t]=await this.nvim.eval('[bufnr("%"),line(".")-1]'),i=this.buffers.getItem(e);await(i==null?void 0:i.doAction(t))}dispose(){U(this.disposables)}};var xie=S(W());Jt();Wo();de();re();function GF(n){return n.length==1?`0${n}`:n}function qb(n){let e=xke(n);return`${GF(e.red.toString(16))}${GF(e.green.toString(16))}${GF(e.blue.toString(16))}`}function xke(n){let{red:e,green:t,blue:i}=n;return{red:Math.round(e*255),green:Math.round(t*255),blue:Math.round(i*255)}}function bie(n){let e=[n.red,n.green,n.blue],t=[];for(let r=0;r{this.doHighlight().logError()},300),this.highlight()}get enabled(){let{filetypes:e}=this.config,t=v.getDocument(this.bufnr);return t?e.includes("*")?!0:_.hasProvider("documentColor",t.textDocument)?e.includes(t.filetype):!1:!1}onChange(){this.cancel(),this.highlight()}get buffer(){return this.nvim.createBuffer(this.bufnr)}get colors(){return this._colors}hasColor(){return this._colors.length>0}async doHighlight(){if(!this.enabled)return;let{nvim:e}=this,t=v.getDocument(this.bufnr);this.tokenSource=new wie.CancellationTokenSource;let{token:i}=this.tokenSource,r;if(r=await _.provideDocumentColors(t.textDocument,i),i.isCancellationRequested)return;r=r||[],r.sort((a,l)=>Me(a.range.start,l.range.start)),this._colors=r;let o=[];r.forEach(a=>{let l=Cke(a.color);t.addHighlights(o,l,a.range,{combine:!1})});let s=await D.diffHighlights(this.bufnr,yie,o);i.isCancellationRequested||!s||(e.pauseNotification(),this.defineColors(r),e.resumeNotification(!1,!0),await D.applyDiffHighlights(this.bufnr,yie,this.config.highlightPriority,s,!0))}defineColors(e){for(let t of e){let i=qb(t.color);this.usedColors.has(i)||(this.nvim.command(`hi BG${i} guibg=#${i} guifg=#${bie(t.color)?"ffffff":"000000"}`,!0),this.usedColors.add(i))}}hasColorAtPosition(e){return this.colors.some(t=>ft(e,t.range)==0)}clearHighlight(){this.highlight.clear(),this._colors=[],this.buffer.clearNamespace("color")}cancel(){this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource.dispose(),this.tokenSource=null)}dispose(){this._colors=[],this.highlight.clear(),this.cancel()}};function Cke(n){return`BG${qb(n)}`}var Fht=q()("colors-index"),Wb=class{constructor(e,t){this.nvim=e;this.handler=t;this.disposables=[];this.getConfiguration(),v.onDidChangeConfiguration(this.getConfiguration,this,this.disposables),D.onDidChangeActiveTextEditor(()=>{this.getConfiguration()},null,this.disposables);let i=new Set;this.highlighters=v.registerBufferSync(r=>new Bb(this.nvim,r.bufnr,this.config,i)),je.onDidActiveExtension(()=>{this.highlightAll()},null,this.disposables),this.disposables.push(ue.registerCommand("editor.action.pickColor",()=>this.pickColor())),ue.titles.set("editor.action.pickColor","pick color from system color picker when possible."),this.disposables.push(ue.registerCommand("editor.action.colorPresentation",()=>this.pickPresentation())),ue.titles.set("editor.action.colorPresentation","change color presentation.")}getConfiguration(e){if(!e||e.affectsConfiguration("colors")){let t=v.getConfiguration("colors");this.config=Object.assign(this.config||{},{filetypes:t.get("filetypes",[]),highlightPriority:t.get("highlightPriority",1e3)})}}async pickPresentation(){let{doc:e}=await this.handler.getCurrentState();this.handler.checkProvier("documentColor",e.textDocument);let t=await this.getColorInformation(e.bufnr);if(!t)return void D.showWarningMessage("Color not found at current position");let i=new xie.CancellationTokenSource,r=await _.provideColorPresentations(t,e.textDocument,i.token);if(!(r!=null&&r.length))return;let o=await D.showMenuPicker(r.map(c=>c.label),"choose color:");if(o==-1)return;let s=r[o],{textEdit:a,additionalTextEdits:l,label:u}=s;a||(a={range:t.range,newText:u}),await e.applyEdits([a]),l&&await e.applyEdits(l)}async pickColor(){let{doc:e}=await this.handler.getCurrentState();this.handler.checkProvier("documentColor",e.textDocument);let t=await this.getColorInformation(e.bufnr);if(!t)return void D.showWarningMessage("Color not found at current position");let{color:i}=t,r=[(i.red*255).toFixed(0),(i.green*255).toFixed(0),(i.blue*255).toFixed(0)],o=await this.nvim.call("coc#color#pick_color",[r]);if(!o)return;let s=qb({red:o[0]/65535,green:o[1]/65535,blue:o[2]/65535,alpha:1});await e.applyEdits([{range:t.range,newText:`#${s}`}])}isEnabled(e){let t=this.highlighters.getItem(e);return t!=null&&t.enabled===!0}clearHighlight(e){let t=this.highlighters.getItem(e);t&&t.clearHighlight()}hasColor(e){let t=this.highlighters.getItem(e);return t?t.hasColor():!1}hasColorAtPosition(e,t){let i=this.highlighters.getItem(e);return i?i.hasColorAtPosition(t):!1}highlightAll(){for(let e of this.highlighters.items)e.highlight()}async doHighlight(e){let t=this.highlighters.getItem(e);t&&await t.doHighlight()}async getColorInformation(e){let t=this.highlighters.getItem(e);if(!t)return null;let i=await D.getCursorPosition();for(let r of t.colors){let{range:o}=r,{start:s,end:a}=o;if(i.line==s.line&&i.character>=s.character&&i.character<=a.character)return r}return null}dispose(){this.highlighters.dispose(),U(this.disposables)}};Jt();mD();var Aht=q()("handler-commands"),Yb=class{constructor(e,t){this.nvim=e;this.env=t;for(let i of t.vimCommands)this.addVimCommand(i)}addVimCommand(e){let t=`vim.${e.id}`;ue.registerCommand(t,()=>{this.nvim.command(e.cmd,!0),this.nvim.redrawVim()}),e.title&&ue.titles.set(t,e.title)}getCommandList(){return ue.commandList.map(e=>e.id)}async repeat(){await ue.repeatCommand()}async runCommand(e,...t){if(e)return await ue.fireCommand(e,...t);await Bi.start(["commands"])}getCommands(){let e=ue.commandList,t=[],{titles:i}=ue;for(let r of e)t.push({id:r.id,title:i.get(r.id)||""});return t}};de();var Zb=class{constructor(e,t){this.nvim=e;this.handler=t}async fold(e){let{doc:t,winid:i}=await this.handler.getCurrentState();this.handler.checkProvier("foldingRange",t.textDocument),await t.synchronize();let r=this.nvim.createWindow(i),o=await this.nvim.eval("&foldlevel"),s=await this.handler.withRequestToken("foldingrange",a=>_.provideFoldingRanges(t.textDocument,{},a),!0);if(!s||!s.length)return!1;e&&(s=s.filter(a=>a.kind==e)),s.sort((a,l)=>l.startLine-a.startLine),this.nvim.pauseNotification(),r.setOption("foldmethod","manual",!0),this.nvim.command("normal! zE",!0);for(let a of s){let{startLine:l,endLine:u}=a,c=`${l+1}, ${u+1}fold`;this.nvim.command(c,!0)}return r.setOption("foldenable",!0,!0),r.setOption("foldlevel",o,!0),await this.nvim.resumeNotification(!0),!0}};var Ws=S(W());Jt();fe();de();Yu();_e();xe();ie();var qD=q()("handler-format"),Cie=new Map([["<",">"],[">","<"],["{","}"],["[","]"],["(",")"]]),Jb=class{constructor(e,t){this.nvim=e;this.handler=t;this.getConfiguration(),t.addDisposable(v.onDidChangeConfiguration(this.getConfiguration,this)),t.addDisposable(D.onDidChangeActiveTextEditor(()=>{this.getConfiguration()})),t.addDisposable(v.onWillSaveTextDocument(i=>{let{languageId:r,uri:o}=i.document,s=v.getConfiguration("coc.preferences",o).get("formatOnSaveFiletypes",[]);if(s.includes(r)||s.includes("*")){let a=async()=>{if(!_.hasFormatProvider(i.document)){qD.warn(`Format provider not found for ${i.document.uri}`);return}let l=await v.getFormatOptions(i.document.uri),u=new Ws.CancellationTokenSource,c,h=new Promise(p=>{c=setTimeout(()=>{qD.warn(`Format on save ${i.document.uri} timeout after 0.5s`),u.cancel(),p(void 0)},500)}),d=_.provideDocumentFormattingEdits(i.document,l,u.token),g=await Promise.race([h,d]);return clearTimeout(c),Array.isArray(g)?g:void 0};i.waitUntil(a())}})),t.addDisposable(P.on("Enter",async i=>{let r=await P.race(["CursorMovedI"],100);r.args&&r.args[0]===i&&(qD.debug("handleEnter"),await this.handleEnter(i))})),t.addDisposable(P.on("TextInsert",async(i,r,o)=>{P.pumvisible||await this.tryFormatOnType(o,i)})),t.addDisposable(ue.registerCommand("editor.action.formatDocument",async i=>{let r=i?v.getDocument(i):(await this.handler.getCurrentState()).doc;await this.documentFormat(r)})),ue.titles.set("editor.action.formatDocument","Format Document")}getConfiguration(e){var t;if(!e||e.affectsConfiguration("coc.preferences")){let i=(t=D.activeTextEditor)==null?void 0:t.document,r=v.getConfiguration("coc.preferences",i);this.preferences={formatOnType:r.get("formatOnType",!1),formatOnTypeFiletypes:r.get("formatOnTypeFiletypes",[]),bracketEnterImprove:r.get("bracketEnterImprove",!0)}}}async tryFormatOnType(e,t,i=!1){if(!e||SB(e)||!this.preferences.formatOnType||ai.getSession(t)!=null)return;let r=v.getDocument(t);if(!r||!r.attached)return;let o=this.preferences.formatOnTypeFiletypes;if(o.length>0&&!o.includes(r.filetype)&&!o.includes("*"))return;if(!_.hasProvider("formatOnType",r.textDocument)){qD.warn(`Format on type provider not found for buffer: ${r.uri}`);return}if(!_.canFormatOnType(e,r.textDocument))return;let s,a=await this.handler.withRequestToken("Format on type",async l=>{s=await D.getCursorPosition();let u=r.getline(s.line-1);if(!(i&&/^\s*$/.test(u)))return await r.synchronize(),await _.provideDocumentOnTypeEdits(e,r.textDocument,s,l)});!a||!a.length||await r.applyEdits(a,!1,!0)}async formatCurrentBuffer(){let{doc:e}=await this.handler.getCurrentState();return await this.documentFormat(e)}async formatCurrentRange(e){let{doc:t}=await this.handler.getCurrentState();return await this.documentRangeFormat(t,e)}async documentFormat(e){if(await e.synchronize(),!_.hasFormatProvider(e.textDocument))throw new Error(`Format provider not found for buffer: ${e.bufnr}`);let t=await v.getFormatOptions(e.uri),i=await this.handler.withRequestToken("format",r=>_.provideDocumentFormattingEdits(e.textDocument,t,r));return i&&i.length>0?(await e.applyEdits(i,!1,!0),!0):!1}async handleEnter(e){let{nvim:t}=this,{bracketEnterImprove:i}=this.preferences;if(await this.tryFormatOnType(` -`,e),i){let r=await t.call("line",".")-1,o=v.getDocument(e);if(!o)return;await o.patchChange();let s=o.getline(r-1),a=o.getline(r),l=s[s.length-1];if(l&&Cie.has(l)){let u=a.trim()[0];if(u&&Cie.get(l)==u){let c=[],h=await v.getFormatOptions(o.uri),d=h.insertSpaces?" ".repeat(h.tabSize):" ",g=a.match(/^\s*/)[0],p=Ws.Position.create(r-1,s.length);if(o.filetype=="vim"){let f=` -`+g+d;c.push({range:Ws.Range.create(r,g.length,r,g.length),newText:" \\ "}),f=f+"\\ ",c.push({range:Ws.Range.create(p,p),newText:f}),await o.applyEdits(c),await D.moveTo(Ws.Position.create(r,f.length-1))}else await t.eval(`feedkeys("\\O", 'in')`)}}}}async documentRangeFormat(e,t){this.handler.checkProvier("formatRange",e.textDocument),await e.synchronize();let i;if(t){if(i=await D.getSelectedRange(t),!i)return-1}else{let[s,a,l]=await this.nvim.eval("[v:lnum,v:count,mode()]");if(a==0||l=="i"||l=="R")return-1;i=Ws.Range.create(s-1,0,s-1+a,0)}let r=await v.getFormatOptions(e.uri),o=await this.handler.withRequestToken("Format range",s=>_.provideDocumentRangeFormattingEdits(e.textDocument,i,r,s));return o&&o.length>0?(await e.applyEdits(o,!1,!0),0):-1}};var Gu=S(W());fe();de();re();xe();ie();var rdt=q()("documentHighlight"),$b=class{constructor(e,t){this.nvim=e;this.handler=t;this.disposables=[];this.highlights=new Map;P.on(["CursorMoved","CursorMovedI"],()=>{this.cancel(),this.clearHighlights()},null,this.disposables),this.loadConfiguration(),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),D.onDidChangeActiveTextEditor(()=>{this.loadConfiguration()},null,this.disposables)}loadConfiguration(e){let t=v.getConfiguration("documentHighlight",this.handler.uri);(!e||e.affectsConfiguration("documentHighlight"))&&(this.config=Object.assign(this.config||{},{priority:t.get("priority",-1),timeout:t.get("timeout",300)}))}isEnabled(e,t){let i=v.getDocument(e);return!(!i||!i.attached||t||!_.hasProvider("documentHighlight",i.textDocument))}clearHighlights(){if(this.highlights.size!=0){for(let e of this.highlights.keys())this.nvim.createWindow(e).clearMatchGroup("^CocHighlight");this.highlights.clear()}}async highlight(){let{nvim:e}=this;this.cancel();let[t,i,r,o]=await e.eval(`[bufnr("%"),win_getid(),coc#cursor#position(),get(b:,'coc_cursors_activated',0)]`);if(!this.isEnabled(t,o))return;let s=v.getDocument(t),a=await this.getHighlights(s,Gu.Position.create(r[0],r[1]));if(!a)return;let l={};for(let c of a){if(!c.range)continue;let h=c.kind==Gu.DocumentHighlightKind.Text?"CocHighlightText":c.kind==Gu.DocumentHighlightKind.Read?"CocHighlightRead":"CocHighlightWrite";l[h]=l[h]||[],l[h].push(c.range)}let u=e.createWindow(i);e.pauseNotification(),u.clearMatchGroup("^CocHighlight");for(let c of Object.keys(l))u.highlightRanges(c,l[c],this.config.priority,!0);e.resumeNotification(!0,!0),this.highlights.set(i,a)}async getSymbolsRanges(){let{doc:e,position:t}=await this.handler.getCurrentState();this.handler.checkProvier("documentHighlight",e.textDocument);let i=await this.getHighlights(e,t);return i?i.map(r=>r.range):null}hasHighlights(e){return this.highlights.get(e)!=null}async getHighlights(e,t){let r=e.getline(t.line)[t.character];if(!r||!e.isWord(r))return null;await e.synchronize(),this.cancel();let o=this.tokenSource=new Gu.CancellationTokenSource,s=this.timer=setTimeout(()=>{o.token.isCancellationRequested||o.cancel()},this.config.timeout),a=await _.getDocumentHighLight(e.textDocument,t,o.token);return clearTimeout(s),o.token.isCancellationRequested?null:a}cancel(){this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource.dispose(),this.tokenSource=null)}dispose(){this.timer&&clearTimeout(this.timer),this.cancel(),this.highlights.clear(),U(this.disposables)}};var Sie=S(require("fs")),Or=S(W());Pe();de();re();nt();$e();xe();ie();var fdt=q()("handler-hover"),Xb=class{constructor(e,t){this.nvim=e;this.handler=t;this.disposables=[];this.documentLines=[];this.hasProvider=!1;this.loadConfiguration(),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),this.hoverFactory=D.createFloatFactory({modes:["n"],autoHide:this.config.autoHide}),this.disposables.push(this.hoverFactory),D.onDidChangeActiveTextEditor(()=>{this.loadConfiguration()},null,this.disposables)}registerProvider(){if(this.hasProvider)return;this.hasProvider=!0;let{nvim:e}=this,t={onDidChange:null,provideTextDocumentContent:async()=>(e.pauseNotification(),e.command("setlocal conceallevel=2 nospell nofoldenable wrap",!0),e.command("setlocal bufhidden=wipe nobuflisted",!0),e.command("setfiletype markdown",!0),e.command(`if winnr('j') != winnr('k') | exe "normal! z${Math.min(this.documentLines.length,this.config.previewMaxHeight)}\\" | endif`,!0),await e.resumeNotification(),this.documentLines.join(` -`))};this.disposables.push(v.registerTextDocumentContentProvider("coc",t))}loadConfiguration(e){if(!e||e.affectsConfiguration("hover")){let t=v.getConfiguration("hover",this.handler.uri);this.config={floatConfig:t.get("floatConfig",{}),autoHide:t.get("autoHide",!0),target:t.get("target","float"),previewMaxHeight:t.get("previewMaxHeight",12)},this.config.target=="preview"&&this.registerProvider()}}async onHover(e){let{doc:t,position:i,winid:r}=await this.handler.getCurrentState();e=="preview"&&this.registerProvider(),this.handler.checkProvier("hover",t.textDocument),await t.synchronize();let o=await this.handler.withRequestToken("hover",a=>_.getHover(t.textDocument,i,a),!0);if(o==null||!o.length)return!1;let s=o.find(a=>Or.Range.is(a.range));if(s!=null&&s.range){let a=this.nvim.createWindow(r);a.highlightRanges("CocHoverRange",[s.range],99,!0),this.timer=setTimeout(()=>{a.clearMatchGroup("CocHoverRange"),this.nvim.redrawVim()},500)}return await this.previewHover(o,e),!0}async definitionHover(e){let{doc:t,position:i,winid:r}=await this.handler.getCurrentState();e=="preview"&&this.registerProvider(),this.handler.checkProvier("hover",t.textDocument),await t.synchronize();let o=await this.handler.withRequestToken("hover",l=>_.getHover(t.textDocument,i,l),!0);if(Je(o))return!1;let s=await this.handler.withRequestToken("definitionHover",l=>_.getDefinitionLinks(t.textDocument,i,l),!1);await Ske(o,s,t.filetype);let a=o.find(l=>Or.Hover.is(l)&&Or.Range.is(l.range));if(a){let l=this.nvim.createWindow(r);l.highlightRanges("CocHoverRange",[a.range],99,!0),this.timer=setTimeout(()=>{l.clearMatchGroup("CocHoverRange"),this.nvim.redrawVim()},500)}return await this.previewHover(o,e),!0}async previewHover(e,t){let i=[];t=t??this.config.target;let r=t==="preview";for(let s of e){if(Dke(s)){i.push(s);continue}let{contents:a}=s;if(Array.isArray(a))for(let l of a)typeof l=="string"?Ub(i,l,"markdown",r):Ub(i,l.value,l.language,r);else Or.MarkedString.is(a)?typeof a=="string"?Ub(i,a,"markdown",r):Ub(i,a.value,a.language,r):Or.MarkupContent.is(a)&&Ub(i,a.value,Wg(a)?"markdown":"txt",r)}if(t=="float"){await this.hoverFactory.show(i,this.config.floatConfig);return}let o=i.reduce((s,a)=>{let l=a.content.split(/\r?\n/);return s.length>0&&s.push(""),s.push(...l),s},[]);if(t=="echo"){let s=o.join(` -`).trim();await this.nvim.call("coc#ui#echo_hover",[s])}else this.documentLines=o,await this.nvim.command("noswapfile pedit coc://document")}async getHover(){let e=[],{doc:t,position:i}=await this.handler.getCurrentState();this.handler.checkProvier("hover",t.textDocument),await t.synchronize();let r=new Or.CancellationTokenSource,o=await _.getHover(t.textDocument,i,r.token);for(let s of o){let{contents:a}=s;Array.isArray(a)?a.forEach(l=>{e.push(typeof l=="string"?l:l.value)}):Or.MarkupContent.is(a)?e.push(a.value):e.push(typeof a=="string"?a:a.value)}return e=e.filter(s=>s!=null&&s.length>0),e}dispose(){this.timer&&clearTimeout(this.timer),U(this.disposables)}};async function Ske(n,e,t){for(let i of e){if(!(i!=null&&i.targetRange))continue;let{start:r,end:o}=i.targetRange,s=o.line-r.line>=100?r.line+100:o.character==0?o.line-1:o.line,a=await Tke(i.targetUri,r.line,s);if(a.length){let l=a[0].match(/^\s*/)[0];l&&(a=a.map(u=>u.startsWith(l)?u.substring(l.length):u)),n.push({content:a.join(` -`),filetype:t})}}}function Ub(n,e,t,i=!1){let r=e.trim();!r.length||(i&&t!=="markdown"&&(r="``` "+t+` -`+r+"\n```"),n.push({content:r,filetype:t}))}function Dke(n){return n?typeof n.filetype=="string"&&typeof n.content=="string":!1}async function Tke(n,e,t){let i=v.getDocument(n);if(i)return i.getLines(e,t+1);let r=j.parse(n).fsPath;return Sie.default.existsSync(r)?await Sa(r,e,t):[]}var zu=S(W());fe();de();re();xt();xe();ie();var Ddt=q()("handler-links"),kke=/CocAction(Async)?\(["']openLink["']\)/,Gb=class{constructor(e,t){this.nvim=e;this.handler=t;this.disposables=[];this.setConfiguration(),v.onDidChangeConfiguration(this.setConfiguration,this,this.disposables),this.floatFactory=D.createFloatFactory({}),P.on("CursorHold",async()=>{!this._tooltip||!e.hasFunction("nvim_get_keymap")||await this.showTooltip()},null,this.disposables),P.on(["CursorMoved","InsertEnter"],()=>{this.cancel()},null,this.disposables)}setConfiguration(e){if(!e||e.affectsConfiguration("links")){let t=v.getConfiguration("links",null);this._tooltip=t.get("tooltip",!1)}}async showTooltip(){let{nvim:e,floatFactory:t}=this,r=(await e.getKeymap("n")).find(u=>kke.test(u.rhs)),o=r?r.lhs:void 0,s=await this.getCurrentLink();if(!s||!s.target)return;let a="";if(s.tooltip&&(a=s.tooltip+" "),o&&(a+=`Press "${o}" to open link`),!a.length)return;let l={content:a,filetype:"txt"};await t.show([l])}async getLinks(){let{doc:e}=await this.handler.getCurrentState();if(!_.hasProvider("documentLink",e.textDocument))return[];let t=this.tokenSource=new zu.CancellationTokenSource,i=await _.getDocumentLinks(e.textDocument,t.token);return t.token.isCancellationRequested?[]:i}async openLink(e){if(!e.target)throw new Error("Failed to resolve link target");await v.openResource(e.target)}async getCurrentLink(){let e=await this.getLinks(),t=await D.getCursorPosition();if(e&&e.length){for(let a of e)if(ft(t,a.range)==0){if(!a.target){let l=this.tokenSource=this.tokenSource||new zu.CancellationTokenSource;if(a=await _.resolveDocumentLink(a,this.tokenSource.token),!a.target||l.token.isCancellationRequested)continue}return a}}let i=await this.nvim.call("getline",["."]),r=/\w+?:\/\/[^)\]'" ]+/g,o,s;for(;(o=r.exec(i))!==null;){let a=o.index;if(a<=t.character&&a+o[0].length>=t.character){s=zu.DocumentLink.create(zu.Range.create(t.line,a,t.line,a+o[0].length),o[0]);break}}return s}async openCurrentLink(){let e=await this.getCurrentLink();return e?(await this.openLink(e),!0):!1}cancel(){this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource=null)}dispose(){var e;(e=this.floatFactory)==null||e.dispose(),U(this.disposables)}};var Yn=S(W());Pe();de();Hm();et();ie();var Fdt=q()("handler-hover"),zb=class{constructor(e,t){this.nvim=e;this.handler=t}async request(e,t){let{doc:i,position:r}=await this.handler.getCurrentState();return this.handler.checkProvier(e,i.textDocument),await i.synchronize(),await this.handler.withRequestToken(e,o=>t(i.textDocument,r,o),!0)}async definitions(){let{doc:e,position:t}=await this.handler.getCurrentState();this.handler.checkProvier("definition",e.textDocument),await e.synchronize();let i=new Yn.CancellationTokenSource;return _.getDefinition(e.textDocument,t,i.token)}async declarations(){let{doc:e,position:t}=await this.handler.getCurrentState();this.handler.checkProvier("declaration",e.textDocument),await e.synchronize();let i=new Yn.CancellationTokenSource;return _.getDeclaration(e.textDocument,t,i.token)}async typeDefinitions(){let{doc:e,position:t}=await this.handler.getCurrentState();this.handler.checkProvier("typeDefinition",e.textDocument),await e.synchronize();let i=new Yn.CancellationTokenSource;return _.getTypeDefinition(e.textDocument,t,i.token)}async implementations(){let{doc:e,position:t}=await this.handler.getCurrentState();this.handler.checkProvier("implementation",e.textDocument),await e.synchronize();let i=new Yn.CancellationTokenSource;return _.getImplementation(e.textDocument,t,i.token)}async references(e){let{doc:t,position:i}=await this.handler.getCurrentState();this.handler.checkProvier("reference",t.textDocument),await t.synchronize();let r=new Yn.CancellationTokenSource;return _.getReferences(t.textDocument,{includeDeclaration:!e},i,r.token)}async gotoDefinition(e){let t=await this.request("definition",(i,r,o)=>_.getDefinition(i,r,o));return await this.handleLocations(t,e),t?t.length>0:!1}async gotoDeclaration(e){let t=await this.request("declaration",(i,r,o)=>_.getDeclaration(i,r,o));return await this.handleLocations(t,e),t?t.length>0:!1}async gotoTypeDefinition(e){let t=await this.request("typeDefinition",(i,r,o)=>_.getTypeDefinition(i,r,o));return await this.handleLocations(t,e),t?t.length>0:!1}async gotoImplementation(e){let t=await this.request("implementation",(i,r,o)=>_.getImplementation(i,r,o));return await this.handleLocations(t,e),t?t.length>0:!1}async gotoReferences(e,t=!0){let i=await this.request("reference",(r,o,s)=>_.getReferences(r,{includeDeclaration:t},o,s));return await this.handleLocations(i,e),i?i.length>0:!1}async getTagList(){let{doc:e,position:t}=await this.handler.getCurrentState(),i=await this.nvim.call("expand","");if(!i||!_.hasProvider("definition",e.textDocument))return null;let r=new Yn.CancellationTokenSource,o=await _.getDefinition(e.textDocument,t,r.token);return!o||!o.length?null:o.map(s=>{let a=j.parse(s.uri),l=a.scheme=="file"?a.fsPath:a.toString();return{name:i,cmd:`keepjumps ${s.range.start.line+1} | normal ${s.range.start.character+1}|`,filename:l}})}async findLocations(e,t,i,r=!1){let{doc:o,position:s}=await this.handler.getCurrentState();i=i||{},Object.assign(i,{textDocument:{uri:o.uri},position:s});let a=await yn.sendRequest(e,t,i),l=this.toLocations(a);return await this.handleLocations(l,r),l.length>0}toLocations(e){let t=[];if(e&&Qr(e,"location")&&Qr(e,"children")){let i=r=>{if(!!r){if(Yn.Location.is(r.location))t.push(r.location);else if(Yn.LocationLink.is(r.location)){let o=r.location;t.push({uri:o.targetUri,range:o.targetSelectionRange,targetRange:o.targetRange})}if(r.children&&r.children.length)for(let o of r.children)i(o)}};return i(e),t}if(Yn.Location.is(e))t.push(e);else if(Yn.LocationLink.is(e))t.push({uri:e.targetUri,range:e.targetSelectionRange,targetRange:e.targetRange});else if(Array.isArray(e))for(let i of e)Yn.Location.is(i)?t.push(i):i&&typeof i.targetUri=="string"&&t.push({uri:i.targetUri,range:i.targetSelectionRange,targetRange:i.targetRange});return t}async handleLocations(e,t){if(!e)return;let i=e.length;if(i!=0)if(i==1&&t!==!1){let{uri:r,range:o}=e[0];await v.jumpTo(r,o.start,t)}else await v.showLocations(e)}};var _d=S(W());Pe();fe();de();re();$e();so();ie();var Rd=S(jp()),Qb=S(require("path")),st=S(W());ph();Pe();Ta();re();$e();Cs();ds();et();xt();_e();so();xe();ie();et();var Kb=class{constructor(){this.stack=[]}add(e){let t=new Map;for(let i of e)t.set(i.lnum,i);this.stack.push(t)}checkInsert(e){if(!this.stack.length)return;let t=this.stack[this.stack.length-1],i=Array.from(t.keys()).sort((r,o)=>r-o);if(!!ye(i,e))return this.stack.pop(),Array.from(t.values())}};var Pke=q()("handler-refactorBuffer"),yo="\u3000",Vb=class{constructor(e,t,i,r,o){this.bufnr=e;this.srcId=t;this.nvim=i;this.config=r;this.opts=o;this._disposed=!1;this._fileItems=[];this.mutex=new Di;this.disposables=[];this.matchIds=new Set;this.changing=!1;this.changes=new Kb,this.disposables.push(v.registerLocalKeymap("n","",this.splitOpen.bind(this),!0)),r.showMenu&&this.disposables.push(v.registerLocalKeymap("n",r.showMenu,this.showMenu.bind(this),!0)),v.onDidChangeTextDocument(this.onDocumentChange,this,this.disposables)}async showMenu(){let e=await D.showMenuPicker(["Tab open","Remove block"]);if(e==-1)return;let t=await this.searchCurrentRange();if(!!t){if(e==0){let r=(await this.nvim.eval("strpart(getline('.'), 0 ,col('.') - 1)")).length,o=this.getAbsolutePath(t.filepath);this.nvim.call("coc#util#jump",["tabe",o,[t.line,r]],!0)}if(e==1){let i=this.getDeleteRange(t);await this.document.applyEdits([st.TextEdit.del(i)])}}}get fileItems(){return this._fileItems}getFileItem(e){let t=j.parse(e).fsPath;return this._fileItems.find(i=>ni(i.filepath,t))}getFileRange(e){for(let t of this._fileItems)for(let i of t.ranges)if(i.lnum==e)return Object.assign(fn(i,["highlights"]),{filepath:t.filepath});throw new Error(`File range not found at lnum: ${e}`)}onChange(e){if(this.changing)return;if(e.contentChanges.length===0){this.highlightLineNr(),this.nvim.redrawVim();return}let{nvim:t}=this;e=Rke(e);let i=e.contentChanges[0],{original:r}=e;i.range.end.line>2&&t.call("setbufvar",[e.bufnr,"&modified",1],!0);let{range:o,text:s}=i;if(Ia(st.TextEdit.replace(o,s))==0)return;let l=[st.TextEdit.replace(o,s)],u=[];if(!Lt(o)&&!s.includes("\u3000")){let c=o.start.line,h=[],d=r.split(/\r?\n/);for(let g=0;g1&&p.includes("\u3000")&&h.push(c+g+1)}if(h.length){let g=h.map(p=>this.getFileRange(p));for(let p of this._fileItems)p.ranges=p.ranges.filter(f=>!h.includes(f.lnum));this.changes.add(g)}}else if(Lt(o)&&s.includes("\u3000")){let c=s.split(/\r?\n/),h=[],d=o.start.line;for(let g=0;g1&&p.includes("\u3000")&&h.push(d+g+1)}if(h.length){let g=this.changes.checkInsert(h);g&&(u=g)}}else s.includes("\u3000")&&(l=this.diffChanges(r,s),l.forEach(c=>{c.range=tY(c.range,o.start)}));this.adjustLnums(l),t.pauseNotification(),this.highlightLineNr(),t.resumeNotification(!0,!0),u.length&&u.forEach(c=>{this._fileItems.find(d=>d.filepath==c.filepath).ranges.push(c)})}diffChanges(e,t){let i=[],r=(0,Rd.default)(e,t),o=0,s=Vn.create("file:///1","",0,e);for(let a=0;a=c.start+c.lines.length)continue;if(r.end.line!l.includes(c))),this._fileItems=this._fileItems.filter(u=>u.ranges&&u.ranges.length>0),a.length&&(this.adjustLnums(a),this.changing=!0,await this.document.applyEdits(a),this.changing=!1),this.nvim.pauseNotification(),this.highlightLineNr(),this.buffer.setOption("modified",!1,!0),await this.nvim.resumeNotification(!0)}adjustLnums(e){for(let t of this._fileItems)for(let i of t.ranges){let r=i.lnum-1;i.lnum+=OR(st.Position.create(r,0),e)}}async getFileChanges(){let e=[],t=await this.buffer.lines;t.push(yo);let i=[],r,o;for(let s=0;s1){let l=a.match(/^\u3000(.*)/);l&&(r=this.getAbsolutePath(l[1].replace(/\s+$/,"")),o=s+1,i=[])}}else i.push(a)}return e}async splitOpen(){let{nvim:e}=this,i=await e.createWindow(this.opts.fromWinid).valid,o=(await e.eval("strpart(getline('.'), 0 ,col('.') - 1)")).length,s=await this.searchCurrentRange();if(s){let a=this.getAbsolutePath(s.filepath);e.pauseNotification(),i?(e.call("win_gotoid",[this.opts.fromWinid],!0),this.nvim.call("coc#util#jump",["edit",a,[s.line,o]],!0)):this.nvim.call("coc#util#jump",["belowright vs",a,[s.line,o]],!0),e.command("normal! zz",!0),await e.resumeNotification(!0),i||(this.opts.fromWinid=await e.call("win_getid"))}}async searchCurrentRange(){let{nvim:e}=this,t=await e.eval('getline(1,line("."))'),i=t.length;for(let r=0;rEke(T,f)));let{lines:m,start:b,end:w,highlights:x}=d;m||(m=await this.getLines(c.filepath,b,w)),h.push({lines:m,lnum:g,start:b,highlights:x}),s.addLines(m)}if(h.length){let d={filepath:c.filepath,ranges:h},g=this._fileItems.find(p=>p.filepath==c.filepath);g?g.ranges.push(...d.ranges):this._fileItems.push(d)}}let{nvim:l,buffer:u}=this;if(this.changing=!0,l.pauseNotification(),s.render(u,o),this.highlightLineNr(),u.setOption("modified",!1,!0),u.setOption("undolevels",1e3,!0),o==2&&a.length){let c=a[0].start;l.call("coc#cursor#move_to",[c.line,c.character],!0)}await l.resumeNotification(!0),await i.patchChange(),this.changing=!1,await D.cursors.addRanges(a)}catch(o){this.changing=!1,Pke.error("Error on add file item:",o)}r()}findRange(e,t){let r=this.fileItems.find(o=>ni(this.getAbsolutePath(o.filepath),e)).ranges.find(o=>o.lnum==t);if(!r)throw new Error(`File range not found at lnum: ${t}`);return r}async save(){let{nvim:e}=this,t=this.document,{buffer:i}=t;await t.patchChange();let r=await this.getFileChanges();if(!r)return;r.sort((a,l)=>a.lnum-l.lnum);let o=[];for(let a=0;a0&&a.ranges.forEach(c=>{c.start+=OR(st.Position.create(c.start,0),u)})}return e.pauseNotification(),i.setOption("modified",!1,!0),this.config.saveToFile&&e.command("silent noa wa",!0),this.highlightLineNr(),await e.resumeNotification(),!0}async getLines(e,t,i){let r=j.file(e).toString(),o=v.getDocument(r);return o?o.getLines(t,i):await Sa(e,t,i-1)}getAbsolutePath(e){return Qb.default.isAbsolute(e)?e:Qb.default.join(this.opts.cwd,e)}highlightLineNr(){let{fileItems:e,nvim:t,srcId:i,bufnr:r}=this,{winid:o,cwd:s}=this.opts,a={};if(i){t.call("nvim_buf_clear_namespace",[r,i,0,-1],!0);for(let l of e)for(let u of l.ranges){let c=u.start+u.lines.length,h=`${u.start+1}:${c}`;a[u.lnum]=[u.start+1,c],t.call("nvim_buf_set_virtual_text",[r,i,u.lnum-1,[[h,"LineNr"]],{}],!0)}}else{this.matchIds.size&&(t.call("coc#highlight#clear_matches",[o,Array.from(this.matchIds)],!0),this.matchIds.clear());let l=2e3;for(let u of e){let c=`${s?Qb.default.relative(s,u.filepath):u.filepath}`,h=Q(c)+1;for(let d of u.ranges){let g=d.start+d.lines.length,p=`:${d.start+1}:${g}`;for(let f=0;f1?u[u.length-2]:"";if(c==""&&d.startsWith(yo)&&h==d&&s.start.character==0&&s.end.character==0){r=h+` -`+u.slice(0,-2).join(` -`)+` -`;let{start:g,end:p}=s;l[0].range=st.Range.create(g.line-1,0,p.line-1,0)}}else if(Lt(s)&&s.start.character!=0){let u=a.split(/\r?\n/),c=u[u.length-1],h=o[s.start.line].slice(0,s.start.character);if(c.startsWith(yo)&&h==c){l[0].text=h+u.slice(0,-1).join(` -`)+` -`;let{start:d,end:g}=s;l[0].range=st.Range.create(d.line,0,g.line,0)}}return{contentChanges:l,bufnr:t,textDocument:i,original:r,originalLines:o}}var Die=require("child_process"),Tie=require("events"),KF=S(require("path")),kie=S(require("readline"));Kn();Ta();uh();ds();xe();var _ke=q()("handler-search"),Lke=["--color","ansi","--colors","path:fg:black","--colors","line:fg:green","--colors","match:fg:red","--no-messages","--heading","-n"],Ike="\x1B",zF=class extends Tie.EventEmitter{start(t,i,r){this.process=(0,Die.spawn)(t,i,{cwd:r}),this.process.on("error",h=>{this.emit("error",h.message)});let o=kie.default.createInterface(this.process.stdout),s,a,l=[],u=[],c=!0;o.on("line",h=>{if(h.includes(Ike)){let d=pp(h);if(d.length==0)return;if(d[0].foreground=="black"){a={filepath:KF.default.join(r,d[0].text),ranges:[]};return}if(d[0].foreground=="green"){let p=parseInt(d[0].text,10)-1,f=d[0].text.length+1;c&&(s=p,c=!1);let m="";for(let w of d){if(w.foreground=="red"){let x=p-s,T=m.length-f;u.push(Be.create(x,T,x,T+w.text.length))}m+=w.text}let b=m.slice(f);l.push(b)}}else{let d=h.trim().length==0;a&&(d||h.trim()=="--")&&a.ranges.push({lines:l,highlights:u,start:s}),d&&(this.emit("item",a),a=null),l=[],u=[],c=!0}}),o.on("close",()=>{a&&(l.length&&a.ranges.push({lines:l,highlights:u,start:s}),this.emit("item",a)),l=u=a=null,this.emit("end")})}dispose(){this.process&&this.process.kill()}},ey=class{constructor(e,t="rg"){this.nvim=e;this.cmd=t}run(e,t,i){let{nvim:r,cmd:o}=this,{afterContext:s,beforeContext:a}=i.config,l=["-A",s.toString(),"-B",a.toString()].concat(Lke,e),u=Fke(e);u&&l.pop(),l.push("--",u?KF.default.isAbsolute(u)?u:`./${u.replace(/^\.\//,"")}`:"./"),this.task=new zF,this.task.start(o,l,t);let c=new Di,h=0,d=0,g=Date.now(),p=[],f=async()=>{if(p.length==0)return;let m=p.slice();p=[];let b=await c.acquire();try{await i.addFileItems(m)}catch(w){_ke.error(w)}b()};return new Promise((m,b)=>{let w=setInterval(f,300);this.task.on("item",async x=>{h++,d=d+x.ranges.reduce((T,R)=>T+R.highlights.length,0),p.push(x)}),this.task.on("error",x=>{clearInterval(w),D.showErrorMessage(`Error on command "${o}": ${x}`),this.task=null,b(new Error(x))}),this.task.on("end",async()=>{clearInterval(w);try{await f(),(await c.acquire())(),this.task.removeAllListeners(),this.task=null;let T=i.buffer;if(T){if(r.pauseNotification(),h==0)T.setLines(["No match found"],{start:1,end:2,strictIndexing:!1},!0),T.addHighlight({line:1,srcId:-1,colEnd:-1,colStart:0,hlGroup:"Error"}),T.setOption("modified",!1,!0);else{let R=new Hi;R.addText("Files","MoreMsg"),R.addText(": "),R.addText(`${h} `,"Number"),R.addText("Matches","MoreMsg"),R.addText(": "),R.addText(`${d} `,"Number"),R.addText("Duration","MoreMsg"),R.addText(": "),R.addText(`${Date.now()-g}ms`,"Number"),R.render(T,1,2)}T.setOption("modified",!1,!0),r.resumeNotification(!1,!0)}}catch(x){b(x);return}m()})})}abort(){var e;(e=this.task)==null||e.dispose()}};function Fke(n){if(n.length<2)return;let e=n.length;if(!n[e-1].startsWith("-")&&!n[e-2].startsWith("-"))return n[e-1]}var Dgt=q()("handler-refactor"),jke="__coc_refactor__",Mke=0,ty=class{constructor(e,t){this.nvim=e;this.handler=t;this.buffers=new Map;this.disposables=[];this._onCreate=new _d.Emitter;this.onCreate=this._onCreate.event;this.setConfiguration(),v.onDidChangeConfiguration(this.setConfiguration,this,this.disposables),P.on("BufUnload",i=>{let r=this.buffers.get(i);r&&(r.dispose(),this.buffers.delete(i))},null,this.disposables),v.onDidChangeTextDocument(i=>{let r=this.buffers.get(i.bufnr);r&&r.onChange(i)},null,this.disposables)}async init(){v.isNvim&&this.nvim.hasFunction("nvim_create_namespace")&&(this.srcId=await this.nvim.createNamespace("coc-refactor"))}has(e){return this.buffers.has(e)}setConfiguration(e){if(e&&!e.affectsConfiguration("refactor"))return;let t=v.getConfiguration("refactor",null);this.config=Object.assign(this.config||{},{afterContext:t.get("afterContext",3),beforeContext:t.get("beforeContext",3),openCommand:t.get("openCommand","edit"),saveToFile:t.get("saveToFile",!0),showMenu:t.get("showMenu","")})}async doRefactor(){let{doc:e,position:t}=await this.handler.getCurrentState();if(!_.hasProvider("rename",e.textDocument))throw new Error("Rename provider not found for current buffer");await e.synchronize();let i=await this.handler.withRequestToken("refactor",async r=>{let o=await _.prepareRename(e.textDocument,t,r);if(r.isCancellationRequested)return null;if(o===!1)throw new Error("Provider returns null on prepare, unable to rename at current position");let s=await _.provideRenameEdits(e.textDocument,t,"NewName",r);if(r.isCancellationRequested)return null;if(!s)throw new Error("Provider returns null for rename edits.");return s});i&&await this.fromWorkspaceEdit(i,e.filetype)}async search(e){let t=await this.createRefactorBuffer(),i=await this.nvim.call("getcwd",[]);await new ey(this.nvim).run(e,i,t)}async save(e){let t=this.buffers.get(e);if(t)return await t.save()}getBuffer(e){return this.buffers.get(e)}async createRefactorBuffer(e,t=!1){let{nvim:i}=this,[r,o]=await i.eval("[win_getid(),getcwd()]"),{openCommand:s}=this.config;i.pauseNotification(),i.command(`${s} ${jke}${Mke++}`,!0),i.command("setl buftype=acwrite nobuflisted bufhidden=wipe nofen wrap conceallevel=2 concealcursor=n",!0),i.command("setl undolevels=-1 nolist nospell noswapfile foldmethod=expr foldexpr=coc#util#refactor_foldlevel(v:lnum)",!0),i.command("setl foldtext=coc#util#refactor_fold_text(v:foldstart)",!0),i.call("setline",[1,["Save current buffer to make changes",yo]],!0),i.call("matchadd",["Comment","\\%1l"],!0),i.call("matchadd",["Conceal","^\\%u3000"],!0),i.call("matchadd",["Label","^\\%u3000\\zs\\S\\+"],!0),i.command("setl nomod",!0),e&&i.command(`runtime! syntax/${e}.vim`,!0),i.call("coc#util#do_autocmd",["CocRefactorOpen"],!0),await i.resumeNotification();let[a,l]=await i.eval('[bufnr("%"),win_getid()]'),u={fromWinid:r,winid:l,cwd:o};await v.document;let c=new Vb(a,t?void 0:this.srcId,this.nvim,this.config,u);return this.buffers.set(a,c),c}async fromLines(e){let t=await this.createRefactorBuffer();return await t.buffer.setLines(e,{start:0,end:-1,strictIndexing:!1}),t}async fromLocations(e,t){if(!e||e.length==0)return;let i={},r={changes:i};for(let o of e){let s=i[o.uri]||[];s.push({range:o.range,newText:""}),i[o.uri]=s}return await this.fromWorkspaceEdit(r,t)}async fromWorkspaceEdit(e,t){if(!e||_J(e))return;let i=[],{beforeContext:r,afterContext:o}=this.config,{changes:s,documentChanges:a}=e;if(!s){s={};for(let u of a||[])if(_d.TextDocumentEdit.is(u)){let{textDocument:c,edits:h}=u;s[c.uri]=h}}for(let u of Object.keys(s)){let c=await this.getLineCount(u),h=s[u],d=[],g=null,p=null,f=[];h.sort((m,b)=>m.range.start.line-b.range.start.line);for(let m of h){let{line:b}=m.range.start,w=Math.max(0,b-r);g!=null&&w({range:s,newText:r}))}}}async rename(e){let{doc:t,position:i}=await this.handler.getCurrentState();this.handler.checkProvier("rename",t.textDocument),await t.synchronize();let r=new iy.CancellationTokenSource().token,o=await _.prepareRename(t.textDocument,i,r);if(o===!1)return D.showWarningMessage("Invalid position for rename"),!1;let s;if(!e){iy.Range.is(o)?(s=t.textDocument.getText(o),await D.moveTo(o.start)):o&&typeof o.placeholder=="string"?s=o.placeholder:s=await this.nvim.eval('expand("")');let l=v.getConfiguration("coc.preferences",null);e=await D.requestInput("New name",l.get("renameFillCurrent",!0)?s:void 0)}if(e===""&&D.showWarningMessage("Empty word, rename canceled"),!e)return!1;let a=await _.provideRenameEdits(t.textDocument,i,e,r);return r.isCancellationRequested||!a?!1:(await v.applyEdit(a),this.nvim.redrawVim(),!0)}};Pe();var QF=S(require("fs")),Rie=S(require("path"));Wo();dn();ie();Yu();var Eie=q()("handler-workspace"),ry=class{constructor(e,t){this.nvim=e;this.handler=t}async openLog(){let e=Eie.logfile;await v.jumpTo(j.file(e).toString())}async doAutocmd(e,t){await v.autocmds.doAutocmd(e,t)}async getConfiguration(e){let t=await v.document;return v.getConfiguration(e,t?t.uri:void 0)}getRootPatterns(e){let t=v.getDocument(e);return t?{buffer:v.workspaceFolderControl.getRootPatterns(t,0),server:v.workspaceFolderControl.getRootPatterns(t,1)||[],global:v.workspaceFolderControl.getRootPatterns(t,2)}:null}async ensureDocument(){let e=await v.document;return e&&e.attached}async doKeymap(e,t="",i){return await v.keymaps.doKeymap(e,t,i)}async snippetCheck(e,t){return!!(t&&ai.jumpable()||e&&await Promise.resolve(je.manager.call("coc-snippets","expandable",[])))}async showInfo(){let e=[],t=v.version+"-3727269e 2022-10-23 00:47:09 +0800";e.push("## versions"),e.push("");let r=(await this.nvim.call("execute",["version"])).trim().split(/\r?\n/,2)[0].replace(/\(.*\)/,"").trim();e.push("vim version: "+r+`${v.isVim?" "+v.env.version:""}`),e.push("node version: "+process.version),e.push("coc.nvim version: "+t),e.push("coc.nvim directory: "+Rie.default.dirname(__dirname)),e.push("term: "+(process.env.TERM_PROGRAM||process.env.TERM)),e.push("platform: "+process.platform),e.push(""),e.push("## Log of coc.nvim"),e.push("");let o=Eie.logfile;if(QF.default.existsSync(o)){let a=QF.default.readFileSync(o,{encoding:"utf8"});e.push(...a.split(/\r?\n/))}await this.nvim.command("vnew +setl\\ buftype=nofile\\ bufhidden=wipe\\ nobuflisted"),await(await this.nvim.buffer).setLines(e,{start:0,end:-1,strictIndexing:!1})}};var VF=S(W());de();et();xt();xe();var oy=class{constructor(e,t){this.nvim=e;this.handler=t;this.selectionRange=null}async getSelectionRanges(){let{doc:e,position:t}=await this.handler.getCurrentState();return this.handler.checkProvier("selectionRange",e.textDocument),await e.synchronize(),await this.handler.withRequestToken("selection ranges",r=>_.getSelectionRanges(e.textDocument,[t],r))}async selectRange(e,t){let{nvim:i}=this,{doc:r}=await this.handler.getCurrentState();this.handler.checkProvier("selectionRange",r.textDocument);let o=[];if(!t&&(!this.selectionRange||!e))return;if(e){let u=await D.getSelectedRange(e);o.push(u.start,u.end)}else{let u=await D.getCursorPosition();o.push(u)}if(!t){let u=VF.Range.create(o[0],o[1]),{selectionRange:c}=this;for(;c&&c.parent&&!ye(c.parent.range,u);)c=c.parent;c&&c.parent&&await D.selectRange(c.range);return}await r.synchronize();let s=await this.handler.withRequestToken("selection ranges",u=>_.getSelectionRanges(r.textDocument,o,u));if(!s||s.length==0)return;await i.eval("mode()")!="n"&&await i.eval(`feedkeys("\\", 'in')`);let l;if(s.length==1)l=s[0];else{let u=o[1]??o[0],c=VF.Range.create(o[0],u);for(l=s[0];l;){if(ye(c,l.range)){l=l.parent;continue}if(ft(o[0],l.range)==0&&ft(u,l.range)==0)break;l=l.parent}}!l||(this.selectionRange=s[0],await D.selectRange(l.range))}};var Id=S(W());Jt();fe();de();var Lie=S(require("path")),Ld=S(W());Pe();Jt();ie();yf();var ej=class{constructor(e,t,i,r,o,s,a){this.meta=e;this.winid=t;this.config=i;this.commandId=r;this.rootItems=o;this.getIcon=s;this.resolveChildren=a;this._onDidChangeTreeData=new Ld.Emitter;this.onDidChangeTreeData=this._onDidChangeTreeData.event;this.actions=[];this.addAction("Open in new tab",async l=>{await ue.executeCommand(this.commandId,t,l,"tabe")}),this.addAction("Dismiss",async l=>{if(l.parent==null){let u=this.rootItems.filter(c=>c!==l);this.reset(u)}else{let u=l.parent,c=u.children.findIndex(h=>h===l);u.children.splice(c,1),this._onDidChangeTreeData.fire(u)}})}cancel(){this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource=void 0)}reset(e){this.rootItems=e,this._onDidChangeTreeData.fire(void 0)}addAction(e,t){this.actions.push({title:e,handler:t})}async getChildren(e){this.cancel(),this.tokenSource=new Ld.CancellationTokenSource;let{token:t}=this.tokenSource;if(!e){for(let r of this.rootItems){let o=await this.resolveChildren(r,this.meta,t);_ie(r,o,t)}return this.rootItems}if(e.children)return e.children;let i=await this.resolveChildren(e,this.meta,t);return this.tokenSource=void 0,_ie(e,i,t),i}getTreeItem(e){var i;let t=new lo(e.name,e.children?2:1);return this.config.enableTooltip&&(t.tooltip=Lie.default.relative(v.cwd,j.parse(e.uri).fsPath)),t.description=e.detail,t.deprecated=(i=e.tags)==null?void 0:i.includes(Ld.SymbolTag.Deprecated),t.icon=this.getIcon(e.kind),t.command={command:this.commandId,title:"open location",arguments:[this.winid,e,this.config.openCommand]},t}resolveActions(){return this.actions}dispose(){this.cancel(),v.nvim.createWindow(this.winid).clearMatchGroup(ej.rangesHighlight)}},al=ej;al.rangesHighlight="CocSelectedRange";function _ie(n,e,t){!Array.isArray(e)||t&&t.isCancellationRequested||(e.forEach(i=>i.parent=n),n.children=e)}vf();re();nt();Cs();xe();ie();var ypt=q()("Handler-callHierarchy");function Iie(n){return!!(n&&typeof n.name=="string"&&n.kind&&Id.Range.is(n.range))}var Ys=class{constructor(e,t){this.nvim=e;this.handler=t;this.disposables=[];this.highlightWinids=new Set;this.loadConfiguration(),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),this.disposables.push(ue.registerCommand(Ys.commandId,async(i,r,o)=>{var l;let{nvim:s}=this;await s.call("win_gotoid",[i]),await v.jumpTo(r.uri,r.selectionRange.start,o);let a=await s.window;if(a.clearMatchGroup(Ys.rangesHighlight),a.highlightRanges(Ys.rangesHighlight,[r.selectionRange],10,!0),!!((l=r.ranges)!=null&&l.length)){if(r.sourceUri){let u=v.getDocument(r.sourceUri);if(!u)return;let c=await s.call("coc#compat#buf_win_id",[u.bufnr]);if(c==-1)return;c!=a.id&&(a=s.createWindow(c),a.clearMatchGroup(Ys.rangesHighlight))}a.highlightRanges(Ys.rangesHighlight,r.ranges,100,!0),this.highlightWinids.add(a.id)}},null,!0)),P.on("BufWinEnter",(i,r)=>{this.highlightWinids.has(r)&&(this.highlightWinids.delete(r),e.createWindow(r).clearMatchGroup(Ys.rangesHighlight))},null,this.disposables)}loadConfiguration(e){if(!e||e.affectsConfiguration("callHierarchy")){let t=v.getConfiguration("callHierarchy",null);this.config={splitCommand:t.get("splitCommand"),openCommand:t.get("openCommand"),enableTooltip:t.get("enableTooltip")}}}createProvider(e,t,i,r){let o=new al(r,i,this.config,Ys.commandId,e,s=>this.handler.getIcon(s),(s,a,l)=>this.getChildren(t,s,a,l));for(let s of["incoming","outgoing"])o.addAction(`Show ${s[0].toUpperCase()}${s.slice(1)} Calls`,a=>{o.meta=s;let l=[fn(a,["children","parent","ranges","sourceUri"])];o.reset(l)});return o}async getChildren(e,t,i,r){let o=[];if(i=="incoming"){let s=await _.provideIncomingCalls(e,t,r);s&&(o=s.map(a=>Object.assign(a.from,{ranges:a.fromRanges})))}else{let s=await _.provideOutgoingCalls(e,t,r);s&&(o=s.map(a=>Object.assign(a.to,{ranges:a.fromRanges,sourceUri:t.uri})))}return o}async prepare(e,t,i){this.handler.checkProvier("callHierarchy",e);let r=await _.prepareCallHierarchy(e,t,i);return Iie(r)?[r]:r}async getCallHierarchyItems(e,t){let{doc:i,position:r}=await this.handler.getCurrentState(),o=new Id.CancellationTokenSource;if(!e){await i.synchronize();let a=await this.prepare(i.textDocument,r,o.token);if(e=a?a[0]:void 0,!a)throw new Error("Unable to getCallHierarchyItem at current position")}let s=t=="incoming"?"provideIncomingCalls":"provideOutgoingCalls";return await _[s](i.textDocument,e,o.token)}async getIncoming(e){return await this.getCallHierarchyItems(e,"incoming")}async getOutgoing(e){return await this.getCallHierarchyItems(e,"outgoing")}async showCallHierarchyTree(e){let{doc:t,position:i,winid:r}=await this.handler.getCurrentState();if(await t.synchronize(),!_.hasProvider("callHierarchy",t.textDocument)){D.showErrorMessage("CallHierarchy provider not found for current document, it's not supported by your languageserver");return}let o=await _.prepareCallHierarchy(t.textDocument,i,Id.CancellationToken.None),s=Iie(o)?[o]:o;if(Je(s)){D.showWarningMessage("Unable to get CallHierarchyItem at cursor position.");return}let a=this.createProvider(s,t.textDocument,r,e),l=new Fo("calls",{treeDataProvider:a});l.title=Fie(e),a.onDidChangeTreeData(u=>{u||(l.title=Fie(a.meta))}),l.onDidChangeVisibility(u=>{u.visible||a.dispose()}),this.disposables.push(l),await l.show(this.config.splitCommand)}dispose(){this.highlightWinids.clear(),U(this.disposables)}},Ku=Ys;Ku.commandId="callHierarchy.reveal",Ku.rangesHighlight="CocSelectedRange";function Fie(n){return`${n.toUpperCase()} CALLS`}Jt();fe();de();vf();re();nt();Cs();xe();ie();var _pt=q()("Handler-typeHierarchy"),Qu=class{constructor(e,t){this.nvim=e;this.handler=t;this.disposables=[];this.highlightWinids=new Set;this.loadConfiguration(),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),P.on("BufWinEnter",(i,r)=>{this.highlightWinids.has(r)&&(this.highlightWinids.delete(r),e.createWindow(r).clearMatchGroup(Qu.rangesHighlight))},null,this.disposables),this.disposables.push(ue.registerCommand(Qu.commandId,async(i,r,o)=>{let{nvim:s}=this;await s.call("win_gotoid",[i]),await v.jumpTo(r.uri,r.range.start,o);let a=await s.window;a.clearMatchGroup(Qu.rangesHighlight),a.highlightRanges(Qu.rangesHighlight,[r.selectionRange],10,!0),this.highlightWinids.add(a.id)},null,!0))}loadConfiguration(e){if(!e||e.affectsConfiguration("typeHierarchy")){let t=v.getConfiguration("typeHierarchy",null);this.config={splitCommand:t.get("splitCommand"),openCommand:t.get("openCommand"),enableTooltip:t.get("enableTooltip")}}}createProvider(e,t,i){let r=new al(i,t,this.config,Qu.commandId,e,o=>this.handler.getIcon(o),(o,s,a)=>this.getChildren(o,s,a));return r.addAction("Show Super Types",o=>{r.meta="supertypes";let s=[fn(o,["children","parent"])];r.reset(s)}),r.addAction("Show Sub Types",o=>{r.meta="subtypes";let s=[fn(o,["children","parent"])];r.reset(s)}),r}async getChildren(e,t,i){let r=[];return t=="supertypes"?r=await _.provideTypeHierarchySupertypes(e,i):r=await _.provideTypeHierarchySubtypes(e,i),r}async prepare(e,t){return this.handler.checkProvier("typeHierarchy",e),await this.handler.withRequestToken("typeHierarchy",async i=>await _.prepareTypeHierarchy(e,t,i),!1)}async showTypeHierarchyTree(e){let{doc:t,position:i,winid:r}=await this.handler.getCurrentState();await t.synchronize();let o=await this.prepare(t.textDocument,i);if(Je(o)){D.showWarningMessage("Unable to get TypeHierarchyItems at cursor position.");return}let s=this.createProvider(o,r,e),a=new Fo("types",{treeDataProvider:s});a.title=jie(e),s.onDidChangeTreeData(l=>{l||(a.title=jie(s.meta))}),a.onDidChangeVisibility(l=>{l.visible||s.dispose()}),this.disposables.push(a),await a.show(this.config.splitCommand)}dispose(){this.highlightWinids.clear(),U(this.disposables)}},Vu=Qu;Vu.rangesHighlight="CocSelectedRange",Vu.commandId="typeHierarchy.reveal";function jie(n){return n==="supertypes"?"Super types":"Sub types"}Jt();fe();de();Ta();re();nt();_e();xe();ie();var vo=S(W());de();var ll=class{constructor(){this.ranges=[]}get current(){let e=[];return this.ranges.sort((t,i)=>t[0]-i[0]),this.ranges.forEach(t=>{e.push(t[0],t[1])}),e}clear(){this.ranges=[]}add(e,t){e>t&&([e,t]=[t,e]);let{ranges:i}=this;if(i.length==0)i.push([e,t]);else{i.sort((l,u)=>l[0]-u[0]);let r,o,s=[];for(let l=0;lt||(s.push(l),r==null&&(r=Math.min(e,u[0])),o=Math.max(t,u[1]))}let a=s.length?i.filter((l,u)=>!s.includes(u)):i;this.ranges=a,r!=null&&o!=null?this.ranges.push([r,o]):this.ranges.push([e,t])}}has(e,t){return this.ranges.findIndex(r=>r[0]<=e&&r[1]>=t)!==-1}static mergeSpans(e){let t=[];for(let i of e){let r=t.findIndex(o=>!(i[1]o[1]));if(r==-1)t.push(i);else{let o=t[r];t[r]=[Math.min(i[0],o[0]),Math.max(i[1],o[1])]}}return t}};re();xr();re();_e();xe();ie();var Oke=q()("semanticTokens-buffer"),Ake=15,Fd="CocSem",Xo="semanticTokens",Nke=100,sy=class{constructor(e,t,i){this.nvim=e;this.doc=t;this.highlightGroups=i;this._dirty=!1;this.regions=new ll;this._onDidRefresh=new vo.Emitter;this.onDidRefresh=this._onDidRefresh.event;this.loadConfiguration(),this.highlight=lw(()=>{this.doHighlight()},Nke),this.highlight()}loadConfiguration(){let e=v.getConfiguration("semanticTokens",this.doc),t=this.config!=null&&this.config.enable!=e.enable;this.config={enable:e.get("enable"),filetypes:e.get("filetypes"),highlightPriority:e.get("highlightPriority"),incrementTypes:e.get("incrementTypes"),combinedModifiers:e.get("combinedModifiers")},t&&(this.config.enable?this.highlight():this.clearHighlight())}get configEnabled(){let{enable:e,filetypes:t}=this.config;return Array.isArray(t)?t.includes("*")||t.includes(this.doc.filetype):e}get bufnr(){return this.doc.bufnr}onChange(){this.highlight()}onTextChange(){this.cancel()}async forceHighlight(){this.clearHighlight(),this.cancel(),await this.doHighlight(!0)}async onShown(){if(this.shouldRangeHighlight)return;let{doc:e}=this;e.dirty||e.version===this._version||await this.doHighlight(!1,!0)}get hasProvider(){let{textDocument:e}=this.doc;return _.hasProvider("semanticTokens",e)||_.hasProvider("semanticTokensRange",e)}get hasLegend(){let{textDocument:e}=this.doc;return _.getLegend(e)!=null||_.getLegend(e,!0)!=null}get rangeProviderOnly(){let{textDocument:e}=this.doc;return!_.hasProvider("semanticTokens",e)&&_.hasProvider("semanticTokensRange",e)}get shouldRangeHighlight(){let{textDocument:e}=this.doc;return _.hasProvider("semanticTokensRange",e)&&this.previousResults==null}get lineCount(){return this.doc.lineCount}get highlights(){if(!!this._highlights&&this._highlights[0]==this.doc.version)return this._highlights[1]}get buffer(){return this.nvim.createBuffer(this.bufnr)}get enabled(){return!this.configEnabled||!v.env.updateHighlight||!this.hasLegend?!1:this.hasProvider}checkState(){if(!v.env.updateHighlight)throw new Error("Can't perform highlight update, highlight update requires vim >= 8.1.1719 or neovim >= 0.5.0");if(!this.configEnabled)throw new Error(`Semantic tokens highlight not enabled for current filetype: ${this.doc.filetype}`);if(!this.hasProvider)throw new Error(`SemanticTokens provider not found for ${this.doc.uri}`)}async getTokenRanges(e,t,i){let r=0,o=0,s=Date.now(),a=[];for(let l=0;lAke){if(await wr(),i.isCancellationRequested)break;s=Date.now()}let u=e[l],c=e[l+1],h=e[l+2],d=t.tokenTypes[e[l+3]],g=t.tokenModifiers.filter((b,w)=>e[l+4]&1<=i))continue;let u={lnum:l,hlGroup:a.hlGroup,colStart:a.range[1],colEnd:a.range[2],combine:a.combine};r.includes(a.tokenType)&&(u.end_incl=!0,u.start_incl=!0),s.push(u)}return s}async doHighlight(e=!1,t=!1){var l;if(this.cancel(),!this.enabled)return;let r=(this.tokenSource=new vo.CancellationTokenSource).token;if(!t&&(await this.nvim.eval(`get(get(getbufinfo(${this.bufnr}),0,{}),'hidden',0)`)==1||r.isCancellationRequested))return;if(this.shouldRangeHighlight){let u=this.rangeTokenSource=new vo.CancellationTokenSource;if(await this.doRangeHighlight(u.token),r.isCancellationRequested||this.rangeProviderOnly)return}let{doc:o}=this,s=o.version,a;if(s===((l=this.previousResults)==null?void 0:l.version))if(this._highlights&&this._highlights[0]==s)a=this._highlights[1];else{let u=this.previousResults.tokens,c=_.getLegend(o.textDocument);a=await this.getTokenRanges(u,c,r),a&&(this._highlights=[s,a])}else a=await this.sendRequest(()=>this.requestAllHighlights(r,e),r),a&&(this._highlights=[s,a]);if(!(!a||r.isCancellationRequested)){if(!this._dirty||a.length<200){let u=this.toHighlightItems(a),c=await D.diffHighlights(this.bufnr,Xo,u,void 0,r);if(r.isCancellationRequested||!c)return;this._dirty=!0,this._version=s;let h=this.config.highlightPriority;await D.applyDiffHighlights(this.bufnr,Xo,h,c)}else this.regions.clear(),await this.highlightRegions(r);this._onDidRefresh.fire()}}async waitRefresh(){return new Promise((e,t)=>{let i=setTimeout(()=>{r.dispose(),t(new Error("Timeout after 500ms"))},500),r=this.onDidRefresh(()=>{r.dispose(),clearTimeout(i),e()})})}async sendRequest(e,t){try{return await e()}catch(i){t.isCancellationRequested||(i instanceof ii?this.highlight(500):Oke.error("Error on request semanticTokens: ",i));return}}async doRangeHighlight(e){if(!this.enabled)return;let{version:t}=this.doc,i=await this.sendRequest(()=>this.requestRangeHighlights(e),e);if(i==null||e.isCancellationRequested)return;let{highlights:r,start:o,end:s}=i;if(this.rangeProviderOnly||!this.previousResults){(!this._highlights||t!==this._highlights[0])&&(this._highlights=[t,[]]);let c=this._highlights[1],h=c.reduce((d,g)=>d.add(g.range[0]),new Set);r.forEach(d=>{h.has(d.range[0])||c.push(d)})}let a=this.toHighlightItems(r),l=this.config.highlightPriority,u=await D.diffHighlights(this.bufnr,Xo,a,[o,s],e);u&&(await D.applyDiffHighlights(this.bufnr,Xo,l,u,!0),this._dirty=!0)}async highlightRegions(e,t=!1){let{regions:i,highlights:r,config:o,lineCount:s,bufnr:a}=this;if(!r)return;let l=o.highlightPriority,u=await this.nvim.call("coc#window#visible_ranges",[a]);if(e.isCancellationRequested||u.length===0)return;let c=v.env.lines;u.forEach(h=>{let d=h[0];h[0]=Math.max(0,Math.floor(d-c*1.5)),h[1]=Math.min(s,Math.ceil(h[1]+c*1.5),d+c*2)});for(let[h,d]of ll.mergeSpans(u)){if(!t&&i.has(h,d))continue;let g=this.toHighlightItems(r,h,d),p=await D.diffHighlights(a,Xo,g,[h,d],e);if(e.isCancellationRequested)break;i.add(h,d),p&&D.applyDiffHighlights(a,Xo,l,p,!0)}}async onCursorMoved(){if(this.cancel(!0),!this.enabled||this.doc.dirty)return;let t=(this.rangeTokenSource=new vo.CancellationTokenSource).token;await Nt(100),!t.isCancellationRequested&&(this.shouldRangeHighlight?await this.doRangeHighlight(t):await this.highlightRegions(t))}async requestRangeHighlights(e){let{nvim:t,doc:i}=this,r=await t.call("coc#window#visible_range",[this.bufnr]);if(!r||e.isCancellationRequested)return null;let o=Math.min(r[0]+v.env.lines*2,r[1]),s=vo.Range.create(r[0]-1,0,o,0),a=await _.provideDocumentRangeSemanticTokens(i.textDocument,s,e);if(!a||!vo.SemanticTokens.is(a)||e.isCancellationRequested)return null;let l=_.getLegend(i.textDocument,!0),u=await this.getTokenRanges(a.data,l,e);return e.isCancellationRequested?null:{highlights:u,start:r[0]-1,end:r[1]}}async requestAllHighlights(e,t){let{doc:i}=this,r=_.getLegend(i.textDocument),o=_.hasSemanticTokensEdits(i.textDocument),s=t?null:this.previousResults,a=i.version,l;if(o&&(s==null?void 0:s.resultId)?l=await _.provideDocumentSemanticTokensEdits(i.textDocument,s.resultId,e):l=await _.provideDocumentSemanticTokens(i.textDocument,e),e.isCancellationRequested||l==null)return;let u=[];return vo.SemanticTokens.is(l)?u=l.data:s&&Array.isArray(l.edits)&&(u=s.tokens,l.edits.forEach(c=>{u.splice(c.start,c.deleteCount?c.deleteCount:0,...c.data??[])})),this.previousResults={resultId:l.resultId,tokens:u,version:a},await this.getTokenRanges(u,r,e)}clearHighlight(){this.previousResults=void 0,this._highlights=void 0,this.regions.clear(),this.buffer.clearNamespace(Xo)}abandonResult(){this.previousResults=void 0}cancel(e=!1){this.rangeTokenSource&&(this.rangeTokenSource.cancel(),this.rangeTokenSource.dispose(),this.rangeTokenSource=null),!e&&(this.regions.clear(),this.highlight.clear(),this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource.dispose(),this.tokenSource=null))}dispose(){this.cancel(),this.clearHighlight(),this._onDidRefresh.dispose()}};var nft=q()("semanticTokens"),BD="Statement",ay=class{constructor(e){this.nvim=e;this.disposables=[];this.highlightGroups=v.env.semanticHighlights.slice(),this.floatFactory=D.createFloatFactory({title:"Semantic token info",highlight:"Normal",borderhighlight:"MoreMsg",border:[1,1,1,1]}),v.onDidChangeConfiguration(t=>{for(let i of this.highlighters.items)t.affectsConfiguration("semanticTokens"),i.doc&&i.loadConfiguration()},this,this.disposables),ue.register({id:"semanticTokens.checkCurrent",execute:async()=>{await this.showHighlightInfo()}},!1,"show semantic tokens highlight information of current buffer"),ue.register({id:"semanticTokens.refreshCurrent",execute:()=>this.highlightCurrent()},!1,"refresh semantic tokens highlight of current buffer."),ue.register({id:"semanticTokens.inspect",execute:()=>this.inspectSemanticToken()},!1,"Inspect semantic token information at cursor position."),ue.register({id:"semanticTokens.clearCurrent",execute:async()=>{(await e.buffer).clearNamespace(Xo,0,-1)}},!1,"clear semantic tokens highlight of current buffer"),ue.register({id:"semanticTokens.clearAll",execute:async()=>{let t=await e.buffers;for(let i of t)i.clearNamespace(Xo,0,-1)}},!1,"clear semantic tokens highlight of all buffers"),this.highlighters=v.registerBufferSync(t=>new sy(this.nvim,t,this.highlightGroups)),_.onDidSemanticTokensRefresh(async t=>{let i=await this.nvim.call("coc#window#bufnrs");for(let r of this.highlighters.items){let o=v.getDocument(r.bufnr);!o||!v.match(t,o.textDocument)||(r.abandonResult(),i.includes(r.bufnr)&&r.highlight())}},null,this.disposables),P.on("BufWinEnter",async t=>{let i=this.highlighters.getItem(t);i&&await i.onShown()},null,this.disposables),P.on("CursorMoved",async t=>{let i=this.highlighters.getItem(t);i&&await i.onCursorMoved()},null,this.disposables)}async inspectSemanticToken(){let e=await this.getCurrentItem();if(!e||!e.enabled){if(e)try{e.checkState()}catch(a){D.showErrorMessage(a.message)}else{let a=await v.document;D.showErrorMessage(`Document not attached, ${a==null?void 0:a.notAttachReason}`)}this.floatFactory.close();return}let[t,i,r]=await this.nvim.call("getcurpos",[]),s=(e.highlights??[]).find(a=>{let l=r-1;return a.range[0]===i-1&&l>=a.range[1]&&lh.hlGroup!=null).map(({hlGroup:h})=>h));for(let h of l)r.addTexts([{text:"-",hlGroup:"Comment"},{text:" "},{text:h,hlGroup:h}]);r.addLine(""),r.addLine("Tokens types that current Language Server supported:",BD),r.addLine("");let u=v.getDocument(i.bufnr),c=_.getLegend(u.textDocument)??_.getLegend(u.textDocument,!0);if(c.tokenTypes.length){for(let h of[...new Set(c.tokenTypes)]){let d=Fd+_n(h);r.addTexts([{text:"-",hlGroup:"Comment"},{text:" "},{text:d,hlGroup:d}])}r.addLine("")}else r.addLine("No token types supported","Comment"),r.addLine("");if(r.addLine("Tokens modifiers that current Language Server supported:",BD),r.addLine(""),c.tokenModifiers.length){for(let h of[...new Set(c.tokenModifiers)]){let d=Fd+_n(h);r.addTexts([{text:"-",hlGroup:"Comment"},{text:" "},{text:d,hlGroup:d}])}r.addLine("")}else r.addLine("No token modifiers exist","Comment"),r.addLine("")}catch(a){r.addLine(a instanceof Error?a.message:a.toString(),"Error")}t.pauseNotification();let s=o[0][2];r.render(t.createBuffer(s)),t.resumeNotification(!0,!0)}dispose(){this.floatFactory.dispose(),this.highlighters.dispose(),U(this.disposables)}};var Mie=S(Pn()),ly=S(W());fe();de();re();_e();xe();ie();var fft=q()("handler-signature"),uy=class{constructor(e,t){this.nvim=e;this.handler=t;this.disposables=[];this.loadConfiguration(),this.signatureFactory=D.createFloatFactory(Object.assign({preferTop:this.config.preferAbove,autoHide:!1,modes:["i","ic","s"]},this.config.floatConfig)),this.disposables.push(this.signatureFactory),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),P.on("CursorMovedI",(0,Mie.default)(this.checkCurosr.bind(this),100),null,this.disposables),P.on(["InsertLeave","BufEnter"],()=>{var i;(i=this.tokenSource)==null||i.cancel()},null,this.disposables),P.on("TextChangedI",()=>{this.config.hideOnChange&&this.signatureFactory.close()},null,this.disposables),P.on("TextInsert",async(i,r,o)=>{if(!this.config.enableTrigger)return;let s=v.getDocument(i);!s||!s.attached||!_.shouldTriggerSignatureHelp(s.textDocument,o)||await this._triggerSignatureHelp(s,{line:r.lnum-1,character:r.pre.length},!1)},null,this.disposables),D.onDidChangeActiveTextEditor(()=>{this.loadConfiguration()},null,this.disposables)}checkCurosr(e,t){let i=this.lastPosition,r=this.signatureFactory;if(!i||e!==i.bufnr||r.window==null)return;let o=v.getDocument(e);if(!o||t[0]!=i.lnum||t[1]{o.dispose(),this.tokenSource=void 0});let{target:a}=this.config,l=this.timer=setTimeout(()=>{o.cancel()},this.config.wait);await e.patchChange(!0);let u=await _.getSignatureHelp(e.textDocument,t,s,{isRetrigger:this.signatureFactory.checkRetrigger(e.bufnr),triggerKind:i?ly.SignatureHelpTriggerKind.Invoked:ly.SignatureHelpTriggerKind.TriggerCharacter});if(clearTimeout(l),s.isCancellationRequested)return!1;if(!u||u.signatures.length==0)return this.signatureFactory.close(),!1;let{activeSignature:c,signatures:h}=u;if(c){let[g]=h.splice(c,1);g&&h.unshift(g)}return a=="echo"?this.echoSignature(u):await this.showSignatureHelp(e,t,u,r),!0}async showSignatureHelp(e,t,i,r){let{signatures:o,activeParameter:s}=i;s=typeof s=="number"?s:void 0;let a=null,l=r,u=o.reduce((h,d,g)=>{var b,w;let p=null,f=d.activeParameter??s;f===void 0&&((b=d.parameters)==null?void 0:b.length)>0&&(f=0);let m=d.label.indexOf("(");if(g==0&&typeof f=="number"){let x=(w=d.parameters)==null?void 0:w[f];if(x){let T=d.label.slice(m==-1?0:m);if(a=x.documentation,typeof x.label=="string"){let R=T.slice(0),F=R.match(new RegExp("\\b"+x.label.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\b")),N=F?F.index:R.indexOf(x.label);N!=-1&&(p=[N+m,N+x.label.length+m])}else p=x.label}}if(p==null&&(p=[m+1,m+1]),r==l&&(r=r+p[0]+1),h.push({content:d.label,filetype:e.filetype,active:p}),a){let x=typeof a=="string"?a:a.value;x.trim().length&&h.push({content:x,filetype:Wg(d.documentation)?"markdown":"txt"})}if(g==0&&d.documentation){let{documentation:x}=d,T=typeof x=="string"?x:x.value;T.trim().length&&h.push({content:T,filetype:Wg(d.documentation)?"markdown":"txt"})}return h},[]),c=e.getline(t.line,!1).slice(0,t.character);this.lastPosition={bufnr:e.bufnr,lnum:t.line+1,col:Q(c)+1},await this.signatureFactory.show(u,{offsetX:r})}echoSignature(e){var s;let{signatures:t,activeParameter:i}=e,r=v.env.columns;t=t.slice(0,v.env.cmdheight);let o=[];for(let a of t){let l=[],{label:u}=a;u=u.replace(/\n/g," "),u.length>=r-16&&(u=u.slice(0,r-16)+"...");let c=u.indexOf("(");if(c==-1)l=[{text:u,type:"Normal"}];else{l.push({text:u.slice(0,c),type:"Label"});let h=u.slice(c);if(o.length==0&&i!=null){let d=(s=a.parameters)==null?void 0:s[i];if(d){let g,p;if(typeof d.label=="string"){let f=h.slice(0),m=f.match(new RegExp("\\b"+d.label.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\b")),b=m?m.index:f.indexOf(d.label);b==-1?l.push({text:h,type:"Normal"}):(g=b,p=b+d.label.length)}else[g,p]=d.label,g=g-c,p=p-c;g!=null&&p!=null&&(l.push({text:h.slice(0,g),type:"Normal"}),l.push({text:h.slice(g,p),type:"MoreMsg"}),l.push({text:h.slice(p),type:"Normal"}))}}else l.push({text:h,type:"Normal"})}o.push(l)}this.nvim.callTimer("coc#ui#echo_signatures",[o],!0)}dispose(){U(this.disposables),this.timer&&clearTimeout(this.timer)}};var cl=S(W());fe();de();re();et();xt();_e();xe();ie();var qie=S(Pn()),ul=S(W());de();re();ie();var WD=S(W());tb();xt();function Oie(n){let e=[],t=n.slice();return t.sort(Aie),t.forEach(i=>Nie(e,i,0)),e}function Aie(n,e){let t=n.selectionRange,i=e.selectionRange;return Me(t.start,i.start)}function Nie(n,e,t){let{name:i,selectionRange:r,detail:o,kind:s,children:a,range:l,tags:u}=e,{start:c}=r||l,h={col:c.character+1,lnum:c.line+1,text:i,level:t,kind:Ms(s),range:l,selectionRange:r};if(o&&(h.detail=o),u&&u.includes(WD.SymbolTag.Deprecated)&&(h.deprecated=!0),n.push(h),a&&a.length){a.sort(Aie);for(let d of a)Nie(n,d,t+1)}}function Hke(n){return n&&WD.DocumentSymbol.is(n)}function Hie(n){return Hke(n[0])}var cy=class{constructor(e,t){this.bufnr=e;this.autoUpdateBufnrs=t;this.disposables=[];this._onDidUpdate=new ul.Emitter;this.onDidUpdate=this._onDidUpdate.event;this.fetchSymbols=(0,qie.default)(()=>{this._fetchSymbols().logError()},500)}async getSymbols(){var t;let e=v.getDocument(this.bufnr);return e?(await e.patchChange(),this.autoUpdateBufnrs.add(this.bufnr),e.version==this.version&&((t=this.symbols)==null?void 0:t.length)?this.symbols:(this.cancel(),await this._fetchSymbols(),this.symbols)):[]}onChange(e){e.contentChanges.length!==0&&(this.cancel(),this.autoUpdateBufnrs.has(this.bufnr)&&this.fetchSymbols())}get textDocument(){var e;return(e=v.getDocument(this.bufnr))==null?void 0:e.textDocument}async _fetchSymbols(){let{textDocument:e}=this;if(!e)return;let{version:t}=e,i=this.tokenSource=new ul.CancellationTokenSource,{token:r}=i,o=await _.getDocumentSymbol(e,r);if(this.tokenSource=void 0,o==null||r.isCancellationRequested)return;let s;Hie(o)?s=o:s=o.map(a=>{let l=ul.DocumentSymbol.create(a.name,"",a.kind,a.location.range,a.location.range);return a.deprecated&&(l.tags=[ul.SymbolTag.Deprecated]),l}),this.version=t,this.symbols=s,this._onDidUpdate.fire(s)}cancel(){this.fetchSymbols.clear(),this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource.dispose(),this.tokenSource=null)}dispose(){this.cancel(),this.symbols=void 0,this._onDidUpdate.dispose(),U(this.disposables)}};var YD=S(W());fe();de();qe();var Bie=S(W());Jt();re();yf();function qke(n){return n?typeof n.text=="string"&&typeof n.hlGroup=="string":!1}function Bke(n,e){return n.label===e.label&&n.deprecated===e.deprecated&&n.key===e.key}function Wke(n,e){return n.length!==e.length?!1:n.every((t,i)=>Bke(t,e[i]))}var hy=class{constructor(e){this.opts=e;this.disposables=[];this._onDidChangeTreeData=new Bie.Emitter;this.onDidChangeTreeData=this._onDidChangeTreeData.event;this.invokeCommand=`_invoke_${oe()}`,this.disposables.push(ue.registerCommand(this.invokeCommand,async t=>{typeof e.handleClick=="function"?await e.handleClick(t):console.error("Handler not found")},null,!0)),typeof e.resolveActions=="function"&&(this.resolveActions=e.resolveActions.bind(this))}iterate(e,t,i,r){let o=r(e,t,i);if(o===!1)return!1;if(Array.isArray(e.children)){for(let s of e.children)if(this.iterate(s,e,i+1,r)===!1)return!1}return o}updateNodes(e,t,i,r=!0){let o=Wke(e,t),s=(a,l,u)=>{var h,d,g,p,f,m;let c=!1;for(let b of Object.keys(l))["children","key"].includes(b)||(a[b]=l[b]);if(((h=a.children)==null?void 0:h.length)&&!((d=l.children)!=null&&d.length)&&(delete a.children,c=!0),!((g=a.children)!=null&&g.length)&&((p=l.children)==null?void 0:p.length)&&(a.children=l.children,c=!0),c){u&&this._onDidChangeTreeData.fire(a);return}((f=a.children)==null?void 0:f.length)&&((m=l.children)==null?void 0:m.length)&&this.updateNodes(a.children,l.children,a,u)};if(o)for(let a=0;a!l.has(g)&&d.key==c.key):h=a.findIndex((d,g)=>!l.has(g)&&d.label==c.label),h===-1)e[u]=c;else{l.add(h);let d=a[h];s(d,c,!1),e[u]=d}}r&&this._onDidChangeTreeData.fire(i)}}update(e,t){if(!!this.data)return t?(this.data=e||[],this._onDidChangeTreeData.fire(void 0)):this.updateNodes(this.data,e||[],void 0),this.data}getTreeItem(e){var o;let t=e.label,{expandLevel:i}=this.opts,r;if(!((o=e.children)!=null&&o.length))r=new lo(t);else if(i&&i>0){let s=this.getLevel(e),a=s&&s<=i?2:1;r=new lo(t,a)}else r=new lo(t,1);if(r.description=e.description,e.deprecated&&(r.deprecated=!0),e.tooltip&&(r.tooltip=e.tooltip),qke(e.icon))r.icon=e.icon;else if(typeof this.opts.resolveIcon=="function"){let s=this.opts.resolveIcon(e);s&&(r.icon=s)}return r}async getChildren(e){if(e)return e.children||[];if(this.data)return this.data;let t=await Promise.resolve(this.opts.provideData());if(!Array.isArray(t))throw new Error("Unable to fetch data");return this.data=t,t}getParent(e){if(!this.data)return;let t;for(let i of this.data)if(this.iterate(i,null,0,(o,s)=>{if(o===e)return t=s,!1})===!1)break;return t}getLevel(e){if(!this.data)return;let t=0;for(let i of this.data)if(this.iterate(i,null,1,(o,s,a)=>{if(o===e)return t=a,!1})===!1)break;return t}async resolveTreeItem(e,t,i){if(typeof this.opts.resolveItem=="function"){let r=await Promise.resolve(this.opts.resolveItem(e,t,i));r&&Object.assign(e,r)}return e.command||(e.command={title:`invoke ${t.label}`,command:this.invokeCommand,arguments:[t]}),e}dispose(){this.data=[],this._onDidChangeTreeData.dispose(),typeof this.opts.onDispose=="function"&&this.opts.onDispose(),U(this.disposables)}};vf();re();xt();xe();ie();var tmt=q()("symbols-outline"),dy=class{constructor(e,t,i){this.nvim=e;this.buffers=t;this.handler=i;this.treeViewList=[];this.providersMap=new Map;this.sortByMap=new Map;this.disposables=[];this.loadConfiguration(),v.onDidChangeConfiguration(this.loadConfiguration,this,this.disposables),v.onDidCloseTextDocument(async r=>{let{bufnr:o}=r,s=this.providersMap.get(o);!s||await e.call("bufloaded",[o])||(this.providersMap.delete(o),s.dispose())},null,this.disposables),D.onDidChangeActiveTextEditor(async r=>{if(!this.config.checkBufferSwitch)return;this.treeViewList.find(s=>s.visible&&s.targetTabnr==r.tabpagenr)&&(await this.showOutline(r.document.bufnr,r.tabpagenr),await e.command(`noa call win_gotoid(${r.winid})`))},null,this.disposables),P.on("CursorHold",async(r,o)=>{if(!this.config.followCursor||!this.providersMap.get(r))return;let a=await e.call("tabpagenr"),l=this.treeViewList.find(u=>u.visible&&u.targetBufnr==r&&u.targetTabnr==a);!l||await this.revealPosition(r,l,YD.Position.create(o[0]-1,o[1]-1))},null,this.disposables)}async revealPosition(e,t,i){let r=this.providersMap.get(e),o=await Promise.resolve(r.getChildren()),s=Yke(i,o);s&&await t.reveal(s)}loadConfiguration(e){if(!e||e.affectsConfiguration("outline")){let t=v.getConfiguration("outline",null);this.config={splitCommand:t.get("splitCommand"),switchSortKey:t.get("switchSortKey"),togglePreviewKey:t.get("togglePreviewKey"),followCursor:t.get("followCursor"),keepWindow:t.get("keepWindow"),expandLevel:t.get("expandLevel"),autoWidth:t.get("autoWidth"),checkBufferSwitch:t.get("checkBufferSwitch"),detailAsDescription:t.get("detailAsDescription"),sortBy:t.get("sortBy"),showLineNumber:t.get("showLineNumber"),codeActionKinds:t.get("codeActionKinds"),autoPreview:t.get("autoPreview"),previewMaxWidth:t.get("previewMaxWidth"),previewBorder:t.get("previewBorder"),previewBorderRounded:t.get("previewBorderRounded"),previewHighlightGroup:t.get("previewHighlightGroup"),previewBorderHighlightGroup:t.get("previewBorderHighlightGroup"),previewWinblend:t.get("previewWinblend")}}}convertSymbolToNode(e,t){var s;let i=[],{detailAsDescription:r,showLineNumber:o}=this.config;return r&&e.detail&&i.push(e.detail),o&&i.push(`${e.selectionRange.start.line+1}`),{label:e.name,tooltip:r?void 0:e.detail,description:i.join(" "),icon:this.handler.getIcon(e.kind),deprecated:(s=e.tags)==null?void 0:s.includes(YD.SymbolTag.Deprecated),kind:e.kind,range:e.range,selectRange:e.selectionRange,children:Array.isArray(e.children)?e.children.map(a=>this.convertSymbolToNode(a,t)).sort(t):void 0}}setMessage(e,t){this.treeViewList.forEach(i=>{i.valid&&i.targetBufnr==e&&(i.message=t)})}convertSymbols(e,t){let i=this.getSortBy(e),r=(o,s)=>i==="name"?o.labelthis.convertSymbolToNode(o,r)).sort(r)}onSymbolsUpdate(e,t){let i=this.providersMap.get(e);i&&i.update(this.convertSymbols(e,t))}createProvider(e){let{nvim:t}=this,i=new hy({expandLevel:this.config.expandLevel,provideData:async()=>{let r=this.buffers.getItem(e);if(!r)throw new Error("Document not attached");let o=v.getDocument(e);if(!_.hasProvider("documentSymbol",o.textDocument))throw new Error("Document symbol provider not found");let s=_.getDocumentSymbolMetadata(o.textDocument);s&&s.label&&this.treeViewList.filter(u=>u.valid&&u.targetBufnr==e).forEach(u=>u.description=s.label),this.setMessage(e,"Loading document symbols");let a=await r.getSymbols();if(!a||a.length==0)throw new Error("Empty symbols returned from language server. ");return this.setMessage(e,void 0),this.convertSymbols(e,a)},handleClick:async r=>{let o=await t.call("bufwinnr",[e]);if(o==-1)return;t.pauseNotification(),t.command(`${o}wincmd w`,!0);let s=r.selectRange.start;t.call("coc#cursor#move_to",[s.line,s.character],!0),t.command("normal! zz",!0);let a=t.createBuffer(e);a.highlightRanges("outline-hover","CocHoverRange",[r.selectRange]),t.command("redraw",!0),await t.resumeNotification(),setTimeout(()=>{a.clearNamespace("outline-hover"),t.command("redraw",!0)},300)},resolveActions:async(r,o)=>{let s=await t.call("bufwinnr",[e]);if(s==-1)return;let a=v.getDocument(e);return[...(await this.handler.getCodeActions(a,o.range,this.config.codeActionKinds)).map(c=>({title:c.title,handler:async()=>{let h=o.range.start;await t.command(`${s}wincmd w`),await this.nvim.call("coc#cursor#move_to",[h.line,h.character]),await this.handler.applyCodeAction(c)}})),{title:"Visual Select",handler:async c=>{await t.command(`${s}wincmd w`),await D.selectRange(c.range)}}]},onDispose:()=>{for(let r of this.treeViewList.slice())r.provider===i&&r.dispose()}});return i}getSortBy(e){return this.sortByMap.get(e)??this.config.sortBy}async showOutline(e,t){this.providersMap.has(e)||this.providersMap.set(e,this.createProvider(e));let i=this.treeViewList.find(r=>r.valid&&r.targetBufnr==e&&r.targetTabnr==t);if(!i){let{switchSortKey:r,togglePreviewKey:o}=this.config,s=this.config.autoPreview,a;i=new Fo("OUTLINE",{autoWidth:this.config.autoWidth,bufhidden:"hide",enableFilter:!0,treeDataProvider:this.providersMap.get(e)});let l=this.getSortBy(e),u;i.description=`${l[0].toUpperCase()}${l.slice(1)}`,this.treeViewList.push(i);let c=P.on("BufEnter",h=>{a&&h!==a&&(u=void 0,this.closePreview())});i.onDispose(()=>{let h=this.treeViewList.findIndex(d=>d===i);h!==-1&&this.treeViewList.splice(h,1),c.dispose(),this.closePreview()}),i.onDidCursorMoved(async h=>{s&&u!==h&&(u=h,a=await this.doPreview(e,h))}),i.registerLocalKeymap("n",r,async()=>{let h=["category","name","position"],d=this.getSortBy(e),g=h.map(w=>({text:w,disabled:w===d})),p=await D.showMenuPicker(g,{title:"Choose sort method"});if(p<0)return;let f=h[p];this.sortByMap.set(e,f),this.treeViewList.filter(w=>w.targetBufnr==e).forEach(w=>{w.description=`${f[0].toUpperCase()}${f.slice(1)}`});let b=this.buffers.getItem(e);this.onSymbolsUpdate(e,b.symbols)},!0),i.registerLocalKeymap("n",o,async h=>{s=!s,s?a=await this.doPreview(e,h):(u=void 0,this.closePreview())},!0)}return await i.show(this.config.splitCommand),i}async doPreview(e,t){if(!t){this.closePreview();return}let i={bufnr:e,range:t.range,border:this.config.previewBorder,rounded:this.config.previewBorderRounded,maxWidth:this.config.previewMaxWidth,highlight:this.config.previewHighlightGroup,borderhighlight:this.config.previewBorderHighlightGroup,winblend:this.config.previewWinblend};return await this.nvim.call("coc#ui#outline_preview",[i])}closePreview(){this.nvim.call("coc#ui#outline_close_preview",[],!0)}async show(e){let[t,i,r]=await this.nvim.eval('[bufnr("%"),tabpagenr(),win_getid()]'),o=v.getDocument(t);if(o&&!o.attached){D.showErrorMessage(`Unable to show outline, ${o.notAttachReason}`);return}let s=await D.getCursorPosition(),a=await this.showOutline(t,i);if(e==1||e===void 0&&this.config.keepWindow)await this.nvim.command(`noa call win_gotoid(${r})`);else if(this.config.followCursor){let l=a.onDidRefrash(async()=>{l.dispose(),await this.nvim.eval('bufnr("%")')==t&&a.visible&&await this.revealPosition(t,a,s)})}}has(e){return this.providersMap.has(e)}async hide(){let e=await this.nvim.call("coc#window#find",["cocViewId","OUTLINE"]);e!=-1&&await this.nvim.call("coc#window#close",[e])}dispose(){for(let e of this.treeViewList)e.dispose();this.treeViewList=[];for(let e of this.providersMap.values())e.dispose();this.providersMap.clear(),U(this.disposables)}};function Yke(n,e){let t,i=r=>{for(let o of r)if(ft(n,o.range)==0){t=o,Array.isArray(o.children)&&i(o.children);break}};return i(e),t}var gy=class{constructor(e,t){this.nvim=e;this.handler=t;this.disposables=[];this.autoUpdateBufnrs=new Set;this.buffers=v.registerBufferSync(i=>{if(i.buftype!="")return;let r=new cy(i.bufnr,this.autoUpdateBufnrs);return r.onDidUpdate(o=>{!this.outline||this.outline.onSymbolsUpdate(r.bufnr,o)}),r}),this.outline=new dy(e,this.buffers,t),P.on("CursorHold",async(i,r)=>{if(!this.buffers.getItem(i)||!this.autoUpdate(i))return;let o=v.getDocument(i),s=Gi(o.getline(r[0]-1),r[1]-1),a=cl.Position.create(r[0]-1,s),l=await this.getFunctionSymbol(i,a);e.createBuffer(i).setVar("coc_current_function",l??"",!0),this.nvim.call("coc#util#do_autocmd",["CocStatusChange"],!0)},null,this.disposables),P.on("InsertEnter",i=>{let r=this.buffers.getItem(i);r&&r.cancel()},null,this.disposables)}autoUpdate(e){let t=v.getDocument(e);return v.getConfiguration("coc.preferences",t).get("currentFunctionSymbolAutoUpdate",!1)}get labels(){return v.getConfiguration("suggest").get("completionItemKindLabels",{})}async getWorkspaceSymbols(e){this.handler.checkProvier("workspaceSymbols",null);let t=new cl.CancellationTokenSource;return await _.getWorkspaceSymbols(e,t.token)}async resolveWorkspaceSymbol(e){var i;if((i=e.location)!=null&&i.uri)return e;let t=new cl.CancellationTokenSource;return await _.resolveWorkspaceSymbol(e,t.token)}async getDocumentSymbols(e){if(!e){let r=await v.document;if(!r||!r.attached)return;await Nt(1),e=r.bufnr}let t=this.buffers.getItem(e);if(!t)return;let i=await t.getSymbols();return i?Oie(i):void 0}async getFunctionSymbol(e,t){let i=await this.getDocumentSymbols(e),r=this.nvim.createBuffer(e);if(!i||i.length===0)return r.setVar("coc_current_function","",!0),this.nvim.call("coc#util#do_autocmd",["CocStatusChange"],!0),"";i=i.filter(a=>["Class","Method","Function","Struct"].includes(a.kind));let o="",s=this.labels;for(let a of i.reverse())if(a.range&&ft(t,a.range)==0&&!a.text.endsWith(") callback")){o=a.text;let l=s[a.kind.toLowerCase()];l&&(o=`${l} ${o}`);break}return o}async getCurrentFunctionSymbol(){let e=await this.nvim.call("bufnr",["%"]),t=v.getDocument(e);if(!t||!t.attached)return"";if(!_.hasProvider("documentSymbol",t.textDocument))return;let i=await D.getCursorPosition();return await this.getFunctionSymbol(e,i)}async selectSymbolRange(e,t,i){let{doc:r}=await this.handler.getCurrentState();this.handler.checkProvier("documentSymbol",r.textDocument);let o;if(t)o=await D.getSelectedRange(t);else{let l=await D.getCursorPosition();o=cl.Range.create(l,l)}let s=await this.getDocumentSymbols(r.bufnr);if(!s||s.length===0){D.showWarningMessage("No symbols found");return}s=s.filter(l=>i.includes(l.kind));let a;for(let l of s.reverse())if(l.range&&!ye(l.range,o)&&Xt(o,l.range)){a=l.range;break}if(e&&a){let{start:l,end:u}=a,c=r.getline(l.line+1),h=r.getline(u.line-1);a=cl.Range.create(l.line+1,c.match(/^\s*/)[0].length,u.line-1,h.length)}a?await D.selectRange(a):["v","V",""].includes(t)&&await this.nvim.command("normal! gv")}async showOutline(e){await this.outline.show(e)}async hideOutline(){await this.outline.hide()}hasOutline(e){return this.outline.has(e)}dispose(){this.outline.dispose(),this.buffers.dispose(),U(this.disposables)}};tb();var Wie=S(Pn()),ZD=S(W());fe();de();xt();_e();xe();ie();var Zke=q()("handler-linkedEditing"),py=class{constructor(e,t){this.nvim=e;this.changing=!1;this.checkPosition=(0,Wie.default)(this._checkPosition,100),t.addDisposable(P.on("CursorMoved",(i,r)=>{this.cancel(),this.checkPosition(i,[r[0],r[1]])})),t.addDisposable(P.on("CursorMovedI",(i,r)=>{this.cancel(),this.checkPosition(i,[r[0],r[1]])})),t.addDisposable(D.onDidChangeActiveTextEditor(()=>{this.cancel(),this.cancelEdit()})),t.addDisposable(P.on("InsertCharPre",(i,r)=>{if(r!==this.bufnr)return;let o=v.getDocument(r);this.wordPattern?new RegExp(this.wordPattern).test(i)||this.cancelEdit():!o.isWord(i)&&i!=="-"&&this.cancelEdit()})),t.addDisposable(v.onDidChangeTextDocument(async i=>{await this.onChange(i)}))}cancelEdit(){var e;(e=this.window)==null||e.clearMatchGroup("^CocLinkedEditing"),this.ranges=void 0,this.window=void 0,this.bufnr=void 0}async onChange(e){if(e.bufnr!==this.bufnr||this.changing||!this.ranges)return;if(e.contentChanges.length===0){this.doHighlights();return}let t=e.contentChanges[0],{text:i,range:r}=t,o=this.ranges.filter(s=>!(!Gl(r,s.range)||Fw(r,s.range)&&(i.includes(` -`)||!Lt(r))));if(o.length==1&&Xt(r,o[0].range)){if(i.includes(` -`)){this.cancelEdit();return}Zke.debug("affected single range"),await this.applySingleEdit(o[0],{range:r,newText:i})}else this.cancelEdit()}async applySingleEdit(e,t){let{bufnr:i,ranges:r}=this,o=v.getDocument(i);r.filter(c=>c!==e&&c.position.line==e.position.line).forEach(c=>c.adjustFromEdit(t));let a=HD(e,t.range,t.newText),l=Ib(a);r.forEach(c=>c.applyChange(a));let u=r.filter(c=>c!==e).map(c=>c.textEdit);if(this.changing=!0,await o.applyEdits(u,!0,!0),this.changing=!1,l!=0)for(let c of r){let h=Fb(c,this.ranges,e);c.move(h*l)}this.doHighlights()}doHighlights(){let{window:e,ranges:t,nvim:i}=this;e&&t&&(i.pauseNotification(),e.clearMatchGroup("^CocLinkedEditing"),e.highlightRanges("CocLinkedEditing",t.map(r=>r.range),99,!0),i.resumeNotification(!0,!0))}_checkPosition(e,t){if(P.pumvisible||!v.isAttached(e))return;let i=v.getDocument(e);if(!v.getConfiguration("coc.preferences",i).get("enableLinkedEditing",!1)||!_.hasProvider("linkedEditing",i.textDocument))return;let s=Gi(i.getline(t[0]-1),t[1]-1),a=ZD.Position.create(t[0]-1,s);if(this.ranges){if(this.ranges.some(l=>ft(a,l.range)==0))return;this.cancelEdit()}this.enable(i,a)}async enable(e,t){let i=e.textDocument,o=(this.tokenSource=new ZD.CancellationTokenSource).token,s=await this.nvim.window,a=await _.provideLinkedEdits(i,t,o);if(o.isCancellationRequested||!a||a.ranges.length==0)return;let l=a.ranges.map(u=>new Uu(u.start.line,u.start.character,i.getText(u)));this.wordPattern=a.wordPattern,this.bufnr=e.bufnr,this.window=s,this.ranges=l,this.doHighlights()}cancel(){this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource=null)}};var Yie=S(W());Jt();fe();de();re();xe();ie();var wo=S(W());fe();de();L_();re();xr();xt();_e();ie();var qmt=q()("inlayHint-buffer"),ec,Jke=100;function tj(n){switch(n){case wo.InlayHintKind.Parameter:return"CocInlayHintParameter";case wo.InlayHintKind.Type:return"CocInlayHintType";default:return"CocInlayHint"}}var fy=class{constructor(e,t){this.nvim=e;this.doc=t;this.regions=new ll;this.currentHints=[];this._onDidRefresh=new wo.Emitter;this.onDidRefresh=this._onDidRefresh.event;this.loadConfiguration(),this.render=lw(()=>{this.renderRange()},Jke),this.render()}loadConfiguration(){let e=v.getConfiguration("inlayHint",this.doc),t=this.config&&this.config.enable!=e.enable;if(this.config={enable:e.get("enable"),display:e.get("display",!0),filetypes:e.get("filetypes"),refreshOnInsertMode:e.get("refreshOnInsertMode"),enableParameter:e.get("enableParameter"),typeSeparator:e.get("typeSeparator",""),parameterSeparator:e.get("parameterSeparator",""),subSeparator:e.get("subSeparator"," ")},t){let{enable:i,display:r}=this.config;i?(this.clearCache(),this.clearVirtualText()):r&&this.renderRange()}}onInsertLeave(){this.config.refreshOnInsertMode||this.render()}onInsertEnter(){this.config.refreshOnInsertMode||this.cancel()}get current(){return this.currentHints}get enabled(){return!this.config.display||!this.configEnabled?!1:_.hasProvider("inlayHint",this.doc.textDocument)}get configEnabled(){let{filetypes:e,enable:t}=this.config;return Array.isArray(e)?e.includes("*")||e.includes(this.doc.filetype):t===!0}toggle(){if(!_.hasProvider("inlayHint",this.doc.textDocument))throw new Error("Inlay hint provider not found for current document");if(!this.configEnabled)throw new Error(`Filetype "${this.doc.filetype}" not enabled by inlayHint configuration`);this.config.display?(this.config.display=!1,this.clearCache(),this.clearVirtualText()):(this.config.display=!0,this.renderRange())}clearCache(){this.currentHints=[],this.regions.clear(),this.render.clear()}onTextChange(){this.clearCache(),this.cancel()}onChange(){this.cancel(),this.render()}cancel(){this.render.clear(),this.tokenSource&&(this.tokenSource.cancel(),this.tokenSource=null)}async requestInlayHints(e,t){try{return await _.provideInlayHints(this.doc.textDocument,e,t)}catch(i){!t.isCancellationRequested&&i instanceof ii&&this.render(500)}}async renderRange(){if(this.cancel(),P.insertMode&&!this.config.refreshOnInsertMode||!this.enabled)return;this.tokenSource=new wo.CancellationTokenSource;let e=this.tokenSource.token,t=await this.nvim.call("coc#window#visible_range",[this.doc.bufnr]);if(!Array.isArray(t)||t[1]<=0||e.isCancellationRequested||(ec||(ec=await this.nvim.createNamespace("coc-inlayHint")),e.isCancellationRequested||this.regions.has(t[0],t[1])))return;let i=wo.Range.create(t[0]-1,0,t[1],0),r=await this.requestInlayHints(i,e);r==null||e.isCancellationRequested||(this.regions.add(t[0],t[1]),this.config.enableParameter||(r=r.filter(o=>o.kind!==wo.InlayHintKind.Parameter)),this.currentHints=this.currentHints.filter(o=>ft(o.position,i)!==0),this.currentHints.push(...r),this.setVirtualText(i,r,v.env.isVim))}setVirtualText(e,t,i){let{nvim:r,doc:o}=this,s=o.buffer,{subSeparator:a,parameterSeparator:l,typeSeparator:u}=this.config,c=new Map;if(!i)for(let h of t){let{line:d}=h.position,g=c.get(d)??[];g.length>0&&g.push([a,a===" "?"Normal":tj(h.kind)]);let p=h.kind===wo.InlayHintKind.Parameter?l:u;g.push([p+Mf(h),tj(h.kind)]),c.set(d,g)}if(r.pauseNotification(),s.clearNamespace(ec,e.start.line,e.end.line+1),i)for(let h of t){let d=[],{position:g}=h,p=this.doc.getline(g.line),f=_t(p,g.character)+1;h.paddingLeft&&d.push([" ","Normal"]),d.push([Mf(h),tj(h.kind)]),h.paddingRight&&d.push([" ","Normal"]),s.setVirtualText(ec,g.line,d,{col:f})}else for(let[h,d]of c.entries())s.setExtMark(ec,h,0,{virt_text:d,virt_text_pos:"eol",hl_mode:"combine"});r.resumeNotification(!0,!0),this._onDidRefresh.fire()}clearVirtualText(){ec&&this.doc.buffer.clearNamespace(ec)}dispose(){this.cancel()}};var Gmt=q()("inlayHint-index"),my=class{constructor(e,t){this.disposables=[];this.buffers=v.registerBufferSync(i=>{if(!!v.env.virtualText)return new fy(e,i)}),this.disposables.push(this.buffers),v.onDidChangeConfiguration(i=>{for(let r of this.buffers.items)i.affectsConfiguration("inlayHint",r.doc)&&r.loadConfiguration()},null,this.disposables),_.onDidInlayHintRefresh(async i=>{for(let r of this.buffers.items)v.match(i,r.doc.textDocument)&&(r.clearCache(),_.hasProvider("inlayHint",r.doc.textDocument)?r.render():r.clearVirtualText())},null,this.disposables),P.on("InsertLeave",i=>{let r=this.buffers.getItem(i);r&&r.onInsertLeave()},null,this.disposables),P.on("InsertEnter",i=>{let r=this.buffers.getItem(i);r&&r.onInsertEnter()},null,this.disposables),P.on("CursorMoved",i=>{this.refresh(i)},null,this.disposables),P.on("WinScrolled",async i=>{let r=await e.call("winbufnr",[i]);r!=-1&&this.refresh(r)},null,this.disposables),this.disposables.push(ue.registerCommand("document.toggleInlayHint",i=>{this.toggle(i??v.bufnr)})),t.addDisposable(Yie.Disposable.create(()=>{U(this.disposables)}))}toggle(e){let t=this.getItem(e);try{if(!v.env.virtualText)throw new Error("virtual text requires nvim >= 0.5.0 or vim >= 9.0.0067, please upgrade your vim.");v.getAttachedDocument(e),t.toggle()}catch(i){D.showErrorMessage(i.message)}}getItem(e){return this.buffers.getItem(e)}refresh(e){let t=this.buffers.getItem(e);t&&t.render()}};var $ke=q()("Handler"),by=class{constructor(e){this.nvim=e;this.disposables=[];this.requestStatusItem=D.createStatusBarItem(0,{progress:!0}),P.on(["CursorMoved","CursorMovedI","InsertEnter","InsertSnippet","InsertLeave"],()=>{this.requestTokenSource&&(this.requestTokenSource.cancel(),this.requestTokenSource=null)},null,this.disposables),this.labels=v.getConfiguration("suggest").get("completionItemKindLabels",{}),this.fold=new Zb(e,this),this.links=new Gb(e,this),this.codeLens=new Hb(e),this.colors=new Wb(e,this),this.format=new Jb(e,this),this.symbols=new gy(e,this),this.refactor=new ty(e,this),this.hover=new Xb(e,this),this.locations=new zb(e,this),this.signature=new uy(e,this),this.rename=new ny(e,this),this.workspace=new ry(e,this),this.codeActions=new Ab(e,this),this.commands=new Yb(e,v.env),this.callHierarchy=new Ku(e,this),this.typeHierarchy=new Vu(e,this),this.documentHighlighter=new $b(e,this),this.semanticHighlighter=new ay(e),this.selectionRange=new oy(e,this),this.linkedEditingHandler=new py(e,this),this.inlayHintHandler=new my(e,this),this.disposables.push({dispose:()=>{this.callHierarchy.dispose(),this.typeHierarchy.dispose(),this.codeLens.dispose(),this.links.dispose(),this.refactor.dispose(),this.signature.dispose(),this.symbols.dispose(),this.hover.dispose(),this.colors.dispose(),this.documentHighlighter.dispose(),this.semanticHighlighter.dispose()}}),this.refactor.init()}get uri(){var e;return(e=D.activeTextEditor)==null?void 0:e.document.uri}async getCurrentState(){let{nvim:e}=this,[t,[i,r],o,s]=await e.eval("[bufnr('%'),coc#cursor#position(),win_getid(),mode()]");return{doc:v.getAttachedDocument(t),mode:s,position:JD.Position.create(i,r),winid:o}}addDisposable(e){this.disposables.push(e)}checkProvier(e,t){if(!_.hasProvider(e,t))throw new Error(`${e} provider not found for current buffer, your language server doesn't support it.`)}async withRequestToken(e,t,i){this.requestTokenSource&&(this.requestTokenSource.cancel(),this.requestTokenSource.dispose()),this.requestTimer&&clearTimeout(this.requestTimer);let r=this.requestStatusItem;this.requestTokenSource=new JD.CancellationTokenSource;let{token:o}=this.requestTokenSource;o.onCancellationRequested(()=>{r.text=`${e} request canceled`,r.isProgress=!1,this.requestTimer=setTimeout(()=>{r.hide()},500)}),r.isProgress=!0,r.text=`requesting ${e}`,r.show();let s;try{s=await Promise.resolve(t(o))}catch(a){$ke.error(`Error on request ${e}`,a),this.nvim.errWriteLine(`Error on ${e}: ${a}`)}return this.requestTokenSource&&(this.requestTokenSource.dispose(),this.requestTokenSource=void 0),o.isCancellationRequested?null:(r.hide(),i&&(!s||Array.isArray(s)&&s.length==0)?(D.showWarningMessage(`${e} not found`),null):s)}getIcon(e){let{labels:t}=this,i=Ms(e),r=typeof t.default=="string"?t.default:i[0].toLowerCase(),o=i=="Unknown"?"":t[i[0].toLowerCase()+i.slice(1)];return(!o||typeof o!="string")&&(o=r),{text:o,hlGroup:i=="Unknown"?"CocSymbolDefault":`CocSymbol${i}`}}async getCodeActions(e,t,i){return(await this.codeActions.getCodeActions(e,t,i)).filter(o=>!o.disabled)}async applyCodeAction(e){await this.codeActions.applyCodeAction(e)}async hasProvider(e){let t=await this.nvim.call("bufnr","%"),i=v.getDocument(t);return i?_.hasProvider(e,i.textDocument):!1}dispose(){this.requestTimer&&clearTimeout(this.requestTimer),U(this.disposables)}};mD();Hm();Yu();Os();re();xe();ie();var Zie=q()("plugin"),yy=class extends Jie.EventEmitter{constructor(t){super();this.nvim=t;this._ready=!1;this.actions=new Map;this.disposables=[];this.disposables.push(v.registerTextDocumentContentProvider("output",hs.getProvider(t))),Object.defineProperty(D,"workspace",{get:()=>v}),Object.defineProperty(v,"nvim",{get:()=>this.nvim}),Object.defineProperty(D,"cursors",{get:()=>this.cursors}),v.onDidChangeWorkspaceFolders(()=>{t.setVar("WorkspaceFolders",v.folderPaths,!0)},null,this.disposables),P.on("VimResized",(i,r)=>{v.env&&Object.assign(v.env,{columns:i,lines:r})},null,this.disposables),this.cursors=new Ob(t),ue.init(t,this),this.addAction("checkJsonExtension",()=>{je.has("coc-json")||D.showInformationMessage("Run :CocInstall coc-json for json intellisense")}),this.addAction("rootPatterns",i=>this.handler.workspace.getRootPatterns(i)),this.addAction("ensureDocument",()=>this.handler.workspace.ensureDocument()),this.addAction("getConfig",async i=>this.handler.workspace.getConfiguration(i)),this.addAction("doAutocmd",async(i,...r)=>this.handler.workspace.doAutocmd(i,r)),this.addAction("openLog",async()=>this.handler.workspace.openLog()),this.addAction("attach",()=>v.attach()),this.addAction("detach",()=>v.detach()),this.addAction("doKeymap",async(i,r,o)=>this.handler.workspace.doKeymap(i,r,o)),this.addAction("registerExtensions",(...i)=>je.manager.loadExtension(i),"registExtensions"),this.addAction("snippetCheck",async(i,r)=>this.handler.workspace.snippetCheck(i,r)),this.addAction("snippetNext",()=>ai.nextPlaceholder()),this.addAction("snippetPrev",()=>ai.previousPlaceholder()),this.addAction("snippetCancel",()=>ai.cancel()),this.addAction("openLocalConfig",()=>D.openLocalConfig()),this.addAction("bufferCheck",()=>D.bufferCheck()),this.addAction("showInfo",()=>this.handler.workspace.showInfo()),this.addAction("hasProvider",i=>this.handler.hasProvider(i)),this.addAction("listNames",()=>Bi.names),this.addAction("listDescriptions",()=>Bi.descriptions),this.addAction("listLoadItems",i=>Bi.loadItems(i)),this.addAction("search",(...i)=>this.handler.refactor.search(i)),this.addAction("cursorsSelect",(i,r,o)=>this.cursors.select(i,r,o)),this.addAction("fillDiagnostics",i=>Wt.setLocationlist(i)),this.addAction("saveRefactor",i=>this.handler.refactor.save(i)),this.addAction("commandList",()=>this.handler.commands.getCommandList()),this.addAction("selectSymbolRange",(i,r,o)=>this.handler.symbols.selectSymbolRange(i,r,o)),this.addAction("openList",(...i)=>Bi.start(i)),this.addAction("listResume",i=>Bi.resume(i)),this.addAction("listCancel",()=>Bi.cancel(!0)),this.addAction("listPrev",i=>Bi.previous(i)),this.addAction("listNext",i=>Bi.next(i)),this.addAction("listFirst",i=>Bi.first(i)),this.addAction("listLast",i=>Bi.last(i)),this.addAction("sendRequest",(i,r,o)=>yn.sendRequest(i,r,o)),this.addAction("sendNotification",(i,r,o)=>yn.sendNotification(i,r,o)),this.addAction("registerNotification",(i,r)=>yn.registerNotification(i,r),"registNotification"),this.addAction("updateConfig",(i,r)=>v.configurations.updateMemoryConfig({[i]:r})),this.addAction("links",()=>this.handler.links.getLinks()),this.addAction("openLink",()=>this.handler.links.openCurrentLink()),this.addAction("pickColor",()=>this.handler.colors.pickColor()),this.addAction("colorPresentation",()=>this.handler.colors.pickPresentation()),this.addAction("highlight",()=>this.handler.documentHighlighter.highlight()),this.addAction("fold",i=>this.handler.fold.fold(i)),this.addAction("startCompletion",i=>Lb.startCompletion(i)),this.addAction("sourceStat",()=>St.sourceStats()),this.addAction("refreshSource",i=>St.refresh(i)),this.addAction("toggleSource",i=>St.toggleSource(i)),this.addAction("diagnosticRefresh",i=>Wt.refresh(i)),this.addAction("diagnosticInfo",()=>Wt.echoCurrentMessage()),this.addAction("diagnosticToggle",i=>Wt.toggleDiagnostic(i)),this.addAction("diagnosticToggleBuffer",(i,r)=>Wt.toggleDiagnosticBuffer(i,r)),this.addAction("diagnosticNext",i=>Wt.jumpNext(i)),this.addAction("diagnosticPrevious",i=>Wt.jumpPrevious(i)),this.addAction("diagnosticPreview",()=>Wt.preview()),this.addAction("diagnosticList",async()=>Wt.getDiagnosticList()),this.addAction("findLocations",(i,r,o,s)=>this.handler.locations.findLocations(i,r,o,s)),this.addAction("getTagList",()=>this.handler.locations.getTagList()),this.addAction("jumpDefinition",i=>this.handler.locations.gotoDefinition(i)),this.addAction("definitions",()=>this.handler.locations.definitions()),this.addAction("jumpDeclaration",i=>this.handler.locations.gotoDeclaration(i)),this.addAction("declarations",()=>this.handler.locations.declarations()),this.addAction("jumpImplementation",i=>this.handler.locations.gotoImplementation(i)),this.addAction("implementations",()=>this.handler.locations.implementations()),this.addAction("jumpTypeDefinition",i=>this.handler.locations.gotoTypeDefinition(i)),this.addAction("typeDefinitions",()=>this.handler.locations.typeDefinitions()),this.addAction("jumpReferences",i=>this.handler.locations.gotoReferences(i)),this.addAction("references",i=>this.handler.locations.references(i)),this.addAction("jumpUsed",i=>this.handler.locations.gotoReferences(i,!1)),this.addAction("doHover",i=>this.handler.hover.onHover(i)),this.addAction("definitionHover",i=>this.handler.hover.definitionHover(i)),this.addAction("getHover",()=>this.handler.hover.getHover()),this.addAction("showSignatureHelp",()=>this.handler.signature.triggerSignatureHelp()),this.addAction("documentSymbols",i=>this.handler.symbols.getDocumentSymbols(i)),this.addAction("symbolRanges",()=>this.handler.documentHighlighter.getSymbolsRanges()),this.addAction("selectionRanges",()=>this.handler.selectionRange.getSelectionRanges()),this.addAction("rangeSelect",(i,r)=>this.handler.selectionRange.selectRange(i,r)),this.addAction("rename",i=>this.handler.rename.rename(i)),this.addAction("getWorkspaceSymbols",i=>this.handler.symbols.getWorkspaceSymbols(i)),this.addAction("resolveWorkspaceSymbol",i=>this.handler.symbols.resolveWorkspaceSymbol(i)),this.addAction("formatSelected",i=>this.handler.format.formatCurrentRange(i)),this.addAction("format",()=>this.handler.format.formatCurrentBuffer()),this.addAction("commands",()=>this.handler.commands.getCommands()),this.addAction("services",()=>yn.getServiceStats()),this.addAction("toggleService",i=>yn.toggle(i)),this.addAction("codeAction",(i,r)=>this.handler.codeActions.doCodeAction(i,r)),this.addAction("organizeImport",()=>this.handler.codeActions.organizeImport()),this.addAction("fixAll",()=>this.handler.codeActions.doCodeAction(null,[ij.CodeActionKind.SourceFixAll])),this.addAction("doCodeAction",i=>this.handler.codeActions.applyCodeAction(i)),this.addAction("codeActions",(i,r)=>this.handler.codeActions.getCurrentCodeActions(i,r)),this.addAction("quickfixes",i=>this.handler.codeActions.getCurrentCodeActions(i,[ij.CodeActionKind.QuickFix])),this.addAction("codeLensAction",()=>this.handler.codeLens.doAction()),this.addAction("runCommand",(...i)=>this.handler.commands.runCommand(...i)),this.addAction("doQuickfix",()=>this.handler.codeActions.doQuickfix()),this.addAction("refactor",()=>this.handler.refactor.doRefactor()),this.addAction("repeatCommand",()=>this.handler.commands.repeat()),this.addAction("installExtensions",(...i)=>je.installExtensions(i)),this.addAction("updateExtensions",()=>je.updateExtensions()),this.addAction("extensionStats",()=>je.getExtensionStates()),this.addAction("loadedExtensions",()=>je.manager.loadedExtensions),this.addAction("watchExtension",i=>je.manager.watchExtension(i)),this.addAction("activeExtension",i=>je.manager.activate(i)),this.addAction("deactivateExtension",i=>je.manager.deactivate(i)),this.addAction("reloadExtension",i=>je.manager.reloadExtension(i)),this.addAction("toggleExtension",i=>je.manager.toggleExtension(i)),this.addAction("uninstallExtension",(...i)=>je.manager.uninstallExtensions(i)),this.addAction("getCurrentFunctionSymbol",()=>this.handler.symbols.getCurrentFunctionSymbol()),this.addAction("showOutline",i=>this.handler.symbols.showOutline(i)),this.addAction("hideOutline",()=>this.handler.symbols.hideOutline()),this.addAction("getWordEdit",()=>this.handler.rename.getWordEdit()),this.addAction("addCommand",i=>this.handler.commands.addVimCommand(i)),this.addAction("addRanges",i=>this.cursors.addRanges(i)),this.addAction("currentWorkspacePath",()=>v.rootPath),this.addAction("selectCurrentPlaceholder",i=>ai.selectCurrentPlaceholder(!!i)),this.addAction("codeActionRange",(i,r,o)=>this.handler.codeActions.codeActionRange(i,r,o)),this.addAction("incomingCalls",i=>this.handler.callHierarchy.getIncoming(i)),this.addAction("outgoingCalls",i=>this.handler.callHierarchy.getOutgoing(i)),this.addAction("showIncomingCalls",()=>this.handler.callHierarchy.showCallHierarchyTree("incoming")),this.addAction("showOutgoingCalls",()=>this.handler.callHierarchy.showCallHierarchyTree("outgoing")),this.addAction("showSuperTypes",()=>this.handler.typeHierarchy.showTypeHierarchyTree("supertypes")),this.addAction("showSubTypes",()=>this.handler.typeHierarchy.showTypeHierarchyTree("subtypes")),this.addAction("inspectSemanticToken",()=>this.handler.semanticHighlighter.inspectSemanticToken()),this.addAction("semanticHighlight",()=>this.handler.semanticHighlighter.highlightCurrent()),this.addAction("showSemanticHighlightInfo",()=>this.handler.semanticHighlighter.showHighlightInfo())}get workspace(){return v}get completion(){return Lb}addAction(t,i,r){if(this.actions.has(t))throw new Error(`Action ${t} already exists`);this.actions.set(t,i),r&&this.actions.set(r,i)}async init(){let{nvim:t}=this,i=Date.now();try{await je.init(),await v.init(D),t.setVar("coc_workspace_initialized",!0,!0),ai.init(),Lb.init(),Wt.init(),Bi.init(t),St.init(),this.handler=new by(t),yn.init(),je.activateExtensions(),v.autocmds.setupDynamicAutocmd(!0),t.pauseNotification(),t.setVar("WorkspaceFolders",v.folderPaths,!0),t.setVar("coc_service_initialized",1,!0),t.call("coc#util#do_autocmd",["CocNvimInit"],!0),t.resumeNotification(!1,!0),this._ready=!0,await P.fire("ready",[]),Zie.info(`coc.nvim initialized with node: ${process.version} after ${Date.now()-i}ms`),this.emit("ready")}catch(r){t.echoError(r)}}get isReady(){return this._ready}get ready(){return this._ready?Promise.resolve():new Promise(t=>{this.once("ready",()=>{t()})})}hasAction(t){return this.actions.has(t)}async cocAction(t,...i){let r=this.actions.get(t);if(!r)throw new Error(`Action "${t}" doesn't exist`);let o=Date.now(),s=await Promise.resolve(r.apply(null,i)),a=Date.now()-o;return a>500&&Zie.warn(`Slow action "${t}" cost ${a}ms`),s}getHandler(){return this.handler}dispose(){this.removeAllListeners(),U(this.disposables),je.dispose(),Bi.dispose(),v.dispose(),hs.dispose(),D.dispose(),St.dispose(),yn.dispose(),this.handler&&this.handler.dispose(),ai.dispose(),ue.dispose(),Lb.dispose(),Wt.dispose()}};var Xie=S(of());wi();Pe();wR();var xo=q()("attach"),Uke=["installExtensions","updateExtensions"],Gie=(n,e=!0)=>{let t=(0,$ie.attach)(n,Uie.default.getLogger("node-client"),e);t.call("coc#util#path_replace_patterns").then(s=>{if(hi(s)){let a=j.file;j.file=l=>(l=l.replace(/\\/g,"/"),Object.keys(s).forEach(u=>l=l.replace(new RegExp("^"+u),s[u])),a(l))}}).logError(),t.setVar("coc_process_pid",process.pid,!0);let i=new yy(t),r=!1,o=!1;return t.on("notification",async(s,a)=>{switch(s){case"VimEnter":{!o&&r&&(o=!0,await i.init());break}case"Log":{xo.debug(...a);break}case"TaskExit":case"TaskStderr":case"TaskStdout":case"GlobalChange":case"PromptInsert":case"InputChar":case"MenuInput":case"OptionSet":case"PromptKeyPress":case"FloatBtnClick":case"CompleteStop":xo.trace("Event: ",s,...a),await P.fire(s,a);break;case"CocAutocmd":xo.trace("Notification autocmd:",...a),await P.fire(a[0],a.slice(1));break;case"redraw":break;default:{if(!i.hasAction(s)){console.error(`action "${s}" does not exist`);return}try{i.isReady?xo.info("receive notification:",s,a):xo.warn(`Plugin not ready when received "${s}"`,a),await i.ready,await i.cocAction(s,...a)}catch(u){t.echoError(`Error on notification "${s}": ${u instanceof Error?u.message:u}`),xo.error(u)}}}}),t.on("request",async(s,a,l)=>{if(s=="redraw"){l.send();return}let u=setTimeout(()=>{xo.error("Request cost more than 3s",s,a)},3e3);try{if(P.requesting=!0,s=="CocAutocmd")xo.trace("Request autocmd:",...a),await P.fire(a[0],a.slice(1)),l.send(void 0);else{if(!i.isReady&&!Uke.includes(s)){xo.warn(`Plugin not ready on request "${s}"`,a),l.send("Plugin not ready",!0);return}xo.info("Request action:",s,a);let c=await i.cocAction(s,...a);l.send(c)}clearTimeout(u),P.requesting=!1}catch(c){P.requesting=!1,clearTimeout(u),l.send(c instanceof Error?c.message:c.toString(),!0),xo.error("Request error:",s,a,c)}}),t.channelId.then(async s=>{r=!0;let{major:a,minor:l,patch:u}=Xie.default.parse(Kw);t.setClientInfo("coc",{major:a,minor:l,patch:u},"remote",{},{}),await t.getVvar("vim_did_enter")&&!o&&(o=!0,await i.init())}).catch(s=>{console.error(`Channel create error: ${s.message}`)}),i};Object.defineProperty(console,"log",{value(){$D&&$D.info(...arguments)}});var $D=q()("server");Gie({reader:process.stdin,writer:process.stdout});process.on("uncaughtException",function(n){let e="Uncaught exception: "+n.message;console.error(e),$D.error("uncaughtException",n.stack)});process.on("unhandledRejection",function(n,e){n instanceof Error?console.error("UnhandledRejection: "+n.message+` -`+n.stack):console.error("UnhandledRejection: "+n),$D.error("unhandledRejection ",e,n)}); -/*! - * bytes - * Copyright(c) 2012-2014 TJ Holowaychuk - * Copyright(c) 2015 Jed Watson - * MIT Licensed - */ -/*! - * content-disposition - * Copyright(c) 2014-2017 Douglas Christopher Wilson - * MIT Licensed - */ -/*! (c) 2020 Andrea Giammarchi */ -/*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh */ -/** - * event-lite.js - Light-weight EventEmitter (less than 1KB when gzipped) - * - * @copyright Yusuke Kawasaki - * @license MIT - * @constructor - * @see https://github.com/kawanet/event-lite - * @see http://kawanet.github.io/event-lite/EventLite.html - * @example - * var EventLite = require("event-lite"); - * - * function MyClass() {...} // your class - * - * EventLite.mixin(MyClass.prototype); // import event methods - * - * var obj = new MyClass(); - * obj.on("foo", function() {...}); // add event listener - * obj.once("bar", function() {...}); // add one-time event listener - * obj.emit("foo"); // dispatch event - * obj.emit("bar"); // dispatch another event - * obj.off("foo"); // remove event listener - */ diff --git a/dotfiles/.vim/plugged/coc.nvim/data/schema.json b/dotfiles/.vim/plugged/coc.nvim/data/schema.json deleted file mode 100644 index 25212ec9..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/data/schema.json +++ /dev/null @@ -1,2153 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "description": "Configuration file for coc.nvim", - "additionalProperties": false, - "definitions": { - "float": { - "type": "object", - "properties": { - "border": { - "type": "boolean", - "default": false, - "description": "Set to true to use borders." - }, - "rounded": { - "type": "boolean", - "default": false, - "description": "Use rounded borders when border is true." - }, - "highlight": { - "type": "string", - "default": "CocFloating", - "description": "Background highlight group of float window." - }, - "title": { - "type": "string", - "default": "", - "description": "Title used by float window." - }, - "borderhighlight": { - "type": "string", - "default": "CocFloating", - "description": "Border highlight group of float window." - }, - "close": { - "type": "boolean", - "default": false, - "description": "Set to true to draw close icon" - }, - "maxWidth": { - "type": "integer", - "description": "Maximum width of float window, include border." - }, - "maxHeight": { - "type": "integer", - "minimum": 2, - "description": "Maximum height of float window, include border." - }, - "focusable": { - "type": "boolean", - "default": true, - "description": "Enable focus by user actions (wincmds, mouse events), neovim only." - }, - "shadow": { - "type": "boolean", - "default": false, - "description": "Drop shadow effect by blending with the background, neovim only." - }, - "winblend": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 100, - "description": "Enables pseudo-transparency by set 'winblend' option of window, neovim only." - } - } - }, - "languageServerBase": { - "type": "object", - "properties": { - "enable": { - "type": "boolean", - "default": true - }, - "cwd": { - "type": "string", - "default": "", - "description": "Working directory of languageserver, absolute path or relative to workspace folder, use workspace root by default" - }, - "disableDynamicRegister": { - "type": "boolean", - "default": false, - "description": "Disable dynamic registerCapability feature for this languageserver to avoid duplicate feature registration." - }, - "disableSnippetCompletion": { - "type": "boolean", - "default": false, - "description": "Disable completion snippet feature for this languageserver, the languageserver may not respect it." - }, - "disabledFeatures": { - "type": "array", - "default": [], - "description": "Disabled features for this languageserver.", - "items": { - "type": "string", - "enum": [ - "completion", - "configuration", - "workspaceFolders", - "diagnostics", - "willSave", - "willSaveUntil", - "didSaveTextDocument", - "fileSystemWatcher", - "hover", - "signatureHelp", - "definition", - "references", - "documentHighlight", - "documentSymbol", - "workspaceSymbol", - "codeAction", - "codeLens", - "formatting", - "documentFormatting", - "documentRangeFormatting", - "documentOnTypeFormatting", - "rename", - "documentLink", - "executeCommand", - "pullConfiguration", - "typeDefinition", - "implementation", - "declaration", - "color", - "foldingRange", - "selectionRange", - "progress", - "callHierarchy", - "linkedEditing", - "inlayHint", - "inlineValue", - "typeHierarchy", - "pullDiagnostic", - "fileEvents", - "semanticTokens" - ] - } - }, - "formatterPriority": { - "type": "number", - "default": 0, - "description": "Priority of this languageserver's formatter." - }, - "env": { - "type": "object", - "default": null, - "description": "Environment variables for child process." - }, - "stdioEncoding": { - "type": "string", - "default": "utf8", - "description": "Encoding used for stdio of child process." - }, - "rootPatterns": { - "type": "array", - "default": [], - "description": "Root patterns used to resolve rootPath from current file, default to workspace root", - "items": { - "type": "string" - } - }, - "requireRootPattern": { - "type": "boolean", - "default": false, - "description": "If true, doesn't start server when root pattern not found." - }, - "ignoredRootPaths": { - "type": "array", - "default": [], - "description": "Absolute root paths that language server should not use as rootPath, higher priority than rootPatterns.", - "items": { - "type": "string" - } - }, - "filetypes": { - "type": "array", - "default": [], - "description": "Supported filetypes, add * in array for all filetypes.", - "items": { - "type": "string" - } - }, - "additionalSchemes": { - "type": "array", - "default": [], - "description": "Additional URI schemes, default schemes including file & untitled.", - "items": { - "type": "string" - } - }, - "revealOutputChannelOn": { - "type": "string", - "default": "never", - "description": "Configure message level to show the output channel buffer", - "enum": ["info", "warn", "error", "never"] - }, - "progressOnInitialization": { - "type": "boolean", - "default": false, - "description": "Enable progress report on languageserver initialize." - }, - "initializationOptions": { - "type": "object", - "default": {}, - "description": "initializationOptions passed to languageserver" - }, - "settings": { - "type": "object", - "default": {}, - "description": "Settings of languageserver" - }, - "trace.server": { - "type": "string", - "default": "off", - "enum": ["off", "messages", "verbose"], - "description": "Trace level of communication between server and client" - }, - "trace.server.verbosity": { - "type": "string", - "default": "off", - "enum": ["off", "messages", "verbose"], - "description": "Trace level of communication between server and client" - }, - "trace.server.format": { - "type": "string", - "default": "text", - "enum": ["text", "json"], - "description": "Text format of trace messages." - } - } - }, - "languageServerSocket": { - "type": "object", - "allOf": [{ "$ref": "#/definitions/languageServerBase" }], - "required": ["port", "filetypes"], - "additionalProperties": false, - "properties": { - "port": { - "type": "integer", - "description": "Port number of socket server" - }, - "host": { - "type": "string", - "default": "127.0.0.1", - "description": "Host of server" - }, - "disableSnippetCompletion": {}, - "disableDynamicRegister": {}, - "disabledFeatures": {}, - "formatterPriority": {}, - "enable": {}, - "rootPatterns": {}, - "requireRootPattern": {}, - "ignoredRootPaths": {}, - "filetypes": {}, - "additionalSchemes": {}, - "revealOutputChannelOn": {}, - "progressOnInitialization": {}, - "initializationOptions": {}, - "settings": {}, - "stdioEncoding": {}, - "trace.server": {}, - "trace.server.verbosity": {}, - "trace.server.format": {} - } - }, - "languageServerModule": { - "type": "object", - "allOf": [{ "$ref": "#/definitions/languageServerBase" }], - "required": ["module", "filetypes"], - "additionalProperties": false, - "properties": { - "module": { - "type": "string", - "default": "", - "description": "Absolute path of Javascript file, should works in IPC mode" - }, - "args": { - "type": "array", - "default": [], - "description": "Extra arguments of module", - "items": { - "type": "string" - } - }, - "runtime": { - "type": "string", - "default": "", - "description": "Absolute path of node runtime." - }, - "execArgv": { - "type": "array", - "default": [], - "description": "ARGV passed to node when using module, normally used for debugging, ex: [\"--nolazy\", \"--inspect-brk=6045\"]", - "items": { - "type": "string" - } - }, - "transport": { - "type": "string", - "default": "ipc", - "description": "Transport kind used by server, could be 'ipc', 'stdio', 'socket' and 'pipe'", - "enum": ["ipc", "stdio", "socket", "pipe"] - }, - "transportPort": { - "type": "integer", - "description": "Port number used when transport is 'socket'" - }, - "cwd": {}, - "env": {}, - "enable": {}, - "disableDynamicRegister": {}, - "disableSnippetCompletion": {}, - "disabledFeatures": {}, - "formatterPriority": {}, - "rootPatterns": {}, - "requireRootPattern": {}, - "ignoredRootPaths": {}, - "filetypes": {}, - "additionalSchemes": {}, - "revealOutputChannelOn": {}, - "progressOnInitialization": {}, - "initializationOptions": {}, - "stdioEncoding": {}, - "settings": {}, - "trace.server": {}, - "trace.server.verbosity": {}, - "trace.server.format": {} - } - }, - "languageServerCommand": { - "type": "object", - "required": ["command", "filetypes"], - "allOf": [{ "$ref": "#/definitions/languageServerBase" }], - "additionalProperties": false, - "properties": { - "command": { - "type": "string", - "default": "", - "description": "Executable in $PATH to start languageserver, should not used with module" - }, - "args": { - "type": "array", - "default": [], - "description": "Arguments of command", - "items": { - "type": "string" - } - }, - "detached": { - "type": "boolean", - "default": false, - "description": "Detach the languageserver process" - }, - "shell": { - "type": "boolean", - "default": false, - "description": "Use shell for process" - }, - "cwd": {}, - "env": {}, - "enable": {}, - "disableDynamicRegister": {}, - "disableSnippetCompletion": {}, - "disabledFeatures": {}, - "formatterPriority": {}, - "rootPatterns": {}, - "requireRootPattern": {}, - "ignoredRootPaths": {}, - "filetypes": {}, - "additionalSchemes": {}, - "revealOutputChannelOn": {}, - "progressOnInitialization": {}, - "initializationOptions": {}, - "stdioEncoding": {}, - "settings": {}, - "trace.server": {}, - "trace.server.verbosity": {}, - "trace.server.format": {} - } - } - }, - "properties": { - "callHierarchy.enableTooltip": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Enable tooltip to show relative filepath of call hierarchy." - }, - "callHierarchy.openCommand": { - "type": "string", - "scope": "application", - "default": "edit", - "description": "Open command for callHierarchy tree view." - }, - "callHierarchy.splitCommand": { - "type": "string", - "scope": "application", - "default": "botright 30vs", - "description": "Window split command used by callHierarchy tree view." - }, - "coc.preferences.bracketEnterImprove": { - "type": "boolean", - "scope": "language-overridable", - "description": "Improve enter inside bracket `<> {} [] ()` by add new empty line below and place cursor to it. Works with `coc#on_enter()`", - "default": true - }, - "coc.preferences.currentFunctionSymbolAutoUpdate": { - "type": "boolean", - "scope": "language-overridable", - "description": "Automatically update the value of b:coc_current_function on CursorHold event", - "default": false - }, - "coc.preferences.enableLinkedEditing": { - "type": "boolean", - "scope": "language-overridable", - "default": false, - "description": "Enable linked editing support." - }, - "coc.preferences.enableMarkdown": { - "type": "boolean", - "scope": "application", - "description": "Tell the language server that markdown text format is supported, note that markdown text may not rendered as expected.", - "default": true - }, - "coc.preferences.enableMessageDialog": { - "type": "boolean", - "scope": "application", - "default": false, - "description": "Enable messages shown in notification dialog." - }, - "coc.preferences.excludeImageLinksInMarkdownDocument": { - "type": "boolean", - "description": "Exclude image links from markdown text in float window.", - "scope": "application", - "default": true - }, - "coc.preferences.extensionUpdateCheck": { - "type": "string", - "scope": "application", - "default": "never", - "description": "Interval for check extension update, could be daily, weekly, never", - "enum": ["daily", "weekly", "never"] - }, - "coc.preferences.floatActions": { - "type": "boolean", - "scope": "application", - "description": "Set to false to disable float/popup support for actions menu.", - "default": true - }, - "coc.preferences.formatOnSaveFiletypes": { - "type": "array", - "scope": "resource", - "default": [], - "description": "Filetypes that should run format on save.", - "items": { - "type": "string" - } - }, - "coc.preferences.formatOnType": { - "type": "boolean", - "scope": "language-overridable", - "description": "Set to true to enable formatting on typing", - "default": false - }, - "coc.preferences.formatOnTypeFiletypes": { - "type": "array", - "default": [], - "scope": "resource", - "description": "Filetypes that should run format on typing. Only take effect when `coc.preferences.formatOnType` set `true`", - "items": { - "type": "string" - } - }, - "coc.preferences.jumpCommand": { - "anyOf": [ - { - "type": "string", - "enum": [ - "edit", - "split", - "vsplit", - "tabe", - "drop", - "tab drop", - "pedit" - ] - }, - { "type": "string", "minimum": 1 } - ], - "scope": "application", - "description": "Command used for location jump, like goto definition, goto references etc. Can be also a custom command that gives file as an argument.", - "default": "edit" - }, - "coc.preferences.maxFileSize": { - "type": "string", - "scope": "application", - "default": "10MB", - "description": "Maximum file size in bytes that coc.nvim should handle, default '10MB'" - }, - "coc.preferences.messageLevel": { - "type": "string", - "scope": "application", - "description": "Message level for filter echoed messages, could be 'more', 'warning' and 'error'", - "default": "more", - "enum": ["more", "warning", "error"] - }, - "coc.preferences.promptInput": { - "type": "boolean", - "description": "Use prompt buffer in float window for user input.", - "scope": "application", - "default": true - }, - "coc.preferences.renameFillCurrent": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Disable to stop Refactor-Rename float/popup window from populating with old name in the New Name field." - }, - "coc.preferences.rootPatterns": { - "type": "array", - "default": [".git", ".hg", ".projections.json"], - "scope": "application", - "description": "Root patterns to resolve workspaceFolder from parent folders of opened files, resolved from up to down.", - "items": { - "type": "string" - } - }, - "coc.preferences.silentAutoupdate": { - "type": "boolean", - "description": "Not open split window with update status when performing auto update.", - "scope": "application", - "default": true - }, - "coc.preferences.useQuickfixForLocations": { - "type": "boolean", - "scope": "application", - "description": "Use vim's quickfix list for jump locations,\n need restart on change.", - "default": false - }, - "coc.preferences.watchmanPath": { - "type": "string", - "scope": "application", - "description": "executable path for https://facebook.github.io/watchman/, detected from $PATH by default", - "default": null - }, - "coc.preferences.willSaveHandlerTimeout": { - "type": "integer", - "scope": "application", - "default": 500, - "minimum": 200, - "maximum": 5000, - "description": "Will save handler timeout" - }, - "coc.source.around.disableSyntaxes": { - "type": "array", - "default": [], - "scope": "application", - "items": { - "type": "string" - } - }, - "coc.source.around.enable": { - "type": "boolean", - "scope": "application", - "default": true - }, - "coc.source.around.priority": { - "type": "integer", - "scope": "application", - "default": 1 - }, - "coc.source.around.shortcut": { - "type": "string", - "scope": "application", - "default": "A" - }, - "coc.source.buffer.disableSyntaxes": { - "type": "array", - "default": [], - "scope": "application", - "items": { - "type": "string" - } - }, - "coc.source.buffer.enable": { - "type": "boolean", - "scope": "application", - "default": true - }, - "coc.source.buffer.ignoreGitignore": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Ignore git ignored files for buffer words" - }, - "coc.source.buffer.priority": { - "type": "integer", - "scope": "application", - "default": 1 - }, - "coc.source.buffer.shortcut": { - "type": "string", - "scope": "application", - "default": "B" - }, - "coc.source.file.disableSyntaxes": { - "type": "array", - "default": [], - "scope": "application", - "items": { - "type": "string" - } - }, - "coc.source.file.enable": { - "type": "boolean", - "scope": "application", - "default": true - }, - "coc.source.file.ignoreHidden": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Ignore completion for hidden files" - }, - "coc.source.file.ignorePatterns": { - "type": "array", - "scope": "application", - "default": [], - "description": "Ignore patterns of matcher", - "items": { - "type": "string" - } - }, - "coc.source.file.priority": { - "type": "integer", - "scope": "application", - "default": 10 - }, - "coc.source.file.shortcut": { - "type": "string", - "scope": "application", - "default": "F" - }, - "coc.source.file.triggerCharacters": { - "type": "array", - "default": ["/", "\\"], - "scope": "application", - "items": { - "type": "string" - } - }, - "coc.source.file.trimSameExts": { - "type": "array", - "scope": "application", - "default": [".ts", ".js"], - "description": "Trim same extension on file completion", - "items": { - "type": "string" - } - }, - "codeLens.enable": { - "type": "boolean", - "scope": "language-overridable", - "description": "Enable codeLens feature, require neovim with set virtual text feature.", - "default": false - }, - "codeLens.position": { - "type": "string", - "scope": "resource", - "enum": ["top", "eol", "right_align"], - "description": "Position of codeLens, requires nvim >= 0.6.0", - "default": "top" - }, - "codeLens.separator": { - "type": "string", - "scope": "resource", - "description": "Separator text for codeLens in virtual text", - "default": "" - }, - "codeLens.subseparator": { - "type": "string", - "scope": "resource", - "description": "Subseparator between codeLenses in virtual text", - "default": " " - }, - "colors.filetypes": { - "type": "array", - "default": [], - "scope": "resource", - "description": "Filetypes that should be enabled for colors highlight feature, use \"*\" for all filetypes.", - "items": { - "type": "string" - } - }, - "colors.highlightPriority": { - "type": "number", - "scope": "resource", - "description": "Priority for colors highlights, works on vim8 and neovim >= 0.6.0", - "default": 1000, - "maximum": 4096 - }, - "cursors.cancelKey": { - "type": "string", - "scope": "application", - "default": "", - "description": "Key used for cancel cursors session." - }, - "cursors.nextKey": { - "type": "string", - "scope": "application", - "default": "", - "description": "Key used for jump to next cursors position." - }, - "cursors.previousKey": { - "type": "string", - "scope": "application", - "default": "", - "description": "Key used for jump to previous cursors position." - }, - "cursors.wrapscan": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Searches wrap around the first or last cursors range." - }, - "diagnostic.autoRefresh": { - "type": "boolean", - "scope": "language-overridable", - "description": "Enable automatically refresh diagnostics, use diagnosticRefresh action when it's disabled.", - "default": true - }, - "diagnostic.checkCurrentLine": { - "type": "boolean", - "scope": "language-overridable", - "description": "When enabled, show all diagnostics of current line if there are none at the current position.", - "default": false - }, - "diagnostic.displayByAle": { - "type": "boolean", - "scope": "language-overridable", - "description": "Use Ale for display diagnostics in vim, will disable coc for display diagnostics, restart required on change.", - "default": false - }, - "diagnostic.enable": { - "type": "boolean", - "scope": "language-overridable", - "description": "Set to false to disable diagnostic display", - "default": true - }, - "diagnostic.enableHighlightLineNumber": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Enable highlighting line numbers for diagnostics, only works with neovim." - }, - "diagnostic.enableMessage": { - "type": "string", - "scope": "application", - "default": "always", - "description": "When to enable show messages of diagnostics.", - "enum": ["always", "jump", "never"] - }, - "diagnostic.enableSign": { - "type": "boolean", - "scope": "language-overridable", - "default": true, - "description": "Enable signs for diagnostics." - }, - "diagnostic.errorSign": { - "type": "string", - "scope": "application", - "description": "Text of error sign", - "default": ">>" - }, - "diagnostic.filetypeMap": { - "type": "object", - "scope": "application", - "description": "A map between buffer filetype and the filetype assigned to diagnostics. To syntax highlight diagnostics with their parent buffer type use `\"default\": \"bufferType\"`", - "default": {} - }, - "diagnostic.floatConfig": { - "type": "object", - "scope": "application", - "description": "Configure float window style of diagnostic message.", - "allOf": [{ "$ref": "#/definitions/float" }], - "additionalProperties": false, - "properties": { - "border": {}, - "rounded": {}, - "highlight": {}, - "borderhighlight": {}, - "title": {}, - "close": {}, - "maxHeight": {}, - "maxWidth": {}, - "winblend": {}, - "focusable": {}, - "shadow": {} - } - }, - "diagnostic.format": { - "type": "string", - "scope": "language-overridable", - "description": "Define the diagnostic format that shown in float window or echoed, available parts: source, code, severity, message", - "default": "%message (%source%code)" - }, - "diagnostic.highlightLimit": { - "type": "number", - "scope": "language-overridable", - "description": "Limit count for highlighted diagnostics, too many diagnostic highlights could make vim stop responding", - "default": 1000 - }, - "diagnostic.highlightPriority": { - "type": "number", - "scope": "language-overridable", - "description": "Priority for diagnostic highlights, works on vim8 and neovim >= 0.6.0", - "default": 4096, - "maximum": 4096, - "minimum": 110 - }, - "diagnostic.hintSign": { - "type": "string", - "scope": "application", - "description": "Text of hint sign", - "default": ">>" - }, - "diagnostic.infoSign": { - "type": "string", - "scope": "application", - "description": "Text of info sign", - "default": ">>" - }, - "diagnostic.level": { - "type": "string", - "scope": "resource", - "description": "Used for filter diagnostics by diagnostic severity.", - "default": "hint", - "enum": ["hint", "information", "warning", "error"] - }, - "diagnostic.locationlistLevel": { - "type": ["string", "null"], - "scope": "language-overridable", - "description": "Filter diagnostics in locationlist.", - "default": null, - "enum": ["hint", "information", "warning", "error"] - }, - "diagnostic.locationlistUpdate": { - "type": "boolean", - "scope": "language-overridable", - "description": "Update locationlist on diagnostics change, only works with locationlist opened by :CocDiagnostics command and first window of associated buffer.", - "default": true - }, - "diagnostic.messageDelay": { - "type": "number", - "scope": "application", - "description": "How long to wait (in milliseconds) before displaying the diagnostic message with echo or float", - "default": 200 - }, - "diagnostic.messageLevel": { - "type": ["string", "null"], - "scope": "language-overridable", - "description": "Filter diagnostic message in float window/popup.", - "default": null, - "enum": ["hint", "information", "warning", "error"] - }, - "diagnostic.messageTarget": { - "type": "string", - "scope": "language-overridable", - "description": "Diagnostic message target.", - "default": "float", - "enum": ["echo", "float"] - }, - "diagnostic.refreshOnInsertMode": { - "type": "boolean", - "scope": "language-overridable", - "description": "Enable diagnostic refresh on insert mode, default false.", - "default": false - }, - "diagnostic.separateRelatedInformationAsDiagnostics": { - "type": "boolean", - "default": false, - "scope": "application", - "description": "Separate related information as diagnostics." - }, - "diagnostic.showDeprecated": { - "type": "boolean", - "default": true, - "scope": "language-overridable", - "description": "Show diagnostics with deprecated tag." - }, - "diagnostic.showUnused": { - "type": "boolean", - "default": true, - "scope": "language-overridable", - "description": "Show diagnostics with unused tag, affects highlight, sign, virtual text, message" - }, - "diagnostic.signLevel": { - "type": ["string", "null"], - "scope": "language-overridable", - "description": "Filter diagnostics displayed in signcolumn.", - "default": null, - "enum": ["hint", "information", "warning", "error"] - }, - "diagnostic.signPriority": { - "type": "number", - "scope": "resource", - "description": "Priority of diagnostic signs, default to 10", - "default": 10 - }, - "diagnostic.virtualText": { - "type": "boolean", - "scope": "language-overridable", - "description": "Use virtual text to display diagnostics, requires neovim >= 0.5.0 or vim >= 9.0.0067.", - "default": false - }, - "diagnostic.virtualTextAlign": { - "type": "string", - "scope": "language-overridable", - "description": "Position of virtual text, default 'after'. Vim9 only", - "default": "after", - "enum": ["after", "right", "below"] - }, - "diagnostic.virtualTextCurrentLineOnly": { - "type": "boolean", - "scope": "language-overridable", - "description": "Only show virtualText diagnostic on current cursor line", - "default": true - }, - "diagnostic.virtualTextFormat": { - "type": "string", - "scope": "language-overridable", - "description": "Define the virtual text diagnostic format, available parts: source, code, severity, message", - "default": "%message" - }, - "diagnostic.virtualTextLevel": { - "type": ["string", "null"], - "scope": "language-overridable", - "description": "Filter diagnostic message in virtual text by level", - "default": null, - "enum": ["hint", "information", "warning", "error"] - }, - "diagnostic.virtualTextLimitInOneLine": { - "type": "integer", - "scope": "language-overridable", - "minimum": 1, - "description": "The maximum number of diagnostic messages to disaply in one line", - "default": 999 - }, - "diagnostic.virtualTextLineSeparator": { - "type": "string", - "scope": "language-overridable", - "description": "The text that will mark a line end from the diagnostic message", - "default": " \\ " - }, - "diagnostic.virtualTextLines": { - "type": "number", - "scope": "language-overridable", - "description": "The number of non empty lines from a diagnostic to display", - "default": 3 - }, - "diagnostic.virtualTextPrefix": { - "type": "string", - "scope": "language-overridable", - "description": "The prefix added virtual text diagnostics", - "default": " " - }, - "diagnostic.virtualTextWinCol": { - "type": ["number", "null"], - "scope": "language-overridable", - "description": "Window column number to align virtual text, neovim only.", - "default": null - }, - "diagnostic.warningSign": { - "type": "string", - "scope": "application", - "description": "Text of warning sign", - "default": "⚠" - }, - "dialog.confirmKey": { - "type": "string", - "default": "", - "scope": "application", - "description": "Confirm key for confirm selection used by menu and picker, you can always use to cancel." - }, - "dialog.floatBorderHighlight": { - "type": ["string", "null"], - "default": null, - "scope": "application", - "description": "Highlight group for border of dialog window/popup, default to 'CocFloating'" - }, - "dialog.floatHighlight": { - "type": ["string", "null"], - "default": null, - "scope": "application", - "description": "Highlight group for dialog window/popup, default to 'CocFloating'" - }, - "dialog.maxHeight": { - "type": "number", - "default": 30, - "scope": "application", - "description": "Maximum height of dialog window." - }, - "dialog.maxWidth": { - "type": "number", - "default": 80, - "scope": "application", - "description": "Maximum width of dialog window." - }, - "dialog.pickerButtonShortcut": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Show shortcut in buttons of picker dialog window/popup, used when dialog.pickerButtons is true." - }, - "dialog.pickerButtons": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Show buttons for picker dialog window/popup." - }, - "dialog.rounded": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "use rounded border for dialog window." - }, - "dialog.shortcutHighlight": { - "type": "string", - "default": "MoreMsg", - "scope": "application", - "description": "Highlight group for shortcut character in menu dialog, default to 'MoreMsg'" - }, - "documentHighlight.priority": { - "type": "number", - "default": -1, - "scope": "resource", - "description": "Match priority used by document highlight, see ':h matchadd'" - }, - "documentHighlight.timeout": { - "type": "integer", - "default": 300, - "minimum": 200, - "maximum": 5000, - "scope": "resource", - "description": "Timeout for document highlight, in milliseconds." - }, - "floatFactory.floatConfig": { - "type": "object", - "scope": "application", - "description": "Configure default style float window/popup created by float factory (created around cursor and automatically closed)", - "allOf": [{ "$ref": "#/definitions/float" }], - "additionalProperties": false, - "properties": { - "border": {}, - "rounded": {}, - "highlight": {}, - "borderhighlight": {}, - "title": {}, - "close": {}, - "maxWidth": {}, - "maxHeight": {}, - "winblend": {}, - "focusable": {}, - "shadow": {} - } - }, - "hover.autoHide": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Automatically hide hover float window on CursorMove or InsertEnter." - }, - "hover.floatConfig": { - "type": "object", - "scope": "application", - "description": "Configure float window style of hover documents.", - "allOf": [{ "$ref": "#/definitions/float" }], - "additionalProperties": false, - "properties": { - "border": {}, - "rounded": {}, - "highlight": {}, - "borderhighlight": {}, - "title": {}, - "close": {}, - "maxHeight": {}, - "maxWidth": {}, - "winblend": {}, - "focusable": {}, - "shadow": {} - } - }, - "hover.previewMaxHeight": { - "type": "number", - "scope": "resource", - "default": 12, - "description": "Max height of preview window for hover." - }, - "hover.target": { - "type": "string", - "default": "float", - "scope": "resource", - "description": "Target to show hover information, default is floating window when possible.", - "enum": ["preview", "echo", "float"] - }, - "http.proxy": { - "type": "string", - "default": "", - "pattern": "^https?://([^:]*(:[^@]*)?@)?([^:]+|\\[[:0-9a-fA-F]+\\])(:\\d+)?/?$|^$", - "description": "The proxy setting to use. If not set, will be inherited from the `http_proxy` and `https_proxy` environment variables.", - "scope": "application" - }, - "http.proxyAuthorization": { - "type": ["null", "string"], - "description": "The value to send as the `Proxy-Authorization` header for every network request.", - "default": null, - "scope": "application" - }, - "http.proxyCA": { - "type": "string", - "description": "CA (file) to use as Certificate Authority", - "default": null, - "scope": "application" - }, - "http.proxyStrictSSL": { - "type": "boolean", - "description": "Controls whether the proxy server certificate should be verified against the list of supplied CAs", - "default": true, - "scope": "application" - }, - "inlayHint.enable": { - "type": "boolean", - "default": true, - "scope": "language-overridable", - "description": "Enable inlay hint support" - }, - "inlayHint.enableParameter": { - "type": "boolean", - "scope": "language-overridable", - "default": true, - "description": "Enable inlay hints for parameters." - }, - "inlayHint.display": { - "type": "boolean", - "scope": "language-overridable", - "default": true, - "description": "Display inlay hints." - }, - "inlayHint.filetypes": { - "type": ["array", "null"], - "scope": "application", - "description": "Filetypes that enable inlayHint, all filetypes are enabled by default", - "deprecationMessage": "Use inlayHint.enable with language scope instead", - "default": null, - "items": { - "type": "string" - } - }, - "inlayHint.parameterSeparator": { - "type": "string", - "scope": "language-overridable", - "default": "", - "description": "Separator for parameter inlay hint, neovim only." - }, - "inlayHint.refreshOnInsertMode": { - "type": "boolean", - "default": false, - "scope": "language-overridable", - "description": "Refresh inlayHints on insert mode." - }, - "inlayHint.subSeparator": { - "type": "string", - "scope": "language-overridable", - "default": " ", - "description": "Separator for chained inlay hints, neovim only." - }, - "inlayHint.typeSeparator": { - "type": "string", - "scope": "language-overridable", - "default": "", - "description": "Separator for type inlay hint, neovim only." - }, - "links.tooltip": { - "type": "boolean", - "scope": "application", - "description": "Show tooltip of link under cursor on CursorHold, neovim only", - "default": false - }, - "list.alignColumns": { - "type": "boolean", - "default": false, - "scope": "application", - "description": "Whether to align lists in columns, default: `false`" - }, - "list.extendedSearchMode": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Enable extended search mode which allows multiple search patterns delimited by spaces." - }, - "list.height": { - "type": "number", - "scope": "application", - "default": 10, - "description": "Height of split list window." - }, - "list.indicator": { - "type": "string", - "default": ">", - "scope": "application", - "description": "The character used as first character in prompt line." - }, - "list.insertMappings": { - "type": "object", - "scope": "application", - "default": {}, - "description": "Custom keymappings on insert mode." - }, - "list.interactiveDebounceTime": { - "type": "number", - "default": 100, - "scope": "application", - "description": "Debounce time for input change on interactive mode." - }, - "list.limitLines": { - "type": ["number", "null"], - "scope": "application", - "default": null, - "description": "Limit lines for list buffer." - }, - "list.maxPreviewHeight": { - "type": "number", - "scope": "application", - "default": 12, - "description": "Max height for preview window of list." - }, - "list.menuAction": { - "type": "boolean", - "default": false, - "scope": "application", - "description": "Use menu picker instead of confirm() for choose action." - }, - "list.nextKeymap": { - "type": "string", - "scope": "application", - "default": "", - "description": "Key used for select next line on insert mode." - }, - "list.normalMappings": { - "type": "object", - "scope": "application", - "default": {}, - "description": "Custom keymappings on normal mode." - }, - "list.previewHighlightGroup": { - "type": "string", - "scope": "application", - "default": "Search", - "description": "Highlight group used for highlight the range in preview window." - }, - "list.previewSplitRight": { - "type": "boolean", - "scope": "application", - "default": false, - "description": "Use vsplit for preview window." - }, - "list.previewToplineOffset": { - "type": "number", - "scope": "application", - "default": 3, - "description": "Topline offset for list previews" - }, - "list.previewToplineStyle": { - "type": "string", - "scope": "application", - "default": "offset", - "description": "Topline style for list previews", - "enum": ["offset", "middle"] - }, - "list.previousKeymap": { - "type": "string", - "scope": "application", - "default": "", - "description": "Key used for select previous line on insert mode." - }, - "list.selectedSignText": { - "type": "string", - "scope": "application", - "default": "*", - "description": "Sign text for selected lines." - }, - "list.signOffset": { - "type": "number", - "scope": "application", - "default": 900, - "description": "Sign offset of list, should be different from other plugins." - }, - "list.smartCase": { - "type": "boolean", - "default": false, - "scope": "application", - "description": "Use smartcase match for fuzzy match and strict match, --ignore-case will be ignored, may not affect interactive list." - }, - "list.source.diagnostics.includeCode": { - "type": "boolean", - "scope": "application", - "description": "Whether to show the diagnostic code in the list.", - "default": true - }, - "list.source.diagnostics.pathFormat": { - "type": "string", - "scope": "application", - "description": "Decide how the filepath is shown in the list.", - "enum": ["full", "short", "filename", "hidden"], - "default": "full" - }, - "list.source.outline.ctagsFiletypes": { - "type": "array", - "scope": "application", - "default": [], - "description": "Filetypes that should use ctags for outline instead of language server.", - "items": { - "type": "string" - } - }, - "list.source.symbols.excludes": { - "type": "array", - "scope": "application", - "default": [], - "description": "Patterns of minimatch for filepath to exclude from symbols list.", - "items": { - "type": "string" - } - }, - "list.statusLineSegments": { - "type": ["array", "null"], - "scope": "application", - "default": [ - "%#CocListMode#-- %{coc#list#status(\"mode\")} --%*", - "%{coc#list#status(\"loading\")}", - "%{coc#list#status(\"args\")}", - "(%L/%{coc#list#status(\"total\")})", - "%=", - "%#CocListPath# %{coc#list#status(\"cwd\")} %l/%L%*" - ], - "items": { - "types": "string" - }, - "description": "An array of statusline segments that will be used to draw the status line for list windows." - }, - "notification.statusLineProgress": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Show progress notification in status line, instead of float window/popup." - }, - "notification.border": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Enable rounded border for notification windows." - }, - "notification.disabledProgressSources": { - "type": "array", - "default": [], - "scope": "application", - "description": "Sources that should be disabled for message progress, use * to disable all message only progresses", - "items": { - "type": "string" - } - }, - "notification.focusable": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Enable focus by user actions (wincmds, mouse events), neovim only." - }, - "notification.highlightGroup": { - "type": "string", - "default": "Normal", - "scope": "application", - "description": "Highlight group of notification dialog." - }, - "notification.marginRight": { - "type": "integer", - "default": 10, - "scope": "application", - "description": "Margin right to the right of editor window." - }, - "notification.maxHeight": { - "type": "integer", - "default": 10, - "scope": "application", - "description": "Maximum content height of notification dialog." - }, - "notification.maxWidth": { - "type": "integer", - "default": 60, - "scope": "application", - "description": "Maximum content width of notification dialog." - }, - "notification.minProgressWidth": { - "type": "integer", - "default": 30, - "scope": "application", - "description": "Minimal with of progress notification." - }, - "notification.timeout": { - "type": "integer", - "default": 10000, - "scope": "application", - "description": "Timeout for auto close notifications, in milliseconds." - }, - "notification.winblend": { - "type": "integer", - "default": 30, - "minimum": 0, - "maximum": 100, - "scope": "application", - "description": "Winblend option of notification window, neovim only." - }, - "npm.binPath": { - "type": "string", - "scope": "application", - "default": "npm", - "description": "Command or absolute path to npm or yarn." - }, - "outline.autoPreview": { - "type": "boolean", - "scope": "application", - "default": false, - "description": "Enable auto preview on cursor move." - }, - "outline.autoWidth": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Automatically increase window width to avoid wrapped lines." - }, - "outline.checkBufferSwitch": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Recreate outline view after user changed to another buffer on current tab." - }, - "outline.codeActionKinds": { - "type": "array", - "scope": "application", - "default": ["", "quickfix", "refactor"], - "description": "Filter code actions in actions menu by kinds.", - "items": { - "type": "string", - "enum": ["", "quickfix", "refactor", "source"] - } - }, - "outline.detailAsDescription": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Show detail as description aside with label, when false detail will be shown in tooltip on cursor hold." - }, - "outline.expandLevel": { - "type": "number", - "scope": "application", - "default": 1, - "description": "Expand level of tree nodes." - }, - "outline.followCursor": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Reveal item in outline tree on cursor hold." - }, - "outline.keepWindow": { - "type": "boolean", - "scope": "application", - "default": false, - "description": "Jump back to original window after outline is shown." - }, - "outline.previewBorder": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Use border for preview window." - }, - "outline.previewBorderHighlightGroup": { - "type": "string", - "scope": "application", - "default": "Normal", - "description": "Border highlight group of preview window." - }, - "outline.previewBorderRounded": { - "type": "boolean", - "scope": "application", - "default": false, - "description": "Use rounded border for preview window." - }, - "outline.previewHighlightGroup": { - "type": "string", - "scope": "application", - "default": "Normal", - "description": "Highlight group of preview window." - }, - "outline.previewMaxWidth": { - "type": "number", - "scope": "application", - "default": 80, - "description": "Max width of preview window." - }, - "outline.previewWinblend": { - "type": "integer", - "scope": "application", - "default": 0, - "minimum": 0, - "maximum": 100, - "description": "Enables pseudo-transparency by set 'winblend' option of window, neovim only." - }, - "outline.showLineNumber": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Show line number of symbols." - }, - "outline.sortBy": { - "type": "string", - "scope": "application", - "default": "category", - "description": "Sort method for symbols.", - "enum": ["position", "name", "category"] - }, - "outline.splitCommand": { - "type": "string", - "scope": "application", - "default": "botright 30vs", - "description": "Window split command used by outline." - }, - "outline.switchSortKey": { - "type": "string", - "scope": "application", - "default": "", - "description": "The key used to switch sort method for symbols provider of current tree view." - }, - "outline.togglePreviewKey": { - "type": "string", - "scope": "application", - "default": "p", - "description": "The key used to toggle auto preview feature." - }, - "pullDiagnostic.ignored": { - "type": "array", - "default": [], - "scope": "application", - "description": "Minimatch patterns to match full filepath that should be ignored for pullDiagnostic.", - "items": { - "type": "string" - } - }, - "pullDiagnostic.onChange": { - "type": "boolean", - "default": true, - "scope": "language-overridable", - "description": "Whether to pull for diagnostics on document change." - }, - "pullDiagnostic.onSave": { - "type": "boolean", - "default": false, - "scope": "language-overridable", - "description": "Whether to pull for diagnostics on document save." - }, - "pullDiagnostic.workspace": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Whether to pull for workspace diagnostics when possible." - }, - "refactor.afterContext": { - "type": "number", - "scope": "application", - "default": 3, - "description": "Print num lines of trailing context after each match." - }, - "refactor.beforeContext": { - "type": "number", - "scope": "application", - "default": 3, - "description": "Print num lines of leading context before each match." - }, - "refactor.openCommand": { - "type": "string", - "scope": "application", - "description": "Open command for refactor window.", - "default": "vsplit" - }, - "refactor.saveToFile": { - "type": "boolean", - "scope": "application", - "description": "Save changed buffer to file when write refactor buffer with ':noa wa' command.", - "default": true - }, - "refactor.showMenu": { - "type": "string", - "scope": "application", - "default": "", - "description": "Refactor buffer local mapping to bring up menu for this chunk." - }, - "semanticTokens.combinedModifiers": { - "type": "array", - "scope": "language-overridable", - "description": "Semantic token modifiers that should have highlight combined with syntax highlights.", - "default": ["deprecated"], - "items": { - "type": "string" - } - }, - "semanticTokens.enable": { - "type": "boolean", - "default": false, - "scope": "language-overridable", - "description": "Enable semantic tokens support" - }, - "semanticTokens.filetypes": { - "type": ["array", "null"], - "scope": "resource", - "description": "Filetypes that enable semantic tokens highlighting or [\"*\"] for any filetype", - "deprecationMessage": "Use semanticTokens.enable with language scope instead", - "default": null, - "items": { - "type": "string" - } - }, - "semanticTokens.highlightPriority": { - "type": "number", - "scope": "language-overridable", - "description": "Priority for semantic tokens highlight.", - "default": 2048, - "maximum": 4096 - }, - "semanticTokens.incrementTypes": { - "type": "array", - "scope": "language-overridable", - "description": "Semantic token types that should increase highlight when insert at the start and end position of token.", - "default": ["variable", "string", "parameter"], - "items": { - "type": "string" - } - }, - "signature.enable": { - "type": "boolean", - "scope": "language-overridable", - "description": "Enable show signature help when trigger character typed.", - "default": true - }, - "signature.floatConfig": { - "type": "object", - "scope": "application", - "description": "Configure float window style of signature documents.", - "allOf": [{ "$ref": "#/definitions/float" }], - "additionalProperties": false, - "properties": { - "border": {}, - "rounded": {}, - "highlight": {}, - "borderhighlight": {}, - "title": {}, - "close": {}, - "maxHeight": {}, - "maxWidth": {}, - "winblend": {}, - "focusable": {}, - "shadow": {} - } - }, - "signature.hideOnTextChange": { - "type": "boolean", - "scope": "language-overridable", - "description": "Hide signature float window when text changed on insert mode.", - "default": false - }, - "signature.preferShownAbove": { - "type": "boolean", - "scope": "application", - "description": "Show signature help float window above cursor when possible, require restart service on change.", - "default": true - }, - "signature.target": { - "type": "string", - "scope": "language-overridable", - "description": "Target of signature help, use float when possible by default.", - "default": "float", - "enum": ["float", "echo"] - }, - "signature.triggerSignatureWait": { - "type": "integer", - "scope": "language-overridable", - "default": 500, - "minimum": 200, - "maximum": 1000, - "description": "Timeout for trigger signature help, in milliseconds." - }, - "snippet.choicesMenuPicker": { - "type": "boolean", - "scope": "resource", - "description": "Use menu picker instead of popup menu for choices placeholder.", - "default": false - }, - "snippet.highlight": { - "type": "boolean", - "scope": "resource", - "description": "Use highlight group 'CocSnippetVisual' to highlight placeholders with same index of current one.", - "default": false - }, - "snippet.nextPlaceholderOnDelete": { - "type": "boolean", - "scope": "resource", - "description": "Automatically jump to the next placeholder when the current one is completely deleted.", - "default": false - }, - "snippet.statusText": { - "type": "string", - "scope": "application", - "default": "SNIP", - "description": "Text shown in statusline to indicate snippet session is activated." - }, - "suggest.acceptSuggestionOnCommitCharacter": { - "type": "boolean", - "default": false, - "scope": "language-overridable", - "description": "Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character." - }, - "suggest.asciiCharactersOnly": { - "type": "boolean", - "description": "Trigger suggest with ASCII characters only", - "scope": "language-overridable", - "default": false - }, - "suggest.asciiMatch": { - "type": "boolean", - "description": "Convert unicode characters to ascii for match", - "scope": "language-overridable", - "default": true - }, - "suggest.autoTrigger": { - "type": "string", - "scope": "language-overridable", - "default": "always", - "description": "How should completion be triggered", - "enum": ["always", "trigger", "none"] - }, - "suggest.completionItemKindLabels": { - "type": "object", - "default": {}, - "scope": "application", - "description": "Set custom labels to completion items' kinds.", - "properties": { - "text": { "type": "string" }, - "method": { "type": "string" }, - "function": { "type": "string" }, - "constructor": { "type": "string" }, - "field": { "type": "string" }, - "variable": { "type": "string" }, - "class": { "type": "string" }, - "interface": { "type": "string" }, - "module": { "type": "string" }, - "property": { "type": "string" }, - "unit": { "type": "string" }, - "value": { "type": "string" }, - "enum": { "type": "string" }, - "keyword": { "type": "string" }, - "snippet": { "type": "string" }, - "color": { "type": "string" }, - "file": { "type": "string" }, - "reference": { "type": "string" }, - "folder": { "type": "string" }, - "enumMember": { "type": "string" }, - "constant": { "type": "string" }, - "struct": { "type": "string" }, - "event": { "type": "string" }, - "operator": { "type": "string" }, - "typeParameter": { "type": "string" }, - "default": { "type": "string" } - }, - "additionalProperties": false - }, - "suggest.defaultSortMethod": { - "type": "string", - "description": "Default sorting behavior for suggested completion items.", - "default": "length", - "scope": "language-overridable", - "enum": ["length", "alphabetical", "none"] - }, - "suggest.detailField": { - "type": "string", - "scope": "application", - "default": "preview", - "description": "Where to show the detail text of CompleteItem from LS.", - "enum": ["abbr", "preview"] - }, - "suggest.detailMaxLength": { - "type": "number", - "scope": "application", - "description": "Max length of detail that should be shown in popup menu.", - "deprecationMessage": "Use suggest.labelMaxLength instead.", - "default": 100 - }, - "suggest.enablePreselect": { - "type": "boolean", - "scope": "application", - "description": "Enable preselect feature of LSP, works when suggest.noselect is false.", - "default": true - }, - "suggest.fixInsertedWord": { - "type": "boolean", - "description": "Make inserted word replace word characters after cursor position.", - "scope": "application", - "default": true - }, - "suggest.floatConfig": { - "type": "object", - "scope": "application", - "description": "Configure style of popup menu and documentation window of completion.", - "allOf": [{ "$ref": "#/definitions/float" }], - "additionalProperties": false, - "properties": { - "border": {}, - "rounded": {}, - "highlight": {}, - "borderhighlight": {}, - "maxWidth": {}, - "winblend": {}, - "shadow": {} - } - }, - "suggest.formatItems": { - "type": "array", - "scope": "application", - "items": { - "enum": ["abbr", "menu", "kind", "shortcut"] - }, - "contains": { - "enum": ["abbr"] - }, - "uniqueItems": true, - "description": "Items shown in popup menu in order.", - "default": ["abbr", "menu", "kind", "shortcut"] - }, - "suggest.highPrioritySourceLimit": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "scope": "language-overridable", - "description": "Max items count for source priority bigger than or equal to 90." - }, - "suggest.ignoreRegexps": { - "type": "array", - "scope": "language-overridable", - "items": { - "type": "string" - }, - "description": "Regexps to ignore when trigger suggest", - "default": [] - }, - "suggest.invalidInsertCharacters": { - "type": "array", - "items": { - "type": "string" - }, - "scope": "application", - "description": "Invalid character for strip valid word when inserting text of complete item.", - "default": [" ", "(", "<", "{", "[", "\r", "\n"] - }, - "suggest.labelMaxLength": { - "type": "number", - "scope": "application", - "description": "Max length of abbr that shown as label of complete item.", - "default": 200 - }, - "suggest.languageSourcePriority": { - "type": "number", - "default": 99, - "scope": "language-overridable", - "description": "Priority of language sources." - }, - "suggest.localityBonus": { - "type": "boolean", - "description": "Controls whether sorting favors words that appear close to the cursor.", - "scope": "language-overridable", - "default": true - }, - "suggest.lowPrioritySourceLimit": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "scope": "language-overridable", - "description": "Max items count for source priority lower than 90." - }, - "suggest.maxCompleteItemCount": { - "type": "number", - "default": 256, - "scope": "language-overridable", - "description": "Maximum number of complete items shown in vim" - }, - "suggest.minTriggerInputLength": { - "type": "integer", - "default": 1, - "scope": "language-overridable", - "description": "Minimal input length for trigger completion, default 1" - }, - "suggest.noselect": { - "type": "boolean", - "scope": "application", - "description": "Not make vim select first item on popupmenu shown", - "default": false - }, - "suggest.preferCompleteThanJumpPlaceholder": { - "type": "boolean", - "description": "Confirm completion instead of jump to next placeholder when completion is activated.", - "scope": "resource", - "default": false - }, - "suggest.pumFloatConfig": { - "type": ["object", "null"], - "scope": "application", - "description": "Configure style of popup menu, suggest.floatConfig is used when not specified.", - "allOf": [{ "$ref": "#/definitions/float" }], - "additionalProperties": false, - "default": null, - "properties": { - "border": {}, - "rounded": {}, - "highlight": {}, - "borderhighlight": {}, - "winblend": {}, - "shadow": {} - } - }, - "suggest.removeDuplicateItems": { - "type": "boolean", - "description": "Remove completion items with duplicated word for all sources, snippet items are excluded.", - "scope": "language-overridable", - "default": false - }, - "suggest.reversePumAboveCursor": { - "type": "boolean", - "scope": "application", - "description": "Reverse order of complete items when pum shown above cursor.", - "default": false - }, - "suggest.selection": { - "type": "string", - "scope": "application", - "default": "first", - "description": "Controls how suggestions are pre-selected when showing the suggest list.", - "enum": ["first", "recentlyUsed", "recentlyUsedByPrefix"] - }, - "suggest.snippetIndicator": { - "type": "string", - "default": "~", - "scope": "application", - "description": "The character used in abbr of complete item to indicate the item could be expand as snippet." - }, - "suggest.snippetsSupport": { - "type": "boolean", - "scope": "language-overridable", - "description": "Set to false to disable snippets support of completion.", - "default": true - }, - "suggest.timeout": { - "type": "integer", - "default": 5000, - "minimum": 500, - "maximum": 15000, - "scope": "language-overridable", - "description": "Timeout for completion, in milliseconds." - }, - "suggest.triggerAfterInsertEnter": { - "type": "boolean", - "description": "Trigger completion after InsertEnter, auto trigger should be 'always' to enable this option", - "scope": "language-overridable", - "default": false - }, - "suggest.triggerCompletionWait": { - "type": "integer", - "default": 0, - "minimum": 0, - "maximum": 50, - "scope": "language-overridable", - "description": "Wait time between text change and completion start, cancel completion when text changed during wait." - }, - "suggest.virtualText": { - "type": "boolean", - "scope": "application", - "description": "Show virtual text for insert word of selected item, requires neovim >= 0.5.0 or vim >= 9.0.0067", - "default": false - }, - "tree.closedIcon": { - "type": "string", - "scope": "application", - "default": "+", - "description": "Closed icon of tree view." - }, - "tree.key.actions": { - "type": "string", - "scope": "application", - "default": "", - "description": "Trigger key to invoke actions." - }, - "tree.key.activeFilter": { - "type": "string", - "scope": "application", - "default": "f", - "description": "Trigger key active filter." - }, - "tree.key.close": { - "type": "string", - "scope": "application", - "default": "", - "description": "Trigger key to dispose the tree and close tree window." - }, - "tree.key.collapseAll": { - "type": "string", - "scope": "application", - "default": "M", - "description": "Trigger key to collapse all tree node." - }, - "tree.key.invoke": { - "type": "string", - "scope": "application", - "default": "", - "description": "Trigger key to invoke default command of current node or selection." - }, - "tree.key.selectNext": { - "type": "string", - "scope": "application", - "default": "", - "description": "Trigger key to select next item during filter." - }, - "tree.key.selectPrevious": { - "type": "string", - "scope": "application", - "default": "", - "description": "Trigger key to select previous item during filter." - }, - "tree.key.toggle": { - "type": "string", - "scope": "application", - "default": "t", - "description": "Trigger key to toggle expand state of tree node, does nothing with leaf node." - }, - "tree.key.toggleSelection": { - "type": "string", - "scope": "application", - "default": "", - "description": "Trigger key to select/unselect item" - }, - "tree.openedIcon": { - "type": "string", - "scope": "application", - "default": "-", - "description": "Opened icon of tree view." - }, - "typeHierarchy.enableTooltip": { - "type": "boolean", - "scope": "application", - "default": true, - "description": "Enable tooltip to show relative filepath of type hierarchy." - }, - "typeHierarchy.openCommand": { - "type": "string", - "scope": "application", - "default": "edit", - "description": "Open command for type hierarchy tree view." - }, - "typeHierarchy.splitCommand": { - "type": "string", - "scope": "application", - "default": "botright 30vs", - "description": "Window split command used by type hierarchy tree view." - }, - "workspace.bottomUpFiletypes": { - "type": "array", - "default": [], - "scope": "application", - "description": "Filetypes that should have workspace folder should resolved from base directory of file, or [\"*\"] for any filetype.", - "items": { - "type": "string" - } - }, - "workspace.ignoredFiletypes": { - "type": "array", - "default": [], - "scope": "resource", - "description": "Filetypes that should be ignored for workspace folder resolve.", - "items": { - "type": "string" - } - }, - "workspace.ignoredFolders": { - "type": "array", - "default": ["$HOME"], - "scope": "application", - "description": "List of folders that should not be resolved as workspace folder, environment variables and minimatch patterns can be used.", - "items": { - "type": "string" - } - }, - "workspace.openOutputCommand": { - "type": "string", - "default": "vs", - "scope": "resource", - "description": "Command used to open output channel." - }, - "workspace.openResourceCommand": { - "type": "string", - "default": "tab drop", - "scope": "application", - "description": "Command to open files that not loaded, load files as hidden buffers when empty." - }, - "workspace.workspaceFolderCheckCwd": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Whether the current working directory should be used first when checking patterns match for workspace folder." - }, - "workspace.workspaceFolderFallbackCwd": { - "type": "boolean", - "default": true, - "scope": "application", - "description": "Use current working directory as workspace folder when no root patterns resolved." - }, - "languageserver": { - "type": "object", - "default": {}, - "scope": "resource", - "description": "Dictionary of languageservers, key is used as id of languageserver, restart coc.nvim required after change.", - "patternProperties": { - "^[_a-zA-Z]+$": { - "oneOf": [ - { - "$ref": "#/definitions/languageServerModule" - }, - { - "$ref": "#/definitions/languageServerCommand" - }, - { - "$ref": "#/definitions/languageServerSocket" - } - ] - } - } - } - } -} diff --git a/dotfiles/.vim/plugged/coc.nvim/doc/coc-config.txt b/dotfiles/.vim/plugged/coc.nvim/doc/coc-config.txt deleted file mode 100644 index 3778acd0..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/doc/coc-config.txt +++ /dev/null @@ -1,1753 +0,0 @@ -*coc-config.txt* NodeJS client for Vim & Neovim. - -CONTENTS - -Call hierarchy |coc-config-callHierarchy| -CodeLens |coc-config-codeLens| -Colors |coc-config-colors| -Completion |coc-config-suggest| -Cursors |coc-config-cursors| -Diagnostics |coc-config-diagnostic| -Dialog |coc-config-dialog| -Document highlight |coc-config-documentHighlight| -Float factory |coc-config-floatFactory| -Hover |coc-config-hover| -Http |coc-config-http| -Inlay hint |coc-config-inlayHint| -Links |coc-config-links| -List |coc-config-list| -Notification |coc-config-notification| -Npm |coc-config-npm| -Outline |coc-config-outline| -Pull diagnostics |coc-config-pullDiagnostic| -Refactor |coc-config-refactor| -Semantic tokens |coc-config-semanticTokens| -Signature |coc-config-signature| -Tree |coc-config-tree| -Type hierarchy |coc-config-typeHierarchy| -Workspace |coc-config-workspace| -Preferences |coc-config-preferences| -Float |coc-config-float| -Language server |coc-config-languageserver| - -============================================================================== -BUILTIN CONFIGURATIONS *coc-config* - -Builtin configurations of coc.nvim, it's recommended to use `coc-json` -extension for completion and validation support. - ------------------------------------------------------------------------------- -CallHierarchy~ - *coc-config-callHierarchy* -"callHierarchy.enableTooltip" *coc-config-callHierarchy-enableTooltip* - - Enable tooltip to show relative filepath of call hierarchy item. - - Scope: `application`, default: `true` - -"callHierarchy.openCommand" *coc-config-callHierarchy-openCommand* - - Open command for call hierarchy tree view. - - Scope: `application`, default: `"edit"` - -"callHierarchy.splitCommand" *coc-config-callHierarchy-splitCommand* - - Window split command used by call hierarchy tree view. - - Scope: `application`, default: `"botright 30vs"` - ------------------------------------------------------------------------------- -CodeLens~ - *coc-config-codeLens* -"codeLens.enable" *coc-config-codeLens-enable* - - Enable codeLens feature, require neovim with set virtual text feature. - - Scope: `language-overridable`, default: `false` - -"codeLens.position" *coc-config-codeLens-position* - - Position of codeLens, requires nvim >= 0.6.0. - - Scope: `resource`, default: `"top"` - -"codeLens.separator" *coc-config-codeLens-separator* - - Separator text for codeLens in virtual text. - - Scope: `resource`, default: `""` - -"codeLens.subseparator" *coc-config-codeLens-subseparator* - - Subseparator between codeLenses in virtual text. - - Scope: `resource`, default: `" "` - ------------------------------------------------------------------------------- -Colors~ - *coc-config-colors* -"colors.filetypes" *coc-config-colors-filetypes* - - Filetypes that should be enabled for colors highlight feature, use "*" - for all filetypes. - - Scope: `resource`, default: `[]` - -"colors.highlightPriority" *coc-config-colors-highlightPriority* - - Priority for colors highlights, works on vim8 and neovim >= 0.6.0. - - Scope: `resource`, default: `1000` - ------------------------------------------------------------------------------- -Cursors~ - *coc-config-cursors* -"cursors.cancelKey" *coc-config-cursors-cancelKey* - - Key used for cancel cursors session. - - Scope: `application`, default: `""` - -"cursors.nextKey" *coc-config-cursors-nextKey* - - Key used for jump to next cursors position. - - Scope: `application`, default: `""` - -"cursors.previousKey" *coc-config-cursors-previousKey* - - Key used for jump to previous cursors position. - - Scope: `application`, default: `""` - -"cursors.wrapscan" *coc-config-cursors-wrapscan* - - Searches wrap around the first or last cursors range. - - Scope: `application`, default: `true` - ------------------------------------------------------------------------------- -Diagnostic~ - *coc-config-diagnostic* -"diagnostic.autoRefresh" *coc-config-diagnostic-autoRefresh* - - Enable automatically refresh diagnostics, use diagnosticRefresh action - when it's disabled. - - Scope: `language-overridable`, default: `true` - -"diagnostic.checkCurrentLine" *coc-config-diagnostic-checkCurrentLine* - - When enabled, show all diagnostics of current line if there are none at - the current position. - - Scope: `language-overridable`, default: `false` - -"diagnostic.displayByAle" *coc-config-diagnostic-displayByAle* - - Use Ale for display diagnostics in vim, will disable coc for display - diagnostics, restart required on change. - - Scope: `language-overridable`, default: `false` - -"diagnostic.enable" *coc-config-diagnostic-enable* - - Set to false to disable diagnostic display. - - Scope: `language-overridable`, default: `true` - -"diagnostic.enableHighlightLineNumber" *coc-config-diagnostic-enableHighlightLineNumber* - - Enable highlighting line numbers for diagnostics, only works with neovim. - - Scope: `application`, default: `true` - -"diagnostic.enableMessage" *coc-config-diagnostic-enableMessage* - - When to enable show messages of diagnostics. - - Scope: `application`, default: `"always"` - -"diagnostic.enableSign" *coc-config-diagnostic-enableSign* - - Enable signs for diagnostics. - - Scope: `language-overridable`, default: `true` - -"diagnostic.errorSign" *coc-config-diagnostic-errorSign* - - Text of error sign. - - Scope: `application`, default: `">>"` - -"diagnostic.filetypeMap" *coc-config-diagnostic-filetypeMap* - - A map between buffer filetype and the filetype assigned to diagnostics. - To syntax highlight diagnostics with their parent buffer type use `" - default": "bufferType"`. - - Scope: `application`, default: `{}` - -"diagnostic.floatConfig" *coc-config-diagnostic-floatConfig* - - Configuration of floating window/popup for diagnostic messages, see - |coc-config-float|. - - Scope: `application`, default: `null` - -"diagnostic.format" *coc-config-diagnostic-format* - - Define the diagnostic format that shown in float window or echoed, - available parts: source, code, severity, message. - - Scope: `language-overridable`, default: `"%message (%source%code)"` - -"diagnostic.highlightLimit" *coc-config-diagnostic-highlightLimit* - - Limit count for highlighted diagnostics, too many diagnostic highlights - could make vim stop responding. - - Scope: `language-overridable`, default: `1000` - -"diagnostic.highlightPriority" *coc-config-diagnostic-highlightPriority* - - Priority for diagnostic highlights, works on vim8 and neovim >= 0.6.0. - - Scope: `language-overridable`, default: `4096` - -"diagnostic.hintSign" *coc-config-diagnostic-hintSign* - - Text of hint sign. - - Scope: `application`, default: `">>"` - -"diagnostic.infoSign" *coc-config-diagnostic-infoSign* - - Text of info sign. - - Scope: `application`, default: `">>"` - -"diagnostic.level" *coc-config-diagnostic-level* - - Used for filter diagnostics by diagnostic severity. - - Scope: `resource`, default: `"hint"` - -"diagnostic.locationlistLevel" *coc-config-diagnostic-locationlistLevel* - - Filter diagnostics in locationlist. - - Scope: `language-overridable`, default: `null` - -"diagnostic.locationlistUpdate" *coc-config-diagnostic-locationlistUpdate* - - Update locationlist on diagnostics change, only works with locationlist - opened by :CocDiagnostics command and first window of associated buffer. - - Scope: `language-overridable`, default: `true` - -"diagnostic.messageDelay" *coc-config-diagnostic-messageDelay* - - How long to wait (in milliseconds) before displaying the diagnostic - message with echo or float - - Scope: `application`, default: `200` - -"diagnostic.messageLevel" *coc-config-diagnostic-messageLevel* - - Filter diagnostic message in float window/popup. - - Scope: `language-overridable`, default: `null` - -"diagnostic.messageTarget" *coc-config-diagnostic-messageTarget* - - Diagnostic message target. - - Scope: `language-overridable`, default: `"float"` - -"diagnostic.refreshOnInsertMode" *coc-config-diagnostic-refreshOnInsertMode* - - Enable diagnostic refresh on insert mode, default false. - - Scope: `language-overridable`, default: `false` - -"diagnostic.separateRelatedInformationAsDiagnostics" *coc-config-diagnostic-separateRelatedInformationAsDiagnostics* - - Separate related information as diagnostics. - - Scope: `application`, default: `false` - -"diagnostic.showDeprecated" *coc-config-diagnostic-showDeprecated* - - Show diagnostics with deprecated tag. - - Scope: `language-overridable`, default: `true` - -"diagnostic.showUnused" *coc-config-diagnostic-showUnused* - - Show diagnostics with unused tag, affects highlight, sign, virtual - text , message. - - Scope: `language-overridable`, default: `true` - -"diagnostic.signLevel" *coc-config-diagnostic-signLevel* - - Filter diagnostics displayed in signcolumn. - - Scope: `language-overridable`, default: `null` - -"diagnostic.signPriority" *coc-config-diagnostic-signPriority* - - Priority of diagnostic signs. - - Scope: `resource`, default: `10` - -"diagnostic.virtualText" *coc-config-diagnostic-virtualText* - - Use virtual text to display diagnostics, requires neovim >= 0.5.0 or - vim >= 9.0.0067. - - Scope: `language-overridable`, default: `false` - -"diagnostic.virtualTextAlign" *coc-config-diagnostic-virtualTextAlign* - - Position of virtual text. Vim9 only. - - Scope: `language-overridable`, default: `"after"` - -"diagnostic.virtualTextCurrentLineOnly" *coc-config-diagnostic-virtualTextCurrentLineOnly* - - Only show virtualText diagnostic on current cursor line. - - Scope: `language-overridable`, default: `true` - -"diagnostic.virtualTextFormat" *coc-config-diagnostic-virtualTextFormat* - - Define the virtual text diagnostic format, available parts: source, code - , severity, message. - - Scope: `language-overridable`, default: `"%message"` - -"diagnostic.virtualTextLevel" *coc-config-diagnostic-virtualTextLevel* - - Filter diagnostic message in virtual text by level. - - Scope: `language-overridable`, default: `null` - -"diagnostic.virtualTextLimitInOneLine" *coc-config-diagnostic-virtualTextLimitInOneLine* - - The maximum number of diagnostic messages to disaply in one line. - - Scope: `language-overridable`, default: `999` - -"diagnostic.virtualTextLineSeparator" *coc-config-diagnostic-virtualTextLineSeparator* - - The text that will mark a line end from the diagnostic message. - - Scope: `language-overridable`, default: `" \ "` - -"diagnostic.virtualTextLines" *coc-config-diagnostic-virtualTextLines* - - The number of non empty lines from a diagnostic to display. - - Scope: `language-overridable`, default: `3` - -"diagnostic.virtualTextPrefix" *coc-config-diagnostic-virtualTextPrefix* - - The prefix added virtual text diagnostics. - - Scope: `language-overridable`, default: `" "` - -"diagnostic.virtualTextWinCol" *coc-config-diagnostic-virtualTextWinCol* - - Window column number to align virtual text, neovim only. - - Scope: `language-overridable`, default: `null` - -"diagnostic.warningSign" *coc-config-diagnostic-warningSign* - - Text of warning sign. - - Scope: `application`, default: `"⚠"` - ------------------------------------------------------------------------------- -Dialog~ - *coc-config-dialog* -"dialog.confirmKey" *coc-config-dialog-confirmKey* - - Confirm key for confirm selection used by menu and picker, you can - always use to cancel. - - Scope: `application`, default: `""` - -"dialog.floatBorderHighlight" *coc-config-dialog-floatBorderHighlight* - - Highlight group for border of dialog window/popup, use 'CocFloating' - when not specified. - - Scope: `application`, default: `null` - -"dialog.floatHighlight" *coc-config-dialog-floatHighlight* - - Highlight group for dialog window/popup, use 'CocFloating' when not - specified. - - Scope: `application`, default: `null` - -"dialog.maxHeight" *coc-config-dialog-maxHeight* - - Maximum height of dialog window. - - Scope: `application`, default: `30` - -"dialog.maxWidth" *coc-config-dialog-maxWidth* - - Maximum width of dialog window. - - Scope: `application`, default: `80` - -"dialog.pickerButtonShortcut" *coc-config-dialog-pickerButtonShortcut* - - Show shortcut in buttons of picker dialog window/popup, used when dialog - .pickerButtons is true. - - Scope: `application`, default: `true` - -"dialog.pickerButtons" *coc-config-dialog-pickerButtons* - - Show buttons for picker dialog window/popup. - - Scope: `application`, default: `true` - -"dialog.rounded" *coc-config-dialog-rounded* - - use rounded border for dialog window. - - Scope: `application`, default: `true` - -"dialog.shortcutHighlight" *coc-config-dialog-shortcutHighlight* - - Highlight group for shortcut character in menu dialog. - - Scope: `application`, default: `"MoreMsg"` - ------------------------------------------------------------------------------- -DocumentHighlight~ - *coc-config-documentHighlight* -"documentHighlight.priority" *coc-config-documentHighlight-priority* - - Match priority used by document highlight, see ':h matchadd'. - - Scope: `resource`, default: `-1` - -"documentHighlight.timeout" *coc-config-documentHighlight-timeout* - - Timeout for document highlight, in milliseconds. - - Scope: `resource`, default: `300` - ------------------------------------------------------------------------------- -FloatFactory~ - *coc-config-floatFactory* -"floatFactory.floatConfig" *coc-config-floatFactory-floatConfig* - - Configure default float window/popup style created by float factory - (created around cursor and automatically closed), properties of - |coc-config-float| are used. - - Scope: `application`, default: `null` - ------------------------------------------------------------------------------- -Hover~ - *coc-config-hover* -"hover.autoHide" *coc-config-hover-autoHide* - - Automatically hide hover float window on CursorMove or InsertEnter. - - Scope: `application`, default: `true` - -"hover.floatConfig" *coc-config-hover-floatConfig* - - Configuration of floating window/popup for hover documents, see - |coc-config-float|. - - Scope: `application`, default: `null` - -"hover.previewMaxHeight" *coc-config-hover-previewMaxHeight* - - Max height of preview window for hover. - - Scope: `resource`, default: `12` - -"hover.target" *coc-config-hover-target* - - Target to show hover information, could be `float`, `echo` or - `preview`. - - Scope: `resource`, default: `float` - ------------------------------------------------------------------------------- -Http proxy~ - *coc-config-http* -"http.proxy" *coc-config-http-proxy* - - The proxy setting to use. If not set, will be inherited from the ` - http_proxy` and `https_proxy` environment variables. - - Scope: `application`, default: `""` - -"http.proxyAuthorization" *coc-config-http-proxyAuthorization* - - The value to send as the `Proxy-Authorization` header for every network - request. - - Scope: `application`, default: `null` - -"http.proxyCA" *coc-config-http-proxyCA* - - CA (file) to use as Certificate Authority> - - Scope: `application`, default: `null` - -"http.proxyStrictSSL" *coc-config-http-proxyStrictSSL* - - Controls whether the proxy server certificate should be verified - against the list of supplied CAs. - - Scope: `application`, default: `true` - ------------------------------------------------------------------------------- -InlayHint~ - *coc-config-inlayHint* -"inlayHint.enable" *coc-config-inlayHint-enable* - - Enable inlay hint support. - - Scope: `language-overridable`, default: `true` - -"inlayHint.enableParameter" *coc-config-inlayHint-enableParameter* - - Enable inlay hints for parameters. - - Scope: `language-overridable`, default: `true` - -"inlayHint.display" coc-config-inlayHint-display - - Display inlay hints. Toggle with :CocCommand document.toggleInlayHint - - Scope: `language-overridable`, default: true - -"inlayHint.parameterSeparator" *coc-config-inlayHint-parameterSeparator* - - Separator for parameter inlay hint, neovim only. - - Scope: `language-overridable`, default: `""` - -"inlayHint.refreshOnInsertMode" *coc-config-inlayHint-refreshOnInsertMode* - - Refresh inlayHints on insert mode. - - Scope: `language-overridable`, default: `false` - -"inlayHint.subSeparator" *coc-config-inlayHint-subSeparator* - - Separator for chained inlay hints, neovim only. - - Scope: `language-overridable`, default: `" "` - -"inlayHint.typeSeparator" *coc-config-inlayHint-typeSeparator* - - Separator for type inlay hint, neovim only. - - Scope: `language-overridable`, default: `""` - ------------------------------------------------------------------------------- -Links~ - *coc-config-links* -"links.tooltip" *coc-config-links-tooltip* - - Show tooltip of link under cursor on CursorHold, neovim only. - - Scope: `application`, default: `false` - ------------------------------------------------------------------------------- -List~ - *coc-config-list* -"list.alignColumns" *coc-config-list-alignColumns* - - Whether to align lists in columns. - - Scope: `application`, default: `false` - -"list.extendedSearchMode" *coc-config-list-extendedSearchMode* - - Enable extended search mode which allows multiple search patterns - delimited by spaces. - - Scope: `application`, default: `true` - -"list.height" *coc-config-list-height* - - Height of split list window. - - Scope: `application`, default: `10` - -"list.indicator" *coc-config-list-indicator* - - The character used as first character in prompt line. - - Scope: `application`, default: `">"` - -"list.insertMappings" *coc-config-list-insertMappings* - - Custom keymappings on insert mode. - - Scope: `application`, default: `{}` - -"list.interactiveDebounceTime" *coc-config-list-interactiveDebounceTime* - - Debounce time for input change on interactive mode. - - Scope: `application`, default: `100` - -"list.limitLines" *coc-config-list-limitLines* - - Limit lines for list buffer. - - Scope: `application`, default: `null` - -"list.maxPreviewHeight" *coc-config-list-maxPreviewHeight* - - Max height for preview window of list. - - Scope: `application`, default: `12` - -"list.menuAction" *coc-config-list-menuAction* - - Use menu picker instead of confirm() for choose action. - - Scope: `application`, default: `false` - -"list.nextKeymap" *coc-config-list-nextKeymap* - - Key used for select next line on insert mode. - - Scope: `application`, default: `""` - -"list.normalMappings" *coc-config-list-normalMappings* - - Custom keymappings on normal mode. - - Scope: `application`, default: `{}` - -"list.previewHighlightGroup" *coc-config-list-previewHighlightGroup* - - Highlight group used for highlight the range in preview window. - - Scope: `application`, default: `"Search"` - -"list.previewSplitRight" *coc-config-list-previewSplitRight* - - Use vsplit for preview window. - - Scope: `application`, default: `false` - -"list.previewToplineOffset" *coc-config-list-previewToplineOffset* - - Topline offset for list previews - - Scope: `application`, default: `3` - -"list.previewToplineStyle" *coc-config-list-previewToplineStyle* - - Topline style for list previews - - Scope: `application`, default: `"offset"` - -"list.previousKeymap" *coc-config-list-previousKeymap* - - Key used for select previous line on insert mode. - - Scope: `application`, default: `""` - -"list.selectedSignText" *coc-config-list-selectedSignText* - - Sign text for selected lines. - - Scope: `application`, default: `"*"` - -"list.signOffset" *coc-config-list-signOffset* - - Sign offset of list, should be different from other plugins. - - Scope: `application`, default: `900` - -"list.smartCase" *coc-config-list-smartCase* - - Use smartcase match for fuzzy match and strict match, --ignore-case - will be ignored, may not affect interactive list. - - Scope: `application`, default: `false` - -"list.source.diagnostics.includeCode" *coc-config-list-source-diagnostics-includeCode* - - Whether to show the diagnostic code in the list. - - Scope: `application`, default: `true` - -"list.source.diagnostics.pathFormat" *coc-config-list-source-diagnostics-pathFormat* - - Decide how the filepath is shown in the list. - - Scope: `application`, default: `"full"` - -"list.source.outline.ctagsFiletypes" *coc-config-list-source-outline-ctagsFiletypes* - - Filetypes that should use ctags for outline instead of language server. - - Scope: `application`, default: `[]` - -"list.source.symbols.excludes" *coc-config-list-source-symbols-excludes* - - Patterns of minimatch for filepath to exclude from symbols list. - - Scope: `application`, default: `[]` - -"list.statusLineSegments" *coc-config-list-statusLineSegments* - - An array of statusline segments that will be used to draw the status - line for list windows. - - Scope: `application`. - ------------------------------------------------------------------------------- -Notification~ - *coc-config-notification* -"notification.border" *coc-config-notification-border* - - Enable rounded border for notification windows. - - Scope: `application`, default: `true` - -"notification.disabledProgressSources" *coc-config-notification-disabledProgressSources* - - Sources that should be disabled for message progress, use * to disable - all progresses. - - Scope: `application`, default: `[]` - -"notification.focusable" *coc-config-notification-focusable* - - Enable focus by user actions (wincmds, mouse events), neovim only. - - Scope: `application`, default: `true` - -"notification.highlightGroup" *coc-config-notification-highlightGroup* - - Highlight group of notification dialog. - - Scope: `application`, default: `"Normal"` - -"notification.marginRight" *coc-config-notification-marginRight* - - Margin right to the right of editor window. - - Scope: `application`, default: `10` - -"notification.maxHeight" *coc-config-notification-maxHeight* - - Maximum content height of notification dialog. - - Scope: `application`, default: `10` - -"notification.maxWidth" *coc-config-notification-maxWidth* - - Maximum content width of notification dialog. - - Scope: `application`, default: `60` - -"notification.minProgressWidth" *coc-config-notification-minProgressWidth* - - Minimal with of progress notification. - - Scope: `application`, default: `30` - -"notification.statusLineProgress" *coc-config-notification-statusLineProgress* - - Show progress notification in status line, instead of use float - window/popup. - -"notification.timeout" *coc-config-notification-timeout* - - Timeout for auto close notifications, in milliseconds. - - Scope: `application`, default: `10000` - -"notification.winblend" *coc-config-notification-winblend* - - Winblend option of notification window, neovim only. - - Scope: `application`, default: `30` - ------------------------------------------------------------------------------- -Npm~ - *coc-config-npm* -"npm.binPath" *coc-config-npm-binPath* - - Command or absolute path to npm or yarn for global extension - install/uninstall. - - Scope: `application`, default: `"npm"` - ------------------------------------------------------------------------------- -Outline~ - *coc-config-outline* -"outline.autoPreview" *coc-config-outline-autoPreview* - - Enable auto preview on cursor move. - - Scope: `application`, default: `false` - -"outline.autoWidth" *coc-config-outline-autoWidth* - - Automatically increase window width to avoid wrapped lines. - - Scope: `application`, default: `true` - -"outline.checkBufferSwitch" *coc-config-outline-checkBufferSwitch* - - Recreate outline view after user changed to another buffer on current - tab. - - Scope: `application`, default: `true` - -"outline.codeActionKinds" *coc-config-outline-codeActionKinds* - - Filter code actions in actions menu by kinds. - - Scope: `application`, default: `["","quickfix","refactor"]` - -"outline.detailAsDescription" *coc-config-outline-detailAsDescription* - - Show detail as description aside with label, when false detail will be - shown in tooltip on cursor hold. - - Scope: `application`, default: `true` - -"outline.expandLevel" *coc-config-outline-expandLevel* - - Expand level of tree nodes. - - Scope: `application`, default: `1` - -"outline.followCursor" *coc-config-outline-followCursor* - - Reveal item in outline tree on cursor hold. - - Scope: `application`, default: `true` - -"outline.keepWindow" *coc-config-outline-keepWindow* - - Jump back to original window after outline is shown. - - Scope: `application`, default: `false` - -"outline.previewBorder" *coc-config-outline-previewBorder* - - Use border for preview window. - - Scope: `application`, default: `true` - -"outline.previewBorderHighlightGroup" *coc-config-outline-previewBorderHighlightGroup* - - Border highlight group of preview window. - - Scope: `application`, default: `"Normal"` - -"outline.previewBorderRounded" *coc-config-outline-previewBorderRounded* - - Use rounded border for preview window. - - Scope: `application`, default: `false` - -"outline.previewHighlightGroup" *coc-config-outline-previewHighlightGroup* - - Highlight group of preview window. - - Scope: `application`, default: `"Normal"` - -"outline.previewMaxWidth" *coc-config-outline-previewMaxWidth* - - Max width of preview window. - - Scope: `application`, default: `80` - -"outline.previewWinblend" *coc-config-outline-previewWinblend* - - Enables pseudo-transparency by set 'winblend' option of window, neovim - only. - - Scope: `application`, default: `0` - -"outline.showLineNumber" *coc-config-outline-showLineNumber* - - Show line number of symbols. - - Scope: `application`, default: `true` - -"outline.sortBy" *coc-config-outline-sortBy* - - Default sort method for symbols outline. - - Scope: `application`, default: `"category"` - -"outline.splitCommand" *coc-config-outline-splitCommand* - - Window split command used by outline. - - Scope: `application`, default: `"botright 30vs"` - -"outline.switchSortKey" *coc-config-outline-switchSortKey* - - The key used to switch sort method for symbols provider of current - tree view. - - Scope: `application`, default: `""` - -"outline.togglePreviewKey" *coc-config-outline-togglePreviewKey* - - The key used to toggle auto preview feature. - - Scope: `application`, default: `"p"` - ------------------------------------------------------------------------------- -PullDiagnostic~ - *coc-config-pullDiagnostic* -"pullDiagnostic.ignored" *coc-config-pullDiagnostic-ignored* - - Minimatch patterns to match full filepath that should be ignored for - pullDiagnostic. - - Scope: `application`, default: `[]` - -"pullDiagnostic.onChange" *coc-config-pullDiagnostic-onChange* - - Whether to pull for diagnostics on document change. - - Scope: `language-overridable`, default: `true` - -"pullDiagnostic.onSave" *coc-config-pullDiagnostic-onSave* - - Whether to pull for diagnostics on document save. - - Scope: `language-overridable`, default: `false` - -"pullDiagnostic.workspace" *coc-config-pullDiagnostic-workspace* - - Whether to pull for workspace diagnostics when possible. - - Scope: `application`, default: `true` - ------------------------------------------------------------------------------- -Refactor~ - *coc-config-refactor* -"refactor.afterContext" *coc-config-refactor-afterContext* - - Print num lines of trailing context after each match. - - Scope: `application`, default: `3` - -"refactor.beforeContext" *coc-config-refactor-beforeContext* - - Print num lines of leading context before each match. - - Scope: `application`, default: `3` - -"refactor.openCommand" *coc-config-refactor-openCommand* - - Open command for refactor window. - - Scope: `application`, default: `"vsplit"` - -"refactor.saveToFile" *coc-config-refactor-saveToFile* - - Save changed buffer to file when write refactor buffer with ':noa wa' - command. - - Scope: `application`, default: `true` - -"refactor.showMenu" *coc-config-refactor-showMenu* - - Refactor buffer local mapping to bring up menu for this chunk. - - Scope: `application`, default: `""` - ------------------------------------------------------------------------------- -SemanticTokens~ - *coc-config-semanticTokens* -"semanticTokens.combinedModifiers" *coc-config-semanticTokens-combinedModifiers* - - Semantic token modifiers that should have highlight combined with - syntax highlights. - - Scope: `language-overridable`, default: `["deprecated"]` - -"semanticTokens.enable" *coc-config-semanticTokens-enable* - - Enable semantic tokens support. - - Scope: `language-overridable`, default: `false` - -"semanticTokens.highlightPriority" *coc-config-semanticTokens-highlightPriority* - - Priority for semantic tokens highlight. - - Scope: `language-overridable`, default: `2048` - -"semanticTokens.incrementTypes" *coc-config-semanticTokens-incrementTypes* - - Semantic token types that should increase highlight when insert at the - start and end position of token. - - Scope: `language-overridable`, default: `["variable","string","parameter"]` - ------------------------------------------------------------------------------- -Signature~ - *coc-config-signature* -"signature.enable" *coc-config-signature-enable* - - Enable show signature help when trigger character typed. - - Scope: `language-overridable`, default: `true` - -"signature.floatConfig" *coc-config-signature-floatConfig* - - Configuration of floating window/popup for signature documents, see - |coc-config-float|. - - Scope: `application`, default: `null` - -"signature.hideOnTextChange" *coc-config-signature-hideOnTextChange* - - Hide signature float window when text changed on insert mode. - - Scope: `language-overridable`, default: `false` - -"signature.preferShownAbove" *coc-config-signature-preferShownAbove* - - Show signature help float window above cursor when possible, require - restart coc.nvim on change. - - Scope: `application`, default: `true` - -"signature.target" *coc-config-signature-target* - - Target of signature help, use float when possible by default. - - Scope: `language-overridable`, default: `"float"` - -"signature.triggerSignatureWait" *coc-config-signature-triggerSignatureWait* - - Timeout for trigger signature help, in milliseconds. - - Scope: `language-overridable`, default: `500` - ------------------------------------------------------------------------------- -Snippet~ - *coc-config-snippet* -"snippet.choicesMenuPicker" *coc-config-snippet-choicesMenuPicker* - - Use menu picker instead of popup menu for choices placeholder. - - Scope: `resource`, default: `false` - -"snippet.highlight" *coc-config-snippet-highlight* - - Use highlight group 'CocSnippetVisual' to highlight placeholders with - same index of current one. - - Scope: `resource`, default: `false` - -"snippet.nextPlaceholderOnDelete" *coc-config-snippet-nextPlaceholderOnDelete* - - Automatically jump to the next placeholder when the current one is - completely deleted. - - Scope: `resource`, default: `false` - -"snippet.statusText" *coc-config-snippet-statusText* - - Text shown in statusline to indicate snippet session is activated. - - Scope: `application`, default: `"SNIP"` - ------------------------------------------------------------------------------- -Suggest~ - *coc-config-suggest* -"suggest.acceptSuggestionOnCommitCharacter" *coc-config-suggest-acceptSuggestionOnCommitCharacter* - - Controls whether suggestions should be accepted on commit characters. - For example, in JavaScript, the semi-colon (`;`) can be a commit - character that accepts a suggestion and types that character. - - Scope: `language-overridable`, default: `false` - -"suggest.asciiCharactersOnly" *coc-config-suggest-asciiCharactersOnly* - - Trigger suggest with ASCII characters only. - - Scope: `language-overridable`, default: `false` - -"suggest.asciiMatch" *coc-config-suggest-asciiMatch* - - Convert unicode characters to ascii for match. - - Scope: `language-overridable`, default: `true` - -"suggest.autoTrigger" *coc-config-suggest-autoTrigger* - - How should completion be triggered, could be `"always"`, `"trigger"` - or `"none"`. - - Scope: `language-overridable`, default: `"always"` - -"suggest.completionItemKindLabels" *coc-config-suggest-completionItemKindLabels* - - Set custom labels to completion items' kinds. - Default value: > - { - "text": "v", - "method": "f", - "function": "f", - "constructor": "f", - "field": "m", - "variable": "v", - "class": "C", - "interface": "I", - "module": "M", - "property": "m", - "unit": "U", - "value": "v", - "enum": "E", - "keyword": "k", - "snippet": "S", - "color": "v", - "file": "F", - "reference": "r", - "folder": "F", - "enumMember": "m", - "constant": "v", - "struct": "S", - "event": "E", - "operator": "O", - "typeParameter": "T", - "default": "" - } -< - Scope: `application` - -"suggest.defaultSortMethod" *coc-config-suggest-defaultSortMethod* - - Default sorting behavior when trigger is empty, could be `"length"`, - `"alphabetical"` or `"none"`. - - Scope: `language-overridable`, default: `"length"` - -"suggest.detailField" *coc-config-suggest-detailField* - - Where to show the detail text of CompleteItem from language server. - - Scope: `application`, default: `"preview"` - -"suggest.enablePreselect" *coc-config-suggest-enablePreselect* - - Enable preselect feature, works when |coc-config-suggest-noselect| is - false. - - Scope: `application`, default: `true` - -"suggest.fixInsertedWord" *coc-config-suggest-fixInsertedWord* - - Make inserted word replace word characters after cursor position. - - Scope: `application`, default: `true` - -"suggest.floatConfig" *coc-config-suggest-floatConfig* - - Configure style of popup menu and documentation window for completion, - see |coc-config-float|. - - Note: some properties not work, including: "title", "focusable", - "close" and "maxHeight" (use 'pumheight' option for maximum height of - popup menu). - - Note: "maxWidth" not works for popup menu, use - |coc-config-suggest-detailMaxLength| instead. - -"suggest.formatItems" *coc-config-suggest-formatItems* - - Items shown in popup menu in order. - - Scope: `application`, default: `["abbr","menu","kind","shortcut"]` - -"suggest.highPrioritySourceLimit" *coc-config-suggest-highPrioritySourceLimit* - - Max items count for source priority bigger than or equal to 90. - - Scope: `language-overridable`, default: `null` - -"suggest.ignoreRegexps" *coc-config-suggest-ignoreRegexps* - - Regexps to ignore when trigger suggest. - - Scope: `language-overridable`, default: `[]` - -"suggest.invalidInsertCharacters" *coc-config-suggest-invalidInsertCharacters* - - Invalid character for strip valid word when inserting text of complete - item. - - Scope: `application`, default: `[" ","(","<","{","[","\r","\n"]` - -"suggest.labelMaxLength" *coc-config-suggest-labelMaxLength* - - Max length of abbr that shown as label of complete item. - - Scope: `application`, default: `200` - -"suggest.languageSourcePriority" *coc-config-suggest-languageSourcePriority* - - Priority of language sources. - - Scope: `language-overridable`, default: `99` - -"suggest.localityBonus" *coc-config-suggest-localityBonus* - - Boost suggestions that appear closer to the cursor position. - - Scope: `language-overridable`, default: `true` - -"suggest.lowPrioritySourceLimit" *coc-config-suggest-lowPrioritySourceLimit* - - Max items count for source priority lower than 90. - - Scope: `language-overridable`, default: `null` - -"suggest.maxCompleteItemCount" *coc-config-suggest-maxCompleteItemCount* - - Maximum number of complete items shown in vim. - - Scope: `language-overridable`, default: `256` - -"suggest.minTriggerInputLength" *coc-config-suggest-minTriggerInputLength* - - Minimal input length for trigger completion. - - Scope: `language-overridable`, default: `1` - -"suggest.noselect" *coc-config-suggest-noselect* - - Not make vim select first item on popupmenu shown. - - Scope: `application`, default: `false` - -"suggest.preferCompleteThanJumpPlaceholder" *coc-config-suggest-preferCompleteThanJumpPlaceholder* - - Confirm completion instead of jump to next placeholder when completion - is activated. - - Scope: `resource`, default: `false` - -"suggest.pumFloatConfig" *coc-config-suggest-pumFloatConfig* - - Configure style of popup menu, |coc-config-suggest-floatConfig| is - used when not specified, see |coc-config-float|. - - Available properties: "border", "rounded", "highlight", - "borderhighlight", "winblend" and "shadow". - - Note: 'winblend' option is used for custom popup menu when not - configured, use 'pumwidth' for minimal width of popup menu and - 'pumheight' for maximum height of popup menu. - - Scope: `application`, default: `null` - -"suggest.removeDuplicateItems" *coc-config-suggest-removeDuplicateItems* - - Remove completion items with duplicated word for all sources, snippet - items are excluded. - - Scope: `language-overridable`, default: `false` - -"suggest.reversePumAboveCursor" *coc-config-suggest-reversePumAboveCursor* - - Reverse order of complete items when pum shown above cursor. - - Scope: `application`, default: `false` - -"suggest.selection" *coc-config-suggest-selection* - - Controls how suggestions are pre-selected when showing the suggest list. - - Scope: `application`, default: `"first"` - -"suggest.snippetIndicator" *coc-config-suggest-snippetIndicator* - - The character used in abbr of complete item to indicate the item could - be expand as snippet. - - Scope: `application`, default: `"~"` - -"suggest.snippetsSupport" *coc-config-suggest-snippetsSupport* - - Set to false to disable snippets support of completion. - - Scope: `language-overridable`, default: `true` - -"suggest.timeout" *coc-config-suggest-timeout* - - Timeout for completion, in milliseconds. - - Scope: `language-overridable`, default: `5000` - -"suggest.triggerAfterInsertEnter" *coc-config-suggest-triggerAfterInsertEnter* - - Trigger completion after InsertEnter, |coc-config-suggest-autoTrigger| - should be 'always' to enable this option - - Scope: `language-overridable`, default: `false` - -"suggest.triggerCompletionWait" *coc-config-suggest-triggerCompletionWait* - - Wait time between text change and completion start, cancel completion - when text changed during wait. - - Scope: `language-overridable`, default: `0` - -"suggest.virtualText" *coc-config-suggest-virtualText* - - Show virtual text for insert word of selected item, requires - neovim >= 0.5.0 or vim >= 9.0.0067. - - Scope: `application`, default: `false` - ------------------------------------------------------------------------------- -Tree~ - *coc-config-tree* -"tree.closedIcon" *coc-config-tree-closedIcon* - - Closed icon of tree view. - - Scope: `application`, default: `"+"` - -"tree.key.actions" *coc-config-tree-key-actions* - - Trigger key to invoke actions. - - Scope: `application`, default: `""` - -"tree.key.activeFilter" *coc-config-tree-key-activeFilter* - - Trigger key active filter. - - Scope: `application`, default: `"f"` - -"tree.key.close" *coc-config-tree-key-close* - - Trigger key to dispose the tree and close tree window. - - Scope: `application`, default: `""` - -"tree.key.collapseAll" *coc-config-tree-key-collapseAll* - - Trigger key to collapse all tree node. - - Scope: `application`, default: `"M"` - -"tree.key.invoke" *coc-config-tree-key-invoke* - - Trigger key to invoke default command of current node or selection. - - Scope: `application`, default: `""` - -"tree.key.selectNext" *coc-config-tree-key-selectNext* - - Trigger key to select next item during filter. - - Scope: `application`, default: `""` - -"tree.key.selectPrevious" *coc-config-tree-key-selectPrevious* - - Trigger key to select previous item during filter. - - Scope: `application`, default: `""` - -"tree.key.toggle" *coc-config-tree-key-toggle* - - Trigger key to toggle expand state of tree node, does nothing with leaf - node. - - Scope: `application`, default: `"t"` - -"tree.key.toggleSelection" *coc-config-tree-key-toggleSelection* - - Trigger key to select/unselect item. - - Scope: `application`, default: `""` - -"tree.openedIcon" *coc-config-tree-openedIcon* - - Opened icon of tree view. - - Scope: `application`, default: `"-"` - ------------------------------------------------------------------------------- -TypeHierarchy~ - *coc-config-typeHierarchy* -"typeHierarchy.enableTooltip" *coc-config-typeHierarchy-enableTooltip* - - Enable tooltip to show relative filepath of type hierarchy item. - - Scope: `application`, default: `true` - -"typeHierarchy.openCommand" *coc-config-typeHierarchy-openCommand* - - Open command for type hierarchy tree view. - - Scope: `application`, default: `"edit"` - -"typeHierarchy.splitCommand" *coc-config-typeHierarchy-splitCommand* - - Window split command used by type hierarchy tree view. - - Scope: `application`, default: `"botright 30vs"` - ------------------------------------------------------------------------------- -Workspace~ - *coc-config-workspace* -"workspace.bottomUpFiletypes" *coc-config-workspace-bottomUpFiletypes* - - Filetypes that should have workspace folder should resolved from base - directory of file, or ["*"] for any filetype. - - Scope: `application`, default: `[]` - -"workspace.ignoredFiletypes" *coc-config-workspace-ignoredFiletypes* - - Filetypes that should be ignored for workspace folder resolve. - - Scope: `resource`, default: `[]` - -"workspace.ignoredFolders" *coc-config-workspace-ignoredFolders* - - List of folders that should not be resolved as workspace folder, - environment variables and minimatch patterns can be used. - - Scope: `application`, default: `["$HOME"]` - -"workspace.openOutputCommand" *coc-config-workspace-openOutputCommand* - - Command used to open output channel. - - Scope: `resource`, default: `"vs"` - -"workspace.openResourceCommand" *coc-config-workspace-openResourceCommand* - - Command to open files that not loaded, load files as hidden buffers - when empty. - - Scope: `application`, default: `"tab drop"` - -"workspace.workspaceFolderCheckCwd" *coc-config-workspace-workspaceFolderCheckCwd* - - Whether the current working directory should be used first when - checking patterns match for workspace folder. - - Scope: `application`, default: `true` - -"workspace.workspaceFolderFallbackCwd" *coc-config-workspace-workspaceFolderFallbackCwd* - - Use current working directory as workspace folder when no root - patterns resolved. - - Scope: `application`, default: `true` - ------------------------------------------------------------------------------- -Preferences~ - *coc-config-preferences* -"coc.preferences.bracketEnterImprove" *coc-preferences-bracketEnterImprove* - - Improve enter inside bracket `<> {} [] ()` by add new empty line below - and place cursor to it. Works with `coc#on_enter()` - - Scope: `language-overridable`, default: `true` - -"coc.preferences.currentFunctionSymbolAutoUpdate" *coc-preferences-currentFunctionSymbolAutoUpdate* - - Automatically update the value of b:coc_current_function on CursorHold - event - - Scope: `language-overridable`, default: `false` - -"coc.preferences.enableLinkedEditing" *coc-preferences-enableLinkedEditing* - - Enable linked editing support. - - Scope: `language-overridable`, default: `false` - -"coc.preferences.enableMarkdown" *coc-preferences-enableMarkdown* - - Tell the language server that markdown text format is supported, note - that markdown text may not rendered as expected. - - Scope: `application`, default: `true` - -"coc.preferences.enableMessageDialog" *coc-preferences-enableMessageDialog* - - Enable messages shown in notification dialog. - - Scope: `application`, default: `false` - -"coc.preferences.excludeImageLinksInMarkdownDocument" *coc-preferences-excludeImageLinksInMarkdownDocument* - - Exclude image links from markdown text in float window. - - Scope: `application`, default: `true` - -"coc.preferences.extensionUpdateCheck" *coc-preferences-extensionUpdateCheck* - - Interval for check extension update, could be "daily", "weekly" or - "never" - - Scope: `application`, default: `"never"` - -"coc.preferences.floatActions" *coc-preferences-floatActions* - - Set to false to disable float/popup support for actions menu. - - Scope: `application`, default: `true` - -"coc.preferences.formatOnSaveFiletypes" *coc-preferences-formatOnSaveFiletypes* - - Filetypes that should run format on save. - - Scope: `resource`, default: `[]` - -"coc.preferences.formatOnType" *coc-preferences-formatOnType* - - Set to true to enable formatting on typing - - Scope: `language-overridable`, default: `false` - -"coc.preferences.formatOnTypeFiletypes" *coc-preferences-formatOnTypeFiletypes* - - Filetypes that should run format on typing. Only take effect when `coc. - preferences.formatOnType` set `true` - - Scope: `resource`, default: `[]` - -"coc.preferences.jumpCommand" *coc-preferences-jumpCommand* - - Command used for location jump, like goto definition, goto references - etc. Can be also a custom command that gives file as an argument. - - Scope: `application`, default: `"edit"` - -"coc.preferences.maxFileSize" *coc-preferences-maxFileSize* - - Maximum file size in bytes that coc.nvim should handle, default - '10MB'. - - Scope: `application`, default: `"10MB"` - -"coc.preferences.messageLevel" *coc-preferences-messageLevel* - - Message level for filter echoed messages, could be 'more', 'warning' - and 'error' - - Scope: `application`, default: `"more"` - -"coc.preferences.promptInput" *coc-preferences-promptInput* - - Use prompt buffer in float window for user input. - - Scope: `application`, default: `true` - -"coc.preferences.renameFillCurrent" *coc-preferences-renameFillCurrent* - - Disable to stop Refactor-Rename float/popup window from populating - with old name in the New Name field. - - Scope: `application`, default: `true` - -"coc.preferences.rootPatterns" *coc-preferences-rootPatterns* - - Root patterns to resolve workspaceFolder from parent folders of opened - files, resolved from up to down. - - Scope: `application`, default: `[".git",".hg",".projections.json"]` - -"coc.preferences.silentAutoupdate" *coc-preferences-silentAutoupdate* - - Not open split window with update status when performing auto update. - - Scope: `application`, default: `true` - -"coc.preferences.useQuickfixForLocations" *coc-preferences-useQuickfixForLocations* - - Use vim's quickfix list for jump locations, need restart on change. - - Scope: `application`, default: `false` - -"coc.preferences.watchmanPath" *coc-preferences-watchmanPath* - - executable path for https://facebook.github.io/watchman/, detected - from $PATH by default - - Scope: `application`, default: `null` - -"coc.preferences.willSaveHandlerTimeout" *coc-preferences-willSaveHandlerTimeout* - - Will save handler timeout. - - Scope: `application`, default: `500` - ------------------------------------------------------------------------------- -Float configuration~ - *coc-config-float* - -Used by `suggest.floatConfig`, `diagnostic.floatConfig`, -`signature.floatConfig` and `hover.floatConfig`, following properties are -supported: - - - "border": Change to `true` to enable border. - - "rounded": Use rounded borders when border is `true`. - - "highlight": Background highlight group of float window, default: - `"CocFloating"`. - - "title": Title text used by float window, default: `""`. - - "borderhighlight": Border highlight group of float window, default: - `"CocFloating"`. - - "close": Set to `true` to draw close icon. - - "maxWidth": Maximum width of float window, contains border. - - "maxHeight": Maximum height of float window, contains border. - - "winblend": Set 'winblend' option of window, neovim only, default: - `0`. - - "focusable": Set to false to make window not focusable, neovim only. - - "shadow": Set to true to enable shadow, neovim only. - ------------------------------------------------------------------------------- -Languageserver~ - *coc-config-languageserver* - - Dictionary of Language Servers, key is the ID of corresponding server, - and value is configuration of languageserver. Default: `{}` - - Properties of languageserver configuration: - - - "enable": Change to `false` to disable that languageserver. - - - "filetypes": Supported filetypes, add * in array for all filetypes. - Note: it's required for start the languageserver, please make sure - your filetype is expected by `:CocCommand document.echoFiletype` command - - - "additionalSchemes": Additional URI schemes, default schemes - including file & untitled. - Note: you have to setup vim provide content for custom URI as well. - - - "cwd": Working directory used to start languageserver, vim's cwd is - used by default. - - - "env": Environment variables for child process. - - - "settings": Settings for languageserver, received on server - initialization. - - - "trace.server": Trace level of communication between server and - client that showed with output channel, open output channel by - command `:CocCommand workspace.showOutput` - - - "stdioEncoding": Encoding used for stdio of child process. - - - "initializationOptions": Initialization options passed to - languageserver (it's deprecated) - - - "rootPatterns": Root patterns used to resolve rootPath from current - file. - - - "requireRootPattern": If true, doesn't start server when root - pattern not found. - - - "ignoredRootPaths": Absolute root paths that language server should - not use as rootPath, higher priority than rootPatterns. - - - "disableDynamicRegister": Disable dynamic registerCapability feature - for this languageserver to avoid duplicated feature registration. - - - "disableSnippetCompletion": Disable snippet completion feature for - this languageserver. - - - "disabledFeatures": Disable features for this languageserver, - valid keys: -> - ["completion", "configuration", "workspaceFolders", "diagnostics", - "willSave", "willSaveUntil", "didSaveTextDocument", - "fileSystemWatcher", "hover", "signatureHelp", "definition", - "references", "documentHighlight", "documentSymbol", - "workspaceSymbol", "codeAction", "codeLens", "formatting", - "documentFormatting", "documentRangeFormatting", - "documentOnTypeFormatting", "rename", "documentLink", - "executeCommand", "pullConfiguration", "typeDefinition", - "implementation", "declaration", "color", "foldingRange", - "selectionRange", "progress", "callHierarchy", "linkedEditing", - "fileEvents", "semanticTokens"] -< - - "formatterPriority": Priority of this languageserver's formatter. - - - "revealOutputChannelOn": Configure message level to show the output - channel buffer. - - - "progressOnInitialization": Enable progress report on languageserver - initialize. - -Language server start with command:~ - - Additional fields can be used for a command languageserver: - - - "command": Executable program name in $PATH or absolute path of - executable used for start languageserver. - - - "args": Command line arguments of command. - - - "detached": Detach language server when is true. - - - "shell": Use shell for server process, default: `false` - -Language server start with module:~ - - Additional fields can be used for a languageserver started by node - module: - - - "module": Absolute filepath of Javascript file. - - - "args": Extra arguments used on fork Javascript module. - - - "runtime": Absolute path of node runtime, node runtime of coc.nvim - is used by default. - - - "execArgv": ARGV passed to node on fork, normally used for - debugging, example: `["--nolazy", "--inspect-brk=6045"]` - - - "transport": Transport kind used by server, could be 'ipc', 'stdio', - 'socket' and 'pipe'. 'ipc' is used by default (recommended). - - - "transportPort": Port number used when transport is 'socket'. - -Language server use initialized socket server:~ - - - "port": Port number of socket server. - - - "host": Host of socket server, default to `127.0.0.1`. - -============================================================================== -vim:tw=78:nosta:noet:ts=8:sts=0:ft=help:noet:fen: diff --git a/dotfiles/.vim/plugged/coc.nvim/doc/coc.txt b/dotfiles/.vim/plugged/coc.nvim/doc/coc.txt deleted file mode 100644 index aa3048c0..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/doc/coc.txt +++ /dev/null @@ -1,3984 +0,0 @@ -*coc-nvim.txt* NodeJS client for Vim & Neovim. - -Version: 0.0.82 -Author: Qiming Zhao -License: Anti 996 license - -CONTENTS *coc-contents* - -Introduction |coc-introduction| -Requirements |coc-requirements| -Installation |coc-installation| -Extensions |coc-extensions| -Configuration |coc-configuration| -Floating windows |coc-floating| -LSP features |coc-lsp| - Document |coc-document| - Hover |coc-hover| - Completion |coc-completion| - Diagnostics |coc-diagnostics| - Pull diagnostics |coc-pullDiagnostics| - Locations |coc-locations| - Rename |coc-rename| - Signature help |coc-signature| - Inlay hint |coc-inlayHint| - Format |coc-format| - Code action |coc-code-actions| - Document highlights |coc-document-highlights| - Document colors |coc-document-colors| - Document links |coc-document-links| - Snippets |coc-snippets| - Workspace |coc-workspace| - Cursors |coc-cursors| - Outline |coc-outline| - Call hierarchy |coc-callHierarchy| - Type hierarchy |coc-typeHierarchy| - Semantic highlights |coc-semantic-highlights| - Fold |coc-fold| - Selection range |coc-selection-range| - Code Lens |coc-code-lens| - Linked editing |coc-linked-editing| -Interface |coc-interface| - Key mappings |coc-key-mappings| - Variables |coc-variables| - Buffer variables |coc-buffer-variables| - Global variables |coc-global-variables| - Functions |coc-functions| - Commands |coc-commands| - Autocmds |coc-autocmds| - Highlights |coc-highlights| -Tree |coc-tree| - Tree mappings |coc-tree-mappings| - Tree filter |coc-tree-filter| -List |coc-list| - List command |coc-list-command| - List command options |coc-list-options| - List configuration |coc-list-configuration| - List mappings |coc-list-mappings| - list sources |coc-list-sources| -Dialog |coc-dialog| - Dialog basic |coc-dialog-basic| - Dialog confirm |coc-dialog-confirm| - Dialog input |coc-dialog-input| - Dialog menu |coc-dialog-menu| - Dialog picker |coc-dialog-picker| -Notification |coc-notification| -Statusline integration |coc-status| - Manual |coc-status-manual| - Airline |coc-status-airline| - Lightline |coc-status-lightline| -FAQ |coc-faq| -Changelog |coc-changelog| - -============================================================================== -INTRODUCTION *coc-introduction* - -Coc.nvim enhances your (Neo)Vim to match the user experience provided by -VSCode through a rich extension ecosystem and implemented features specified -by Language Server Protocol (3.16 for now). - -Some features (like completion) automatically works by default, all of them -can be disabled by |coc-configuration|. - -Some of its key features include:~ - -- APIs compatible with both Vim8 and Neovim. -- Loading VSCode-like extensions. -- Configuring coc.nvim and its extensions with JSON configuration - |coc-configuration|. -- Configuring Language Servers that using Language Server Protocol (LSP) - |coc-config-languageserver|. - -It is designed for best possible integration with other Vim plugins. - -Note: coc.nvim doesn't come with support for any specific language. You -will need to install coc.nvim extensions |coc-extensions| or set up the -language server by use |coc-config-languageserver|. - -Note: multiple language servers for same document is allowed, but you should -avoid configure same language server that already used by coc.nvim extension. - -Note: automatic completion plugins can't play nicely together, you can disable -automatic completion of coc.nvim through `"suggest.autoTrigger": "none"` (or -`"suggest.autoTrigger": "trigger"`) in your configuration file. - -============================================================================== -REQUIREMENTS *coc-requirements* - -Neovim >= 0.4.0 or Vim >= 8.1.1719. - -NodeJS https://nodejs.org/ >= 14.14.0. - -Yarn https://yarnpkg.com/ required to build coc.nvim from typescript source -code. - -============================================================================== -INSTALLATION *coc-installation* - -If you're using [vim-plug](https://github.com/junegunn/vim-plug), add this to -your `init.vim` or `.vimrc`: > - - Plug 'neoclide/coc.nvim', {'branch': 'release'} -< -And run: > - - :PlugInstall - -For other plugin managers, make sure to use code from the release branch -(unless you want to build from typescript source code). - -To use Vim's native |packages| on Linux or MaxOS, use script like: > - - #!/bin/sh - # for vim8 - mkdir -p ~/.vim/pack/coc/start - cd ~/.vim/pack/coc/start - curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz|tar xzfv - - vim -c 'helptags ~/.vim/pack/coc/start/doc|q' - - # for neovim - mkdir -p ~/.local/share/nvim/site/pack/coc/start - cd ~/.local/share/nvim/site/pack/coc/start - curl --fail -L https://github.com/neoclide/coc.nvim/archive/release.tar.gz|tar xzfv - - nvim -c 'helptags ~/.local/share/nvim/site/pack/coc/start|q' - -when using source code of coc.nvim, you'll have to install -https://yarnpkg.com/ and run `yarn install` in project root of coc.nvim. - -============================================================================== -EXTENSIONS *coc-extensions* - -To provide LSP features of different filetypes, the user have to config -|coc-config-languageserver| or install coc extensions. - -Coc extensions are more powerful since they could contribute json schemes, -commands, and use middleware methods of languageserver to provide better -results. It's also possible to provide features that beyond LSP. - -Coc extensions are loaded from `"extensions"` folder inside -|coc#util#get_data_home()| and folders in 'runtimepath' when detected. - -Install extensions from git (not recommended):~ - -- Download the source code. -- In project root, install dependencies and compile the code by `yarn install` - (needed by most coc extensions). -- Add the project root to vim's runtimepath by `set runtimepath^=/path/to/project` - -Plugin manager like [vim-plug] can be used as well. - -Note: use coc extensions from source code requires install dependencies, which -may take huge disk usage. - - *coc-extensions-npm* -Install global extensions from npm (recommended):~ - -Use |:CocInstall| to install coc extensions from vim's command line. - -To make coc.nvim install extensions on startup, use |g:coc_global_extensions|. - -To use package manager other than npm (like `yarn` or `pnpm`), use -|coc-config-npm-binPath|. - -To customize npm registry for coc.nvim add `coc.nvim:registry` in your -`~/.npmrc`, like: -> - coc.nvim:registry=https://registry.mycompany.org/ -< -To customize extension folder, configure |g:coc_data_home|. - -Uninstall global extensions:~ - -Use |:CocUninstall|. - -Update global extensions:~ - -Use |:CocUpdate| or |:CocUpdateSync|. - -To update extensions automatically, config |coc-preferences-extensionUpdateCheck|. - -Manage extensions list:~ - -Use |coc-list-extensions| by `:CocList extensions` to open extensions list. -Use |CocAction('extensionStats')| to get list of extensions. - -Single file extensions:~ - -All Javascript files that ends with `.js` inside the folder -|g:coc_config_home| + '/coc-extensions' are considered as coc extensions, for -example: -> - const {window} = require('coc.nvim') - - exports.activate = context => { - window.showInformationMessage("message from extension") - } -< -============================================================================== -CONFIGURATION *coc-configuration* - -The configuration of coc.nvim is stored in file `coc-settings.json`. - -Configuration properties are contributed by coc.nvim itself and coc.nvim -extensions. See |coc-config| for builtin configurations. - -The configuration files are all in JSON format (with comment supported), it's -recommended to enable JSON completion and validation by install the `coc-json` -extension: > - - :CocInstall coc-json -< -Global configuration file:~ - -Command |:CocConfig| will open (create when necessary) a user settings -file in the folder returned by |coc#util#get_config_home()|. - -The user configuration can also be changed by API |coc#config()|. - -The global configuration file can be created in another directory by setting -|g:coc_config_home| in your vimrc like: > - - let g:coc_config_home = '/path/to/folder' - -Folder configuration file:~ - -To create a local configuration file for a specific workspace, use -|:CocLocalConfig| to create and open `.vim/coc-settings.json` in current -workspace folder. - -Folder configuration would overwrite user configuration. - - *coc-configuration-scope* -Configuration scope:~ - -A configuration could be one of three different configuration scopes: - -- "application" the configuration could only be changed in user configuration - file. - -- "resource" the configuration could be changed in user and workspace folder - configuration file. - -- "language-overridable" the configuration could be changed in user and - workspace folder configuration file, and can be use used in language scoped - configuration section like `[typescript][json]`. - -============================================================================== -FLOATING WINDOWS *coc-floating* - -Floating windows/popups are created by |api-floatwin| on neovim or |popupwin| -on vim. - *coc-floating-scroll* -Scroll floating windows:~ - -See |coc#float#has_scroll()| for example. - -Note: use |coc#pum#scroll()| for scroll popup menu. - - *coc-floating-close* -Close floating windows:~ - -To close all floating windows/popups use |coc#float#close_all()| or -|popup_clear()| on vim. Or you can use o on neovim which close all -split windows as well. - -To close single floating window/popup, use |coc#float#close()|. - - *coc-floating-focus* -Focus floating windows:~ - -On neovim, use w (or |(coc-float-jump)|) could focus a floating -window just created (if it's focusable). It's not allowed to focus popups on -vim, unless it's using terminal buffer. - - *coc-floating-config* -Configure floating windows:~ - -To set custom window options on floating window create, use autocmd -|CocOpenFloat| or |CocOpenFloatPrompt|. - -Related variables: - -- |g:coc_last_float_win| -- |g:coc_borderchars| -- |g:coc_border_joinchars| -- |g:coc_markdown_disabled_languages| - -Related highlight groups: - -- |CocFloating| For floating window background. -- |CocFloatDividingLine| For dividing lines. -- |CocMenuSel| For selected line. -- |CocUnderline| For active parts. - -To customize floating windows used by popup menu. Use configurations: - -- |coc-config-suggest-floatConfig| -- |coc-config-suggest-pumFloatConfig| - -For floating windows created around cursor, like diagnostics, hover and -signature use |coc-config-floatFactory-floatConfig| for common float -configurations. For further customization, use: - -- |coc-config-diagnostic-floatConfig| -- |coc-config-signature-floatConfig| -- |coc-config-hover-floatConfig| - -For customize dialog windows, use |coc-config-dialog|. -For customize notification windows, use |coc-config-notification|. - -============================================================================== -LSP FEATURES *coc-lsp* - -All features (except for telemetry) of LSP 3.16 are supported, checkout -the specification at -https://microsoft.github.io/language-server-protocol/specifications/specification-3-16/ - -LSP features only works with attached document, see |coc-document-attached|. - -To check exists providers of current buffer, use command -`:CocCommand document.checkBuffer` or |CocHasProvider()|. - -For historic reason, some features just works, but some are not. - -Features automatically work by default:~ - -- Trigger completion |coc-completion|. -- Diagnostics refresh |coc-diagnostics|. -- Pull diagnostics |coc-pullDiagnostics|. -- Trigger signature help |coc-signature|. -- Inlay hints |coc-inlayHint| - -Most features could be disabled/enabled by |coc-configuration| and some -vim variables. - -Features require enabled by configuration:~ - -- Semantic highlights |coc-semantic-highlights|. -- Document color highlights |coc-document-colors|. -- Code lens, |coc-code-lens| -- Linked editing, |coc-linked-editing.| -- Format on type, enabled by |coc-preferences-formatOnType| -- Format on save, enabled by |coc-preferences-formatOnSaveFiletypes|. - -Features requested by user:~ - -- Locations related (including definitions, references etc.) |coc-locations| -- Invoke code action |coc-code-actions|. -- Show call hierarchy tree |coc-callHierarchy|. -- Show type hierarchy tree |coc-typeHierarchy| -- Format, range format and on type format |coc-format|. -- Highlight same symbol ranges |coc-document-highlights|. -- Outline of document symbols |coc-outline| and |coc-list-symbols|. -- Show hover information |coc-hover|. -- Rename symbol under cursor |coc-rename|. -- Open link under cursor |coc-document-links|. -- Selection range |coc-selection-range| -- Create folding ranges |coc-fold|. - -For convenient, some actions have associated |coc-key-mappings| provided. -Prefer |CocAction()| for more options. - -Features triggered by languageserver:~ - -- Show message notification (use |coc-notification|). -- Show message request (use |coc-dialog-menu|). -- Log message notification (use `:CocCommand workspace.showOutput` to show - output). -- Show document request (opened by vim or your browser for url). -- Work done progress (use |coc-notification|). - -To make coc.nvim provide LSP features for your languages, checkout -https://github.com/neoclide/coc.nvim/wiki/Language-servers - -To debug issues with languageserver, checkout -https://github.com/neoclide/coc.nvim/wiki/Debug-language-server - ------------------------------------------------------------------------------- -DOCUMENT *coc-document* - -An associated document is created on buffer create, and disposed on buffer -unload. - -Attached document:~ - *coc-document-attached* - -An attached document means coc.nvim synchronize the lines of vim's buffer with -associated document automatically. - -Only attached documents are synchronized with language servers and therefore -LSP features could be provided for the attached buffer. - -The buffer may not be attached by following reasons: - -- The 'buftype' is neither nor 'acwrite', (could be bypassed by - |b:coc_force_attach|). -- Buffer variable |b:coc_enabled| is `0`. -- Byte length of buffer exceed |coc-preferences-maxFileSize|. -- Buffer is used for command line window. - -Use |CocAction('ensureDocument')| or `:CocCommand document.checkBuffer` to -check attached state of current buffer. - -Filetype map:~ - *coc-document-filetype* - -Some filetypes are mapped to others to match the languageId used by VSCode, -including: - -- javascript.jsx -> javascriptreact -- typescript.jsx -> typescriptreact -- typescript.tsx -> typescriptreact -- tex -> latex - -Use |g:coc_filetype_map| to create additional filetype maps. - -Use `:CocCommand document.echoFiletype` to echo mapped filetype of current -document. - -Note make sure use mapped filetypes for configurations that expect filetypes. - ------------------------------------------------------------------------------- -HOVER *coc-hover* - -Hover feature provide information at a given text document position, normally -include type information and documentation of current symbol. - -Hover functions:~ - -- ||CocAction('doHover')| Show hover information at cursor position. -- |CocAction('definitionHover')||| Show hover information with definition - context at cursor position. -- |CocAction('getHover')| Get hover documentations at cursor position. - - *coc-hover-example* -Hover key-mapping example:~ -> - nnoremap K :call ShowDocumentation() - " Show hover when provider exists, fallback to vim's builtin behavior. - function! ShowDocumentation() - if CocAction('hasProvider', 'hover') - call CocActionAsync('definitionHover') - else - call feedkeys('K', 'in') - endif - endfunction -< ------------------------------------------------------------------------------- -COMPLETION *coc-completion* - -The builtin completion of vim is no longer used, the default completion -behavior works like VSCode: - -- Completion is automatically triggered by default. -- Item selection is enabled by default, use |coc-config-suggest-noselect| to - disable default selection. -- When selection enabled and no preselect item exists, recent used item that - matched will be selected by default. -- Snippet and additional edits only work after confirm completion. -- 'completeopt' is not used and APIs of builtin popupmenu not work. - - *coc-completion-default* -Default Key-mappings:~ - -To make the completion work like builtin completion without configuration, -following key-mappings are used when the {lhs} is not mapped: - -Use , , and to navigate completion list: > - - inoremap coc#pum#visible() ? coc#pum#next(1) : "\" - inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" - inoremap coc#pum#visible() ? coc#pum#next(0) : "\" - inoremap coc#pum#visible() ? coc#pum#prev(0) : "\" -< -Use and to scroll: > - - inoremap coc#pum#visible() ? coc#pum#scroll(1) : "\" - inoremap coc#pum#visible() ? coc#pum#scroll(0) : "\" -< -Use and to cancel and confirm completion: > - - inoremap coc#pum#visible() ? coc#pum#cancel() : "\" - inoremap coc#pum#visible() ? coc#pum#confirm() : "\" - -Note: and are not remapped by coc.nvim. - - *coc-completion-variables* -Related variables:~ - -- Disable completion for buffer: |b:coc_suggest_disable| -- Disable specific sources for buffer: |b:coc_disabled_sources| -- Disable words for trigger completion: |b:coc_suggest_blacklist| -- Add additional keyword characters: |b:coc_additional_keywords| - - *coc-completion-functions* -Related functions:~ - -- Trigger completion with options: |coc#start()|. -- Trigger completion refresh: |coc#refresh()|. -- Select and confirm completion: |coc#_select_confirm()|. -- Check if customized popupmenu is visible: |coc#pum#visible()|. -- Select next complete item: |coc#pum#next()|. -- Select previous complete item: |coc#pum#prev()|. -- Cancel completion and reset trigger text: |coc#pum#cancel()|. -- Confirm completion: |coc#pum#confirm()|. -- Close the popupmenu only: |coc#pum#stop()|. -- Get information of the popupmenu: |coc#pum#info()|. -- Select specific complete item: |coc#pum#select()|. -- Insert word of selected item and finish completion: |coc#pum#insert()|. -- Insert one more character from current complete item: |coc#pum#one_more()|. -- Scroll popupmenu: |coc#pum#scroll()|. - - *coc-completion-customize* -Customize completion:~ - -Use |coc-config-suggest| to change behavior of completion. - -Use 'pumwidth' for configure minimal width of popupmenu and 'pumheight' -for maximum height. - -Related Highlight groups: - |CocPum| for highlight groups of customized pum. - |CocSymbol| for kind icons. - |CocMenuSel| for background highlight of selected item. - -Note: background, border and winblend are configured by -|coc-config-suggest-floatConfig|. - -Example user key-mappings:~ - *coc-completion-example* - -Note: use command `:verbose imap` to check current insert -key-mappings when your key-mappings not work. - -Use and to navigate completion list: > - - function! CheckBackspace() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~ '\s' - endfunction - - " Insert when previous text is space, refresh completion if not. - inoremap - \ coc#pum#visible() ? coc#pum#next(1): - \ CheckBackspace() ? "\" : - \ coc#refresh() - inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" - -Use to trigger completion: > - - if has('nvim') - inoremap coc#refresh() - else - inoremap coc#refresh() - endif -< -Use to confirm completion, use: > - - inoremap coc#pum#visible() ? coc#_select_confirm() : "\" -< -To make to confirm selection of selected complete item or notify coc.nvim -to format on enter, use: > - - inoremap coc#pum#visible() ? coc#_select_confirm() - \: "\u\\=coc#on_enter()\" - -Map for trigger completion, completion confirm, snippet expand and jump -like VSCode: > - - inoremap - \ coc#pum#visible() ? coc#_select_confirm() : - \ coc#expandableOrJumpable() ? - \ "\=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\" : - \ CheckBackspace() ? "\" : - \ coc#refresh() - - function! CheckBackspace() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' - endfunction - - let g:coc_snippet_next = '' -< -Note: the `coc-snippets` extension is required for this to work. - ------------------------------------------------------------------------------- -DIAGNOSTICS SUPPORT *coc-diagnostics* - -Diagnostics of coc.nvim are automatically refreshed to UI by default, checkout -|coc-config-diagnostic| for available configurations. - -Note most language servers only send diagnostics for opened buffers for -performance reason, some lint tools could provide diagnostics for all files in -workspace. - -Note pull diagnostics feature is added in LSP 3.17, which is not available -yet. - - *coc-diagnostics-refresh* -Changes on diagnostics refresh~ - -- Add highlights for diagnostic ranges and virtual text (when enabled on - neovim or vim >= 9.0.0067), see |coc-highlights-diagnostics|. -- Add diagnostic signs to 'signcolumn', use `set signcolumn=yes` to avoid - unnecessary UI refresh. -- Update variable |b:coc_diagnostic_info|. -- Refresh related |location-list| which was opened by |:CocDiagnostics|. - -Diagnostics are not refreshed when buffer is hidden, and refresh on insert -mode is disabled by default. - -Diagnostics highlights:~ - -See |coc-highlights-diagnostics|. - - *coc-diagnostics-toggle* -Enable and disable diagnostics~ - -Use |coc-config-diagnostic-enable| to toggle diagnostics feature. - -Use |CocAction('diagnosticToggle')| for enable/disable diagnostics feature. - -Use |CocAction('diagnosticToggleBuffer')| for enable/disable diagnostics of -current buffer. - -Show diagnostic messages~ - -Diagnostic messages would be automatically shown/hide when the diagnostics -under cursor position changed (use float window/popup when possible) by -default. - -To manually refresh diagnostics messages, use |(coc-diagnostic-info)| -and |CocAction('diagnosticPreview')|. - - *coc-diagnostics-jump* -Jump between diagnostics~ - -Use key-mappings: - - |(coc-diagnostic-next)| jump to diagnostic after cursor position. - |(coc-diagnostic-prev)| jump to diagnostic before cursor position. - |(coc-diagnostic-next-error)| jump to next error. - |(coc-diagnostic-prev-error)| jump to previous error. - -Check all diagnostics~ - -Use |coc-list-diagnostics| to open |coc-list| with all available diagnostics. - -Use API |CocAction('diagnosticList')| to get list of all diagnostics. - ------------------------------------------------------------------------------- -PULL DIAGNOSTICS SUPPORT *coc-pullDiagnostics* - -Diagnostics are pulled for visible documents when supported by languageserver. -Pull for workspace diagnostics is also enabled by default. - -Document diagnostics are pulled on change by default, and can be -configured to be pulled on save. - -Checkout |coc-config-pullDiagnostic| for related configurations. - ------------------------------------------------------------------------------- -LOCATIONS SUPPORT *coc-locations* - -There're different kinds of locations, including "definitions", "declarations", -"implementations", "typeDefinitions" and "references". - -Key-mappings for invoke locations request~ - -- |(coc-definition)| -- |(coc-declaration)| -- |(coc-implementation)| -- |(coc-type-definition)| -- |(coc-references)| -- |(coc-references-used)| - -Error will be shown when the buffer not attached |coc-document-attached|. -Message will be shown when no result found. - -Location jump behavior~ - -When there's only one location returned, the location is opened by command -specified by |coc-preferences-jumpCommand| ("edit" by default), context mark -is added by |m'|, so you can jump back previous location by . - -When multiple locations returned, |coc-list-location| is opened for preview -and other further actions. - -To use |coc-list-location| for single location as well, use -|coc-locations-api| (instead key-mappings provided by coc.nvim). - -To change default options of |coc-list-location| or use other plugin for -list of locations, see |g:coc_enable_locationlist|. - -To use vim's quickfix for locations, use configuration -|coc-preferences-useQuickfixForLocations|. - -To use vim's tag list for definitions, use |CocTagFunc()|. - - *coc-locations-api* -Related APIs~ - -- |CocAction('jumpDefinition')| Jump to definition locations. -- |CocAction('jumpDeclaration')| Jump to declaration locations. -- |CocAction('jumpImplementation')| Jump to implementation locations. -- |CocAction('jumpTypeDefinition')| Jump to type definition locations. -- |CocAction('jumpReferences')|| Jump to references. -- |CocAction('jumpUsed')| Jump to references without declarations. -- |CocAction('definitions')| Get definition list. -- |CocAction('declarations')| Get declaration list. -- |CocAction('implementations')| Get implementation list. -- |CocAction('typeDefinitions')| Get type definition list. -- |CocAction('references')| Get reference list. - -Send custom locations request to languageserver: - -- |CocLocations()| -- |CocLocationsAsync()| - ------------------------------------------------------------------------------- -RENAME *coc-rename* - -Rename provides workspace-wide rename of a symbol. Workspace edit -|coc-workspace-edit| is requested and applied to related buffers when -confirmed. - -Check if current buffer has rename provider with -`:echo CocAction('hasProvider', 'rename')` - -Rename key-mappings:~ - -- |(coc-rename)| - -Rename functions:~ - -- |CocAction('rename')| Rename the symbol under the cursor. -- |CocAction('refactor')| Open refactor buffer for all references (including - definitions), recommended for function signature refactor. - -Rename local variable:~ - -Use command `:CocCommand document.renameCurrentWord` which uses |coc-cursors| -to edit multiple locations at the same time and defaults to word extraction -when rename provider doesn't exist. - -Rename configuration:~ - -Use |coc-preferences-renameFillCurrent| to enable/disable populating prompt -window with current variable name. - ------------------------------------------------------------------------------- -SIGNATURE HELP *coc-signature* - -Signature help for functions is shown automatically when user -types trigger characters defined by the provider, which will use floating -window/popup to show relevant documentation. - -Use |CocAction('showSignatureHelp')| to trigger signature help manually. - -Note error will not be thrown when provider does not exist or nothing is returned -by languageserver, use `echo CocAction('hasProvider', 'signature')` to check -if a signature help provider exists. - -Use |coc-config-signature| to change default signature help behavior. - -|CocFloatActive| is used to highlight activated parameter part. - ------------------------------------------------------------------------------- -INLAY HINT *coc-inlayHint* - -Inlay hint is enabled for all filetypes by default. Inlay hint uses virtual -text which requires neovim >= 0.5.0 or vim >= 9.0.0067. - -Note: you may need configure extension or languageserver to make inlay hint -works. - -To temporarily toggle inlay hint of current buffer, use command -`:CocCommand document.toggleInlayHint` - -Change highlight group:~ - -|CocInlayHint| -|CocInlayHintType| -|CocInlayHintParameter| - -Configure inlay hint support:~ - -|coc-config-inlayHint| - ------------------------------------------------------------------------------- -FORMAT *coc-format* - -Some tools may reload buffer from disk file during format, coc.nvim only -apply `TextEdit[]` to the document. - -Don't be confused with vim's indent feature, configure/fix the 'indentexpr' of -your buffer if the indent is wrong after insert new line. - - *coc-format-options* -Format options:~ - -Buffer options that affect document format: 'eol', 'shiftwidth' and -'expandtab'. - -- |b:coc_trim_trailing_whitespace| Trim trailing whitespace on a line. -- |b:coc_trim_final_newlines| Trim all newlines after the final newline at the - end of the file. - -Those options are converted to `DocumentFormattingOptions` and transferred to -languageservers before format. The languageservers may only support some of -those options. - - *coc-format-document* -Format full document:~ - -Use |CocAction('format')|, you can create a command like: > - - command! -nargs=0 Format :call CocActionAsync('format') -< -to format current buffer. - - *coc-format-ontype* -Format on type:~ - -Format on type is disabled by default, could be enabled by configurations: - -- |coc-preferences-formatOnType| -- |coc-preferences-formatOnTypeFiletypes| - -Use `:CocCommand document.checkBuffer` to check if `formatOnType` provider -exists for current buffer. - -To format on , create key-mapping of that uses |coc#on_enter()|. - -If you don't like the behavior on type bracket characters, configure -|coc-preferences-bracketEnterImprove||. - - *coc-format-selected* -Format selected code:~ - -Use 'formatexpr' for specific filetypes: > - - autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') - -So that |gq| could works for format range of lines. -> -Setup visual mode and operator key-mappings: > - - xmap f (coc-format-selected) - nmap f (coc-format-selected) -< - *coc-format-onsave* -Format on save:~ - -Use configuration |coc-preferences-formatOnSaveFiletypes|. - -Or create |BufWritePre| autocmd like: > - - autocmd BufWritePre * call CocAction('format') -< -Note the operation have to synchronized, avoid use |CocActionAsync()|. -Note to skip the autocmd, use `:noa w` to save the buffer. - -The operation on save will be timeout after 0.5s by default, configured by -|coc-preferences-willSaveHandlerTimeout| - ------------------------------------------------------------------------------- -CODE ACTION *coc-code-actions* - -Code actions are used for ask languageserver to provide specific kind code -changes. - -There're different kinds of code actions: - -- `quickfix` used for fix diagnostic(s). -- `refactor` used for code refactor. -- `source` code actions apply to the entire file. -- `organizeImport` organize import statements of current document. - -Key-mappings for code actions:~ - -- |(coc-fix-current)| Invoke quickfix action at current line if any. -- |(coc-codeaction-cursor)| Choose code actions at cursor position. -- |(coc-codeaction-line)| Choose code actions at current line. -- |(coc-codeaction)| Choose code actions of current file. -- |(coc-codeaction-selected)| Choose code actions from selected range. - -Except for |(coc-fix-current)| which invoke code action directly, -|coc-dialog-menu| would be shown for pick specific code action. - -To invoke organize import action, use command like: -> - command! -nargs=0 OR :CocCommand editor.action.organizeImport - -Error would be shown when organize import code action not found. - -Related APIs~ - -- |CocAction('codeActions')| -- |CocAction('organizeImport')| -- |CocAction('fixAll')| -- |CocAction('quickfixes')| -- |CocAction('doCodeAction')| -- |CocAction('doQuickfix')| -- |CocAction('codeActionRange')| - ------------------------------------------------------------------------------- -DOCUMENT HIGHLIGHTS *coc-document-highlights* - -Document highlights is used for highlight same symbols of current document -under cursor. - -To enable highlight on CursorHold, create an autocmd like this: > - - autocmd CursorHold * call CocActionAsync('highlight') -< -Checkout |coc-highlights-document| for related highlight groups. - -Note error will not be thrown when provider not exists or nothing returned -from languageserver with |CocAction('highlight')| - -Install `coc-highlight` extension if you want to highlight same words under -cursor without languageserver support. - -To jump between previous/next symbol position, use -`:CocCommand document.jumpToPrevSymbol` and -`:CocCommand document.jumpToNextSymbol` - ------------------------------------------------------------------------------- -DOCUMENT COLORS *coc-document-colors* - -Document colors added color highlights to vim buffers. To enable document -color highlights, use ||coc-config-colors-filetypes||. - -Note: the highlights define gui colors only, make use you have 'termguicolors' -enabled (and your terminal support gui colors) if you're not using gvim. - -To pick a color from system color picker, use |CocAction('pickColor')| or -choose `editor.action.pickColor` from |:CocCommand|. - -Note: may not work on your system. - -To change color presentation, use |CocAction('colorPresentation')| or choose -`editor.action.colorPresentation` from |:CocCommand|. - -To highlights colors without languageservers, install -https://github.com/neoclide/coc-highlight - -============================================================================== -DOCUMENT LINKS *coc-document-links* - -Check if current buffer have documentLink provider by -`:echo CocAction('hasProvider', 'documentLink')` - -Use |coc-list-links| to manage list of links in current document. - -Document link functions:~ - -- |CocAction('openLink')| Open link under cursor. -- |CocAction('links')| Get link list of current buffer. - ------------------------------------------------------------------------------- -SNIPPETS SUPPORT *coc-snippets* - -Snippets engine of coc.nvim support both VSCode snippets and ultisnips -snippets format. - -The complete item with snippet format has label ends with -|coc-config-suggest-snippetIndicator| (`~` by default). - -Select the complete item and confirm the completion by |coc#pum#confirm()| or -|coc#_select_confirm()| to expand the snippet of current selected complete -ttem. - -Jump snippet placeholders:~ - -|g:coc_snippet_next| and |g:coc_snippet_prev| are used to jump placeholders on -both select mode and insert mode, which defaults to and . Buffer -key-mappings are created on snippet activate, and removed on snippet -deactivate. - -Deactivate snippet session:~ - -A snippet session would be deactivated under the following conditions: - -- |InsertEnter| triggered outside snippet. -- Jump to final placeholder. -- Content change detected after snippet. -- Content changed in a snippet outside placeholder (except for deletion of - plain text). - -To load and expand custom snippets, install `coc-snippets` extension is -recommended. - -Related configurations:~ - -- |g:coc_snippet_prev| -- |g:coc_snippet_next| -- |g:coc_selectmode_mapping| -- |coc-config-suggest-snippetIndicator| -- |coc-config-suggest-preferCompleteThanJumpPlaceholder| -- |coc-config-snippet-highlight| -- |coc-config-snippet-statusText| -- |coc-config-snippet-nextPlaceholderOnDelete| - -Related functions:~ - -- |coc#snippet#next()| -- |coc#snippet#prev()| -- |coc#expandable()| -- |coc#jumpable()| -- |coc#expandableOrJumpable()| - -Related variables, highlights and autocmds:~ - -- |b:coc_snippet_active| Check if snippet session is activated. -- |CocSnippetVisual| For highlight of current placeholders. -- |CocJumpPlaceholder| AutocmdS triggered after placeholder jump. - ------------------------------------------------------------------------------- -WORKSPACE SUPPORT *coc-workspace* - - *coc-workspace-folders* -Workspace folders~ - -Unlike VSCode which prompt you to open folders, workspace folders of coc.nvim -are resolved from filepath after document attached. - -A list of file/folder names is used for resolve workspace folder, the patterns -could comes from: - -- |b:coc_root_patterns| -- `rootPatterns` field of configured language server. -- `rootPatterns` contributions from coc extensions. -- |coc-preferences-rootPatterns| - -Workspace folder is resolved from cwd of vim first and then from top directory -to the parent directory of current filepath, when workspace folder not -resolved, current working directory is used if it's parent folder of current -buffer. Configurations are provided to change the default behavior: - -- |coc-config-workspace-ignoredFiletypes| -- |coc-config-workspace-ignoredFolders| -- |coc-config-workspace-bottomUpFiletypes| -- |coc-config-workspace-workspaceFolderCheckCwd| -- |coc-config-workspace-workspaceFolderFallbackCwd| - -Note for performance reason, user's home directory would never considered as -workspace folder, which also means the languageserver that requires workspace -folder may not work when you start vim from home directory. - -To preserve workspace folders across vim session, |g:WorkspaceFolders| is -provided. - -To manage current workspace folders, use |coc-list-folders| - -To get related root patterns of current buffer, use |coc#util#root_patterns()| - -Use `:CocCommand workspace.workspaceFolders` to echo current workspaceFolders. - - *coc-workspace-edits* -Workspace edit~ - -Workspace edit is used to apply changes for multiple buffers(and files), the -edit could includes document edits and file operations (including file create, -file/directory delete and file/directory rename). - -When the edit failed to apply, coc.nvim will revert the changes (including -document edits and file operations) that previous made. - -Files not loaded would be loaded by `tab drop` command, configured by -|coc-config-workspace-openResourceCommand|. - -To undo and redo workspace edit just applied, use command -`:CocCommand workspace.undo` and `:CocCommand workspace.redo` - -To inspect previous workspace edit, use command -`:CocCommand workspace.inspectEdit`, in opened buffer, use for jump to -change position under cursor. - ------------------------------------------------------------------------------- -CURSORS SUPPORT *coc-cursors* - -Multiple cursors supported is added to allow edit multiple locations at once. - -Cursors session could be started by following ways: - -- Use command `:CocCommand document.renameCurrentWord` to rename variable - under cursor. -- Use |(coc-refactor)| to open refactor buffer. -- Use |:CocSearch| to open searched locations. -- Use cursors related key-mappings to add text range, including - |(coc-cursors-operator)|, |(coc-cursors-word)|, - |(coc-cursors-position)| and |(coc-cursors-range)| -- Ranges added by command `editor.action.addRanges` from coc extensions. - -Default key-mappings when cursors activated: - -- cancel cursors session. -- jump to next cursors range. -- jump to previous cursors range. - -Use |coc-config-cursors| to change cursors related key-mappings. -Use highlight group |CocCursorRange| to change default range highlight. -Use |b:coc_cursors_activated| to check if cursors session is activated. - ------------------------------------------------------------------------------- -SYMBOLS OUTLINE *coc-outline* - -Outline is a split window with current document symbols rendered as -|coc-tree|. - -To show and hide outline of current window, use |CocAction('showOutline')| and -|CocAction('hideOutline')|. - -Outline view has Window variable `cocViewId` set to `OUTLINE`. - -Following outline features are supported: -- Start fuzzy filter by |coc-config-tree-key-activeFilter|. -- Automatic update after document change. -- Automatic reload when buffer in current window changed. -- Automatic follow cursor position by default. -- Different filter modes that can be changed on the fly - |coc-config-outline-switchSortKey|. -- Enable auto preview by |coc-config-outline-togglePreviewKey|. - -Note: outline would try to reload document symbols after 500ms when provider -not registered, which avoid the necessary to check provider existence. - -Checkout |coc-config-tree| and |coc-config-outline| for available -configurations. - -Checkout |CocTree| and |CocSymbol| for customize highlights. - -Use configuration `"suggest.completionItemKindLabels"` for custom icons. - -To show outline for each tab automatically, use |autocmd|: -> - autocmd VimEnter,Tabnew * - \ if empty(&buftype) | call CocActionAsync('showOutline', 1) | endif -< -To close outline when it's the last window automatically, use -|autocmd| like: -> - autocmd BufEnter * call CheckOutline() - function! CheckOutline() abort - if &filetype ==# 'coctree' && winnr('$') == 1 - if tabpagenr('$') != 1 - close - else - bdelete - endif - endif - endfunction -< -Create a key-mapping to toggle outline, like: -> - nnoremap o :call ToggleOutline() - function! ToggleOutline() abort - let winid = coc#window#find('cocViewId', 'OUTLINE') - if winid == -1 - call CocActionAsync('showOutline', 1) - else - call coc#window#close(winid) - endif - endfunction -< ------------------------------------------------------------------------------- -CALL HIERARCHY *coc-callHierarchy* - -A call hierarchy is a split |coc-tree| window with locations for incoming or -outgoing calls of function under cursor position. - -Call hierarchy window is opened by |CocAction('showIncomingCalls')| and -|CocAction('showOutgoingCalls')|. - -Call hierarchy is configured by |CocSymbol|, |coc-config-callHierarchy| and -|coc-config-tree|. - -Related ranges are highlighted with |CocSelectedRange| highlight group in -opened buffer. - -|coc-dialog-menu| could be invoked by |coc-config-tree-key-actions| (default -to ). Available actions: - -- Dismiss. -- Open in new tab. -- Show Incoming Calls. -- Show Outgoing Calls. - -Use in call hierarchy tree to open location in original window. - ------------------------------------------------------------------------------- -TYPE HIERARCHY *coc-typeHierarchy* - -A type hierarchy is a split |coc-tree| window with locations for super types -or sub types from types at current position. - -Type hierarchy window is opened by |CocAction('showSuperTypes')| and -|CocAction('showSubTypes')|. - -Type hierarchy is configured by |CocSymbol|, |coc-config-typeHierarchy| and -|coc-config-tree|. - -Actions are the same as |coc-callHierarchy|. - ------------------------------------------------------------------------------- -SEMANTIC HIGHLIGHTS *coc-semantic-highlights* - -Semantic tokens are used to add additional color information to a buffer that -depends on language specific symbol information. - -The feature requires vim >= 8.1.1719 or neovim >= 0.5.0. - -Use |coc-config-semanticTokens-enable| to enable semantic tokens highlights. - -Use `:CocCommand semanticTokens.checkCurrent` to check semantic highlight -information with current buffer. - -To create custom highlights for symbol under cursor, follow these steps: - -- Inspect semantic token by -> - :CocCommand semanticTokens.inspect -< - to check token type and token modifiers with current symbol. - -- Create new highlight group by |highlight|, for example: -> - :hi link CocSemDeclarationVariable MoreMsg -< -- Refresh semantic highlight of current buffer by: -> - :CocCommand semanticTokens.refreshCurrent -< -See |CocSem| to customize semantic token highlight groups. - -See |coc-config-semanticTokens| for related configurations. - ------------------------------------------------------------------------------- -FOLD *coc-fold* - -Check if current buffer have fold provider by -`:echo CocAction('hasProvider', 'foldingRange')` - -Use |CocAction('fold')| to create folds by request the languageserver and -create manual folds on current window. - ------------------------------------------------------------------------------- -SELECTION RANGE *coc-selection-range* - -Select range forward or backward at cursor position. - -Check if current buffer have selection range provider by -`:echo CocAction('hasProvider', 'selectionRange')` - -Selection range key-mappings:~ - -- |(coc-range-select)| Select range forward. -- |(coc-range-select-backward)| Select range backward. - -Selection range function:~ - -- |CocAction('rangeSelect')| Visual select previous or next selection range - ------------------------------------------------------------------------------- -CODE LENS *coc-code-lens* - -Code lens feature shows additional information above or after specific lines. -Only works on neovim by now. - -Check if current buffer have code lens provider by -`:echo CocAction('hasProvider', 'codeLens')` - -Code lens are not shown by default, use |coc-config-codeLens-enable| to enable, -you may also need enable code lens by configure extension or configured -languageserver. - -Code lens are automatically requested on buffer create/change, checkout -|coc-config-codeLens| for available configurations. - ------------------------------------------------------------------------------- -LINKED EDITING *coc-linked-editing* - -Linked editing feature enables editing multiple linked ranges at the same time, -for example: html tags. The linked editing ranges would be highlighted with -|CocLinkedEditing| when activated. - -Check if current buffer have linked editing provider by -`:echo CocAction('hasProvider', 'linkedEditing')` - -Linked editing feature is disabled by default, use -|coc-preferences-enableLinkedEditing| to enable. - -============================================================================== -INTERFACE *coc-interface* - ------------------------------------------------------------------------------- - -Key mappings *coc-key-mappings* - -There're some cases that local key-mappings are enabled for current buffer. - - Snippet jump key-mappings when snippet is activated: - |g:coc_snippet_prev| and |g:coc_snippet_next|. - - Cursor jump and cancel key-mappings when cursors is activated - |coc-config-cursors|. - - Dialog key-mappings for confirm and cancel dialog window - |coc-config-dialog|. - - Key-mappings for |CocList| buffer: |coc-list-mappings|. - -Note: Use |:verbose| command to check key-mappings that taking effect. - -Note: Use 'noremap' with will make the key-mapping not work at all. - -Note: key-mappings are provided for convenient, use |CocActionAsync()| or -|CocAction()| for more options. - -Normal mode key-mappings:~ - -*(coc-diagnostic-info)* Show diagnostic message of current position by -invoke |CocAction('diagnosticInfo')| - -*(coc-diagnostic-next)* Jump to next diagnostic position after current -cursor position. - -*(coc-diagnostic-prev)* Jump to previous diagnostic position before -current cursor position. - -*(coc-diagnostic-next-error)* Jump to next diagnostic error position. - -*(coc-diagnostic-prev-error)* Jump to previous diagnostic error position. - -*(coc-definition)* Jump to definition(s) of current symbol by invoke -|CocAction('jumpDefinition')| - -*(coc-declaration)* Jump to declaration(s) of current symbol by invoke -|CocAction('jumpDeclaration')| - -*(coc-implementation)* Jump to implementation(s) of current symbol by -invoke |CocAction('jumpImplementation')| - -*(coc-type-definition)* Jump to type definition(s) of current symbol by -invoke |CocAction('jumpTypeDefinition')| - -*(coc-references)* Jump to references of current symbol by invoke -|CocAction('jumpReferences')| - -*(coc-references-used)* Jump to references of current symbol exclude -declarations. - -*(coc-format-selected)* - - Format selected range, works on both |visual-mode| and |normal-mode|, - when used in normal mode, the selection works on the motion object. - - For example: > - - vmap p (coc-format-selected) - nmap p (coc-format-selected) -< - makes `p` format the visually selected range, and you can use - `pap` to format a paragraph. - -*(coc-format)* Format the whole buffer by invoke |CocAction('format')| -*(coc-rename)* Rename symbol under cursor to a new word by invoke -|CocAction('rename')| - -*(coc-refactor)* Open refactor window for refactor of current symbol by -invoke |CocAction('refactor')| - -*(coc-command-repeat)* Repeat latest |CocCommand|. - -*(coc-codeaction)* Get and run code action(s) for current file, use -|coc-codeaction-cursor| for same behavior as VSCode. - -*(coc-codeaction-line)* Get and run code action(s) for current line. - -*(coc-codeaction-cursor)* Get and run code action(s) using empty range -at current cursor. - -*(coc-codeaction-selected)* Get and run code action(s) with the selected -region. Works on both |visual-mode| and |normal-mode|. - -*(coc-openlink)* Open link under cursor by use |CocAction('openlink')|. - -*(coc-codelens-action)* Do command from codeLens of current line. - -*(coc-fix-current)* Try first quickfix action for diagnostics of current -line. - -*(coc-float-hide)* Hide all float windows/popups created by coc.nvim. - -*(coc-float-jump)* Jump to first float window (neovim only), use -|CTRL-W_p| for jump to previous window. - -*(coc-range-select)* - - Select next selection range. - Works on both |visual-mode| and |normal-mode|. - - Note: requires selection ranges feature of language server. - -*(coc-funcobj-i)* - - Select inside function. Recommend mapping: - Works on both |visual-mode| and |normal-mode|. - > - xmap if (coc-funcobj-i) - omap if (coc-funcobj-i) -< - Note: Requires 'textDocument.documentSymbol' support from the language - server. - -*(coc-funcobj-a)* - - Select around function. Works on both |visual-mode| and - |normal-mode|. Recommended mapping: -> - xmap af (coc-funcobj-a) - omap af (coc-funcobj-a) -< - Note: Requires 'textDocument.documentSymbol' support from the language - server. - -*(coc-classobj-i)* - - Select inside class/struct/interface. Works on both |visual-mode| and - |normal-mode|. Recommended mapping: -> - xmap ic (coc-classobj-i) - omap ic (coc-classobj-i) -< - Note: Requires 'textDocument.documentSymbol' support from the language - server. - -*(coc-classobj-a)* - - Select around class/struct/interface. Works on both |visual-mode| and - |normal-mode|. Recommended mapping: -> - xmap ac (coc-classobj-a) - omap ac (coc-classobj-a) -< - Note: Requires 'textDocument.documentSymbol' support from the language - server. - - -*(coc-cursors-operator)* Add text to cursors session by motion object. - -*(coc-cursors-word)* Add current word to cursors session. - -*(coc-cursors-position)* Add current position as empty range to cursors -session. - -Visual mode key-mappings:~ - -*(coc-range-select-backward)* - - Select previous selection range. - - Note: requires selection ranges feature of language server, like: - coc-tsserver, coc-python - -*(coc-cursors-range)* Add selection to cursors session. - ------------------------------------------------------------------------------- -VARIABLES *coc-variables* - -User defined variables:~ - ------------------------------------------------------------------------------- - -Buffer variables *coc-buffer-variables* - -b:coc_enabled *b:coc_enabled* - - Set to `0` on buffer create if you don't want coc.nvim receive content - from buffer. Normally used with |BufAdd| autocmd, example: -> - " Disable file with size > 1MB - autocmd BufAdd * if getfsize(expand('')) > 1024*1024 | - \ let b:coc_enabled=0 | - \ endif -< -b:coc_force_attach *b:coc_force_attach* - - When is `1`, attach the buffer without check the 'buftype' option. - Should be set on buffer create. - -b:coc_root_patterns *b:coc_root_patterns* - - Root patterns used for resolving workspaceFolder for - the current file, will be used instead of - `"coc.preferences.rootPatterns"` setting. Example: > - - autocmd FileType python let b:coc_root_patterns = - \ ['.git', '.env'] -< - -b:coc_suggest_disable *b:coc_suggest_disable* - - Disable completion support of current buffer. Example: > - - " Disable completion for python - autocmd FileType python let b:coc_suggest_disable = 1 - -b:coc_disabled_sources *b:coc_disabled_sources* - - Disabled completion sources of current buffer. Example: -> - let b:coc_disabled_sources = ['around', 'buffer', 'file'] -< -b:coc_diagnostic_disable *b:coc_diagnostic_disable* - - Disable diagnostic support of current buffer. - -b:coc_suggest_blacklist *b:coc_suggest_blacklist* - - List of input words for which completion should not be triggered. - Example: > - - " Disable completion for 'end' in Lua files - autocmd FileType lua let b:coc_suggest_blacklist = ["end"] - -b:coc_additional_keywords *b:coc_additional_keywords* - - Addition keyword characters for generate keywords. Example: > - - " Add keyword characters for CSS - autocmd FileType css let b:coc_additional_keywords = ["-"] - -b:coc_trim_trailing_whitespace *b:coc_trim_trailing_whitespace* - - Trim trailing whitespace on a line, default `0`. - Use by "FormattingOptions" send to the server. - -b:coc_trim_final_newlines *b:coc_trim_final_newlines* - - Trim all newlines after the final newline at the end of the file. - Use by "FormattingOptions" send to the server. - - Other buffer options that affect document format: 'eol', 'shiftwidth' - and 'expandtab'. - - Note: language server may not respect format options. - ------------------------------------------------------------------------------- - -Global variables *coc-global-variables* - -g:coc_disable_startup_warning *g:coc_disable_startup_warning* - - Disable possible warning on startup for old vim/node version. - - Default: 0 - -g:coc_disable_uncaught_error *g:coc_disable_uncaught_error* - - Disable uncaught error messages from node process of coc.nvim. - - Default: 0 - -g:coc_text_prop_offset *g:coc_text_prop_offset* - - Start |textprop| id offset of highlight namespaces on vim, change to - other value to avoid conflict. - - Default: 1000 - -g:coc_channel_timeout *g:coc_channel_timeout* - - Channel timeout in seconds for request to node client. - - Default: 30 - -g:coc_disable_transparent_cursor *g:coc_disable_transparent_cursor* - - Disable transparent cursor when CocList is activated. - Set it to `1` if you have issue with transparent - cursor. - - Default: 0 - -g:coc_start_at_startup *g:coc_start_at_startup* - - Start coc service on startup, use |CocStart| to start server when you - set it to 0. - - Default: 1 - -g:coc_global_extensions *g:coc_global_extensions* - - Global extension names to install when they aren't installed. -> - let g:coc_global_extensions = ['coc-json', 'coc-git'] -< - Note: coc.nvim will try to install extensions that are not installed - in this list after initialization. - -g:coc_uri_prefix_replace_patterns *g:coc_uri_prefix_replace_patterns* - - This map defines URI prefix replacements. This is useful in the case - that an LSP requires code to adhere to a particular directory - structure. For example, `/Users/myUser/workspace` can be mapped to - `/home/myUser/workspace`. -> - let g:coc_uri_prefix_replace_patterns = {'/Users': '/home'} -< -g:coc_enable_locationlist *g:coc_enable_locationlist* - - Use location list of |CocList| when jump to locations. - - Set it to 0 when you need customize behavior of location jump by use - |CocLocationsChange| and |g:coc_jump_locations| - - If you want use vim's quickfix list instead, add - `"coc.preferences.useQuickfixForLocations": true` in your - configuration file, this configuration would be ignored and no autocmd - triggered. - - Default: 1 - -g:coc_snippet_next *g:coc_snippet_next* - - Trigger key for going to the next snippet position, applied in insert - and select mode. - - Only works when snippet session is activated. - - Default: - -g:coc_snippet_prev *g:coc_snippet_prev* - - Trigger key for going to the previous snippet position, applied in - insert and select mode. - - Only works when snippet session is activated. - - Default: - -g:coc_filetype_map *g:coc_filetype_map* - - Map for document filetypes so the server could handle current document - as another filetype, example: > - - let g:coc_filetype_map = { - \ 'html.swig': 'html', - \ 'wxss': 'css', - \ } -< - Default: {} - - See |coc-document-filetype| for details. - -g:coc_selectmode_mapping *g:coc_selectmode_mapping* - - Add key mappings for making snippet select mode easier. > - - snoremap c - snoremap c - snoremap c - snoremap "_c -< - Default: 1 - -g:coc_node_path *g:coc_node_path* - - Path to node executable to start coc service, example: > - - let g:coc_node_path = '/usr/local/opt/node@12/bin/node' -< - Use this when coc has problems with your system node, - - Note: you can use `~` as home directory. - -g:coc_node_args *g:coc_node_args* - - Arguments passed to node when starting coc service from source code. - - Useful for starting coc in debug mode, example: > -> - let g:coc_node_args = ['--nolazy', '--inspect-brk=6045'] -< - Default: [] - -g:coc_status_error_sign *g:coc_status_error_sign* - - Error character used for statusline, default: `E` - -g:coc_status_warning_sign *g:coc_status_warning_sign* - - Warning character used for statusline, default: `W` - -g:coc_quickfix_open_command *g:coc_quickfix_open_command* - - Command used for open quickfix list. To jump fist position after - quickfix list opend, you can use: -> - let g:coc_quickfix_open_command = 'copen|cfirst' -< - Default: |copen| - -g:node_client_debug *g:node_client_debug* - - Enable debug mode of node client for check rpc messages between vim - and coc.nvim. Use environment variable $NODE_CLIENT_LOG_FILE to set - the log file or get the log file after coc.nvim started. - To open the log file, use command: > - - :call coc#client#open_log() -< - Default: `0` - -g:coc_config_home *g:coc_config_home* - - Configure the directory which will be used to look for - user's `coc-settings.json`, default: - - Windows: `~/AppData/Local/nvim` - Other: `~/.config/nvim` - -g:coc_data_home *g:coc_data_home* - - Configure the directory which will be used to for data - files(extensions, MRU and so on), default: - - Windows: `~/AppData/Local/coc` - Other: `~/.config/coc` - -g:coc_terminal_height *g:coc_terminal_height* - - Height of terminal window, default `8`. - -g:coc_markdown_disabled_languages *g:coc_markdown_disabled_languages* - - Filetype list that should be disabled for highlight in markdown block, - Example: > - - let g:coc_markdown_disabled_languages = ['html'] - -g:coc_highlight_maximum_count *g:coc_highlight_maximum_count* - - When highlight items exceed maximum count, highlight items will be - grouped and added by using |timer_start| for better user experience. - - Default `100` - -g:coc_default_semantic_highlight_groups *g:coc_default_semantic_highlight_groups* - - Create default semantic highlight groups for |coc-semantic-highlights| - - Default: `1` - -g:coc_max_treeview_width *g:coc_max_treeview_width* - - Maximum width of tree view when adjusted by auto width. - - Default: `40` - -g:coc_borderchars *g:coc_borderchars* - - Border characters used by border window, default to: -> - ['─', '│', '─', '│', '┌', '┐', '┘', '└'] -< - Note: you may need special font like Nerd font to show them. - -g:coc_border_joinchars *g:coc_border_joinchars* - - Border join characters used by float window/popup, default to: -> - ['┬', '┤', '┴', '├'] -< - Note: you may need special font like Nerd font to show them. - -g:coc_prompt_win_width *g:coc_prompt_win_width* - - Width of input prompt window, default `32`. - - *g:coc_notify* -g:coc_notify_error_icon *g:coc_notify_error_icon* - - Error icon for notification, default to:  - -g:coc_notify_warning_icon *g:coc_notify_warning_icon* - - Warning icon for notification, default to: ⚠ - -g:coc_notify_info_icon *g:coc_notify_info_icon* - - Info icon for notification, default to:  - ------------------------------------------------------------------------------- - -Some variables are provided by coc.nvim. - - -g:WorkspaceFolders *g:WorkspaceFolders* - - Current workspace folders, used for restoring from a session file, add - `set sessionoptions+=globals` to vimrc for restoring globals on - session load. - -g:coc_jump_locations *g:coc_jump_locations* - - This variable would be set to jump locations when the - |CocLocationsChange| autocmd is fired. - - Each location item contains: - - 'filename': full file path. - 'lnum': line number (1 based). - 'col': column number(1 based). - 'text': line content of location. - -g:coc_process_pid *g:coc_process_pid* - - Process pid of coc.nvim service. If your vim doesn't kill coc.nvim - process on exit, use: -> - autocmd VimLeavePre * if get(g:, 'coc_process_pid', 0) - \ | call system('kill -9 '.g:coc_process_pid) | endif -< - in your vimrc. - -g:coc_service_initialized *g:coc_service_initialized* - - Is `1` when coc.nvim initialized, used with autocmd |CocNvimInit|. - -g:coc_status *g:coc_status* - - Status string contributed by coc.nvim and extensions, used for status - line. - -g:coc_last_float_win *g:coc_last_float_win* - - Window id of latest created float/popup window. - -g:coc_last_hover_message *g:coc_last_hover_message* - - Last message echoed from `doHover`, can be used in statusline. - - Note: not used when floating or preview window used for `doHover`. - -b:coc_snippet_active *b:coc_snippet_active* - - Is `1` when snippet session is activated, use |coc#jumpable| to check - if it's possible to jump placeholder. - -b:coc_diagnostic_info *b:coc_diagnostic_info* - - Diagnostic information of current buffer, the format would look like: - - `{'error': 0, 'warning': 0, 'information': 0, 'hint':0}` - - can be used to customize statusline. See |coc-status|. - -b:coc_current_function *b:coc_current_function* - - Function string that current cursor in. - - Set `"coc.preferences.currentFunctionSymbolAutoUpdate": true` - in coc-settings.json to update it on CursorHold. - -b:coc_cursors_activated *b:coc_cursors_activated* - - Use expression `get(b:, 'coc_cursors_activated',0)` to check if - cursors session is activated for current buffer. - ------------------------------------------------------------------------------- -FUNCTIONS *coc-functions* - -Some functions only work after the coc.nvim has been initialized. - -To run a function on startup, use an autocmd like: > - - autocmd User CocNvimInit call CocAction('runCommand', - \ 'tsserver.watchBuild') -< -coc#start([{option}]) *coc#start()* - - Start completion with optional {option}. Option could contains: - - - `source` specific completion source name. - - Example: > - - inoremap =coc#start({'source': 'word'}) -< - Use `:CocList sources` to get available sources. - -coc#refresh() *coc#refresh()* - - Start or refresh completion at current cursor position, bind this to - 'imap' to trigger completion, example: > - - if has('nvim') - inoremap coc#refresh() - else - inoremap coc#refresh() - endif - -coc#_select_confirm() *coc#_select_confirm()* - - Select first completion item if no completion item is selected, then - confirm the completion. - -coc#config({section}, {value}) *coc#config()* - - Change user configuration, overwrite configurations from - user config file and default values. Example: > - - call coc#config('coc.preferences', { - \ 'willSaveHandlerTimeout': 1000, - \}) - call coc#config('languageserver', { - \ 'ccls': { - \ "command": "ccls", - \ "trace.server": "verbose", - \ "filetypes": ["c", "cpp", "objc", "objcpp"] - \ } - \}) -< - - Note: this function can be called multiple times. - Note: this function can be called before coc.nvim started. - Note: this function can work alongside the user configuration file, - but it's not recommended to use both. - -coc#add_extension({name}, ...) *coc#add_extension()* - - Deprecated function for install extensions not exists. - Use |g:coc_global_extensions| variable instead. - - Example: > - - call coc#add_extension('coc-json', 'coc-tsserver', 'coc-rls') -< - This function can be called before service initialized. - This function can be called multiple times. - -coc#add_command({id}, {command}, [{title}]) *coc#add_command()* - - Add custom Vim command to commands list opened by - `:CocList commands` . - - Example: > - - call coc#add_command('mundoToggle', 'MundoToggle', - \ 'toggle mundo window') -< -coc#expandable() *coc#expandable()* - - Check if a snippet is expandable at the current position. - Requires `coc-snippets` extension installed. - -coc#jumpable() *coc#jumpable()* - - Check if a snippet is jumpable at the current position. - -coc#expandableOrJumpable() *coc#expandableOrJumpable()* - - Check if a snippet is expandable or jumpable at the current position. - Requires `coc-snippets` extension installed. - -coc#on_enter() *coc#on_enter()* - - Notify coc.nvim that has been pressed. - - Used for the format on type and improvement of brackets, example: > - - " Confirm the completion when popupmenu is visible, insert and - " notify coc.nvim otherwise. - inoremap coc#pum#visible() ? coc#pum#confirm() - \: "\u\\=coc#on_enter()\" -< - Note:to enable format on type, add ` "coc.preferences.formatOnType": true` - in your settings file. - -coc#status() *coc#status()* - - Return a status string that can be used in the status line, the status - includes diagnostic information from `b:coc_diagnostic_info` and - extension contributed statuses from `g:coc_status`. For statusline - integration, see |coc-status| - -coc#util#api_version() *coc#util#api_version()* - - Get coc.nvim's vim API version number, start from `1`. - -coc#util#job_command() *coc#util#job_command()* - - Get the job command used for starting the coc service. - -coc#util#get_config_home() *coc#util#get_config_home()* - - Get the config directory that contains the user's coc-settings.json. - -coc#util#get_data_home() *coc#util#get_data_home()* - - Get data home directory, return |g:coc_data_home| when defined, else - use $XDG_CONFIG_HOME/coc when $XDG_CONFIG_HOME exists, else fallback - to `~/AppData/Local/coc` on windows and `~/.config/coc` on other - systems. - -coc#util#extension_root() *coc#util#extension_root()* - - Return extensions root of coc.nvim. - -coc#util#root_patterns() *coc#util#root_patterns()* - - Get root patterns used for current document. - - Result could be something like: > - - {'global': ['.git', '.hg', '.projections.json'], 'buffer': [], 'server': v:null} -< -coc#util#get_config({key}) *coc#util#get_config()* - - Get configuration (mostly defined in coc-settings.json) by {key}, - example: > - - :echo coc#util#get_config('coc.preferences') - -coc#snippet#next() *coc#snippet#next()* - - Jump to next placeholder, does nothing when |coc#jumpable| is 0. - -coc#snippet#prev() *coc#snippet#prev()* - - Jump to previous placeholder, does nothing when |coc#jumpable| is 0. - - *coc#pum* -coc#pum#visible() *coc#pum#visible()* - - Check if customized popupmenu is visible. - -coc#pum#next({insert}) *coc#pum#next()* - - Select next item of customized popupmenu, insert word when {insert} is - truth value. - -coc#pum#prev({insert}) *coc#pum#prev()* - - Select previous item of customized popupmenu, insert word when {insert} - is truth value. - -coc#pum#stop() *coc#pum#stop()* - - Close the customized popupmenu, works like of vim. - Return - -coc#pum#cancel() *coc#pum#cancel()* - - Cancel the customized popupmenu and revert trigger input, like - of vim. Return empty string. - -coc#pum#confirm() *coc#pum#confirm()* - - Confirm completion and close the customized pum, like of vim. - Return empty string. - -coc#pum#info() *coc#pum#info()* - - Return information of the customized popupmenu, should only be used - when |coc#pum#visible()| is 1. - - Result contains: - index Current select item index, 0 based. - scrollbar Non-zero if a scrollbar is displayed. - row Screen row count, 0 based. - col Screen column count, 0 based. - width Width of pum, including padding and border. - height Height of pum, including padding and border. - size Count of displayed complete items. - inserted Is |v:true| when there is item inserted. - reversed Is |v:true| when pum shown above cursor and - enable |suggest.reversePumAboveCursor| - -coc#pum#select({index}, {insert}, {confirm}) *coc#pum#select()* - - Selects an item in the completion popupmenu. - Return empty string. - - Parameters:~ - {index} Index (zero-based) of the item to select. - {insert} Whether the selection should be inserted - in the buffer. - {confirm} Confirm the completion and dismiss the - popupmenu, implies `insert`. - -coc#pum#insert() *coc#pum#insert()* - - Insert word of current selected item and finish completion. - Timer is used to make it works as rhs of key-mappings. - -coc#pum#one_more() *coc#pum#one_more()* - - Insert one more character from current complete item (first complete - item when no complete item selected), works like of - |popupmenu-keys|. Note that the word of complete item should starts - with current input. - - Nothing happens when failed. - -coc#pum#scroll({forward}) *coc#pum#scroll()* - - Scroll the popupmenu forward or backward by page. - Timer is used to make it works as rhs of key-mappings. - Return empty string. - - Parameters:~ - {forward} Scroll forward when none zero. - - *coc#notify* -coc#notify#close_all() *coc#notify#close_all()* - - Close all notification windows. - -coc#notify#do_action([{winid}]) *coc#notify#do_action()* - - Invoke action for all notification windows, or particular window with - winid. - -coc#notify#copy() *coc#notify#copy()* - - Copy all content from notifications to system clipboard. - -coc#notify#show_sources() *coc#notify#show_sources()* - - Show source name (extension name) in notification windows. - -coc#notify#keep() *coc#notify#keep()* - - Stop auto hide timer of notification windows. - -coc#float#has_float([{all}]) *coc#float#has_float()* - - Check if float window/popup exists, check coc.nvim's float - window/popup by default. - -coc#float#close_all([{all}]) *coc#float#close_all()* - - Close all float windows/popups created by coc.nvim, set {all} to `1` - for all float window/popups. - -coc#float#close({winid}) *coc#float#close()* - - Close float window/popup with {winid}. - -coc#float#has_scroll() *coc#float#has_scroll()* - - Return `1` when there is scrollable float window/popup created by - coc.nvim. - - Example key-mappings: -> - if has('nvim-0.4.0') || has('patch-8.2.0750') - nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" - nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" - inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" - inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" - vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" - vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" - endif -< -coc#float#scroll({forward}, [{amount}]) *coc#float#scroll()* - - Scroll all scrollable float windows/popups, scroll backward when - {forward} is not `1`. {amount} could be number or full page when - omitted. Popup menu is excluded. - - Note: this function requires nvim >= 0.4.0 or vim >= 8.2.750 to work. - - -CocRequest({id}, {method}, [{params}]) *CocRequest()* - - Send a request to language client of {id} with {method} and optional - {params}. Example: > - - call CocRequest('tslint', 'textDocument/tslint/allFixes', - \ {'textDocument': {'uri': 'file:///tmp'}}) -< - Vim error will be raised if the response contains an error. - - *CocRequestAsync()* - -CocRequestAsync({id}, {method}, [{params}, [{callback}]]) - - Send async request to remote language server. - {callback} function is called with error and response. - -CocNotify({id}, {method}, [{params}]) *CocNotify()* - - Send notification to remote language server, example: -> - call CocNotify('ccls', '$ccls/reload') -< - *CocRegisterNotification()* - -CocRegisterNotification({id}, {method}, {callback}) - - Register notification callback for specified client {id} and {method}, - example: > - - autocmd User CocNvimInit call CocRegisterNotification('ccls', - \ '$ccls/publishSemanticHighlight', function('s:Handler')) -< - {callback} is called with single param as notification result. - - Note: when register notification with same {id} and {method}, only the - later registered would work. - - *CocLocations()* - -CocLocations({id}, {method}, [{params}, {openCommand}]) - - Send location request to language client of {id} with - {method} and optional {params}. e.g.: > - - call CocLocations('ccls', '$ccls/call', {'callee': v:true}) - - call CocLocations('ccls', '$ccls/call', {}, 'vsplit') -< - {openCommand}: optional command to open buffer, default to - `coc.preferences.jumpCommand` , |:edit| by default. When it's - `v:false` locations list would always used. - - *CocLocationsAsync()* - -CocLocationsAsync({id}, {method}, [{params}, {openCommand}]) - - Same as |CocLocations()|, but send notification to server instead - of request. - - -CocAction({action}, [...{args}]) *CocAction()* - - Run {action} of coc with optional extra {args}. - - Checkout |coc-actions| for available actions. - - Note: it's recommended to use |CocActionAsync()| unless you have to - block your vim. - - *CocActionAsync()* - -CocActionAsync({action}, [...{args}, [{callback}]]) - - Call CocAction by send notification to server of coc.nvim. - - Optional callback is called with `error` as the first argument and - `response` as the second argument. - - Checkout |coc-actions| for available actions. - -CocHasProvider({feature}) *CocHasProvider()* - - Check if provider exists for specified feature of current buffer. - Supported features: - - `rename` `onTypeEdit` `documentLink` `documentColor` `foldingRange` - `format` `codeAction` `workspaceSymbols` `formatRange` `hover` - `signature` `documentSymbol` `documentHighlight` `definition` - `declaration` `typeDefinition` `reference` `implementation` `codeLens` - `selectionRange` - -CocTagFunc({pattern}, {flags}, {info}) *CocTagFunc()* - - Used for vim's 'tagfunc' option, to make tag search by |CTRL-]| use - coc.nvim as provider, tag search would be performed when no result - from coc.nvim. - - Make sure your vim support 'tagfunc' by -> - :echo exists('&tagfunc') -< ------------------------------------------------------------------------------- - *coc-actions* -Available Actions ~ - -Acceptable {action} names for |CocAction()| and |CocActionAsync()|. - -"ensureDocument" *CocAction('ensureDocument')* - - Ensure current document is attached to coc.nvim - |coc-document-attached|, should be used when you need invoke action of - current document on buffer create. - - Return |v:false| when document can't be attached. - -"diagnosticList" *CocAction('diagnosticList')* - - Get all diagnostic items of the current Neovim session. - -"diagnosticInfo" *CocAction('diagnosticInfo')* - - Show diagnostic message at the current position, do not truncate. - -"diagnosticToggle" [{enable}] *CocAction('diagnosticToggle')* - - Enable/disable diagnostics on the fly, not work when `displayByAle` is - enabled. You can toggle by specifying {enable}. {enable} can be 0 or 1 - -"diagnosticToggleBuffer" [{bufnr}] [{enable}] *CocAction('diagnosticToggleBuffer')* - - Toggle diagnostics for specific buffer, current buffer is used when - {bufnr} not provided. 0 for current buffer - You can toggle by specifying {enable}. {enable} can be 0 or 1 - - Note: this will only affect diagnostics shown in the UI, list of all - diagnostics won't change. - -"diagnosticPreview" *CocAction('diagnosticPreview')* - - Show diagnostics under current cursor in preview window. - -"diagnosticRefresh" [{bufnr}] *CocAction('diagnosticRefresh')* - - Force refresh diagnostics for special buffer with {bufnr} or all buffers - when {bufnr} doesn't exist, returns `v:null` before diagnostics are shown. - - NOTE: Will refresh in any mode. - - Useful when `diagnostic.autoRefresh` is `false`. - -"refreshSource" [{source}] *CocAction('refreshSource')* - - refresh all sources or a source with a name of {source}. - -"sourceStat" *CocAction('sourceStat')* - - get the list of completion source stats for the current buffer. - -"toggleSource" {source} *CocAction('toggleSource')* - - enable/disable {source}. - -"definitions" *CocAction('definitions')* - - Get definition locations of symbol under cursor. - Return LSP `Location[]` - -"declarations" *CocAction('declarations')* - - Get declaration location(s) of symbol under cursor. - Return LSP `Location | Location[] | LocationLink[]` - -"implementations" *CocAction('implementations')* - - Get implementation locations of symbol under cursor. - Return LSP `Location[]` - -"typeDefinitions" *CocAction('typeDefinitions')* - - Get type definition locations of symbol under cursor. - Return LSP `Location[]` - -"references" [{excludeDeclaration}] *CocAction('references')* - - Get references location list of symbol under cursor. - - {excludeDeclaration}: exclude declaration locations when not zero. - - Return LSP `Location[]` - -"jumpDefinition" [{openCommand}] *CocAction('jumpDefinition')* - - jump to definition locations of the current symbol. - Return `v:false` when location not found. - - |coc-list-location| is used when more than one position is available, - for custom location list, use variable: |g:coc_enable_locationlist|. - - To always use |coc-list-location|| for locations, use `v:false` for - {openCommand}. - - {openCommand}: optional command to open buffer, default to - `coc.preferences.jumpCommand` in `coc-settings.json` - -"jumpDeclaration" [{openCommand}] *CocAction('jumpDeclaration')* - - jump to declaration locations of the current symbol. - Return `v:false` when location not found. - - same behavior as "jumpDefinition". - - When {openCommand} is `v:false`, location list would be always used. - -"jumpImplementation" [{openCommand}] *CocAction('jumpImplementation')* - - Jump to implementation locations of the current symbol. - Return `v:false` when location not found. - - same behavior as "jumpDefinition" - -"jumpTypeDefinition" [{openCommand}] *CocAction('jumpTypeDefinition')* - - Jump to type definition locations of the current symbol. - Return `v:false` when location not found. - - same behavior as "jumpDefinition" - -"jumpReferences" [{openCommand}] *CocAction('jumpReferences')* - - Jump to references locations of the current symbol, use - |CocAction('jumpUsed')| to exclude declaration locations. - - Return `v:false` when location not found. - - same behavior as "jumpDefinition" - -"jumpUsed" [{openCommand}] *CocAction('jumpUsed')* - - Jump references locations without declarations. - - same behavior as "jumpDefinition" - -"getHover" *CocAction('getHover')* - - Get documentation text array on current position, returns array of - string. - -"doHover" [{hoverTarget}] *CocAction('doHover')* - - Show documentation of current symbol, return `v:false` when hover not - found. - - {hoverTarget}: optional specification for where to show hover info, - defaults to `coc.preferences.hoverTarget` in `coc-settings.json`. - Valid options: ["preview", "echo", "float"] - -"definitionHover" [{hoverTarget}] *CocAction('definitionHover')* - - Same as |CocAction('doHover')|, but includes definition contents from - definition provider when possible. - -"showSignatureHelp" *CocAction('showSignatureHelp')* - - Echo signature help of current function, return `v:false` when - signature not found. You may want to set up an autocmd like this: > - - autocmd User CocJumpPlaceholder call - \ CocActionAsync('showSignatureHelp') -< -"getCurrentFunctionSymbol" *CocAction('getCurrentFunctionSymbol')* - - Return the function string that current cursor in. - -"documentSymbols" [{bufnr}] *CocAction('documentSymbols')* - - Get a list of symbols of current buffer or specific {bufnr}. - -"rename" *CocAction('rename')* - - Rename the symbol under the cursor position, |coc-dialog-input| would - be shown for prompt a new name. - - Show error message when the provider not found or prepare rename - failed. - - The buffers are not saved after apply workspace edits, use |:wa| to - save all buffers. It's possible to undo/redo and inspect the changes, - see |coc-workspace-edits|. - - Note: coc.nvim supports rename for disk files, but your language server - may not. - -"refactor" *CocAction('refactor')* - - Open refactor windows with current symbol as activated cursor ranges. - Check |coc-config-cursors| and |coc-config-refactor| for related - configuration. - - Use to open buffer at current position in split window. - Use to show action menu which have tab open and remove actions. - -"format" *CocAction('format')* - - Format current buffer using the language server. - Return `v:false` when format failed. - -"formatSelected" [{mode}] *CocAction('formatSelected')* - - Format the selected range, {mode} should be one of visual mode: `v` , - `V`, `char`, `line`. - - When {mode} is omitted, it should be called using |formatexpr|. - - -"selectionRanges" *CocAction('selectionRanges')* - - Get selection ranges of current position from language server. - -"services" *CocAction('services')* - - Get an information list for all services. - -"toggleService" {serviceId} *CocAction('toggleService')* - - Start or stop a service. - -"codeAction" [{mode}] [{only}] *CocAction('codeAction')* - - Prompt for a code action and do it. - - {mode} could be `currline` or `cursor` or result of |visualmode()|, - current buffer range is used when it's empty string. - - {only} can be title of a codeAction or list of CodeActionKind. - -"codeActionRange" {start} {end} [{kind}] *CocAction('codeActionRange')* - - Run code action for range. - - {start} Start line number of range. - {end} End line number of range. - {kind} Code action kind, see |CocAction('codeActions')| for available - action kind. - - Can be used to create commands like: > - - command! -nargs=* -range CocAction :call CocActionAsync('codeActionRange', , , ) - command! -nargs=* -range CocFix :call CocActionAsync('codeActionRange', , , 'quickfix') -< -"codeLensAction" *CocAction('codeLensAction')* - - Invoke the command for codeLens of current line (or the line that - contains codeLens just above). Prompt would be shown when multiple - actions are available. - -"commands" *CocAction('commands')* - - Get a list of available service commands for the current buffer. - -"runCommand" [{name}] [...{args}] *CocAction('runCommand')* - - Run a global command provided by the language server. If {name} is not - provided, a prompt with a list of commands is shown to be selected. - - {args} are passed as arguments of command. - - You can bind your custom command like so: > - - command! -nargs=0 OrganizeImport - \ :call CocActionAsync('runCommand', 'tsserver.organizeImports') -< -"fold" {{kind}} *CocAction('fold')* - - Fold the current buffer, optionally use {kind} for specific - FoldingRangeKind. - {kind} could be 'comment', 'imports' or 'region'. - - Return `v:false` when failed. - - You can create a custom command like: > - - command! -nargs=? Fold :call CocAction('fold', ) -< -"highlight" *CocAction('highlight')* - - Highlight the symbols under the cursor. - -"openLink" [{command}] *CocAction('openLink')* - - Open a link under the cursor with {command}. - {command} default to `edit`. - - File and URL links are supported, return `v:false` when failed. - - URI under cursor is searched when no link returned from documentLink - provider. - -"links" *CocAction('links')* - - Return document link list of current buffer. - -"extensionStats" *CocAction('extensionStats')* - - Get all extension states as a list. Including `id`, `root` and - `state`. - - State could be `disabled`, `activated` and `loaded`. - -"toggleExtension" {id} *CocAction('toggleExtension')* - - Enable/disable an extension. - -"uninstallExtension" {id} *CocAction('uninstallExtension')* - - Uninstall an extension. - -"reloadExtension" {id} *CocAction('reloadExtension')* - - Reload an activated extension. - -"activeExtension" {id} *CocAction('activeExtension')* - - Activate extension of {id}. - -"deactivateExtension" {id} *CocAction('deactivateExtension')* - - Deactivate extension of {id}. - -"pickColor" *CocAction('pickColor')* - - Change the color at the current cursor position, requires - `documentColor` provider |CocHasProvider|. - - Note: only works on mac or when you have python support on Vim and - have the GTK module installed. - -"colorPresentation" *CocAction('colorPresentation')* - - Change the color presentation at the current color position, requires - `documentColor` provider |CocHasProvider|. - -"codeActions" [{mode}] [{only}] *CocAction('codeActions')* - - Get codeActions list of current document. - - {mode} can be result of |visualmode()| for visual selected - range. When it's falsy value, current file is used as range. - - {only} can be array of codeActionKind, possible values including: - - 'refactor': Base kind for refactoring actions - - 'quickfix': base kind for quickfix actions - - 'refactor.extract': Base kind for refactoring extraction actions - - 'refactor.inline': Base kind for refactoring inline actions - - 'refactor.rewrite': Base kind for refactoring rewrite actions - - 'source': Base kind for source actions - - 'source.organizeImports': Base kind for an organize imports source - action - - 'source.fixAll': Base kind for auto-fix source actions - - {only} can also be string, which means filter by title of codeAction. - -"organizeImport" *CocAction('organizeImport')* - - Run organize import codeAction for current buffer. - Show warning when codeAction not found. - -"fixAll" *CocAction('fixAll')* - - Run fixAll codeAction for current buffer. - Show warning when codeAction not found. - - -"quickfixes" [{visualmode}] *CocAction('quickfixes')* - - Get quickfix codeActions of current buffer. - - Add {visualmode} as second argument get quickfix actions with range of - latest |visualmode()| - -"doCodeAction" {codeAction} *CocAction('doCodeAction')* - - Do a codeAction. - -"doQuickfix" *CocAction('doQuickfix')* - - Do the first preferred quickfix action on current line. - - Throw error when no quickfix action found. - -"addRanges" {ranges} *CocAction('addRanges')* - - Ranges must be provided as array of range type: https://git.io/fjiEG - -"getWordEdit" *CocAction('getWordEdit')* - - Get workspaceEdit of current word, language server used when possible, - extract word from current buffer as fallback. - -"getWorkspaceSymbols" {input} *CocAction('getWorkspaceSymbols')* - - Get workspace symbols from {input}. - -"resolveWorkspaceSymbol" {symbol} *CocAction('resolveWorkspaceSymbol')* - - Resolve location for workspace {symbol}. - -"showOutline" [{keep}] *CocAction('showOutline')* - - Show |coc-outline| for current buffer. Does nothing when outline - window already shown for current buffer. - - {keep} override `"outline.keepWindow"` configuration when specified. - Could be 0 or 1. - - Returns after window is shown (document symbol request is still in - progress). - -"hideOutline" *CocAction('hideOutline')* - - Close |coc-outline| on current tab. Throws vim error when it can't - be closed by vim. - -"incomingCalls" [{CallHierarchyItem}] *CocAction('incomingCalls')* - - Retrieve incoming calls from {CallHierarchyItem} or current position - when not provided. - -"outgoingCalls" [{CallHierarchyItem}] *CocAction('outgoingCalls')* - - Retrieve outgoing calls from {CallHierarchyItem} or current position - when not provided. - -"showIncomingCalls" *CocAction('showIncomingCalls')* - - Show incoming calls of current function with |coc-tree|, see - |coc-callHierarchy| - -"showOutgoingCalls" *CocAction('showOutgoingCalls')* - - Show outgoing calls of current function with |coc-tree|. - -"showSuperTypes" *CocAction('showSuperTypes')* - - Show super types of types under cursor with |coc-tree|, see - |coc-typeHierarchy|. A warning is shown when no types found under - cursor. - -"showSubTypes" *CocAction('showSubTypes')* - - Show sub types of types under cursor with |coc-tree|, see - |coc-typeHierarchy|. A warning is shown when no types found under - cursor. - -"semanticHighlight" *CocAction('semanticHighlight')* - - Request semantic tokens highlight for current buffer. - -"inspectSemanticToken" *CocAction('inspectSemanticToken')* - - Inspect semantic token information at cursor position. - -"rangeSelect" {visualmode} {forward} *CocAction('rangeSelect')* - - Visual select previous or next selection range, requires - `selectionRange` provider. - - {visualmode} should be result of {visualmode} or "" for current cursor - position. - {forward} select backward when it's falsy value. - ------------------------------------------------------------------------------- -COMMANDS *coc-commands* - -:CocStart *:CocStart* - - Start the coc.nvim server, do nothing if it's already started. - -:CocRestart *:CocRestart* - - Restart coc.nvim service. - - Use this command when you want coc to start all over again. - -:CocDisable *:CocDisable* - - Disable handling vim events. - -:CocEnable *:CocEnable* - - Enable handling vim events. - -:CocConfig *:CocConfig* - - Edit the user config file `.vim/coc-settings.json` in - |coc#util#get_config_home()| - -:CocLocalConfig *:CocLocalConfig* - - Edit or create `.vim/coc-settings.json` in current workspace folder. - -:CocInstall [{option}] {name} ... *:CocInstall* - - Install one or more coc extensions. - - {option}: could be `-sync` for use blocked process to download instead - of terminal. - - Examples: > - - " Install latest coc-omni - :CocInstall coc-omni - " Install coc-omni 1.0.0 - :CocInstall coc-omni@1.0.0 - " Install snippet extension from github - :CocInstall https://github.com/dsznajder/vscode-es7-javascript-react-snippets -> -:CocUninstall {name} *:CocUninstall* - - Uninstall an extension, use to complete the extension - name. - -:CocUpdate *:CocUpdate* - - Update all coc extensions to the latest version. - -:CocUpdateSync *:CocUpdateSync* - - Block version of update coc extensions. - -:CocCommand {name} [{args}] ... *:CocCommand* - - Run a command contributed by extensions, use `` for name - completion. - -:CocOpenLog *:CocOpenLog* - - Open log file of coc.nvim. - - Use environmental variable `NVIM_COC_LOG_FILE` for fixed log file. - Note: the log would be cleared when coc.nvim started. - - Use environment variable `NVIM_COC_LOG_LEVEL` to change log level - (default 'info', could be 'all', 'trace', 'debug', 'info', - 'warn', 'error', 'off'). - Use shell command: > - - export NVIM_COC_LOG_LEVEL=debug -< - or add: > - - let $NVIM_COC_LOG_LEVEL='debug' -< - to the beginning of your `.vimrc` - -:CocInfo *:CocInfo* - - Show version and log information in a split window, useful for - submitting a bug report. - -:CocDiagnostics [height] *:CocDiagnostics* - - Open vim's |location-list| with diagnostics of current buffer. - -:CocSearch *:CocSearch* - - Perform search by ripgrep https://github.com/BurntSushi/ripgrep, - refactor window would be opened. - - Note: the search is performed on your files, so normally you should - save your buffers before invoke this command. - - Common arguments for ripgrep:~ - - `-e` `--regexp`: treat search pattern as regexp. - `-F` `--fixed-strings`: treat search pattern as fixed string. - `-L` `--follow`: follow symbolic links while traversing directories. - `-g` `--glob` {GLOB}: Include or exclude files and directories for - searching that match the given glob. - `--hidden`: Search hidden files and directories. - `--no-ignore-vcs`: Don't respect version control ignore files - (.gitignore, etc.). - `--no-ignore`: Don't respect ignore files (.gitignore, .ignore, etc.). - `-w` `--word-regexp`: Only show matches surrounded by word boundaries. - `-S` `--smart-case`: Searches case insensitively if the pattern is all - lowercase. Search case sensitively otherwise. - `--no-config`: Never read configuration files. - `-x` `--line-regexp`: Only show matches surrounded by line boundaries. - - Use `:man 1 rg` in your terminal for more details. - - Note: By default, hidden files and directories are skipped. - - Note: By default, vcs ignore files including `.gitignore` and - `.ignore` are respected - - Escape arguments:~ - - || is used to convert command line arguments to arguments of - rg, which means you have to escape space for single argument. For - example, if you want to search `import { Neovim` , you have to use: -> - :CocSearch import\ \{\ Neovim -< - The escape for `{` is required because rg use regexp be default, or: -> - :CocSearch -F import\ {\ Neovim -< - for strict match. - - Change and save:~ - - Refactor session is started with searched patterns highlighted, just - change the text and save refactor buffer to make changes across all - related files. You can make any kind of changes, including add lines - and remove lines. - -:CocWatch [extension] *:CocWatch* - - Watch loaded [extension] for reload on file change, use for - complete extension id. - -:CocOutline *:CocOutline* - - Invoke |CocAction('showOutline')| by notification. - ------------------------------------------------------------------------------- -AUTOCMD *coc-autocmds* - - *CocLocationsChange* - -:autocmd User CocLocationsChange {command} - - For building a custom view of locations, set - |g:coc_enable_locationlist| to 0 and use this autocmd with with - |g:coc_jump_locations| - - For example, to disable auto preview of location list, use: -> - let g:coc_enable_locationlist = 0 - autocmd User CocLocationsChange CocList --normal location -< - *CocNvimInit* -:autocmd User CocNvimInit {command} - - Triggered after the coc services have started. - - If you want to trigger an action of coc after Vim has started, this - autocmd should be used because coc is always started asynchronously. - - *CocStatusChange* - -:autocmd User CocStatusChange {command} - - Triggered after `g:coc_status` changed, can be used for refresh - statusline. - - *CocDiagnosticChange* - -:autocmd User CocDiagnosticChange {command} - - Triggered after the diagnostic status has changed. - - Could be used for updating the statusline. - - *CocJumpPlaceholder* - -:autocmd User CocJumpPlaceholder {command} - - Triggered after a jump to a placeholder. Can be used for - showing signature help like: > - - autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') -< - *CocOpenFloat* - -:autocmd User CocOpenFloat {command} - - Triggered when a floating window is opened. The window is not - focused, use |g:coc_last_float_win| to get window id. - - *CocOpenFloatPrompt* - -:autocmd User CocOpenFloatPrompt {command} - - Triggered when a floating prompt window is opened (triggered after - CocOpenFloat). - - *CocTerminalOpen* -:autocmd User CocTerminalOpen {command} - - Triggered when the terminal is shown, can be used for adjusting the - window height. - ------------------------------------------------------------------------------- - -HIGHLIGHTS *coc-highlights* - -The best place to override highlight groups is a file named -after/colors/ .vim in your 'runtimepath' (e.g., -~/.config/nvim/after/colors/solarized.vim). Example declaration: -> - " make error texts have a red color - highlight CocErrorHighlight ctermfg=Red guifg=#ff0000 -< -Use |:highlight| with group name to check current highlight. - -Note: don't use `:hi default` for overwriting the highlights. - -Note: user defined highlight commands should appear after the |:colorscheme| -command and use |ColorScheme| autocmd to make sure customized highlights works -after color scheme change. - -Markdown related~ - -*CocBold* for bold text. -*CocItalic* for italic text. -*CocUnderline* for underlined text. -*CocStrikeThrough* for strikethrough text, like usage of deprecated API. -*CocMarkdownCode* for inline code in markdown content. -*CocMarkdownHeader* for markdown header in floating window/popup. -*CocMarkdownLink* for markdown link text in floating window/popup. - -Diagnostics related~ - *coc-highlights-diagnostics* - -*CocFadeOut* for faded out text, such as for highlighting unnecessary code. -*CocErrorSign* for error signs. -*CocWarningSign* for warning signs. -*CocInfoSign* for information signs. -*CocHintSign* for hint signs. -*CocErrorVirtualText* for error virtual text. -*CocWarningVirtualText* for warning virtual text. -*CocInfoVirtualText* for information virtual text. -*CocHintVirtualText* for hint virtual text. -*CocErrorHighlight* for error code range. -*CocWarningHighlight* for warning code range. -*CocInfoHighlight* for information code range. -*CocHintHighlight* for hint code range. -*CocDeprecatedHighlight* for deprecated code range, links to -|CocStrikeThrough| by default. -*CocUnusedHighlight* for unnecessary code range, links to |CocFadeOut| by -default. -*CocErrorLine* line highlight of sign which contains error. -*CocWarningLine* line highlight of sign which contains warning. -*CocInfoLine* line highlight of sign which information. -*CocHintLine* line highlight of sign which contains hint. - -Highlight with higher priority would overwrite highlight with lower priority. -The priority order: - - |CocUnusedHighlight| > |CocDeprecatedHighlight| > |CocErrorHighlight| - > |CocWarningHighlight| > |CocInfoHighlight| > |CocHintHighlight| - -Document highlight related~ - *coc-highlights-document* - -Highlights used for highlighting same symbols in the buffer at the current -cursor position. - -*CocHighlightText* default symbol highlight. -*CocHighlightRead* for `Read` kind of document symbol. -*CocHighlightWrite* for `Write` kind of document symbol. - -Float window/popup related~ - -*CocFloating* default highlight group of floating windows/popups. -Default links to |NormalFloat| on neovim and |Pmenu| on vim. -*CocFloatThumb* thumb highlight of scrollbar. -*CocFloatSbar* Scrollbar highlight of floating window/popups. -*CocFloatDividingLine* for dividing lines, links to |NonText| by default. -*CocFloatActive* for activated text, links to |CocSearch| by default. -*CocErrorFloat* for error text in floating windows/popups. -*CocHintFloat* for hint text in floating windows/popups. - -Notification window/popup related~ - -CocNotification *CocNotification* - -*CocNotificationProgress* for progress line in progress notification. -*CocNotificationButton* for action buttons in notification window. -*CocNotificationError* for highlight border of error notification. -*CocNotificationWarning* for highlight border of warning notification. -*CocNotificationInfo* for highlight border of info notification. - -List related~ - *coc-highlights-list* - -*CocListLine* for current cursor line. -*CocListSearch* for matched characters. -*CocListMode* for mode text in the statusline. -*CocListPath* for cwd text in the statusline. -*CocSelectedText* for sign text of selected lines (multiple selection only). -*CocSelectedLine* for line highlight of selected lines (multiple selection only). - -Tree view related~ - -CocTree *CocTree* - -*CocTreeTitle* for title in tree view. -*CocTreeDescription* for description beside label. -*CocTreeOpenClose* for open and close icon in tree view. -*CocTreeSelected* for highlight lines contains selected node. - -Popup menu related~ - *CocPum* -*CocPumSearch* for matched input characters, linked to |CocSearch| by default. -*CocPumDetail* for highlight label details that follows label (including -possible detail and description). -*CocPumMenu* for menu of complete item. -*CocPumShortcut* for shortcut text of source. -*CocPumDeprecated* for deprecated label. -*CocPumVirtualText* for virtual text which enabled by -|coc-config-suggest-virtualText| - -Symbol icons~ - -CocSymbol *CocSymbol* - -Highlight groups for symbol icons, including `CompletionItemKind` and -`SymbolKind` of LSP. The highlight groups link to related |nvim-treesitter| -highlight groups when possible and fallback to builtin highlight groups. - -*CocSymbolDefault* linked to |hl-MoreMsg| by default. -*CocSymbolText* -*CocSymbolUnit* -*CocSymbolValue* -*CocSymbolKeyword* -*CocSymbolSnippet* -*CocSymbolColor* -*CocSymbolReference* -*CocSymbolFolder* -*CocSymbolFile* -*CocSymbolModule* -*CocSymbolNamespace* -*CocSymbolPackage* -*CocSymbolClass* -*CocSymbolMethod* -*CocSymbolProperty* -*CocSymbolField* -*CocSymbolConstructor* -*CocSymbolEnum* -*CocSymbolInterface* -*CocSymbolFunction* -*CocSymbolVariable* -*CocSymbolConstant* -*CocSymbolString* -*CocSymbolNumber* -*CocSymbolBoolean* -*CocSymbolArray* -*CocSymbolObject* -*CocSymbolKey* -*CocSymbolNull* -*CocSymbolEnumMember* -*CocSymbolStruct* -*CocSymbolEvent* -*CocSymbolOperator* -*CocSymbolTypeParameter* - -Note: Use configuration |coc-config-suggest-completionItemKindLabels| for customized icon -characters. - -Semantic token highlight groups~ - *CocSem* - -Semantic highlight groups are starts with `CocSem` which link to related -|nvim-treesitter| highlight groups when possible and fallback to builtin -highlight groups, use variable |g:coc_default_semantic_highlight_groups| to -disable creation of these highlight groups. - -Only semantic tokens types and `deprecated` modifier have default -highlight groups. - -You need create highlight groups for highlight other modifiers and/or specific -modifier with type, for example: -> - " Add highlights for defaultLibrary modifier - hi link CocSemDefaultLibrary TSOtherDefaultLibrary - hi link CocSemDefaultLibraryClass TSTypeDefaultLibrary - hi link CocSemDefaultLibraryInterface TSTypeDefaultLibrary - hi link CocSemDefaultLibraryEnum TSTypeDefaultLibrary - hi link CocSemDefaultLibraryType TSTypeDefaultLibrary - hi link CocSemDefaultLibraryNamespace TSTypeDefaultLibrary - - " Add highlights for declaration modifier - hi link CocSemDeclaration TSOtherDeclaration - hi link CocSemDeclarationClass TSTypeDeclaration - hi link CocSemDeclarationInterface TSTypeDeclaration - hi link CocSemDeclarationEnum TSTypeDeclaration - hi link CocSemDeclarationType TSTypeDeclaration - hi link CocSemDeclarationNamespace TSTypeDeclaration -< -The modifier highlight groups have higher priority. - -Others~ - -*CocSearch* highlight group for matched characters in list. -*CocDisabled* highlight for disabled items, eg: menu item. -*CocCodeLens* for virtual text of codeLens. -*CocCursorRange* for highlight of activated cursors ranges. -*CocLinkedEditing* for highlight of activated linked editing ranges. -*CocHoverRange* for range of current hovered symbol. -*CocMenuSel* for current menu item in menu dialog (should only provide -background color). -*CocSelectedRange* for highlight ranges of outgoing calls. -*CocSnippetVisual* for highlight snippet placeholders. -*CocInlayHint* for highlight inlay hint virtual text block, default uses -foreground from |CocHintSign| and background from |SignColumn| - -============================================================================== -TREE SUPPORT *coc-tree* - -Tree view is used for render outline and call hierarchy, following features -are supported: - -- Data update while keep tree node open/close state. -- Auto refresh on load error. -- Click open/close icon to toggle collapse state. -- Click node to invoke default command. -- Show tooltip in float window on |CursorHold| when possible. -- Key-mappings support |coc-tree-mappings| -- Optional multiple selection. -- Optional node reveal support. -- Optional fuzzy filter support. -- Provide API `window.createTreeView` for extensions. - -Check |coc-config-tree| for related configurations. - -The filetype is `'coctree'`, which can be used to overwrite buffer and window -options. - -Use variable |w:cocViewId| to detect the kind of tree. - ------------------------------------------------------------------------------- - -TREE KEY MAPPINGS *coc-tree-mappings* - -Default key-mappings are provided for 'coctree' buffer, which can be changed -by configuration |coc-config-tree|. - - - Select/unselect item, configured by `"tree.key.toggleSelection"`. - - Invoke actions of current item, configured by `"tree.key.actions"`. - - Close tree window, configured by `"tree.key.close"`. - - Invoke command of current item, configured by `"tree.key.invoke"`. - - Move cursor to original window. -f - Activate filter, configured by `"tree.key.activeFilter"`. -t - Trigger key to toggle expand state of tree node, configured by - `tree.key.toggle`. -M - Collapse all tree node, configured by `"tree.key.collapseAll"`. - ------------------------------------------------------------------------------- - -TREE FILTER *coc-tree-filter* - -Filter mode is used for search for specific node by fuzzy filter, invoke the -key configured by `"tree.key.activeFilter"` to activate filter mode. - -Note: some tree views not have filter mode supported. - -When filter mode is activated, type normal character to insert filter input -and following special keys are supported: - - - Delete last filter character when possible. - - Delete last filter character when possible. - - Clean up filter text. - - Navigate to previous filter text (stored on command invoke). - - Navigate to next filter text (stored on command invoke). - - exit filter mode. - - exit filter mode. - or `"tree.key.selectPrevious"` - Select previous node. - or `"tree.key.selectNext"` - Select next node. - or `"key.key.invoke"` - Invoke command of selected node. - -============================================================================== -LIST SUPPORT *coc-list* - -Built-in list support to make working with lists of items easier. - -The following features are supported: - -- Insert & normal mode. -- Default key-mappings for insert & normal mode. -- Customize key-mappings for insert & normal mode. -- Commands for reopening & doing actions with a previous list. -- Different match modes. -- Interactive mode. -- Auto preview on cursor move. -- Number select support. -- Built-in actions for locations. -- Parse ANSI code. -- Mouse support. -- Select actions using . -- Multiple selections using in normal mode. -- Select lines by visual selection. - ------------------------------------------------------------------------------- - -LIST COMMAND *coc-list-command* - -:CocList [{...options}] [{source}] [{...args}] *:CocList* - - Open coc list of {source}, example: > - - :CocList --normal location -< - For current jump locations. - - See |coc-list-options| for available list options, - - Also check |coc-config-list| for list configuration. - - {args} are sent to source during the fetching of list. - Press `?` on normal mode to get supported {args} of current - list. - - When {source} is empty, lists source is used. - -:CocListResume [{name}] *:CocListResume* - - Reopen last opened list, input and cursor position will be preserved. - -:CocListCancel *:CocListCancel* - - Close list, useful when the list is not the current window. - -:CocPrev [{name}] *:CocPrev* - - Invoke default action for the previous item in the last {name} list. - - Doesn't open the list window if it's closed. - -:CocNext [{name}] *:CocNext* - - Invoke the default action for the next item in the last {name} list. - - Doesn't open the list window if it's closed. - -:CocFirst [{name}] *:CocFirst* - - Invoke default action for first item in the last {name} list. - -:CocLast [{name}] *:CocLast* - - Invoke default action for last item in the last {name} list. - - *coc-list-options* -Options of CocList command~ - ---top - Show list as top window. - ---tab - Open list in new tabpage. - ---normal - - Start list in normal mode, recommended for short list. - ---no-sort - Disable sort made by fuzzy score or most recently used, use it when - it's already sorted. - ---input={input} - - Specify the input on session start. - ---strict --S - Use strict matching instead of fuzzy matching. - ---regex --R - Use regex matching instead of fuzzy matching. - ---ignore-case - - Ignore case when using strict matching or regex matching. - ---number-select --N - Type a line number to select an item and invoke the default action on - insert mode. Type `0` to select the 10th line. - - ---interactive --I - Use interactive mode, list items would be reloaded on input - change, filter and sort would be done by list implementation. - - Note: only works when the list support interactive mode. - - Note: filtering and sorting would be done by underlying task, which - means options including `--strict`, `--no-sort`, `--regex`, - `--ignore-case` would not work at all. - ---auto-preview --A - - Start a preview for the current item on the visible list. - ---no-quit - - Not quit list session after do action. - - Note: you may need to refresh the list for current state. - ---first - - Invoke default action for first list item on list open. - Nothing happens when the list is empty. - ---reverse - - Reverse lines order of list. - ------------------------------------------------------------------------------- - -LIST CONFIGURATION *coc-list-configuration* - -Use `coc-settings.json` for configuration of lists. - -Configuration of list starts with 'list.'. - -See |coc-config-list| or type `list.` in your settings file to get completion -list (requires coc-json installed). - -For configuration of a specified list, use section that starts with: -`list.source.{name}`, where `{name}` is the name of list. - -Change default action:~ - -If you want to use `tabe` as default action of symbols list, you can use: -> - // change default action of symbols - "list.source.symbols.defaultAction": "tabe" -< -in your coc-settings.json - -Change default options:~ - -Use `list.source.{name}.defaultOptions` setting like: > - - // make symbols list use normal mode and interactive by default - "list.source.symbols.defaultOptions": ["--interactive", "--number-select"], -< -Note: some list like symbols only work in interactive mode, you must -include `--interactive` in `defaultOptions`. - -Note: default options will not be used when there're options passed -with |:CocList| command. - -Change default arguments:~ - -Use `list.source.{name}.defaultArgs` setting like: > - - // use regex match for grep source - "list.source.grep.defaultArgs": ["-regex"], - -Note: default arguments used only when arguments from |:CocList| command is -empty. - -Note: Type `?` on normal mode to get supported arguments of current list. - ------------------------------------------------------------------------------- - -LIST MAPPINGS *coc-list-mappings* - -Default mappings on insert mode: - - - Cancel list session. - - Do default action with selected items or current item. - - Stop loading task. - - Paste text from system clipboard. - - Reload list. - - Change to normal mode. - - Select next line. - - Select previous line. - - Move cursor left. - - Move cursor right. - - Move cursor to end of prompt. - - Same as . - - Move cursor to start of prompt. - - Same as . - - Scroll window forward. - - Scroll window backward. - - Remove previous character of cursor. - - Remove previous character of cursor. - - Remove previous word of cursor. - - Remove characters before cursor. - - Navigate to next input in history. - - Navigate to previous input in history. - - Switch matcher for filter items. - - Insert content from vim's register. - - Select action. - -Default mappings on normal mode: - - - Cancel list session. - - Do default action with selected items or current item. - - Stop source from fetching more items. - - Reload list. - - Mark all visible items selected. - - Jump to original window on list create. - - Select action. - - Scroll preview window down. - - Scroll preview window up. - - Toggle selection of current item. -i,I,o,O,a,A - Change to insert mode. -p - Preview action. -: - Cancel list session without closing window. -? - Show help of current list. -t - Do 'tabe' action. -d - Do 'drop' action. -s - Do 'split' action. - -Use |coc-list-mappings-custom| to override default mappings. - - *coc-list-mappings-custom* - -Configurations `"list.normalMappings"` and `"list.insertMappings"` are used -for customizing the list key-mappings, example: > - - "list.insertMappings": { - "": "do:refresh", - "": "feedkeys:\\", - "": "feedkeys:\\", - "": "normal:j", - "": "normal:k", - "": "action:tabe", - "": "call:MyFunc", - // paste yanked text to prompt - "": "eval:@@" - } - "list.normalMappings": { - "c": "expr:MyExprFunc" - "d": "action:delete" - } -< -Note: you should only use mappings that start with ` can't be remapped for other actions. - -The mapping expression should be `command:arguments`, available commands: - -'do' - special actions provided by coc list, including: - 'refresh' - reload list. - 'selectall' - mark all visible items selected. - 'switch' - switch matcher used for filter items. - 'exit' - exit list session. - 'stop' - stop loading task. - 'cancel' - cancel list session but leave list window open. - 'toggle' - toggle selection of current item. - 'togglemode' - toggle between insert and normal mode. - 'previous' - move cursor to previous item. - 'next' - move cursor to next item. - 'defaultaction' - do default action for selected item(s). - 'chooseaction' - choose action for selected item(s). - 'jumpback' - stop prompt and jump back to original window. - 'previewtoggle' - toggle preview window, requires preview action exists. - 'previewup' - scroll preview window up. - 'previewdown' - scroll preview window down. - 'help' - show help. -'prompt' - do prompt action, including: - 'previous' - change to previous input in history. - 'next' - change to next input in history. - 'start' - move cursor to start. - 'end' - move cursor to end. - 'left' - move cursor left. - 'right' - move cursor right. - 'deleteforward' - remove previous character. - 'deletebackward' - remove next character. - 'removetail' - remove characters afterwards. - 'removeahead' - remove character ahead. - 'removeword' - remove word before cursor. - 'insertregister' - insert content from Vim register. - 'paste' - append text from system clipboard to prompt. -'eval' - append text to prompt from result of VimL expression. -'action' - execute action of list, use to find available actions. -'feedkeys' - feedkeys to list window, use `\\` in JSON to escape special - characters. -'normal' - execute normal command in list window. -'normal!' - execute normal command without remap. -'command' - execute command. -'call' - call Vim function with |coc-list-context| as only argument. -'expr' - same as 'call' but expect the function return action name. - - *coc-list-context* - -Context argument contains the following properties: - -'name' - name of the list, example: `'location'`. -'args' - arguments of the list. -'input' - current input of prompt. -'winid' - window id on list activated. -'bufnr' - buffer number on list activated. -'targets' - list of selected targets, checkout |coc-list-target| for properties. - - *coc-list-target* - -Target contains the following properties: - -'label' - mandatory property that is shown in the buffer. -'filtertext' - optional filter text used for filtering items. -'location' - optional location of item, check out https://bit.ly/2Rtb6Bo -'data' - optional additional properties. - ------------------------------------------------------------------------------- - -LIST SOURCES *coc-list-sources* - ------------------------------------------------------------------------------- - -location *coc-list-location* - - Last jump locations. - - Actions: - - - 'preview' : preview location in preview window. - - 'open': open location by use - `"coc.preferences.jumpCommand"`, default action - - 'tabe': Use |:tabe| to open location. - - 'drop': Use |:drop| to open location. - - 'vsplit': Use |:vsplit| to open location. - - 'split': Use |:split| to open location. - - 'quickfix': Add selected items to Vim's quickfix. - -extensions *coc-list-extensions* - - Manage coc.nvim extensions. - - Actions: - - - 'toggle' activate/deactivate extension, default action. - - 'disable' disable extension. - - 'enable' enable extension. - - 'lock' lock/unlock extension to current version. - - 'doc' view extension's README doc. - - 'fix' fix dependencies in terminal buffer. - - 'reload' reload extension. - - 'uninstall' uninstall extension. - -diagnostics *coc-list-diagnostics* - - All diagnostics for the workspace. - - Actions: - - - Same as |coc-list-location| - -folders *coc-list-folders* - - Manage current workspace folders of coc.nvim. - - Actions: - - - 'edit' change the directory of workspace folder. - - 'delete' remove selected workspace folder. - -outline *coc-list-outline* - - Symbols in the current document. - - Actions: - - - Same as |coc-list-location| - -symbols *coc-list-symbols* - - Search workspace symbols. - - Actions: - - - Same as |coc-list-location| - -services *coc-list-services* - - Manage registered services. - - Actions: - - - 'toggle': toggle service state, default action. - -commands *coc-list-commands* - - Workspace commands. - - Actions: - - - 'run': run selected command, default action. - -links *coc-list-links* - - Links in the current document. - - Actions: - - - 'open': open the link, default action. - - 'jump': jump to link definition. - -sources *coc-list-completion-sources* - - Available completion sources. - - Actions: - - - 'toggle': activate/deactivate source, default action. - - 'refresh': refresh source. - - 'open': open the file where source defined. - -lists *coc-list-lists* - - Get available lists. - - Actions: - - - 'open': open selected list, default action. - -============================================================================== - -DIALOG SUPPORT *coc-dialog* - -Dialog is special float window/popup that could response to user actions, -dialog have close button, border, title (optional), bottom buttons(optional). - -Note bottom buttons work different on neovim and vim, on neovim you can -click the button since neovim allows focus of window, on vim you have to type -highlighted character to trigger button callback. - -Note dialog feature requires neovim >= 0.4.0 or vim >= 8.2.0750 to work. - -See |coc-config-dialog| for available configurations. - ------------------------------------------------------------------------------- - - *coc-dialog-basic* - -A basic dialog is create by Javascript API `window.showDialog` , which is just -some texts with optional buttons. - ------------------------------------------------------------------------------- - - *coc-dialog-confirm* - -A confirm dialog is used for user to confirm an action, normally created by -`window.showPrompt()` Confirm dialog uses filter feature on vim8 and -|getchar()| on Neovim. - -The difference is you can operate vim on vim8, but not on neovim. - -Supported key-mappings: - - - force cancel, return -1 for callback. -, n, N - reject the action, return 0 for callback. -y,Y - accept the action, return 1 for callback. - ------------------------------------------------------------------------------- - - *coc-dialog-input* - -An input dialog request user input with optional default value, normally -created by `window.requestInput`, when `"coc.preferences.promptInput"` is -false, vim's command line input prompt is used instead. - -On neovim, it uses float window, on vim8, it opens terminal in popup. - -Supported key-mappings: - - - move cursor to first col. - - move cursor to last col. - - cancel input, null is received by callback. - - accept current input selection of current item. - -QuickPick related (available when created by |coc-dialog-quickpick|). - - - scroll forward quickpick list. - - scroll backward quickpick list. - - move to next item in quickpick list. - - move to previous item in quickpick list. - - toggle selection of current item in quickpick list when -canSelectMany is supported. - -Note on neovim, other insert mode key-mappings could work. - -Note not possible to configure key-mappings on vim8, to customize key-mappings -on neovim, use |CocOpenFloatPrompt| with current buffer. - ------------------------------------------------------------------------------- - - *coc-dialog-quickpick* - -A quickpick is a input dialog in the middle with a float window/popup contains -filtered list items. - -A simple fuzzy filter is used by default. - -See |coc-config-dialog| for available configurations. - -See |coc-dialog-input| for available key-mappings. - ------------------------------------------------------------------------------- - - *coc-dialog-menu* - -A menu dialog is used for pick a single item from list of items, extensions -could use `window.showMenuPicker` to create menu dialog. - -Supported key-mappings: - - - cancel selection. - - confirm selection of current item, use -|dialog.confirmKey| to override. -1-9 - select item with 1 based index. -g - move to first item. -G - move to last item. -j - move to next item. -k - move to previous item. - - scroll forward. - - scroll backward. - ------------------------------------------------------------------------------- - - *coc-dialog-picker* - -A picker dialog is used for single/multiple selection. On neovim, it's -possible to toggle selection by mouse click inside the bracket. Extensions -could use `window.showPickerDialog` to create picker dialog. - -Supported key-mappings: - - - cancel selection. - - confirm selection of current item, use -|dialog.confirmKey| to override. - - toggle selection of current item. -g - move to first item. -G - move to last item. -j - move to next item. -k - move to previous item. - - scroll forward. - - scroll backward. - -Note when close button is clicked, the selection is canceled with undefined -result (same as ). - -============================================================================== - -NOTIFICATION SUPPORT *coc-notification* - -Notification windows are created at the bottom right of the screen. - -Notifications are created by Javascript APIs: `window.showErrorMessage()`, -`window.showWarningMessage()`, `window.showInformationMessage()`, -`window.showNotification()` and `window.withProgress()`. - -Possible kind of notifications: 'error', 'warning', 'info' and 'progress'. - -Message notifications (not progress) requires -|coc-preferences-enableMessageDialog| to be `true`. - -Message notifications without actions would be automatically closed after -milliseconds specified by |coc-config-notification-timeout|. - -Use |coc-config-notification-disabledProgressSources| to disable progress -notifications for specific sources. - -Customize notifications:~ - -- Customize icons: |g:coc_notify| -- Customize highlights: |CocNotification| -- Customize configurations: |coc-config-notification| - -Related functions:~ - -- |coc#notify#close_all()| -- |coc#notify#do_action()| -- |coc#notify#copy()| -- |coc#notify#show_sources()| -- |coc#notify#keep()| - -============================================================================== - -STATUSLINE SUPPORT *coc-status* - -Diagnostics info and other status info contributed by extensions could be -shown in statusline. - -The easiest way is add `%{coc#status()}` to your 'statusline' option. Example: > - - set statusline^=%{coc#status()} -< -You may need to use |CocStatusChange| for automatically refresh statusline: > - - autocmd User CocStatusChange redrawstatus -< ------------------------------------------------------------------------------- - - *coc-status-manual* - -Create function: -> - function! StatusDiagnostic() abort - let info = get(b:, 'coc_diagnostic_info', {}) - if empty(info) | return '' | endif - let msgs = [] - if get(info, 'error', 0) - call add(msgs, 'E' . info['error']) - endif - if get(info, 'warning', 0) - call add(msgs, 'W' . info['warning']) - endif - return join(msgs, ' ') . ' ' . get(g:, 'coc_status', '') - endfunction -< -Add `%{StatusDiagnostic()}` to your 'statusline' option. - ------------------------------------------------------------------------------- - - *coc-status-airline* - -With vim-airline: https://github.com/vim-airline/vim-airline - -Error and warning display should work in vim-airline out of box. - -Disable vim-airline integration: -> - let g:airline#extensions#coc#enabled = 0 -< -Change error symbol: -> - let airline#extensions#coc#error_symbol = 'Error:' -< -Change warning symbol: -> - let airline#extensions#coc#warning_symbol = 'Warning:' -< -Change error format: -> - let airline#extensions#coc#stl_format_err = '%E{[%e(#%fe)]}' -< -Change warning format: -> - let airline#extensions#coc#stl_format_warn = '%W{[%w(#%fw)]}' -< ------------------------------------------------------------------------------- - *coc-status-lightline* - -With lightline.vim: https://github.com/itchyny/lightline.vim - -Use configuration like: > - - let g:lightline = { - \ 'colorscheme': 'wombat', - \ 'active': { - \ 'left': [ [ 'mode', 'paste' ], - \ [ 'cocstatus', 'readonly', 'filename', 'modified' ] ] - \ }, - \ 'component_function': { - \ 'cocstatus': 'coc#status' - \ }, - \ } - - " Use autocmd to force lightline update. - autocmd User CocStatusChange,CocDiagnosticChange call lightline#update() -< -============================================================================== -CUSTOM SOURCE *coc-custom-source* - -Creating a custom source in VimL is supported. - -Check out https://github.com/neoclide/coc.nvim/wiki/Create-custom-source - -============================================================================== -FAQ *coc-faq* - ------------------------------------------------------------------------------- - -Check out https://github.com/neoclide/coc.nvim/wiki/F.A.Q - -============================================================================== -CHANGELOG *coc-changelog* - -See history.md under project root. - -============================================================================== -vim:tw=78:nosta:noet:ts=8:sts=0:ft=help:noet:fen: diff --git a/dotfiles/.vim/plugged/coc.nvim/history.md b/dotfiles/.vim/plugged/coc.nvim/history.md deleted file mode 100644 index f7debbaa..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/history.md +++ /dev/null @@ -1,1650 +0,0 @@ -# 2022-10-21 - -- Consider utf-16 code unit instead of unicode code point. -- Add `coc#string#character_index()` `coc#string#byte_index()` and - `coc#string#character_length()`. - -# 2022-10-20 - -- Add `coc#pum#one_more()` - -# 2022-10-19 - -- Trigger for trigger sources when no filter results available. - -# 2022-10-18 - -- Change `suggest.maxCompleteItemCount` default to 256. - -# 2022-10-17 - -- Set `g:coc_service_initialized` to `0` before service restart. -- Show warning when diagnostic jump failed. -- Use strwidth.wasm module for string display width. -- Add API `workspace.getDisplayWidth`. - -# 2022-10-15 - -- Add configuration `inlayHint.display`. - -# 2022-10-07 - -- Use `CocFloatActive` for highlight active parameters. - -# 2022-09-28 - -- Limit popupmenu width when exceed screen to &pumwidth, instead of change - completion column. -- Make escape of `${name}` for ultisnip snippets the same behavior as - Ultisnip.vim. - -# 2022-09-27 - -- Use fuzzy.wasm for native fuzzy match. -- Add `binarySearch` and `isFalsyOrEmpty` functions for array. -- `suggest.localityBonus` works like VSCode, using selection ranges. -- Add and export `workspace.computeWordRanges`. -- Rework keywords parse for better performance (parse changed lines only and use - yield to reduce iteration). - -# 2022-09-12 - -- All configurations are now scoped #4185 -- No `onDidChangeConfiguration` event fired when workspace folder changed. -- Deprecated configuration `suggest.detailMaxLength`, use `suggest.labelMaxLength` instead. -- Deprecated configuration `inlayHint.filetypes`, use `inlayHint.enable` with scoped languages instead. -- Deprecated configuration `semanticTokens.filetypes`, use `semanticTokens.enable` with scoped languages instead. -- Use `workspaceFolderValue` instead of `workspaceValue` for `ConfigurationInspect` returned by `WorkspaceConfiguration.inspect()`. - -# 2022-09-04 - -- Add configuration "snippet.choicesMenuPicker". - -# 2022-09-03 - -- Send "WinClosed" event to node client. -- Add `onDidFilterStateChange` and `onDidCursorMoved` to `TreeView`. -- Support `autoPreview` for outline. - -# 2022-09-02 - -- Support `diagnostic.virtualTextFormat`. -- Add command `workspace.writeHeapSnapshot`. - -# 2022-09-01 - -- Add configuration "suggest.asciiMatch" -- Support `b:coc_force_attach`. - -# 2022-08-31 - -- Add configuration "suggest.reversePumAboveCursor". -- Use `DiagnosticSign*` highlight groups when possible. -- Use `DiagnosticUnderline*` highlight groups when possible. - -# 2022-08-30 - -- Export `LineBuilder` class. - -# 2022-08-29 - -- Fix semanticTokens highlights unexpected cleared -- Fix range of `doQuickfix` action. -- Check reverse of `CocFloating`, use `border` and `Normal` highlight when reversed. -- Make `CocInlayHint` use background of `SignColumn`. -- Add command `document.toggleInlayHint`. - -# 2022-08-28 - -- Make `CocMenuSel` use background of `PmenuSel`. -- Snippet related configuration changed (old configuration still works until next release) - - "coc.preferences.snippetStatusText" -> "snippet.statusText" - - "coc.preferences.snippetHighlight" -> "snippet.highlight" - - "coc.preferences.nextPlaceholderOnDelete" -> "snippet.nextPlaceholderOnDelete" -- Add configuration `"list.smartCase"` -- Add configurations for inlay hint - - "inlayHint.refreshOnInsertMode" - - "inlayHint.enableParameter" - - "inlayHint.typeSeparator" - - "inlayHint.parameterSeparator" - - "inlayHint.subSeparator" - -# 2022-08-27 - -- Avoid use `EasyMotion#is_active`, use autocmd to disable linting. -- Show message when call hierarchy provider not found or bad position. - -# 2022-08-26 - -- Remove `completeOpt` from `workspace.env`. -- Add configuration `"diagnostic.virtualTextAlign"`. -- Add warning when required features not compiled with vim. -- Not echo error for semanticTokens request (log only). -- Merge results form providers when possible. - -# 2022-08-24 - -- Virtual text of suggest on vim9. -- Virtual text of diagnostics on vim9. -- Add configuration `inlayHint.filetypes`. -- Inlay hint support on vim9. - -# 2022-08-23 - -- Retry semanticTokens request on server cancel (LSP 3.17). -- `RelativePattern` support for `workspace.createFileSystemWatcher()`. -- `relativePatternSupport` for `DidChangeWatchedFiles` (LSP 3.17). -- Not echo error on `doComplete()`. - -# 2022-08-21 - -- Added `window.createFloatFactory()`, deprecated `FloatFactory` class. -- Support `labelDetails` field of `CompleteItem`(LSP 3.17). -- Added `triggerKind` to `CodeActionContext`, export `CodeActionTriggerKind`. - -# 2022-08-20 - -- Support pull diagnostics `:h coc-pullDiagnostics`. -- Break change: avoid extension overwrite builtin configuration defaults. -- Change default value of configuration "diagnostic.format". -- 'line' changes to 'currline' for `CocAction('codeAction')`. -- Check NodeJS version on syntax error. - -# 2022-08-10 - -- Change "notification.highlightGroup" default to "Normal". - -# 2022-08-07 - -- Add configuration 'suggest.pumFloatConfig'. - -# 2022-08-04 - -- Make diagnostic float window with the same background as CocFloating. - -# 2022-08-03 - -- Add highlight group 'CocFloatingDividingLine'. - -# 2022-08-01 - -- Use custom popup menu, #3862. -- Use "first" instead of "none" for configuration `suggest.selection`. -- Make "first" default for `suggest.selection`, like VSCode. -- Add default blue color for hlgroup `CocMenuSel`. - -# 2022-06-14 - -- Add highlight groups `CocListLine` and `CocListSearch`. - -# 2022-06-11 - -- Add configuration "notification.disabledProgressSources" -- Add "rounded" property to "floatConfig" - -# 2022-06-04 - -- Add configuration `workspace.openOutputCommand`. -- Log channel message of vim when `g:node_client_debug` enabled. - -# 2022-05-30 - -- Disable `progressOnInitialization` for language client by default. - -# 2022-05-28 - -- Support `repeat#set` for commands that make changes only. - -# 2022-05-24 - -- Add transition and annotation support for `workspace.applyEdits()`. -- Add command `workspace.undo` and `workspace.redo`. -- Remove configuration `coc.preferences.promptWorkspaceEdit`. -- Remove command `CocAction` and `CocFix`. - -# 2022-05-22 - -- Check for previous position when not able to find completion match. -- Add `content` support to `window.showMenuPicker()` - -# 2022-05-17 - -- Add `QuickPick` module. -- Add API `window.showQuickPick()` and `window.createQuickPick()`. - -# 2022-05-16 - -- Add properties `title`, `loading` & `borderhighlight` to `InputBox` - -# 2022-05-14 - -- Add `InputOption` support to `window.requestInput` -- Add API `window.createInputBox()`. - -# 2022-05-13 - -- Notification support like VSCode https://github.com/neoclide/coc.nvim/discussions/3813 -- Add configuration `notification.minProgressWidth` -- Add configuration `notification.preferMenuPicker` -- Support `source` in notification windows. - -# 2022-05-07 - -- Show sort method as description in outline view. -- Add configuration `outline.switchSortKey`, default to ``. -- Add configuration `outline.detailAsDescription`, default to `true`. -- Add variable `g:coc_max_treeview_width`. -- Add `position: 'center'` support to `window.showMenuPicker()` - -# 2022-05-06 - -- Use menu for `window.showQuickpick()`. -- Add configuration `outline.autoWidth`, default to `true`. - -# 2022-05-05 - -- Add key bindings to dialog (created by `window.showDialog()`) on neovim. - -# 2022-05-04 - -- Add `languages.registerInlayHintsProvider()` for inlay hint support. - -# 2022-04-25 - -- Add `LinkedEditing` support - -# 2022-04-23 - -- Add `WinScrolled` event to events. - -# 2022-04-20 - -- Select recent item when input is empty and selection is `recentUsedByPrefix`. -- Add `coc#snippet#prev()` and `coc#snippet#next()`. -- Add command `document.checkBuffer`. -- Add `region` param to `window.diffHighlights()`. - -# 2022-04-06 - -- `workspace.onDidOpenTextDocument` fire `contentChanges` as empty array when - document changed with same lines. - -# 2022-04-04 - -- Avoid `CompleteDone` cancel next completion. -- Avoid indent change on `` and `` during completion. -- Support `joinUndo` and `move` with `document.applyEdits()`. - -# 2022-04-02 - -- Change `suggest.triggerCompletionWait` default to `0`. -- Not trigger completion on `TextChangedP`. -- Remove configuration `suggest.echodocSupport`. -- Fix complettion triggered after ``. - -# 2022-03-31 - -- Check buffer rename on write. - -# 2022-03-30 - -- Improve words parse performance. -- Remove configurations `coc.source.around.firstMatch` and `coc.source.buffer.firstMatch`. -- Fix `coc.source.buffer.ignoreGitignore` not works - -# 2022-03-30 - -- Check document reload on detach. - -# 2022-03-29 - -- Add menu actions to refactor buffer. - -# 2022-03-12 - -- Avoid use `` for cancel completion. - -# 2022-03-05 - -- Make `WinClosed` event fires on `CursorHold` to support vim8. -- Add events `TabNew` and `TabClose`. -- Make outline reuse TreeView buffer. - -# 2022-03-02 - -- Add ultisnip option to `snippetManager.insertSnippet()` and - `snippetManager.resolveSnippet()`. -- Support ultisnip regex option: `/a` (ascii option). -- Support transform replacement of ultisnip, including: - - Variable placeholders, `$0`, `$1` etc. - - Escape sequence `\u` `\l` `\U` `\L` `\E` `\n` `\t` - - Conditional replacement: `(?no:text:other text)` - -# 2022-02-28 - -- Change `workspace.ignoredFiletypes` default value to `[]` - -# 2022-02-24 - -- Add `window.activeTextEditor`, `window.visibleTextEditors`. -- Add events `window.onDidChangeActiveTextEditor` `window.onDidChangeVisibleTextEditors`. -- Add class `RelativePattern`. -- Add `workspace.findFiles()`. - -# 2022-02-23 - -- Add `workspace.openTextDocument()` -- Add `Workspace.getRelativePath()`. -- Add `window.terminals` `window.onDidOpenTerminal` `window.onDidCloseTerminal` - and `window.createTerminal`. -- Add `exitStatus` property to `Terminal`. -- Support `strictEnv` in `TerminalOptions` on neovim. -- Deprecated warning for `workspace.createTerminal()`, - `workspace.onDidOpenTerminal` and `workspace.onDidCloseTerminal` - -# 2022-02-18 - -- Clear all highlights created by coc.nvim before restart. -- Support strike through for ansiparse. -- Support `highlights` for `Documentation` in float window. - -# 2022-02-17 - -- Change workspace configuration throw error when workspace folder can't be - resolved. -- Remove configuration `diagnostic.highlightOffset`. - -# 2022-02-15 - -- Add `events.race`. -- Change default `suggest.triggerCompletionWait` to 50. -- Support trigger completion after indent fix. - -# 2022-02-14 - -- Add `pumvisible` property to events. - -# 2022-02-10 - -- Add shortcut support for `window.showMenuPicker()`. -- Add configuration `dialog.shortcutHighlight` for shortcut highlight. -- Add configuration `list.menuAction` for choose action by menu picker. - -# 2022-02-09 - -- Add error log to `nvim_error_event`. -- Add `nvim.lua()` which replace `nvim.executeLua()` to typings.d.ts. - -# 2022-02-08 - -- Support `MenuItem` with disabled property for `window.showMenuPicker` -- Support show disabled code actions in menu picker. - -# 2022-02-07 - -- Change `:CocLocalConfig` to open configuration file of current workspace - folder. - -# 2022-02-05 - -- Support `version` from `textDocument/publishDiagnostics` notification's parameter. -- Support `codeDescription` of diagnostics by add href to float window. -- Support `showDocument` request from language server. -- Support `label` from DocumentSymbolOptions in outline tree. -- Support extra url use regexp under cursor with `openLink` action. -- Support `activeParameter` from signature information. -- Add `trimTrailingWhitespace`, `insertFinalNewline` and `trimFinalNewlines` to FormattingOptions. -- Add configuration `links.tooltip`, default to `false`. - -# 2022-02-04 - -- Add `--reverse` option to list. -- Add `` key-mapping to cancel list in preview window (neovim only). - -# 2022-02-02 - -- Remove `disableWorkspaceFolders` `disableDiagnostics` and `disableCompletion` - from language client option. -- Add configuration `documentHighlight.timeout`. -- Add `tabPersist` option to `ListAction`. -- Add `refactor` to `LocationList` - -# 2022-01-30 - -- Add configuration `diagnostics.virtualTextLevel`. -- Remove configuration `suggest.numberSelect` - -# 2022-01-26 - -- Use `nvim_buf_set_text` when possible to keep extmarks. - -# 2022-01-25 - -- Not trigger completion when filtered is succeed. -- Move methods `workspace.getSelectedRange` `workspace.selectRange` to `window` - module, show deprecated warning when using old methods. - -# 2022-01-23 - -- Support semantic tokens highlights from range provider. - -# 2022-01-22 - -- Not set `gravity` with api `nvim_buf_set_extmark` because highlight bug, wait neovim fix. -- Support watch later created workspace folders for file events. - -# 2022-01-21 - -- Changed semantic token highlight prefix from `CocSem_` to `CocSem`. -- Changed semantic token highlight disabled by default, use configuration - `semanticTokens.filetypes` -- Add configuration `semanticTokens.filetypes`. -- Add configuration `semanticTokens.highlightPriority`. -- Add configuration `semanticTokens.incrementTypes`. -- Add configuration `semanticTokens.combinedModifiers`. -- Add command `semanticTokens.refreshCurrent`. -- Add command `semanticTokens.inspect`. -- Add action `inspectSemanticToken`. -- Rework command `semanticTokens.checkCurrent` to show highlight information. -- Support semantic tokens highlight group composed with type and modifier. - -# 2022-01-21 - -- Add configuration `workspace.ignoredFolders`. -- Add configuration `workspace.workspaceFolderFallbackCwd`. - -# 2022-01-20 - -- Remove deprecated method `workspace.resolveRootFolder`. - -# 2022-01-17 - -- Extend `buffer.updateHighlights` to support `priority`, `combine`, `start_incl` and `end_incl`. -- Add configuration `diagnostic.highlightPriority`. -- Add configuration `colors.filetypes` and `colors.highlightPriority`. - -# 2022-01-16 - -- Add configuration `codeLens.position`. - -# 2022-01-14 - -- Add configuration `suggest.selection`. - -# 2022-01-13 - -- `codeLens.separator` now defaults to `""` and will be placed above lines on neovim >= 0.6.0 . -- Add configurations 'diagnostic.locationlistLevel', 'diagnostic.signLevel', 'diagnostic.messageLevel'. - -# 2022-01-12 - -- Add document.lineAt(), export TextLine class. -- Upgrade node-client, support nvim.exec(). -- Add documentHighlight.priority configuration. - -# 2019-08-18 0.0.74 - -- feat(cursors): support multiple cursors. -- feat(extensions): install missing extensions by CocInstall. -- feat(extensions): add command `extensions.forceUpdateAll`. -- feat(completion): rework preselect feature. -- feat(extension): use request for fetch package info. -- feat(language-client): support disableDynamicRegister configuration. -- feat(list): paste from vim register support on insert mode #1088. -- feat(plugin): add CocHasProvider(), close #1087. -- refactor(outline): not exclude variables and callback. -- refactor(diagnostic): remove timeout on InsertLeave. - -# 2019-07-11 0.0.73 - -- fix(completion): fix map of number select -- fix(languages): fix cursor position with snippet -- fix(completion): fix cursor position with additionalTextEdits -- fix(position): fix rangeOverlap check #961 -- fix(list): not change guicursor when it's empty -- fix(list): fix filter not work on loading -- fix(list): fix custom location list command not work -- fix(util): highlight & render on vim8 -- fix(handler): fix getCommands -- fix(handler): not check lastInsert on trigger signatureHelp -- fix(handler): fix check of signature help trigger -- fix(language-client): configuration for configured server, closes #930 -- fix(diagnostic): clear diagnostics on filetype change -- feat(plugin): add download & fetch modules -- feat(plugin): add highligher module -- feat(refactor): add `(coc-refactor)` for refactor window -- feat(extension): use mv module for folder rename -- feat(extension): support install tagged extension -- feat(extension): support custom extension root `g:coc_extension_root` -- feat(handler): close signature float window on ')' -- feat(list): support `g:coc_quickfix_open_command` -- feat(list): add eval action -- feat(list): add --tab list option -- feat(list): use highligher module for showHelp -- feat(terminal): add noa on window jump -- feat(terminal): support vim8 -- feat(diagnostic): add diagnosticRelated support -- feat(diagnostic): use text properties on vim8 -- feat(handler): improve signature float window - -# 2019-07-01 - -- feat(plugin): add CocStatusChange autocmd -- feat(extension): support both npm and yarn. -- feat(plugin): work on vim 8.0 -- feat(extensions): add lock & doc actions to extension source -- feat(extension): add proxy auth support (#920) -- feat(source): not change startcol for file source -- feat(completion): no numberSelect for number input -- feat(extensions): Use yarn when npm not found -- feat(completion): no popup for command line buffer -- feat(plugin): support only for codeActions action -- feat(task): debounce stdout -- feat(plugin): add keymaps for selection ranges -- feat(plugin): add function textobj -- feat(list): restore window height, closes #905 -- feat(handler): support signature.floatTimeout -- feat(configuration): support change of workspace configuration -- feat(diagnostic): add keymaps for jump error diagnostics -- feat(plugin): delay start on gvim, fix #659 - -# 2019-06-15 - -- feat(plugin): add popup support of vim -- refactor(completion): improve float support -- refactor(floating): remove unused code -- refactor(workspace): replace find-up -- refactor(handler): improve message for fold method -- fix(virtualtext): invalid highlight tag (#874) -- fix(snippets): fix plaintext check -- fix(highlight): catch error of child_process.spawn -- fix(highlight): use v:progpath, fix #871 -- fix(floatFactory): escape feedkeys -- fix(handler): fix getCurrentFunctionSymbol not work - -# 2019-06-12 - -- feat(document): add getVar method -- fix(util): not break selection on message -- fix(workspace): fix jumpTo not work on vim8 -- fix(completion): trigger completion with word character -- refactor(handler): return boolean result -- perf(workspace): improve jump performance -- fix(util): Escape filename for jump (#862) -- refactor(plugin): not show empty hover -- feat(outline): ignore callback function -- feat(workspace): support list of events with registerAutocmd -- fix(workspace): fix jump with tab drop -- refactor(language-client): change API of selectionRanges - -# 2019-06-09 - -- **Break change** `CocHighlightText` link to `CursorColumn` by default. -- **Break change** logger folder changed to `$XDG_RUNTIME_DIR` when exists. -- Add `` and `` support for list, #825. -- Add function `coc#add_command()`. -- Add `disableDiagnostics` & `disableCompletion` to languageclient configuration. -- Add `signature.triggerSignatureWait` configuration. -- Add vim-repeat support for run command and quickfix. -- Add preferred `codeAction` support. -- Add `prompt.paste` action to list. -- Add title as argument support for `codeAction` action. -- Add `suggest.floatEnable` configuration. -- Add `editor.action.organizeImport` command. -- Add `:CocAction` and `:CocFix` commands. -- Add `codeActions` action. -- Fix issues with list. - -# 2019-05-30 - -- **Break change** logger folder changed. -- Add support of vim-repeat for `` keymaps. -- Add `CocRegistNotification()` function. -- Add argument to rename action. -- Add `suggest.disableMenuShortcut` configuration. -- Add glob support for root patterns. -- Add `` keymap to list window. -- Add shortcut in sources list. -- Add `list.previewSplitRight` configuration. -- Add `triggerOnly` property to source. -- Add warning for duplicate extension. -- Bug fixes. - -# 2019-05-07 - -- **New feature** load extensions from coc-extensions folder. -- Add `workspace.renameCurrentFile` command. -- Add `FloatBuffer`, `FloatFactory` and `URI` to exports. -- Add `resolveItem` support to list. -- Fix prompt can't work when execute list action. -- Fix ansiparser for empty color ranges. -- Fix highlight only work with first 8 items. - -# 2019-04-27 - -- **Break change** vim-node-rpc not required on vim. -- **Break change** python not required on vim. -- **Break change** complete items would refreshed after 500ms when not finished. -- Add `additionalSchemes` for configured language server. -- Add support for jumpCommand as false. -- Fix `diagnostic.level` not work. - -# 2019-04-09 - -- **Break change** `--strictMatch` option of list renamed to `--strict` -- **Break change** `suggest.reloadPumOnInsertChar` support removed. -- **Break change** no more binary release. -- **Break change** logic for resolve workspace folder changed. -- Add `Task` module. -- Add `getCurrentFunctionSymbol` action. -- Add `list.source.outline.ctagsFiletypes` setting. -- Add `suggest.disableMenu` and `suggest.disableMenu` settings. -- Add `equal` support for complete items. -- Add support for do action with visual select lines of list. -- Add expand tilder support for language server command. -- Add switch matcher support to list. -- Add select all support to list. -- Add quickfix action to list. -- Add `selectionRanges` of LSP. -- Add load extensions for &rtp support. -- Add `coc#on_enter()` for formatOnType and add new lines on enter. -- Improve completion by support trigger completion when pumvisible. -- Remove document check on `BufWritePre`. - -# 2019-03-31 - -- **Break change** not using vim-node-rpc from npm modules any more. -- **Break change** rename `_` to `CocRefresh`. -- Fix wrong format options send to server. -- Fix throw error when extension root not created. -- Fix MarkedString not considered as markdown. -- Fix echo message on vim exit. -- Fix error throw on file watch. -- Fix unexpected update of user configuration. - -# 2019-03-28 - -- Add `workspace.resolveRootFolder`. -- Add `diagnostic.joinMessageLines` setting. -- Add `suggest.completionItemKindLabels` setting. -- Add `memento` support for extension. -- Add `workspace.getSelectedRange`. -- Add `Terminal` module. -- Add command `workbench.action.reloadWindow`. -- Fix extension not activated by command. -- Fix broken undo with floating window. -- Fix document create possible wrong uri & filetype. -- Improve highlight with floating window. - -# 2019-03-24 - -- **Break change** make number input not trigger completion. -- **Break change** make none keywords character doesn't filter completion. -- Add functions for check snippet state. -- Add setting `diagnostic.checkCurrentLine`. -- Fix `signature.target` not work. -- Fix flick of signature window. -- Fix EPIPE error of node-client. -- Fix wrong root of FileWatchSysmtem. - -# 2019-03-19 - -- **Break change** signature settings now starts `signature`. -- **Break change** default request timeout changed to 5s. -- **Break change** `commands.executeCommand` return promise. -- Add `coc.preferences.signatureHelpTarget`. -- Add `diagnostic.maxWindowHeight` & `signature.maxWindowHeight`. -- Add `diagnostic.enableSign`. -- Add support for `$COC_NO_PLUGINS`. -- Add keymaps: `(coc-float-hide)` and `(coc-float-jump)`. -- Add `coc.preferences.enableFloatHighlight`. -- Fix issues with floating window. -- Fix critical performance issue on diff text. -- Improve color of `CocHighlightText`. -- Improve sort of complete items. -- Improve extension list with version and open action. - -# 2019-03-16 - -- **Break change** change vim config home on windows to '\$HOME/vimfiles'. -- Add highlights to float windows. -- Add CocLocationsAsync(). -- Add support for `b:coc_suggest_disable`. -- Add support for `b:coc_suggest_blacklist`. -- Add setting `diagnostic.messageTarget`. -- Add floating window support for signatures. -- Fix issues with diagnostic float. -- Fix info of completion item not shown. -- Fix CocUpdateSync not work without service start. -- Fix wrong indent spaces of snippets. - -# 2019-03-11 - -- **Break change** change buffers instead of disk file for `workspace.applyEdits`. -- **Break change** add config errors to diagnostic list instead of jump locations. -- **Break change** hack for popup menu flicker is removed, use `suggest.reloadPumOnInsertChar` to enable it. -- **Break change** use `nvim_select_popupmenu_item` for number select completion. -- Add floating window for completion items. -- Add floating window support for diagnostics. -- Add floating window support for hover documentation. -- Add `coc#on_enter()` for notify enter pressed. -- Add setting `coc.preferences.useQuickfixForLocations`. -- Add support of `g:coc_watch_extensions` for automatic reload extensions. -- Add command: `editor.action.doCodeAction`. -- Fix service on restarted on windows after rebuild. -- Fix config of airline. -- Fix relative path of watchman. -- Improve Mru model. - -# 2019-03-03 - -- **Break change** signature change of `workspace.registerKeymap`. -- **Break change** `` of CocList can't be remapped any more. -- **Break change** use `yarnpkg` command instead of `yarn` when possible. -- **Break change** `noinsert` is removed from `completeopt` when `noselect` is - enabled, `` would break line by default. -- Add setting `diagnostic.refreshAfterSave`. -- Add chinese documentation. -- Add support of multiple line placeholder. -- Fix edit of nested snippet placeholders. -- Fix possible infinite create of documents. -- Fix check for resume completion. - -# 2019-02-25 - -- **Break change** default of `suggest.detailMaxLength` changed to 100. -- **Break change** option of `workspace.registerKeymap` changed. -- Add settings: `suggest.detailField`. -- Add check for autocmd in health check. -- Add trigger patterns support for complete sources. -- Add support of `coc-snippets-expand-jump` -- Add `source` option for completion start. -- Add `sources.createSource` method. - -# 2019-02-22 - -- **Break change** some configurations have been renamed, checkout #462. -- **Break change** no longer automatic trigger for CursorHoldI #452. -- **Break change** add preview option of `completeopt` according to `suggest.enablePreview`. -- Add statusItem for CocUpdate. -- Add `-sync` option for `:CocInstall` -- Add support for floating preview window. -- Add more module export. -- Fix check of vim-node-rpc throw error. -- Fix wrong line for TextEdit of complete item. -- Fix diagnostics not cleared on service restart. - -# 2019-02-17 - -- **Break change** completion resolve requires CompleteChanged autocmd. -- **Break change** mapping of space on insert mode of list removed. -- **Break change** kind of completion item use single letter. -- Fix snippet not works on GUI vim. -- Fix cursor vanish on vim by use timer hacks. -- Fix behavior of list preview window. -- Fix python check on vim. -- Fix CocJumpPlaceholder not fired. -- Fix vscode-open command not work. - -# 2019-02-12 - -- **Break change** function `coc#util#clearmatches` signature changed. -- Add check for python gtk module. -- Add check for vim-node-rpc update error. -- Fix source name of diagnostics. -- Fix empty buffers created on preview. -- Fix trigger of `CursorHoldI`. - -# 2019-02-11 - -- **Break change:** internal filetype of settings file changed to jsonc. -- **Break change:** `coc#util#install` changed to synchronize by default. -- **Break change:** no document highlight would be added for colored symbol. -- **Break change:** remove `coc.preferences.openResourceCommand`. -- Add fallback rename implementation which rename symbols on current buffer. -- Add command `:CocUpdateSync`. -- Add `coc.preferences.detailMaxLength` for slice detail on completion menu. -- Add cancel support for completion. -- Add `ctags` as fallback of document symbols list. -- Add default key-mappings for location actions. -- Add python check on vim. -- Add `disableSyntaxes` support for completion sources. -- Add support for change `isProgress` of `StatusBarItem` -- Add check of coc.nvim version for `CocUpdate` -- Add `coc.preferences.previewAutoClose`, default true. -- Add `workspace.add registerAutocmd`. -- Fix highlight not cleared on vim -- Fix health check of service state. -- Fix CursorHoldI not triggered on neovim. -- Fix sort of list not stable. - -# 2019-02-04 - -- **Break change:** no messages when documentSymbol and workspaceSymbol provider - not found. -- Add support for configure sign in statusline. -- Add help action for list. -- Fix parse error on extensions update. -- Fix wrong uri on windows. -- Fix cancel list without close ui. -- Improve startup time by remove jobwait. - -# 2019-02-02 - -- **Break change:** extensions now update automatically, prompt is removed. -- Add check for extension compatibility. -- Add transform support for placeholder. -- Add check for node version. -- Add error check for list. -- Add settings: `coc.preferences.diagnostic.virtualTextLines`. -- Fix preview window not shown. -- Fix highlight not cleared on vim. -- Fix highlight commands of list block vim on start. -- Improve extension load. -- Improve list experience. - -# 2019-01-28 - -- **Break change:** `coc.preferences.diagnostic.echoMessage` changed to enum. -- Add mru support for commands and lists list. -- Add `coc.preferences.diagnostic.refreshOnInsertMode` -- Add `Mru` module. -- Improve highlight for lists, support empty `filterLabel`. -- Fix `findLocations` not work with nest locations. -- Fix cursor position after apply additionalTextEdits. - -# 2019-01-24 - -- **Break change:** python code for denite support moved to separated repo. -- **Break change:** Quickfix list no longer used. -- Add list support. -- Add configuration: `coc.preferences.diagnostic.virtualText`. -- Add watch for `&rtp` change. -- Add support for configure `g:coc_user_config` and `g:coc_global_extensions` -- Add support for send request to coc on vim start. -- Add `g:coc_start_at_startup` support. -- Add configuration: `coc.preferences.invalidInsertCharacters`. -- Add configuration: `coc.preferences.snippetStatusText`. -- Add `coc#_insert_key()` for insert keymap. -- Add `workspace.registerExprKeymap()`. -- Add detect for `vim-node-rpc` abnormal exist. -- Add `requireRootPattern` to languageserver configuration. -- Fix git check, always generate keywords. -- Fix crash when `righleft` set to 1 on neovim. -- Fix snippet position could be wrong. - -# 2019-01-09 - -- **Break change:** throw error when languageserver id is invalid. -- Add watcher for languageserver configuration change. -- Fix possible invalid package.json. -- Fix applyEdits not work sometimes. -- Fix server still started when command search failed. -- Fix log file not writeable. -- Improve completion performance. - -# 2019-01-03 - -- **Break change:** using of `g:rooter_patterns` is removed. -- **Break change:** diagnostics would be updated in insert mode now. -- Add configuration: `coc.preferences.rootPatterns` -- Add `TM_SELECTED_TEXT` and `CLIPBOARD` support for snippets. -- Fix check of latest insert char failed. -- Fix highlight not cleared sometimes. - -# 2019-01-01 - -- Fix issues with completion. - -# 2018-12-31 - -- **Break change:** created keymaps use rpcrequest instead of rpcnotify. -- **Break change:** snippets provider is removed, use `coc-snippets` for - extension snippets. -- Add command: `coc.action.insertSnippet` -- Fix position of snippets. -- Fix modifier of registered keymaps. -- Fix completion triggered on complete done. -- Fix closure function possible conflict. -- Fix unexpected snippet cancel. -- Fix document applyEdits, always use current lines. -- Fix fail of yarn global command. -- Fix check of changedtick on completion done. -- Fix line used for textEdit of completion. -- Fix snippet canceled by `formatOnType`. -- Fix `CocJumpPlaceholder` not fired -- Optimize content synchronize. - -# 2018-12-27 - -- **Break change:** no more message on service ready. -- **Break change:** vim source now registered as extension. -- **Break change:** complete item sort have reworked. -- **Break change:** request send to coc would throw when service not ready. -- Add support for check current state on diagnostic update. -- Add `env` opinion for registered command languageserver. -- Add outputChannel for watchman. -- Add `coc#_select_confirm()` for trigger select and confirm. -- Add `coc.preferences.numberSelect`. -- Add priority support for format provider. -- Add `workspace.watchGlobal` and `workspace.watchOption` methods. -- Fix cursor disappear on `TextChangedP` with vim. -- Fix coc process not killed when update on windows. -- Fix snippet broken on vim. -- Fix support of startcol of completion result. -- Fix `labelOffsetSupport` wrong position. -- Fix flicking on neovim. -- Fix unicide not considered as iskeyword. -- Fix watchman client not initialized sometimes. -- Improve performance for parse iskeyword. -- Not echo message on vim exit. -- Not send empty configuration change to languageserver. - -# 2018-12-20 - -- **Break change** configuration for module language server, transport now - require specified value. -- **Break change** new algorithm for socre complete items. -- Add command `workspace.clearWatchman`. -- Add `quickfixs`, `doCodeAction` and `doQuickfix` actions. -- Add `g:vim_node_rpc_args` for debug purpose. -- Add `coc#add_extension()` for specify extensions to install. -- Fix clients not restarted on CocRestart. -- Fix `execArgv` and `runtime` not work for node language server. -- Fix detail of complete item not echoed sometimes. -- Fix actions missing when registered with same clientId. -- Fix issues with signature echo. -- Fix uri is wrong with whitespace. -- Improve highlight performance with `nvim_call_atomic`. - -# 2018-12-17 - -- **Break change** `vim-node-rpc` now upgrade in background. -- Add `ignoredRootPaths` to `languageserver` option. -- Add detect of vim running state. -- Add `client.vim` for create clients. -- Fix possible wrong current line of `completeResolve`. -- Fix snippet not work with `set virtualedit=all`. -- Fix default timeout to 2000. -- Fix file mode of log file. - -# 2018-12-12 - -- **Break change** `fixInsertedWord` fix inserted word which ends with word - after. -- **Break change** `onCompleteSelect` is removed. -- Add `workspace.registerKeymap` for register keymap. -- Add match score for sort complete items. -- Fix possible connection lost. -- Fix priority of diagnostic signs. -- Fix possible wrong uri. -- Fix `RevealOutputChannelOn` not default to `never`. -- Fix possible wrong line used for textEdit of complete item. -- Fix possible wrong cursor position of snippet after inserted. - -# 2018-12-08 - -- **Break change** default rootPath would be directory of current file, not cwd. -- **Break change** codeLens feature now disabled by default. -- **Break change** diagnostic prev/next now loop diagnostics. -- Add support of neovim highlight namespace. -- Add support for undo `additionalTextEdits` on neovim -- Fix configuration resolve could be wrong. -- Fix word of completion item could be wrong. -- Fix rootPath could be null. -- Fix highlight not cleared on restart. - -# 2018-12-06 - -- **Break change** `RevealOutputChannelOn` of language client default to - `never`. -- Fix can't install on windows vim. -- Fix `displayByAle` not clearing diagnostics. -- Add check for `vim-node-rpc` update on vim. -- Add `Resolver` module. -- Improve apply `WorkspaceEdit`, support `0` as document version and merge - edits for same document. - -# 2018-12-05 - -- Add `CocJumpPlaceholder` autocmd. -- Add `rootPatterns` to `languageserver` config. -- Add setting: `coc.preferences.hoverTarget`, support use echo. -- Add setting `coc.preferences.diagnostic.displayByAle` for use ale to display errors. -- Add setting `coc.preferences.extensionUpdateCheck` for control update check of - extensions. -- Add `coc#config` for set configuration in vim. -- Fix rootPath not resolved on initialize. -- Fix possible wrong `tabSize` by use `shiftwidth` option. -- Fix trigger of `documentColors` request. -- Fix `vim-node-rpc` service not work on windows vim. -- Fix `codeLens` not works. -- Fix highlight of signatureHelp. -- Fix watchman watching same root multiple times. -- Fix completion throw undefined error. -- Fix `open_terminal` not works on vim. -- Fix possible connection lost by use notification when possible. -- Fix process not terminated when connection lost. -- Rework diagnostics with task sequence. -- Rework configuration with more tests. - -# 2018-11-28 - -- _Break change_ signature help reworked, vim API for echo signature changed. -- Add `:CocInfo` command. -- Add trigger for signature help after function expand. -- Add echo message when provider not found for some actions. -- Add support for `formatexpr` -- Add support for locality bonus like VSCode. -- Add support of `applyAdditionalLEdits` on item selected by `` -- Add `coc.preferences.useQuickfixForLocations` -- Add `coc.preferences.messageLevel` -- Add support for trigger command which not registered by server. -- Add `g:coc_denite_quickfix_action` -- Fix insert unwanted word when trigger `commitCharacter`. -- Fix rpc request throw on vim. -- Fix `data` of complete item conflict. -- Fix code action not work sometime. -- Fix `coc.preferences.diagnostic.locationlist` not work. -- Fix `coc.preference.preferCompleteThanJumpPlaceholder`. -- Fix `workspace.jumpTo` not work sometime. -- Fix line indent for snippet. -- Fix trigger of `signatureHelp` and `onTypeFormat`. - -# 2018-11-24 - -- **Break change** sources excluding `around`, `buffer` or `file` are extracted - as extensions. -- **Break change** custom source doesn't exist any more. -- Add `coc.preferences.preferCompleteThanJumpPlaceholder` to make jump - placeholder behavior as confirm completion when possible. -- Add `CocDiagnosticChange` autocmd for force statusline update. -- Add `onDidUnloadExtension` event on extension unload. -- Fix `getDiagnosticsInRange`, consider all interactive ranges. -- Fix completion throw when `data` on complete item is `string`. -- Fix `commitCharacters` not works. -- Fix workspace methods: `renameFile`, `deleteFile` and `resolveRoot`. -- Fix textEdit of builtin sources not works. - -# 2018-11-19 - -- **Break change** snippet support reworked: support nest snippets, independent - session in each buffer and lots of fixes. -- **Break change** diagnostic list now sort by severity first. -- Add commands: `:CocUninstall` and `:CocOpenLog` -- Add cterm color for highlights. -- Add line highlight support for diagnostic. -- Add `coc.preferences.fixInsertedWord` to make complete item replace current word. -- Fix check confirm not works on vim sometimes. -- Fix check of `vim-node-rpc`. -- Fix preselect complete item not first sometimes. -- Improve completion sort result by consider more abort priority and recent - selected. -- Improve colors module, only highlight current buffer and when buffer changed. -- Improve `doc/coc.txt` - -# 2018-11-13 - -- **Break change** default completion timeout changed to 2s. -- **Break change** snippet session not canceled on `InsertLeave`, use - `` in normal mode to cancel. -- Add document color support. -- Add CocAction 'pickColor' and 'colorPresentation'. -- Add prompt for install vim-node-rpc module. -- Add support for `inComplete` completion result. -- Add status item for snippet session. -- Add support for fix inserted text of snippet completion item. -- Fix document highlight not cleared. -- Fix cancel behavior of snippet. -- Fix range check of edit on snippet session. -- Fix check of completion confirm. -- Fix highlight group 'CocHighlightWrite' not work. -- Fix command `editor.action.rename` not works. -- Fix throw error before initialize. -- Fix `g:coc_node_path` not working. -- Fix file source throw undefined error. -- Improve logic of sorting completion items, strict match items comes first. - -# 2018-11-07 - -- **Break change** word source removed from custom sources, enabled for markdown - by default. -- **Break change** ignore sortText when input.length > 3. -- **Break change** show prompt for install `coc-json` when not found. -- Fix document content synchronize could be wrong. -- Fix filetype not converted on completion. -- Fix complete item possible not resolved. -- Improve document highlight, no highlight when cursor moved. -- Improve completion score, use fuzzaldrin-plus replace fuzzaldrin. - -# 2018-11-02 - -- **Break change** no items from snippets source when input is empty. -- **Break change** `javascript.jsx` would changed to `javascriptreact` as languageId. -- **Break change** `typescript.tsx` would changed to `typescriptreact` as languageId. -- Add support for `commitCharacters` and `coc.preferences.acceptSuggestionOnCommitCharacter`. -- Add setting: `coc.preferences.diagnostic.level`. -- Add `g:coc_filetype_map` for customize mapping between filetype and languageId. -- Add `g:coc_node_path` for custom node executable. -- Add `workspaceFolders` feature to language client. -- Add `~` to complete item of snippet source. -- Add `onDidChangeWorkspaceFolder` event -- Fix `eol` issue by check `eol` option. -- Fix `workspace.document` could be null. -- Fix `workspaceFolder` could be null. -- Fix diagnostic for quickfix buffer. -- Fix resolve of `coc.preferences.rootPath` - -# 2018-10-29 - -- **Break change** diagnostic reworked, no refresh on insert mode. -- **Break change** keep `sortText` on filter for better result. -- **Break change** prefer trigger completion than filter, same as VSCode. -- **Break change** filetype of document would be first part of `&filetype` split by `.`. -- **Break change** prefer label as abbr for complete item. -- Fix creating wrong `textEdit` for snippet. -- Fix `startcol` of `CompleteResult` not working. -- Fix `workspaceConfiguration.toJSON` return invalid result. -- Fix `workspace.readFile` not synchronized with buffer. -- Fix `workspace.rootPath` not resolved as expected. -- Fix `CompletionItem` resolved multiple times. -- Fix check of `latestInsert` on completion. -- Fix `formatOnType` possible add unnecessary indent. -- Fix document content synchronized on vim. -- Fix confirm check of completion for all source. -- Fix document possible register multiple times. -- Fix completion always stopped when input is empty. -- Add warning message when definition not found. -- Add `redraw` after `g:coc_status` changed. -- Remove change of `virtualedit` option of snippet. -- Improved performance of filter completion items. - -# 2018-10-25 - -- Fix `implementation` and `typeDefinition` of language client not working. -- Fix `diffLines` return wrong range. -- Fix `setqflist` and `setloclist` not works on vim. -- Fix snippets and `additionalTextEdits` not works on vim. -- Fix append lines not works on vim. -- Fix highlight action not works on vim. -- Fix null version of `TextDocumentIdentifier` not handled. -- Add `workspace.registerTextDocumentContentProvider` for handle custom uri. -- Add `workspace.createStatusBarItem` method. - -# 2018-10-21 - -- **Break change**: `triggerAfterInsertEnter` now respect `minTriggerInputLength`. -- Add `coc.preferences.minTriggerInputLength`. -- Add command: `:CocCommand`. -- Fix `position` of `provideCompletionItems`. -- Fix content change not trigger after completion. -- Fix default sorters & matchers of denite sources. -- Fix `outputChannel` wrong `buftype`. -- Fix completion not works with `textEdit` add new lines. -- Fix first item not resolved when `noselect` is disabled -- Remove using of `diff` module. - -# 2018-10-18 - -- **Break change**: all buffers are created as document. -- **Break change**: retrieve workspace root on document create. -- Fix `uri` for all buffer types. -- Fix bad performance on parse keywords. -- Fix check of language client state. -- Fix register of `renameProvider` -- Fix `CocRequestAsync` not work. -- Fix `workspace.openResource` error with `wildignore` option. -- Fix output channel can't shown if hidden. -- Fix extension activate before document create. -- Add command `vscode.open` and `editor.action.restart`. -- Add `workspace.requestInput` method. -- Add support of `g:rooter_patterns` -- Add `storagePath` to `ExtensionContext` -- Add `workspace.env` property. -- Add support of scoped configuration. -- Disable buffer highlight on vim. - -# 2018-10-14 - -- **Break change** API: `workspace.resoleModule` only does resolve. -- **Break change** extension would still be loaded even if current coc version - miss match. -- **Break change** variables are removed from view of `Denite coc-symbols` -- Fix `workspace.applyEdits` -- Fix `console.log` throws in extension. -- Fix invalid `workspace.root` with custom buffer schema. -- Fix possible crash on neovim 0.3.1 by not attach terminal buffer. -- Fix jump position not stored when jump to current buffer position. -- Fix install function not works on vim. -- Add support for custom uri schema for `workspace.jumpTo` and `workspace.openResource` -- Add `workspace.findUp` for find up file of current buffer. -- Add `env` option for custom language server config. -- Add vim function: `CocRequest` and `CocRequestAsync` for send request to - language server in vim. -- Add `coc.preferences.parseKeywordsLimitLines` and `coc.preferences.hyphenAsKeyword` - for buffer parse. -- Rework completion for performance and accuracy. - -# 2018-10-05 - -- **Break change**, `workspace.onDidChangeConfiguration` emit `ConfigurationChangeEvent` now. -- Add `position` to function `coc#util#open_terminal`. -- Improve performance of completion by use vim's filter when possible. -- Fix service start multiple times. -- Fix parse of `iskeyword` option, consider `@-@`. -- Fix completion of snippet: cancel on line change. - -# 2018-10-01 - -- Improved document `didChange` before trigger completion. -- Add option `coc.preferences.triggerCompletionWait`, default 60. -- Add watch for `iskeyword` change. -- Fix snippet jump not works sometime. -- Fix possible wrong `rootPath` of language server. -- Fix highlight of highlight action not using terminal colors. -- Fix detect for insert new line character. - -# 2018-09-30 - -- Add quickfix source of denite and fzf -- Add option `coc.preferences.rootPath` -- Add option `revealOutputChannelOn` to language server. -- Fix jump of placeholder. -- Fix empty root on language server initialize. - -# 2018-09-28 - -- **Break change**: `coc.preferences.formatOnType` default to `false`. -- **Break change**: snippet completion disabled in `string` and `comment`. -- Add support for register local extension. -- Add title for commands in `Denite coc-command` -- Fix prompt hidden by echo message. -- Fix contribute commands not shown in denite interface. -- Fix parse of `iskeyword`, support character range. -- Fix `triggerKind` of completion. -- Fix install extension from url not reloaded. - -# 2018-09-27 - -- **Break change**: `:CocDisable` disabled all events from vim. -- **Break change**: new snippet implementation. - - Support multiple line snippet. - - Support VSCode snippet extension. - - Support completion of snippets from snippet extension. -- Add highlight groups for different severity. -- Add `coc.preferences.formatOnType` option. -- Add `coc.preferences.snippets.enable` option. -- Fix snippet not works as `insertText`. -- Fix echo message with multiple lines. -- Fix `signatureHelp` with `showcmd` disabled. -- Fix location list cleared on `:lopen`. -- Fix diagnostic info not cleared on `:CocDisable` -- Fix diagnostic info not cleared on buffer unload. -- Fix buffer highlight not cleared on `highlight` action. -- Fix format on type not work as expected. - -# 2018-09-24 - -- **Break change**: use `CursorMove` instead of `CursorHold` for diagnostic - message. -- **Break change**: direct move to diagnostic position would show diagnostic - message without truncate. -- **Break change**: snippet would be canceled when mode changed to normal, no - mapping of `` any more. -- Add format document on `insertLeave` when `onTypeFormat` is supported. -- Add buffer operations on resource edit. -- Add `uninstall` action for `Denite coc-extension`. -- Fix active extension on command not working. -- Fix delete file from resource edit not works. - -# 2018-09-20 - -- Fix diagnostic check next offset for diagnostics. -- Add `(coc-diagnostic-info)` for show diagnostic message without - truncate. - -# 2018-09-15 - -- Fix wrong configuration on update. -- Fix install command with tag version. -- Fix using of unsafe `new Buffer`. -- Add support of trace format & resource operations. -- Add support of json validation for extension. -- Add support of format on save by `coc.preferences.formatOnSaveFiletypes` - -# 2018-09-10 - -- Add `Denite coc-extension` for manage extensions. -- Add actions for manage extension including `toggleExtension` `reloadExtension` - `deactivateExtension` -- Add check for extension update everyday. -- Fix extensions using same process of coc itself. -- Fix `configurationSection` should be null if none was specified. - -# 2018-09-07 - -- **Break change**: all extension all separated from core, checkout - [Using coc extension](https://github.com/neoclide/coc.nvim/wiki/Using-coc-extensions) -- Fix `textDocumentSync` option not work when received as object. -- Fix wrong diagnostic info when using multiple lint servers. -- Use `CursorHold` for show diagnostic message. -- Add option `coc.preferences.enableMessage` to disable showing of diagnostic - message. -- Add new events module for receive vim events. -- Add support for `prepareRename`. -- Add support for `CodeActionOptions` - -# 2018-08-30 - -- Fix wrong `triggerKind` from VSCode. -- Add `(coc-openlink)` for open link. -- Add `typescript.jsx` as valid typescript type. - -# 2018-08-23 - -- Fix sometimes client status invalid. -- Add multiply provider support for all features. -- Add `documentLink` support -- Add `documentHighlight` support -- Add `foldingRange` support -- Add support of `documentSelector` same as VSCode - -# 2018-08-21 - -- Fix diagnostic and arguments of tsserver. -- Add `keepfocus` option for `open_terminal`. -- Improve error catch of autocmds. -- Add `onTypeFormat` feature for language server -- Add `onTypeFormat` support for tsserver. -- Refactor and more tests of workspace. -- Fix `window/showMessageRequest` request. -- Use `callAsync` for async request to vim. -- Add `CocActionAsync` function send async request to server. - -# 2018-08-17 - -- Fix exists terminal buffer not watched. -- Fix buffer not attached after `edit!`. -- Fix clean diagnostics of `tsserver.watchBuild` command. -- Fix refresh of buffer. -- Fix document not found on `BufEnter`. - - Use `rpcrequest` for `BufCreate` - -- Fix no permission of log file. - - Disable create log file for root user. - -- Add more command for tsserver: - - - `tsserver.reloadProjects` - - `tsserver.openTsServerLog` - - `tsserver.goToProjectConfig` - - `tsserver.restart` - -- Add test for workspace. - -# 2018-08-16 - -- Improved for tsserver: - - - Add `watchBuild` command for build current project with watch in terminal. - - Support of untitled buffer - - Support `projectRootPath` - -- Fix detach error of document. -- Fix trigger characters not works for some source. -- Fix document possible not sync before save. -- Fix denite errors with 0 as result. -- Fix wrong arguments of tsserver refactor command. -- Use `drop` for workspace `openResource`. -- Add clear coc signs on `:CocRestart`. -- **Break change** all buffer types except `nofile` `help` and `quickfix` are - watched for changes. - -# 2018-08-15 - -- Fix filter of completion items on fast input. -- Fix sometimes fails of include & neosnippet source. -- Fix sometimes fails to find global modules. -- Improve complete source initialization. - - - Always respect change of configuration. - -- Add ability to start standalone coc service for debugging. - - - Use `NVIM_LISTEN_ADDRESS=/tmp/nvim nvim` to start - neovim. - - Start coc server by command like `node bin/server.js` - -- Add ability to recover from unload buffer. - - Sometimes `bufReadPost` `BufEnter` could be not be fired on buffer create, - check buffer on `CursorHold` and `TextChanged` to fix this issue. - -- Add tsserver features: `tsserver.formatOnSave` and `tsserver.organizeImportOnSave` - - Both default to false. - -- Add tests for completion sources. - -# 2018-08-14 - -- Fix remote source not working. -- Fix sort of completion items. -- Fix EPIPE error from net module. -- Add `tslint.lintProject` command. -- Add config `coc.preferences.maxCompleteItemCount`. -- Add `g:coc_auto_copen`, default to `1`. - -# 2018-08-12 - -- **Break change** `:CocRefresh` replaced with `call CocAction('refreshSource')`. -- Add support filetype change of buffer. -- Add basic test for completion. -- Improve loading speed, use child process to initialize vim sources. -- Improve install.sh, install node when it doesn't exist. -- Improve interface of workspace. -- Fix loading of configuration content. - -# 2018-08-11 - -- Fix configuration content not saved on change. -- Fix thrown error on watchman not found. -- Fix incompatible options of `child_process`. -- Fix location list for diagnostics. - - - Reset on `BufWinEnter`. - - Available for all windows of single buffer. - - Use replace on change for coc location list. - - Add debounce. - -- Fix signature help behaviour, truncate messages to not overlap. -- Reworks sources use async import. - -# 2018-08-10 - -- Fix dispose for all modules. -- Add support for multiple `addWillSaveUntilListener`. -- Fix `startcol` for json server. -- Add support filetype `javascriptreact` for tsserver. - -# 2018-08-09 - -- Add `coc#util#install` for installation. -- Add `install.cmd` for windows. - -# 2018-08-08 - -- Improved location list for diagnostics. -- Add `internal` option to command. - - Commands registered by server are internal. - -- Add support for multiple save wait until requests. - -# 2018-08-07 - -- Add `forceFullSync` to language server option. - -# 2018-08-05 - -- Improve eslint extension to use workspaceFolder. -- Fix watchman not works with multiple roots. -- Add feature: dynamic root support for workspace. -- **Break change** output channel of watchman is removed. - -# 2018-08-04 - -- Fix order of document symbols. -- Fix completion snippet with `$variable`. -- Add feature: expand snippet on confirm. -- Add feature: `(coc-complete-custom)` for complete custom sources. - - Default customs sources: `emoji`, `include` and `word` - -- **Break change** `emoji` `include` used for all filetypes by default. - -# 2018-08-03 - -- Add command `:CocErrors` for debug. -- Support `DocumentSymbol` for 'textDocument/documentSymbol' - -# 2018-08-02 - -- Fix error of language client with unsupported schema. - - No document event fired for unsupported schema (eg: fugitive://) - -- Fix update empty configuration not works. - -# 2018-07-31 - -- Improve file source triggered with dirname started path. - -# 2018-07-30 - -- Fix source ultisnip not working. -- Fix custom language client with command not working. -- Fix wrong arguments passed to `runCommand` function. -- Improve module install, add `sudo` for `npm install` on Linux. -- Improve completion on backspace. - - Completion is resumed when search is empty. - - Completion is triggered when user try to fix search. - -# 2018-07-29 - -- **Break change** all servers are decoupled from coc.nvim - - A prompt for download is shown when server not found. - -- **Break change** `vim-node-rpc` decoupled from coc.nvim - - A prompt would be shown to help user install vim-node-rpc in vim. - -- Add command `CocConfig` - -# 2018-07-28 - -- Fix uncaught exception error on windows. -- Use plugin root for assets resolve. -- Fix emoji source not triggered by `:`. -- Improve file source to recognize `~` as user home. - -# 2018-07-27 - -- Prompt user for download server module with big extension like `vetur` and `wxml-langserver` -- **Break change**, section of settings changed: `cssserver.[languageId]` moved to `[languageId]` - - For example: `cssserver.css` section is moved to `css` section. - - This makes coc settings of css languages the same as VSCode. - -- **Break change**, `stylelint` extension is disabled by default, add - - ``` - "stylelint.enable": true, - ``` - - to your `coc-settings.json` to enable it. - - User will be prompted to download server if `stylelint-langserver` is not - installed globally. - -- **Break change**, `triggerAfterInsertEnter` is always `true`, add - - ``` - "coc.preferences.triggerAfterInsertEnter": false, - ``` - - to your `coc-settings.json` to disable it. - -- **Break change**, when `autoTrigger` is `always` completion would be triggered - after completion item select. - -# 2018-07-24 - -- better statusline integration with airline and lightline. - -# 2018-07-23 - -- Coc service start much faster. -- Add vim-node-rpc module. -- **Break change** global function `CocAutocmd` and `CocResult` are removed. -- Support Vue with vetur - -# 2018-07-21 - -- Fix issue with `completeopt`. -- Add source `neosnippet`. -- Add source `gocode`. - -# 2018-07-20 - -- Add documentation for language server debug. -- Rework register of functions, avoid undefined function. - -# 2018-07-19 - -- Fix error of `isFile` check. -- Ignore undefined function on service start. - -# 2018-07-17 - -- Add `coc.preference.jumpCommand` to settings. -- Make coc service standalone. - -# 2018-07-16 - -- Support arguments for `runCommand` action. -- Add coc command `workspace.showOutput`. -- Support output channel for language server. -- Support `[extension].trace.server` setting for trace server communication. - -# 2018-07-15 - -- Support location list for diagnostic. -- Add tsserver project errors command. - -# 2018-07-14 - -- Add support for `preselect` of complete item. -- Add support for socket language server configuration. -- Fix configured language server doesn't work. -- Add `workspace.diffDocument` coc command. -- Fix buffer sometimes not attached. -- Improve completion of JSON extension. - -# 2018-07-13 - -- **Break change:** `diagnostic` in setting.json changed to `diagnostic`. -- Fix clearHighlight arguments. -- Add eslint extension https://github.com/Microsoft/vscode-eslint. -- Fix snippet break with line have \$variable. -- Use jsonc-parser replace json5. -- Add `data/schema.json` for coc-settings.json. - -# 2018-07-12 - -- Fix restart of tsserver not working. -- Fix edit of current buffer change jumplist by using `:keepjumps`. diff --git a/dotfiles/.vim/plugged/coc.nvim/lua/coc/highlight.lua b/dotfiles/.vim/plugged/coc.nvim/lua/coc/highlight.lua deleted file mode 100644 index cbdd7d4d..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/lua/coc/highlight.lua +++ /dev/null @@ -1,85 +0,0 @@ -local api = vim.api - -local M = {} - --- Get single line extmarks -function M.getHighlights(bufnr, key, s, e) - if not api.nvim_buf_is_loaded(bufnr) then - return nil - end - s = s or 0 - e = e or -1 - local max = e == -1 and api.nvim_buf_line_count(bufnr) or e + 1 - local ns = api.nvim_create_namespace('coc-' .. key) - local markers = api.nvim_buf_get_extmarks(bufnr, ns, {s, 0}, {e, -1}, {details = true}) - local res = {} - for _, mark in ipairs(markers) do - local id = mark[1] - local line = mark[2] - local startCol = mark[3] - local details = mark[4] - local endCol = details.end_col - if line < max then - local delta = details.end_row - line - if delta <= 1 and (delta == 0 or endCol == 0) then - if startCol == endCol then - api.nvim_buf_del_extmark(bufnr, ns, id) - else - if delta == 1 then - local text = api.nvim_buf_get_lines(bufnr, line, line + 1, false)[1] or '' - endCol = #text - end - table.insert(res, {details.hl_group, line, startCol, endCol, id}) - end - end - end - end - return res -end - -local function addHighlights(bufnr, ns, highlights, priority) - for _, items in ipairs(highlights) do - local hlGroup = items[1] - local line = items[2] - local startCol = items[3] - local endCol = items[4] - local hlMode = items[5] and 'combine' or 'replace' - -- Error: col value outside range - pcall(api.nvim_buf_set_extmark, bufnr, ns, line, startCol, { - end_col = endCol, - hl_group = hlGroup, - hl_mode = hlMode, - right_gravity = true, - priority = type(priority) == 'number' and math.min(priority, 4096) or 4096 - }) - end -end - -local function addHighlightTimer(bufnr, ns, highlights, priority, maxCount) - local hls = {} - local next = {} - for i, v in ipairs(highlights) do - if i < maxCount then - table.insert(hls, v) - else - table.insert(next, v) - end - end - addHighlights(bufnr, ns, hls, priority) - if #next > 0 then - vim.defer_fn(function() - addHighlightTimer(bufnr, ns, next, priority, maxCount) - end, 30) - end -end - -function M.set(bufnr, ns, highlights, priority) - local maxCount = vim.g.coc_highlight_maximum_count - if #highlights > maxCount then - addHighlightTimer(bufnr, ns, highlights, priority, maxCount) - else - addHighlights(bufnr, ns, highlights, priority) - end -end - -return M diff --git a/dotfiles/.vim/plugged/coc.nvim/package.json b/dotfiles/.vim/plugged/coc.nvim/package.json deleted file mode 100644 index 3285f308..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/package.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "name": "coc.nvim-release", - "version": "0.0.82", - "description": "LSP based intellisense engine for neovim & vim8.", - "engines": { - "node": ">=12.12.0" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/neoclide/coc.nvim.git" - }, - "author": "Qiming Zhao ", - "bugs": { - "url": "https://github.com/neoclide/coc.nvim/issues" - }, - "homepage": "https://github.com/neoclide/coc.nvim#readme" -} diff --git a/dotfiles/.vim/plugged/coc.nvim/plugin/coc.vim b/dotfiles/.vim/plugged/coc.nvim/plugin/coc.vim deleted file mode 100644 index d804b52c..00000000 --- a/dotfiles/.vim/plugged/coc.nvim/plugin/coc.vim +++ /dev/null @@ -1,751 +0,0 @@ -scriptencoding utf-8 -if exists('g:did_coc_loaded') || v:version < 800 - finish -endif - -function! s:checkVersion() abort - let l:unsupported = 0 - if get(g:, 'coc_disable_startup_warning', 0) != 1 - if has('nvim') - let l:unsupported = !has('nvim-0.4.0') - else - let l:unsupported = !has('patch-8.1.1719') - endif - - if l:unsupported == 1 - echohl Error - echom "coc.nvim requires at least Vim 8.1.1719 or Neovim 0.4.0, but you're using an older version." - echom "Please upgrade your (neo)vim." - echom "You can add this to your vimrc to avoid this message:" - echom " let g:coc_disable_startup_warning = 1" - echom "Note that some features may error out or behave incorrectly." - echom "Please do not report bugs unless you're using at least Vim 8.1.1719 or Neovim 0.4.0." - echohl None - sleep 2 - else - if !has('nvim-0.5.0') && !has('patch-8.2.0750') - echohl WarningMsg - echom "coc.nvim works best on vim >= 8.2.0750 and neovim >= 0.5.0, consider upgrade your vim." - echom "You can add this to your vimrc to avoid this message:" - echom " let g:coc_disable_startup_warning = 1" - echom "Note that some features may behave incorrectly." - echohl None - sleep 2 - elseif !has('nvim') && (!has('job') || !has('popupwin') || !has('textprop')) - echohl WarningMsg - echom "coc.nvim requires job, popupwin and textprop features of vim, consider recompile your vim." - echom "You can add this to your vimrc to avoid this message:" - echom " let g:coc_disable_startup_warning = 1" - echom "Note that some features may behave incorrectly." - echohl None - sleep 2 - endif - endif - endif -endfunction - -call s:checkVersion() - -let g:did_coc_loaded = 1 -let g:coc_service_initialized = 0 -let s:is_win = has('win32') || has('win64') -let s:root = expand(':h:h') -let s:is_vim = !has('nvim') -let s:is_gvim = s:is_vim && has("gui_running") - -if get(g:, 'coc_start_at_startup', 1) && !s:is_gvim - call coc#rpc#start_server() -endif - -function! CocTagFunc(pattern, flags, info) abort - if a:flags !=# 'c' - " use standard tag search - return v:null - endif - return coc#rpc#request('getTagList', []) -endfunction - -function! CocPopupCallback(bufnr, arglist) abort - if len(a:arglist) == 2 - if a:arglist[0] == 'confirm' - call coc#rpc#notify('PromptInsert', [a:arglist[1], a:bufnr]) - elseif a:arglist[0] == 'exit' - execute 'silent! bd! '.a:bufnr - "call coc#rpc#notify('PromptUpdate', [a:arglist[1]]) - elseif a:arglist[0] == 'change' - let text = a:arglist[1] - let current = getbufvar(a:bufnr, 'current', '') - if text !=# current - call setbufvar(a:bufnr, 'current', text) - let cursor = term_getcursor(a:bufnr) - let info = { - \ 'lnum': cursor[0], - \ 'col': cursor[1], - \ 'line': text, - \ 'changedtick': 0 - \ } - call coc#rpc#notify('CocAutocmd', ['TextChangedI', a:bufnr, info]) - endif - elseif a:arglist[0] == 'send' - let key = a:arglist[1] - let escaped = strcharpart(key, 1, strchars(key) - 2) - call coc#rpc#notify('PromptKeyPress', [a:bufnr, escaped]) - endif - endif -endfunction - -function! CocAction(name, ...) abort - if !get(g:, 'coc_service_initialized', 0) - throw 'coc.nvim not ready when invoke CocAction "'.a:name.'"' - endif - return coc#rpc#request(a:name, a:000) -endfunction - -function! CocHasProvider(name) abort - return coc#rpc#request('hasProvider', [a:name]) -endfunction - -function! CocActionAsync(name, ...) abort - return s:AsyncRequest(a:name, a:000) -endfunction - -function! CocRequest(...) abort - return coc#rpc#request('sendRequest', a:000) -endfunction - -function! CocNotify(...) abort - return coc#rpc#request('sendNotification', a:000) -endfunction - -function! CocRegisterNotification(id, method, cb) abort - call coc#on_notify(a:id, a:method, a:cb) -endfunction - -" Deprecated, use CocRegisterNotification instead -function! CocRegistNotification(id, method, cb) abort - call coc#on_notify(a:id, a:method, a:cb) -endfunction - -function! CocLocations(id, method, ...) abort - let args = [a:id, a:method] + copy(a:000) - return coc#rpc#request('findLocations', args) -endfunction - -function! CocLocationsAsync(id, method, ...) abort - let args = [a:id, a:method] + copy(a:000) - return s:AsyncRequest('findLocations', args) -endfunction - -function! CocRequestAsync(...) - return s:AsyncRequest('sendRequest', a:000) -endfunction - -function! s:AsyncRequest(name, args) abort - let Cb = empty(a:args)? v:null : a:args[len(a:args) - 1] - if type(Cb) == 2 - if !coc#rpc#ready() - call Cb('service not started', v:null) - else - call coc#rpc#request_async(a:name, a:args[0:-2], Cb) - endif - return '' - endif - call coc#rpc#notify(a:name, a:args) - return '' -endfunction - -function! s:CommandList(...) abort - let list = coc#rpc#request('commandList', a:000) - return join(list, "\n") -endfunction - -function! s:ExtensionList(...) abort - let stats = CocAction('extensionStats') - call filter(stats, 'v:val["isLocal"] == v:false') - let list = map(stats, 'v:val["id"]') - return join(list, "\n") -endfunction - -function! s:SearchOptions(...) abort - let list = ['-e', '--regexp', '-F', '--fixed-strings', '-L', '--follow', - \ '-g', '--glob', '--hidden', '--no-hidden', '--no-ignore-vcs', - \ '--word-regexp', '-w', '--smart-case', '-S', '--no-config', - \ '--line-regexp', '--no-ignore', '-x'] - return join(list, "\n") -endfunction - -function! s:LoadedExtensions(...) abort - let list = CocAction('loadedExtensions') - return join(list, "\n") -endfunction - -function! s:InstallOptions(...)abort - let list = ['-terminal', '-sync'] - return join(list, "\n") -endfunction - -function! s:OpenConfig() - let home = coc#util#get_config_home() - if !isdirectory(home) - echohl MoreMsg - echom 'Config directory "'.home.'" does not exist, create? (y/n)' - echohl None - let confirm = nr2char(getchar()) - redraw! - if !(confirm ==? "y" || confirm ==? "\r") - return - else - call mkdir(home, 'p') - end - endif - execute 'edit '.home.'/coc-settings.json' - call coc#rpc#notify('checkJsonExtension', []) -endfunction - -function! s:get_color(item, fallback) abort - let t = type(a:item) - if t == 1 - return a:item - endif - if t == 4 - let item = get(a:item, 'gui', {}) - let color = get(item, &background, a:fallback) - return type(color) == 1 ? color : a:fallback - endif - return a:fallback -endfunction - -function! s:AddAnsiGroups() abort - let color_map = {} - let colors = ['#282828', '#cc241d', '#98971a', '#d79921', '#458588', '#b16286', '#689d6a', '#a89984', '#928374'] - let names = ['black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white', 'grey'] - for i in range(0, len(names) - 1) - let name = names[i] - if exists('g:terminal_ansi_colors') - let color_map[name] = s:get_color(get(g:terminal_ansi_colors, i, colors[i]), colors[i]) - else - let color_map[name] = get(g:, 'terminal_color_'.i, colors[i]) - endif - endfor - try - for name in keys(color_map) - let foreground = toupper(name[0]).name[1:] - let foregroundColor = color_map[name] - for key in keys(color_map) - let background = toupper(key[0]).key[1:] - let backgroundColor = color_map[key] - exe 'hi default CocList'.foreground.background.' guifg='.foregroundColor.' guibg='.backgroundColor - endfor - exe 'hi default CocListFg'.foreground. ' guifg='.foregroundColor. ' ctermfg='.foreground - exe 'hi default CocListBg'.foreground. ' guibg='.foregroundColor. ' ctermbg='.foreground - endfor - catch /.*/ - " ignore invalid color - endtry -endfunction - -function! s:CreateHighlight(group, fg, bg) abort - let cmd = coc#highlight#compose(a:fg, a:bg) - if !empty(trim(cmd)) - exe 'hi default '.a:group.' '.cmd - else - exe 'hi default link '.a:group.' '.a:fg - endif -endfunction - -function! s:CursorRangeFromSelected(type, ...) abort - " add range by operator - call coc#rpc#request('cursorsSelect', [bufnr('%'), 'operator', a:type]) -endfunction - -function! s:OpenDiagnostics(...) abort - let height = get(a:, 1, 0) - call coc#rpc#request('fillDiagnostics', [bufnr('%')]) - if height - execute ':lopen '.height - else - lopen - endif -endfunction - -function! s:Disable() abort - if get(g:, 'coc_enabled', 0) == 0 - return - endif - augroup coc_nvim - autocmd! - augroup end - call coc#rpc#request('detach', []) - echohl MoreMsg - echom '[coc.nvim] Event disabled' - echohl None - let g:coc_enabled = 0 -endfunction - -function! s:Autocmd(...) abort - if !get(g:, 'coc_workspace_initialized', 0) - return - endif - call coc#rpc#notify('CocAutocmd', a:000) -endfunction - -function! s:HandleCharInsert(char, bufnr) abort - if get(g:, 'coc_disable_space_report', 0) - let g:coc_disable_space_report = 0 - if a:char ==# ' ' - return - endif - endif - call s:Autocmd('InsertCharPre', a:char, a:bufnr) -endfunction - -function! s:HandleWinScrolled(winid) abort - if getwinvar(a:winid, 'float', 0) - call coc#float#nvim_scrollbar(a:winid) - endif - call s:Autocmd('WinScrolled', a:winid) -endfunction - -function! s:HandleWinClosed(winid) abort - call coc#float#on_close(a:winid) - call coc#notify#on_close(a:winid) - call s:Autocmd('WinClosed', a:winid) -endfunction - -function! s:SyncAutocmd(...) - if !get(g:, 'coc_workspace_initialized', 0) - return - endif - call coc#rpc#request('CocAutocmd', a:000) -endfunction - -function! s:CheckHighlight() abort - let fgId = synIDtrans(hlID('CocSelectedText')) - let guifg = synIDattr(fgId, 'fg', 'gui') - if empty(guifg) - call s:Highlight() - endif -endfunction - -function! s:Enable(initialize) - if get(g:, 'coc_enabled', 0) == 1 - return - endif - let g:coc_enabled = 1 - - augroup coc_nvim - autocmd! - - if coc#rpc#started() - autocmd VimEnter * call coc#rpc#notify('VimEnter', []) - elseif get(g:, 'coc_start_at_startup', 1) - autocmd VimEnter * call coc#rpc#start_server() - endif - if v:vim_did_enter - call s:CheckHighlight() - else - autocmd VimEnter * call timer_start(0, { -> s:CheckHighlight()}) - endif - if s:is_vim - if exists('##DirChanged') - autocmd DirChanged * call s:Autocmd('DirChanged', getcwd()) - endif - if exists('##TerminalOpen') - autocmd TerminalOpen * call s:Autocmd('TermOpen', +expand('')) - endif - else - autocmd DirChanged * call s:Autocmd('DirChanged', get(v:event, 'cwd', '')) - autocmd TermOpen * call s:Autocmd('TermOpen', +expand('')) - autocmd WinEnter * call coc#float#nvim_win_enter(win_getid()) - endif - if exists('##CompleteChanged') - autocmd CompleteChanged * call coc#pum#stop() - endif - autocmd CursorMoved list:///* call coc#list#select(bufnr('%'), line('.')) - autocmd CursorHold * call coc#float#check_related() - if exists('##WinClosed') - autocmd WinClosed * call s:HandleWinClosed(+expand('')) - elseif exists('##TabEnter') - autocmd TabEnter * call coc#notify#reflow() - endif - if exists('##WinScrolled') - autocmd WinScrolled * call s:HandleWinScrolled(+expand('')) - endif - autocmd TabNew * call s:Autocmd('TabNew', tabpagenr()) - autocmd TabClosed * call s:Autocmd('TabClosed', +expand('')) - autocmd WinLeave * call s:Autocmd('WinLeave', win_getid()) - autocmd WinEnter * call s:Autocmd('WinEnter', win_getid()) - autocmd BufWinLeave * call s:Autocmd('BufWinLeave', +expand(''), bufwinid(+expand(''))) - autocmd BufWinEnter * call s:Autocmd('BufWinEnter', +expand(''), win_getid()) - autocmd FileType * call s:Autocmd('FileType', expand(''), +expand('')) - autocmd InsertCharPre * call s:HandleCharInsert(v:char, bufnr('%')) - if exists('##TextChangedP') - autocmd TextChangedP * call s:Autocmd('TextChangedP', +expand(''), coc#util#change_info()) - endif - autocmd TextChangedI * call s:Autocmd('TextChangedI', +expand(''), coc#util#change_info()) - autocmd InsertLeave * call s:Autocmd('InsertLeave', +expand('')) - autocmd InsertEnter * call s:Autocmd('InsertEnter', +expand('')) - autocmd BufHidden * call s:Autocmd('BufHidden', +expand('')) - autocmd BufEnter * call s:Autocmd('BufEnter', +expand('')) - autocmd TextChanged * call s:Autocmd('TextChanged', +expand(''), getbufvar(+expand(''), 'changedtick')) - autocmd BufWritePost * call s:Autocmd('BufWritePost', +expand(''), getbufvar(+expand(''), 'changedtick')) - autocmd CursorMoved * call s:Autocmd('CursorMoved', +expand(''), [line('.'), col('.')]) - autocmd CursorMovedI * call s:Autocmd('CursorMovedI', +expand(''), [line('.'), col('.')]) - autocmd CursorHold * call s:Autocmd('CursorHold', +expand(''), [line('.'), col('.')]) - autocmd CursorHoldI * call s:Autocmd('CursorHoldI', +expand(''), [line('.'), col('.')]) - autocmd BufNewFile,BufReadPost * call s:Autocmd('BufCreate', +expand('')) - autocmd BufUnload * call s:Autocmd('BufUnload', +expand('')) - autocmd BufWritePre * call s:SyncAutocmd('BufWritePre', +expand(''), bufname(+expand('')), getbufvar(+expand(''), 'changedtick')) - autocmd FocusGained * if mode() !~# '^c' | call s:Autocmd('FocusGained') | endif - autocmd FocusLost * call s:Autocmd('FocusLost') - autocmd VimResized * call s:Autocmd('VimResized', &columns, &lines) - autocmd VimLeavePre * let g:coc_vim_leaving = 1 - autocmd VimLeavePre * call s:Autocmd('VimLeavePre') - autocmd BufReadCmd,FileReadCmd,SourceCmd list://* call coc#list#setup(expand('')) - autocmd BufWriteCmd __coc_refactor__* :call coc#rpc#notify('saveRefactor', [+expand('')]) - autocmd ColorScheme * call s:Highlight() - augroup end - if a:initialize == 0 - call coc#rpc#request('attach', []) - echohl MoreMsg - echom '[coc.nvim] Event enabled' - echohl None - endif -endfunction - -function! s:Highlight() abort - hi default CocSelectedText ctermfg=Red guifg=#fb4934 guibg=NONE - hi default CocCodeLens ctermfg=Gray guifg=#999999 guibg=NONE - hi default CocUnderline term=underline cterm=underline gui=underline guisp=#ebdbb2 - hi default CocBold term=bold cterm=bold gui=bold - hi default CocItalic term=italic cterm=italic gui=italic - hi default CocStrikeThrough term=strikethrough cterm=strikethrough gui=strikethrough - hi default CocMarkdownLink ctermfg=Blue guifg=#15aabf guibg=NONE - hi default CocDisabled guifg=#999999 ctermfg=gray - hi default CocSearch ctermfg=Blue guifg=#15aabf guibg=NONE - if coc#highlight#get_contrast('Normal', has('nvim') ? 'NormalFloat' : 'Pmenu') > 2.0 - exe 'hi default CocFloating '.coc#highlight#create_bg_command('Normal', &background ==# 'dark' ? -0.4 : 0.1) - exe 'hi default CocMenuSel '.coc#highlight#create_bg_command('CocFloating', &background ==# 'dark' ? -0.2 : 0.05) - exe 'hi default CocFloatThumb '.coc#highlight#create_bg_command('CocFloating', &background ==# 'dark' ? -0.3 : 0.2) - exe 'hi default CocFloatSbar '.coc#highlight#create_bg_command('CocFloatThumb', &background ==# 'dark' ? -0.5 : 0.3) - else - exe 'hi default link CocFloating '.(has('nvim') ? 'NormalFloat' : 'Pmenu') - if coc#highlight#get_contrast('CocFloating', 'PmenuSel') > 2.0 - exe 'hi default CocMenuSel '.coc#highlight#create_bg_command('CocFloating', &background ==# 'dark' ? -0.2 : 0.05) - else - exe 'hi default CocMenuSel '.coc#highlight#get_hl_command(synIDtrans(hlID('PmenuSel')), 'bg', '237', '#13354A') - endif - hi default link CocFloatThumb PmenuThumb - hi default link CocFloatSbar PmenuSbar - endif - hi default link CocFloatActive CocSearch - hi default link CocFadeOut Conceal - hi default link CocMarkdownCode markdownCode - hi default link CocMarkdownHeader markdownH1 - hi default link CocDeprecatedHighlight CocStrikeThrough - hi default link CocUnusedHighlight CocFadeOut - hi default link CocListLine CursorLine - hi default link CocListSearch CocSearch - hi default link CocListMode ModeMsg - hi default link CocListPath Comment - hi default link CocHighlightText CursorColumn - hi default link CocHoverRange Search - hi default link CocCursorRange Search - hi default link CocLinkedEditing CocCursorRange - hi default link CocHighlightRead CocHighlightText - hi default link CocHighlightWrite CocHighlightText - " Notification - hi default CocNotificationProgress ctermfg=Blue guifg=#15aabf guibg=NONE - hi default link CocNotificationButton CocUnderline - hi default link CocNotificationError CocErrorFloat - hi default link CocNotificationWarning CocWarningFloat - hi default link CocNotificationInfo CocInfoFloat - " Snippet - hi default link CocSnippetVisual Visual - " Tree view highlights - hi default link CocTreeTitle Title - hi default link CocTreeDescription Comment - hi default link CocTreeOpenClose CocBold - hi default link CocTreeSelected CursorLine - hi default link CocSelectedRange CocHighlightText - " Symbol highlights - hi default link CocSymbolDefault MoreMsg - "Pum - hi default link CocPumSearch CocSearch - hi default link CocPumDetail Comment - hi default link CocPumMenu CocFloating - hi default link CocPumShortcut Comment - hi default link CocPumDeprecated CocStrikeThrough - hi default CocPumVirtualText ctermfg=12 guifg=#504945 - hi default CocFloatDividingLine ctermfg=12 guifg=#504945 - - if !exists('*sign_getdefined') || empty(sign_getdefined('CocCurrentLine')) - sign define CocCurrentLine linehl=CocMenuSel - endif - if !exists('*sign_getdefined') || empty(sign_getdefined('CocListCurrent')) - sign define CocListCurrent linehl=CocListLine - endif - if !exists('*sign_getdefined') || empty(sign_getdefined('CocTreeSelected')) - sign define CocTreeSelected linehl=CocTreeSelected - endif - if has('nvim-0.5.0') - hi default CocCursorTransparent gui=strikethrough blend=100 - endif - - let sign_colors = { - \ 'Error': ['Red', '#ff0000'], - \ 'Warn': ['Brown', '#ff922b'], - \ 'Info': ['Yellow', '#fab005'], - \ 'Hint': ['Blue', '#15aabf'] - \ } - for name in ['Error', 'Warning', 'Info', 'Hint'] - let suffix = name ==# 'Warning' ? 'Warn' : name - if hlexists('DiagnosticUnderline'.suffix) - exe 'hi default link Coc'.name.'Highlight DiagnosticUnderline'.suffix - else - exe 'hi default link Coc'.name.'Highlight CocUnderline' - endif - if hlexists('DiagnosticSign'.suffix) - exe 'hi default link Coc'.name.'Sign DiagnosticSign'.suffix - else - exe 'hi default Coc'.name.'Sign ctermfg='.sign_colors[suffix][0].' guifg='.sign_colors[suffix][1] - endif - if hlexists('DiagnosticVirtualText'.suffix) - exe 'hi default link Coc'.name.'VirtualText DiagnosticVirtualText'.suffix - else - call s:CreateHighlight('Coc'.name.'VirtualText', 'Coc'.name.'Sign', 'Normal') - endif - if hlexists('Diagnostic'.suffix) - exe 'hi default link Coc'.name.'Float Diagnostic'.suffix - else - call s:CreateHighlight('Coc'.name.'Float', 'Coc'.name.'Sign', 'CocFloating') - endif - endfor - - call s:CreateHighlight('CocInlayHint', 'CocHintSign', 'SignColumn') - for name in ['Parameter', 'Type'] - exe 'hi default link CocInlayHint'.name.' CocInlayHint' - endfor - - call s:AddAnsiGroups() - - if get(g:, 'coc_default_semantic_highlight_groups', 1) - let hlMap = { - \ 'Namespace': ['TSNamespace', 'Include'], - \ 'Type': ['TSType', 'Type'], - \ 'Class': ['TSConstructor', 'Special'], - \ 'Enum': ['TSEnum', 'Type'], - \ 'Interface': ['TSInterface', 'Type'], - \ 'Struct': ['TSStruct', 'Identifier'], - \ 'TypeParameter': ['TSParameter', 'Identifier'], - \ 'Parameter': ['TSParameter', 'Identifier'], - \ 'Variable': ['TSSymbol', 'Identifier'], - \ 'Property': ['TSProperty', 'Identifier'], - \ 'EnumMember': ['TSEnumMember', 'Constant'], - \ 'Event': ['TSEvent', 'Keyword'], - \ 'Function': ['TSFunction', 'Function'], - \ 'Method': ['TSMethod', 'Function'], - \ 'Macro': ['TSConstMacro', 'Define'], - \ 'Keyword': ['TSKeyword', 'Keyword'], - \ 'Modifier': ['TSModifier', 'StorageClass'], - \ 'Comment': ['TSComment', 'Comment'], - \ 'String': ['TSString', 'String'], - \ 'Number': ['TSNumber', 'Number'], - \ 'Boolean': ['TSBoolean', 'Boolean'], - \ 'Regexp': ['TSStringRegex', 'String'], - \ 'Operator': ['TSOperator', 'Operator'], - \ 'Decorator': ['TSSymbol', 'Identifier'], - \ 'Deprecated': ['TSStrike', 'CocDeprecatedHighlight'] - \ } - for [key, value] in items(hlMap) - let ts = get(value, 0, '') - let fallback = get(value, 1, '') - execute 'hi default link CocSem'.key.' '.(hlexists(ts) ? ts : fallback) - endfor - endif - let symbolMap = { - \ 'Keyword': ['TSKeyword', 'Keyword'], - \ 'Namespace': ['TSNamespace', 'Include'], - \ 'Class': ['TSConstructor', 'Special'], - \ 'Method': ['TSMethod', 'Function'], - \ 'Property': ['TSProperty', 'Identifier'], - \ 'Text': ['TSText', 'CocSymbolDefault'], - \ 'Unit': ['TSUnit', 'CocSymbolDefault'], - \ 'Value': ['TSValue', 'CocSymbolDefault'], - \ 'Snippet': ['TSSnippet', 'CocSymbolDefault'], - \ 'Color': ['TSColor', 'Float'], - \ 'Reference': ['TSTextReference', 'Constant'], - \ 'Folder': ['TSFolder', 'CocSymbolDefault'], - \ 'File': ['TSFile', 'Statement'], - \ 'Module': ['TSModule', 'Statement'], - \ 'Package': ['TSPackage', 'Statement'], - \ 'Field': ['TSField', 'Identifier'], - \ 'Constructor': ['TSConstructor', 'Special'], - \ 'Enum': ['TSEnum', 'CocSymbolDefault'], - \ 'Interface': ['TSInterface', 'CocSymbolDefault'], - \ 'Function': ['TSFunction', 'Function'], - \ 'Variable': ['TSVariableBuiltin', 'Special'], - \ 'Constant': ['TSConstant', 'Constant'], - \ 'String': ['TSString', 'String'], - \ 'Number': ['TSNumber', 'Number'], - \ 'Boolean': ['TSBoolean', 'Boolean'], - \ 'Array': ['TSArray', 'CocSymbolDefault'], - \ 'Object': ['TSObject', 'CocSymbolDefault'], - \ 'Key': ['TSKey', 'Identifier'], - \ 'Null': ['TSNull', 'Type'], - \ 'EnumMember': ['TSEnumMember', 'Identifier'], - \ 'Struct': ['TSStruct', 'Keyword'], - \ 'Event': ['TSEvent', 'Constant'], - \ 'Operator': ['TSOperator', 'Operator'], - \ 'TypeParameter': ['TSParameter', 'Identifier'], - \ } - for [key, value] in items(symbolMap) - let hlGroup = hlexists(value[0]) ? value[0] : get(value, 1, 'CocSymbolDefault') - if hlexists(hlGroup) - execute 'hi default CocSymbol'.key.' '.coc#highlight#get_hl_command(synIDtrans(hlID(hlGroup)), 'fg', '223', '#ebdbb2') - endif - endfor -endfunction - -function! s:FormatFromSelected(type) - call CocActionAsync('formatSelected', a:type) -endfunction - -function! s:CodeActionFromSelected(type) - call CocActionAsync('codeAction', a:type) -endfunction - -function! s:ShowInfo() - if coc#rpc#ready() - call coc#rpc#notify('showInfo', []) - else - let lines = [] - echomsg 'coc.nvim service not started, checking environment...' - let node = get(g:, 'coc_node_path', $COC_NODE_PATH == '' ? 'node' : $COC_NODE_PATH) - if !executable(node) - call add(lines, 'Error: '.node.' is not executable!') - else - let output = trim(system(node . ' --version')) - let ms = matchlist(output, 'v\(\d\+\).\(\d\+\).\(\d\+\)') - if empty(ms) || str2nr(ms[1]) < 14 || (str2nr(ms[1]) == 14 && str2nr(ms[2]) < 14) - call add(lines, 'Error: Node version '.output.' < 14.14.0, please upgrade node.js') - endif - endif - " check bundle - let file = s:root.'/build/index.js' - if !filereadable(file) - call add(lines, 'Error: javascript bundle not found, please compile code of coc.nvim by esbuild.') - endif - if !empty(lines) - botright vnew - setl filetype=nofile - call setline(1, lines) - else - if get(g:, 'coc_start_at_startup',1) - echohl MoreMsg | echon 'Service stopped for some unknown reason, try :CocStart' | echohl None - else - echohl MoreMsg | echon 'Start on startup is disabled, try :CocStart' | echohl None - endif - endif - endif -endfunction - -command! -nargs=0 CocOutline :call coc#rpc#notify('showOutline', []) -command! -nargs=? CocDiagnostics :call s:OpenDiagnostics() -command! -nargs=0 CocInfo :call s:ShowInfo() -command! -nargs=0 CocOpenLog :call coc#rpc#notify('openLog', []) -command! -nargs=0 CocDisable :call s:Disable() -command! -nargs=0 CocEnable :call s:Enable(0) -command! -nargs=0 CocConfig :call s:OpenConfig() -command! -nargs=0 CocLocalConfig :call coc#rpc#notify('openLocalConfig', []) -command! -nargs=0 CocRestart :call coc#rpc#restart() -command! -nargs=0 CocStart :call coc#rpc#start_server() -command! -nargs=1 -complete=custom,s:LoadedExtensions CocWatch :call coc#rpc#notify('watchExtension', []) -command! -nargs=+ -complete=custom,s:SearchOptions CocSearch :call coc#rpc#notify('search', []) -command! -nargs=+ -complete=custom,s:ExtensionList CocUninstall :call CocActionAsync('uninstallExtension', ) -command! -nargs=* -complete=custom,s:CommandList -range CocCommand :call coc#rpc#notify('runCommand', []) -command! -nargs=* -complete=custom,coc#list#options CocList :call coc#rpc#notify('openList', []) -command! -nargs=? -complete=custom,coc#list#names CocListResume :call coc#rpc#notify('listResume', []) -command! -nargs=? -complete=custom,coc#list#names CocListCancel :call coc#rpc#notify('listCancel', []) -command! -nargs=? -complete=custom,coc#list#names CocPrev :call coc#rpc#notify('listPrev', []) -command! -nargs=? -complete=custom,coc#list#names CocNext :call coc#rpc#notify('listNext', []) -command! -nargs=? -complete=custom,coc#list#names CocFirst :call coc#rpc#notify('listFirst', []) -command! -nargs=? -complete=custom,coc#list#names CocLast :call coc#rpc#notify('listLast', []) -command! -nargs=0 CocUpdate :call coc#util#update_extensions(1) -command! -nargs=0 -bar CocUpdateSync :call coc#util#update_extensions() -command! -nargs=* -bar -complete=custom,s:InstallOptions CocInstall :call coc#util#install_extension([]) - -call s:Highlight() -call s:Enable(1) - -" Default key-mappings for completion -if empty(mapcheck('', 'i')) - inoremap coc#pum#visible() ? coc#pum#next(1) : "\" -endif -if empty(mapcheck('', 'i')) - inoremap coc#pum#visible() ? coc#pum#prev(1) : "\" -endif -if empty(mapcheck('', 'i')) - inoremap coc#pum#visible() ? coc#pum#next(0) : "\" -endif -if empty(mapcheck('', 'i')) - inoremap coc#pum#visible() ? coc#pum#prev(0) : "\" -endif -if empty(mapcheck('', 'i')) - inoremap coc#pum#visible() ? coc#pum#cancel() : "\" -endif -if empty(mapcheck('', 'i')) - inoremap coc#pum#visible() ? coc#pum#confirm() : "\" -endif -if empty(mapcheck('', 'i')) - inoremap coc#pum#visible() ? coc#pum#scroll(1) : "\" -endif -if empty(mapcheck('', 'i')) - inoremap coc#pum#visible() ? coc#pum#scroll(0) : "\" -endif - -vnoremap (coc-range-select) :call CocActionAsync('rangeSelect', visualmode(), v:true) -vnoremap (coc-range-select-backward) :call CocActionAsync('rangeSelect', visualmode(), v:false) -nnoremap (coc-range-select) :call CocActionAsync('rangeSelect', '', v:true) -nnoremap (coc-codelens-action) :call CocActionAsync('codeLensAction') -vnoremap (coc-format-selected) :call CocActionAsync('formatSelected', visualmode()) -vnoremap (coc-codeaction-selected) :call CocActionAsync('codeAction', visualmode()) -nnoremap (coc-codeaction-selected) :set operatorfunc=CodeActionFromSelectedg@ -nnoremap (coc-codeaction) :call CocActionAsync('codeAction', '') -nnoremap (coc-codeaction-line) :call CocActionAsync('codeAction', 'currline') -nnoremap (coc-codeaction-cursor) :call CocActionAsync('codeAction', 'cursor') -nnoremap (coc-rename) :call CocActionAsync('rename') -nnoremap (coc-format-selected) :set operatorfunc=FormatFromSelectedg@ -nnoremap (coc-format) :call CocActionAsync('format') -nnoremap (coc-diagnostic-info) :call CocActionAsync('diagnosticInfo') -nnoremap (coc-diagnostic-next) :call CocActionAsync('diagnosticNext') -nnoremap (coc-diagnostic-prev) :call CocActionAsync('diagnosticPrevious') -nnoremap (coc-diagnostic-next-error) :call CocActionAsync('diagnosticNext', 'error') -nnoremap (coc-diagnostic-prev-error) :call CocActionAsync('diagnosticPrevious', 'error') -nnoremap (coc-definition) :call CocActionAsync('jumpDefinition') -nnoremap (coc-declaration) :call CocActionAsync('jumpDeclaration') -nnoremap (coc-implementation) :call CocActionAsync('jumpImplementation') -nnoremap (coc-type-definition) :call CocActionAsync('jumpTypeDefinition') -nnoremap (coc-references) :call CocActionAsync('jumpReferences') -nnoremap (coc-references-used) :call CocActionAsync('jumpUsed') -nnoremap (coc-openlink) :call CocActionAsync('openLink') -nnoremap (coc-fix-current) :call CocActionAsync('doQuickfix') -nnoremap (coc-float-hide) :call coc#float#close_all() -nnoremap (coc-float-jump) :call coc#float#jump() -nnoremap (coc-command-repeat) :call CocAction('repeatCommand') -nnoremap (coc-refactor) :call CocActionAsync('refactor') - -nnoremap (coc-cursors-operator) :set operatorfunc=CursorRangeFromSelectedg@ -vnoremap (coc-cursors-range) :call CocAction('cursorsSelect', bufnr('%'), 'range', visualmode()) -nnoremap (coc-cursors-word) :call CocAction('cursorsSelect', bufnr('%'), 'word', 'n') -nnoremap (coc-cursors-position) :call CocAction('cursorsSelect', bufnr('%'), 'position', 'n') - -vnoremap (coc-funcobj-i) :call CocAction('selectSymbolRange', v:true, visualmode(), ['Method', 'Function']) -vnoremap (coc-funcobj-a) :call CocAction('selectSymbolRange', v:false, visualmode(), ['Method', 'Function']) -onoremap (coc-funcobj-i) :call CocAction('selectSymbolRange', v:true, '', ['Method', 'Function']) -onoremap (coc-funcobj-a) :call CocAction('selectSymbolRange', v:false, '', ['Method', 'Function']) - -vnoremap (coc-classobj-i) :call CocAction('selectSymbolRange', v:true, visualmode(), ['Interface', 'Struct', 'Class']) -vnoremap (coc-classobj-a) :call CocAction('selectSymbolRange', v:false, visualmode(), ['Interface', 'Struct', 'Class']) -onoremap (coc-classobj-i) :call CocAction('selectSymbolRange', v:true, '', ['Interface', 'Struct', 'Class']) -onoremap (coc-classobj-a) :call CocAction('selectSymbolRange', v:false, '', ['Interface', 'Struct', 'Class']) diff --git a/dotfiles/.vim/plugged/dockerfile.vim/.gitignore b/dotfiles/.vim/plugged/dockerfile.vim/.gitignore deleted file mode 100644 index 38193138..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.swp -*.swo diff --git a/dotfiles/.vim/plugged/dockerfile.vim/.gitrepo b/dotfiles/.vim/plugged/dockerfile.vim/.gitrepo deleted file mode 100644 index acd389a9..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/.gitrepo +++ /dev/null @@ -1,12 +0,0 @@ -; DO NOT EDIT (unless you know what you are doing) -; -; This subdirectory is a git "subrepo", and this file is maintained by the -; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme -; -[subrepo] - remote = https://github.com/ekalinin/dockerfile.vim.git - branch = master - commit = 2a31e6bcea5977209c05c728c4253d82fd873c82 - parent = 78b956b821bb0c96c5b2804c1461df0eb28cc559 - method = merge - cmdver = 0.4.3 diff --git a/dotfiles/.vim/plugged/dockerfile.vim/LICENSE b/dotfiles/.vim/plugged/dockerfile.vim/LICENSE deleted file mode 100644 index 27856ca5..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Eugene Kalinin - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/dotfiles/.vim/plugged/dockerfile.vim/Makefile b/dotfiles/.vim/plugged/dockerfile.vim/Makefile deleted file mode 100644 index cf5ab3c9..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/Makefile +++ /dev/null @@ -1,22 +0,0 @@ -install: - @echo "Installation:" - @mkdir -p ~/.vim/syntax - @mkdir -p ~/.vim/indent - @mkdir -p ~/.vim/ftdetect - @mkdir -p ~/.vim/ftplugin - @mkdir -p ~/.vim/snippets - @echo " * Dirs ... success." - @cp ./syntax/Dockerfile.vim ~/.vim/syntax/ - @cp ./syntax/docker-compose.vim ~/.vim/syntax/ - @echo " * Ident ... success." - @cp ./indent/Dockerfile.vim ~/.vim/indent/ - @echo " * Syntax ... success." - @cp ./ftdetect/Dockerfile.vim ~/.vim/ftdetect/ - @cp ./ftdetect/docker-compose.vim ~/.vim/ftdetect/ - @echo " * Filetype ... success." - @cp ./ftplugin/Dockerfile.vim ~/.vim/ftplugin/ - @cp ./ftplugin/docker-compose.vim ~/.vim/ftplugin/ - @echo " * Plugin ... success." - @cp ./snippets/Dockerfile.snippets ~/.vim/snippets/ - @cp ./snippets/docker-compose.snippets ~/.vim/snippets/ - @echo " * Snippets ... success." diff --git a/dotfiles/.vim/plugged/dockerfile.vim/README.md b/dotfiles/.vim/plugged/dockerfile.vim/README.md deleted file mode 100644 index f24940a8..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/README.md +++ /dev/null @@ -1,55 +0,0 @@ -Dockerfile.vim -============== - -Vim syntax file for [Docker](http://docker.io/)'s [Dockerfile](http://docs.docker.com/reference/builder/) -and snippets for [snipMate](http://www.vim.org/scripts/script.php?script_id=2540). - -Screenshot -========== - -Here is an example in gnome-terminal with [vim-monokai](https://github.com/sickill/vim-monokai) color scheme: - - -![Vim & Dockerfile.vim ](https://raw.github.com/ekalinin/Dockerfile.vim/master/vim-dockerfile-example.png) - - - -Installation -============ - -```bash -$ git clone https://github.com/ekalinin/Dockerfile.vim.git -$ cd Dockerfile.vim -$ make install -``` - -#### Or using Pathogen: -```bash -# Clone directly into the bundle folder. -git clone https://github.com/ekalinin/Dockerfile.vim.git ~/.vim/bundle/Dockerfile -``` - -#### Or using Vundle: -```bash -# near the top of your .vimrc -Plugin 'ekalinin/Dockerfile.vim' -``` - -#### Or using NeoBundle: - -```bash -NeoBundle 'ekalinin/Dockerfile.vim' -``` - -#### Or using Vim-Plug - -```bash -# Inside the Vim-Plug block on your .vimrc -Plug 'ekalinin/Dockerfile.vim' -``` - - -License -======= - -See [LICENSE](https://github.com/ekalinin/Dockerfile.vim/blob/master/LICENSE) file. diff --git a/dotfiles/.vim/plugged/dockerfile.vim/ftdetect/Dockerfile.vim b/dotfiles/.vim/plugged/dockerfile.vim/ftdetect/Dockerfile.vim deleted file mode 100644 index 63d5efca..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/ftdetect/Dockerfile.vim +++ /dev/null @@ -1,13 +0,0 @@ -" vint: -ProhibitAutocmdWithNoGroup - -" Dockerfile -autocmd BufRead,BufNewFile [Dd]ockerfile set ft=Dockerfile -autocmd BufRead,BufNewFile [Dd]ockerfile* setfiletype Dockerfile -autocmd BufRead,BufNewFile *.[Dd]ockerfile set ft=Dockerfile -autocmd BufRead,BufNewFile *.dock set ft=Dockerfile -autocmd BufRead,BufNewFile [Dd]ockerfile.vim set ft=vim - -" Containerfile -autocmd BufRead,BufNewFile [Cc]ontainerfile set ft=Dockerfile -autocmd BufRead,BufNewFile [Cc]ontainerfile* set ft=Dockerfile -autocmd BufRead,BufNewFile *.[Cc]ontainerfile set ft=Dockerfile diff --git a/dotfiles/.vim/plugged/dockerfile.vim/ftdetect/docker-compose.vim b/dotfiles/.vim/plugged/dockerfile.vim/ftdetect/docker-compose.vim deleted file mode 100644 index 61a3876c..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/ftdetect/docker-compose.vim +++ /dev/null @@ -1,4 +0,0 @@ -" vint: -ProhibitAutocmdWithNoGroup - -" docker-compose.yml -autocmd BufRead,BufNewFile docker-compose*.{yaml,yml}* set ft=yaml.docker-compose diff --git a/dotfiles/.vim/plugged/dockerfile.vim/ftplugin/Dockerfile.vim b/dotfiles/.vim/plugged/dockerfile.vim/ftplugin/Dockerfile.vim deleted file mode 100644 index 79edc460..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/ftplugin/Dockerfile.vim +++ /dev/null @@ -1,33 +0,0 @@ -" Define comment string -setlocal commentstring=#\ %s - -" Enable automatic comment insertion -setlocal formatoptions+=cro - -function! DockerfileReplaceInstruction(original, replacement) - let syn = synIDtrans(synID(line("."), col(".") - 1, 0)) - if syn != hlID("Comment") && syn != hlID("Constant") && strlen(getline(".")) == 0 - let word = a:replacement - else - let word = a:original - endif - let g:UnduBuffer = a:original - return word -endfunction - -inoreabbr from =DockerfileReplaceInstruction("from", "FROM") -inoreabbr maintainer =DockerfileReplaceInstruction("maintainer", "MAINTAINER") -inoreabbr run =DockerfileReplaceInstruction("run", "RUN") -inoreabbr cmd =DockerfileReplaceInstruction("cmd", "CMD") -inoreabbr label =DockerfileReplaceInstruction("label", "LABEL") -inoreabbr expose =DockerfileReplaceInstruction("expose", "EXPOSE") -inoreabbr env =DockerfileReplaceInstruction("env", "ENV") -inoreabbr add =DockerfileReplaceInstruction("add", "ADD") -inoreabbr copy =DockerfileReplaceInstruction("copy", "COPY") -inoreabbr entrypoint =DockerfileReplaceInstruction("entrypoint", "ENTRYPOINT") -inoreabbr volume =DockerfileReplaceInstruction("volume", "VOLUME") -inoreabbr user =DockerfileReplaceInstruction("user", "USER") -inoreabbr workdir =DockerfileReplaceInstruction("workdir", "WORKDIR") -inoreabbr arg =DockerfileReplaceInstruction("arg", "ARG") -inoreabbr onbuild =DockerfileReplaceInstruction("onbuild", "ONBUILD") -inoreabbr stopsignal =DockerfileReplaceInstruction("stopsignal", "STOPSIGNAL") diff --git a/dotfiles/.vim/plugged/dockerfile.vim/ftplugin/docker-compose.vim b/dotfiles/.vim/plugged/dockerfile.vim/ftplugin/docker-compose.vim deleted file mode 100644 index 4564fd02..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/ftplugin/docker-compose.vim +++ /dev/null @@ -1,5 +0,0 @@ -" Define comment string -setlocal commentstring=#\ %s - -" Enable automatic comment insertion -setlocal formatoptions+=cro diff --git a/dotfiles/.vim/plugged/dockerfile.vim/indent/Dockerfile.vim b/dotfiles/.vim/plugged/dockerfile.vim/indent/Dockerfile.vim deleted file mode 100644 index e7b50581..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/indent/Dockerfile.vim +++ /dev/null @@ -1,23 +0,0 @@ -if exists('b:did_indent') | finish | endif -let b:did_indent = 1 - - -function! DockerfileIndent(line) - let prev_line = getline(a:line - 1) - if a:line > 1 && prev_line =~ '\\\s*$' - let i = indent(a:line - 1) - if i == 0 - let i += &l:shiftwidth - if &l:expandtab && prev_line =~# '^RUN\s' - " Overindent past RUN - let i = 4 + &l:shiftwidth - endif - endif - return i - endif - - return -1 -endfunction - - -set indentexpr=DockerfileIndent(v:lnum) diff --git a/dotfiles/.vim/plugged/dockerfile.vim/snippets/Dockerfile.snippets b/dotfiles/.vim/plugged/dockerfile.vim/snippets/Dockerfile.snippets deleted file mode 100644 index bc0e59ab..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/snippets/Dockerfile.snippets +++ /dev/null @@ -1,67 +0,0 @@ -snippet F - FROM ${1:ubuntu} -snippet f - FROM ${1:ubuntu} -snippet M - LABEL maintainer="${1:name}" -snippet m - LABEL maintainer="${1:name}" -snippet R - RUN ${1:command} -snippet r - RUN ${1:command} -snippet C - CMD ${1:command} -snippet c - CMD ${1:command} -snippet CP - COPY ${1:src} ${2:dest} -snippet cp - COPY ${1:src} ${2:dest} -snippet EXP - EXPOSE ${1:port} -snippet exp - EXPOSE ${1:port} -snippet E - ENV ${1:key} ${2:value} -snippet e - ENV ${1:key} ${2:value} -snippet A - ADD ${1:src} ${2:dst} -snippet a - ADD ${1:src} ${2:dst} -snippet ENT - ENTRYPOINT ${1:command} -snippet ent - ENTRYPOINT ${1:command} -snippet V - VOLUME ["${1:path}"] -snippet v - VOLUME ["${1:path}"] -snippet U - USER ${1:name} -snippet u - USER ${1:name} -snippet W - WORKDIR ${1:path} -snippet w - WORKDIR ${1:path} -snippet upd - # update packages - RUN echo "deb http://archive.ubuntu.com/ubuntu ${1:precise} main universe" > /etc/apt/sources.list; \ - apt-get update && apt-get -y upgrade; \ - ${2} - ;rm -rf /var/lib/apt/lists/* -snippet head - # ${1:Description} - # - # VERSION ${2:0.1.0} - ${3} -snippet O - ONBUILD ${1} -snippet o - ONBUILD ${1} -snippet L - LABEL ${1:label}="${2:value}" -snippet l - LABEL ${1:label}="${2:value}" diff --git a/dotfiles/.vim/plugged/dockerfile.vim/snippets/docker-compose.snippets b/dotfiles/.vim/plugged/dockerfile.vim/snippets/docker-compose.snippets deleted file mode 100644 index 82617cd5..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/snippets/docker-compose.snippets +++ /dev/null @@ -1,166 +0,0 @@ -snippet ve - version: '${1:3}' -snippet volumes - volumes: - - ${1:value} -snippet volume_ - volume_driver: ${1:driver} -snippet volumes_ - volumes_from: - - ${1:name} -snippet exter - external: ${1:boolean} -snippet ser - services: - ${1:name} -snippet bu - build: - ${1:value} -snippet conte - context: ${1:dir} -snippet com - command: ${1:command} -snippet dep - depends_on: - ${1:value} -snippet env - environment: - ${1:name}: ${2:value} -snippet doc - dockerfile: ${1:file} -snippet ar - args: - ${1:name}: ${2:value} -snippet cap_a - cap_add: - - ${1:value} -snippet cap_d - cap_drop: - - ${1:value} -snippet cgr - cgroup_parent: ${1:cgroup} -snippet conta - container_name: ${1:name} -snippet dev - devices: - - ${1:value} -snippet dn - dns: - - ${1:ip} -snippet dns_ - dns_search: - - ${1:ip} -snippet tm - tmpfs: - - ${1:dir} -snippet ent - entrypoint: ${1:command} -snippet env_ - env_file: - - ${1:file} -snippet exp - expose: - - ${1:port} -snippet exten - extends: - file: ${1:file} - service: ${2:name} -snippet extr - extra_hosts: - - ${1:host}:${2:ip} -snippet gr - group_add: - - ${1:name} -snippet im - image: ${1:image} -snippet la - labels: - ${1:dns}: ${2:label} -snippet links - links: - - ${1:name} -snippet logg - logging: - driver: ${1:driver} - options: - ${2:value} -snippet log_d - log_driver: ${1:driver} -snippet log_o - log_opt: - ${1:value} -snippet net - net: ${1:value} -snippet network_ - network_mode: ${1:value} -snippet networks - networks: - - ${1:value} -snippet al - networks: - - ${1:name} -snippet ipv4 - ipv4_address: ${1:ip} -snippet ipv6 - ipv6_address: ${1:ip} -snippet link_ - link_local_ips: - - ${1:ip} -snippet pi - pid: ${1:host} -snippet po - ports: - - ${1:value} -snippet sec - security_opt: - - ${1:value} -snippet sto - stop_signal: ${1:signal} -snippet ul - ulimits: - ${1:value} -snippet cpu_s - cpu_shares: ${1:value} -snippet cpu_q - cpu_quota: ${1:value} -snippet cpus - cpuset: ${1:value} -snippet dom - domainname: ${1:name} -snippet ho - hostname: ${1:name} -snippet ipc - ipc: ${1:host} -snippet mem_ - mem_limit: ${1:value} -snippet mems - memswap_limit: ${1:value} -snippet pr - privileged: ${1:boolean} -snippet oom - oom_score_adj: ${1:value} -snippet res - restart: ${1:value} -snippet us - user: ${1:value} -snippet wo - working_dir: ${1:dir} -snippet rea - read_only: ${1:boolean} -snippet sh - shm_size: ${1:value} -snippet std - stdin_open: ${1:boolean} -snippet tt - tty: ${1:boolean} -snippet driver - driver: ${1:value} -snippet driver_ - driver_opts: - ${1:key}: ${2:value} -snippet ipa - ipam: - ${1:value} -snippet hc - healthcheck: - test: ${1:command} diff --git a/dotfiles/.vim/plugged/dockerfile.vim/syntax/Dockerfile.vim b/dotfiles/.vim/plugged/dockerfile.vim/syntax/Dockerfile.vim deleted file mode 100644 index 4bae623d..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/syntax/Dockerfile.vim +++ /dev/null @@ -1,59 +0,0 @@ -" Vim syntax file -" Language: Dockerfile -" Maintainer: Eugene Kalinin -" Latest Revision: 11 September 2013 -" Source: http://docs.docker.io/en/latest/use/builder/ - -if exists("b:current_syntax") - finish -endif - -" case sensitivity (fix #17) -" syn case ignore - -" Keywords -syn keyword dockerfileKeywords FROM AS MAINTAINER RUN CMD COPY -syn keyword dockerfileKeywords EXPOSE ADD ENTRYPOINT -syn keyword dockerfileKeywords VOLUME USER WORKDIR ONBUILD -syn keyword dockerfileKeywords LABEL ARG HEALTHCHECK SHELL STOPSIGNAL - -" Bash statements -setlocal iskeyword+=- -syn keyword bashStatement add-apt-repository adduser apk apt-get aptitude apt-key autoconf bundle -syn keyword bashStatement cd chgrp chmod chown clear complete composer cp curl du echo egrep -syn keyword bashStatement expr fgrep find gem gnufind gnugrep gpg grep groupadd head less ln -syn keyword bashStatement ls make mkdir mv node npm pacman pip pip3 php python rails rm rmdir rpm ruby -syn keyword bashStatement sed sleep sort strip tar tail tailf touch useradd virtualenv yum -syn keyword bashStatement usermod bash cat a2ensite a2dissite a2enmod a2dismod apache2ctl -syn keyword bashStatement wget gzip - -" Strings -syn region dockerfileString start=/"/ skip=/\\"|\\\\/ end=/"/ -syn region dockerfileString1 start=/'/ skip=/\\'|\\\\/ end=/'/ - -" Emails -syn region dockerfileEmail start=// contains=@ oneline - -" Urls -syn match dockerfileUrl /\(http\|https\|ssh\|hg\|git\)\:\/\/[a-zA-Z0-9\/\-\._]\+/ - -" Task tags -syn keyword dockerfileTodo contained TODO FIXME XXX - -" Comments -syn region dockerfileComment start="#" end="\n" contains=dockerfileTodo -syn region dockerfileEnvWithComment start="^\s*ENV\>" end="\n" contains=dockerfileEnv -syn match dockerfileEnv contained /\/ - -" Highlighting -hi link dockerfileKeywords Keyword -hi link dockerfileEnv Keyword -hi link dockerfileString String -hi link dockerfileString1 String -hi link dockerfileComment Comment -hi link dockerfileEmail Identifier -hi link dockerfileUrl Identifier -hi link dockerfileTodo Todo -hi link bashStatement Function - -let b:current_syntax = "dockerfile" diff --git a/dotfiles/.vim/plugged/dockerfile.vim/syntax/docker-compose.vim b/dotfiles/.vim/plugged/dockerfile.vim/syntax/docker-compose.vim deleted file mode 100644 index 47695283..00000000 --- a/dotfiles/.vim/plugged/dockerfile.vim/syntax/docker-compose.vim +++ /dev/null @@ -1,80 +0,0 @@ -" Vim syntax file -" Language: Dockerfile -" Maintainer: Eugene Kalinin -" Latest Revision: 11 September 2013 -" Source: https://docs.docker.com/compose/ - -if !exists('main_syntax') - let main_syntax = 'yaml' -endif - -" case sensitivity (fix #17) -" syn case ignore - -" Keywords -syn keyword dockercomposeKeywords build context dockerfile args cap_add cap_drop -syn keyword dockercomposeKeywords command cgroup_parent container_name devices depends_on -syn keyword dockercomposeKeywords dns dns_search tmpfs entrypoint env_file environment -syn keyword dockercomposeKeywords expose extends extends external_links extra_hosts -syn keyword dockercomposeKeywords group_add image isolation labels links -syn keyword dockercomposeKeywords log_opt net network_mode networks aliases -syn keyword dockercomposeKeywords ipv4_address ipv6_address link_local_ips pid ports -syn keyword dockercomposeKeywords security_opt stop_signal ulimits volumes volume_driver -syn keyword dockercomposeKeywords volumes_from cpu_shares cpu_quota cpuset domainname hostname -syn keyword dockercomposeKeywords ipc mac_address mem_limit memswap_limit oom_score_adj privileged -syn keyword dockercomposeKeywords read_only restart shm_size stdin_open tty user working_dir -syn keyword dockercomposeKeywords healthcheck test interval timeout retries disable sysctls -syn keyword dockercomposeKeywords userns_mode secrets -"" Volume configuration reference -syn keyword dockercomposeKeywords driver driver_opts external labels -"" Network configuration reference -syn keyword dockercomposeKeywords driver driver_opts enable_ipv6 ipam internal labels external -"" Versioning -syn keyword dockercomposeKeywords version services -"" Logging -syn keyword dockercomposeKeywords logging log_driver env options max-size max-file -syn keyword dockercomposeKeywords syslog-address syslog-facility syslog-tls-ca-cert syslog-tls-cert -syn keyword dockercomposeKeywords syslog-tls-key syslog-tls-skip tag syslog-format gelf-address -syn keyword dockercomposeKeywords gelf-compression-type gelf-compression-level fluentd-address -syn keyword dockercomposeKeywords fluentd-buffer-limit fluentd-retry-wait fluentd-max-retries -syn keyword dockercomposeKeywords fluentd-async-connect awslogs-region awslogs-group awslogs-stream -syn keyword dockercomposeKeywords splunk-token splunk-url splunk-source splunk-sourcetype splunk-index -syn keyword dockercomposeKeywords splunk-capath splunk-caname splunk-insecureskipverify gcp-project log-cmd - -" Bash statements -setlocal iskeyword+=- -syn keyword bashStatement add-apt-repository adduser apk apt-get aptitude apt-key autoconf bundle -syn keyword bashStatement cd chgrp chmod chown clear complete composer cp curl du echo egrep -syn keyword bashStatement expr fgrep find gem gnufind gnugrep gpg grep groupadd head less ln -syn keyword bashStatement ls make mkdir mv node npm pacman pip pip3 php python rails rm rmdir rpm ruby -syn keyword bashStatement sed sleep sort strip tar tail tailf touch useradd virtualenv yum -syn keyword bashStatement usermod bash cat a2ensite a2dissite a2enmod a2dismod apache2ctl -syn keyword bashStatement wget gzip - -" Strings -syn region dockercomposeString start=/"/ skip=/\\"/ end=/"/ -syn region dockercomposeString1 start=/'/ skip=/\\'/ end=/'/ - -" Emails -syn region dockercomposeEmail start=// contains=@ oneline - -" Urls -syn match dockercomposeUrl /\(http\|https\|ssh\|hg\|git\)\:\/\/[a-zA-Z0-9\/\-\.]\+/ - -" Task tags -syn keyword dockercomposeTodo contained TODO FIXME XXX - -" Comments -syn region dockercomposeComment start="#" end="\n" contains=dockercomposeTodo - -" Highlighting -hi link dockercomposeKeywords Keyword -hi link dockercomposeString String -hi link dockercomposeString1 String -hi link dockercomposeComment Comment -hi link dockercomposeEmail Identifier -hi link dockercomposeUrl Identifier -hi link dockercomposeTodo Todo -hi link bashStatement Function - -let b:current_syntax = "dockercompose" diff --git a/dotfiles/.vim/plugged/dockerfile.vim/vim-dockerfile-example.png b/dotfiles/.vim/plugged/dockerfile.vim/vim-dockerfile-example.png deleted file mode 100644 index c82f871f84f7a27ee90783ac65a997708e0f033f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57722 zcmaI71#n!uwk>MMF;mP;am>u@j+vR6VrJ$xGsev9n3>s*DQ0G7X2$+W_CBx9{r|pS zU0q$J)>@M0oRY>I8VZw_6+?u>g#!ZvLzEB~Rs;ispala17l(oRT~h1h@%Z}(%1}y7 z7!361lhaWY|GNa%PF%wg3=AIa&lemlEd%>^A+(c(j0p4^EIbMdMtYEJ=I>Sf&Q_R}fPo-HQuCN&H&B z**~`j`g}S4@&M)k@vT#@s$DlQ{vg9N>&5HBF?id)P1$#7D*uxp3`yW8!O(Z%rU!pRK8WzY~V!i~dvp6!K<)6oc`2b#?DD?`B-3( z)|6EH=f5?dLo2%m6z2VmxPaQMg&ST%0-nUPI4nCBgI5=-y+DxdL1)j3n_AStUTsgt z=0%FaO9PUsnChjx6)8q$yj2AtW8?(NK59%7oxd?e?eeQ2B3=V^F=izL!H7yQudJla z4@82QGK$NzvLr`l$t9q&^lZbIjQdXv49mkoEF3e32?E6bb{Y1&|2*zQj=>-!Eg1sh z8FUk#H(Ny9amiAL79dd*BT7v!9MF9L(RdRsAQVRvoqiI04W*TeXF6DzmZHZNx6(1j zo1{JL!WJoY%<{NV3RZ+%UZ_3y{Tw=iC3?!wWM1E(QV6~@OdTUO5%P~oVMv~pL9Jh; zr%-vUSWBKQ8m%aMN(fhNl%vu=XcT z%@?M9c6;M8jiifgxfgON`JSLGmCh0r!HbKoB8Q5kYTlcAGOzD4$fU3$*l9@2^+~Ya zFsm=$^2QD1Uoh^eeEW_5Iir2fm1(%1!VJ%Cea5SWEc^9!%q(ybML%l4PzffvhjYrS=w}#t!uik&=0rSnfF5~^xb++=(InVAKWyGGzelQ% zmvUgT?c!`g&jP4D!4ayfcV;iQ&~~jecy0r0%NQ++bpLWaGG3g;ig?1PsFV@8a3Jj1 z+Qd|V{|VX~IRex1Cvj~Y?IMkqxwYMh8S3AzqE-hA>-Dn@-6^}iAJ4VgpV60RNe%z7 zlQ?Kht2V?OSh5SWbIu^o8T3ak>I|D;HD4`Nz4Ybp?l%iXDh?^6yeHUD`pFe3$0p!z ztK?};X(P~iEo}4)4V=CV?(kuOw;(N! z%HQGUO}xTw^yW>Q*~OY#Y)*mSrD#Dp))bLanz1%162O=?n#wh(ui8t)Hb3?3iX1HD zk@*r~w5`iluFHX4Qo<$qqP~(Cyt7+a!@>5V3AO78lQ@i8197VdKyeSCAN34;r9V%S&|s zQ-uNwA70kr^S1?h4i`S%(qqa&(sY#=O!Yt5zcdy-<{{LI3ZG*gQVK_<48RUjSqliE@TCq7qS1GF{FAs1Xx+a+k@U+N?p(eRLQTV z3|O%erw+q06n3GqN;pSjuE4imXgnj zBdapJ22NM94)pWOJ=%KC2q=$KFbsPSunh@RZ~+jw=puZ?lvh-6Kfc0%!^<}Eb%cf( z67CJW=V=-jGxmhgMpW4uSIB_++f0_AbRX#`ul{Er>-_P1e+m&jS3~)Cru;32Apr(CDMEf$ zb{JZisyLB)F7OWe9oth~LvRuQtX6^_FiC^~033B_WNFLkt8NQF5O&c@b(zCeZO=sBT})^ zRkjb^hjk(e;Q+lMsz1QtNxbNs|GkDS-mT1fL#?|>WY=!nm)$E1oqshonA`;3w4cik zLR0TEh)QC+?zZA}fh~@WZA-_*`oarVU@m%RqvEBjs51(W#qp6k zwtK`lfU9Ri0R>nQF!vpU7kx!sL_A)ZW#{}Q+(!?)X#-SsFffF5<9?#RkNZ=0H<3uM z=X!8R``R5Z$7u6aP5oV;+4kLqP|n8r_EDNuZ>dY2^MOX%K*`PQ=xhzCC1n(0)Pz8z z#-n@fgv8VA=#RmFBLXhBWf*3$9|mTNJ^Q>o!atZC7S+kQwA2$fM2XG1^GMf_F-`IF zA;!vkerktcDx=j<6I3AxkSsI#?yy>0$@ex-<{reu$Q{5FsnqT?GBHR_?6w*`vhcL9 z_K4P1vTz>qN{c!|nF?DUc(1L`s3n@5AdO4RGaj5Q}8?+P9vy!iEbs<2tVv}`xG*ihP5C$`wTXy-O6Jpt66PC{l+J)}%>GHdVk zmM7&IW7^Y9&(j63ly2Pk#j8K$c%)I%nfYISvs!aeg|`1d;(>k$JoeliT2XBNj@E$Eo2Q9DXg`)pek!6EVtdPc^u=`v@qS+7(hbP95x4bVexr7)QclN|Snj z=HEDQ(dKUOev@4H+{K4-2_6sUil|F&9}1^?+C8u}np=_LWa+q>rdazr?!8OU`N-6^ zQ(N{Q08vwf_mI-bQRBEud+z;2uGrNQkEc7fK`@FVw%Xk_Z*|gsYKf-T>4L|CCKU1F zs>7Vr}apfPp;w!Kj@w%-YQHL=MmVLj&^baj; z@sl?Mu?%2JXt|;BV9;GQ2-m*`@I()F>T1_lxjivg;+kr4-?Vph zErP^}e7cqg3SoUq-`tay>mgEJ`qF8+S`u9^n!`sbo3pwq8<p5JTd!6B%=x_xo?-a3e2Ly(Y=rGTFKV2g+c`pHXMlu*f%fGh@)|Ta>+rkV<2av}LkW^V&pD=T> zAgBE#wuaLnvNG7>*E%f_JIQeZq3hy?<0(u;_Ld@&@MXn@tG&HZe<;ctrEALWmuvF= z+F~llXf({3sg_|N!J zsS)RI!=&*D1je2(epTKC@}^FgYD&9Z(a^6;E)6#|Q%pM9*vTx~V_v?`)~k-WoRO=i_P|1*H|Ivl%t?9SFxNL&^gAtz>*+IA(U6{B zp*q>a5GXB6%4_!;MpnO9g#Gxn?83vP!pw>C<0aIr%?PABFYwB+(_Gj_V-r!zhpvrC8{-&b#+(G+&acY^N>DCBBhsD1cc`%ZpN+;jRA7Tz@-WX%dAkk}5yne6>E! znypgT`^NItatgIOCS1psqRHqzOiZErBf4}J_75m4-dNR9xy*Q{exflnjIhyL3w2Y3 zKpj=MD=0dnK%Uevd#_Nv0UI@U{7#K7I7+Kv^*VWAxgFXobwy z?p7Ffu|9~VV0Er#)&XhIRO8X@%n!{-?TA~lCD;fp&E3em*Do17&4b@-@-`PMaK1s# zevb(C=`yIu&2S}^)~zVx>!Tfcp_{tn#!UNz4o^<5fg6k88wBQD$Y2o}^{Vgm6yyWE zb_XY~<~C`hSvAU`_5JVg@17Hkr%7^)C-U@096OK3_uwUz@2Gb-?hyG0*Eq4ja>Q|Z zF=A?wEV)2zeGgtk6HgwC=9#<^9>$)`p#=AOk(uP9#D3F+^2isTT)63&syWC)ROxkH zRyJ8g{0$NFA5yVTXW|LvCk?*^(nOkM27F%goB63KMFyH1sO`p5+!A+rz_bi`2lrcJK6is62D*P#@quqD95l$7T)SDM^ zv2$-NcO`=JEh=>N?X0uyvg?%xBxwV@wx=e1L5580$#4)oK0jN}1nn&`U|r6l*}KfW`smoj{ATkmdJ&>mUx ztD>@*i)H3L?#5u3L*!zETcB%Bb38k_Bnwoyy#jqVIyvn+cVJhee6`gSLIG`Qh!Vv72M>EA zDBGm7yX^r8q@&G^DHqJy5C@sWED6BERfj~oeB*>Ozm>G+;NA;hP0hZJw=pZ7TCrtx ztq(1?^0Gj;2mV5*=HlI!FFJzX#$;tC!i{oY!KNJ~LjTcjw&v}GSJT_q7TTxl9_lku zN5l!}K;-ruHyqc`mq-Qj)!EBq<%yDmehazFCxzuRy4_sO-rCCJMD3>!(fUW8ZFV`! z>Y!6pe$E{>oA(`9+AentIo%iHB+sh-_XSKtsMm2($$8A_R@b5%^txNW1wd-FI zYMYcA;~iyy&x7+%Vx11_9T!|b0L}!+d_J(_nIkO+>Bd%;a7=n3X~2sdGM1=cj1V&P zEl0Y4qV_HRKeSZ}aL+uXzAg%ngK+96D=Vvb1fj~Pw3`{E)L?rb)xoRuGl9}jOYaE^|ekcY^J?7Qf35VSVo(KsarpDho;@u9)C(m)oe7kYUq@#5K3s~dZ z&Lv@_g3n!l+#fB9Tk_%0yM9;xNc)ysJ?|HZohT70@I49ZFD4ZHkOUO9B&S^s*WJeW zr(!hR+iCxI?$3&1%+!{|HL7%vI;@GdrcyR!XF&I~?|qJKe|ygS=5W-rkuj2X(P`@KLKXdJFO3&3evu`-`rq5oYAwS*J(w!e ztE?^tQZ$-SH13n9d2MAdv&T2Da+mVv1`*&|qNYlyqIajUCQM0q+BQg)!T-|=xYUNc zGFZ?$ZS_ZOI@T7$Fpj61g@wt}a~LOHLgZrI<@Vb3e}?$mmPCcw;XwT`yZ$L_G&CTUGOD1!Z>cU2K*xdtBUcBw+&?FI(_&loF?;3 zC<4pmZe05L--ISG)^|_-afNdIlCIyovCE|tt}$TM;omVT9I0LUqr$5Gn4UkJKZd5> zU3>dJ~R|{ydJITJN}Br5uHjA^I4N7YE4Zb zn&}Fg96vr%|nDk1QY|{UsSTP>#51QJKS71mY`m z9bnvU{%+>r^JNgT=NA>Jf}_uurge#55wzfV#w|gM9}EhRh<*lM5zd#>_2&8?mll2V zWYJAVj;#5H&k|UZuc^^dgBfE%Y_N;XEUmI@wHQ2BmctQZVCTW@kJ0~iyVwYaU`bfu zo?Fuk6E!4K|JIGDk;r8dSnTK#m35f{!y2`+q;4Zt^M%oDQ9PRMS);B6mjiQpK$dt$ zTW%}qtlsh`4x<~)e8>Ef2W@s&Y6cPT3#~f>8dPI^hXJ%T5DY+XdwETu&P$h+qKscwY&7#iir!Gx)ct zhw)>>;nK5@#YJbaEs%3OR*I`u?vmNzT*$x2qC|)&MNs4j*iLS{E}7Zb z^rL_+YuZQUAQV?T)&-Z6+q-$OYgm!j2Ew@6)i+%@mSh^9wRoxc zd9N)0SDLWOjQe+93xkl<(H*Jtp#+A~;P8)o&V-D@`_Rpb*7EbB!uxh@2lrKxx#c?V z$xpwaSjuUX^=AGd@}CIdAxdb{;D;o)UV9Z07+I5Ni=ke15rX(RnXoZPOdgs zu4@@JP?`eEV}ptFLI^ox;GR$w-qeufB8p-?CtoRQ^ix);t?DJVrsx_Ho+BV}qQSPB z`OA=hers$T6h~>K$lsYb)dhhGsbq-D^lWEnlF?J$!9l`MBW6MM|WyorUY8yPn^$ujz?h^!KXAu!dbQuQ!be-?M zrA|NAm3}~wM(gjLSbtgIPR)JioyTfKW7<{^c5_&ipADYa+14jS z{}Cfii~!AZ29B=7IkgWKwGvTmbqNl4&d6{KMDv(ikoDF8zuW8YL&zQ|$PEZBA1fT2 ziVP4C#^Xz1_w?v0&3U%-?7_AX7BYL-J^Z;-y?gLiu zQUB6U>qop-clyku1}{^ozAXbhy<=l_t@L&OA3$30w#^sv10fIl#QKy!PIl?G<6?D) zol@h*iI}Opohqw=qgg16Z(S*@mgfaM*L27rDxRgFkp!`k+2>j7{ArZ0bBpGVmg0o0 zDPNAOJ-hL9H_-H{L{USK$jdwY$lLH#jL6uvp>?tNF+M~~h95IyvplPdYPl%R?0?9_ ziTIIPOU)x7g>9#(cVTF^EFRp5p?Cmh+5GMcsQZFU-m4Qr_i3QpK;lsIy0{h^Mqa}H zjaW2>aN^QGbC&Bv;8~*X9VC^Wss2&j%B5NS5PnAFkExLHyg>ye3Cq~)GxOsAjZ6Og z?*u_qM@pTSt{;jS+ZUJ{_+)%-Sob1`tolLMN`@Wk3xcWF=gb($aRVIzHXDq~CdFnd z>a%4*In}c(TLg(|f;}pIvB}@0D-=c|G-msw# z!MoDuhpm+ZQL8tL8q8SSgB89-Varhy99cVCyFr`+%c4sI<`2Z==Y~dc?PWfE zY$;i9#5|isK_FyLQbyc-&@ZcVE>H_dtYX2c;Q6&=Zv5?;a=_GgLU-)`nOd`hFWGh@ z&k5@P%{*^^4IeyH1Sc1ZF?>!eBA6a$w^?-)hM$?7ygadyvHsXwL?ovDgxkr0L%aOwffv4bwZlWN#K=|ct9Viqy60N2s! zvkbYKUoA(aQ+)7~2}~2CpDfF}gw6nh$7(PneNzut-~Iy@VAZ4HJcxSbEDe-3!S?J3 zdK3Drr5N@qVLfQkOs>wSaUz+ViK>O8aC=tcw_#_3<9uk)Ch&W1oqBtmX*&{Oix5pM z(mDrkTMs$OWo3ya9qm?Ls(Y{xH?OxH@drT3M(0Az-~_{GkeK`1{qfD69lX&osGRfxfEBwMQ93&qvtN+96FNtj zy7Qp(jx=!uQeaBSi z-@1c;v;Y^?_@Ki*ninkigRFmfz&6;PEg=d~lrGO@B&s*U>S zxchOAut%Lt2L97j(Yg3-9c#7vq;oE{|GpMa>8liUhXe0tvGem!zM zU;891*aDut*kU--(MVk`hnv_Q_a3`EN{hm#{mEhE2IkM8g993*#!c4oa3vd?9@?01 zyNUvj5X|gnmS+XaZuCVxd_4j(t(1JNlz8s4%-*ddNciSuHN=njtY$+TrHnZBzBF!~ zT6Y`YGQMAP%VwStFBeay;SEtt^wqVrItGcN5gWTe6lGhIvMj~;`*%>rH6?$M-#vMZ zZ@w9B0T}{3SZ9G)BW(=AN>eztRH|5mdO9QJXlv>!bcq`S*Y7k6ZB5X7t_o|rUpMv# zrSN2AfSM1uV`;_cz=x0>PFKZ`qA{7*m?QkjMN|WnvaMd!SQCU_{io!FY`{S;qui=$ z7t3LS+ow3~UO-lRQKC7#TKA{aF)It$20Dzm37&vLEIh{T+|#x(-Wx&sAQz1Cl2y>Y z)qpv;q1)+NZl?LM+jXs+`X1im&AkgvolVA&h>~F_3(aOto%f!JE-*hfuH!k)P-6EX z<}G+8(d)d;n{LUaVI-I3u+L9edAGWf{?oNfZ;m~$-3GR(usJx7=!+Y(~A_30y? z&NeZ9rxj?uE+p2V+)RN zM~Z`2tByMo$DH0ZM?HnBP3v`S>qaJ7WWmVA6v5*QOZFdr7qx&_U|Z|K#QDlpILKS zsdVas4s?GN5+}UxNFKU_&Of!<%AFahO{wp2z8&v8t%cPH7t@D#u8qQ1?bh^G8sfXq zBCm4AZ7EDDst=fm@y-n3mgwD)BJ*mAH*ko9o(mVM*l7oL$AoY|M0#XGHmaiN?->Z&7Vx@|emJO8*Q^L*wnqzcQ+k(eS8i!|lUN zMUKpNvaxr?0~)?o_7P&h7Qy7YPjIUzQ4PTLB39S)Sri|_nwh;InpgYitGh=)qS zUD@!GJG$RuI>fSc5b1mbqN}9R`st82#)D?2Yd&<|!*zOYOWLSwhGR_%NA7QvA=|yB zl7^|K|I&Epec)|Qu+jn>jdydJ(?amR{sw%JWdr^egJ_NqVwLZ|DiM*dKtB5wInHcH zq&T07Pw$kQfy-S1TAbEtxtV_I!~jbeH>`KDF0Ek z18tsNrPI}iftd*l0j}JElDQJaU`MGZSKQ1BF5i%grF?a5tj&j|T*Sgap5El?NR~1` zSe!nR3YZ-=l`B--zGc3j)}+_YE4=@qUfMw|(M5L<9MP`qg*no-!Dx5`85%h+fANu9 zZ8L*w%By-ckY`|=YGKaNy)1Q5k7;Y_F{QfMzpi%F>*^c+9xfIIZTU`GKW>&Aqkoco zr^y|U`dgC~`{Q;HsC%y6X7|<_SYXpkXZ1Ga}1s4`2TmH=S z5Y?NBB7TwuoSs{$qU%92!eN``U*l^ki+zI=w)#bYw3*7ZUwp1D8n*}9r9!;+O$Xm@ zwy(J}n9Q}E*1nxvRqQOQ9ozF*x}EPMOYpcuJ-q%%ExK3{u7QSmEVfk>K&;gy;Cj1a=q?Wj}BW1N7SQ)MaSgK{$kIYA(KX zL0E{~$Qsze5>dQeBF_Tmr;=w!FPbqV$~wD(jw;`I+1yusjHpDVP!|9Wr{G3~WNj&# z(k9EFAoSRp<-w))iGxql+-X)MzFO`-W-WKcbbdN(1byU7PsQe?2e%xTd)=Ec`EX_a zdcHigYHYiihGk(7c>-t^0%YDV^5fF5U``kqs3J;bzxoTxd@!ZsjqakouRZJ`;56F7 z&Z9Y4;(^1iK13f^;<(;~fWum63L5F8+N+7mnta({r~wLLckxAM>mM-KPMjTF*uR2> zhfytL_qAN{xSg-hCDhXdB8Pr1U0%9Ew4L06rUJse5ly_j+W z?iK;hd2b%iUWn}8p})ReUl4A6U%4QE>0NN&n`?S1%{kjtg_aiLbX3JJ1ZfVPKee() zD-mf88yNw2!&c}`I`}eYY&&8obZzo4%ZrAZs`k$74!%2&E44qjeRyx*)Ns)G+AW|` z2A6{Eat3g__#yDE>xQ-okR;c!AZXa08TZEEcXa&dTjfENeP#ViV=p32tQ;LnK1=tn{RZ z8Miwh8MoG@7(Rx`(3at!God@47Rjv1WRp=fmDXQ4~)d+EWh9GV?&~e5~CIUz=+n ziS8Cd5VmVzOAsa(l#cHd_2vVo4~6bpN~o<(4)`~Qp_VF77Q4Jn5w&WyE{zuyCoT38 zc?OwS%qcEZoDgt*tVt$1zJ04z>@l6wLH^R)Eg&6cZqzT=NH2%EX8o{&tI^eXlbmOw zsmPq_H4cV)M^=A2T(&$OoJeN1c=4q?kj(MQy@s_NgyIUag*ew;$c{Kx#8U5VZSP~A zR3Bd?TU3D%G9@#jT^fD%U~_x9IE@H;AbggSF*{m`C|j&9%zv#2U~%)B z{u+1Nkl-eCL=<9o4mZu;I!g=WA?a>%wcFa%Q~^=t ziGDoX=8J7zRJO$+qqi?1UDjHBvi{pevU*orG?CS-3kR^Citk}#I+%EeX7c7yAfJp^ zFrp~;d&a6qDPMOqAH`xPHbCG-Eao7Y_z8Kr(|ZQEb^$Ww1~|_EChtXFoIy{xw{3l` z6Hhl8VeNLW?%Ke;MBclpG1l@oEFYgI=k=FP1XG5}7gm$3p3^|)bx`T=h47-a-hGv` zEwd{dM4>z841O|HBDGb3JYhJVgEchKq@h>xs3~1*xtwL$LHp33qOMqUtsK(ZCvIz2RhWI$?BS zf?<30cEYWs`QR0juX8|LxgN#U8R=x+Hg^{Bo9!|S2*-(jA!~DQrwsGvXOnetxq;LP zv1+>q-GPbMD7;Fp%ax=m-AkZ~%!@Y=x&*M6Lwr`3fAC6lFE!vlOXQceGFYou{oh>s zdF=J##Rp8E8P(1wFB(dZa(i=p7K1N?GEP@_F?-E|;TpHvitIsB+&*QnG$sZah|u~- z?)zI?CyO3771+NbL-%8EY{cz9Ro%rsDwD9>!)F2uo3i~nJ=LE8MX7mVX3(73~pdoK-=L?T^1ilAaFZ>%;;OYsSQ zaSdpQVWRpjtm#&?xWWZg!57&}h#&v;g<$02DAn_QPYpb(b^!!=;?p(yjOhOA@=)j) z`(Czi>*7Vw?9s6wWj)$yip%h3#JS<4+g+4>s;||7%$9ItS|z!z0^+Q{8JXDV>{tbD z@dMr>&lbEBIjLUG=?GtKsN@Q=yD=VK6WestCnOeR4SFQCinrhbZ7hSfkY8{Iw5leCL zzo>SmL+8}wai*ywV&tH$4#)z+MoMc_%A1saEP29E9zFmC{Y!I1`nxVNaXF*r+D))W z1k>x1V-#7ghX^Eg&s=Tn=gsvu--*}-NGX(waugm$*0xG-z^IoAAF8JN0O#ss&)$`4 zi2BG5I^iDjq>?0?N&@*#b!_U#ll;#rv+Hvu{Qf&JP1Bb`Oe$HrRvZI%Q*RVZMRdu@ zL{HIq>_NM!6!t5T@?}CtDi^S-KG2xlU(b-A(DnHJltS>9a&g9mjR>kLozFW)OUc%!Rie1sY_IWpxEp^;8x z*JR9w_lw#86ij5?ak3s>%&t?Iv2y-mVY@u^^%$iKXlcIr-p5~&t{NG6eSTy|Zi_AP zSUi2+1ofj?gK$OAQ0hZ~&}cx@vLGoT)Sy{01BZOuf?PV@tFws(AHS%qqa&l7*GdBj zCDrpM&CDmBFl@?7{#(WY9UUn)CVar^qVeG2B4JN4HkQgBUBbn?d49==ST1ECq6}#i zdu`dX4d;_K5Ir6?{(iIZA`>9>{1s|i7C5#pN65&0S`VwuP2qP*f1fKQc@PLLI}co0 z-s7lQvtCd)#7^Bby_t^kYAMOu&hv1P(k20H4QZ)~r4A17nk!%<7k+>M*VcuMQ1SfA z1AXjztx%a1=E#z2ugZKJY&Fjg>9O#>HmBDu6R$&J5{uy-YC7uuELS!2Q0o)e3bGmg zjhVQQ8N!WN?lO1Odbqztv0CjazuZ6hF2BF>XkY3>M(f^I=}EucZ=*GgT&?UpRlL08 zT|XWhyn;QR(UpVT2x8W+>81FCj*?@@N8A_>CeFJOPD*_Oy@0TBpa4MCt-=f8`HfOF zLmaZ_i}Osn3>Ci55nub&9XG$v9d2-P*O0SgwDG;a*i!-X?a9^cQIUg(1)rXeV*7-* zSmm^HLfm)_>{!C-Vo&rMfTzUq9QLXGui$wExU-MxckrpCLg- zIM4gWdg0v^w3;zywYa|8dyp--SdE4wO_n~QBXEOt`q;Lz&=_F5?hy&dUy*I1TF)+{qXttD&c4#AzXi?nuO0ZviHI?u`)f7d z{k#%(RuL;jj**LCTb*>4N4ea-G=q&e^dMZkxe92K`=eoj?~du{jQcIcrlzK*q^JMU zT(iJwWBjk z4xvO_FS#e_(F3l=&PIn9B^a)Ay6hB`67;WFg}AS!v5VTD!N+Pl51?u%;DDeNUSEvK zVDACHQN_4fr}1Q%>W6orW+x+zuu;Wk2>&rORINk>kM{dcxG z1GE*Y1A^g|BJt^8sbE~6w=%7IoLFJLlcqb*fh$6t9nE%@3cla%P};og;M+*74>XA& zDNA7wJ!|r7Oij1slz-yqOocV7I8;>RdI(2IXeiTASW`pRRjEnlm^Q@!3E4F!*ftj6 z>>GBh5|k-ddt~5wpj00xOW4~!peXq^mGS%{P3sP*&2yLt6ieq!z^lZQ!o_KBq+4;c z_A-qG=wIu{X%0VXl~j#ffVHj=+SM!0mK*Os8Kt67=GW?wko00-7YH<{T;JE4WMu$C zLP*(fhL%kVX5;o3&}4bSm#XZ7v7*4k)r!C$2P zRN;I&jka*{PQ})Id64&6cbTtfVgcQjyms0_0F;H6H{aya_-=`OD36c}L4l2+^WooH zP$`_d?HjgDi!+o;m9=RIxgQHK+t1{Uy0a4QtA)5;m&*nSNOFfqD-O#J^yKckTl5KN z*r*J#b>aYOoBYt_Pl~LCYfR+1!X?E?Hvnrx3jy3-IZocZ%10Rs%gFE>$o3ksJOjd&yz-5J)!Hk}(-p}2ta&5@%JR1l7ww3!=peMY- znD&15F;4oo8*{TxjnNmLj?F6lJq|Y7)<=GujeB&x1cCX`Uz2LC0dsoQ_rF(|wfN`R zjqAy`1?E5{`&XxVzvO9mi(e%Q%{D!A8J2n>3?z|xF`$?X9f%>F@qM@;0DXJ(%_(48 zA~eVC>BXvUFvRZle8qIIvg_)9Q9{9JhP=`0PZ=@}GI2V>V0L@}QjDo^y~b*d3-E2J z{|~{ED0J1A3*uV#M1TtU@7qp^EolIx;sW`tZrdPqXi#)xT@HUARiWPCJjKjro`)<~ zTX2nmua?*n7SwzN>!uP0^@hY=P!g0ZPg&Sg9S=G8{WMHc6?{=1-Qzn4fa}xETtkL~ z5eCbYVhgojvTiiY+f*3e`9{w%1^w9;9jhu$)u|4p(M9D^u3m+pB z?0C8GzQ(PWH=9RfgSNIT4x(q288#zzrwy}6-;J{Z=C;)P*ljK%kqfWkGrIWZ)AE{C zRxRX@W;AqL4bCFyjX}%f?EF6VEIT%My@;;S-8w3x@F%YFW)~@T%Z*k$C&5np+zwC0 z-A!_!!_QGmM8kXOv_q)(wsfMQ=@z*g>{DeJ|y`d-PC5I_&v zL6VlLhJ5hBNX(mkH}P_NhbvQ0G>9FD^xlWP{Z!cY+C*@i+G6`W@f$bap(79t-NVoN z^!-dFau7!rog-s$JlEG$U31(-JbLHm?>O^Hz)QXi*#L~$* zHt`MWRGD6NUl8r=1?e+9hkB~DPt3DZa82m`ghY&Z+QC@3I($;?mUHYG<`6@(Acb7YD=;;zj@4mS+ zjwQ#vbbtGqFx))>@51LhJUG6y6^J`#K6YHM=a@nK<>Q!-=^LAk$rus?PTIwy`i95= zZ$GW~CR;S1150=(iLb}2^9vTgeUB1vWLHzM|ioi#V5E=x|E34q;g=*SC`avu)zjZna$?ng>zYc_G&`kO^ z*INTV3<_9bZQI=gNcyTCUt@p4n#OcL^+H=&C+|e)5w?7h4*lfZQP3hrDV6q*e#-T~ z^ivU>+!~_nj{AGoeTUDc4^e4uT&}C^$;#eCM)Cza|BCpoM+&1{n7nEu zs_C`F$n1eQ$emilB>}U)?}p(~8{})I0^{0NlEDbJ(muNki)iz^B7E=omCX-ir5M8( zv(ihJ_-_ecsGeJQo>|S8Z_M}2I2j(#IHR}(GL()|6&!wDSOj9g9_4HJA8}f&Ny)f| zIE!3W96T&fCHe?h&-bI04V}XLl$=RjoNR}DR9>2li4%CVZ5vMIcVyQBe@-G_wd>>) zL(Lns?S*J+o^AX?{Rk068DJHT1qwiOApw8yvjV&b&7n#V{~SSwzE^^D4)d`k@Yxb! zC3H(&lBz2fgL_R#6CRGumHDXN!LpGT$7!GtB`P^>D)EN#tc-264`W(J%*Hn(i_hAt zlwJ(t%_)KWnWpc^$5P+?r2k_uM^T!TxIrfR&a8%w-Dx-Zs%S)c+v<30xL9k8qII;f zE^DTO!DT9Vs*aGTXFD5ngoB7a_Kc2-Nr5QZ_NuT*N{q?LW~%VLiGjG4V&D0Z0=zOV zDZceie zj|%r;6nv3g?a@l6JfZB=_4}gNLo8QTl}HAV!@OZ)Y90NP6mt7b7s@+ga{GCEUS2&G zviR-e#mEWAGfnX5pzs5A9oz3!$ruj9(;>b!S?{1%D||CckQ zrVP5j8Z+P>c*KC@@#M!_T$UZvtZ0pcqK?YIj0(uv79?^vg}*mzg&2yr_ePpM=!<1d zb*0&DAFd^l|{BUp`YnC4A#ysVd!T z#SWq%49l4_-v@9M#k)CRsJ##TYJ2Ec+ynoBo3=u-8M@to*UPA$k?|n@<_C=&$8Sbv z)*;>mZHd@x2Zghfz9`o}R&i}e|b4?A@CJgjr_C@K3Tt4My!6_1=bmJ-g| zZhXE^lC*&<&u$#JyVc;BjE{1$n2y_ybFoBJvsdirDi|F)4LPlAlJ4$cN{HtS@^HYV}h`n zvegWgjv7$}(u$_Cw<7FIzAF(_)~U(SM4NqmiA*ucdSW-73xo=aD%|oXH%>&1cC$i8 zGv)ti0b~s=tT}Itma(f@v6nhq_ryB=sua&|oBJfn>HYaOm>tg9>sYj604vfpYa<=V zi`cRFJ=3U&&LSS@Wl(cPg+C_0KD{H~ziE~SX;wdSTD@Yz)B2SLv=}NMIblC?}^<}1u#E3NKvL;XTkc?TiPQh` zisA@IMo^UwOLdZDpHa3L)FtI({JZ@7`1$sS>e?$QX$z`U5LL(5v4tfF5QsCQD{dkb zCW{Qti3Bva?x~49(v$abY=TLXT!e;PY?rpweTl03Y`Nlu(3$`>-Zmwu z1Tkx^El7C4$k_Xfw~(mhbU!FlEG?!$f3!K4YR1O6&lkavO=fZRJEet-I7KU!{ed#$eL3-?rz-wL)lx#MfL4{!y*WRgwlULw9#~cMUNN zaF71axt?=B&$(VaFL=X;Vb9)c?X`ZtZ!PJ!&ot9&U(de0X1HbP`3YZ_YAKQ)Y z6fU@V7*9M{mrO?sLy6KUJZ^`SF;lV@Jxq_5naY&0c=HZqbTSE3Iyq$6zxLzfwnZ=f z(CtS-=J`8l8@GH}x*WNUB<5FELGtC*M~R;_+}|U^$4X#Iyd_xmRKKYrAa6m{sPM3F zE?yn`zS{PPaBqKkR-fCmQ>sTI={ob=G&tplgUkDA>It^49K5Q)q0c{>JQBYCPUQd4kInZ&Zi13d3$|36i$Uoc1$da-j@8J$+VAj=xTmYXu|N-?Qwh?(d#U%0fGn;{{@V zk^A9srUGmEcs{m~YTsSy`QreW3Pm?b=Ybq`v++@H%d`WNWJ#8$*(O|;U|TYvul$M2 zBauia?qg1?znu#MDLe|m_QN)g4e6#2Wq>rM5Ooa$;)kknfPPlt8$)(X8(43e&9@VXihS_eWU?YCQ&68Qjvyr7)%#@BiMZ7uc(4bpl!L0n@6N) z{jKnnirxaPwl&?xs*}*u0FPk1J4y#Li0tM#1I!d{H#=8W=kZH=2a)yyYX&sO6VXHrYK3l6-B~; zU)8z#WAKzr>NY?kNpG#a2sltQXuCCUwtF@@O^)v{^$~bIo)pAFY%E@nl1Crz||Dz984)WVQ-g!`moZ1*4YM$nt4!5 z3v8^*kRhSUYHdiA_q@J?PAj)}9T8?=ojgtcP|q+zrrx7ZwuYJQoojGz(2d)@om90}d+!FfZ== zw8z}dpx$nLg2&mhyrAQQ?2hcW-!K+;_x(KU(lW#GslhKa3Y)cu6uZA9UudgZL+u$T zSo#30Zx?Z@ja}X{Xh#fF$NXc;0Ad99F2h<2eA$Hfe3tHdt1BRfvrnZc%F4=4hP$=x z-F>scdr%kTD!|lc!sY45o^-+bTcZGP`!`g&!@XYLkJIO^g_o$2nEf7e0{@yaHg01S za$h;f8n*`jbvPjX^%KEsZ18&`Y??0AjWf}a>nKXIKa=8?F`E1z4d@@=&nFljOW7X6 zti#h(h((zIrdCzXc#9c+g{N4h+MjnDyZq;B1b2^Eo$rSZF3|AR(`Ra_rOcxGlZ}z>=~yg-)LNMs5Z&! zZ4w7>58z%X}-uW5y;c9k+#;{OxyfOXd*TWqN8+{cFnGnZ|Eyn;1$2T_51r3gL z@q53!{i1Vw9#3O?t3aPt^UT)vZfvDe6^BB5F&*Q2ZJ!aJz|XGOa4&L)QpYkTJUY%{ z$cq{~g#y`*w*8?U7xc`Y!i5x2sUPzu1g!i2s!-XTYg1y zYke-arR_wctd8RGDt_NMUGtn=$24Pj6+qV;5nil?f3c0X>NJ1W+kc(Qw$o3LBv>ub zkB?D5_!YdSYB~h_c`P@)8$nY^pf1GerzM{HITimohKVtYhcEpk{+A6zorNDuz#CO` zp&)jAT8vd#=BXjC2#!3V1 zrmN?44F=2gXYm643r-gnn?%A+I+ppYL%oQ)++o8!X6tzTgT;6?#@Hm_D>It*N3y+-T8|uPhV( zzgPbP)mMJoO(WRh7NhT-z%e~EEC|mOC|5re8E@Qm_Oq9oh73y1BrT8av~=L#pA!S~ zlroxv_0)DZby@=CYH?e=w(-UDK*QQDxI7rBXTx1^O=&eI9vRnzWkcO=dkURN_xCal z0|Dm@n2Xle*6Quv8SP>x7K6Qdk!l{MUs(^-+KYAR3S}(`d_}~*akzEh&?xn4ZELa~ z*1IL~mBu6Tl_3WNt9i}1fuxLxt?xs#?%B6(`rWaKQhCN4a=ETYToZ^?e~N2V4f(gk zOa)1wy#{X^Doa`z`Aa_#cTF>c89Ln9C|eOw^wIb6^wxS6(_*cZHkzC_|HW^akM&U<#C*+&)1tftz1 zu@-ggh98kDl4-0@ByqV?Sli}W|7k}8GgwRpNI(DPj+4LSVO#%3Etk{lUr`p4%crrQ zYTculE+G;|k|g)nLkfR1`R?7aj+(qD!E#e~3yqZ#V#l@TjVpaMCTWEER=*^xKsah5 zc_*_lWxVSATdY)zZ-$6imH3eL*g2WO;6cD22B>k5>I5)|lfk zNK^hoS>R9{PsR_ES%>lNH1};l3!gwq^7dfJd4TH~((}yensu^v%WpehWJSjPvtGB6 z@DA*ND^TjdLMcU-tJ_ghH&r!iGSEFUcc8J1lI1hJ7h#TD-%x5Vhvu5T>gJK#kIW=A zeq`g$c#Jo$jAo|$M&0nLB^nFe_HP>oPqRy-4{(oW7A~HLR6n#g{nMaCO+%sn#a2w5i z7Q)ZErBFOZG9xZnB#!vn%di8rNvz}tTZT$?MTea26G355K!n4rUVmf4~*;0GB4kBr^2M( zS~dj<0tVNzC2BPiQ)vemt|L|FefL>6_9EroVl#{e-o$LD)o=x-E}A;Y4DA+n?gUe{ z@8uOVe%Ew!vfn&+{|He!jeGoC2}!nHG);)pV2dC&9YolqerYN2PY8Xeuj3DYQNX2g zXziVAH(H`fWG$UfgT;|ug#B|W;jBb{d#xAd>O`MmzDY=7$P#fdrmR%NzQ#@h&ps$5 zrljcv^?fX=uPRBk2+Qm^H64RM2y1C8OPyDr9PvmjIOq6oP9f&C=4`c>20CxV93r`E z%jkkto2>XwPtdGSKPzU{@AGx}eR6UOg?A^^j5gXX>Zs~DU6u5DA(q$JWgM56NB5$zh4@o=DmhID{!D5uh_Ayya`}+v8nX1PN{3Hx+-; zYLuWOYFW3}B4od^oN;kbN#b!m&nI|wrNzW}6*X_O`sm>X>X4D?xm+r~ai`goYaJ+k z_c}^C0ElrqI=afjYL#PcChR=$j*=#I0rsi*172V!C0G2PY85_lA1qkKlgHf;?Qg@+ zr7AZ}4YaxH5~_DK>%zVwquAvfy)Ud3x`~CS^nFY!NNrk(i_ZIY5(y!LvHT7?pQgl2 za3r~dR(!tVnI{xl4j_M7U!!71Vvnq^FsSzbZcAn!3^^2ZnJAd;IZRbv%tj!%IlRAA zmrz>5&9OM1uG*-;9ja4zI7tgL7cx+pN5E6TI}5Dva7C#vOg6}7*u%lB@1)Z#HXCMt zSjjS$NCWt9iSphW~j7vjZ_E<<$4%C28qZ7S^;)02f?O8 zdwfS1S^8%@dYg&2~k~A1)<2QT`0UOBm2B z6tsW3wHa3>@fQ>Izse)V#<%VZMKAcrS-cS;M)mcdIL<%z`p>)?GQ`VXrf-VWbGH7+ zbdQwH^@iL)g!cTOhU_)yCGAp0mJJ|9vq{QF+^ zx{^Dw%`^3t$%Ek8J$z;=Uv|nPv8{{-vBY>6VC{Cyzq@4lsZ%T%YK+PpWGw#av(8bR zzPkv~nTMI8w`xicSe{$pat0txD0Ph2T42gJl~3@^hh_^#d?)59jIH_Gk-i4;(yCyE z7@A9*3I|Pmh+#s^FjN zQ6dbEBQYs{HebT!^JW%$hoH?(@_}D}hW@o-8@Bzlfm3&s{?(+4jz~$9hfqW>VqwDn zU{fzC5oAaTMu>}71~t{`X@HXV*WUDK~N9zB>B+G}-iv^4p-U_;q2)oVU%=TzV#T5u)O{r}c*<=YJv< z;0<*ze&t#bvwkPm3u|8TluI6^S|gIaSg$`7^h?Ue$j9dtbW!?$oAy7|-QVBB-$&k8 z_Z(!QvW0eO^Vab&oWCOtqMPXaS6Bpmnw3e35G?za>O`|WAUJ9oNo9MDG8saGant@j z-amivx_r+_ATpiw$BBFIvjy|Ubk`4NSdyL2&9xn9&GdsDq486%L0a1?K;Sp6DV7}t#5@>G@ml)r#N5RPGn97 zWKVvZWTCD4_jT26{Zpg>9&dHfO{~AxM2YLX(}7-Xs!X?ESd(P=2q^i{3lqyd$P>df zna&mIAd42TDz3d2I6&e-O#`CBz%Ksxvj+ME7m)2&0HxJ!4cuz5@^hu&wuxl{?5bt) znli{oYG_UsQDULh-Ev4(!133az)1zo;Tx^Pv$|HqoU1*t-Y&@@evGx;3P%Dhr{Hq0 z6fbvNo%hF0kheuT@A(C%)Q{eoX|X|CuJFUY~fuK3c#nPuUWk z#^#y24XTHh+n1A<{`lcy&g)n0M1(hw-R&b8AX9atOK32g?+C36HS>rpAw1q;YOBOZ zxuO~2-_)a{HQaHaKnPq~5$Xi12ww9GE@-?9BQ7M-vYJB4AALwVb?cpYm?AfKRI99^ zj3)Q<%-kt{pSK`27XC6UyzkcBx%Swa&H~Bk-Ph%&iMpyZ3a5iJM)7E`v`=;Uny$8A z19gHZv$c5S_m4O8Fih%MC$khlm9o=YHVfj}G~Zpx1dQf6lqJVwrY>W9%eih|^T}Ggud@qMA1W}WhR(Gxq%1>#nem==LH_Oi z)f}gWW|D70NF=hG_*#_&N$pjFk<)ZTR;NGOl#oe0%P$k?2&hiP=Gc$5{#`H?-qOST z|J(yaGAkez(!^`h_H0DT>MjNCOUNLJW?L4UxB)un#Gc}~xP-wK&%~Nqgk#|I`V_&) zVu_+}J-B{BG#4b-VRDyTDwC4fj>+8`|20?TGNuM;}|MT`EF^Om`)fd)Ybj~iaC5M_n2M+0s z8ry%zXrk4K(G+#Q;UJo8^%#+Satb)ral9CFtq)PZ+^pqa5CrI`BK$z?K;4$~DywZI zRYf44t1x}VwStI9RmNejeKBe^Xaos%+)!4MlsX*hPa-QA(jDGm-)&8;d><2MErP(* zud^4|{KTESRrq&=;c#E|%E|SnBk!2F%f{9<|IuQw`OAfLtg%RNI_coY#@o6o?y{)9 zlf1F{syLTB$gSXqaEOT}f&?=ryX4Q8*-OhyA-_Uo-;<&=ks&;v+ISn2Lnnl%nl9?e zoIE@FzGn>{Gvu_Tiy66$p!IGR9U-@-rI+ z)*qBNY)G;~EecCBYjaTsHqXBuuj1Bs!!z z^zL6ZC4V~dQAB_5vM=dwgi%YwQ`qxK`!k`t4k_!8-v6?-G)w(^shB`xb`Vl9)BjE( zp@V^!0x~vpV5U?M8BhMn2DLCh%d|8K;`X#KzaRtO5f!EcGh2A)UuB!(!zD_$8-^Ig*a8X)-aB~f~bvMXc-^gFYG@9lX&gpOJBdzP*EV8 z>3L?F8^G_T6%b5sUcH{;rRJIRA@` z>}0Z(ON%p^nSbvLU8iyo!(px72oH(6M)W&)%JjLq^DX7LBM5gR;?sW=V`48ItgBH| z+0HYTxQfX%`!OiPFPFz85(bOv*Hki=2qVNbh_f?p2}bo+9AVHz2x=HW?LS|Z&^ z#~c5>4UVHC&-f5Tsjl07HWClG{!tWWur^#)Za=N&=;SmHyG&>XDr3p^YP4?D)wcp4 z4)5KHR-J_#)AS@pF%fe5Jvk9%IECZ^aVO_cfa#-!++SRM{T00OdFlt8 zF9|EY5+%wKIYU)3Kgw*}MX>Fj%j{>`Ehe}AdSYMShzf1KaNsVoOi6eWcN@+YZUvw@ zJry*wn*E^uw-$icgmuQ_hW+Hgs(yQ&N29uecvNreR^d!dD-!lpQ+5jQdVm)s8+)1w zVEPv&)V@QdwBuY{q!?j=OHA2~=s6%1Kod_{Rx-R!IT(El!eMkgczMmv6jn$zO|g~& zrCb5Uftz#Eas)dmokHA z-&cp(Y1lvTGLOwoNGpUPpKf6QN*1QUZ~TVD(Ht*RbMRJx#shucM_4gTbf!;zXb#rD;WX_v&w4HXGn&qrxzw{=}B2p;mw!9WvH~ z9n*R%mK*#(3zEB62DkPfI7op;BMXm763+MYLOd+`L_`ZaCI}z4P?&U+mIaS2?=4&1 zA1SVamfVN~sIg2A7DK+SvU6G;Hl8Lrsq*uG`&s27KpU8gJumJ|xSlrzs#}B0q@JWFcwaMdq63v87?w~fq`*yk`Ac}@m+xQ)yN!R*tI9Hh@ zAn17-8T5yNV0Xh9Mdu83_RfrCTSuJP*@;eR3ivVl`D*VQUB0 zk*A<1H!3tJ+V_+hIH!4sBm>^Qjh8$1#pX)Bxh7pzz?$sEE%v73GdnSz5fq3-T!k3@ zI=!Npznz)??EmGlvHDfR{oRem)ugARX1KxNFO>a7M~pw@Lh?05yzKxrkJ~H8m5iRB z&YceQPhTdm)PU`^6xL5#a)7=&f-5K{<%9mN!eNE&AtaBcAznau&IbC8nXL`Oi6{g!WwRO>DxcHFt9+3Zn(j1U)Tk&y{WQN^PaOlDSl7>mU_% z!7@0{R7s$|47%}M>P})F{6>aV9^f#l_UByq@hyfO7SkV7V>s+eOpk1k)4kt+?_mYd zw`lLp&|X}td&b7nj5K6L2UVa|rH6K%aGsx&?Y~dc>8Za&_vRG}XUBRy_Jw4iQ??`m z=oZIXm=cxCl2bYPJDUAh^c$b$#Ll*Wh;%nxCl3M~J-}@G^SlJ%Srx}^PUg6}UPWN& zJ`Yv_6yNCfEqRLDsliCCxo7H3L?2g#(;(>bWlrjF3D)Xp5k!mddentCRwF=|KjobM zmAmbvbuU_)fRq>$cv|gADCDmej znFvWw==T7)<90Lpc8*X(${!b6Xbi@kDV(tbC`?(`AG|qumWC6W^Mw!UkDGb;_L zWkOuExvF3N?k;l3d_Dev&hE|E+&oDHyVcZmfmrQcoHeDGOADs-bDZp|9wG+-8d3AO zlN76-Iz@%lFE^Gq=Zp780p!U&UKL^5_LI*C{I)@3R#cMk+5YshH_y`=x8YfC&E`$C z>e4qhMr1Oy#(ZP!YPA6y&37@wQv{ml0bd^fD-Se?VgA39I&Wv4Lbp$`;(=!uRxbBQ zt50f^Zgs%NJ7PcW)%J@~k}Vjjr_YN5fYp$7(HA1YKED$J9P+lQiXbF#lwAnd>tdi) zgA{LF4=X6^jhi)2Cykm@+Hx0%9pSmT_Z7IwKPpX@DVE;7-5yZ);cNw zj^7%Ax>c_ZIzbJ|N&xaO{%K|E}eGwl}{vFvBfLXu#jqKC7y2))s5d{5pH z^LaK~?To+AZNi@B%F5ot+7D($J9wCP=6J8dxTZXEWOU#S_re51Hb+)x$YfEw@l3X| zthu+m;2vw82Tf{#yZZCGISdss4SMs=19{OGEXgs6nj|BzL~djz4Ds4B+q)>cwIUS( zp$`t&MImzn&qf*+heoW09<4dLU0H5~^^HC{BFV^bPT}n<789#v#3z43+&<}Cnw3Sk zN{-i!`i7jKEb^lI_<+yrnYD*tQg=~JemucMR0&Id0l0UE|3%ye;UNO%{CDc>unFzX^(!^bD205y z1DBSzc;(1Z0QV_g?cDTQZ=Tgkt4$|%JS;LIA#CcV^(R(9s+iXU4H|#w&JIVjw@2r4 zGgMTF0Z`GO-ao-(XX@OO(5y-P{z+(fHta7e=Wq2dR!;74J9`j48VHQsRMyfe&E*Fp z%ga+~610Cy3UTLyQ3k+_nCVe9iy1A?0yG~j=^638yU|iSzntz7(qt_5X(cRortp2x zXVxlG;=8%v(OpIPzF8kjr0t3ISz#1!kRO zo@fkR#0wYa`SJkP$>ZUL^GHk7>F#ciDgwjp<5*kKElIZM+=x(Z0(D6W=90vCK`eh6C81|Ch&|({UiBzD6fr8BVp9me*A4rnU za#;KV1dCVd4%12)pFn?k$M;5^0Au4IUJq}*De?8{w@ubj^>9)?kJ}HW$pSJHyo{B# zHVOqw#Js2CaA}tNOZ93_PZ%9x#4WL=ge`BJ$^@I3iG|cl#kiiqwWJr?sVf&vtiDNZ zUHY%SeV7&z^o&0pBj*NR6<}gl>qe&!ZWjC5K6i*>fbE>Ro-0)i2J^oo55YfExquAu z)E^B?e1&bsd0(zSCEh$fSBq=-!~}X_)bm3&$(4}`+4yylMaNF~XT>T|9*)q*uGnulC8BQik9j%pb0>UX91!Ln6kO%KMxk92`u`zPw(4gnuSl z9S~;20!FNR5~e(QDx))hyo-Q9G1Wkp`P$^Z4;$j1d4;jK_j^;F5jG7(_lm+F%UCc) zA5yTgk)8YH4acjDXIr7uaduhJ$m}ty`TW(wmUQF4FwYHM8cgM~IsJ<~?c53U7-Ldv z7Wm%R0`iCmOW@o+<(bWB_j#1i)Dgbh9ouz4R>8x4@p298+b_jW#d>(`wyB*s$t8k5 z>#h3KTZfE^YGnZRB1q9m=6|3N#e-+KcUe!2!po_+wv|vI}5&xm>;tMlLT)AI8fAjSyvj*q#_XU0>x{ z>iBhEx^Z$xjeMP#(@jAU?1a2E~Pggrf)t2!rEInR{ zL$9d4(cK?1$4T9`c%WA4DYtPu5Rz9%7acZTbHz8=S@$Z}l5O7c<>eX%Y3p-08(=)6c&i8@jpxc8{>|lko}rPRpbV%X?S~r3wvE>e z_FMZipufA%SI})}M~s9+Zw!uxTc?%v(ju7~>B#8YSv@Pr;fjar|4kXE|50`!m4%RU zAFX_N-$gP$#r5W+A3f!pn9=azHwRSgcttDiu0~V}H6ezI77{(;HtTXN!3u{x@}xp7 znqyq69ic1s(dQMCUSrpIJg+tn61C$c{fQT1q`HqNITR^RA?|8+=9tfj*=zDkkeC9T zQG)hv8w^)-EdM2OE!7hLLmnFehThqQAqYU6Z7K9)9>$(^Y1#G!$AwoA1N%^^?EO=m zi}nLmB6Ug0nNg#VIXTB>0#hCX(wIPYG=sY>Jq1s&Xwa$;;uF-9pCoN~`_RSxi!56r z)&fB8GmpGHaz55xRRs{>J;Ea=k}>sE{%o!N{6GWMR9EQm*)J`s8tAIf7!+KYiC-wQ-Vs*dMQg${>n`PO0&JW|FRC1LoLE9CoN%P}zA6Hb6dRia1EoK#+ocV8H$cY%oZ7z1 z18w>A-&Kx;B)t2BLL}I<#|IAdLoM>gDc&-*gh7g=JAd;eo^?s5C*Hh&0xoy2+9eKR zn(giOvP~<99IC(kPXKOaS-aEgPrB%oS1wo#UQ0cr9+LGJ3*_$jCXU)kNF)~916eA+O}v8{u`qg{zxo&fs~C zU-q;9LD~z|*b0X4oA7}H@%j!K+)?Ywc3Fobr(bKTh$HCzz%F6_0hYu*_vBx>|Eqx4 zc8In~b967o)>LIpz;&K0$2CN_I&et2eFp7E(59WS^CYo%(E1kWj!27SYAhbbBIkER zavug>$o%?g$M#M5d+*NdA(pcvpJa{ZGn*NCV5-Eaa(>1WlRzqpaJ10I`HOzQ>4}1e z&0Uz_<*Y8TI7PwDYh42@@FvIm`)`U3s(mVQa8)G6%zN9@mY_g8 zmaH#L-v;g}awJwJaU0&QVO78)53fIqT0lI zm0tj6E(9*FTMo|Wp42Wt3hF0OrKkFL1QQT4ZFuMW{Wy>it+a4$!eLE2`D3>T3a|^x z+$VfH`0mcOB#iNdsh6K8*)S|*vefQlRV~@!K&(+~O5>&QI;df@-sqYmb_kY8mK=`W zl>dNw`KIS%K7^6sq(dQzUu~2zV@Ur5@QUzZOvy5Q5P~OL4#hizvuqp`{3cPaapY}) zlxlwtIe;^v2!pLio1SdO`Wq|KygqIFIYvguJOIU$bLBc8Jd)~%y>YL%N%aMc3vB~S z3)x=8+4Wxu)rXI%j~ixejN;qdN$3TF3a#OB7eR!mUrZTxOI>rf=mRZA=`kM(CcADA zUZ)7!Qt1KWe?HQXWall8AtKbpA6O%fJoD0fS7N!G%3tA2m-cD6k#_~ihIR-<+3OG4 z&VFIr6I!?iWn23YZv1#48JzNcsj=BpO)&oZ-8I8VOVyha+E4~BCj#HX=Z~!1qbJYQ zRXMCxUifq%xDoy%a$XgPJ<6Y4^%|wy>D*^=f;!=N9K{tmoapue5?J&@n9VsuR_2n% zv2^<1D__R6USQ~5oW+93SRdLOwoS;rn{Xnu0Wo|yne(_lp|P8l6U8=PIau1{q{N=y&%26;oeZq2DnQ zTwZi|x!)+!Qh=I|BWW`w1Y7lObV1awPFs`vK*BvX3ave#E$5+k=%v7|!5u#KUgB~j zX1Jv{5b6zIX!Z2ke=pH2Z9lCyp#gyKP{XpOKriXqFWZRTl<`k*F3W<&lvzZR1j80f zL8&3{@a$D9_B#u_o8MBn{lwDsi+iewUyZ5*d0#*E-JRM!KufWrfj?*6#!y5>4o1Im zrP_gK9XA`$tl|kVlZYI;pe2;%?UfF$#J@=xiMSg=oyL?J-$l*te&){5>-FS;9Bq}P z(7u68`7J?@toD}hwzPb|Wgvo$4h?Sd6fQZNB3KWp<}R|g&>elqoKu`nA0wOWPP-GF zGPcJvSo9|d;(E7X=s=9U|5SnVj{iM2?!V#cw63-!+M(VhKTGw@Snow26fx(` zCpp+AXz^GpoR}08EYcHMfMWlbBz(8ehLxGD^dWJSC8vtu=EA-a$_$0l`jCiQ>}0)Gv5X;zJf8Wr)eUaarj!RK+LV{K;Til zzSz&rPe$jF@x*W82dBK5y`6)~;&Op<^uu0Q!K-YfTXm2du_D2UYG zRxi{uflJo^h|Jf+k7;f6nRhYI44+Mj3pKn_N_?8P8&9G7UUAhD#%GtVAge6AI+Whl zIcOEdtMqfTb8L73@HqdiyTEJ^G?55ayYICOw=~-0b0&=m$T2{8e(eo(_rjiBy?b^2 zTM7;}^ZrCfg){38LzsXqQwkzSxWID5+~WPKe{t~eFVV?Ot#rjBl%1Z*~WrP-P| z*nVhefP4_qagR?GL8LP8ry}kNYz&44)W;s(Ux;ertiQo` z#x8@iB)3LLOvFqU4}{zsq>ZGts)W{eZ%zVNKCcV_;+Dw#`j^=fQ(?l*x;PS=GEGxk zLx$7gE86>uZoN~`=tS@)Zo0kYn1|BWY9rRwsYJFTuwWSrkH;f}+t;|hNrt=L_W}-$ zfZg*Sc^+dV&F{sFK<%4=@gHwe;(YsKMe;VapZ#B)0Jz=RS_bO_5w`rvcZ$U;vSb`z zL&+TF^sQe{-|yZgfzbV ztwE)cssg$#+p3MvN>Zbdt&4h7@|?Jsg3gipVeYj zJGr2bjS^yKS;=Njy6wgzBK_aGuaL!+r-LCQd)-TLg209aZ5NI9Zt%y;nIEg)s_h zCY)Kg+zOE;Uq~|!L0;M});nY1Fa>s9({SB7w*6P}|8^^u8r?c#{f!@pP3;n4^9i1V z#dAbZZ}pCEzmi^-4DelqD9ZfIa1jbPsXt*;^GLbmGU`AnZV|$!f^0E+{X#Z7815i#SJZ39H2P_isqYjuhOb(k4W$Jq|_Hepwq=D&?0iF_vhVoLSib6 zD1@vkzA%61HC9qGxS0O-gWNL}n?005_pjJ`!+6{Kp+Unt58UBMuckCKu7gqYR1qEI zN1AJrE9!{cFQQ%&gQHWU^bnV3R~UfYen)InDAq;`HnoMgq^G7e#~^>iFf(tERqyp z40?`Y`Cox%(Y<5Tkl**2F|06FKh)FR?0&+5VJyLc=FhYQOVAf_?eX{R>aC%ClQRZo z#S&7)L$|%ZFJL(HsX_*CX5w{GY`g&@d&Lr?MCg()ja)j@zqCotraW~^)R{#;w970B za3olkCFS_jppi0EhprXs2_yurE`L_un3qj=0F-I+u)@aWcoBS{KeT;B_*X|#dzAU& zIFUoU{1@l8S2&ChwL;hZ+^tty0vouEh@gAcJ$X!PSq{qcrn9e?TRG0f)WQdE5NgiR zGx#EsTGZLC4m4)CbDh@HCX=}G(wn1LA`elSpOUKzIi5yW(t0ISm!Bv=%MDd#qsCa2 z2+xs_=5eKK(C9SdR3ENs4Qqn)GhKc(PWcqns4;2QHM%$y)qZ09F7u+=(qt9;t+DUX zp)7mSQ0vkv1?ua!k*IX_-suq%3PNbOx8grQc5g{ zA%jCBHEApZvP`3{?9KrR#-gOH=(KrQGZl{~=xR2T2x_GJHlYXJu&~zAsDx81WQ})( zE@@y-3Fq79fmW0pvI1C3QfE`Iv_)2weO4TUS>)oWBP$I@c-%BU`~V<2S29h>+=hfIHWndC$|t|T$N`?t;_G)04WZJ)xZ`qsK_Qd84pb(W**PL;d+ zbH>ZJebLoyRmOj2!81R}Zukjf$a-mOh-cixzEmY$9Ge~?WLC>8yegbyRQZXzerQ{* zx7BxFwsZ9b80XmaKx>#|o|Z0^*C5I9HUC;dl4Mh&pjz=bSlGV~uWTJ;HTberrx#xW zKSPisBdLMn%-aTQ5Wd4{g=n-?I;o0v&*`PNe^n2o>aBk6WyYeGe?YP10}_mJ&bUzP zepD-shBv{jJMRy48xtAHS6$6dv$L|jdw)mV-GWV!=4BWA3C?DSaQfJ64b=5dKTMtN zPi%W1@b106;xv{qd&k!A4=(-ba#;6e9R-bt%yF5-(6HjD1y$%McbP2o0KpO3O5nIT zf86YRUgqx5gr%XNXvA&y=taB>@e1GA_^1Lw(I>V?Fw0ZDH~}$W?cbfp_kL;amLz<2 z{GhXBA54i8(YP3wjMdA@SW^!fkbG&~i^W~DK%1piYvRIa10HK8UQ@HiNwE%Sx zFrZjt0veTJ(XF%DHGh-^lKfxU*Kg;S>n z_lA4RoJx;6I-GF1ieqBDF3PV)>7YwgL=X*#cpn-|zB7B39`D9U{5=$8&7P%}TA+h~9i?Sbskd~g@&XgC)?R19L{I$WmCoOUXkC=-Z!SjX4dF4By>5NaE z2fV4ui+p@q*^LaJAIDh3r`1v=Ac)TXGs6_h9q)T~k^~S3-^3>bvhJphGT&&A#3=AS5H{=LChn>Vvu_>_{J`tS=I* z4NeebmbPg2ef6CofkBVE8KUCHj>3g6Nzc9QRg28c{8{%sg~6>V;jo9XO~{Xn;aN~Z zIXmlQa9*kZ@-T4A_9OiL#@4`mZ79}*na-2k(9E4tfy@)vSSrW+LUfksJLe0$FhB9{ zn_Sc9l@3TwIxBm5N*s5*yT1HAb<`JS5*+y!ljU-SX0B$3B9k9Q1+1&G^0vwBCaR7L zggLvMPa+m2Q}A`}0(DI6l5r#$0FBaycWFsSg835di}@j*_u(pll@8qW7WQ-zoYYiL zd7N2obF;$@(iLqB-YfO%Y-=!?Ocjd;(df=^eDPGGHNapqy3}lyQOo+C-N4K{XHK!W z^n{c^$4SPJ`s(d6LHEuy+?xEY5${xhY=~=b+)6t0=kEq%`{AV{v7(5HPRH*)@I9=; zjGeN>oVW?y9S-Vo5moKxp1l6g=K^XD7-c8~0>BV@vWQ zO!v^g{Uh@AJoMs~iw;=cGstU5S~cY~us9w)8levoEu^5O33zeyv}A?Z6D{>q6OySG zwqcf35_dJj36+@tq+E;u&83fRj_O#DGqoIGI+|~Jnw`*3!xKOVz;gys`6vwDATya2 z#6>fcflP8eKWRE|yDc{NLm~rw2Ru#moam2~zYH13TAmJ^R#dDsfF5F8I8})(_AX|3 zPCf3gfxy0R4-g~rJsL8qZ5>;N@cOVLZ$KP)c_IQ(@-3#!JWF9#!t*mOOa#M8)-4R& zc?zoDrci9_Tey*XFKcdcMo3^$Qej=dzwk2WwZJVpRJn79K`&y^#o0kIwnw= zQyn;%CErZofM7kh~BVk50uBrU}DMR!Lf!o1I6wi#y24@iJK%PR5O6r z=QSH=2>uQ{(_eISIo4oQ&H1?^^#_M{Qluv z?>0?7q`8@AfoWRMhP?Y&jyv9zXVTcdd?~RL66RqoW%CP(k%L4zh)3;`!mp>@Z#Zp+ z__1Ii5oepMCAnA9C8Q@Yge)|?Yitfv%Hy7dV12>;v1+8fSj#H$ao4zZR>Ts#mq1~4 z=QU5Wz&A-Q;WIZ{&$!5XENdh>{OER9I8>dIn)(2;*{dx`%()>#JW5VX=3^MEz;cey5FIqPy_d)3s==!*Xz{WZX!vg?i&y$*8_) z$%Mn?Ii4#!qY+)v1P=QPqC^7Zx?r#sf%r!S6U0=vs5IpkwNL$Thyfw1JUEjEH{ja9 zi)?hF@F$vz`w7nvjcCn`$_1y>XTTpz`XEa> zD$W@j@6^n)303jzgs$+hLGZ+1%WKMILK&@OkhJ7sV9KUq}7wmh)}U&CVZ0O_4E3e7#69xRp3 zYN+qP|6JGPCN z#{Z0S?mZXp(|cp&Q?Ro4TD9v}v*xT>H~Qc7r#^2lDOf#Gn3tD_^?HD zT%1HE*=;|rJI}i|q%KYU7{KNqWNk>Zo3jE#S=I+ zO2!c6-%i+=IF0aAAZC386eeG*Wv+AN2@}OLKqI$s!iNFK=f=eGJ19UdG{sep9028^ zA+f4Jz?w-E_Z~c{&6$O6ZnWckUR;@u-k}Omu{*0iscm`@51k&(8=w+sc)?XFJrl!x9sNgxF4ioMYIkaTpaZT2FdyL{L%rPbr~dYNTT#lhg5*LRUa$Pra;e&X$m{ zc|Yf$Sep*lO{`tSG~hBx*4o~kBVV^!vD|ilv^d9Eo*m|zTc9G6dkCCLhsIpNwGJ*96q~* znm9V+yeTUCy>DZEIjByct>q|9UlXaUznkxWubI-?Il>%V4cRc)vD{6WwO>@4+&oXA z$blcDV2yh=qknJi#9+hUI7^^3G?}6jZ$HfMuc><9C7U*pYG`H_hwFq#fIXd7ta}dX z_#R64C(a40^{!8C^k{X3u`4d(7!s>dqBExaS5$58Pn@QUZN_D^n5!v&xZ+oMt~RE{9-f!cFG#j{JR9Mls`L~_4JwJ^wAWj$g0 z{V51I(~rR($&h8-u(I|qJ|*!;Q?6$>aQC53qi(-?ts}Z3cLybMRhw_;ZG4cgKHGfzy|*@^<9m<2Utz}><*Dsg0A1CIxvOH8dhG7X9Z7l4RrCSR`Kvj# z%5uB+a(Q(`lvGEIh+F5)1<45_>BGyYyKb`tbm_aN1-yu#5BOx^6At;)V8rkF%>aM| zq1-Z}`M5zHwxgrPloZmY>UIP?@C-rK)-qy?NgYfgTh)<=lW7uBBl zSgMV=Tf>!NwacVRWlJJM$>={VaEmVFd)HThBCA}A!s5L;d!HU6Yt72&%ZcQ86eS2b^j2ar2*aaG`^fX8 zT@zpBc%n=nSED(I+DZIiDP>w9P7{F{cCN*bgM70(CRS%>h2iZmi{;&jtdck%)&Cji z0afj{+ByLKA@_6IeOm&*oKGF>kGt5ytriAl;ft{$DB*`8`RV=U>)L7$8tUVrY%&+d%+I5tC zSp!vm-)x{@q%2DSAuUkTeI|m<&NtSJ%Gbx~+ATILo4$RY}>G?A$rj;s4NG5lVP{`e3a= z$rEpnG{1TSYo6oCboO{>AZeBOG7`KJQ5(d^z`mtHuJJnwJrWk1q$HM&gft6NqFRPu zTHWWW!Vok_u2Kom0LRCteCOv$hmJ!@V_k8IadqpO4b#iMa1RExVV`&CX?3qxaQTvCCFiT_k5t^aNbEZ_avdWUNU*$wTWtY)(^1Zh# zAkZ@OYN#zCO`P$f!{>?&3>qM0DF)6;B17m2!ly3|yhP>WNj-eg1R^?vml>H@5}Vj2 zW8FgvW9zo)p3O~BJ8O>?wg$GM^>=A#?ts-N$2Tq`OJNTF-nwMP6BledUO)D=i5Lsly)yGknT-caePActqyo-nNl}guHuyf#0ZIy#-_1~a5gngX@6yw_6 z39rHGGc~@bwnkeUqnB9imfI^KoCf`s` zb$TS8l7WTJD}I{z`CXd1jXdf3+Q1UciKY@M8Ocd7>MGi&7nGJ_W@Ae`=VFpP|^sdx})An_mV1o!s|5+z*Rw9Ng z{)JbrN*ii|QY>@(0b$PU5bQ&l8_CjFpkU&89yE})5`|m3qHgxjy%>EnYRwul7IDf4 zr>}RK)!>AtkRyQ=y^aPSz~_`Ib@JV-!rsj0r(e`i*<#%BHtEq+A>hAEQA=a?`h13{ z^d8UPpleaz=|)x(_&jehR)Dwmv|u@Kd$0w;h|ki2d`G#PI==i7bM!MgZyu(@vv=Bu zAbjv6uI1n8Zr;jB`Ad13IlFE`=IjzGkZUQU3%&HH){59o%{|Ll7w5Y{U_@QUU$;6J zbKrNgCpcss&QO|6nd<}qyx_#=^M;jA)RF2F*u}*@-1U(SKCLiQU;yjJ3jwEjNt0^X zs~SgydWJ>Cq*c-A&Q2>G=y`_SO8nYDxRMbQQT#Q!|WZ?&1r zdD>%OT5q(TMObbtFmePHdJ!^hr*teQg(( z$pkm|ag}JDl;z+^+WX#_G11c5M=F7@d3I^-o`IKWANSa3;l!q(4)$8)5LXhKKeXD- zM!^T?eMsZCbE$&YH+Wk_nuF1r1C|kDa4NjN4j*Yf5+mXH07cepiWJ9k zy7$PErd{{-oUZx`FgEUASGC{dU$JHn1=GTc`~~)QX|c8LlYac;mDv++yBmHwXt_%W z@~&6&G25xi1BJ@_dalZI?RPWp&3Fa&uFn?`_h^fkx7@FlH6g%O2Wt~QGAO|-`7ziV z57d9<`z>BcAh&c7Dtbede2trF9p%NoP;`m?FHY*A4+=>1dN8zuXsOD-NG5W*MrxVPZCC>dmm=1w9cY~}*s zIVt7N*|Pi&I2QR_sw3m<0#G-$R;s&Z+OfQ4uyCzn{#il{PPTQF`DI$)8*f9u_x$OWedO%a~g8y8tsQAfxO5L(Pt%oLRq7jEIHxCAi6f#@ z)yh!Ya&_*pdE5LXqkjVnE^olWVF~Qn39LWiyqoHR5ZNwVC3gFx$Mg?p3Psu6f8;}* z@syyceG!7nyO3TCCt9OR+foB8s?&SzC7WI!r0frFVRj^`5z>&>xVst=rQ$b>?=Yxi z`f<{e+J)|Q>yhS_4U6zwnQl1LPSI{j7;hjmFjl5UXv~J!y08rbUsfny4!rT(apIrk z!(4UYB2UgQG)wrAtm~f67>Xv}fT_@x&JVYXAjqISxQ6uHok@6!mi|H&0cRC}l^7{W z9q9vxdpr>R{;cemjJhh2BEM?wFF(s*AAKPYU&KisM^{V#c~)5?q$G8n-GkIK6+gYxye11lTX95}PfZa{ zTo<=_(-Q}U2IXy}KE*-*cL>6ct(lDzrgCiQ60_!4Uyr!-{{aFS*+IW7-+Q?;$E&|m zbaOjl+%2)QElgn_aoN8cNoEXL!2>oBw{txwvtNHwsH?HXP;=c?TDcrJ8DS=mNBK6R zKDsBN+6!ea3mcL=Kx&+}M~j%@QBVI?V%?jpNacof#zZU1W419)sW!ZifV+`-dBxyx zT}G(12+ItuAT$1yAB;VA?2NVjNX#QNg@His?B|T_gD;}e}xP75F0_Nlu5TQ*)GzyTam!oOz7#ZqajA5p&%A=+F znS))7h2eu@XN|~#uDj_?XuWU(^XFDcWVW4 zq5VKTI_*|sRQEBf-SV!YmbF$BTE#Z|p?CG}T-l0cPpvtI89#n;yk!7NsaVnGiU;B7 z3#0pMDdd9lWf5`8)dD)J-K7F+r3L-bYGaD~(F^MZH#+__k_?6i=R>h7)6IGU0u^*a z)LuHq>dp$g)e9E0hr~ZHi8GD$mk&q)HurlSpDo>IaeGe&$(i9sgMR2DaM5CkN!%v8 z%OXbGx45_(ys=3)dlf^M>PucpCUp2y(=u_fvF?g5F>q&5+;8kW$|PW!;ltSf6+^44 z9jG~DJ15BNKVF>i(TE=%zQ3bR;KzeOX^@{^G3Sog^BCHofzBl(W;(@yu5BZbVu9r+ z)Rufw~ve*3Nis! zz?VA4r^?ITqlCmecFIDU1{YoQGj%r>$`V7+wk(o8?L4(9N44wL2=sBYz1(2;-r!}| z4yPcrYNo68X~yz(YXoG_iRaPd#n}ti@6lu88Ara^N11Lg5TtQ6Zrl3Gmh+63^iMm> ze^cEp9kWW^Rqvj2fY=Cu`+%T03sXnF3L3PD3uc_>FiF3q(q8f7g4J$b!}*6e0|rj; z^T5(TmEtEVoVHwrWwU|*ks@VU!IMbaQbaSzaF6R7IwX>gr5L#Hx1*t}zp~{c313a| z!3FX&fgwgwY85%5-$1Qq%PHcTN+;9m;@TWTD*xE;{Fwi3bjPlSn7F5aGs6=G>j@sY z{T>$El|2|{{guVMr7ec8b`nJXv-R4;iq-gyC~CAo)mUgZc6b(IS_b?}#|zCJn=i)D zJ-|+3@7188t~@KonhAe?#CV9PYO#B3>h!F>>Ka{ugD&|QUnRl01CF6l$m!cew=bgU zi=9ubXQDi-E&j3DEv~)wZwF8y5oG0s;Nsr*FHc;A{_U^8f{SZ{rm}(fJwYLutmd@V zj;8E7P-Y~}qP$34ofEboL}FZgxGo#1Kn`NIEhZS9s__hug)^e;V~!bN7p8&FN0X37 zOSC4@hly;N{x2tD){@iz#!ss3^&@^pK;RZoO%2?!*Q=Vg-FUm9cLRp+Bc8-K0wZb~ ztLL{UQ|rOce@jjmZ4U@`yCr?Kx^aydUBn)xl@Hqq;m2Tqw2IrDt9RH`?!9tRG_+ z9HymGHMJCoi#41>G{zD-5Y0&fnyMlG(E_B@Zy5P0-D0n25PE0}bvaG^3*`kPUybdl zEU4EcLa``Ary|*#x1ncgdAP zLsGcxbflOzTxdvsOhKM&v%Zdn)*4w}=!Uap+`9=31~4niY-&n6JTw{_9ww$N&Lb!K zV-;Wsbcn%&Wb@T|xgy~16?DRmdd0z6k0H>d&m4*KldW~U0$Znm|be=)hy~=ZP097YT7y; zY4!UE{&Lf-RGJgZ8UL4%<|?S^FRC@j3@?$^+Xbb^q``&D=v400c}_z z+2ron?ug07h-S$w;lV2!Uj>8nT^5^7jt55LS7p$1soY?Z?(Et)V79n5#Z94w}u@=N)Xu}4p0cP)?8p0}7U}eHDSb6^niqvY# zs2?J>JP$UEY0ccosQ9*tJmV`DVu^Y^PT7$Kqy-bU#ND={9(rc56!fdvL10!iwrSPw zO(=@>8Y3sn%>&(DB-AbHqb!11|8qt%%Z5fIYHRaM$ZVIEZ&6}{;i|LS5T)Ff>dFn2 z|J#;=AqnkfXhk`Ph|J5gL0a%9Z|*A)^m5i%kJe#Y1J5YkHKoJ7u7ev@N1XfOEu|{@ zG!lE5_B+r}mq!bvxnwk^r#ZVBk2HS53|rPMzlyZd;K#09G0`;j@c_k+^88C&+#`9^ zyPFvd+lQwp8AS8-Hvw^XD=ZieYt%Ki;RgE~={hDS(Q1@Y;6%qeGP8;g4u#9t?02h| z`a?}VLT7axmq!Yhj^{)D4q6lq!)t)H*t4oyGt%HPXRssJ`SXrp>&g#W<*BR2A{KV3 zdK8jl=rC;~;qLZ`;p}%`SexT5*Y(e&wjl)SpACG`73(&BY@N9#Xs|zGTp48Uuftd@ zdY?_hf*5EnnpRh=SaQs-Um#S6dXy)oVxRS(0(Jeb2{H|qy2o0Z)(^LSaUWfU0_e8R z2gUAwJwrz77>{;bh!8Qfz5|7q>je2aOF$od6V2%8==$jr{X@d7D!wkB43R1D=*>bc?4UJL&&^2L5hQua(vJO8EuP9_p7fgogCRO&eJk>NQM&Y zhYQ_t`%MN3YJSx~R!d;lQDJlzg@wWy-L-SjONSOQeK$YsoMO-Mh@#Ehs<1mj2adL$U<*si;qoiO4huwCA zpoyeYKO0DfVBq|&-*MbJ!pz@Opf);d3I-3R3jOi>l%xP_0r*3TQ&b|`QBcM370;i` zMZ63C3~hoNSy<)Rr()`p?63g7N|X_rO2_MrWh)~a{F&OBwD7qKX2b< z&m}l-U79NY4u26=;L_&{%8Kn|_?S-DZLEv@ZdlPgA9D1d#|R3-Hv((eZklEa+hM7H z?wp9Z;k_|K#Zu-ec3W<}X$@z!%FGt3=A350G(tPpPkVL*m`?7?t404T+ zGZ)ak7oYuSn^KQ`2;BJ-tw*I$H{(lDI@a_Mz1fNbw|(9d7Q$y{^Tzmp9Q@l<+&;h% zMLx;>^ML*u2EuC4yxbY;>kiCEDwWC?a{PW37pdRb{w@Z1M{Qfl8JdE}!y85n8~4^d!=?f5R`B@wP)-^i;%54+!M*M555(i3oqnYXQ)g zBHx9EgfQFR6&lzDxrNuM)-RIu69-lzZ|~vkvC-M3q@XJ^z@0fRrYv;#Hnrrj#^;tO z9kWmZYfOUwaN%(gDJ2k>Nyi~TEFEzQE)JOD&s+Hv*Dd`YU5E+$0ub3ziP=2cd;fH9n>#-%|L2;B@H#)~It&rKV;S z76MITw?ytYe9qoFC=;R*f&}S~LPC9Q`46d{_c6SXVQMBz6=`C8w!G4yG*+5GBp%uX zI`@SLIUt1;D;IJMyxGmzs+E0)mH5k{2p+ zQ*IkxL$G4KYnO{;D+%%=4PsOhe?O$2`sw;pCbFO+LX;q#g~Vu7@r2t)xH>c9&?5hD zaF+lE6e?2o!xXIN94+~l8Ai5yp2-_3gRj_Sbx5qGTvlSHj3?@7tuF%=hf*&}*Ajt} z?OLQex3HT1s5Mr7`);}_N5ogQCAj-lI`z$g8+fqsV+}L1B~9`xaiWj;2DBz?!iGAq z6Ppr{KN#C+*!nOWUz%e@9|`;llr#p+1i%bBbq;v+#yp=kN=fsp#>9LGQn*Mtm~tr- zsb^>SpdtSg$Qk`MOnc8}PH=W6KX3e1xTs;Hr{bgeVRi&`TwE^Y5Zj1;_>ZM{FinX& zzt1C!c3_zG@0`6@5J8!~xf^<9WmMy7b&4gD)||QGD8QfOL>tU{o<)H9u48(L;uZll zCE%6RR5#Pjywu%QxW(d)G+5U7XRU=xHUl##;VH=;u7LXe8)yRV`{!e%j_>#FG|#FI zA(zHcSHr~5$S7=KI1ATuATeb0pdnx9I>-8!oN1>7@>$OK!9{>nYTdbf@~dpqbaJE- zrXlEONoIi!KBpj1VHlhuh8_Dh1)1CU!r(z&PCZBn*l4DJ%|tbhjkw}Ji9%2_u&opO z1Rb|wh`x$VkIcJ^MM+~y{5e7f6@^HfM+rUCgYvP0J7MmmSP48s@h*PDu#*R?(9-Gf z8M76`@19osqN0ELDrHzp1Kq8vqW7@S9%D&lYWfkkW+M~(0G$629au^(6esiQ>hxt9 z`Iks?2HVCR5!;K-O1GXunBx#FklTRV++m{_{Czi&}R!p0w|2XhX@5 z)Gqg6ti7>}vAkBGx!JU)*?sT_mJr^8&g8Qvj@vNUVfG486eT(OidpLJKCQz7QWeH9 zp=n^1mVP`u!YNS6qakBS{A(FD2FLd;P4xx;?X*z+Ys%}7sd!ztnLaY z34rGp z_nHkLfBQcjT8)hlEb=cTfrKwUmEb$ickZzc?VFK`^2N2yG9Imf)4xk>xLua_b0Na? zS!ttY2r;Y6G0kBiFO(oheoUzw^}BbOq5tcc`-C)!st6~2wV$rd1!KU)a2qsgQf>hs z`PbC=y;=fCG}IsOd#l>}ghFCfCYYI`@he8}^$v0%{(LsxKdkRl3{ArvmLrHO zjTR(KAe>^G*NyGFyVX-t;d-Xjt|&iDJ`D2n75!O-qu4h7f59Cr7SV5Oj0^PkA|NBn zsJ5iW6ZYH~J=~p(cGI6qmnAs;04LEL*ceHFOSuB+$67`9{`b1heWYa3iCoKB!W`dVkCTps_M zLJt6(F|ON`zl)Ei%+G}&$HMpooEgliBiT(@vuV6%P8Ub(tdOzdNsE+fY?3^WEqq{T z?9K_Z!$dV87#N_pN6v^73tiC-I~wF8GZys zY{r0%_a&Wr+WB)3K4B>$ATDogZlf42RB=gk?$7W5g)$lA;mRZ{HaoH0c1(Wq0~6zC z@ZAOT-L*>s5_(>Z6)hVT`zf0aQ!xqKPkzhDE^OYtybN)ouYdXieF;a$>F+A@eK@VI za<$9@Z94}2D1miMAnP;O{$lk|-;@G;!4(j-S=p-!6tLU}j;nP$yRz9XmH54iK~z4( z{(BU6FO)ECZ#@p8=ml-V+h*lGVnn3pt1c>l;`-4COKWiV+wr_OIfadlxn8RM+MDp-xF zO8Gl*z&=aG56^+c4V$45UY78VKS!@p@_-P|=XTR=%N*dp^o?(^`TH3TKs`U?8l$Fa ze`1w&dj$z!yTKzx=U%@*Fhy;QP)Kj|k|KV0bYi^D$g%rLfpwPt{CSFez;%q)Jcn7U$4h}(f@kv=P3|Pg>ece}5L>_yT%b4eT zmhYAepgw%XB%idAFTmknl^?wZq9H}rmpPmmNSf-1iF7M*vVhfI7?pcAiSUI<8_}v~ z7zjvbpgO{e^-DIH!PI%c3t%!-{#7kLdO=D#J2gb}QrtYm@yi|wGz^ebhBN|?I$2SA&!%}^Z7OES4Nu`4pu74t?%Z>wD+AI@}^ek2- zyjt9EfYM&f(a|(2dKbfEDb@Q&TJ9X{b_Z@`;@DD+#{-T#< zDtAW2EH^)rNtp}&hYk$%f6{@uEC>O!_EyqPaK4d+#?DIRkf=pmgrDdcne80~$znA# zfeU0}krTqS69_adwdEMH|07nU@2b4de;J?r!vf9?ZaVedQ`{mr2O^|NwI&n zXBF=@Xr@O+(hoVC3EVaGZs?lU1ZT(a6xrPRtBknt1|v&C;_CJgYH#1fxOD`J@>tB^ zl=b{Suo9d)YMsVKfS&-c-KLgFiCn!)%Q0Zv5Oa}jjc`55={&7u+41A|c|CjcBS5s}B-*N)r1<^LFG;_Qhu zm-`h#E~Ra9<64u?6ieMCfrZqm=y@68q5U}z77y8`GsX*{SawOt52pO^adWRDrzug4 zIgggw+KLwL?*2?DA_O=_v)+AF#P358%0lL1+3qoXq;nr$rVxbJ1hq~GXy|?--5$$_ zqX>vLVogy=DwQ7_2l%@}1TlpaHk+Y}bt)O<>WcJhC>6SCaDvk(Tfk{*ir)b$y=>)= zKkcWNWETzz^2E2(b4IQ}FTb1Q`pF5hJosEf)mr<7&Q;~dB`5kdLOs8!B9oRtD zS2Xwahd+gD22@9&xwF1V2;;9*gym%?P?wBKk52DOt*q(l7~0W@fq)K&GO4a7^vBH* z2v_{5rjB*cp?jk?fMq?u5;ul=lQkU)wDKYz)yZk%(;4Z7<`>X5F!9f6ImZcAU*=`e zUjh`sJfYhEM9)h#G$~koqtJ*=w2O|eek+GsrAM^p2Ybo~m%TX$*cSZoq;pngwC7?A zd#|Syo*`LqJ-7wzMH_D4>h1S7rR44a{pM8(o zcmMXYhBOV<7d*P~_EGUwi?L=#=k@!krM7hYhwjT{hr>eTha32}{>!2dj@bYhM`1Bh~|FOuxZ{myc3RClse`x#|jAfF#{@cJgqinC_3x2zghdAr*iYj_RwNba2-^Q%K)Eg9#X} zu98gLwoL)`ddQSNWntG7Mk$SD0>AUB*|6C|mFB7*09>RjFYb5=8E6F>#5Y2>0KSC@ zZcBYTSIbl%amv$nrD;xKpXRD%TjObVmjW3`YDy$_WB0ZU*)|F*+b;25D|?1h7NMRU zpdE?<4(4JQv*MxaPcH=Q8VQ~|dtxch`M|B?oHB$NUPVA$z{%-jp2kT`=61jUoe$-n zY{Q}@YGzCI(li@q>+wu-S98yMiI*d)NEA&-cc;0m4cg!;OSIKWqEfgG&+`h_DzqNS zk5Jg>6PWH@cAP&B)-GA^+NC?XIowi^%|GRzxMDpXtI^M!?;a#$cV142k=+AAd4aj? zNt@?lrX4qA99?5uF3z!;jslMyO)lQHmTF`C+Z@t=I8#+!dP2}w*{s#}ur)-av(+Uu z*2vtJe^z}u2c-p>6jeNzJ9lST=YKXo-J8ot(z&MBH2%!pnf5xnz#dB0dSsO4PM5CY zeuKe5^)U^p&b=yi>;os^^1R7jmi3wb#lvdgvLAl?ZqhngE;U%|ob4?E`2$l=e}ci) zz+XOv86my?$+5FH5RhQ?GQwqAl9RKoVk#;kGJJt)TJ5hCd`EQ%&|-aw3(S7g3x;j1 zKhZu7z)Ne$e(H0v{1K=()iv$_h(TsNyX25@jRB46otn=zSiNibP}TLT{V6EVUQY8gB97SQxFX z_Ktbzh2$5)i}2y&6-LG@Zb-G3xX}TT^$)}p`QdPu-mgt3fbrskA8AQbwpUlEr06M` zA4;jw82V7Y1l{%`{Hs&Hm18Nb2A5|m6r@`9rv=^<$VZ6trzgiP*k#2^JD0?_+29f- z8g$+A=i5;g82Zs4}tI10uodYfoPkO=KXd8ZGlS zlfu7#UG@r*Z7@4%fPSvZu+?)iTG}bT_#+19lZJm;^|n-kVUFV!fzirk8|d$jJr150 zQ_{=_G5qwYPy1VaRLmw;I@$vTk$8>v7mlU+9_9JdIzqyI+Xk84gy!N1e{eFd^~$?w zpI4uXL`GsdOl<))#&|zad^G!;Gtr+l|~P&(5;^R!q7&I22&> zrR>qluGS&)%h0c*=ADSUKnWXGJ|N4{@7*w6;O+l_1({c!7oBd#_p#&vmspsiVurZ& zZ_6H!3^+f*Kf(-ZLV2l|GYtyq(q>{;hyb4?pt{l1&iw8%XnYTNRw5Is^5GvXK)lA> z?=$V!)6Xr}?a{=UGvdWI=Fdk72nr@t-|PNqU&RnU(Vq(!oH|tYk$s5qzhtnS{@=vf z`z7#4kO}_eFtPK-d~uw3`ni`U(nHq|%voDx`_GsSK;DYri^(w%LStiMT#7>voImqcQ}@cv;_ zEPYVL^ZK6aH7N&oq|kYbPJ#Nr$oME_2-t~A~s^)okI+}lz{5&$JC zigVr3Gb~{w+n5&p-(KLQ9!%uTjgk~$~36xeL6Bnj=_%WB)qI(Tiu$NE(6Nv0ScKfHaB&*S;?F21Bx``O-djh>4!>$@qxod3s4pLlFUiklNZFBsVoVU z!9sW|K`P?=rX&NXp6EE;9+~#gs48Yv98PSW#{h1KAMk;5{^vFGlInHQPVpr(zj6;Z zn2;if0Mvx+C9#+Xg&AZv3tfpG3*x{XY!>z08W#g%P4YlG!d%~ zWK(G|QFTAH-X+RRY4O6+vED>588dFBkmbH|y_EC`Z)HvtgArtYvbRfZC6;+bYL&VC z*Jw+K=qikuvhoa4FxVb|zhs7ARC)3QY80vp>*a*Y7=}d46!+p1T2{a4cZt%B9NtXL zE(87P*GgAvM9K@wBjzfy;*EB@o^>rJgslXwN8ybTh(UqH3 ziVM`P+$rX;c(D3x1_nt0B#YpdpRlR;haTkSW?-#dQvN&?!~gQ!{0`B(zZ5_ZI_q-^0!~PPq>( zEc0fWz3!S^VC^hEYb)^J#>@`~@(3MC>`__Qz;C58{D1iJ_ZOfEF2Y*LOzEuZnHK#3 zn^s59x~)k~0!yz2{$7(-%qouzY}n1kvILN_rhaYvF}K_VcF($WS5fe>#f_>zY4YnL z8>Qa@j-sW^$=X{vPbcht=zi>Lb)=?Xr|v{H>^`m~_*A9s=k$+6?_TD%wSe#8yw%}F zcI!Cl%TJU%Y0yiogE_pPE$JC1)~dU{>9mRd zI1G$35Teo0?3RjE9}>5D$k57@Zq8wVqgoeIKcODnnaHn1>HvkgPNx3d4k*@RI!q#+ z>-8Mcrt~8u5^kBFGV@(o&?hyUrp#}Y;USvnIMrYEdB`bB4;zgt>7W2HS<}Q-$9b8< zz`nBe=L1>{29oe)Kl=yt{FxyotHZXyP3uU z<<9)mL5-gr|;3CIf6(dtUPp1Cir`+v+V zsI`wRka(Fs_d>CV`G^!9sHZe%{K|lyEpQZDU{Ve{?SOV`a(&ht*O5oh zn7dxy>$}&^?fNxbmT?z{lW?lGm%DLEILZec9xEM2YP*A%9))zl6}e!PxA`Aq&wJ1W zZx6uy8cZNB)P>P@Z%}iU$=JZC?cSwtli}-=X6qZb?u3?4;mt31_1JGT>B_@%_3aXU z?*`%2xdCV5>6}$E3ZWDj>&ef z*s>c|wfZo$9=j4^F2KghXA-|SUQCh>P~WV!G1v6d_vbL) zdC9Q}+e-D&O{4fo7=X*Ck9>4d$Y51A`|sv1$&9^`W8+7CG;YQcKdJL$}-%@{v`VOU$ z>w}f-N#4gJ3r+xs=&h)%A3cnKkhs~U>H#4)*s5YV7ni4{BPtK@GzTYaor^GTzxRMg?sF6#r>)Wd*oU0LdCZ*>N(yzT3QQT>Reer! z87!E2_W4&w6Q0U&>AC#dpW&HR^CMW2R$(4QK=kzKQ(6C-E4qIM(jEq~v&c|kk$Ivv0qa4Ycc`FQWM z+-?-QE-qL7Mhn1}zkk3Um`Q6_?vL*lR6ubZq=hqe*LE}=zYk^)U3Ym^;AeM*R%lg{ zfW>{NC)@EpbMK7Z;}ACd7R(gR)_+0+Ayj|Zp&~ID#Zj?w;a;&?$bHPzQuX+G>@@H! z8U3!`el1bq%5sX_<-GG``?kh>M}pA0JLu&kIL(5goT4c#kjJLR?7=5COs3&{g!gdG z-6#3f*`EZPX!7$&(j6>EdsV^+5jND(+ScGxnx>%~UOQwj)z6FhXUj*fi**-lnb$o` zX1{f`IyV&BCCc}--5-ILQMfIW^g(R}g&#X=Jb?hws3^&Y)dI z9lX!7v48xj(5$YIyru>wlX0Sl1IktG{#)+F=<$Id;Cp%+oZ9{6tW;#`49L){;Leno zPt+KW^J#0y;YvqeJpEUj^2|$Q>j3sWR0zriq2A|p!1YHQWOjduBK}64kH(Y#Pg`gH z4F&tZacy=Esh!UU;g=qcDPu-*KCtKC;tAk*Ye7H2Lr*WR0Fszox=-t!~E^s8P zdUpZG1AZ;t>U>}Bf5I%2nx!il1mls8*^`nT5;Ar}|FJ&fk_D#_mh8xXPBM-Nd@#N! z+r-}zoHR%m=;WWWVeSfD56FjO7(P;DAv=&$!3a0_Ltlc=GpY$GciP8UL2IOM#*6UA&@<63aeeplO z5`QDjd#c0Kcf878>oG)PjE<^`D!5;YdQAdk8-3IET!3CJDRi3IhVMPEKeXPUNRi1W zLu0(3f`ZQyFe7bcJq&yW?hiizWa10;Q_I>-1713dPOb8aiCrkN*b!b=Ux`z32EoL0 z!I)?_I*3!`mv*z@mBsu=VViriH~%`5I5s|odWs-JCf*?3daZfEzj>NzVn(K2V-w?x zGCPd4WOZU`RsD&3AWs{T{e?F$H$sUI5!}!NIldW@--}x`Z)Ahnv$RHgyq} zTc670j>qXQZkx}Y$Z0%E7{i`vn7(7Wocq;IB290 zH;Ck!^wr^#V~vq)>VS8=JMAX9rv#5)hA+O6PW{AW_5i=K$T6%7d&qg42XSpdXS2jv zFJFHGR@RJPztCN1GA!mnZi|wC1Y7*t0q2#c2YyjFc=F&{M*b_6A4T6{G43OyZnAIdA@Q`0^vc%{3`s~K@7uGE4s>^p1o$yH78Iu z-z^jD?DU%t-ifjEePCS#-S4#DVXR5-2~dR$&Yxg39nLqKB{MNZmk-I7b(I-zynPy3 zWD>aM?u?1fCkf26qc*Ch#?cI;Io-)lDfS#4grGLnl!jz*bjh9)a6|lCDT~2$)F>&k z_{G{^-$u0)Ah;=pfCMtOhjq^*=5n6M6b?u81>EQyVe_s-*o1jNfaTzUM9{N8vWv_S zSq5Ai*An_^tw2+Y;XC!EQaQm|V&Us58bC2D%WBynT@reB7p98|+jNCv_8C=kv)rF0 zXN;Id9uugxU}X%jF=*kXnikY$s9ZA$eeI%n(2)Fh&K_wtW+%6`wE+YBmalfOiF+L2 zw&)(}{rJjx=MXU>*Dfb**YEV<2lI#5Al=Mb5IVOfFwL5lioB>aRvB@o)X9G;bbNNj zghNAK$ioDjEG}y^C+zZy8z8Ksq;Q6h@sQ%5)b1zMZn@*kv|h8Z^Ww7}$%v=D(Sy=I zJM9;adX>EcUCsdVip-GtR6dC2ikLjLl&h}A8vjYixJI_N#~*It@U-RAI+)rr9oOE) zIA%#Xo!0$$X*uba;<|?q>t$mkxNG%r(EYt)d8pSkpXie7-gGlMedgVrx0!XnY^}T9 zpOrE{?ig54?fx!z>oE-}i)ME$HJ$@XoGOqFX@8XR_Wk?!T<7nKjVkgKIy~tHCm3Y^ zbdvQ*UJv;u&gNlb!KPxtk`kFg`0BqiB$Mt0tn7CmDPtD4(#X^GUnkBVONVTY_;$m6 z*l$gZe$E3tq4XjcOHS(xT?)`L*zd5L=TJOr%-tr6{&oG>54`u%GL^lIVBZ)SaTTgY zW@k~_22wtMdYeTqwW|L?8&K1`aZRv==}57bGw9&muVo@ek~cs%nZs-kP3({$?iVy^ zD!T7WRmV{63k1?;I5-t9)sOeG-Ck69rdI(A6csLk z?N$ytbM`Z09Sv9wxp-NJ z-{n&BqlqwW^)iGN__&>#=dxi_+^(xgfzHYAaeu2`o*3>iFmUI0Fz+0xijl=s+^bPM zb-bu1L-c61-SeBs^r;}oKO-GLn?sE<5KDp&U-Q>01FZIVSh?OHN@x{1X^gc~UwajN zpBoD?=pyN+2X@Ea;=P9;7TjIst;g9z?@gS##LaXgwr6jSnAm!ituM)D%01>iq+3*zXc7hC>xye5C zfpLuhAc-ZGi_|yJu9v9K8DI8s?=#2jgjNF3+xaNT ztf!?x)5X^;DtOL8pyq{=Unu^=3M#Tw%=K49eIjqS`ac9hI+cy@rovD32b|+5$ zQB^O`os?g@#}v2Pdewhg$>%!~h3H`wRj7EXu&md*41VS?({LvQbbhU!&J{xL8g5M} z6u9XAi=g{@mm;ZFpVxR*iO!I3!0p%!+=mLv8O*;A5Zo2r*%)&giYB6j%b7foCIO^f z$Ln12<@Wp6(m87^?gdXqXb?nw=3)ncuS-#8yJ)5>(^2otOAai7(d8byzT=N##_{L@ zsU}{iwalxBt(;mqmYdTV5W+3U>y*QxMU`+QKf+zo(zz;Q7+75Pq*I}=5it|i0Ejs% z-pD?bcmU-#09`=9aAcW2nzkp)ls)jz?{_lQOTb~M@cUo0sh*Z#&%F~ zQ#8;8Lixec1Vl5_|MwN!$Chz>wWCwwdKXC3sgP1K9}YGtg`C@)Ht^ZUu}=co!Y~#! z8al?({{dC`_G}F=tn_=Y(p3Txnm94`Q)P{_58K6Vh&Ae*I!3gP1%~Ll$ST6KE97njfREdf1cb+Wk26q>L{|eCPuV> zJz`>xZw_M#wy<_Aij@L(^_w&{Bx;za{?%8G@UHmPlzsS+l%FqkSxKp~esc6*8W#|# zv!-+<^?#7KuG-6IKLvC>@G!sG|M%6aVs=4_N@3a;t_Rrl`OClb@mupneO!Na?Vrid zw#Xrk@|1P=maLcW7SAdi-%AhhRIBZ5&wVoaX^h0|C}DGwX~uOeg1Cs2v-U1Y&nzSk z-}Q$Zz@*`JLSXE^qTc$TJSs$T_{Yuh7(Ibbs+o7qUI>`qe?i%S3ccYKqFxnomfX40 zK6`sRRu1(lRIGD-F+GvO_be}D)E1Xnv67bZhnAjGg;jaKfzzvBm&p$WTT@#vlCg(c zR*$at+o6OPp4Up5l^9aRg3JSI4J}hUncWzXMvx#(h_oTq*Wzt}UL6^|FFe*s5Z31v z1{FLf|Nf;`o<+txT* zpQ(keWL=mU6~In40>2531%m4l?OzyH-g!0LG zp9S5!wJmX(Va)9K^xP*6nsM@3mk5qh2BV^cHE5@fO7s0g}K}-7q?ho z^>lHmEfP}eu>%C!?2gj!#NV1qS)E`O!q)15TUq; zr+dl1b4N_*`%c2achst64k<4FD=nc1X}C#5bMh9Fx(RXzi~6YK*=^n}(i{j!Y*cf6 zzwSRjlJ1Rjvms{}1u+6lYS&9VGUf+*Y<)Xv+Hkd={Uj_l&<= z@rJXEvWDM7bCVD{D@B&-U9zrWcBbZ%E`n$Ch?ubN;N@xEm76d2Q1h-oUL}2YHcalR z2xS%C=}1$3cr^9~A2_D;_yDrEu{3rW1@PKE$EjK#snOh8@#pT$o!{4Lcv+9mbysU4 ze}WZ19bs0}`RpT)r9L^X2z0T`LDO^p-l7UuKzFR0PkP7Bp)-elKx5x-5lK7^w~;r- z!{DM0?7xPwn*;&-&Dyu2%TLe7#DE@zshE;Ae{2#Ts&4Gr+12GIb&rU`_MLaOFgZ30 zwtgEq#@|^ibU0EPfFqJHldJh82@?A%u5%Jo*%>v!m@k!IwW*HIQXaR6rdTgf6y z|42ET)*OJ1P%e|9^yO*h#s^jZ^YWib9^ym#)pNt9j!3L{r=>tYHd>W?E&z&+{UQNs zm-zb&aLl(GL_`~ErF8#xy?N2AWBwi7ydGaiX8*w1v#-yhq*M5i8rA(FAmNN2r`tq5V zjNH#`Yb`s30ucjG7lN)h)9Vibqyw=~Mwn0_<9b5uEm!=2Mnj=>%f`sWRN}Qh z?Ma_z(LwQtW`PwO5O%31o0&NTt|rT{xR4#Y7H~ZIAfXMCyd?>8DsD?mG{-GdPo$xx z+9$gjt())>?F@b?esp9@-0Q)PbhS2t?=`#gZt_qoS>jC+k+rJuBPziZBC=aV!W<%0&rgY^TtV+Ws zwpQ?^n0UZAhxT_JflCi&J@yEInPd+|&{hvUSB48xD$CB*9uqu3_2p$IZ|r4jCcLHXklu+?(i*yo>Gp-j92W>QWBcAlI~mLq{)5ZFbtiOsl(oS~C^ z@KY;&I+ZGXc*oP(^8Ycja#Frmbok=_BisG^N)X f$@Tu53}yo=*NS|(q0*I{lX01wSQ*zCy2k$>5ue^S diff --git a/dotfiles/.vim/plugged/editorconfig-vim/.appveyor.yml b/dotfiles/.vim/plugged/editorconfig-vim/.appveyor.yml deleted file mode 100644 index 630fc2f4..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/.appveyor.yml +++ /dev/null @@ -1,107 +0,0 @@ -# appveyor.yml for editorconfig-vim. Currently only tests the core. -# Modified from https://github.com/ppalaga/ec4j/commit/1c849658fb189cd95bc41af95acd43b4f0d75a48 -# -# Copyright (c) 2017--2019 Angelo Zerr and other contributors as -# indicated by the @author tags. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# @author Chris White (cxw42) - Adapted to editorconfig-vim - -# === When to build === -# See https://www.appveyor.com/docs/how-to/filtering-commits/ - -skip_commits: - message: /\[minor\]/ - files: - - '**/*.md' - -# === Build matrix === - -# Win is default; Ubuntu is override. See -# https://www.appveyor.com/blog/2018/04/25/specialized-build-matrix-configuration-in-appveyor/ -image: - - Visual Studio 2013 - - Ubuntu1604 - -# === How to build === - -cache: - - C:\vim -> .appveyor.yml, tests\fetch-vim.bat - -environment: - VIM_EXE: C:\vim\vim\vim80\vim.exe - -for: - # Don't run the Windows build if the commit message includes "[ci-linux]" - - - matrix: - only: - - image: Visual Studio 2013 - skip_commits: - message: /\[ci-linux\]/ - - # Platform-specific configuration for Ubuntu - - - matrix: - only: - - image: Ubuntu1604 - # $APPVEYOR_BUILD_FOLDER isn't expanded in the environment section - # here, so I can't set $VIM_EXE the way I want to. Instead, - # I set $VIM_EXE in the sh-specific install steps below. - environment: - VIM_EXE: UNDEFINED - cache: - - $APPVEYOR_BUILD_FOLDER/vim -> .appveyor.yml, tests/fetch-vim.sh - - # Plus, don't run Ubuntu if the commit message includes [ci-win] - skip_commits: - message: /\[ci-win\]/ - -install: - # Ubuntu-specific setup. These carry forward to the build_script. - - sh: export VIM_EXE="$APPVEYOR_BUILD_FOLDER/vim/bin/vim" - - sh: export PATH="$PATH":$APPVEYOR_BUILD_FOLDER/vim/bin - - sh: echo "$VIM_EXE , $PATH" - - # Cross-platform - test the core - - cmake --version - - git submodule update --init --recursive - - cmd: tests\fetch-vim - - sh: tests/fetch-vim.sh - -build_script: - # Build the core tests - - cd tests - - cd core - - mkdir build - - cd build - - cmake .. - -# Note on multicore testing: -# Two cores are available per https://help.appveyor.com/discussions/questions/11179-how-many-cores-and-threads-can-be-used-in-free-appveyor-build . -# However, using -j2 seems to make each job take much longer. - -test_script: - # Run the core tests - - ctest . --output-on-failure -C Debug - - # CTestCustom specifies skipping UTF-8 tests on Windows. - - cmd: echo "Reminder - did not try UTF-8" - - sh: echo "Reminder - tried UTF-8" - -on_failure: - - echo "failed" - - cmd: type tests\core\build\Testing\Temporary\LastTest.log - - sh: cat tests/core/build/Testing/Temporary/LastTest.log - diff --git a/dotfiles/.vim/plugged/editorconfig-vim/.editorconfig b/dotfiles/.vim/plugged/editorconfig-vim/.editorconfig deleted file mode 100644 index 7eed9e11..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/.editorconfig +++ /dev/null @@ -1,27 +0,0 @@ -root = true - -[*] -end_of_line = lf -charset = utf-8 -max_line_length = 80 - -[*.{vim,sh}] -indent_style = space -indent_size = 4 -insert_final_newline = true -trim_trailing_whitespace = true -max_line_length = 80 - -[*.rb] -indent_style = space -indent_size = 2 -insert_final_newline = true -trim_trailing_whitespace = true -max_line_length = 120 - -[*.yml] -indent_style = space -indent_size = 2 - -[*.{bat,vbs,ps1}] -end_of_line = CRLF diff --git a/dotfiles/.vim/plugged/editorconfig-vim/.gitignore b/dotfiles/.vim/plugged/editorconfig-vim/.gitignore deleted file mode 100644 index 1d86f15e..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -tags -tests/**/build -tests/**/.bundle - -# Editor backup files -*.swp -*~ -~* diff --git a/dotfiles/.vim/plugged/editorconfig-vim/.gitmodules b/dotfiles/.vim/plugged/editorconfig-vim/.gitmodules deleted file mode 100644 index 8cf01bc4..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/.gitmodules +++ /dev/null @@ -1,6 +0,0 @@ -[submodule "plugin_tests"] - path = tests/plugin/spec/plugin_tests - url = https://github.com/editorconfig/editorconfig-plugin-tests.git -[submodule "core_tests"] - path = tests/core/tests - url = https://github.com/editorconfig/editorconfig-core-test.git diff --git a/dotfiles/.vim/plugged/editorconfig-vim/.gitrepo b/dotfiles/.vim/plugged/editorconfig-vim/.gitrepo deleted file mode 100644 index 61a0362b..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/.gitrepo +++ /dev/null @@ -1,12 +0,0 @@ -; DO NOT EDIT (unless you know what you are doing) -; -; This subdirectory is a git "subrepo", and this file is maintained by the -; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme -; -[subrepo] - remote = https://github.com/editorconfig/editorconfig-vim.git - branch = master - commit = d354117b72b3b43b75a29b8e816c0f91af10efe9 - parent = 0425727f1acd088f401a8a3a942bbe7e5d992019 - method = merge - cmdver = 0.4.3 diff --git a/dotfiles/.vim/plugged/editorconfig-vim/.travis.yml b/dotfiles/.vim/plugged/editorconfig-vim/.travis.yml deleted file mode 100644 index 1eaad3b3..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/.travis.yml +++ /dev/null @@ -1,30 +0,0 @@ -# Make sure xvfb works - https://docs.travis-ci.com/user/gui-and-headless-browsers/#using-xvfb-directly -dist: trusty - -matrix: - include: - - name: "plugin" - env: TEST_WHICH=plugin - language: ruby - rvm: - - 2.2.4 - gemfile: tests/plugin/Gemfile - - name: "core" - env: TEST_WHICH=core - -addons: - apt: - packages: - - vim-gtk - -before_script: - - "export DISPLAY=:99.0" - - "sh -e /etc/init.d/xvfb start" - -script: - ./tests/travis-test.sh - -notifications: - email: - on_success: change - on_failure: always diff --git a/dotfiles/.vim/plugged/editorconfig-vim/CONTRIBUTORS b/dotfiles/.vim/plugged/editorconfig-vim/CONTRIBUTORS deleted file mode 100644 index b799668c..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/CONTRIBUTORS +++ /dev/null @@ -1,6 +0,0 @@ -Contributors to the EditorConfig Vim Plugin: - -Hong Xu -Trey Hunner -Kent Frazier -Chris White diff --git a/dotfiles/.vim/plugged/editorconfig-vim/LICENSE b/dotfiles/.vim/plugged/editorconfig-vim/LICENSE deleted file mode 100644 index ed9286e0..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/LICENSE +++ /dev/null @@ -1,26 +0,0 @@ -Unless otherwise stated, all files are distributed under the Simplified BSD -license included below. - -Copyright (c) 2011-2019 EditorConfig Team -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -POSSIBILITY OF SUCH DAMAGE. diff --git a/dotfiles/.vim/plugged/editorconfig-vim/LICENSE.PSF b/dotfiles/.vim/plugged/editorconfig-vim/LICENSE.PSF deleted file mode 100755 index 36eb8e0d..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/LICENSE.PSF +++ /dev/null @@ -1,53 +0,0 @@ -Some code in editorconfig-vim is derived from code licensed under the -PSF license. The following is the text of that license, retrieved 2019-05-05 -from https://docs.python.org/2.6/license.html#terms-and-conditions-for-accessing-or-otherwise-using-python - -PSF LICENSE AGREEMENT FOR PYTHON 2.6.9 - -1. This LICENSE AGREEMENT is between the Python Software Foundation -(``PSF''), and the Individual or Organization (``Licensee'') accessing and -otherwise using Python 2.6.9 software in source or binary form and its -associated documentation. - -2. Subject to the terms and conditions of this License Agreement, PSF -hereby grants Licensee a nonexclusive, royalty-free, world-wide -license to reproduce, analyze, test, perform and/or display publicly, -prepare derivative works, distribute, and otherwise use Python 2.6.9 -alone or in any derivative version, provided, however, that PSF's -License Agreement and PSF's notice of copyright, i.e., ``Copyright (c) -2001-2010 Python Software Foundation; All Rights Reserved'' are -retained in Python 2.6.9 alone or in any derivative version prepared -by Licensee. - -3. In the event Licensee prepares a derivative work that is based on -or incorporates Python 2.6.9 or any part thereof, and wants to make -the derivative work available to others as provided herein, then -Licensee hereby agrees to include in any such work a brief summary of -the changes made to Python 2.6.9. - -4. PSF is making Python 2.6.9 available to Licensee on an ``AS IS'' -basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. -BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY -REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY -PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 2.6.9 WILL NOT INFRINGE -ANY THIRD PARTY RIGHTS. - -5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON -2.6.9 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS -A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 2.6.9, -OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. - -6. This License Agreement will automatically terminate upon a material -breach of its terms and conditions. - -7. Nothing in this License Agreement shall be deemed to create any -relationship of agency, partnership, or joint venture between PSF and -Licensee. This License Agreement does not grant permission to use PSF -trademarks or trade name in a trademark sense to endorse or promote -products or services of Licensee, or any third party. - -8. By copying, installing or otherwise using Python 2.6.9, Licensee -agrees to be bound by the terms and conditions of this License -Agreement. - -# vi: set ft=: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/README.md b/dotfiles/.vim/plugged/editorconfig-vim/README.md deleted file mode 100644 index 248d315e..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# EditorConfig Vim Plugin - -[![Travis Build Status](https://img.shields.io/travis/cxw42/editorconfig-vim.svg?logo=travis)](https://travis-ci.org/editorconfig/editorconfig-vim) -[![Appveyor Build Status](https://img.shields.io/appveyor/ci/cxw42/editorconfig-vim.svg?logo=appveyor)](https://ci.appveyor.com/project/cxw42/editorconfig-vim) - -This is an [EditorConfig][] plugin for Vim. This plugin can be found on both -[GitHub][] and [Vim online][]. - -## Installation - -To install this plugin, you can use one of the following ways: - -### Install with the archive - -Download the [archive][] and extract it into your Vim runtime directory -(`~/.vim` on UNIX/Linux and `$VIM_INSTALLATION_FOLDER\vimfiles` on windows). -You should have 3 sub-directories in this runtime directory now: "autoload", -"doc" and "plugin". - -### Install as Vim8 plugin - -Install as a Vim 8 plugin. Note `local` can be any name, but some path -element must be present. On Windows, instead of `~/.vim` use -`$VIM_INSTALLATION_FOLDER\vimfiles`. -```shell -mkdir -p ~/.vim/pack/local/start -cd ~/.vim/pack/local/start -git clone https://github.com/editorconfig/editorconfig-vim.git -``` - -### Install with [pathogen][] - -Use pathogen (the git repository of this plugin is -https://github.com/editorconfig/editorconfig-vim.git) - -### Install with [Vundle][] - -Use Vundle by adding to your `.vimrc` Vundle plugins section: - -```viml -Plugin 'editorconfig/editorconfig-vim' -``` - -Then call `:PluginInstall`. - -### Install with [vim-plug][] - -Use vim-plug by adding to your `.vimrc` in your plugin section: - -```viml -Plug 'editorconfig/editorconfig-vim' -``` - -Source your `.vimrc` by calling `:source $MYVIMRC`. - -Then call `:PlugInstall`. - -### No external editorconfig core library is required - -Previous versions of this plugin also required a Python "core". -The core included the code to parse `.editorconfig` files. -This plugin **includes** the core, so you don't need to download the -core separately. - -## Supported properties - -The EditorConfig Vim plugin supports the following EditorConfig [properties][]: - -* `indent_style` -* `indent_size` -* `tab_width` -* `end_of_line` -* `charset` -* `insert_final_newline` (Feature `+fixendofline`, available on Vim 7.4.785+, - or [PreserveNoEOL][] is required for this property) -* `trim_trailing_whitespace` -* `max_line_length` -* `root` (only used by EditorConfig core) - -## Selected Options - -The supported options are documented in [editorconfig.txt][] -and can be viewed by executing the following: `:help editorconfig`. You may -need to execute `:helptags ALL` so that Vim is aware of editorconfig.txt. - -### Excluded patterns - -To ensure that this plugin works well with [Tim Pope's fugitive][], use the -following patterns array: - -```viml -let g:EditorConfig_exclude_patterns = ['fugitive://.*'] -``` - -If you wanted to avoid loading EditorConfig for any remote files over ssh: - -```viml -let g:EditorConfig_exclude_patterns = ['scp://.*'] -``` - -Of course these two items could be combined into the following: - -```viml -let g:EditorConfig_exclude_patterns = ['fugitive://.*', 'scp://.*'] -``` - -### Disable for a specific filetype - -You can disable this plugin for a specific buffer by setting -`b:EditorConfig_disable`. Therefore, you can disable the -plugin for all buffers of a specific filetype. For example, to disable -EditorConfig for all git commit messages (filetype `gitcommit`): - -```viml -au FileType gitcommit let b:EditorConfig_disable = 1 -``` - -### Disable rules - -In very rare cases, -you might need to override some project-specific EditorConfig rules in global -or local vimrc in some cases, e.g., to resolve conflicts of trailing whitespace -trimming and buffer autosaving. This is not recommended, but you can: - -```viml -let g:EditorConfig_disable_rules = ['trim_trailing_whitespace'] -``` - -You are able to disable any supported EditorConfig properties. - -## Bugs and Feature Requests - -Feel free to submit bugs, feature requests, and other issues to the -[issue tracker][]. Be sure you have read the [contribution guidelines][]! - -[EditorConfig]: http://editorconfig.org -[GitHub]: https://github.com/editorconfig/editorconfig-vim -[PreserveNoEOL]: http://www.vim.org/scripts/script.php?script_id=4550 -[Tim Pope's fugitive]: https://github.com/tpope/vim-fugitive -[Vim online]: http://www.vim.org/scripts/script.php?script_id=3934 -[Vundle]: https://github.com/gmarik/Vundle.vim -[archive]: https://github.com/editorconfig/editorconfig-vim/archive/master.zip -[contribution guidelines]: https://github.com/editorconfig/editorconfig/blob/master/CONTRIBUTING.md#submitting-an-issue -[issue tracker]: https://github.com/editorconfig/editorconfig-vim/issues -[pathogen]: https://github.com/tpope/vim-pathogen -[properties]: http://github.com/editorconfig/editorconfig/wiki/EditorConfig-Properties -[editorconfig.txt]: https://github.com/editorconfig/editorconfig-vim/blob/master/doc/editorconfig.txt -[vim-plug]: https://github.com/junegunn/vim-plug diff --git a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig.vim b/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig.vim deleted file mode 100644 index 1f61a330..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig.vim +++ /dev/null @@ -1,60 +0,0 @@ -" autoload/editorconfig.vim: EditorConfig native Vimscript plugin -" Copyright (c) 2011-2019 EditorConfig Team -" All rights reserved. -" -" Redistribution and use in source and binary forms, with or without -" modification, are permitted provided that the following conditions are met: -" -" 1. Redistributions of source code must retain the above copyright notice, -" this list of conditions and the following disclaimer. -" 2. Redistributions in binary form must reproduce the above copyright notice, -" this list of conditions and the following disclaimer in the documentation -" and/or other materials provided with the distribution. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -" POSSIBILITY OF SUCH DAMAGE. -" - -if v:version < 700 - finish -endif - -let s:saved_cpo = &cpo -set cpo&vim - -" {{{1 variables -let s:hook_list = [] - -function! editorconfig#AddNewHook(func) " {{{1 - " Add a new hook - - call add(s:hook_list, a:func) -endfunction - -function! editorconfig#ApplyHooks(config) abort " {{{1 - " apply hooks - - for Hook in s:hook_list - let l:hook_ret = Hook(a:config) - - if type(l:hook_ret) != type(0) && l:hook_ret != 0 - " TODO print some debug info here - endif - endfor -endfunction - -" }}} - -let &cpo = s:saved_cpo -unlet! s:saved_cpo - -" vim: fdm=marker fdc=3 diff --git a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core.vim b/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core.vim deleted file mode 100644 index 6885e17c..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core.vim +++ /dev/null @@ -1,147 +0,0 @@ -" autoload/editorconfig_core.vim: top-level functions for -" editorconfig-core-vimscript and editorconfig-vim. - -" Copyright (c) 2018-2020 EditorConfig Team, including Chris White {{{1 -" All rights reserved. -" -" Redistribution and use in source and binary forms, with or without -" modification, are permitted provided that the following conditions are met: -" -" 1. Redistributions of source code must retain the above copyright notice, -" this list of conditions and the following disclaimer. -" 2. Redistributions in binary form must reproduce the above copyright notice, -" this list of conditions and the following disclaimer in the documentation -" and/or other materials provided with the distribution. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -" POSSIBILITY OF SUCH DAMAGE. }}}1 - -let s:saved_cpo = &cpo -set cpo&vim - -" Variables {{{1 - -" Note: we create this variable in every script that accesses it. Normally, I -" would put this in plugin/editorconfig.vim. However, in some of my tests, -" the command-line testing environment did not load plugin/* in the normal -" way. Therefore, I do the check everywhere so I don't have to special-case -" the command line. - -if !exists('g:editorconfig_core_vimscript_debug') - let g:editorconfig_core_vimscript_debug = 0 -endif -" }}}1 - -" The latest version of the specification that we support. -" See discussion at https://github.com/editorconfig/editorconfig/issues/395 -function! editorconfig_core#version() - return [0,13,0] -endfunction - -" === CLI =============================================================== {{{1 - -" For use from the command line. Output settings for in_name to -" the buffer named out_name. If an optional argument is provided, it is the -" name of the config file to use (default '.editorconfig'). -" TODO support multiple files -" -" filename (if any) -" @param names {Dictionary} The names of the files to use for this run -" - output [required] Where the editorconfig settings should be written -" - target [required] A string or list of strings to process. Each -" must be a full path. -" - dump [optional] If present, write debug info to this file -" @param job {Dictionary} What to do - same format as the input of -" editorconfig_core#handler#get_configurations(), -" except without the target member. - -function! editorconfig_core#currbuf_cli(names, job) " out_name, in_name, ... - let l:output = [] - - " Preprocess the job - let l:job = deepcopy(a:job) - - if has_key(l:job, 'version') " string to list - let l:ver = split(editorconfig_core#util#strip(l:job.version), '\v\.') - for l:idx in range(len(l:ver)) - let l:ver[l:idx] = str2nr(l:ver[l:idx]) - endfor - - let l:job.version = l:ver - endif - - " TODO provide version output from here instead of the shell script -" if string(a:names) ==? 'version' -" return -" endif -" - if type(a:names) != type({}) || type(a:job) != type({}) - throw 'Need two Dictionary arguments' - endif - - if has_key(a:names, 'dump') - execute 'redir! > ' . fnameescape(a:names.dump) - echom 'Names: ' . string(a:names) - echom 'Job: ' . string(l:job) - let g:editorconfig_core_vimscript_debug = 1 - endif - - if type(a:names['target']) == type([]) - let l:targets = a:names.target - else - let l:targets = [a:names.target] - endif - - for l:target in l:targets - - " Pre-process quoting weirdness so we are more flexible in the face - " of CMake+CTest+BAT+Powershell quoting. - - " Permit wrapping in double-quotes - let l:target = substitute(l:target, '\v^"(.*)"$', '\1', '') - - " Permit empty ('') entries in l:targets - if strlen(l:target)<1 - continue - endif - - if has_key(a:names, 'dump') - echom 'Trying: ' . string(l:target) - endif - - let l:job.target = l:target - let l:options = editorconfig_core#handler#get_configurations(l:job) - - if has_key(a:names, 'dump') - echom 'editorconfig_core#currbuf_cli result: ' . string(l:options) - endif - - if len(l:targets) > 1 - let l:output += [ '[' . l:target . ']' ] - endif - - for [ l:key, l:value ] in items(l:options) - let l:output += [ l:key . '=' . l:value ] - endfor - - endfor "foreach target - - " Write the output file - call writefile(l:output, a:names.output) -endfunction "editorconfig_core#currbuf_cli - -" }}}1 - -let &cpo = s:saved_cpo -unlet! s:saved_cpo - -" vi: set fdm=marker fo-=ro: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/fnmatch.vim b/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/fnmatch.vim deleted file mode 100644 index 6f60db5d..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/fnmatch.vim +++ /dev/null @@ -1,465 +0,0 @@ -" autoload/editorconfig_core/fnmatch.vim: Globbing for -" editorconfig-vim. Ported from the Python core's fnmatch.py. - -" Copyright (c) 2012-2019 EditorConfig Team {{{1 -" All rights reserved. -" -" Redistribution and use in source and binary forms, with or without -" modification, are permitted provided that the following conditions are met: -" -" 1. Redistributions of source code must retain the above copyright notice, -" this list of conditions and the following disclaimer. -" 2. Redistributions in binary form must reproduce the above copyright notice, -" this list of conditions and the following disclaimer in the documentation -" and/or other materials provided with the distribution. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -" POSSIBILITY OF SUCH DAMAGE. }}}1 - -"Filename matching with shell patterns. -" -"fnmatch(FILENAME, PATH, PATTERN) matches according to the local convention. -"fnmatchcase(FILENAME, PATH, PATTERN) always takes case in account. -" -"The functions operate by translating the pattern into a regular -"expression. They cache the compiled regular expressions for speed. -" -"The function translate(PATTERN) returns a regular expression -"corresponding to PATTERN. (It does not compile it.) - -let s:saved_cpo = &cpo -set cpo&vim - -" variables {{{1 -if !exists('g:editorconfig_core_vimscript_debug') - let g:editorconfig_core_vimscript_debug = 0 -endif -" }}}1 -" === Regexes =========================================================== {{{1 -let s:LEFT_BRACE = '\v%(^|[^\\])\{' -"LEFT_BRACE = re.compile( -" r""" -" -" (?: ^ | [^\\] ) # Beginning of string or a character besides "\" -" -" \{ # "{" -" -" """, re.VERBOSE -") - -let s:RIGHT_BRACE = '\v%(^|[^\\])\}' -"RIGHT_BRACE = re.compile( -" r""" -" -" (?: ^ | [^\\] ) # Beginning of string or a character besides "\" -" -" \} # "}" -" -" """, re.VERBOSE -") - -let s:NUMERIC_RANGE = '\v([+-]?\d+)' . '\.\.' . '([+-]?\d+)' -"NUMERIC_RANGE = re.compile( -" r""" -" ( # Capture a number -" [+-] ? # Zero or one "+" or "-" characters -" \d + # One or more digits -" ) -" -" \.\. # ".." -" -" ( # Capture a number -" [+-] ? # Zero or one "+" or "-" characters -" \d + # One or more digits -" ) -" """, re.VERBOSE -") - -" }}}1 -" === Internal functions ================================================ {{{1 - -" Dump the bytes of a:text. For debugging use. -function! s:dump_bytes(text) - let l:idx=0 - while l:idx < strlen(a:text) - let l:byte_val = char2nr(a:text[l:idx]) - echom printf('%10s%-5d%02x %s', '', l:idx, l:byte_val, - \ a:text[l:idx]) - let l:idx+=1 - endwhile -endfunction "s:dump_bytes - -" Dump the characters of a:text and their codepoints. For debugging use. -function! s:dump_chars(text) - let l:chars = split(a:text, '\zs') - let l:idx = 0 - let l:out1 = '' - let l:out2 = '' - while l:idx < len(l:chars) - let l:char = l:chars[l:idx] - let l:out1 .= printf('%5s', l:char) - let l:out2 .= printf('%5x', char2nr(l:char)) - let l:idx+=1 - endwhile - - echom l:out1 - echom l:out2 -endfunction "s:dump_chars - -" }}}1 -" === Translating globs to patterns ===================================== {{{1 - -" Used by s:re_escape: backslash-escape any character below U+0080; -" replace all others with a %U escape. -" See https://vi.stackexchange.com/a/19617/1430 by yours truly -" (https://vi.stackexchange.com/users/1430/cxw). -unlockvar s:replacement_expr -let s:replacement_expr = - \ '\=' . - \ '((char2nr(submatch(1)) >= 128) ? ' . - \ 'printf("%%U%08x", char2nr(submatch(1))) : ' . - \ '("\\" . submatch(1))' . - \ ')' -lockvar s:replacement_expr - -" Escaper for very-magic regexes -function! s:re_escape(text) - return substitute(a:text, '\v([^0-9a-zA-Z_])', s:replacement_expr, 'g') -endfunction - -"def translate(pat, nested=0): -" Translate a shell PATTERN to a regular expression. -" There is no way to quote meta-characters. -function! editorconfig_core#fnmatch#translate(pat, ...) - let l:nested = 0 - if a:0 - let l:nested = a:1 - endif - - if g:editorconfig_core_vimscript_debug - echom '- fnmatch#translate: pattern ' . a:pat - echom printf( - \ '- %d chars', strlen(substitute(a:pat, ".", "x", "g"))) - call s:dump_chars(a:pat) - endif - - let l:pat = a:pat " TODO remove if we wind up not needing this - - " Note: the Python sets MULTILINE and DOTALL, but Vim has \_. - " instead of DOTALL, and \_^ / \_$ instead of MULTILINE. - - let l:is_escaped = 0 - - " Find out whether the pattern has balanced braces. - let l:left_braces=[] - let l:right_braces=[] - call substitute(l:pat, s:LEFT_BRACE, '\=add(l:left_braces, 1)', 'g') - call substitute(l:pat, s:RIGHT_BRACE, '\=add(l:right_braces, 1)', 'g') - " Thanks to http://jeromebelleman.gitlab.io/posts/productivity/vimsub/ - let l:matching_braces = (len(l:left_braces) == len(l:right_braces)) - - " Unicode support (#2). Indexing l:pat[l:index] returns bytes, per - " https://github.com/neovim/neovim/issues/68#issue-28114985 . - " Instead, use split() per vimdoc to break the input string into an - " array of *characters*, and process that. - let l:characters = split(l:pat, '\zs') - - let l:index = 0 " character index - let l:length = len(l:characters) - let l:brace_level = 0 - let l:in_brackets = 0 - - let l:result = '' - let l:numeric_groups = [] - while l:index < l:length - let l:current_char = l:characters[l:index] - let l:index += 1 - -" if g:editorconfig_core_vimscript_debug -" echom ' - fnmatch#translate: ' . l:current_char . '@' . -" \ (l:index-1) . '; result ' . l:result -" endif - - if l:current_char ==# '*' - let l:pos = l:index - if l:pos < l:length && l:characters[l:pos] ==# '*' - let l:result .= '\_.*' - let l:index += 1 " skip the second star - else - let l:result .= '[^/]*' - endif - - elseif l:current_char ==# '?' - let l:result .= '\_[^/]' - - elseif l:current_char ==# '[' - if l:in_brackets - let l:result .= '\[' - else - let l:pos = l:index - let l:has_slash = 0 - while l:pos < l:length && l:characters[l:pos] != ']' - if l:characters[l:pos] ==# '/' && l:characters[l:pos-1] !=# '\' - let has_slash = 1 - break - endif - let l:pos += 1 - endwhile - if l:has_slash - " POSIX IEEE 1003.1-2017 sec. 2.13.3: '/' cannot occur - " in a bracket expression, so [/] matches a literal - " three-character string '[' . '/' . ']'. - let l:result .= '\[' - \ . s:re_escape(join(l:characters[l:index : l:pos-1], '')) - \ . '\/' - " escape the slash - let l:index = l:pos + 1 - " resume after the slash - else - if l:index < l:length && l:characters[l:index] =~# '\v%(\^|\!)' - let l:index += 1 - let l:result .= '[^' - else - let l:result .= '[' - endif - let l:in_brackets = 1 - endif - endif - - elseif l:current_char ==# '-' - if l:in_brackets - let l:result .= l:current_char - else - let l:result .= '\' . l:current_char - endif - - elseif l:current_char ==# ']' - if l:in_brackets && !l:is_escaped - let l:result .= ']' - let l:in_brackets = 0 - elseif l:is_escaped - let l:result .= '\]' - let l:is_escaped = 0 - else - let l:result .= '\]' - endif - - elseif l:current_char ==# '{' - let l:pos = l:index - let l:has_comma = 0 - while l:pos < l:length && (l:characters[l:pos] !=# '}' || l:is_escaped) - if l:characters[l:pos] ==# ',' && ! l:is_escaped - let l:has_comma = 1 - break - endif - let l:is_escaped = l:characters[l:pos] ==# '\' && ! l:is_escaped - let l:pos += 1 - endwhile - if ! l:has_comma && l:pos < l:length - let l:num_range = - \ matchlist(join(l:characters[l:index : l:pos-1], ''), - \ s:NUMERIC_RANGE) - if len(l:num_range) > 0 " Remember the ranges - call add(l:numeric_groups, [ 0+l:num_range[1], 0+l:num_range[2] ]) - let l:result .= '([+-]?\d+)' - else - let l:inner_xlat = editorconfig_core#fnmatch#translate( - \ join(l:characters[l:index : l:pos-1], ''), 1) - let l:inner_result = l:inner_xlat[0] - let l:inner_groups = l:inner_xlat[1] - let l:result .= '\{' . l:inner_result . '\}' - let l:numeric_groups += l:inner_groups - endif - let l:index = l:pos + 1 - elseif l:matching_braces - let l:result .= '%(' - let l:brace_level += 1 - else - let l:result .= '\{' - endif - - elseif l:current_char ==# ',' - if l:brace_level > 0 && ! l:is_escaped - let l:result .= '|' - else - let l:result .= '\,' - endif - - elseif l:current_char ==# '}' - if l:brace_level > 0 && ! l:is_escaped - let l:result .= ')' - let l:brace_level -= 1 - else - let l:result .= '\}' - endif - - elseif l:current_char ==# '/' - if join(l:characters[l:index : (l:index + 2)], '') ==# '**/' - let l:result .= '%(/|/\_.*/)' - let l:index += 3 - else - let l:result .= '\/' - endif - - elseif l:current_char != '\' - let l:result .= s:re_escape(l:current_char) - endif - - if l:current_char ==# '\' - if l:is_escaped - let l:result .= s:re_escape(l:current_char) - endif - let l:is_escaped = ! l:is_escaped - else - let l:is_escaped = 0 - endif - - endwhile - - if ! l:nested - let l:result .= '\_$' - endif - - return [l:result, l:numeric_groups] -endfunction " #editorconfig_core#fnmatch#translate - -let s:_cache = {} -function! s:cached_translate(pat) - if ! has_key(s:_cache, a:pat) - "regex = re.compile(res) - let s:_cache[a:pat] = - \ editorconfig_core#fnmatch#translate(a:pat) - " we don't compile the regex - endif - return s:_cache[a:pat] -endfunction " cached_translate - -" }}}1 -" === Matching functions ================================================ {{{1 - -function! editorconfig_core#fnmatch#fnmatch(name, path, pattern) -"def fnmatch(name, pat): -" """Test whether FILENAME matches PATH/PATTERN. -" -" Patterns are Unix shell style: -" -" - ``*`` matches everything except path separator -" - ``**`` matches everything -" - ``?`` matches any single character -" - ``[seq]`` matches any character in seq -" - ``[!seq]`` matches any char not in seq -" - ``{s1,s2,s3}`` matches any of the strings given (separated by commas) -" -" An initial period in FILENAME is not special. -" Both FILENAME and PATTERN are first case-normalized -" if the operating system requires it. -" If you don't want this, use fnmatchcase(FILENAME, PATTERN). -" """ -" - " Note: This throws away the backslash in '\.txt' on Cygwin, but that - " makes sense since it's Windows under the hood. - " We don't care about shellslash since we're going to change backslashes - " to slashes in just a moment anyway. - let l:localname = fnamemodify(a:name, ':p') - - if editorconfig_core#util#is_win() " normalize - let l:localname = substitute(tolower(l:localname), '\v\\', '/', 'g') - let l:path = substitute(tolower(a:path), '\v\\', '/', 'g') - let l:pattern = tolower(a:pattern) - else - let l:localname = l:localname - let l:path = a:path - let l:pattern = a:pattern - endif - - if g:editorconfig_core_vimscript_debug - echom '- fnmatch#fnmatch testing <' . l:localname . '> against <' . - \ l:pattern . '> wrt <' . l:path . '>' - endif - - return editorconfig_core#fnmatch#fnmatchcase(l:localname, l:path, l:pattern) -endfunction " fnmatch - -function! editorconfig_core#fnmatch#fnmatchcase(name, path, pattern) -"def fnmatchcase(name, pat): -" """Test whether FILENAME matches PATH/PATTERN, including case. -" -" This is a version of fnmatch() which doesn't case-normalize -" its arguments. -" """ -" - let [regex, num_groups] = s:cached_translate(a:pattern) - - let l:escaped_path = s:re_escape(a:path) - let l:regex = '\v' . l:escaped_path . l:regex - - if g:editorconfig_core_vimscript_debug - echom '- fnmatch#fnmatchcase: regex ' . l:regex - call s:dump_chars(l:regex) - echom '- fnmatch#fnmatchcase: checking ' . a:name - call s:dump_chars(a:name) - endif - - let l:match_groups = matchlist(a:name, l:regex)[1:] " [0] = full match - - if g:editorconfig_core_vimscript_debug - echom printf(' Got %d matches', len(l:match_groups)) - endif - - if len(l:match_groups) == 0 - return 0 - endif - - " Check numeric ranges - let pattern_matched = 1 - for l:idx in range(0,len(l:match_groups)) - let l:num = l:match_groups[l:idx] - if l:num ==# '' - break - endif - - let [min_num, max_num] = num_groups[l:idx] - if (min_num > (0+l:num)) || ((0+l:num) > max_num) - let pattern_matched = 0 - break - endif - - " Reject leading zeros without sign. This is very odd --- - " see editorconfig/editorconfig#371. - if match(l:num, '\v^0') != -1 - let pattern_matched = 0 - break - endif - endfor - - if g:editorconfig_core_vimscript_debug - echom '- fnmatch#fnmatchcase: ' . (pattern_matched ? 'matched' : 'did not match') - endif - - return pattern_matched -endfunction " fnmatchcase - -" }}}1 -" === Copyright notices ================================================= {{{1 -" Based on code from fnmatch.py file distributed with Python 2.6. -" Portions Copyright (c) 2001-2010 Python Software Foundation; -" All Rights Reserved. Licensed under PSF License (see LICENSE.PSF file). -" -" Changes to original fnmatch: -" -" - translate function supports ``*`` and ``**`` similarly to fnmatch C library -" }}}1 - -let &cpo = s:saved_cpo -unlet! s:saved_cpo - -" vi: set fdm=marker: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/handler.vim b/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/handler.vim deleted file mode 100644 index c9a66e16..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/handler.vim +++ /dev/null @@ -1,183 +0,0 @@ -" autoload/editorconfig_core/handler.vim: Main worker for -" editorconfig-core-vimscript and editorconfig-vim. -" Modified from the Python core's handler.py. - -" Copyright (c) 2012-2019 EditorConfig Team {{{1 -" All rights reserved. -" -" Redistribution and use in source and binary forms, with or without -" modification, are permitted provided that the following conditions are met: -" -" 1. Redistributions of source code must retain the above copyright notice, -" this list of conditions and the following disclaimer. -" 2. Redistributions in binary form must reproduce the above copyright notice, -" this list of conditions and the following disclaimer in the documentation -" and/or other materials provided with the distribution. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -" POSSIBILITY OF SUCH DAMAGE. }}}1 - -let s:saved_cpo = &cpo -set cpo&vim - -" Return full filepath for filename in each directory in and above path. {{{1 -" Input path must be an absolute path. -" TODO shellslash/shellescape? -function! s:get_filenames(path, config_filename) - let l:path = a:path - let l:path_list = [] - while 1 - call add(l:path_list, editorconfig_core#util#path_join(l:path, a:config_filename)) - let l:newpath = fnamemodify(l:path, ':h') - if l:path ==? l:newpath || !strlen(l:path) - break - endif - let l:path = l:newpath - endwhile - return l:path_list -endfunction " get_filenames - -" }}}1 -" === Main ============================================================== {{{1 - -" Find EditorConfig files and return all options matching target_filename. -" Throws on failure. -" @param job {Dictionary} required 'target'; optional 'config' and 'version' -function! editorconfig_core#handler#get_configurations(job) - " TODO? support VERSION checks? - -" Special exceptions that may be raised by this function include: -" - ``VersionError``: self.version is invalid EditorConfig version -" - ``PathError``: self.filepath is not a valid absolute filepath -" - ``ParsingError``: improperly formatted EditorConfig file found - - let l:job = deepcopy(a:job) - if has_key(l:job, 'config') - let l:config_filename = l:job.config - else - let l:config_filename = '.editorconfig' - let l:job.config = l:config_filename - endif - - if has_key(l:job, 'version') - let l:version = l:job.version - else - let l:version = editorconfig_core#version() - let l:job.version = l:version - endif - - let l:target_filename = l:job.target - - "echom 'Beginning job ' . string(l:job) - if !s:check_assertions(l:job) - throw "Assertions failed" - endif - - let l:fullpath = fnamemodify(l:target_filename,':p') - let l:path = fnamemodify(l:fullpath, ':h') - let l:conf_files = s:get_filenames(l:path, l:config_filename) - - " echom 'fullpath ' . l:fullpath - " echom 'path ' . l:path - - let l:retval = {} - - " Attempt to find and parse every EditorConfig file in filetree - for l:conf_fn in l:conf_files - "echom 'Trying ' . l:conf_fn - let l:parsed = editorconfig_core#ini#read_ini_file(l:conf_fn, l:target_filename) - if !has_key(l:parsed, 'options') - continue - endif - " echom ' Has options' - - " Merge new EditorConfig file's options into current options - let l:old_options = l:retval - let l:retval = l:parsed.options - " echom 'Old options ' . string(l:old_options) - " echom 'New options ' . string(l:retval) - call extend(l:retval, l:old_options, 'force') - - " Stop parsing if parsed file has a ``root = true`` option - if l:parsed.root - break - endif - endfor - - call s:preprocess_values(l:job, l:retval) - return l:retval -endfunction " get_configurations - -function! s:check_assertions(job) -" TODO -" """Raise error if filepath or version have invalid values""" - -" # Raise ``PathError`` if filepath isn't an absolute path -" if not os.path.isabs(self.filepath): -" raise PathError("Input file must be a full path name.") - - " Throw if version specified is greater than current - let l:v = a:job.version - let l:us = editorconfig_core#version() - " echom 'Comparing requested version ' . string(l:v) . - " \ ' to our version ' . string(l:us) - if l:v[0] > l:us[0] || l:v[1] > l:us[1] || l:v[2] > l:us[2] - throw 'Required version ' . string(l:v) . - \ ' is greater than the current version ' . string(l:us) - endif - - return 1 " All OK if we got here -endfunction " check_assertions - -" }}}1 - -" Preprocess option values for consumption by plugins. {{{1 -" Modifies its argument in place. -function! s:preprocess_values(job, opts) - - " Lowercase option value for certain options - for l:name in ['end_of_line', 'indent_style', 'indent_size', - \ 'insert_final_newline', 'trim_trailing_whitespace', - \ 'charset'] - if has_key(a:opts, l:name) - let a:opts[l:name] = tolower(a:opts[l:name]) - endif - endfor - - " Set indent_size to "tab" if indent_size is unspecified and - " indent_style is set to "tab", provided we are at least v0.10.0. - if get(a:opts, 'indent_style', '') ==? "tab" && - \ !has_key(a:opts, 'indent_size') && - \ ( a:job.version[0]>0 || a:job.version[1] >=10 ) - let a:opts['indent_size'] = 'tab' - endif - - " Set tab_width to indent_size if indent_size is specified and - " tab_width is unspecified - if has_key(a:opts, 'indent_size') && !has_key(a:opts, 'tab_width') && - \ get(a:opts, 'indent_size', '') !=? "tab" - let a:opts['tab_width'] = a:opts['indent_size'] - endif - - " Set indent_size to tab_width if indent_size is "tab" - if has_key(a:opts, 'indent_size') && has_key(a:opts, 'tab_width') && - \ get(a:opts, 'indent_size', '') ==? "tab" - let a:opts['indent_size'] = a:opts['tab_width'] - endif -endfunction " preprocess_values - -" }}}1 - -let &cpo = s:saved_cpo -unlet! s:saved_cpo - -" vi: set fdm=marker fdl=1: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/ini.vim b/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/ini.vim deleted file mode 100644 index 279b381d..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/ini.vim +++ /dev/null @@ -1,273 +0,0 @@ -" autoload/editorconfig_core/ini.vim: Config-file parser for -" editorconfig-core-vimscript and editorconfig-vim. -" Modifed from the Python core's ini.py. - -" Copyright (c) 2012-2019 EditorConfig Team {{{2 -" All rights reserved. -" -" Redistribution and use in source and binary forms, with or without -" modification, are permitted provided that the following conditions are met: -" -" 1. Redistributions of source code must retain the above copyright notice, -" this list of conditions and the following disclaimer. -" 2. Redistributions in binary form must reproduce the above copyright notice, -" this list of conditions and the following disclaimer in the documentation -" and/or other materials provided with the distribution. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -" POSSIBILITY OF SUCH DAMAGE. }}}2 - -let s:saved_cpo = &cpo -set cpo&vim - -" variables {{{2 -if !exists('g:editorconfig_core_vimscript_debug') - let g:editorconfig_core_vimscript_debug = 0 -endif -" }}}2 -" === Constants, including regexes ====================================== {{{2 -" Regular expressions for parsing section headers and options. -" Allow ``]`` and escaped ``;`` and ``#`` characters in section headers. -" In fact, allow \ to escape any single character - it needs to cover at -" least \ * ? [ ! ] { }. -unlockvar s:SECTCRE s:OPTCRE s:MAX_SECTION_NAME s:MAX_PROPERTY_NAME s:MAX_PROPERTY_VALUE -let s:SECTCRE = '\v^\s*\[(%([^\\#;]|\\.)+)\]' - -" Regular expression for parsing option name/values. -" Allow any amount of whitespaces, followed by separator -" (either ``:`` or ``=``), followed by any amount of whitespace and then -" any characters to eol -let s:OPTCRE = '\v\s*([^:=[:space:]][^:=]*)\s*([:=])\s*(.*)$' - -let s:MAX_SECTION_NAME = 4096 -let s:MAX_PROPERTY_NAME = 50 -let s:MAX_PROPERTY_VALUE = 255 - -lockvar s:SECTCRE s:OPTCRE s:MAX_SECTION_NAME s:MAX_PROPERTY_NAME s:MAX_PROPERTY_VALUE - -" }}}2 -" === Main ============================================================== {{{1 - -" Read \p config_filename and return the options applicable to -" \p target_filename. This is the main entry point in this file. -function! editorconfig_core#ini#read_ini_file(config_filename, target_filename) - let l:oldenc = &encoding - - if !filereadable(a:config_filename) - return {} - endif - - try " so &encoding will always be reset - let &encoding = 'utf-8' " so readfile() will strip BOM - let l:lines = readfile(a:config_filename) - let result = s:parse(a:config_filename, a:target_filename, l:lines) - catch - let &encoding = l:oldenc - " rethrow, but with a prefix since throw 'Vim...' fails. - throw 'Could not read editorconfig file at ' . v:throwpoint . ': ' . string(v:exception) - endtry - - let &encoding = l:oldenc - return result -endfunction - -function! s:parse(config_filename, target_filename, lines) -" Parse a sectioned setup file. -" The sections in setup file contains a title line at the top, -" indicated by a name in square brackets (`[]'), plus key/value -" options lines, indicated by `name: value' format lines. -" Continuations are represented by an embedded newline then -" leading whitespace. Blank lines, lines beginning with a '#', -" and just about everything else are ignored. - - let l:in_section = 0 - let l:matching_section = 0 - let l:optname = '' - let l:lineno = 0 - let l:e = [] " Errors, if any - - let l:options = {} " Options applicable to this file - let l:is_root = 0 " Whether a:config_filename declares root=true - - while 1 - if l:lineno == len(a:lines) - break - endif - - let l:line = a:lines[l:lineno] - let l:lineno = l:lineno + 1 - - " comment or blank line? - if editorconfig_core#util#strip(l:line) ==# '' - continue - endif - if l:line =~# '\v^[#;]' - continue - endif - - " is it a section header? - if g:editorconfig_core_vimscript_debug - echom "Header? <" . l:line . ">" - endif - - let l:mo = matchlist(l:line, s:SECTCRE) - if len(l:mo) - let l:sectname = l:mo[1] - let l:in_section = 1 - if strlen(l:sectname) > s:MAX_SECTION_NAME - " Section name too long => ignore the section - let l:matching_section = 0 - else - let l:matching_section = s:matches_filename( - \ a:config_filename, a:target_filename, l:sectname) - endif - - if g:editorconfig_core_vimscript_debug - echom 'In section ' . l:sectname . ', which ' . - \ (l:matching_section ? 'matches' : 'does not match') - \ ' file ' . a:target_filename . ' (config ' . - \ a:config_filename . ')' - endif - - " So sections can't start with a continuation line - let l:optname = '' - - " Is it an option line? - else - let l:mo = matchlist(l:line, s:OPTCRE) - if len(l:mo) - let l:optname = mo[1] - let l:optval = mo[3] - - if g:editorconfig_core_vimscript_debug - echom printf('Saw raw opt <%s>=<%s>', l:optname, l:optval) - endif - - if l:optval =~# '\v[;#]' - " ';' and '#' are comment delimiters only if - " preceded by a spacing character - let l:m = matchlist(l:optval, '\v(.{-})\s[;#]') - if len(l:m) - let l:optval = l:m[1] - endif - - " ; and # can be escaped with backslash. - let l:optval = substitute(l:optval, '\v\\([;#])', '\1', 'g') - - endif - let l:optval = editorconfig_core#util#strip(l:optval) - " allow empty values - if l:optval ==? '""' - let l:optval = '' - endif - let l:optname = s:optionxform(l:optname) - if !l:in_section && optname ==? 'root' - let l:is_root = (optval ==? 'true') - endif - if g:editorconfig_core_vimscript_debug - echom printf('Saw opt <%s>=<%s>', l:optname, l:optval) - endif - - if l:matching_section && - \ strlen(l:optname) <= s:MAX_PROPERTY_NAME && - \ strlen(l:optval) <= s:MAX_PROPERTY_VALUE - let l:options[l:optname] = l:optval - endif - else - " a non-fatal parsing error occurred. set up the - " exception but keep going. the exception will be - " raised at the end of the file and will contain a - " list of all bogus lines - call add(e, "Parse error in '" . a:config_filename . "' at line " . - \ l:lineno . ": '" . l:line . "'") - endif - endif - endwhile - - " if any parsing errors occurred, raise an exception - if len(l:e) - throw string(l:e) - endif - - return {'root': l:is_root, 'options': l:options} -endfunction! - -" }}}1 -" === Helpers =========================================================== {{{1 - -" Preprocess option names -function! s:optionxform(optionstr) - let l:result = substitute(a:optionstr, '\v\s+$', '', 'g') " rstrip - return tolower(l:result) -endfunction - -" Return true if \p glob matches \p target_filename -function! s:matches_filename(config_filename, target_filename, glob) -" config_dirname = normpath(dirname(config_filename)).replace(sep, '/') - let l:config_dirname = fnamemodify(a:config_filename, ':p:h') . '/' - - if editorconfig_core#util#is_win() - " Regardless of whether shellslash is set, make everything slashes - let l:config_dirname = - \ tolower(substitute(l:config_dirname, '\v\\', '/', 'g')) - endif - - let l:glob = substitute(a:glob, '\v\\([#;])', '\1', 'g') - - " Take account of the path to the editorconfig file. - " editorconfig-core-c/src/lib/editorconfig.c says: - " "Pattern would be: /dir/of/editorconfig/file[double_star]/[section] if - " section does not contain '/', or /dir/of/editorconfig/file[section] - " if section starts with a '/', or /dir/of/editorconfig/file/[section] if - " section contains '/' but does not start with '/'." - - if stridx(l:glob, '/') != -1 " contains a slash - if l:glob[0] ==# '/' - let l:glob = l:glob[1:] " trim leading slash - endif -" This will be done by fnmatch -" let l:glob = l:config_dirname . l:glob - else " does not contain a slash - let l:config_dirname = l:config_dirname[:-2] - " Trim trailing slash - let l:glob = '**/' . l:glob - endif - - if g:editorconfig_core_vimscript_debug - echom '- ini#matches_filename: checking <' . a:target_filename . - \ '> against <' . l:glob . '> with respect to config file <' . - \ a:config_filename . '>' - echom '- ini#matches_filename: config_dirname is ' . l:config_dirname - endif - - return editorconfig_core#fnmatch#fnmatch(a:target_filename, - \ l:config_dirname, l:glob) -endfunction " matches_filename - -" }}}1 -" === Copyright notices ================================================= {{{2 -" Based on code from ConfigParser.py file distributed with Python 2.6. -" Portions Copyright (c) 2001-2010 Python Software Foundation; -" All Rights Reserved. Licensed under PSF License (see LICENSE.PSF file). -" -" Changes to original ConfigParser: -" -" - Special characters can be used in section names -" - Octothorpe can be used for comments (not just at beginning of line) -" - Only track INI options in sections that match target filename -" - Stop parsing files with when ``root = true`` is found -" }}}2 - -let &cpo = s:saved_cpo -unlet! s:saved_cpo - -" vi: set fdm=marker fdl=1: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/util.vim b/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/util.vim deleted file mode 100644 index c4df04af..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/autoload/editorconfig_core/util.vim +++ /dev/null @@ -1,84 +0,0 @@ -" util.vim: part of editorconfig-core-vimscript and editorconfig-vim. -" Copyright (c) 2018-2019 EditorConfig Team, including Chris White {{{1 -" All rights reserved. -" -" Redistribution and use in source and binary forms, with or without -" modification, are permitted provided that the following conditions are met: -" -" 1. Redistributions of source code must retain the above copyright notice, -" this list of conditions and the following disclaimer. -" 2. Redistributions in binary form must reproduce the above copyright notice, -" this list of conditions and the following disclaimer in the documentation -" and/or other materials provided with the distribution. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -" POSSIBILITY OF SUCH DAMAGE. }}}1 - -let s:saved_cpo = &cpo -set cpo&vim - -" A verbatim copy of ingo#fs#path#Separator() {{{1 -" from https://github.com/vim-scripts/ingo-library/blob/558132e2221db3af26dc2f2c6756d092d48a459f/autoload/ingo/fs/path.vim -" distributed under the Vim license. -function! editorconfig_core#util#Separator() - return (exists('+shellslash') && ! &shellslash ? '\' : '/') -endfunction " }}}1 - -" path_join(): ('a','b')->'a/b'; ('a/','b')->'a/b'. {{{1 -function! editorconfig_core#util#path_join(a, b) - " TODO shellescape/shellslash? - "echom 'Joining <' . a:a . '> and <' . a:b . '>' - "echom 'Length is ' . strlen(a:a) - "echom 'Last char is ' . char2nr(a:a[-1]) - if a:a !~# '\v%(\/|\\)$' - return a:a . editorconfig_core#util#Separator() . a:b - else - return a:a . a:b - endif -endfunction " }}}1 - -" is_win() by xolox {{{1 -" The following function is modified from -" https://github.com/xolox/vim-misc/blob/master/autoload/xolox/misc/os.vim -" Copyright (c) 2015 Peter Odding -" -" Permission is hereby granted, free of charge, to any person obtaining a copy -" of this software and associated documentation files (the "Software"), to deal -" in the Software without restriction, including without limitation the rights -" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -" copies of the Software, and to permit persons to whom the Software is -" furnished to do so, subject to the following conditions: -" -" The above copyright notice and this permission notice shall be included in all -" copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -" SOFTWARE. -function! editorconfig_core#util#is_win() - " Returns 1 (true) when on Microsoft Windows, 0 (false) otherwise. - return has('win16') || has('win32') || has('win64') -endfunction " }}}1 - -" strip() {{{1 -function! editorconfig_core#util#strip(s) - return substitute(a:s, '\v^\s+|\s+$','','g') -endfunction " }}}1 - -let &cpo = s:saved_cpo -unlet! s:saved_cpo - -" vi: set fdm=marker: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/doc/editorconfig.txt b/dotfiles/.vim/plugged/editorconfig-vim/doc/editorconfig.txt deleted file mode 100644 index 66e9e5bf..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/doc/editorconfig.txt +++ /dev/null @@ -1,203 +0,0 @@ -*editorconfig.txt* - -File: editorconfig.txt -Version: 1.1.1 -Maintainer: EditorConfig Team -Description: EditorConfig vim plugin - -License: - Copyright (c) 2011-2019 EditorConfig Team - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - - -CONTENTS~ - *editorconfig-contents* ----------------------------------------------------------------------------- -1. Overview |editorconfig-overview| -2. Installation |editorconfig-installation| -3. Commands |editorconfig-commands| -4. Settings |editorconfig-settings| -5. Advanced |editorconfig-advanced| - - -OVERVIEW~ - *editorconfig-overview* ----------------------------------------------------------------------------- -This is the EditorConfig plugin for vim. - - -INSTALLATION~ - *editorconfig-installation* ----------------------------------------------------------------------------- -Follow the instructions in the README.md file to install this plugin. - -COMMANDS~ - *editorconfig-commands* ----------------------------------------------------------------------------- - - *:EditorConfigReload* -Command: - :EditorConfigReload - -Reload the EditorConfig conf files. When `.editorconfig` files are modified, -this command could prevent you to reload the current edited file to load the -new configuration. - -SETTINGS~ - *editorconfig-settings* ----------------------------------------------------------------------------- - *g:EditorConfig_core_mode* -Specify the mode of EditorConfig core. Generally it is OK to leave this option -empty. Currently, the supported modes are "vim_core" (default) and -"external_command". - - vim_core: Use the included VimScript EditorConfig Core. - external_command: Run external EditorConfig Core. - -If "g:EditorConfig_core_mode" is not specified, this plugin will automatically -choose "vim_core". - -If you choose "external_command" mode, you must also set -|g:EditorConfig_exec_path|. - -Changes to "g:EditorConfig_core_mode" will not take effect until Vim -is restarted. - - *b:EditorConfig_disable* -This is a buffer-local variable that disables the EditorConfig plugin for a -single buffer. - -Example: Disable EditorConfig for the current buffer: -> - let b:EditorConfig_disable = 1 -< -Example: Disable EditorConfig for all git commit messages: -> - au FileType gitcommit let b:EditorConfig_disable = 1 -< - - *g:EditorConfig_exclude_patterns* -This is a list contains file path patterns which will be ignored by -EditorConfig plugin. When the path of the opened buffer (i.e. -"expand('%:p')") matches any of the patterns in the list, EditorConfig will -not load for this file. The default is an empty list. - -Example: Avoid loading EditorConfig for any remote files over ssh -> - let g:EditorConfig_exclude_patterns = ['scp://.*'] -< - - *g:EditorConfig_exec_path* -The file path to the EditorConfig core executable. You can set this value in -your |vimrc| like this: -> - let g:EditorConfig_exec_path = 'Path to your EditorConfig Core executable' -< -The default value is empty. - -If "g:EditorConfig_exec_path" is not set, the plugin will use the "vim_core" -mode regardless of the setting of |g:EditorConfig_core_mode|. - -Changes to "g:EditorConfig_exec_path" will not take effect until Vim -is restarted. - - *g:EditorConfig_max_line_indicator* -The way to show the line where the maximal length is reached. Accepted values -are "line", "fill", otherwise there will be no max line indicator. - - "line": the right column of the max line length column will be - highlighted, made possible by setting 'colorcolumn' to - "max_line_length + 1". - - "fill": all the columns to the right of the max line length column - will be highlighted, made possible by setting 'colorcolumn' - to a list of numbers starting from "max_line_length + 1" to - the number of columns on the screen. - - "exceeding": the right column of the max line length column will be - highlighted on lines that exceed the max line length, made - possible by adding a match for the ColorColumn group. - - "none": no max line length indicator will be shown. This is the - recommended value when you do not want any indicator to be - shown, but values other than "line" or "fill" would also work - as "none". - -To set this option, add any of the following lines to your |vimrc| file: -> - let g:EditorConfig_max_line_indicator = "line" - let g:EditorConfig_max_line_indicator = "fill" - let g:EditorConfig_max_line_indicator = "exceeding" - let g:EditorConfig_max_line_indicator = "none" -< -The default value is "line". - - *g:EditorConfig_preserve_formatoptions* -Set this to 1 if you don't want your formatoptions modified when -max_line_length is set: -> - let g:EditorConfig_preserve_formatoptions = 1 -< -This option defaults to 0. - - *g:EditorConfig_verbose* -Set this to 1 if you want debug info printed: -> - let g:EditorConfig_verbose = 1 -< - -ADVANCED~ - *editorconfig-advanced* ----------------------------------------------------------------------------- - *editorconfig-hook* - *EditorConfig#AddNewHook()* -While this plugin offers several builtin supported properties (as mentioned -here: https://github.com/editorconfig/editorconfig-vim#supported-properties), -we are also able to add our own hooks to support additional EditorConfig -properties, including those not in the EditorConfig standard. For example, we -are working on an Objective-C project, and all our "*.m" files should be -Objective-C source files. However, vim sometimes detect "*.m" files as MATLAB -source files, which causes incorrect syntax highlighting, code indentation, -etc. To solve the case, we could write the following code into the |vimrc| -file: -> - function! FiletypeHook(config) - if has_key(a:config, 'vim_filetype') - let &filetype = a:config['vim_filetype'] - endif - - return 0 " Return 0 to show no error happened - endfunction - - call editorconfig#AddNewHook(function('FiletypeHook')) -< -And add the following code to your .editorconfig file: -> - [*.m] - vim_filetype = objc -< -Then try to open an Objective-C file, you will find the |filetype| is set to -"objc". - -vim:ft=help:tw=78 diff --git a/dotfiles/.vim/plugged/editorconfig-vim/mkzip.sh b/dotfiles/.vim/plugged/editorconfig-vim/mkzip.sh deleted file mode 100755 index 811724ca..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/mkzip.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -zip -r editorconfig-vim-$*.zip plugin/* autoload/* doc/* diff --git a/dotfiles/.vim/plugged/editorconfig-vim/plugin/editorconfig.vim b/dotfiles/.vim/plugged/editorconfig-vim/plugin/editorconfig.vim deleted file mode 100644 index d0deb265..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/plugin/editorconfig.vim +++ /dev/null @@ -1,521 +0,0 @@ -" plugin/editorconfig.vim: EditorConfig native Vimscript plugin file -" Copyright (c) 2011-2019 EditorConfig Team -" All rights reserved. -" -" Redistribution and use in source and binary forms, with or without -" modification, are permitted provided that the following conditions are met: -" -" 1. Redistributions of source code must retain the above copyright notice, -" this list of conditions and the following disclaimer. -" 2. Redistributions in binary form must reproduce the above copyright notice, -" this list of conditions and the following disclaimer in the documentation -" and/or other materials provided with the distribution. -" -" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -" POSSIBILITY OF SUCH DAMAGE. -" - -" check for Vim versions and duplicate script loading. -if v:version < 700 || exists("g:loaded_EditorConfig") - finish -endif -let g:loaded_EditorConfig = 1 - -let s:saved_cpo = &cpo -set cpo&vim - -" variables {{{1 - -" Make sure the globals all exist -if !exists('g:EditorConfig_exec_path') - let g:EditorConfig_exec_path = '' -endif - -if !exists('g:EditorConfig_verbose') - let g:EditorConfig_verbose = 0 -endif - -if !exists('g:EditorConfig_preserve_formatoptions') - let g:EditorConfig_preserve_formatoptions = 0 -endif - -if !exists('g:EditorConfig_max_line_indicator') - let g:EditorConfig_max_line_indicator = 'line' -endif - -if !exists('g:EditorConfig_exclude_patterns') - let g:EditorConfig_exclude_patterns = [] -endif - -if !exists('g:EditorConfig_disable_rules') - let g:EditorConfig_disable_rules = [] -endif - -" Copy some of the globals into script variables --- changes to these -" globals won't affect the plugin until the plugin is reloaded. -if exists('g:EditorConfig_core_mode') && !empty(g:EditorConfig_core_mode) - let s:editorconfig_core_mode = g:EditorConfig_core_mode -else - let s:editorconfig_core_mode = '' -endif - -if exists('g:EditorConfig_exec_path') && !empty(g:EditorConfig_exec_path) - let s:editorconfig_exec_path = g:EditorConfig_exec_path -else - let s:editorconfig_exec_path = '' -endif - -let s:initialized = 0 - -" }}}1 - -" shellslash handling {{{1 -function! s:DisableShellSlash() " {{{2 - " disable shellslash for proper escaping of Windows paths - - " In Windows, 'shellslash' also changes the behavior of 'shellescape'. - " It makes 'shellescape' behave like in UNIX environment. So ':setl - " noshellslash' before evaluating 'shellescape' and restore the - " settings afterwards when 'shell' does not contain 'sh' somewhere. - if has('win32') && empty(matchstr(&shell, 'sh')) - let s:old_shellslash = &l:shellslash - setlocal noshellslash - endif -endfunction " }}}2 - -function! s:ResetShellSlash() " {{{2 - " reset shellslash to the user-set value, if any - if exists('s:old_shellslash') - let &l:shellslash = s:old_shellslash - unlet! s:old_shellslash - endif -endfunction " }}}2 -" }}}1 - -" Mode initialization functions {{{1 - -function! s:InitializeVimCore() -" Initialize vim core. Returns 1 on failure; 0 on success -" At the moment, all we need to do is to check that it is installed. - try - let l:vim_core_ver = editorconfig_core#version() - catch - return 1 - endtry - return 0 -endfunction - -function! s:InitializeExternalCommand() -" Initialize external_command mode - - if empty(s:editorconfig_exec_path) - echo 'Please specify a g:EditorConfig_exec_path' - return 1 - endif - - if g:EditorConfig_verbose - echo 'Checking for external command ' . s:editorconfig_exec_path . ' ...' - endif - - if !executable(s:editorconfig_exec_path) - echo 'File ' . s:editorconfig_exec_path . ' is not executable.' - return 1 - endif - - return 0 -endfunction -" }}}1 - -function! s:Initialize() " Initialize the plugin. {{{1 - " Returns truthy on error, falsy on success. - - if empty(s:editorconfig_core_mode) - let s:editorconfig_core_mode = 'vim_core' " Default core choice - endif - - if s:editorconfig_core_mode ==? 'external_command' - if s:InitializeExternalCommand() - echohl WarningMsg - echo 'EditorConfig: Failed to initialize external_command mode. ' . - \ 'Falling back to vim_core mode.' - echohl None - let s:editorconfig_core_mode = 'vim_core' - endif - endif - - if s:editorconfig_core_mode ==? 'vim_core' - if s:InitializeVimCore() - echohl ErrorMsg - echo 'EditorConfig: Failed to initialize vim_core mode. ' . - \ 'The plugin will not function.' - echohl None - return 1 - endif - - elseif s:editorconfig_core_mode ==? 'external_command' - " Nothing to do here, but this elseif is required to avoid - " external_command falling into the else clause. - - else " neither external_command nor vim_core - echohl ErrorMsg - echo "EditorConfig: I don't know how to use mode " . s:editorconfig_core_mode - echohl None - return 1 - endif - - let s:initialized = 1 - return 0 -endfunction " }}}1 - -function! s:GetFilenames(path, filename) " {{{1 -" Yield full filepath for filename in each directory in and above path - - let l:path_list = [] - let l:path = a:path - while 1 - let l:path_list += [l:path . '/' . a:filename] - let l:newpath = fnamemodify(l:path, ':h') - if l:path == l:newpath - break - endif - let l:path = l:newpath - endwhile - return l:path_list -endfunction " }}}1 - -function! s:UseConfigFiles() abort " Apply config to the current buffer {{{1 - let b:editorconfig_tried = 1 - let l:buffer_name = expand('%:p') - " ignore buffers without a name - if empty(l:buffer_name) - return - endif - - if exists("b:EditorConfig_disable") && b:EditorConfig_disable - if g:EditorConfig_verbose - echo 'Skipping EditorConfig for buffer "' . l:buffer_name . '"' - endif - return - endif - - " Check if any .editorconfig does exist - let l:conf_files = s:GetFilenames(expand('%:p:h'), '.editorconfig') - let l:conf_found = 0 - for conf_file in conf_files - if filereadable(conf_file) - let l:conf_found = 1 - break - endif - endfor - if !l:conf_found - return - endif - - if !s:initialized - if s:Initialize() - return - endif - endif - - if g:EditorConfig_verbose - echo 'Applying EditorConfig ' . s:editorconfig_core_mode . - \ ' on file "' . l:buffer_name . '"' - endif - - " Ignore specific patterns - for pattern in g:EditorConfig_exclude_patterns - if l:buffer_name =~ pattern - return - endif - endfor - - if s:editorconfig_core_mode ==? 'vim_core' - if s:UseConfigFiles_VimCore() == 0 - let b:editorconfig_applied = 1 - endif - elseif s:editorconfig_core_mode ==? 'external_command' - call s:UseConfigFiles_ExternalCommand() - let b:editorconfig_applied = 1 - else - echohl Error | - \ echo "Unknown EditorConfig Core: " . - \ s:editorconfig_core_mode | - \ echohl None - endif -endfunction " }}}1 - -" Custom commands, and autoloading {{{1 - -" Autocommands, and function to enable/disable the plugin {{{2 -function! s:EditorConfigEnable(should_enable) - augroup editorconfig - autocmd! - if a:should_enable - autocmd BufNewFile,BufReadPost,BufFilePost * call s:UseConfigFiles() - endif - augroup END -endfunction - -" }}}2 - -" Commands {{{2 -command! EditorConfigEnable call s:EditorConfigEnable(1) -command! EditorConfigDisable call s:EditorConfigEnable(0) - -command! EditorConfigReload call s:UseConfigFiles() " Reload EditorConfig files -" }}}2 - -" On startup, enable the autocommands -call s:EditorConfigEnable(1) - -" Always set the filetype for .editorconfig files -augroup editorconfig_dosini - autocmd! - autocmd BufNewFile,BufRead .editorconfig set filetype=dosini -augroup END - -" }}}1 - -" UseConfigFiles function for different modes {{{1 - -function! s:UseConfigFiles_VimCore() -" Use the vimscript EditorConfig core - try - let l:config = editorconfig_core#handler#get_configurations( - \ { 'target': expand('%:p') } ) - call s:ApplyConfig(l:config) - return 0 " success - catch - return 1 " failure - endtry -endfunction - -function! s:UseConfigFiles_ExternalCommand() -" Use external EditorConfig core (e.g., the C core) - - call s:DisableShellSlash() - let l:exec_path = shellescape(s:editorconfig_exec_path) - call s:ResetShellSlash() - - call s:SpawnExternalParser(l:exec_path) -endfunction - -function! s:SpawnExternalParser(cmd) " {{{2 -" Spawn external EditorConfig. Used by s:UseConfigFiles_ExternalCommand() - - let l:cmd = a:cmd - - if empty(l:cmd) - throw 'No cmd provided' - endif - - let l:config = {} - - call s:DisableShellSlash() - let l:cmd = l:cmd . ' ' . shellescape(expand('%:p')) - call s:ResetShellSlash() - - let l:parsing_result = split(system(l:cmd), '\v[\r\n]+') - - " if editorconfig core's exit code is not zero, give out an error - " message - if v:shell_error != 0 - echohl ErrorMsg - echo 'Failed to execute "' . l:cmd . '". Exit code: ' . - \ v:shell_error - echo '' - echo 'Message:' - echo l:parsing_result - echohl None - return - endif - - if g:EditorConfig_verbose - echo 'Output from EditorConfig core executable:' - echo l:parsing_result - endif - - for one_line in l:parsing_result - let l:eq_pos = stridx(one_line, '=') - - if l:eq_pos == -1 " = is not found. Skip this line - continue - endif - - let l:eq_left = strpart(one_line, 0, l:eq_pos) - if l:eq_pos + 1 < strlen(one_line) - let l:eq_right = strpart(one_line, l:eq_pos + 1) - else - let l:eq_right = '' - endif - - let l:config[l:eq_left] = l:eq_right - endfor - - call s:ApplyConfig(l:config) -endfunction " }}}2 - -" }}}1 - -function! s:ApplyConfig(config) abort " Set the buffer options {{{1 - " Only process normal buffers (do not treat help files as '.txt' files) - if index(['', 'acwrite'], &buftype) == -1 - return - endif - - if g:EditorConfig_verbose - echo 'Options: ' . string(a:config) - endif - - if s:IsRuleActive('indent_style', a:config) - if a:config["indent_style"] == "tab" - setl noexpandtab - elseif a:config["indent_style"] == "space" - setl expandtab - endif - endif - - if s:IsRuleActive('tab_width', a:config) - let &l:tabstop = str2nr(a:config["tab_width"]) - endif - - if s:IsRuleActive('indent_size', a:config) - " if indent_size is 'tab', set shiftwidth to tabstop; - " if indent_size is a positive integer, set shiftwidth to the integer - " value - if a:config["indent_size"] == "tab" - let &l:shiftwidth = &l:tabstop - let &l:softtabstop = &l:shiftwidth - else - let l:indent_size = str2nr(a:config["indent_size"]) - if l:indent_size > 0 - let &l:shiftwidth = l:indent_size - let &l:softtabstop = &l:shiftwidth - endif - endif - - endif - - if s:IsRuleActive('end_of_line', a:config) && - \ &l:modifiable - if a:config["end_of_line"] == "lf" - setl fileformat=unix - elseif a:config["end_of_line"] == "crlf" - setl fileformat=dos - elseif a:config["end_of_line"] == "cr" - setl fileformat=mac - endif - endif - - if s:IsRuleActive('charset', a:config) && - \ &l:modifiable - if a:config["charset"] == "utf-8" - setl fileencoding=utf-8 - setl nobomb - elseif a:config["charset"] == "utf-8-bom" - setl fileencoding=utf-8 - setl bomb - elseif a:config["charset"] == "latin1" - setl fileencoding=latin1 - setl nobomb - elseif a:config["charset"] == "utf-16be" - setl fileencoding=utf-16be - setl bomb - elseif a:config["charset"] == "utf-16le" - setl fileencoding=utf-16le - setl bomb - endif - endif - - augroup editorconfig_trim_trailing_whitespace - autocmd! BufWritePre - if s:IsRuleActive('trim_trailing_whitespace', a:config) && - \ get(a:config, 'trim_trailing_whitespace', 'false') ==# 'true' - autocmd BufWritePre call s:TrimTrailingWhitespace() - endif - augroup END - - if s:IsRuleActive('insert_final_newline', a:config) - if exists('+fixendofline') - if a:config["insert_final_newline"] == "false" - setl nofixendofline - else - setl fixendofline - endif - elseif exists(':SetNoEOL') == 2 - if a:config["insert_final_newline"] == "false" - silent! SetNoEOL " Use the PreserveNoEOL plugin to accomplish it - endif - endif - endif - - " highlight the columns following max_line_length - if s:IsRuleActive('max_line_length', a:config) && - \ a:config['max_line_length'] != 'off' - let l:max_line_length = str2nr(a:config['max_line_length']) - - if l:max_line_length >= 0 - let &l:textwidth = l:max_line_length - if g:EditorConfig_preserve_formatoptions == 0 - setlocal formatoptions+=tc - endif - endif - - if exists('+colorcolumn') - if l:max_line_length > 0 - if g:EditorConfig_max_line_indicator == 'line' - let &l:colorcolumn = l:max_line_length + 1 - elseif g:EditorConfig_max_line_indicator == 'fill' && - \ l:max_line_length < &l:columns - " Fill only if the columns of screen is large enough - let &l:colorcolumn = join( - \ range(l:max_line_length+1,&l:columns),',') - elseif g:EditorConfig_max_line_indicator == 'exceeding' - let &l:colorcolumn = '' - for l:match in getmatches() - if get(l:match, 'group', '') == 'ColorColumn' - call matchdelete(get(l:match, 'id')) - endif - endfor - call matchadd('ColorColumn', - \ '\%' . (l:max_line_length + 1) . 'v.', 100) - endif - endif - endif - endif - - call editorconfig#ApplyHooks(a:config) -endfunction - -" }}}1 - -function! s:TrimTrailingWhitespace() " {{{1 - if &l:modifiable - " don't lose user position when trimming trailing whitespace - let s:view = winsaveview() - try - silent! keeppatterns keepjumps %s/\s\+$//e - finally - call winrestview(s:view) - endtry - endif -endfunction " }}}1 - -function! s:IsRuleActive(name, config) " {{{1 - return index(g:EditorConfig_disable_rules, a:name) < 0 && - \ has_key(a:config, a:name) -endfunction "}}}1 - -let &cpo = s:saved_cpo -unlet! s:saved_cpo - -" vim: fdm=marker fdc=3 diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/CMakeLists.txt b/dotfiles/.vim/plugged/editorconfig-vim/tests/core/CMakeLists.txt deleted file mode 100644 index 2c124403..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/CMakeLists.txt +++ /dev/null @@ -1,53 +0,0 @@ -# CMakeLists.txt for core testing in -# editorconfig-core-vimscript and editorconfig-vim. - -# Copyright (c) 2011-2019 EditorConfig Team -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# To perform the test, from the root of the project tree, run -# mkdir build -# cd build -# cmake .. -# ctest . - -cmake_minimum_required(VERSION 3.5) -#set(CMAKE_LEGACY_CYGWIN_WIN32 0) - -# Do not check any compiler -project(editorconfig-core-vimscript NONE) - -enable_testing() - -# The test executable to use -if(NOT WIN32) - set(EDITORCONFIG_CMD "${CMAKE_SOURCE_DIR}/editorconfig") -else() - set(EDITORCONFIG_CMD "${CMAKE_SOURCE_DIR}/editorconfig.bat") -endif() -set(EDITORCONFIG_CMD_IS_TARGET FALSE) - -add_subdirectory(tests) - -# CTestCustom.cmake contains platform-specific test configuration. -configure_file(CTestCustom.cmake ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/CTestCustom.cmake b/dotfiles/.vim/plugged/editorconfig-vim/tests/core/CTestCustom.cmake deleted file mode 100644 index 5452f751..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/CTestCustom.cmake +++ /dev/null @@ -1,34 +0,0 @@ -# CTestCustom.cmake: Skip UTF-8 tests -# Part of editorconfig-vim - -# Copyright (c) 2011-2019 EditorConfig Team -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimer in the documentation -# and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Skip UTF8 tests on Windows for now per -# https://github.com/editorconfig/editorconfig-core-c/pull/31#issue-154810185 -if(WIN32 AND (NOT "$ENV{RUN_UTF8}")) - message(WARNING "Skipping UTF-8 tests on this platform") - set(CTEST_CUSTOM_TESTS_IGNORE ${CTEST_CUSTOM_TESTS_IGNORE} g_utf_8_char) - set(CTEST_CUSTOM_TESTS_IGNORE ${CTEST_CUSTOM_TESTS_IGNORE} utf_8_char) -endif() diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvbslib.vbs b/dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvbslib.vbs deleted file mode 100755 index a1e05d24..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvbslib.vbs +++ /dev/null @@ -1,171 +0,0 @@ -' ecvbslib.vbs: VBScript routines for use in -' editorconfig-core-vimscript and editorconfig-vim. -' Copyright (c) 2018--2019 Chris White. All rights reserved. -' Licensed CC-BY-SA, version 3.0 or any later version, at your option. - -' Remove CR and LF in a string -function nocrlf(strin) - nocrlf = Replace(Replace(strin, vbCr, ""), vbLf, "") -end function - -' === Base64 ================================================================ -' from https://stackoverflow.com/a/40118072/2877364 by -' https://stackoverflow.com/users/45375/mklement0 - -' Base64-encodes the specified string. -' Parameter fAsUtf16LE determines how the input text is encoded at the -' byte level before Base64 encoding is applied. -' * Pass False to use UTF-8 encoding. -' * Pass True to use UTF-16 LE encoding. -Function Base64Encode(ByVal sText, ByVal fAsUtf16LE) - - ' Use an aux. XML document with a Base64-encoded element. - ' Assigning the byte stream (array) returned by StrToBytes() to .NodeTypedValue - ' automatically performs Base64-encoding, whose result can then be accessed - ' as the element's text. - With CreateObject("Msxml2.DOMDocument").CreateElement("aux") - .DataType = "bin.base64" - if fAsUtf16LE then - .NodeTypedValue = StrToBytes(sText, "utf-16le", 2) - else - .NodeTypedValue = StrToBytes(sText, "utf-8", 3) - end if - Base64Encode = nocrlf(.Text) ' No line breaks; MSXML adds them. - End With - -End Function - -' Decodes the specified Base64-encoded string. -' If the decoded string's original encoding was: -' * UTF-8, pass False for fIsUtf16LE. -' * UTF-16 LE, pass True for fIsUtf16LE. -Function Base64Decode(ByVal sBase64EncodedText, ByVal fIsUtf16LE) - - Dim sTextEncoding - if fIsUtf16LE Then sTextEncoding = "utf-16le" Else sTextEncoding = "utf-8" - - ' Use an aux. XML document with a Base64-encoded element. - ' Assigning the encoded text to .Text makes the decoded byte array - ' available via .nodeTypedValue, which we can pass to BytesToStr() - With CreateObject("Msxml2.DOMDocument").CreateElement("aux") - .DataType = "bin.base64" - .Text = sBase64EncodedText - Base64Decode = BytesToStr(.NodeTypedValue, sTextEncoding) - End With - -End Function - -' Returns a binary representation (byte array) of the specified string in -' the specified text encoding, such as "utf-8" or "utf-16le". -' Pass the number of bytes that the encoding's BOM uses as iBomByteCount; -' pass 0 to include the BOM in the output. -function StrToBytes(ByVal sText, ByVal sTextEncoding, ByVal iBomByteCount) - - ' Create a text string with the specified encoding and then - ' get its binary (byte array) representation. - With CreateObject("ADODB.Stream") - ' Create a stream with the specified text encoding... - .Type = 2 ' adTypeText - .Charset = sTextEncoding - .Open - .WriteText sText - ' ... and convert it to a binary stream to get a byte-array - ' representation. - .Position = 0 - .Type = 1 ' adTypeBinary - .Position = iBomByteCount ' skip the BOM - StrToBytes = .Read - .Close - End With - -end function - -' Returns a string that corresponds to the specified byte array, interpreted -' with the specified text encoding, such as "utf-8" or "utf-16le". -function BytesToStr(ByVal byteArray, ByVal sTextEncoding) - - If LCase(sTextEncoding) = "utf-16le" then - ' UTF-16 LE happens to be VBScript's internal encoding, so we can - ' take a shortcut and use CStr() to directly convert the byte array - ' to a string. - BytesToStr = CStr(byteArray) - Else ' Convert the specified text encoding to a VBScript string. - ' Create a binary stream and copy the input byte array to it. - With CreateObject("ADODB.Stream") - .Type = 1 ' adTypeBinary - .Open - .Write byteArray - ' Now change the type to text, set the encoding, and output the - ' result as text. - .Position = 0 - .Type = 2 ' adTypeText - .CharSet = sTextEncoding - BytesToStr = .ReadText - .Close - End With - End If - -end function - -' === Runner ================================================================ - -' Run a command, copy its stdout/stderr to ours, and return its exit -' status. -' Modified from https://stackoverflow.com/a/32493083/2877364 by -' https://stackoverflow.com/users/3191599/nate-barbettini . -' See also https://www.vbsedit.com/html/4c5b06ac-dc45-4ec2-aca1-f168bab75483.asp -function RunCommandAndEcho(strCommand) - Const WshRunning = 0 - Const WshFinished = 1 - Const WshFailed = 2 - - Set WshShell = CreateObject("WScript.Shell") - 'WScript.Echo "Running >>" & strCommand & "<<..." - Set WshShellExec = WshShell.Exec(strCommand) - - Do While WshShellExec.Status = WshRunning - 'WScript.Echo "Waiting..." - WScript.Sleep 100 - Loop - - if not WshShellExec.StdOut.AtEndOfStream then - WScript.StdOut.Write(WshShellExec.StdOut.ReadAll()) - end if - - if not WshShellExec.StdErr.AtEndOfStream then - WScript.StdErr.Write(WshShellExec.StdErr.ReadAll()) - end if - - RunCommandAndEcho = WshShellExec.ExitCode -end function - -' === Argument processing =================================================== - -function MakeY64Args(args) - - dim b64args(100) ' 100 = arbitrary max - - ' Make Y64-flavored base64 versions of each arg so we don't have to - ' worry about quoting issues while executing PowerShell. - - idx=0 - For Each arg In args - b64args(idx) = Base64Encode(nocrlf(arg), False) - ' Y64 flavor of Base64 - b64args(idx) = replace( _ - replace( _ - replace(b64args(idx), "+", "."), _ - "/", "_" ), _ - "=", "-") - 'Wscript.Echo cstr(idx) & ": >" & arg & "< = >" & b64args(idx) & "<" - 'Wscript.Echo b64args(idx) - idx = idx+1 - Next - - MakeY64Args = b64args -end function - -Function QuoteForShell(strIn) - QuoteForShell = """" & _ - replace(strIn, """", """""") & """" -End Function diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvimlib.ps1 b/dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvimlib.ps1 deleted file mode 100755 index 45387d5a..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/ecvimlib.ps1 +++ /dev/null @@ -1,140 +0,0 @@ -# ecvimlib.ps1: Editorconfig Vimscript core CLI, PowerShell version, -# library routines. -# Copyright (c) 2018--2019 Chris White. All rights reserved. -# Licensed CC-BY-SA, version 3.0 or any later version, at your option. -# -# N.B.: debug output uses Warning only because those are displayed by default. - -#Requires -Version 3 - -# Get the directory of this script. From -# https://stackoverflow.com/a/5466355/2877364 by -# https://stackoverflow.com/users/23283/jaredpar - -$global:DIR = $PSScriptRoot - -### Set up debugging output ============================================ - -$global:debug=$env:EDITORCONFIG_DEBUG # Debug filename - -if($global:debug -and ($global:debug -notmatch '^/')) { - # Relative to this script unless it starts with a slash. This is because - # cwd is usually not $DIR when testing. - $global:debug="${DIR}/${global:debug}" -} - -### Process args ======================================================= - -function de64_args($argv) { - $argv | % { - $b64 = $_ -replace '-','=' -replace '_','/' -replace '\.','+' - [System.Text.Encoding]::UTF8.GetString([System.Convert]::FromBase64String($b64)) - } -} - -### Helpers ============================================================ - -# Append a string to $debug in UTF-8 rather than the default UTF-16 -filter global:D($file = $debug) { - if($debug) { - echo $_ | Out-File -FilePath $file -Encoding utf8 -Append - } -} - -# Escape a string for Vim -function global:vesc($str) { - return "'" + ($str -replace "'","''") + "'" -} - -# Escape a string for a command-line argument. -# See https://docs.microsoft.com/en-us/dotnet/api/system.diagnostics.processstartinfo.arguments?view=netframework-4.7.2 -function global:argesc($arg) { - return '"' + ($arg -replace '"','"""') + '"' -} - -### Find the Vim EXE =================================================== - -function global:Find-Vim -{ - if($env:VIM_EXE) { - if($debug) { echo "Using env Vim $($env:VIM_EXE)" | D } - return $env:VIM_EXE - } - - $vims = @(get-childitem 'c:\program files*\vim\**\vim.exe' | ` - sort LastWriteTime -Descending) # @() => always array - - # write-host ($vims | format-table | out-string) # DEBUG - # write-host ($vims | get-member | out-string) - if($vims.count -gt 0) { - if($debug) { echo "Using found Vim $($vims[0].FullName)" | D } - return $vims[0].FullName - } - - throw "Could not find vim.exe. Please set VIM_EXE to the path to your Vim." -} #Find-Vim - -### Runner ============================================================= - -# Run a process with the given arguments. -function global:run_process -{ - param( - [Parameter(Mandatory=$true, Position=0)][string]$run, - [string]$extrapath, - [string]$stdout, # Redirect stdout to this file - [string]$stderr, # Redirect stderr to this file - [string[]]$argv # Arguments to $run - ) - $si = new-object Diagnostics.ProcessStartInfo - if($extrapath) { - $si.EnvironmentVariables['path']+=";${extrapath}" - } - $si.FileName=$run - - # Stringify the arguments (blech) - $argstr = $argv | % { (argesc $_) + ' ' } - $si.Arguments = $argstr; - - if($debug) { echo "Running process $run with arguments >>$argstr<<" | D } - - $si.UseShellExecute=$false - # DEBUG $si.RedirectStandardInput=$true - if($stdout) { - if($debug) { echo "Saving stdout to ${stdout}" | D } - $si.RedirectStandardOutput=$true; - } - if($stderr) { - if($debug) { echo "Saving stderr to ${stderr}" | D } - $si.RedirectStandardError=$true; - } - - $p = [Diagnostics.Process]::Start($si) - # DEBUG $p.StandardInput.Close() # < /dev/null - - $p.WaitForExit() - $retval = $p.ExitCode - - if($stdout) { - echo "Standard output:" | D $stdout - $p.StandardOutput.ReadToEnd() | ` - Out-File -FilePath $stdout -Encoding utf8 -Append - } - - if($stderr) { - echo "Standard error:" | D $stderr - $p.StandardError.ReadToEnd() | ` - Out-File -FilePath $stderr -Encoding utf8 -Append - } - - $p.Close() - - return $retval -} - -if($debug) { - echo "======================================================" | D - Get-Date -format F | D -} - -$global:VIM = Find-Vim diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig b/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig deleted file mode 100755 index bdb5971d..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig +++ /dev/null @@ -1,219 +0,0 @@ -#!/bin/bash -# editorconfig: Editorconfig Vimscript core CLI -# Copyright (c) 2018--2019 Chris White. All rights reserved. -# Licensed CC-BY-SA, version 3.0 or any later version, at your option. - -# Documentation {{{1 -helpstr=$(cat<<'EOF' -editorconfig: command-line invoker for the Vimscript editorconfig core - -Normal usage: - editorconfig [-f ] [-b ] - [-x ] - -The default is ".editorconfig". -If -b is given, behave as . -If -x is given, the is included in the debug-output file. - -Other options: - editorconfig -h, --help Show this help - editorconfig -v, --version Show version information - -Environment variables: - VIM_EXE File/path of vim (default "vim") - EDITORCONFIG_DEBUG File/path to which to append debug output - -EOF -) - -# }}}1 - -# Get the directory of this script into $this_script_dir. {{{1 -# From https://stackoverflow.com/a/246128/2877364 by -# https://stackoverflow.com/users/407731 et al. - -this_script_dir= -function get_dir() -{ - local script_source_path="${BASH_SOURCE[0]}" - while [ -h "$script_source_path" ]; do - # resolve $script_source_path until the file is no longer a symlink - this_script_dir="$( cd -P "$( dirname "$script_source_path" )" >/dev/null && pwd )" - script_source_path="$(readlink "$script_source_path")" - [[ $script_source_path != /* ]] && script_source_path="$this_script_dir/$script_source_path" - # if $script_source_path was a relative symlink, we need to resolve - # it relative to the path where the symlink file was located - done - this_script_dir="$( cd -P "$( dirname "$script_source_path" )" >/dev/null && pwd )" -} #get_dir() - -get_dir - -# }}}1 - -# Setup debug output, if $EDITORCONFIG_DEBUG is given {{{1 -debug="${EDITORCONFIG_DEBUG}" # Debug filename -if [[ $debug && $debug != /* ]]; then # Relative to this script unless it - debug="${this_script_dir}/${debug}" # starts with a slash. This is because -fi # cwd is usually not $this_script_dir when testing. -if [[ $debug ]] && ! touch "$debug"; then - echo "Could not write file '$debug' - aborting" 1>&2 - exit 1 -fi - -[[ $debug ]] && echo "$(date) ==================================" >> "$debug" - -# }}}1 - -# Option processing {{{1 - -# Use a manually-specified Vim, if any -if [[ $VIM_EXE ]]; then - vim_pgm="$VIM_EXE" -else - vim_pgm="vim" -fi - -# Command-line options -confname= -ver= -print_ver= -extra_info= - -while getopts 'hvf:b:-:x:' opt ; do - case "$opt" in - (v) print_ver=1 - ;; - - (f) confname="$OPTARG" - ;; - - (b) ver="$OPTARG" - ;; - - (-) case "$OPTARG" in # hacky long-option processing - version) print_ver=1 - ;; - dummy) # A dummy option so that I can test - # list-valued EDITORCONFIG_CMD - ;; - help) echo "$helpstr" - exit 0 - ;; - esac - ;; - - (h) echo "$helpstr" - exit 0 - ;; - - # A way to put the test name into the log - (x) extra_info="$OPTARG" - ;; - - esac -done - -shift $(( $OPTIND - 1 )) - -if [[ $print_ver ]]; then - echo "EditorConfig VimScript Core Version 0.12.2" - exit 0 -fi - -if (( "$#" < 1 )); then - exit 1 -fi - -if [[ $1 = '-' ]]; then - echo "Reading filenames from stdin not yet supported" 1>&2 # TODO - exit 1 -fi - -# }}}1 - -# Build the Vim command line {{{1 - -fn="$(mktemp)" # Vim will write the settings into here. ~stdout. -script_output_fn="${debug:+$(mktemp)}" # Vim's :messages. ~stderr. - -cmd="call editorconfig_core#currbuf_cli({" - -# Names -cmd+="'output':'${fn//\'/\'\'}', " - # filename to put the settings in -[[ $debug ]] && cmd+=" 'dump':'${script_output_fn//\'/\'\'}', " - # where to put debug info - -# Filenames to get the settings for -cmd+="'target':[" -for f in "$@" ; do - cmd+="'${f//\'/\'\'}', " -done -cmd+="]," - # filename to get the settings for - -# Job -cmd+="}, {" -[[ $confname ]] && cmd+="'config':'${confname//\'/\'\'}', " - # config name (e.g., .editorconfig) -[[ $ver ]] && cmd+="'version':'${ver//\'/\'\'}', " - # version number we should behave as -cmd+="})" - -vim_args=( - -c "set runtimepath+=$this_script_dir/../.." - -c "$cmd" -) - -# }}}1 - -# Run the editorconfig core through Vim {{{1 -# Thanks for options to -# http://vim.wikia.com/wiki/Vim_as_a_system_interpreter_for_vimscript . -# Add -V1 to the below for debugging output. -# Do not output anything to stdout or stderr, -# since it messes up ctest's interpretation -# of the results. - -"$vim_pgm" -nNes -i NONE -u NONE -U NONE \ - "${vim_args[@]}" \ - > "${debug:-/dev/null}" -vimstatus="$?" -if [[ $vimstatus -eq 0 ]]; then - cat "$fn" -fi - -# }}}1 - -# Produce debug output {{{1 -# Debug output cannot be included on stdout or stderr, because -# ctest's regex check looks both of those places. Therefore, dump to a -# separate debugging file. -if [[ $debug ]] -then - [[ $extra_info ]] && echo "--- $extra_info ---" >> "$debug" - echo "Vim in $vim_pgm" >> "$debug" - echo "Current directory: $(pwd)" >> "$debug" - echo "Script directory: $this_script_dir" >> "$debug" - echo Vim args: "${vim_args[@]}" >> "$debug" - #od -c <<<"${vim_args[@]}" >> "$debug" - echo "Vim returned $vimstatus" >> "$debug" - echo "Vim messages were: " >> "$debug" - cat "$script_output_fn" >> "$debug" - echo "Output was:" >> "$debug" - od -c "$fn" >> "$debug" - - rm -f "$script_output_fn" -fi - -# }}}1 - -# Cleanup {{{1 - -rm -f "$fn" - -# }}}1 - -exit "$vimstatus" # forward the Vim exit status to the caller -# vi: set ft=sh fdm=marker: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig.bat b/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig.bat deleted file mode 100755 index 77b54470..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig.bat +++ /dev/null @@ -1,11 +0,0 @@ -@echo off -:: editorconfig.bat: First-level invoker for editorconfig-core-vimscript -:: and editorconfig-vim. -:: Just passes the full command line to editorconfig1.vbs, since VBScript -:: applies very simple quoting rules when it parses a command line. -:: Copyright (c) 2018--2019 Chris White. All rights reserved. -:: Licensed CC-BY-SA, version 3.0 or any later version, at your option. -set here=%~dp0 - -cscript //Nologo "%here%editorconfig1.vbs" %* -:: %* has the whole command line diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig1.vbs b/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig1.vbs deleted file mode 100755 index 488411fc..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig1.vbs +++ /dev/null @@ -1,39 +0,0 @@ -' editorconfig1.vbs: run by editorconfig.bat -' runs editorconfig2.ps1 -' Part of editorconfig-core-vimscript and editorconfig-vim. -' -' Copyright (c) 2018--2019 Chris White. All rights reserved. -' Licensed CC-BY-SA, version 3.0 or any later version, at your option. -' -' Modified from -' https://stackoverflow.com/a/2470557/2877364 by -' https://stackoverflow.com/users/2441/aphoria - -' Thanks to https://www.geekshangout.com/vbs-script-to-get-the-location-of-the-current-script/ -currentScriptPath = Replace(WScript.ScriptFullName, WScript.ScriptName, "") - -' Load our common library. Thanks to https://stackoverflow.com/a/316169/2877364 -With CreateObject("Scripting.FileSystemObject") - executeGlobal .openTextFile(currentScriptPath & "ecvbslib.vbs").readAll() -End With - -' === MAIN ================================================================== - -' Encode all the arguments as modified base64 so there will be no quoting -' issues when we invoke powershell. -b64args = MakeY64Args(Wscript.Arguments) - -' Quote script name just in case -ps1name = QuoteForShell(currentScriptPath & "editorconfig2.ps1") -'Wscript.Echo "Script is in " & ps1name - -if True then - retval = RunCommandAndEcho( "powershell.exe" & _ - " -executionpolicy bypass -file " & ps1name & " " & join(b64args) _ - ) - ' add -noexit to leave window open so you can see error messages - - WScript.Quit retval -end if - -' vi: set ts=4 sts=4 sw=4 et ai: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig2.ps1 b/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig2.ps1 deleted file mode 100755 index 0bc3602a..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/core/editorconfig2.ps1 +++ /dev/null @@ -1,218 +0,0 @@ -# editorconfig2.ps1: Editorconfig Vimscript core CLI, PowerShell version -# Copyright (c) 2018--2019 Chris White. All rights reserved. -# Licensed CC-BY-SA, version 3.0 or any later version, at your option. -# Thanks to https://cecs.wright.edu/~pmateti/Courses/233/Labs/Scripting/bashVsPowerShellTable.html -# by Gallagher and Mateti. - -#Requires -Version 3 - -. "$PSScriptRoot\ecvimlib.ps1" - -# Argument parsing =================================================== {{{1 - -$argv = @(de64_args($args)) - -# Defaults -$report_version = $false -$set_version = '' -$config_name = '.editorconfig' -$extra_info = '' -$files=@() - -# Hand-parse - pretend we're sort of like getopt. -$idx = 0 -while($idx -lt $argv.count) { - $a = $argv[$idx] - - switch -CaseSensitive -Regex ($a) { - '^(-v|--version)$' { $report_version = $true } - - '^--dummy$' { - # A dummy option so that I can test list-valued EDITORCONFIG_CMD - } - - '^-f$' { - if($idx -eq ($argv.count-1)) { - throw '-f : no filename provided' - } else { - ++$idx - $config_name = $argv[$idx] - } - } #-f - - '^-b$' { - if($idx -eq ($argv.count-1)) { - throw '-b : no version provided' - } else { - ++$idx - $set_version = $argv[$idx] - } - } #-b - - '^-x$' { - if($idx -eq ($argv.count-1)) { - throw '-x : no info provided' - } else { - ++$idx - $extra_info = $argv[$idx] - } - } #-x - - '^--$' { # End of options, so capture the rest as filenames - ++$idx; - while($idx -lt $argv.count) { - $files += $argv[$idx] - } - } - - default { $files += $a } - } - - ++$idx -} # end foreach argument - -# }}}1 -# Argument processing ================================================ {{{1 - -if($debug) { - if($extra_info -ne '') { - echo "--- $extra_info --- " | D - } - - echo "Running in $DIR" | D - echo "Vim executable: $VIM" | D - echo "report version? $report_version" | D - echo "set version to: $set_version" | D - echo "config filename: $config_name" | D - echo "Filenames: $files" | D - echo "Args: $args" | D - echo "Decoded args: $argv" | D -} - -if($report_version) { - echo "EditorConfig VimScript Core Version 0.12.2" - exit -} - -if($files.count -lt 1) { - exit -} - -if($files[0] -eq '-') { - echo "Reading filenames from stdin not yet supported" # TODO - exit 1 -} - -$fn=[System.IO.Path]::GetTempFileName(); - # Vim will write the settings into here. Sort of like stdout. -$script_output_fn = '' -if($debug) { - $script_output_fn = [System.IO.Path]::GetTempFileName() -} - -# Permit throwing in setup commands -$cmd = '' -if($env:EDITORCONFIG_EXTRA) { - $cmd += $env:EDITORCONFIG_EXTRA + ' | ' -} - -# }}}1 -# Build Vim command line ============================================= {{{1 -$cmd += 'call editorconfig_core#currbuf_cli({' - -# Names -$cmd += "'output':" + (vesc($fn)) + ", " - # filename to put the settings in -if($debug) { - $cmd += " 'dump':" + (vesc($script_output_fn)) + ", " - # where to put debug info -} - -# Filenames to get the settings for -$cmd += "'target':[" -ForEach ($item in $files) { - $cmd += (vesc($item)) + ", " -} -$cmd += "]," - -# Job -$cmd += "}, {" -if($config_name) { $cmd += "'config':" + (vesc($config_name)) + ", " } - # config name (e.g., .editorconfig) -if($set_version) { $cmd += "'version':" + (vesc($set_version)) + ", " } - # version number we should behave as -$cmd += "})" - -#$cmd =':q!' # DEBUG -if($debug) { echo "Using Vim command ${cmd}" | D } -$vim_args = @( - '-c', "set runtimepath+=${DIR}\..\..", - '-c', $cmd, - '-c', 'quit!' # TODO write a wrapper that will cquit on exception -) - -# Run editorconfig. Thanks for options to -# http://vim.wikia.com/wiki/Vim_as_a_system_interpreter_for_vimscript . -# Add -V1 to the below for debugging output. -# Do not output anything to stdout or stderr, -# since it messes up ctest's interpretation -# of the results. - -$basic_args = '-nNes','-i','NONE','-u','NONE','-U','NONE' #, '-V1' - -# }}}1 -# Run Vim ============================================================ {{{1 - -if($debug) { echo "Running vim ${VIM}" | D } -$vimstatus = run_process $VIM -stdout $debug -stderr $debug ` - -argv ($basic_args+$vim_args) -if($debug) { echo "Done running vim" | D } - -if($vimstatus -eq 0) { - cat $fn -} - -# }}}1 -# Produce debug output =============================================== {{{1 - -# Debug output cannot be included on stdout or stderr, because -# ctest's regex check looks both of those places. Therefore, dump to a -# separate debugging file. - -if($debug) { - echo "Current directory:" | D - (get-item -path '.').FullName | D - echo "Script directory: $DIR" | D -### echo Vim args: "${vim_args[@]}" >> "$debug" -### #od -c <<<"${vim_args[@]}" >> "$debug" - echo "Vim returned $vimstatus" | D - echo "Vim messages were: " | D - cat $script_output_fn | D - echo "Output was:" | D - - # Modified from https://www.itprotoday.com/powershell/get-hex-dumps-files-powershell - Get-Content $script_output_fn -Encoding Byte -ReadCount 16 | ` - ForEach-Object { - $output = "" - $chars = '' - foreach ( $byte in $_ ) { - $output += "{0:X2} " -f $byte - if( ($byte -ge 32) -and ($byte -le 127) ) { - $chars += [char]$byte - } else { - $chars += '.' - } - } - $output + ' ' + $chars - } | D - - del -Force $script_output_fn -} #endif $debug - -# }}}1 - -del -Force $fn - -exit $vimstatus - -# vi: set fdm=marker: diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.bat b/dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.bat deleted file mode 100755 index c834fd74..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.bat +++ /dev/null @@ -1,12 +0,0 @@ -:: fetch-vim.bat: Fetch vim if necessary -:: For use in the editorconfig-vim Appveyor build -:: Copyright (c) 2018--2019 Chris White. All rights reserved. -:: Licensed Apache 2.0, or any later version, at your option. - -:: If it's already been loaded from the cache, we're done -if exist C:\vim\vim\vim80\vim.exe exit - -:: Otherwise, download and unzip it. -appveyor DownloadFile https://github.com/cxw42/editorconfig-core-vimscript/releases/download/v0.1.0/vim.7z - -7z x vim.7z -oC:\vim diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.sh b/dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.sh deleted file mode 100755 index 22e7912a..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/fetch-vim.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash -# fetch-vim.bat: Fetch vim if necessary -# For use in the editorconfig-vim Appveyor build -# Copyright (c) 2018--2019 Chris White. All rights reserved. -# Licensed Apache 2.0, or any later version, at your option. - -# Debugging -set -x -set -o nounset -#set -o errexit - -# Basic system info -uname -a -pwd -ls -l - -echo "VIM_EXE: $VIM_EXE" -set - -# If it's already been loaded from the cache, we're done -if [[ -x "$VIM_EXE" ]]; then - echo Vim found in cache at "$VIM_EXE" - exit 0 -fi - -# Otherwise, clone and build it -WHITHER="$APPVEYOR_BUILD_FOLDER/vim" - -git clone https://github.com/vim/vim-appimage.git -cd vim-appimage -git submodule update --init --recursive - -cd vim/src -./configure --with-features=huge --prefix="$WHITHER" --enable-fail-if-missing -make -j2 # Free tier provides two cores -make install -./vim --version -cd $APPVEYOR_BUILD_FOLDER -find . -type f -name vim -exec ls -l {} + - -echo Done fetching and installing vim diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/.gitignore b/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/.gitignore deleted file mode 100644 index cee07667..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Where bundler installs local Gemfile dependencies -/vendor/ diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile b/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile deleted file mode 100644 index 49270e49..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -source 'https://rubygems.org' - -gem 'rake', '~> 12.3.3' -gem 'rspec', '~> 3.4.0' -gem 'vimrunner', '~> 0.3.1' diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile.lock b/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile.lock deleted file mode 100644 index 5d1c3f47..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Gemfile.lock +++ /dev/null @@ -1,27 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - diff-lcs (1.2.5) - rake (12.3.3) - rspec (3.4.0) - rspec-core (~> 3.4.0) - rspec-expectations (~> 3.4.0) - rspec-mocks (~> 3.4.0) - rspec-core (3.4.1) - rspec-support (~> 3.4.0) - rspec-expectations (3.4.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.4.0) - rspec-mocks (3.4.0) - diff-lcs (>= 1.2.0, < 2.0) - rspec-support (~> 3.4.0) - rspec-support (3.4.1) - vimrunner (0.3.1) - -PLATFORMS - ruby - -DEPENDENCIES - rake (~> 12.3.3) - rspec (~> 3.4.0) - vimrunner (~> 0.3.1) diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Rakefile b/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Rakefile deleted file mode 100644 index 3119d82e..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/Rakefile +++ /dev/null @@ -1,8 +0,0 @@ -# -# run `rake` to run tests - -require 'rspec/core/rake_task' - -RSpec::Core::RakeTask.new(:spec) - -task :default => :spec diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/.editorconfig b/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/.editorconfig deleted file mode 100644 index 834f0eb3..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/.editorconfig +++ /dev/null @@ -1,4 +0,0 @@ -[*.rb] -indent_style = space -indent_size = 2 -end_of_line = lf diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/editorconfig_spec.rb b/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/editorconfig_spec.rb deleted file mode 100644 index fd1644b0..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/plugin/spec/editorconfig_spec.rb +++ /dev/null @@ -1,162 +0,0 @@ -require 'vimrunner' - -def create_vim(*initial_commands) - vim = Vimrunner.start - initial_commands.each do |cmd| - vim.command cmd - end - vim.add_plugin(File.expand_path('../../../..', __FILE__), 'plugin/editorconfig.vim') - return vim -end - -# The base path of the testing files -BASE_PATH = File.expand_path('../plugin_tests/test_files/', __FILE__) - -# file_name is the file name that should be open by Vim -# expected_values is a Hash that contains all the Vim options we need to test -def test_editorconfig(vim, file_name, expected_values) - vim.edit(File.join(BASE_PATH, file_name)) - - expected_values.each do |key, val| - vimval = vim.echo("&l:#{key}") - expect(vimval).to eq(val), "key #{key} had value #{vimval}, but I expected #{val}" - end - - vim.command 'bd!' -end - -def test_instance(vim) - describe 'plugin/editorconfig.vim' do - after(:all) do - vim.kill - end - - describe '#all' do - it '3_space.py' do - test_editorconfig vim, '3_space.txt', - expandtab: '1', - shiftwidth: '3', - tabstop: '3' - end - end - - it '4_space.py' do - test_editorconfig vim, '4_space.py', - expandtab: '1', - shiftwidth: '4', - tabstop: '8' - end - - it 'space.txt' do - test_editorconfig vim, 'space.txt', - expandtab: '1', - shiftwidth: vim.echo('&l:tabstop') - end - - it 'tab.txt' do - test_editorconfig vim, 'tab.txt', - expandtab: '0' - end - - it '4_tab.txt' do - test_editorconfig vim, '4_tab.txt', - expandtab: '0', - shiftwidth: '4', - tabstop: '4' - end - - it '4_tab_width_of_8' do - test_editorconfig vim, '4_tab_width_of_8.txt', - expandtab: '0', - shiftwidth: '4', - tabstop: '8' - end - - it 'lf.txt' do - test_editorconfig vim, 'lf.txt', - fileformat: 'unix' - end - - it 'crlf.txt' do - test_editorconfig vim, 'crlf.txt', - fileformat: 'dos' - end - - it 'cr.txt' do - test_editorconfig vim, 'cr.txt', - fileformat: 'mac' - end - - it 'utf-8.txt' do - test_editorconfig vim, 'utf-8.txt', - fileencoding: 'utf-8', - bomb: '0' - end - - it 'utf-8-bom.txt' do - test_editorconfig vim, 'utf-8-bom.txt', - fileencoding: 'utf-8', - bomb: '1' - end - - it 'utf-16be.txt' do - test_editorconfig vim, 'utf-16be.txt', - fileencoding: 'utf-16' - end - - it 'utf-16le.txt' do - test_editorconfig vim, 'utf-16le.txt', - fileencoding: 'utf-16le' - end - - it 'latin1.txt' do - test_editorconfig vim, 'latin1.txt', - fileencoding: 'latin1' - end - - # insert_final_newline by PreserveNoEOL tests are omitted, since they are not supported - if vim.echo("exists('+fixendofline')") == '1' - it 'with_newline.txt' do - test_editorconfig vim, 'with_newline.txt', - fixendofline: '1' - end - - it 'without_newline.txt' do - test_editorconfig vim, 'without_newline.txt', - fixendofline: '0' - end - end - end -end - -# Test the vim core -(lambda do - puts 'Testing default' - vim = create_vim - test_instance vim -end).call - -# Test the vim core with an express setting -(lambda do - puts 'Testing with express vim_core mode' - vim = create_vim("let g:EditorConfig_core_mode='vim_core'") - test_instance vim -end).call - -# Test with external-core mode, but no external core defined -(lambda do - puts 'Testing with fallback to vim_core mode' - vim = create_vim("let g:EditorConfig_core_mode='external_command'") - test_instance vim -end).call - -# Test with an external core, if desired -extcore = ENV['EDITORCONFIG_VIM_EXTERNAL_CORE'] -if extcore - puts "Testing with external_command #{extcore}" - vim = create_vim( - "let g:EditorConfig_core_mode='external_command'", - "let g:EditorConfig_exec_path='#{extcore}'", - ) - test_instance vim -end diff --git a/dotfiles/.vim/plugged/editorconfig-vim/tests/travis-test.sh b/dotfiles/.vim/plugged/editorconfig-vim/tests/travis-test.sh deleted file mode 100755 index ef886e6b..00000000 --- a/dotfiles/.vim/plugged/editorconfig-vim/tests/travis-test.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -# travis-test.sh: Script for running editorconfig-vim tests under Travis CI. -# Copyright (c) 2019 Chris White. All rights reserved. -# Licensed Apache, version 2.0 or any later version, at your option. - -# Error exit; debug output -set -vxEeuo pipefail - -# Permit `travis-test.sh plugin` if TEST_WHICH is unset -if [[ ( ! "${TEST_WHICH:-}" ) && "${1:-}" ]]; then - export TEST_WHICH="$1" -fi - -if [[ ! "${TEST_WHICH:-}" ]]; then - cat </dev/null ; pwd)" - export BUNDLE_GEMFILE="${here}/plugin/Gemfile" - # Install into tests/plugin/vendor. Don't clear it first, - # since you can clear it yourself if you're running from a - # dev environment. - bundle install --jobs=3 --retry=3 --deployment - fi - - # Use the standalone Vimscript EditorConfig core to test the plugin's - # external_command mode - export EDITORCONFIG_VIM_EXTERNAL_CORE=tests/core/editorconfig - - bundle exec rspec tests/plugin/spec/editorconfig_spec.rb - -elif [[ "$TEST_WHICH" = 'core' ]]; then # test core - cd tests/core - mkdir -p build # May already exist if running from a dev env - cd build - cmake .. - ctest . --output-on-failure -VV -C Debug - # -C Debug: for Visual Studio builds, you have to specify - # a configuration. - -else - echo 'Invalid TEST_WHICH value' 1>&2 - exit 1 -fi diff --git a/dotfiles/.vim/plugged/fzf.vim/.gitattributes b/dotfiles/.vim/plugged/fzf.vim/.gitattributes deleted file mode 100644 index dfdb8b77..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.sh text eol=lf diff --git a/dotfiles/.vim/plugged/fzf.vim/.github/FUNDING.yml b/dotfiles/.vim/plugged/fzf.vim/.github/FUNDING.yml deleted file mode 100644 index f2848951..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: junegunn diff --git a/dotfiles/.vim/plugged/fzf.vim/.github/ISSUE_TEMPLATE.md b/dotfiles/.vim/plugged/fzf.vim/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 5445de0f..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,25 +0,0 @@ - - - - -- [ ] I have fzf 0.30.0 or above -- [ ] I have read through https://github.com/junegunn/fzf.vim/blob/master/README.md -- [ ] I have read through https://github.com/junegunn/fzf/blob/master/README-VIM.md -- [ ] I have read through the manual page of fzf (`man fzf`) -- [ ] I have searched through the existing issues - - - diff --git a/dotfiles/.vim/plugged/fzf.vim/.gitignore b/dotfiles/.vim/plugged/fzf.vim/.gitignore deleted file mode 100644 index 926ccaaf..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/.gitignore +++ /dev/null @@ -1 +0,0 @@ -doc/tags diff --git a/dotfiles/.vim/plugged/fzf.vim/.gitrepo b/dotfiles/.vim/plugged/fzf.vim/.gitrepo deleted file mode 100644 index dec02cd4..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/.gitrepo +++ /dev/null @@ -1,12 +0,0 @@ -; DO NOT EDIT (unless you know what you are doing) -; -; This subdirectory is a git "subrepo", and this file is maintained by the -; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme -; -[subrepo] - remote = https://github.com/junegunn/fzf.vim.git - branch = master - commit = 9ceac718026fd39498d95ff04fa04d3e40c465d7 - parent = 8c6fca48ea111be175ed5c1eb0ef01bcef60a300 - method = merge - cmdver = 0.4.3 diff --git a/dotfiles/.vim/plugged/fzf.vim/LICENSE b/dotfiles/.vim/plugged/fzf.vim/LICENSE deleted file mode 100644 index 8087dea8..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2021 Junegunn Choi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/dotfiles/.vim/plugged/fzf.vim/README.md b/dotfiles/.vim/plugged/fzf.vim/README.md deleted file mode 100644 index dbeb9000..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/README.md +++ /dev/null @@ -1,431 +0,0 @@ -fzf :heart: vim -=============== - -Things you can do with [fzf][fzf] and Vim. - -Rationale ---------- - -[fzf][fzf] itself is not a Vim plugin, and the official repository only -provides the [basic wrapper function][run] for Vim. It's up to the users to -write their own Vim commands with it. However, I've learned that many users of -fzf are not familiar with Vimscript and are looking for the "default" -implementation of the features they can find in the alternative Vim plugins. - -This repository is a bundle of fzf-based commands and mappings extracted from -my [.vimrc][vimrc] to address such needs. They are *not* designed to be -flexible or configurable, and there's no guarantee of backward-compatibility. - -Why you should use fzf on Vim ------------------------------ - -Because you can and you love fzf. - -fzf runs asynchronously and can be orders of magnitude faster than similar Vim -plugins. However, the benefit may not be noticeable if the size of the input -is small, which is the case for many of the commands provided here. -Nevertheless I wrote them anyway since it's really easy to implement custom -selector with fzf. - -Installation ------------- - -fzf.vim depends on the basic Vim plugin of [the main fzf -repository][fzf-main], which means you need to **set up both "fzf" and -"fzf.vim" on Vim**. To learn more about fzf/Vim integration, see -[README-VIM][README-VIM]. - -[fzf-main]: https://github.com/junegunn/fzf -[README-VIM]: https://github.com/junegunn/fzf/blob/master/README-VIM.md - -### Using [vim-plug](https://github.com/junegunn/vim-plug) - -```vim -Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } -Plug 'junegunn/fzf.vim' -``` - -`fzf#install()` makes sure that you have the latest binary, but it's optional, -so you can omit it if you use a plugin manager that doesn't support hooks. - -### Dependencies - -- [fzf][fzf-main] 0.23.0 or above -- For syntax-highlighted preview, install [bat](https://github.com/sharkdp/bat) -- If [delta](https://github.com/dandavison/delta) is available, `GF?`, - `Commits` and `BCommits` will use it to format `git diff` output. -- `Ag` requires [The Silver Searcher (ag)][ag] -- `Rg` requires [ripgrep (rg)][rg] -- `Tags` and `Helptags` require Perl - -Commands --------- - -| Command | List | -| --- | --- | -| `:Files [PATH]` | Files (runs `$FZF_DEFAULT_COMMAND` if defined) | -| `:GFiles [OPTS]` | Git files (`git ls-files`) | -| `:GFiles?` | Git files (`git status`) | -| `:Buffers` | Open buffers | -| `:Colors` | Color schemes | -| `:Ag [PATTERN]` | [ag][ag] search result (`ALT-A` to select all, `ALT-D` to deselect all) | -| `:Rg [PATTERN]` | [rg][rg] search result (`ALT-A` to select all, `ALT-D` to deselect all) | -| `:Lines [QUERY]` | Lines in loaded buffers | -| `:BLines [QUERY]` | Lines in the current buffer | -| `:Tags [QUERY]` | Tags in the project (`ctags -R`) | -| `:BTags [QUERY]` | Tags in the current buffer | -| `:Marks` | Marks | -| `:Windows` | Windows | -| `:Locate PATTERN` | `locate` command output | -| `:History` | `v:oldfiles` and open buffers | -| `:History:` | Command history | -| `:History/` | Search history | -| `:Snippets` | Snippets ([UltiSnips][us]) | -| `:Commits` | Git commits (requires [fugitive.vim][f]) | -| `:BCommits` | Git commits for the current buffer; visual-select lines to track changes in the range | -| `:Commands` | Commands | -| `:Maps` | Normal mode mappings | -| `:Helptags` | Help tags [1](#helptags) | -| `:Filetypes` | File types - -- Most commands support `CTRL-T` / `CTRL-X` / `CTRL-V` key - bindings to open in a new tab, a new split, or in a new vertical split -- Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen -- You can set `g:fzf_command_prefix` to give the same prefix to the commands - - e.g. `let g:fzf_command_prefix = 'Fzf'` and you have `FzfFiles`, etc. - -(
    1: `Helptags` will shadow the command of the same name -from [pathogen][pat]. But its functionality is still available via `call -pathogen#helptags()`. [↩](#a1)) - -[pat]: https://github.com/tpope/vim-pathogen -[f]: https://github.com/tpope/vim-fugitive - -Customization -------------- - -### Global options - -Every command in fzf.vim internally calls `fzf#wrap` function of the main -repository which supports a set of global option variables. So please read -through [README-VIM][README-VIM] to learn more about them. - -#### Preview window - -Some commands will show the preview window on the right. You can customize the -behavior with `g:fzf_preview_window`. Here are some examples: - -```vim -" This is the default option: -" - Preview window on the right with 50% width -" - CTRL-/ will toggle preview window. -" - Note that this array is passed as arguments to fzf#vim#with_preview function. -" - To learn more about preview window options, see `--preview-window` section of `man fzf`. -let g:fzf_preview_window = ['right,50%', 'ctrl-/'] - -" Preview window is hidden by default. You can toggle it with ctrl-/. -" It will show on the right with 50% width, but if the width is smaller -" than 70 columns, it will show above the candidate list -let g:fzf_preview_window = ['hidden,right,50%,<70(up,40%)', 'ctrl-/'] - -" Empty value to disable preview window altogether -let g:fzf_preview_window = [] -``` - -### Command-local options - -A few commands in fzf.vim can be customized with global option variables shown -below. - -```vim -" [Buffers] Jump to the existing window if possible -let g:fzf_buffers_jump = 1 - -" [[B]Commits] Customize the options used by 'git log': -let g:fzf_commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"' - -" [Tags] Command to generate tags file -let g:fzf_tags_command = 'ctags -R' - -" [Commands] --expect expression for directly executing the command -let g:fzf_commands_expect = 'alt-enter,ctrl-x' -``` - -### Advanced customization - -#### Vim functions - -Each command in fzf.vim is backed by a Vim function. You can override -a command or define a variation of it by calling its corresponding function. - -| Command | Vim function | -| --- | --- | -| `Files` | `fzf#vim#files(dir, [spec dict], [fullscreen bool])` | -| `GFiles` | `fzf#vim#gitfiles(git_options, [spec dict], [fullscreen bool])` | -| `GFiles?` | `fzf#vim#gitfiles('?', [spec dict], [fullscreen bool])` | -| `Buffers` | `fzf#vim#buffers([spec dict], [fullscreen bool])` | -| `Colors` | `fzf#vim#colors([spec dict], [fullscreen bool])` | -| `Rg` | `fzf#vim#grep(command, [has_column bool], [spec dict], [fullscreen bool])` | -| ... | ... | - -(We can see that the last two optional arguments of each function are -identical. They are directly passed to `fzf#wrap` function. If you haven't -read [README-VIM][README-VIM] already, please read it before proceeding.) - -#### Example: Customizing `Files` command - -This is the default definition of `Files` command: - -```vim -command! -bang -nargs=? -complete=dir Files call fzf#vim#files(, 0) -``` - -Let's say you want to a variation of it called `ProjectFiles` that only -searches inside `~/projects` directory. Then you can do it like this: - -```vim -command! -bang ProjectFiles call fzf#vim#files('~/projects', 0) -``` - -Or, if you want to override the command with different fzf options, just pass -a custom spec to the function. - -```vim -command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, {'options': ['--layout=reverse', '--info=inline']}, 0) -``` - -Want a preview window? - -```vim -command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, {'options': ['--layout=reverse', '--info=inline', '--preview', 'cat {}']}, 0) -``` - -It kind of works, but you probably want a nicer previewer program than `cat`. -fzf.vim ships [a versatile preview script](bin/preview.sh) you can readily -use. It internally executes [bat](https://github.com/sharkdp/bat) for syntax -highlighting, so make sure to install it. - -```vim -command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, {'options': ['--layout=reverse', '--info=inline', '--preview', '~/.vim/plugged/fzf.vim/bin/preview.sh {}']}, 0) -``` - -However, it's not ideal to hard-code the path to the script which can be -different in different circumstances. So in order to make it easier to set up -the previewer, fzf.vim provides `fzf#vim#with_preview` helper function. -Similarly to `fzf#wrap`, it takes a spec dictionary and returns a copy of it -with additional preview options. - -```vim -command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), 0) -``` - -You can just omit the spec argument if you only want the previewer. - -```vim -command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, fzf#vim#with_preview(), 0) -``` - -#### Example: `git grep` wrapper - -The following example implements `GGrep` command that works similarly to -predefined `Ag` or `Rg` using `fzf#vim#grep`. - -- The second argument to `fzf#vim#grep` is 0 (false), because `git grep` does - not print column numbers. -- We set the base directory to git root by setting `dir` attribute in spec - dictionary. -- [The preview script](bin/preview.sh) supports `grep` format - (`FILE_PATH:LINE_NO:...`), so we can just wrap the spec with - `fzf#vim#with_preview` as before to enable previewer. - -```vim -command! -bang -nargs=* GGrep - \ call fzf#vim#grep( - \ 'git grep --line-number -- '.shellescape(), 0, - \ fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), 0) -``` - -#### Example: `Rg` command with preview window - -You can see the definition of `Rg` command with `:command Rg`. With the -information, you can redefine it with the preview window enabled. In this -case, we're only interested in setting up the preview window, so we will omit -the spec argument to `fzf#vim#preview`. - -```vim -command! -bang -nargs=* Rg - \ call fzf#vim#grep( - \ 'rg --column --line-number --no-heading --color=always --smart-case -- '.shellescape(), 1, - \ fzf#vim#with_preview(), 0) -``` - -#### Example: Advanced ripgrep integration - -In the default implementation of `Rg`, ripgrep process starts only once with -the initial query (e.g. `:Rg foo`) and fzf filters the output of the process. - -This is okay in most cases because fzf is quite performant even with millions -of lines, but we can make fzf completely delegate its search responsibliity to -ripgrep process by making it restart ripgrep whenever the query string is -updated. In this scenario, fzf becomes a simple selector interface rather than -a "fuzzy finder". - -- We will name the new command all-uppercase `RG` so we can still access the - default version. -- `--bind 'change:reload:rg ... {q}'` will make fzf restart ripgrep process - whenever the query string, denoted by `{q}`, is changed. -- With `--phony` option, fzf will no longer perform search. The query string - you type on fzf prompt is only used for restarting ripgrep process. -- Also note that we enabled previewer with `fzf#vim#with_preview`. - -```vim -function! RipgrepFzf(query, fullscreen) - let command_fmt = 'rg --column --line-number --no-heading --color=always --smart-case -- %s || true' - let initial_command = printf(command_fmt, shellescape(a:query)) - let reload_command = printf(command_fmt, '{q}') - let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command]} - call fzf#vim#grep(initial_command, 1, fzf#vim#with_preview(spec), a:fullscreen) -endfunction - -command! -nargs=* -bang RG call RipgrepFzf(, 0) -``` - -Mappings --------- - -| Mapping | Description | -| --- | --- | -| `(fzf-maps-n)` | Normal mode mappings | -| `(fzf-maps-i)` | Insert mode mappings | -| `(fzf-maps-x)` | Visual mode mappings | -| `(fzf-maps-o)` | Operator-pending mappings | -| `(fzf-complete-word)` | `cat /usr/share/dict/words` | -| `(fzf-complete-path)` | Path completion using `find` (file + dir) | -| `(fzf-complete-file)` | File completion using `find` | -| `(fzf-complete-line)` | Line completion (all open buffers) | -| `(fzf-complete-buffer-line)` | Line completion (current buffer only) | - -```vim -" Mapping selecting mappings -nmap (fzf-maps-n) -xmap (fzf-maps-x) -omap (fzf-maps-o) - -" Insert mode completion -imap (fzf-complete-word) -imap (fzf-complete-path) -imap (fzf-complete-line) -``` - -Completion functions --------------------- - -| Function | Description | -| --- | --- | -| `fzf#vim#complete#path(command, [spec])` | Path completion | -| `fzf#vim#complete#word([spec])` | Word completion | -| `fzf#vim#complete#line([spec])` | Line completion (all open buffers) | -| `fzf#vim#complete#buffer_line([spec])` | Line completion (current buffer only) | - -```vim -" Path completion with custom source command -inoremap fzf#vim#complete#path('fd') -inoremap fzf#vim#complete#path('rg --files') - -" Word completion with custom spec with popup layout option -inoremap fzf#vim#complete#word({'window': { 'width': 0.2, 'height': 0.9, 'xoffset': 1 }}) -``` - -Custom completion ------------------ - -`fzf#vim#complete` is a helper function for creating custom fuzzy completion -using fzf. If the first parameter is a command string or a Vim list, it will -be used as the source. - -```vim -" Replace the default dictionary completion with fzf-based fuzzy completion -inoremap fzf#vim#complete('cat /usr/share/dict/words') -``` - -For advanced uses, you can pass an options dictionary to the function. The set -of options is pretty much identical to that for `fzf#run` only with the -following exceptions: - -- `reducer` (funcref) - - Reducer transforms the output lines of fzf into a single string value -- `prefix` (string or funcref; default: `\k*$`) - - Regular expression pattern to extract the completion prefix - - Or a function to extract completion prefix -- Both `source` and `options` can be given as funcrefs that take the - completion prefix as the argument and return the final value -- `sink` or `sink*` are ignored - -```vim -" Global line completion (not just open buffers. ripgrep required.) -inoremap fzf#vim#complete(fzf#wrap({ - \ 'prefix': '^.*$', - \ 'source': 'rg -n ^ --color always', - \ 'options': '--ansi --delimiter : --nth 3..', - \ 'reducer': { lines -> join(split(lines[0], ':\zs')[2:], '') }})) -``` - -### Reducer example - -```vim -function! s:make_sentence(lines) - return substitute(join(a:lines), '^.', '\=toupper(submatch(0))', '').'.' -endfunction - -inoremap fzf#vim#complete({ - \ 'source': 'cat /usr/share/dict/words', - \ 'reducer': function('make_sentence'), - \ 'options': '--multi --reverse --margin 15%,0', - \ 'left': 20}) -``` - -Status line of terminal buffer ------------------------------- - -When fzf starts in a terminal buffer (see [fzf/README-VIM.md][termbuf]), you -may want to customize the statusline of the containing buffer. - -[termbuf]: https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzf-inside-terminal-buffer - -### Hide statusline - -```vim -autocmd! FileType fzf set laststatus=0 noshowmode noruler - \| autocmd BufLeave set laststatus=2 showmode ruler -``` - -### Custom statusline - -```vim -function! s:fzf_statusline() - " Override statusline as you like - highlight fzf1 ctermfg=161 ctermbg=251 - highlight fzf2 ctermfg=23 ctermbg=251 - highlight fzf3 ctermfg=237 ctermbg=251 - setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f -endfunction - -autocmd! User FzfStatusLine call fzf_statusline() -``` - -License -------- - -MIT - -[fzf]: https://github.com/junegunn/fzf -[run]: https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzfrun -[vimrc]: https://github.com/junegunn/dotfiles/blob/master/vimrc -[ag]: https://github.com/ggreer/the_silver_searcher -[rg]: https://github.com/BurntSushi/ripgrep -[us]: https://github.com/SirVer/ultisnips diff --git a/dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim.vim b/dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim.vim deleted file mode 100644 index 44a17f6d..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim.vim +++ /dev/null @@ -1,1455 +0,0 @@ -" Copyright (c) 2017 Junegunn Choi -" -" MIT License -" -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be -" included in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -let s:cpo_save = &cpo -set cpo&vim - -" ------------------------------------------------------------------ -" Common -" ------------------------------------------------------------------ - -let s:min_version = '0.23.0' -let s:is_win = has('win32') || has('win64') -let s:is_wsl_bash = s:is_win && (exepath('bash') =~? 'Windows[/\\]system32[/\\]bash.exe$') -let s:layout_keys = ['window', 'up', 'down', 'left', 'right'] -let s:bin_dir = expand(':p:h:h:h').'/bin/' -let s:bin = { -\ 'preview': s:bin_dir.'preview.sh', -\ 'tags': s:bin_dir.'tags.pl' } -let s:TYPE = {'dict': type({}), 'funcref': type(function('call')), 'string': type(''), 'list': type([])} -if s:is_win - if has('nvim') - let s:bin.preview = split(system('for %A in ("'.s:bin.preview.'") do @echo %~sA'), "\n")[0] - else - let preview_path = s:is_wsl_bash - \ ? substitute(s:bin.preview, '^\([A-Z]\):', '/mnt/\L\1', '') - \ : fnamemodify(s:bin.preview, ':8') - let s:bin.preview = substitute(preview_path, '\', '/', 'g') - endif -endif - -let s:wide = 120 -let s:warned = 0 -let s:checked = 0 - -function! s:check_requirements() - if s:checked - return - endif - - if !exists('*fzf#run') - throw "fzf#run function not found. You also need Vim plugin from the main fzf repository (i.e. junegunn/fzf *and* junegunn/fzf.vim)" - endif - if !exists('*fzf#exec') - throw "fzf#exec function not found. You need to upgrade Vim plugin from the main fzf repository ('junegunn/fzf')" - endif - let s:checked = !empty(fzf#exec(s:min_version)) -endfunction - -function! s:extend_opts(dict, eopts, prepend) - if empty(a:eopts) - return - endif - if has_key(a:dict, 'options') - if type(a:dict.options) == s:TYPE.list && type(a:eopts) == s:TYPE.list - if a:prepend - let a:dict.options = extend(copy(a:eopts), a:dict.options) - else - call extend(a:dict.options, a:eopts) - endif - else - let all_opts = a:prepend ? [a:eopts, a:dict.options] : [a:dict.options, a:eopts] - let a:dict.options = join(map(all_opts, 'type(v:val) == s:TYPE.list ? join(map(copy(v:val), "fzf#shellescape(v:val)")) : v:val')) - endif - else - let a:dict.options = a:eopts - endif -endfunction - -function! s:merge_opts(dict, eopts) - return s:extend_opts(a:dict, a:eopts, 0) -endfunction - -function! s:prepend_opts(dict, eopts) - return s:extend_opts(a:dict, a:eopts, 1) -endfunction - -" [[spec to wrap], [preview window expression], [toggle-preview keys...]] -function! fzf#vim#with_preview(...) - " Default spec - let spec = {} - let window = '' - - let args = copy(a:000) - - " Spec to wrap - if len(args) && type(args[0]) == s:TYPE.dict - let spec = copy(args[0]) - call remove(args, 0) - endif - - if !executable('bash') - if !s:warned - call s:warn('Preview window not supported (bash not found in PATH)') - let s:warned = 1 - endif - return spec - endif - - " Placeholder expression (TODO/TBD: undocumented) - let placeholder = get(spec, 'placeholder', '{}') - - " g:fzf_preview_window - if empty(args) - let preview_args = get(g:, 'fzf_preview_window', ['', 'ctrl-/']) - if empty(preview_args) - let args = ['hidden'] - else - " For backward-compatiblity - let args = type(preview_args) == type('') ? [preview_args] : copy(preview_args) - endif - endif - - if len(args) && type(args[0]) == s:TYPE.string - if len(args[0]) && args[0] !~# '^\(up\|down\|left\|right\|hidden\)' - throw 'invalid preview window: '.args[0] - endif - let window = args[0] - call remove(args, 0) - endif - - let preview = [] - if len(window) - let preview += ['--preview-window', window] - endif - if s:is_win - if empty($MSWINHOME) - let $MSWINHOME = $HOME - endif - if s:is_wsl_bash && $WSLENV !~# '[:]\?MSWINHOME\(\/[^:]*\)\?\(:\|$\)' - let $WSLENV = 'MSWINHOME/u:'.$WSLENV - endif - let preview_cmd = 'bash '.(s:is_wsl_bash - \ ? s:bin.preview - \ : escape(s:bin.preview, '\')) - else - let preview_cmd = fzf#shellescape(s:bin.preview) - endif - if len(placeholder) - let preview += ['--preview', preview_cmd.' '.placeholder] - end - if &ambiwidth ==# 'double' - let preview += ['--no-unicode'] - end - - if len(args) - call extend(preview, ['--bind', join(map(args, 'v:val.":toggle-preview"'), ',')]) - endif - call s:merge_opts(spec, preview) - return spec -endfunction - -function! s:remove_layout(opts) - for key in s:layout_keys - if has_key(a:opts, key) - call remove(a:opts, key) - endif - endfor - return a:opts -endfunction - -function! s:reverse_list(opts) - let tokens = map(split($FZF_DEFAULT_OPTS, '[^a-z-]'), 'substitute(v:val, "^--", "", "")') - if index(tokens, 'reverse') < 0 - return extend(['--layout=reverse-list'], a:opts) - endif - return a:opts -endfunction - -function! s:wrap(name, opts, bang) - " fzf#wrap does not append --expect if sink or sink* is found - let opts = copy(a:opts) - let options = '' - if has_key(opts, 'options') - let options = type(opts.options) == s:TYPE.list ? join(opts.options) : opts.options - endif - if options !~ '--expect' && has_key(opts, 'sink*') - let Sink = remove(opts, 'sink*') - let wrapped = fzf#wrap(a:name, opts, a:bang) - let wrapped['sink*'] = Sink - else - let wrapped = fzf#wrap(a:name, opts, a:bang) - endif - return wrapped -endfunction - -function! s:strip(str) - return substitute(a:str, '^\s*\|\s*$', '', 'g') -endfunction - -function! s:chomp(str) - return substitute(a:str, '\n*$', '', 'g') -endfunction - -function! s:escape(path) - let path = fnameescape(a:path) - return s:is_win ? escape(path, '$') : path -endfunction - -if v:version >= 704 - function! s:function(name) - return function(a:name) - endfunction -else - function! s:function(name) - " By Ingo Karkat - return function(substitute(a:name, '^s:', matchstr(expand(''), '\d\+_\zefunction$'), '')) - endfunction -endif - -function! s:get_color(attr, ...) - let gui = has('termguicolors') && &termguicolors - let fam = gui ? 'gui' : 'cterm' - let pat = gui ? '^#[a-f0-9]\+' : '^[0-9]\+$' - for group in a:000 - let code = synIDattr(synIDtrans(hlID(group)), a:attr, fam) - if code =~? pat - return code - endif - endfor - return '' -endfunction - -let s:ansi = {'black': 30, 'red': 31, 'green': 32, 'yellow': 33, 'blue': 34, 'magenta': 35, 'cyan': 36} - -function! s:csi(color, fg) - let prefix = a:fg ? '38;' : '48;' - if a:color[0] == '#' - return prefix.'2;'.join(map([a:color[1:2], a:color[3:4], a:color[5:6]], 'str2nr(v:val, 16)'), ';') - endif - return prefix.'5;'.a:color -endfunction - -function! s:ansi(str, group, default, ...) - let fg = s:get_color('fg', a:group) - let bg = s:get_color('bg', a:group) - let color = (empty(fg) ? s:ansi[a:default] : s:csi(fg, 1)) . - \ (empty(bg) ? '' : ';'.s:csi(bg, 0)) - return printf("\x1b[%s%sm%s\x1b[m", color, a:0 ? ';1' : '', a:str) -endfunction - -for s:color_name in keys(s:ansi) - execute "function! s:".s:color_name."(str, ...)\n" - \ " return s:ansi(a:str, get(a:, 1, ''), '".s:color_name."')\n" - \ "endfunction" -endfor - -function! s:buflisted() - return filter(range(1, bufnr('$')), 'buflisted(v:val) && getbufvar(v:val, "&filetype") != "qf"') -endfunction - -function! s:fzf(name, opts, extra) - call s:check_requirements() - - let [extra, bang] = [{}, 0] - if len(a:extra) <= 1 - let first = get(a:extra, 0, 0) - if type(first) == s:TYPE.dict - let extra = first - else - let bang = first - endif - elseif len(a:extra) == 2 - let [extra, bang] = a:extra - else - throw 'invalid number of arguments' - endif - - let extra = copy(extra) - let eopts = has_key(extra, 'options') ? remove(extra, 'options') : '' - let merged = extend(copy(a:opts), extra) - call s:merge_opts(merged, eopts) - return fzf#run(s:wrap(a:name, merged, bang)) -endfunction - -let s:default_action = { - \ 'ctrl-t': 'tab split', - \ 'ctrl-x': 'split', - \ 'ctrl-v': 'vsplit' } - -function! s:action_for(key, ...) - let default = a:0 ? a:1 : '' - let Cmd = get(get(g:, 'fzf_action', s:default_action), a:key, default) - return type(Cmd) == s:TYPE.string ? Cmd : default -endfunction - -function! s:open(cmd, target) - if stridx('edit', a:cmd) == 0 && fnamemodify(a:target, ':p') ==# expand('%:p') - normal! m' - return - endif - execute a:cmd s:escape(a:target) -endfunction - -function! s:align_lists(lists) - let maxes = {} - for list in a:lists - let i = 0 - while i < len(list) - let maxes[i] = max([get(maxes, i, 0), len(list[i])]) - let i += 1 - endwhile - endfor - for list in a:lists - call map(list, "printf('%-'.maxes[v:key].'s', v:val)") - endfor - return a:lists -endfunction - -function! s:warn(message) - echohl WarningMsg - echom a:message - echohl None - return 0 -endfunction - -function! s:fill_quickfix(list, ...) - if len(a:list) > 1 - call setqflist(a:list) - copen - wincmd p - if a:0 - execute a:1 - endif - endif -endfunction - -function! fzf#vim#_uniq(list) - let visited = {} - let ret = [] - for l in a:list - if !empty(l) && !has_key(visited, l) - call add(ret, l) - let visited[l] = 1 - endif - endfor - return ret -endfunction - -" ------------------------------------------------------------------ -" Files -" ------------------------------------------------------------------ -function! s:shortpath() - let short = fnamemodify(getcwd(), ':~:.') - if !has('win32unix') - let short = pathshorten(short) - endif - let slash = (s:is_win && !&shellslash) ? '\' : '/' - return empty(short) ? '~'.slash : short . (short =~ escape(slash, '\').'$' ? '' : slash) -endfunction - -function! fzf#vim#files(dir, ...) - let args = {} - if !empty(a:dir) - if !isdirectory(expand(a:dir)) - return s:warn('Invalid directory') - endif - let slash = (s:is_win && !&shellslash) ? '\\' : '/' - let dir = substitute(a:dir, '[/\\]*$', slash, '') - let args.dir = dir - else - let dir = s:shortpath() - endif - - let args.options = ['-m', '--prompt', strwidth(dir) < &columns / 2 - 20 ? dir : '> '] - call s:merge_opts(args, get(g:, 'fzf_files_options', [])) - return s:fzf('files', args, a:000) -endfunction - -" ------------------------------------------------------------------ -" Lines -" ------------------------------------------------------------------ -function! s:line_handler(lines) - if len(a:lines) < 2 - return - endif - normal! m' - let cmd = s:action_for(a:lines[0]) - if !empty(cmd) && stridx('edit', cmd) < 0 - execute 'silent' cmd - endif - - let keys = split(a:lines[1], '\t') - execute 'buffer' keys[0] - execute keys[2] - normal! ^zvzz -endfunction - -function! fzf#vim#_lines(all) - let cur = [] - let rest = [] - let buf = bufnr('') - let longest_name = 0 - let display_bufnames = &columns > s:wide - if display_bufnames - let bufnames = {} - for b in s:buflisted() - let bufnames[b] = pathshorten(fnamemodify(bufname(b), ":~:.")) - let longest_name = max([longest_name, len(bufnames[b])]) - endfor - endif - let len_bufnames = min([15, longest_name]) - for b in s:buflisted() - let lines = getbufline(b, 1, "$") - if empty(lines) - let path = fnamemodify(bufname(b), ':p') - let lines = filereadable(path) ? readfile(path) : [] - endif - if display_bufnames - let bufname = bufnames[b] - if len(bufname) > len_bufnames + 1 - let bufname = '…' . bufname[-len_bufnames+1:] - endif - let bufname = printf(s:green("%".len_bufnames."s", "Directory"), bufname) - else - let bufname = '' - endif - let linefmt = s:blue("%2d\t", "TabLine")."%s".s:yellow("\t%4d ", "LineNr")."\t%s" - call extend(b == buf ? cur : rest, - \ filter( - \ map(lines, - \ '(!a:all && empty(v:val)) ? "" : printf(linefmt, b, bufname, v:key + 1, v:val)'), - \ 'a:all || !empty(v:val)')) - endfor - return [display_bufnames, extend(cur, rest)] -endfunction - -function! fzf#vim#lines(...) - let [display_bufnames, lines] = fzf#vim#_lines(1) - let nth = display_bufnames ? 3 : 2 - let [query, args] = (a:0 && type(a:1) == type('')) ? - \ [a:1, a:000[1:]] : ['', a:000] - return s:fzf('lines', { - \ 'source': lines, - \ 'sink*': s:function('s:line_handler'), - \ 'options': s:reverse_list(['+m', '--tiebreak=index', '--prompt', 'Lines> ', '--ansi', '--extended', '--nth='.nth.'..', '--tabstop=1', '--query', query]) - \}, args) -endfunction - -" ------------------------------------------------------------------ -" BLines -" ------------------------------------------------------------------ -function! s:buffer_line_handler(lines) - if len(a:lines) < 2 - return - endif - let qfl = [] - for line in a:lines[1:] - let chunks = split(line, "\t", 1) - let ln = chunks[0] - let ltxt = join(chunks[1:], "\t") - call add(qfl, {'filename': expand('%'), 'lnum': str2nr(ln), 'text': ltxt}) - endfor - call s:fill_quickfix(qfl, 'cfirst') - normal! m' - let cmd = s:action_for(a:lines[0]) - if !empty(cmd) - execute 'silent' cmd - endif - - execute split(a:lines[1], '\t')[0] - normal! ^zvzz -endfunction - -function! s:buffer_lines(query) - let linefmt = s:yellow(" %4d ", "LineNr")."\t%s" - let fmtexpr = 'printf(linefmt, v:key + 1, v:val)' - let lines = getline(1, '$') - if empty(a:query) - return map(lines, fmtexpr) - end - return filter(map(lines, 'v:val =~ a:query ? '.fmtexpr.' : ""'), 'len(v:val)') -endfunction - -function! fzf#vim#buffer_lines(...) - let [query, args] = (a:0 && type(a:1) == type('')) ? - \ [a:1, a:000[1:]] : ['', a:000] - return s:fzf('blines', { - \ 'source': s:buffer_lines(query), - \ 'sink*': s:function('s:buffer_line_handler'), - \ 'options': s:reverse_list(['+m', '--tiebreak=index', '--multi', '--prompt', 'BLines> ', '--ansi', '--extended', '--nth=2..', '--tabstop=1']) - \}, args) -endfunction - -" ------------------------------------------------------------------ -" Colors -" ------------------------------------------------------------------ -function! fzf#vim#colors(...) - let colors = split(globpath(&rtp, "colors/*.vim"), "\n") - if has('packages') - let colors += split(globpath(&packpath, "pack/*/opt/*/colors/*.vim"), "\n") - endif - return s:fzf('colors', { - \ 'source': fzf#vim#_uniq(map(colors, "substitute(fnamemodify(v:val, ':t'), '\\..\\{-}$', '', '')")), - \ 'sink': 'colo', - \ 'options': '+m --prompt="Colors> "' - \}, a:000) -endfunction - -" ------------------------------------------------------------------ -" Locate -" ------------------------------------------------------------------ -function! fzf#vim#locate(query, ...) - return s:fzf('locate', { - \ 'source': 'locate '.a:query, - \ 'options': '-m --prompt "Locate> "' - \}, a:000) -endfunction - -" ------------------------------------------------------------------ -" History[:/] -" ------------------------------------------------------------------ -function! fzf#vim#_recent_files() - return fzf#vim#_uniq(map( - \ filter([expand('%')], 'len(v:val)') - \ + filter(map(fzf#vim#_buflisted_sorted(), 'bufname(v:val)'), 'len(v:val)') - \ + filter(copy(v:oldfiles), "filereadable(fnamemodify(v:val, ':p'))"), - \ 'fnamemodify(v:val, ":~:.")')) -endfunction - -function! s:history_source(type) - let max = histnr(a:type) - let fmt = s:yellow(' %'.len(string(max)).'d ', 'Number') - let list = filter(map(range(1, max), 'histget(a:type, - v:val)'), '!empty(v:val)') - return extend([' :: Press '.s:magenta('CTRL-E', 'Special').' to edit'], - \ map(list, 'printf(fmt, len(list) - v:key)." ".v:val')) -endfunction - -nnoremap (-fzf-vim-do) :execute g:__fzf_command -nnoremap (-fzf-/) / -nnoremap (-fzf-:) : - -function! s:history_sink(type, lines) - if len(a:lines) < 2 - return - endif - - let prefix = "\(-fzf-".a:type.')' - let key = a:lines[0] - let item = matchstr(a:lines[1], ' *[0-9]\+ *\zs.*') - if key == 'ctrl-e' - call histadd(a:type, item) - redraw - call feedkeys(a:type."\", 'n') - else - if a:type == ':' - call histadd(a:type, item) - endif - let g:__fzf_command = "normal ".prefix.item."\" - call feedkeys("\(-fzf-vim-do)") - endif -endfunction - -function! s:cmd_history_sink(lines) - call s:history_sink(':', a:lines) -endfunction - -function! fzf#vim#command_history(...) - return s:fzf('history-command', { - \ 'source': s:history_source(':'), - \ 'sink*': s:function('s:cmd_history_sink'), - \ 'options': '+m --ansi --prompt="Hist:> " --header-lines=1 --expect=ctrl-e --tiebreak=index'}, a:000) -endfunction - -function! s:search_history_sink(lines) - call s:history_sink('/', a:lines) -endfunction - -function! fzf#vim#search_history(...) - return s:fzf('history-search', { - \ 'source': s:history_source('/'), - \ 'sink*': s:function('s:search_history_sink'), - \ 'options': '+m --ansi --prompt="Hist/> " --header-lines=1 --expect=ctrl-e --tiebreak=index'}, a:000) -endfunction - -function! fzf#vim#history(...) - return s:fzf('history-files', { - \ 'source': fzf#vim#_recent_files(), - \ 'options': ['-m', '--header-lines', !empty(expand('%')), '--prompt', 'Hist> '] - \}, a:000) -endfunction - -" ------------------------------------------------------------------ -" GFiles[?] -" ------------------------------------------------------------------ - -function! s:get_git_root(dir) - let dir = len(a:dir) ? a:dir : substitute(split(expand('%:p:h'), '[/\\]\.git\([/\\]\|$\)')[0], '^fugitive://', '', '') - let root = systemlist('git -C ' . fzf#shellescape(dir) . ' rev-parse --show-toplevel')[0] - return v:shell_error ? '' : (len(a:dir) ? fnamemodify(a:dir, ':p') : root) -endfunction - -function! fzf#vim#gitfiles(args, ...) - let dir = get(get(a:, 1, {}), 'dir', '') - let root = s:get_git_root(dir) - if empty(root) - return s:warn('Not in git repo') - endif - let prefix = 'git -C ' . fzf#shellescape(root) . ' ' - if a:args != '?' - return s:fzf('gfiles', { - \ 'source': prefix . 'ls-files '.a:args.(s:is_win ? '' : ' | uniq'), - \ 'dir': root, - \ 'options': '-m --prompt "GitFiles> "' - \}, a:000) - endif - - " Here be dragons! - " We're trying to access the common sink function that fzf#wrap injects to - " the options dictionary. - let bar = s:is_win ? '^|' : '|' - let preview = printf( - \ 'bash -c "if [[ {1} =~ M ]]; then %s; else %s {-1}; fi"', - \ executable('delta') - \ ? prefix . 'diff -- {-1} ' . bar . ' delta --width $FZF_PREVIEW_COLUMNS --file-style=omit ' . bar . ' sed 1d' - \ : prefix . 'diff --color=always -- {-1} ' . bar . ' sed 1,4d', - \ s:bin.preview) - let wrapped = fzf#wrap({ - \ 'source': prefix . '-c color.status=always status --short --untracked-files=all', - \ 'dir': root, - \ 'options': ['--ansi', '--multi', '--nth', '2..,..', '--tiebreak=index', '--prompt', 'GitFiles?> ', '--preview', preview] - \}) - call s:remove_layout(wrapped) - let wrapped.common_sink = remove(wrapped, 'sink*') - function! wrapped.newsink(lines) - let lines = extend(a:lines[0:0], map(a:lines[1:], 'substitute(v:val[3:], ".* -> ", "", "")')) - return self.common_sink(lines) - endfunction - let wrapped['sink*'] = remove(wrapped, 'newsink') - return s:fzf('gfiles-diff', wrapped, a:000) -endfunction - -" ------------------------------------------------------------------ -" Buffers -" ------------------------------------------------------------------ -function! s:find_open_window(b) - let [tcur, tcnt] = [tabpagenr() - 1, tabpagenr('$')] - for toff in range(0, tabpagenr('$') - 1) - let t = (tcur + toff) % tcnt + 1 - let buffers = tabpagebuflist(t) - for w in range(1, len(buffers)) - let b = buffers[w - 1] - if b == a:b - return [t, w] - endif - endfor - endfor - return [0, 0] -endfunction - -function! s:jump(t, w) - execute a:t.'tabnext' - execute a:w.'wincmd w' -endfunction - -function! s:bufopen(lines) - if len(a:lines) < 2 - return - endif - let b = matchstr(a:lines[1], '\[\zs[0-9]*\ze\]') - if empty(a:lines[0]) && get(g:, 'fzf_buffers_jump') - let [t, w] = s:find_open_window(b) - if t - call s:jump(t, w) - return - endif - endif - let cmd = s:action_for(a:lines[0]) - if !empty(cmd) - execute 'silent' cmd - endif - execute 'buffer' b -endfunction - -function! fzf#vim#_format_buffer(b) - let name = bufname(a:b) - let line = exists('*getbufinfo') ? getbufinfo(a:b)[0]['lnum'] : 0 - let name = empty(name) ? '[No Name]' : fnamemodify(name, ":p:~:.") - let flag = a:b == bufnr('') ? s:blue('%', 'Conditional') : - \ (a:b == bufnr('#') ? s:magenta('#', 'Special') : ' ') - let modified = getbufvar(a:b, '&modified') ? s:red(' [+]', 'Exception') : '' - let readonly = getbufvar(a:b, '&modifiable') ? '' : s:green(' [RO]', 'Constant') - let extra = join(filter([modified, readonly], '!empty(v:val)'), '') - let target = line == 0 ? name : name.':'.line - return s:strip(printf("%s\t%d\t[%s] %s\t%s\t%s", target, line, s:yellow(a:b, 'Number'), flag, name, extra)) -endfunction - -function! s:sort_buffers(...) - let [b1, b2] = map(copy(a:000), 'get(g:fzf#vim#buffers, v:val, v:val)') - " Using minus between a float and a number in a sort function causes an error - return b1 < b2 ? 1 : -1 -endfunction - -function! fzf#vim#_buflisted_sorted() - return sort(s:buflisted(), 's:sort_buffers') -endfunction - -function! fzf#vim#buffers(...) - let [query, args] = (a:0 && type(a:1) == type('')) ? - \ [a:1, a:000[1:]] : ['', a:000] - let sorted = fzf#vim#_buflisted_sorted() - let header_lines = '--header-lines=' . (bufnr('') == get(sorted, 0, 0) ? 1 : 0) - let tabstop = len(max(sorted)) >= 4 ? 9 : 8 - return s:fzf('buffers', { - \ 'source': map(sorted, 'fzf#vim#_format_buffer(v:val)'), - \ 'sink*': s:function('s:bufopen'), - \ 'options': ['+m', '-x', '--tiebreak=index', header_lines, '--ansi', '-d', '\t', '--with-nth', '3..', '-n', '2,1..2', '--prompt', 'Buf> ', '--query', query, '--preview-window', '+{2}-/2', '--tabstop', tabstop] - \}, args) -endfunction - -" ------------------------------------------------------------------ -" Ag / Rg -" ------------------------------------------------------------------ -function! s:ag_to_qf(line, has_column) - let parts = matchlist(a:line, '\(.\{-}\)\s*:\s*\(\d\+\)\%(\s*:\s*\(\d\+\)\)\?\%(\s*:\(.*\)\)\?') - let dict = {'filename': &acd ? fnamemodify(parts[1], ':p') : parts[1], 'lnum': parts[2], 'text': parts[4]} - if a:has_column - let dict.col = parts[3] - endif - return dict -endfunction - -function! s:ag_handler(lines, has_column) - if len(a:lines) < 2 - return - endif - - let cmd = s:action_for(a:lines[0], 'e') - let list = map(filter(a:lines[1:], 'len(v:val)'), 's:ag_to_qf(v:val, a:has_column)') - if empty(list) - return - endif - - let first = list[0] - try - call s:open(cmd, first.filename) - execute first.lnum - if a:has_column - call cursor(0, first.col) - endif - normal! zvzz - catch - endtry - - call s:fill_quickfix(list) -endfunction - -" query, [[ag options], options] -function! fzf#vim#ag(query, ...) - if type(a:query) != s:TYPE.string - return s:warn('Invalid query argument') - endif - let query = empty(a:query) ? '^(?=.)' : a:query - let args = copy(a:000) - let ag_opts = len(args) > 1 && type(args[0]) == s:TYPE.string ? remove(args, 0) : '' - let command = ag_opts . ' -- ' . fzf#shellescape(query) - return call('fzf#vim#ag_raw', insert(args, command, 0)) -endfunction - -" ag command suffix, [options] -function! fzf#vim#ag_raw(command_suffix, ...) - if !executable('ag') - return s:warn('ag is not found') - endif - return call('fzf#vim#grep', extend(['ag --nogroup --column --color '.a:command_suffix, 1], a:000)) -endfunction - -" command (string), has_column (0/1), [options (dict)], [fullscreen (0/1)] -function! fzf#vim#grep(grep_command, has_column, ...) - let words = [] - for word in split(a:grep_command) - if word !~# '^[a-z]' - break - endif - call add(words, word) - endfor - let words = empty(words) ? ['grep'] : words - let name = join(words, '-') - let capname = join(map(words, 'toupper(v:val[0]).v:val[1:]'), '') - let opts = { - \ 'column': a:has_column, - \ 'options': ['--ansi', '--prompt', capname.'> ', - \ '--multi', '--bind', 'alt-a:select-all,alt-d:deselect-all', - \ '--delimiter', ':', '--preview-window', '+{2}-/2'] - \} - function! opts.sink(lines) - return s:ag_handler(a:lines, self.column) - endfunction - let opts['sink*'] = remove(opts, 'sink') - try - let prev_default_command = $FZF_DEFAULT_COMMAND - let $FZF_DEFAULT_COMMAND = a:grep_command - return s:fzf(name, opts, a:000) - finally - let $FZF_DEFAULT_COMMAND = prev_default_command - endtry -endfunction - -" ------------------------------------------------------------------ -" BTags -" ------------------------------------------------------------------ -function! s:btags_source(tag_cmds) - if !filereadable(expand('%')) - throw 'Save the file first' - endif - - for cmd in a:tag_cmds - let lines = split(system(cmd), "\n") - if !v:shell_error && len(lines) - break - endif - endfor - if v:shell_error - throw get(lines, 0, 'Failed to extract tags') - elseif empty(lines) - throw 'No tags found' - endif - return map(s:align_lists(map(lines, 'split(v:val, "\t")')), 'join(v:val, "\t")') -endfunction - -function! s:btags_sink(lines) - if len(a:lines) < 2 - return - endif - normal! m' - let cmd = s:action_for(a:lines[0]) - if !empty(cmd) - execute 'silent' cmd '%' - endif - let qfl = [] - for line in a:lines[1:] - execute split(line, "\t")[2] - call add(qfl, {'filename': expand('%'), 'lnum': line('.'), 'text': getline('.')}) - endfor - call s:fill_quickfix(qfl, 'cfirst') - normal! zvzz -endfunction - -" query, [[tag commands], options] -function! fzf#vim#buffer_tags(query, ...) - let args = copy(a:000) - let escaped = fzf#shellescape(expand('%')) - let null = s:is_win ? 'nul' : '/dev/null' - let sort = has('unix') && !has('win32unix') && executable('sort') ? '| sort -s -k 5' : '' - let tag_cmds = (len(args) > 1 && type(args[0]) != type({})) ? remove(args, 0) : [ - \ printf('ctags -f - --sort=yes --excmd=number --language-force=%s %s 2> %s %s', get({ 'cpp': 'c++' }, &filetype, &filetype), escaped, null, sort), - \ printf('ctags -f - --sort=yes --excmd=number %s 2> %s %s', escaped, null, sort)] - if type(tag_cmds) != type([]) - let tag_cmds = [tag_cmds] - endif - try - return s:fzf('btags', { - \ 'source': s:btags_source(tag_cmds), - \ 'sink*': s:function('s:btags_sink'), - \ 'options': s:reverse_list(['-m', '-d', '\t', '--with-nth', '1,4..', '-n', '1', '--prompt', 'BTags> ', '--query', a:query, '--preview-window', '+{3}-/2'])}, args) - catch - return s:warn(v:exception) - endtry -endfunction - -" ------------------------------------------------------------------ -" Tags -" ------------------------------------------------------------------ -function! s:tags_sink(lines) - if len(a:lines) < 2 - return - endif - normal! m' - let qfl = [] - let cmd = s:action_for(a:lines[0], 'e') - try - let [magic, &magic, wrapscan, &wrapscan, acd, &acd] = [&magic, 0, &wrapscan, 1, &acd, 0] - for line in a:lines[1:] - try - let parts = split(line, '\t\zs') - let excmd = matchstr(join(parts[2:-2], '')[:-2], '^.\{-}\ze;\?"\t') - let base = fnamemodify(parts[-1], ':h') - let relpath = parts[1][:-2] - let abspath = relpath =~ (s:is_win ? '^[A-Z]:\' : '^/') ? relpath : join([base, relpath], '/') - call s:open(cmd, expand(abspath, 1)) - silent execute excmd - call add(qfl, {'filename': expand('%'), 'lnum': line('.'), 'text': getline('.')}) - catch /^Vim:Interrupt$/ - break - catch - call s:warn(v:exception) - endtry - endfor - finally - let [&magic, &wrapscan, &acd] = [magic, wrapscan, acd] - endtry - call s:fill_quickfix(qfl, 'clast') - normal! zvzz -endfunction - -function! fzf#vim#tags(query, ...) - if !executable('perl') - return s:warn('Tags command requires perl') - endif - if empty(tagfiles()) - call inputsave() - echohl WarningMsg - let gen = input('tags not found. Generate? (y/N) ') - echohl None - call inputrestore() - redraw - if gen =~? '^y' - call s:warn('Preparing tags') - call system(get(g:, 'fzf_tags_command', 'ctags -R'.(s:is_win ? ' --output-format=e-ctags' : ''))) - if empty(tagfiles()) - return s:warn('Failed to create tags') - endif - else - return s:warn('No tags found') - endif - endif - - let tagfiles = tagfiles() - let v2_limit = 1024 * 1024 * 200 - for tagfile in tagfiles - let v2_limit -= getfsize(tagfile) - if v2_limit < 0 - break - endif - endfor - let opts = v2_limit < 0 ? ['--algo=v1'] : [] - - return s:fzf('tags', { - \ 'source': 'perl '.fzf#shellescape(s:bin.tags).' '.join(map(tagfiles, 'fzf#shellescape(fnamemodify(v:val, ":p"))')), - \ 'sink*': s:function('s:tags_sink'), - \ 'options': extend(opts, ['--nth', '1..2', '-m', '-d', '\t', '--tiebreak=begin', '--prompt', 'Tags> ', '--query', a:query])}, a:000) -endfunction - -" ------------------------------------------------------------------ -" Snippets (UltiSnips) -" ------------------------------------------------------------------ -function! s:inject_snippet(line) - let snip = split(a:line, "\t")[0] - execute 'normal! a'.s:strip(snip)."\=UltiSnips#ExpandSnippet()\" -endfunction - -function! fzf#vim#snippets(...) - if !exists(':UltiSnipsEdit') - return s:warn('UltiSnips not found') - endif - let list = UltiSnips#SnippetsInCurrentScope() - if empty(list) - return s:warn('No snippets available here') - endif - let aligned = sort(s:align_lists(items(list))) - let colored = map(aligned, 's:yellow(v:val[0])."\t".v:val[1]') - return s:fzf('snippets', { - \ 'source': colored, - \ 'options': '--ansi --tiebreak=index +m -n 1,.. -d "\t"', - \ 'sink': s:function('s:inject_snippet')}, a:000) -endfunction - -" ------------------------------------------------------------------ -" Commands -" ------------------------------------------------------------------ -let s:nbs = nr2char(0xa0) - -function! s:format_cmd(line) - return substitute(a:line, '\C \([A-Z]\S*\) ', - \ '\=s:nbs.s:yellow(submatch(1), "Function").s:nbs', '') -endfunction - -function! s:command_sink(lines) - if len(a:lines) < 2 - return - endif - let cmd = matchstr(a:lines[1], s:nbs.'\zs\S*\ze'.s:nbs) - if empty(a:lines[0]) - call feedkeys(':'.cmd.(a:lines[1][0] == '!' ? '' : ' '), 'n') - else - call feedkeys(':'.cmd."\", 'n') - endif -endfunction - -let s:fmt_excmd = ' '.s:blue('%-38s', 'Statement').'%s' - -function! s:format_excmd(ex) - let match = matchlist(a:ex, '^|:\(\S\+\)|\s*\S*\(.*\)') - return printf(s:fmt_excmd, s:nbs.match[1].s:nbs, s:strip(match[2])) -endfunction - -function! s:excmds() - let help = globpath($VIMRUNTIME, 'doc/index.txt') - if empty(help) - return [] - endif - - let commands = [] - let command = '' - for line in readfile(help) - if line =~ '^|:[^|]' - if !empty(command) - call add(commands, s:format_excmd(command)) - endif - let command = line - elseif line =~ '^\s\+\S' && !empty(command) - let command .= substitute(line, '^\s*', ' ', '') - elseif !empty(commands) && line =~ '^\s*$' - break - endif - endfor - if !empty(command) - call add(commands, s:format_excmd(command)) - endif - return commands -endfunction - -function! fzf#vim#commands(...) - redir => cout - silent command - redir END - let list = split(cout, "\n") - return s:fzf('commands', { - \ 'source': extend(extend(list[0:0], map(list[1:], 's:format_cmd(v:val)')), s:excmds()), - \ 'sink*': s:function('s:command_sink'), - \ 'options': '--ansi --expect '.get(g:, 'fzf_commands_expect', 'ctrl-x'). - \ ' --tiebreak=index --header-lines 1 -x --prompt "Commands> " -n2,3,2..3 -d'.s:nbs}, a:000) -endfunction - -" ------------------------------------------------------------------ -" Marks -" ------------------------------------------------------------------ -function! s:format_mark(line) - return substitute(a:line, '\S', '\=s:yellow(submatch(0), "Number")', '') -endfunction - -function! s:mark_sink(lines) - if len(a:lines) < 2 - return - endif - let cmd = s:action_for(a:lines[0]) - if !empty(cmd) - execute 'silent' cmd - endif - execute 'normal! `'.matchstr(a:lines[1], '\S').'zz' -endfunction - -function! fzf#vim#marks(...) - redir => cout - silent marks - redir END - let list = split(cout, "\n") - return s:fzf('marks', { - \ 'source': extend(list[0:0], map(list[1:], 's:format_mark(v:val)')), - \ 'sink*': s:function('s:mark_sink'), - \ 'options': '+m -x --ansi --tiebreak=index --header-lines 1 --tiebreak=begin --prompt "Marks> "'}, a:000) -endfunction - -" ------------------------------------------------------------------ -" Help tags -" ------------------------------------------------------------------ -function! s:helptag_sink(line) - let [tag, file, path] = split(a:line, "\t")[0:2] - let rtp = fnamemodify(path, ':p:h:h') - if stridx(&rtp, rtp) < 0 - execute 'set rtp+='.s:escape(rtp) - endif - execute 'help' tag -endfunction - -function! fzf#vim#helptags(...) - if !executable('grep') || !executable('perl') - return s:warn('Helptags command requires grep and perl') - endif - let sorted = sort(split(globpath(&runtimepath, 'doc/tags', 1), '\n')) - let tags = exists('*uniq') ? uniq(sorted) : fzf#vim#_uniq(sorted) - - if exists('s:helptags_script') - silent! call delete(s:helptags_script) - endif - let s:helptags_script = tempname() - - call writefile(['/('.(s:is_win ? '^[A-Z]:[\/\\].*?[^:]' : '.*?').'):(.*?)\t(.*?)\t(.*)/; printf(qq('.s:green('%-40s', 'Label').'\t%s\t%s\t%s\n), $2, $3, $1, $4)'], s:helptags_script) - return s:fzf('helptags', { - \ 'source': 'grep --with-filename ".*" '.join(map(tags, 'fzf#shellescape(v:val)')). - \ ' | perl -n '.fzf#shellescape(s:helptags_script).' | sort', - \ 'sink': s:function('s:helptag_sink'), - \ 'options': ['--ansi', '+m', '--tiebreak=begin', '--with-nth', '..3']}, a:000) -endfunction - -" ------------------------------------------------------------------ -" File types -" ------------------------------------------------------------------ -function! fzf#vim#filetypes(...) - return s:fzf('filetypes', { - \ 'source': fzf#vim#_uniq(sort(map(split(globpath(&rtp, 'syntax/*.vim'), '\n'), - \ 'fnamemodify(v:val, ":t:r")'))), - \ 'sink': 'setf', - \ 'options': '+m --prompt="File types> "' - \}, a:000) -endfunction - -" ------------------------------------------------------------------ -" Windows -" ------------------------------------------------------------------ -function! s:format_win(tab, win, buf) - let modified = getbufvar(a:buf, '&modified') - let name = bufname(a:buf) - let name = empty(name) ? '[No Name]' : name - let active = tabpagewinnr(a:tab) == a:win - return (active? s:blue('> ', 'Operator') : ' ') . name . (modified? s:red(' [+]', 'Exception') : '') -endfunction - -function! s:windows_sink(line) - let list = matchlist(a:line, '^ *\([0-9]\+\) *\([0-9]\+\)') - call s:jump(list[1], list[2]) -endfunction - -function! fzf#vim#windows(...) - let lines = [] - for t in range(1, tabpagenr('$')) - let buffers = tabpagebuflist(t) - for w in range(1, len(buffers)) - call add(lines, - \ printf('%s %s %s', - \ s:yellow(printf('%3d', t), 'Number'), - \ s:cyan(printf('%3d', w), 'String'), - \ s:format_win(t, w, buffers[w-1]))) - endfor - endfor - return s:fzf('windows', { - \ 'source': extend(['Tab Win Name'], lines), - \ 'sink': s:function('s:windows_sink'), - \ 'options': '+m --ansi --tiebreak=begin --header-lines=1'}, a:000) -endfunction - -" ------------------------------------------------------------------ -" Commits / BCommits -" ------------------------------------------------------------------ -function! s:yank_to_register(data) - let @" = a:data - silent! let @* = a:data - silent! let @+ = a:data -endfunction - -function! s:commits_sink(lines) - if len(a:lines) < 2 - return - endif - - let pat = '[0-9a-f]\{7,9}' - - if a:lines[0] == 'ctrl-y' - let hashes = join(filter(map(a:lines[1:], 'matchstr(v:val, pat)'), 'len(v:val)')) - return s:yank_to_register(hashes) - end - - let diff = a:lines[0] == 'ctrl-d' - let cmd = s:action_for(a:lines[0], 'e') - let buf = bufnr('') - for idx in range(1, len(a:lines) - 1) - let sha = matchstr(a:lines[idx], pat) - if !empty(sha) - if diff - if idx > 1 - execute 'tab sb' buf - endif - execute 'Gdiff' sha - else - " Since fugitive buffers are unlisted, we can't keep using 'e' - let c = (cmd == 'e' && idx > 1) ? 'tab split' : cmd - execute c FugitiveFind(sha) - endif - endif - endfor -endfunction - -function! s:commits(range, buffer_local, args) - let s:git_root = s:get_git_root('') - if empty(s:git_root) - return s:warn('Not in git repository') - endif - - let prefix = 'git -C ' . fzf#shellescape(s:git_root) . ' ' - let source = prefix . 'log '.get(g:, 'fzf_commits_log_options', '--color=always '.fzf#shellescape('--format=%C(auto)%h%d %s %C(green)%cr')) - let current = expand('%:p') - let managed = 0 - if !empty(current) - call system(prefix . 'show '.fzf#shellescape(current).' 2> '.(s:is_win ? 'nul' : '/dev/null')) - let managed = !v:shell_error - endif - - if len(a:range) || a:buffer_local - if !managed - return s:warn('The current buffer is not in the working tree') - endif - let source .= len(a:range) - \ ? printf(' -L %d,%d:%s --no-patch', a:range[0], a:range[1], fzf#shellescape(current)) - \ : (' --follow '.fzf#shellescape(current)) - let command = 'BCommits' - else - let source .= ' --graph' - let command = 'Commits' - endif - - let expect_keys = join(keys(get(g:, 'fzf_action', s:default_action)), ',') - let options = { - \ 'source': source, - \ 'sink*': s:function('s:commits_sink'), - \ 'options': s:reverse_list(['--ansi', '--multi', '--tiebreak=index', - \ '--inline-info', '--prompt', command.'> ', '--bind=ctrl-s:toggle-sort', - \ '--header', ':: Press '.s:magenta('CTRL-S', 'Special').' to toggle sort, '.s:magenta('CTRL-Y', 'Special').' to yank commit hashes', - \ '--expect=ctrl-y,'.expect_keys]) - \ } - - if a:buffer_local - let options.options[-2] .= ', '.s:magenta('CTRL-D', 'Special').' to diff' - let options.options[-1] .= ',ctrl-d' - endif - - if !s:is_win && &columns > s:wide - let suffix = executable('delta') ? '| delta --width $FZF_PREVIEW_COLUMNS' : '' - let orderfile = tempname() - call writefile([current[len(s:git_root)+1:]], orderfile) - call extend(options.options, - \ ['--preview', 'echo {} | grep -o "[a-f0-9]\{7,\}" | head -1 | xargs ' . prefix . 'show -O'.fzf#shellescape(orderfile).' --format=format: --color=always ' . suffix]) - endif - - return s:fzf(a:buffer_local ? 'bcommits' : 'commits', options, a:args) -endfunction - -" Heuristically determine if the user specified a range -function! s:given_range(line1, line2) - " 1. From visual mode - " :'<,'>Commits - " 2. From command-line - " :10,20Commits - if a:line1 == line("'<") && a:line2 == line("'>") || - \ (a:line1 != 1 || a:line2 != line('$')) - return [a:line1, a:line2] - endif - - return [] -endfunction - -function! fzf#vim#commits(...) range - if exists('b:fzf_winview') - call winrestview(b:fzf_winview) - unlet b:fzf_winview - endif - return s:commits(s:given_range(a:firstline, a:lastline), 0, a:000) -endfunction - -function! fzf#vim#buffer_commits(...) range - if exists('b:fzf_winview') - call winrestview(b:fzf_winview) - unlet b:fzf_winview - endif - return s:commits(s:given_range(a:firstline, a:lastline), 1, a:000) -endfunction - -" ------------------------------------------------------------------ -" fzf#vim#maps(mode, opts[with count and op]) -" ------------------------------------------------------------------ -function! s:align_pairs(list) - let maxlen = 0 - let pairs = [] - for elem in a:list - let match = matchlist(elem, '^\(\S*\)\s*\(.*\)$') - let [_, k, v] = match[0:2] - let maxlen = max([maxlen, len(k)]) - call add(pairs, [k, substitute(v, '^\*\?[@ ]\?', '', '')]) - endfor - let maxlen = min([maxlen, 35]) - return map(pairs, "printf('%-'.maxlen.'s', v:val[0]).' '.v:val[1]") -endfunction - -function! s:highlight_keys(str) - return substitute( - \ substitute(a:str, '<[^ >]\+>', s:yellow('\0', 'Special'), 'g'), - \ '', s:blue('', 'SpecialKey'), 'g') -endfunction - -function! s:key_sink(line) - let key = matchstr(a:line, '^\S*') - redraw - call feedkeys(s:map_gv.s:map_cnt.s:map_reg, 'n') - call feedkeys(s:map_op. - \ substitute(key, '<[^ >]\+>', '\=eval("\"\\".submatch(0)."\"")', 'g')) -endfunction - -function! fzf#vim#maps(mode, ...) - let s:map_gv = a:mode == 'x' ? 'gv' : '' - let s:map_cnt = v:count == 0 ? '' : v:count - let s:map_reg = empty(v:register) ? '' : ('"'.v:register) - let s:map_op = a:mode == 'o' ? v:operator : '' - - redir => cout - silent execute 'verbose' a:mode.'map' - redir END - let list = [] - let curr = '' - for line in split(cout, "\n") - if line =~ "^\t" - let src = "\t".substitute(matchstr(line, '/\zs[^/\\]*\ze$'), ' [^ ]* ', ':', '') - call add(list, printf('%s %s', curr, s:green(src, 'Comment'))) - let curr = '' - else - if !empty(curr) - call add(list, curr) - endif - let curr = line[3:] - endif - endfor - if !empty(curr) - call add(list, curr) - endif - let aligned = s:align_pairs(list) - let sorted = sort(aligned) - let colored = map(sorted, 's:highlight_keys(v:val)') - let pcolor = a:mode == 'x' ? 9 : a:mode == 'o' ? 10 : 12 - return s:fzf('maps', { - \ 'source': colored, - \ 'sink': s:function('s:key_sink'), - \ 'options': '--prompt "Maps ('.a:mode.')> " --ansi --no-hscroll --nth 1,.. --color prompt:'.pcolor}, a:000) -endfunction - -" ---------------------------------------------------------------------------- -" fzf#vim#complete - completion helper -" ---------------------------------------------------------------------------- -inoremap (-fzf-complete-trigger) :call complete_trigger() - -function! s:pluck(dict, key, default) - return has_key(a:dict, a:key) ? remove(a:dict, a:key) : a:default -endfunction - -function! s:complete_trigger() - let opts = copy(s:opts) - call s:prepend_opts(opts, ['+m', '-q', s:query]) - let opts['sink*'] = s:function('s:complete_insert') - let s:reducer = s:pluck(opts, 'reducer', s:function('s:first_line')) - call fzf#run(opts) -endfunction - -" The default reducer -function! s:first_line(lines) - return a:lines[0] -endfunction - -function! s:complete_insert(lines) - if empty(a:lines) - return - endif - - let chars = strchars(s:query) - if chars == 0 | let del = '' - elseif chars == 1 | let del = '"_x' - else | let del = (chars - 1).'"_dvh' - endif - - let data = call(s:reducer, [a:lines]) - let ve = &ve - set ve= - execute 'normal!' ((s:eol || empty(chars)) ? '' : 'h').del.(s:eol ? 'a': 'i').data - let &ve = ve - if mode() =~ 't' - call feedkeys('a', 'n') - elseif has('nvim') - execute "normal! \la" - else - call feedkeys("\(-fzf-complete-finish)") - endif -endfunction - -nnoremap (-fzf-complete-finish) a -inoremap (-fzf-complete-finish) l - -function! s:eval(dict, key, arg) - if has_key(a:dict, a:key) && type(a:dict[a:key]) == s:TYPE.funcref - let ret = copy(a:dict) - let ret[a:key] = call(a:dict[a:key], [a:arg]) - return ret - endif - return a:dict -endfunction - -function! fzf#vim#complete(...) - if a:0 == 0 - let s:opts = fzf#wrap() - elseif type(a:1) == s:TYPE.dict - let s:opts = copy(a:1) - elseif type(a:1) == s:TYPE.string - let s:opts = extend({'source': a:1}, get(a:000, 1, fzf#wrap())) - else - echoerr 'Invalid argument: '.string(a:000) - return '' - endif - for s in ['sink', 'sink*'] - if has_key(s:opts, s) - call remove(s:opts, s) - endif - endfor - - let eol = col('$') - let ve = &ve - set ve=all - let s:eol = col('.') == eol - let &ve = ve - - let Prefix = s:pluck(s:opts, 'prefix', '\k*$') - if col('.') == 1 - let s:query = '' - else - let full_prefix = getline('.')[0 : col('.')-2] - if type(Prefix) == s:TYPE.funcref - let s:query = call(Prefix, [full_prefix]) - else - let s:query = matchstr(full_prefix, Prefix) - endif - endif - let s:opts = s:eval(s:opts, 'source', s:query) - let s:opts = s:eval(s:opts, 'options', s:query) - let s:opts = s:eval(s:opts, 'extra_options', s:query) - if has_key(s:opts, 'extra_options') - call s:merge_opts(s:opts, remove(s:opts, 'extra_options')) - endif - if has_key(s:opts, 'options') - if type(s:opts.options) == s:TYPE.list - call add(s:opts.options, '--no-expect') - else - let s:opts.options .= ' --no-expect' - endif - endif - - call feedkeys("\(-fzf-complete-trigger)") - return '' -endfunction - -" ------------------------------------------------------------------ -let &cpo = s:cpo_save -unlet s:cpo_save diff --git a/dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim/complete.vim b/dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim/complete.vim deleted file mode 100644 index 8944b19d..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/autoload/fzf/vim/complete.vim +++ /dev/null @@ -1,164 +0,0 @@ -" Copyright (c) 2015 Junegunn Choi -" -" MIT License -" -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be -" included in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -let s:cpo_save = &cpo -set cpo&vim -let s:is_win = has('win32') || has('win64') - -function! s:extend(base, extra) - let base = copy(a:base) - if has_key(a:extra, 'options') - let extra = copy(a:extra) - let extra.extra_options = remove(extra, 'options') - return extend(base, extra) - endif - return extend(base, a:extra) -endfunction - -if v:version >= 704 - function! s:function(name) - return function(a:name) - endfunction -else - function! s:function(name) - " By Ingo Karkat - return function(substitute(a:name, '^s:', matchstr(expand(''), '\d\+_\zefunction$'), '')) - endfunction -endif - -function! fzf#vim#complete#word(...) - let sources = empty(&dictionary) ? ['/usr/share/dict/words'] : split(&dictionary, ',') - return fzf#vim#complete(s:extend({ - \ 'source': 'cat ' . join(map(sources, 'shellescape(v:val)'))}, - \ get(a:000, 0, fzf#wrap()))) -endfunction - -" ---------------------------------------------------------------------------- -" (fzf-complete-path) -" (fzf-complete-file) -" (fzf-complete-file-ag) -" ---------------------------------------------------------------------------- -function! s:file_split_prefix(prefix) - let expanded = expand(a:prefix) - let slash = (s:is_win && !&shellslash) ? '\\' : '/' - return isdirectory(expanded) ? - \ [expanded, - \ substitute(a:prefix, '[/\\]*$', slash, ''), - \ ''] : - \ [fnamemodify(expanded, ':h'), - \ substitute(fnamemodify(a:prefix, ':h'), '[/\\]*$', slash, ''), - \ fnamemodify(expanded, ':t')] -endfunction - -function! s:file_source(prefix) - let [dir, head, tail] = s:file_split_prefix(a:prefix) - return printf( - \ "cd %s && ".s:file_cmd." | sed %s", - \ fzf#shellescape(dir), fzf#shellescape('s:^:'.(empty(a:prefix) || a:prefix == tail ? '' : head).':')) -endfunction - -function! s:file_options(prefix) - let [_, head, tail] = s:file_split_prefix(a:prefix) - return ['--prompt', head, '--query', tail] -endfunction - -function! s:fname_prefix(str) - let isf = &isfname - let white = [] - let black = [] - if isf =~ ',,,' - call add(white, ',') - let isf = substitute(isf, ',,,', ',', 'g') - endif - if isf =~ ',^,,' - call add(black, ',') - let isf = substitute(isf, ',^,,', ',', 'g') - endif - - for token in split(isf, ',') - let target = white - if token[0] == '^' - let target = black - let token = token[1:] - endif - - let ends = matchlist(token, '\(.\+\)-\(.\+\)') - if empty(ends) - call add(target, token) - else - let ends = map(ends[1:2], "len(v:val) == 1 ? char2nr(v:val) : str2nr(v:val)") - for i in range(ends[0], ends[1]) - call add(target, nr2char(i)) - endfor - endif - endfor - - let prefix = a:str - for offset in range(1, len(a:str)) - let char = a:str[len(a:str) - offset] - if (char =~ '\w' || index(white, char) >= 0) && index(black, char) < 0 - continue - endif - let prefix = strpart(a:str, len(a:str) - offset + 1) - break - endfor - - return prefix -endfunction - -function! fzf#vim#complete#path(command, ...) - let s:file_cmd = a:command - return fzf#vim#complete(s:extend({ - \ 'prefix': s:function('s:fname_prefix'), - \ 'source': s:function('s:file_source'), - \ 'options': s:function('s:file_options')}, get(a:000, 0, fzf#wrap()))) -endfunction - -" ---------------------------------------------------------------------------- -" (fzf-complete-line) -" (fzf-complete-buffer-line) -" ---------------------------------------------------------------------------- -function! s:reduce_line(lines) - return join(split(a:lines[0], '\t\zs')[3:], '') -endfunction - - -function! fzf#vim#complete#line(...) - let [display_bufnames, lines] = fzf#vim#_lines(0) - let nth = display_bufnames ? 4 : 3 - return fzf#vim#complete(s:extend({ - \ 'prefix': '^.*$', - \ 'source': lines, - \ 'options': '--tiebreak=index --ansi --nth '.nth.'.. --tabstop=1', - \ 'reducer': s:function('s:reduce_line')}, get(a:000, 0, fzf#wrap()))) -endfunction - -function! fzf#vim#complete#buffer_line(...) - return fzf#vim#complete(s:extend({ - \ 'prefix': '^.*$', - \ 'source': fzf#vim#_uniq(getline(1, '$'))}, get(a:000, 0, fzf#wrap()))) -endfunction - -let &cpo = s:cpo_save -unlet s:cpo_save - diff --git a/dotfiles/.vim/plugged/fzf.vim/bin/preview.rb b/dotfiles/.vim/plugged/fzf.vim/bin/preview.rb deleted file mode 100755 index 45324215..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/bin/preview.rb +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env ruby - -puts 'preview.rb is deprecated. Use preview.sh instead.' diff --git a/dotfiles/.vim/plugged/fzf.vim/bin/preview.sh b/dotfiles/.vim/plugged/fzf.vim/bin/preview.sh deleted file mode 100755 index 994f7d6f..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/bin/preview.sh +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env bash - -REVERSE="\x1b[7m" -RESET="\x1b[m" - -if [ -z "$1" ]; then - echo "usage: $0 [--tag] FILENAME[:LINENO][:IGNORED]" - exit 1 -fi - -if [ "$1" = --tag ]; then - shift - "$(dirname "${BASH_SOURCE[0]}")/tagpreview.sh" "$@" - exit $? -fi - -IFS=':' read -r -a INPUT <<< "$1" -FILE=${INPUT[0]} -CENTER=${INPUT[1]} - -if [[ "$1" =~ ^[A-Za-z]:\\ ]]; then - FILE=$FILE:${INPUT[1]} - CENTER=${INPUT[2]} -fi - -if [[ -n "$CENTER" && ! "$CENTER" =~ ^[0-9] ]]; then - exit 1 -fi -CENTER=${CENTER/[^0-9]*/} - -# MS Win support -if [[ "$FILE" =~ '\' ]]; then - if [ -z "$MSWINHOME" ]; then - MSWINHOME="$HOMEDRIVE$HOMEPATH" - fi - if grep -qEi "(Microsoft|WSL)" /proc/version &> /dev/null ; then - MSWINHOME="${MSWINHOME//\\/\\\\}" - FILE="${FILE/#\~\\/$MSWINHOME\\}" - FILE=$(wslpath -u "$FILE") - elif [ -n "$MSWINHOME" ]; then - FILE="${FILE/#\~\\/$MSWINHOME\\}" - fi -fi - -FILE="${FILE/#\~\//$HOME/}" -if [ ! -r "$FILE" ]; then - echo "File not found ${FILE}" - exit 1 -fi - -if [ -z "$CENTER" ]; then - CENTER=0 -fi - -# Sometimes bat is installed as batcat. -if command -v batcat > /dev/null; then - BATNAME="batcat" -elif command -v bat > /dev/null; then - BATNAME="bat" -fi - -if [ -z "$FZF_PREVIEW_COMMAND" ] && [ "${BATNAME:+x}" ]; then - ${BATNAME} --style="${BAT_STYLE:-numbers}" --color=always --pager=never \ - --highlight-line=$CENTER -- "$FILE" - exit $? -fi - -FILE_LENGTH=${#FILE} -MIME=$(file --dereference --mime -- "$FILE") -if [[ "${MIME:FILE_LENGTH}" =~ binary ]]; then - echo "$MIME" - exit 0 -fi - -DEFAULT_COMMAND="highlight -O ansi -l {} || coderay {} || rougify {} || cat {}" -CMD=${FZF_PREVIEW_COMMAND:-$DEFAULT_COMMAND} -CMD=${CMD//{\}/$(printf %q "$FILE")} - -eval "$CMD" 2> /dev/null | awk "{ \ - if (NR == $CENTER) \ - { gsub(/\x1b[[0-9;]*m/, \"&$REVERSE\"); printf(\"$REVERSE%s\n$RESET\", \$0); } \ - else printf(\"$RESET%s\n\", \$0); \ - }" diff --git a/dotfiles/.vim/plugged/fzf.vim/bin/tagpreview.sh b/dotfiles/.vim/plugged/fzf.vim/bin/tagpreview.sh deleted file mode 100755 index e07f87de..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/bin/tagpreview.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/usr/bin/env bash - -REVERSE="\x1b[7m" -RESET="\x1b[m" - -if [ -z "$1" ]; then - echo "usage: $0 FILENAME:TAGFILE:EXCMD" - exit 1 -fi - -IFS=':' read -r FILE TAGFILE EXCMD <<< "$*" - -# Complete file paths which are relative to the given tag file -if [ "${FILE:0:1}" != "/" ]; then - FILE="$(dirname "${TAGFILE}")/${FILE}" -fi - -if [ ! -r "$FILE" ]; then - echo "File not found ${FILE}" - exit 1 -fi - -# If users aren't using vim, they are probably using neovim -if command -v vim > /dev/null; then - VIMNAME="vim" -elif command -v nvim > /dev/null; then - VIMNAME="nvim" -else - echo "Cannot preview tag: vim or nvim unavailable" - exit 1 -fi - -CENTER="$("${VIMNAME}" -i NONE -u NONE -e -m -s "${FILE}" \ - -c "set nomagic" \ - -c "${EXCMD}" \ - -c 'let l=line(".") | new | put =l | print | qa!')" || return - -START_LINE="$(( CENTER - FZF_PREVIEW_LINES / 2 ))" -if (( START_LINE <= 0 )); then - START_LINE=1 -fi -END_LINE="$(( START_LINE + FZF_PREVIEW_LINES - 1 ))" - -# Sometimes bat is installed as batcat. -if command -v batcat > /dev/null; then - BATNAME="batcat" -elif command -v bat > /dev/null; then - BATNAME="bat" -fi - -if [ -z "$FZF_PREVIEW_COMMAND" ] && [ "${BATNAME:+x}" ]; then - ${BATNAME} --style="${BAT_STYLE:-numbers}" \ - --color=always \ - --pager=never \ - --wrap=never \ - --terminal-width="${FZF_PREVIEW_COLUMNS}" \ - --line-range="${START_LINE}:${END_LINE}" \ - --highlight-line="${CENTER}" \ - "$FILE" - exit $? -fi - -DEFAULT_COMMAND="highlight -O ansi -l {} || coderay {} || rougify {} || cat {}" -CMD=${FZF_PREVIEW_COMMAND:-$DEFAULT_COMMAND} -CMD=${CMD//{\}/$(printf %q "$FILE")} - -eval "$CMD" 2> /dev/null | awk "{ \ - if (NR >= $START_LINE && NR <= $END_LINE) { \ - if (NR == $CENTER) \ - { gsub(/\x1b[[0-9;]*m/, \"&$REVERSE\"); printf(\"$REVERSE%s\n$RESET\", \$0); } \ - else printf(\"$RESET%s\n\", \$0); \ - } \ - }" diff --git a/dotfiles/.vim/plugged/fzf.vim/bin/tags.pl b/dotfiles/.vim/plugged/fzf.vim/bin/tags.pl deleted file mode 100755 index 4208c165..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/bin/tags.pl +++ /dev/null @@ -1,15 +0,0 @@ -#!/usr/bin/env perl - -use strict; - -foreach my $file (@ARGV) { - open my $lines, $file; - while (<$lines>) { - unless (/^\!/) { - s/^[^\t]*/sprintf("%-24s", $&)/e; - s/$/\t$file/; - print; - } - } - close $lines; -} diff --git a/dotfiles/.vim/plugged/fzf.vim/doc/fzf-vim.txt b/dotfiles/.vim/plugged/fzf.vim/doc/fzf-vim.txt deleted file mode 100644 index 188abd09..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/doc/fzf-vim.txt +++ /dev/null @@ -1,497 +0,0 @@ -fzf-vim.txt fzf-vim Last change: May 24 2021 -FZF-VIM - TABLE OF CONTENTS *fzf-vim* *fzf-vim-toc* -============================================================================== - - fzf :heart: vim - Rationale - Why you should use fzf on Vim - Installation - Using vim-plug - Dependencies - Commands - Customization - Global options - Preview window - Command-local options - Advanced customization - Vim functions - Example: Customizing Files command - Example: git grep wrapper - Example: Rg command with preview window - Example: Advanced ripgrep integration - Mappings - Completion functions - Custom completion - Reducer example - Status line of terminal buffer - Hide statusline - Custom statusline - License - -FZF :HEART: VIM *fzf-vim-fzfheart-vim* -============================================================================== - -Things you can do with {fzf}{1} and Vim. - - {1} https://github.com/junegunn/fzf - - -RATIONALE *fzf-vim-rationale* -============================================================================== - -{fzf}{1} in itself is not a Vim plugin, and the official repository only -provides the {basic wrapper function}{2} for Vim and it's up to the users to -write their own Vim commands with it. However, I've learned that many users of -fzf are not familiar with Vimscript and are looking for the "default" -implementation of the features they can find in the alternative Vim plugins. - -This repository is a bundle of fzf-based commands and mappings extracted from -my {.vimrc}{3} to address such needs. They are not designed to be flexible or -configurable, and there's no guarantee of backward-compatibility. - - {1} https://github.com/junegunn/fzf - {2} https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzfrun - {3} https://github.com/junegunn/dotfiles/blob/master/vimrc - - -WHY YOU SHOULD USE FZF ON VIM *fzf-vim-why-you-should-use-fzf-on-vim* -============================================================================== - -Because you can and you love fzf. - -fzf runs asynchronously and can be orders of magnitude faster than similar Vim -plugins. However, the benefit may not be noticeable if the size of the input -is small, which is the case for many of the commands provided here. -Nevertheless I wrote them anyway since it's really easy to implement custom -selector with fzf. - - -INSTALLATION *fzf-vim-installation* -============================================================================== - -fzf.vim depends on the basic Vim plugin of {the main fzf repository}{1}, which -means you need to set up both "fzf" and "fzf.vim" on Vim. To learn more about -fzf/Vim integration, see {README-VIM}{4}. - - {1} https://github.com/junegunn/fzf - {4} https://github.com/junegunn/fzf/blob/master/README-VIM.md - - -< Using vim-plug >____________________________________________________________~ - *fzf-vim-using-vim-plug* -> - Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } - Plug 'junegunn/fzf.vim' -< -`fzf#install()` makes sure that you have the latest binary, but it's optional, -so you can omit it if you use a plugin manager that doesn't support hooks. - - -< Dependencies >______________________________________________________________~ - *fzf-vim-dependencies* - - - {fzf}{1} 0.23.0 or above - - For syntax-highlighted preview, install {bat}{5} - - If {delta}{6} is available, `GF?`, `Commits` and `BCommits` will use it to - format `git diff` output. - - `Ag` requires {The Silver Searcher (ag)}{7} - - `Rg` requires {ripgrep (rg)}{8} - - `Tags` and `Helptags` require Perl - - {1} https://github.com/junegunn/fzf - {5} https://github.com/sharkdp/bat - {6} https://github.com/dandavison/delta - {7} https://github.com/ggreer/the_silver_searcher - {8} https://github.com/BurntSushi/ripgrep - - -COMMANDS *fzf-vim-commands* -============================================================================== - - *:Files* *:GFiles* *:Buffers* *:Colors* *:Ag* *:Rg* *:Lines* *:BLines* *:Tags* *:BTags* *:Marks* - *:Windows* *:Locate* *:History* *:Snippets* *:Commits* *:BCommits* *:Commands* *:Maps* - *:Helptags* *:Filetypes* - - ------------------+----------------------------------------------------------------------- - Command | List ~ - ------------------+----------------------------------------------------------------------- - `:Files [PATH]` | Files (runs `$FZF_DEFAULT_COMMAND` if defined) - `:GFiles [OPTS]` | Git files ( `git ls-files` ) - `:GFiles?` | Git files ( `git status` ) - `:Buffers` | Open buffers - `:Colors` | Color schemes - `:Ag [PATTERN]` | {ag}{7} search result ( `ALT-A` to select all, `ALT-D` to deselect all) - `:Rg [PATTERN]` | {rg}{8} search result ( `ALT-A` to select all, `ALT-D` to deselect all) - `:Lines [QUERY]` | Lines in loaded buffers - `:BLines [QUERY]` | Lines in the current buffer - `:Tags [QUERY]` | Tags in the project ( `ctags -R` ) - `:BTags [QUERY]` | Tags in the current buffer - `:Marks` | Marks - `:Windows` | Windows - `:Locate PATTERN` | `locate` command output - `:History` | `v:oldfiles` and open buffers - `:History:` | Command history - `:History/` | Search history - `:Snippets` | Snippets ({UltiSnips}{9}) - `:Commits` | Git commits (requires {fugitive.vim}{10}) - `:BCommits` | Git commits for the current buffer; visual-select lines to track changes in the range - `:Commands` | Commands - `:Maps` | Normal mode mappings - `:Helptags` | Help tags [1] - `:Filetypes` | File types - ------------------+----------------------------------------------------------------------- - - *g:fzf_command_prefix* - - - Most commands support CTRL-T / CTRL-X / CTRL-V key bindings to open in a new - tab, a new split, or in a new vertical split - - Bang-versions of the commands (e.g. `Ag!`) will open fzf in fullscreen - - You can set `g:fzf_command_prefix` to give the same prefix to the commands - - e.g. `let g:fzf_command_prefix = 'Fzf'` and you have `FzfFiles`, etc. - -(1: `Helptags` will shadow the command of the same name from {pathogen}{11}. -But its functionality is still available via `call pathogen#helptags()`.) - - {7} https://github.com/ggreer/the_silver_searcher - {8} https://github.com/BurntSushi/ripgrep - {9} https://github.com/SirVer/ultisnips - {10} https://github.com/tpope/vim-fugitive - {11} https://github.com/tpope/vim-pathogen - - -CUSTOMIZATION *fzf-vim-customization* -============================================================================== - - -< Global options >____________________________________________________________~ - *fzf-vim-global-options* - -Every command in fzf.vim internally calls `fzf#wrap` function of the main -repository which supports a set of global option variables. So please read -through {README-VIM}{4} to learn more about them. - - {4} https://github.com/junegunn/fzf/blob/master/README-VIM.md - - -Preview window~ - *fzf-vim-preview-window* - - *g:fzf_preview_window* - -Some commands will show the preview window on the right. You can customize the -behavior with `g:fzf_preview_window`. Here are some examples: -> - " This is the default option: - " - Preview window on the right with 50% width - " - CTRL-/ will toggle preview window. - " - Note that this array is passed as arguments to fzf#vim#with_preview function. - " - To learn more about preview window options, see `--preview-window` section of `man fzf`. - let g:fzf_preview_window = ['right,50%', 'ctrl-/'] - - " Preview window is hidden by default. You can toggle it with ctrl-/. - " It will show on the right with 50% width, but if the width is smaller - " than 70 columns, it will show above the candidate list - let g:fzf_preview_window = ['hidden,right,50%,<70(up,40%)', 'ctrl-/'] - - " Empty value to disable preview window altogether - let g:fzf_preview_window = [] -< - -< Command-local options >_____________________________________________________~ - *fzf-vim-command-local-options* - -A few commands in fzf.vim can be customized with global option variables shown -below. - - *g:fzf_buffers_jump* *g:fzf_commits_log_options* *g:fzf_tags_command* - *g:fzf_commands_expect* -> - " [Buffers] Jump to the existing window if possible - let g:fzf_buffers_jump = 1 - - " [[B]Commits] Customize the options used by 'git log': - let g:fzf_commits_log_options = '--graph --color=always --format="%C(auto)%h%d %s %C(black)%C(bold)%cr"' - - " [Tags] Command to generate tags file - let g:fzf_tags_command = 'ctags -R' - - " [Commands] --expect expression for directly executing the command - let g:fzf_commands_expect = 'alt-enter,ctrl-x' -< - -< Advanced customization >____________________________________________________~ - *fzf-vim-advanced-customization* - - -Vim functions~ - *fzf-vim-vim-functions* - -Each command in fzf.vim is backed by a Vim function. You can override a -command or define a variation of it by calling its corresponding function. - - ----------+--------------------------------------------------------------------------- - Command | Vim function ~ - ----------+--------------------------------------------------------------------------- - `Files` | `fzf#vim#files(dir, [spec dict], [fullscreen bool])` - `GFiles` | `fzf#vim#gitfiles(git_options, [spec dict], [fullscreen bool])` - `GFiles?` | `fzf#vim#gitfiles('?', [spec dict], [fullscreen bool])` - `Buffers` | `fzf#vim#buffers([spec dict], [fullscreen bool])` - `Colors` | `fzf#vim#colors([spec dict], [fullscreen bool])` - `Rg` | `fzf#vim#grep(command, [has_column bool], [spec dict], [fullscreen bool])` - ... | ... - ----------+--------------------------------------------------------------------------- - -(We can see that the last two optional arguments of each function are -identical. They are directly passed to `fzf#wrap` function. If you haven't -read {README-VIM}{4} already, please read it before proceeding.) - - {4} https://github.com/junegunn/fzf/blob/master/README-VIM.md - - -Example: Customizing Files command~ - *fzf-vim-example-customizing-files-command* - -This is the default definition of `Files` command: -> - command! -bang -nargs=? -complete=dir Files call fzf#vim#files(, 0) -< -Let's say you want to a variation of it called `ProjectFiles` that only -searches inside `~/projects` directory. Then you can do it like this: -> - command! -bang ProjectFiles call fzf#vim#files('~/projects', 0) -< -Or, if you want to override the command with different fzf options, just pass -a custom spec to the function. -> - command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, {'options': ['--layout=reverse', '--info=inline']}, 0) -< -Want a preview window? -> - command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, {'options': ['--layout=reverse', '--info=inline', '--preview', 'cat {}']}, 0) -< -It kind of works, but you probably want a nicer previewer program than `cat`. -fzf.vim ships {a versatile preview script}{12} you can readily use. It -internally executes {bat}{5} for syntax highlighting, so make sure to install -it. -> - command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, {'options': ['--layout=reverse', '--info=inline', '--preview', '~/.vim/plugged/fzf.vim/bin/preview.sh {}']}, 0) -< -However, it's not ideal to hard-code the path to the script which can be -different in different circumstances. So in order to make it easier to set up -the previewer, fzf.vim provides `fzf#vim#with_preview` helper function. -Similarly to `fzf#wrap`, it takes a spec dictionary and returns a copy of it -with additional preview options. -> - command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, fzf#vim#with_preview({'options': ['--layout=reverse', '--info=inline']}), 0) -< -You can just omit the spec argument if you only want the previewer. -> - command! -bang -nargs=? -complete=dir Files - \ call fzf#vim#files(, fzf#vim#with_preview(), 0) -< - {12} bin/preview.sh - {5} https://github.com/sharkdp/bat - - -Example: git grep wrapper~ - *fzf-vim-example-git-grep-wrapper* - -The following example implements `GGrep` command that works similarly to -predefined `Ag` or `Rg` using `fzf#vim#grep`. - - - The second argument to `fzf#vim#grep` is 0 (false), because `git grep` does - not print column numbers. - - We set the base directory to git root by setting `dir` attribute in spec - dictionary. - - {The preview script}{12} supports `grep` format (`FILE_PATH:LINE_NO:...`), so - we can just wrap the spec with `fzf#vim#with_preview` as before to enable - previewer. -> - command! -bang -nargs=* GGrep - \ call fzf#vim#grep( - \ 'git grep --line-number -- '.shellescape(), 0, - \ fzf#vim#with_preview({'dir': systemlist('git rev-parse --show-toplevel')[0]}), 0) -< - {12} bin/preview.sh - - -Example: Rg command with preview window~ - *fzf-vim-example-rg-command-with-preview-window* - -You can see the definition of `Rg` command with `:command Rg`. With the -information, you can redefine it with the preview window enabled. In this -case, we're only interested in setting up the preview window, so we will omit -the spec argument to `fzf#vim#preview`. -> - command! -bang -nargs=* Rg - \ call fzf#vim#grep( - \ 'rg --column --line-number --no-heading --color=always --smart-case -- '.shellescape(), 1, - \ fzf#vim#with_preview(), 0) -< - -Example: Advanced ripgrep integration~ - *fzf-vim-example-advanced-ripgrep-integration* - -In the default implementation of `Rg`, ripgrep process starts only once with -the initial query (e.g. `:Rg foo`) and fzf filters the output of the process. - -This is okay in most cases because fzf is quite performant even with millions -of lines, but we can make fzf completely delegate its search responsibliity to -ripgrep process by making it restart ripgrep whenever the query string is -updated. In this scenario, fzf becomes a simple selector interface rather than -a "fuzzy finder". - - - We will name the new command all-uppercase `RG` so we can still access the - default version. - - `--bind 'change:reload:rg ... {q}'` will make fzf restart ripgrep process - whenever the query string, denoted by `{q}`, is changed. - - With `--phony` option, fzf will no longer perform search. The query string you - type on fzf prompt is only used for restarting ripgrep process. - - Also note that we enabled previewer with `fzf#vim#with_preview`. -> - function! RipgrepFzf(query, fullscreen) - let command_fmt = 'rg --column --line-number --no-heading --color=always --smart-case -- %s || true' - let initial_command = printf(command_fmt, shellescape(a:query)) - let reload_command = printf(command_fmt, '{q}') - let spec = {'options': ['--phony', '--query', a:query, '--bind', 'change:reload:'.reload_command]} - call fzf#vim#grep(initial_command, 1, fzf#vim#with_preview(spec), a:fullscreen) - endfunction - - command! -nargs=* -bang RG call RipgrepFzf(, 0) -< - -MAPPINGS *fzf-vim-mappings* -============================================================================== - - ---------------------------------+------------------------------------------ - Mapping | Description ~ - ---------------------------------+------------------------------------------ - (fzf-maps-n) | Normal mode mappings - (fzf-maps-i) | Insert mode mappings - (fzf-maps-x) | Visual mode mappings - (fzf-maps-o) | Operator-pending mappings - (fzf-complete-word) | `cat /usr/share/dict/words` - (fzf-complete-path) | Path completion using `find` (file + dir) - (fzf-complete-file) | File completion using `find` - (fzf-complete-line) | Line completion (all open buffers) - (fzf-complete-buffer-line) | Line completion (current buffer only) - ---------------------------------+------------------------------------------ -> - " Mapping selecting mappings - nmap (fzf-maps-n) - xmap (fzf-maps-x) - omap (fzf-maps-o) - - " Insert mode completion - imap (fzf-complete-word) - imap (fzf-complete-path) - imap (fzf-complete-line) -< - -COMPLETION FUNCTIONS *fzf-vim-completion-functions* -============================================================================== - - -----------------------------------------+-------------------------------------- - Function | Description ~ - -----------------------------------------+-------------------------------------- - `fzf#vim#complete#path(command, [spec])` | Path completion - `fzf#vim#complete#word([spec])` | Word completion - `fzf#vim#complete#line([spec])` | Line completion (all open buffers) - `fzf#vim#complete#buffer_line([spec])` | Line completion (current buffer only) - -----------------------------------------+-------------------------------------- -> - " Path completion with custom source command - inoremap fzf#vim#complete#path('fd') - inoremap fzf#vim#complete#path('rg --files') - - " Word completion with custom spec with popup layout option - inoremap fzf#vim#complete#word({'window': { 'width': 0.2, 'height': 0.9, 'xoffset': 1 }}) -< - -CUSTOM COMPLETION *fzf-vim-custom-completion* -============================================================================== - -`fzf#vim#complete` is a helper function for creating custom fuzzy completion -using fzf. If the first parameter is a command string or a Vim list, it will -be used as the source. -> - " Replace the default dictionary completion with fzf-based fuzzy completion - inoremap fzf#vim#complete('cat /usr/share/dict/words') -< -For advanced uses, you can pass an options dictionary to the function. The set -of options is pretty much identical to that for `fzf#run` only with the -following exceptions: - - - `reducer` (funcref) - - Reducer transforms the output lines of fzf into a single string value - - `prefix` (string or funcref; default: `\k*$`) - - Regular expression pattern to extract the completion prefix - - Or a function to extract completion prefix - - Both `source` and `options` can be given as funcrefs that take the completion - prefix as the argument and return the final value - - `sink` or `sink*` are ignored -> - " Global line completion (not just open buffers. ripgrep required.) - inoremap fzf#vim#complete(fzf#wrap({ - \ 'prefix': '^.*$', - \ 'source': 'rg -n ^ --color always', - \ 'options': '--ansi --delimiter : --nth 3..', - \ 'reducer': { lines -> join(split(lines[0], ':\zs')[2:], '') }})) -< - -< Reducer example >___________________________________________________________~ - *fzf-vim-reducer-example* -> - function! s:make_sentence(lines) - return substitute(join(a:lines), '^.', '\=toupper(submatch(0))', '').'.' - endfunction - - inoremap fzf#vim#complete({ - \ 'source': 'cat /usr/share/dict/words', - \ 'reducer': function('make_sentence'), - \ 'options': '--multi --reverse --margin 15%,0', - \ 'left': 20}) -< - -STATUS LINE OF TERMINAL BUFFER *fzf-vim-status-line-of-terminal-buffer* -============================================================================== - -When fzf starts in a terminal buffer (see {fzf/README-VIM.md}{13}), you may -want to customize the statusline of the containing buffer. - -{13} https://github.com/junegunn/fzf/blob/master/README-VIM.md#fzf-inside-terminal-buffer - - -< Hide statusline >___________________________________________________________~ - *fzf-vim-hide-statusline* -> - autocmd! FileType fzf set laststatus=0 noshowmode noruler - \| autocmd BufLeave set laststatus=2 showmode ruler -< - -< Custom statusline >_________________________________________________________~ - *fzf-vim-custom-statusline* -> - function! s:fzf_statusline() - " Override statusline as you like - highlight fzf1 ctermfg=161 ctermbg=251 - highlight fzf2 ctermfg=23 ctermbg=251 - highlight fzf3 ctermfg=237 ctermbg=251 - setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f - endfunction - - autocmd! User FzfStatusLine call fzf_statusline() -< - -LICENSE *fzf-vim-license* -============================================================================== - -MIT - - -============================================================================== -vim:tw=78:sw=2:ts=2:ft=help:norl:nowrap: diff --git a/dotfiles/.vim/plugged/fzf.vim/plugin/fzf.vim b/dotfiles/.vim/plugged/fzf.vim/plugin/fzf.vim deleted file mode 100644 index f7ae7d11..00000000 --- a/dotfiles/.vim/plugged/fzf.vim/plugin/fzf.vim +++ /dev/null @@ -1,154 +0,0 @@ -" Copyright (c) 2015 Junegunn Choi -" -" MIT License -" -" Permission is hereby granted, free of charge, to any person obtaining -" a copy of this software and associated documentation files (the -" "Software"), to deal in the Software without restriction, including -" without limitation the rights to use, copy, modify, merge, publish, -" distribute, sublicense, and/or sell copies of the Software, and to -" permit persons to whom the Software is furnished to do so, subject to -" the following conditions: -" -" The above copyright notice and this permission notice shall be -" included in all copies or substantial portions of the Software. -" -" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -" NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -" LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -" OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -" WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -if exists('g:loaded_fzf_vim') - finish -endif -let g:loaded_fzf_vim = 1 - -let s:cpo_save = &cpo -set cpo&vim -let s:is_win = has('win32') || has('win64') - -function! s:defs(commands) - let prefix = get(g:, 'fzf_command_prefix', '') - if prefix =~# '^[^A-Z]' - echoerr 'g:fzf_command_prefix must start with an uppercase letter' - return - endif - for command in a:commands - let name = ':'.prefix.matchstr(command, '\C[A-Z]\S\+') - if 2 != exists(name) - execute substitute(command, '\ze\C[A-Z]', prefix, '') - endif - endfor -endfunction - -call s:defs([ -\'command! -bang -nargs=? -complete=dir Files call fzf#vim#files(, fzf#vim#with_preview(), 0)', -\'command! -bang -nargs=? GitFiles call fzf#vim#gitfiles(, fzf#vim#with_preview( == "?" ? { "placeholder": "" } : {}), 0)', -\'command! -bang -nargs=? GFiles call fzf#vim#gitfiles(, fzf#vim#with_preview( == "?" ? { "placeholder": "" } : {}), 0)', -\'command! -bar -bang -nargs=? -complete=buffer Buffers call fzf#vim#buffers(, fzf#vim#with_preview({ "placeholder": "{1}" }), 0)', -\'command! -bang -nargs=* Lines call fzf#vim#lines(, 0)', -\'command! -bang -nargs=* BLines call fzf#vim#buffer_lines(, 0)', -\'command! -bar -bang Colors call fzf#vim#colors(0)', -\'command! -bang -nargs=+ -complete=dir Locate call fzf#vim#locate(, fzf#vim#with_preview(), 0)', -\'command! -bang -nargs=* Ag call fzf#vim#ag(, fzf#vim#with_preview(), 0)', -\'command! -bang -nargs=* Rg call fzf#vim#grep("rg --column --line-number --no-heading --color=always --smart-case -- ".shellescape(), 1, fzf#vim#with_preview(), 0)', -\'command! -bang -nargs=* Tags call fzf#vim#tags(, fzf#vim#with_preview({ "placeholder": "--tag {2}:{-1}:{3..}" }), 0)', -\'command! -bang -nargs=* BTags call fzf#vim#buffer_tags(, fzf#vim#with_preview({ "placeholder": "{2}:{3..}" }), 0)', -\'command! -bar -bang Snippets call fzf#vim#snippets(0)', -\'command! -bar -bang Commands call fzf#vim#commands(0)', -\'command! -bar -bang Marks call fzf#vim#marks(0)', -\'command! -bar -bang Helptags call fzf#vim#helptags(fzf#vim#with_preview({ "placeholder": "--tag {2}:{3}:{4}" }), 0)', -\'command! -bar -bang Windows call fzf#vim#windows(0)', -\'command! -bar -bang -range=% Commits let b:fzf_winview = winsaveview() | ,call fzf#vim#commits(fzf#vim#with_preview({ "placeholder": "" }), 0)', -\'command! -bar -bang -range=% BCommits let b:fzf_winview = winsaveview() | ,call fzf#vim#buffer_commits(fzf#vim#with_preview({ "placeholder": "" }), 0)', -\'command! -bar -bang Maps call fzf#vim#maps("n", 0)', -\'command! -bar -bang Filetypes call fzf#vim#filetypes(0)', -\'command! -bang -nargs=* History call s:history(, fzf#vim#with_preview(), 0)']) - -function! s:history(arg, extra, bang) - let bang = a:bang || a:arg[len(a:arg)-1] == '!' - if a:arg[0] == ':' - call fzf#vim#command_history(bang) - elseif a:arg[0] == '/' - call fzf#vim#search_history(bang) - else - call fzf#vim#history(a:extra, bang) - endif -endfunction - -function! fzf#complete(...) - return call('fzf#vim#complete', a:000) -endfunction - -if (has('nvim') || has('terminal') && has('patch-8.0.995')) && (get(g:, 'fzf_statusline', 1) || get(g:, 'fzf_nvim_statusline', 1)) - function! s:fzf_restore_colors() - if exists('#User#FzfStatusLine') - doautocmd User FzfStatusLine - else - if $TERM !~ "256color" - highlight default fzf1 ctermfg=1 ctermbg=8 guifg=#E12672 guibg=#565656 - highlight default fzf2 ctermfg=2 ctermbg=8 guifg=#BCDDBD guibg=#565656 - highlight default fzf3 ctermfg=7 ctermbg=8 guifg=#D9D9D9 guibg=#565656 - else - highlight default fzf1 ctermfg=161 ctermbg=238 guifg=#E12672 guibg=#565656 - highlight default fzf2 ctermfg=151 ctermbg=238 guifg=#BCDDBD guibg=#565656 - highlight default fzf3 ctermfg=252 ctermbg=238 guifg=#D9D9D9 guibg=#565656 - endif - setlocal statusline=%#fzf1#\ >\ %#fzf2#fz%#fzf3#f - endif - endfunction - - function! s:fzf_vim_term() - if get(w:, 'airline_active', 0) - let w:airline_disabled = 1 - autocmd BufWinLeave let w:airline_disabled = 0 - endif - autocmd WinEnter,ColorScheme call s:fzf_restore_colors() - - setlocal nospell - call s:fzf_restore_colors() - endfunction - - augroup _fzf_statusline - autocmd! - autocmd FileType fzf call s:fzf_vim_term() - augroup END -endif - -if !exists('g:fzf#vim#buffers') - let g:fzf#vim#buffers = {} -endif - -augroup fzf_buffers - autocmd! - if exists('*reltimefloat') - autocmd BufWinEnter,WinEnter * let g:fzf#vim#buffers[bufnr('')] = reltimefloat(reltime()) - else - autocmd BufWinEnter,WinEnter * let g:fzf#vim#buffers[bufnr('')] = localtime() - endif - autocmd BufDelete * silent! call remove(g:fzf#vim#buffers, expand('')) -augroup END - -inoremap (fzf-complete-word) fzf#vim#complete#word() -if s:is_win - inoremap (fzf-complete-path) fzf#vim#complete#path('dir /s/b') - inoremap (fzf-complete-file) fzf#vim#complete#path('dir /s/b/a:-d') -else - inoremap (fzf-complete-path) fzf#vim#complete#path("find . -path '*/\.*' -prune -o -print \| sed '1d;s:^..::'") - inoremap (fzf-complete-file) fzf#vim#complete#path("find . -path '*/\.*' -prune -o -type f -print -o -type l -print \| sed 's:^..::'") -endif -inoremap (fzf-complete-file-ag) fzf#vim#complete#path('ag -l -g ""') -inoremap (fzf-complete-line) fzf#vim#complete#line() -inoremap (fzf-complete-buffer-line) fzf#vim#complete#buffer_line() - -nnoremap (fzf-maps-n) :call fzf#vim#maps('n', 0) -inoremap (fzf-maps-i) :call fzf#vim#maps('i', 0) -xnoremap (fzf-maps-x) :call fzf#vim#maps('x', 0) -onoremap (fzf-maps-o) :call fzf#vim#maps('o', 0) - -let &cpo = s:cpo_save -unlet s:cpo_save - diff --git a/dotfiles/.vim/plugged/fzf/.github/FUNDING.yml b/dotfiles/.vim/plugged/fzf/.github/FUNDING.yml deleted file mode 100644 index f2848951..00000000 --- a/dotfiles/.vim/plugged/fzf/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: junegunn diff --git a/dotfiles/.vim/plugged/fzf/.github/ISSUE_TEMPLATE.md b/dotfiles/.vim/plugged/fzf/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index 1ba2978c..00000000 --- a/dotfiles/.vim/plugged/fzf/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,22 +0,0 @@ - - - - -- [ ] I have read through the manual page (`man fzf`) -- [ ] I have the latest version of fzf -- [ ] I have searched through the existing issues - -## Info - -- OS - - [ ] Linux - - [ ] Mac OS X - - [ ] Windows - - [ ] Etc. -- Shell - - [ ] bash - - [ ] zsh - - [ ] fish - -## Problem / Steps to reproduce - diff --git a/dotfiles/.vim/plugged/fzf/.github/dependabot.yml b/dotfiles/.vim/plugged/fzf/.github/dependabot.yml deleted file mode 100644 index a056bba7..00000000 --- a/dotfiles/.vim/plugged/fzf/.github/dependabot.yml +++ /dev/null @@ -1,10 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "gomod" - directory: "/" - schedule: - interval: "weekly" - - package-ecosystem: "github-actions" - directory: "/" - schedule: - interval: "weekly" diff --git a/dotfiles/.vim/plugged/fzf/.github/workflows/codeql-analysis.yml b/dotfiles/.vim/plugged/fzf/.github/workflows/codeql-analysis.yml deleted file mode 100644 index 2c3e5d98..00000000 --- a/dotfiles/.vim/plugged/fzf/.github/workflows/codeql-analysis.yml +++ /dev/null @@ -1,44 +0,0 @@ -# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning -name: CodeQL - -on: - push: - branches: [ master, devel ] - pull_request: - branches: [ master ] - workflow_dispatch: - -permissions: - contents: read - -jobs: - analyze: - permissions: - actions: read # for github/codeql-action/init to get workflow details - contents: read # for actions/checkout to fetch code - security-events: write # for github/codeql-action/autobuild to send a status report - name: Analyze - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - language: ['go'] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - - - name: Autobuild - uses: github/codeql-action/autobuild@v2 - - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 diff --git a/dotfiles/.vim/plugged/fzf/.github/workflows/linux.yml b/dotfiles/.vim/plugged/fzf/.github/workflows/linux.yml deleted file mode 100644 index 5f15de43..00000000 --- a/dotfiles/.vim/plugged/fzf/.github/workflows/linux.yml +++ /dev/null @@ -1,45 +0,0 @@ ---- -name: Test fzf on Linux - -on: - push: - branches: [ master, devel ] - pull_request: - branches: [ master ] - workflow_dispatch: - -permissions: - contents: read - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up Go - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # v2 - with: - go-version: 1.19 - - - name: Setup Ruby - uses: ruby/setup-ruby@3068fa83f9cbd7ae106cac45483635a2f3a195c9 - with: - ruby-version: 3.0.0 - - - name: Install packages - run: sudo apt-get install --yes zsh fish tmux - - - name: Install Ruby gems - run: sudo gem install --no-document minitest:5.14.2 rubocop:1.0.0 rubocop-minitest:0.10.1 rubocop-performance:1.8.1 - - - name: Rubocop - run: rubocop --require rubocop-minitest --require rubocop-performance - - - name: Unit test - run: make test - - - name: Integration test - run: make install && ./install --all && LC_ALL=C tmux new-session -d && ruby test/test_go.rb --verbose diff --git a/dotfiles/.vim/plugged/fzf/.github/workflows/macos.yml b/dotfiles/.vim/plugged/fzf/.github/workflows/macos.yml deleted file mode 100644 index 880e0d1b..00000000 --- a/dotfiles/.vim/plugged/fzf/.github/workflows/macos.yml +++ /dev/null @@ -1,45 +0,0 @@ ---- -name: Test fzf on macOS - -on: - push: - branches: [ master, devel ] - pull_request: - branches: [ master ] - workflow_dispatch: - -permissions: - contents: read - -jobs: - build: - runs-on: macos-latest - steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up Go - uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # v2 - with: - go-version: 1.18 - - - name: Setup Ruby - uses: ruby/setup-ruby@3068fa83f9cbd7ae106cac45483635a2f3a195c9 - with: - ruby-version: 3.0.0 - - - name: Install packages - run: HOMEBREW_NO_INSTALL_CLEANUP=1 brew install fish zsh tmux - - - name: Install Ruby gems - run: gem install --no-document minitest:5.14.2 rubocop:1.0.0 rubocop-minitest:0.10.1 rubocop-performance:1.8.1 - - - name: Rubocop - run: rubocop --require rubocop-minitest --require rubocop-performance - - - name: Unit test - run: make test - - - name: Integration test - run: make install && ./install --all && LC_ALL=C tmux new-session -d && ruby test/test_go.rb --verbose diff --git a/dotfiles/.vim/plugged/fzf/.gitignore b/dotfiles/.vim/plugged/fzf/.gitignore deleted file mode 100644 index 8bde085a..00000000 --- a/dotfiles/.vim/plugged/fzf/.gitignore +++ /dev/null @@ -1,14 +0,0 @@ -bin/fzf -bin/fzf.exe -dist -target -pkg -Gemfile.lock -.DS_Store -doc/tags -vendor -gopath -*.zwc -fzf -tmp -*.patch diff --git a/dotfiles/.vim/plugged/fzf/.gitrepo b/dotfiles/.vim/plugged/fzf/.gitrepo deleted file mode 100644 index 0a990e0e..00000000 --- a/dotfiles/.vim/plugged/fzf/.gitrepo +++ /dev/null @@ -1,12 +0,0 @@ -; DO NOT EDIT (unless you know what you are doing) -; -; This subdirectory is a git "subrepo", and this file is maintained by the -; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme -; -[subrepo] - remote = https://github.com/junegunn/fzf.git - branch = master - commit = dad26d81dfb7393388ec31b6a4b921c4d722a95a - parent = e149692cc98af7162ec54a232e7e2c8d18565ecc - method = merge - cmdver = 0.4.3 diff --git a/dotfiles/.vim/plugged/fzf/.goreleaser.yml b/dotfiles/.vim/plugged/fzf/.goreleaser.yml deleted file mode 100644 index a90b4ddb..00000000 --- a/dotfiles/.vim/plugged/fzf/.goreleaser.yml +++ /dev/null @@ -1,123 +0,0 @@ ---- -project_name: fzf - -before: - hooks: - - go mod download - -builds: - - id: fzf-macos - binary: fzf - goos: - - darwin - goarch: - - amd64 - ldflags: - - "-s -w -X main.version={{ .Version }} -X main.revision={{ .ShortCommit }}" - hooks: - post: | - sh -c ' - cat > /tmp/fzf-gon-amd64.hcl << EOF - source = ["./dist/fzf-macos_darwin_amd64_v1/fzf"] - bundle_id = "kr.junegunn.fzf" - apple_id { - username = "junegunn.c@gmail.com" - password = "@env:AC_PASSWORD" - } - sign { - application_identity = "Developer ID Application: Junegunn Choi (Y254DRW44Z)" - } - zip { - output_path = "./dist/fzf-{{ .Version }}-darwin_amd64.zip" - } - EOF - gon /tmp/fzf-gon-amd64.hcl - ' - - - id: fzf-macos-arm - binary: fzf - goos: - - darwin - goarch: - - arm64 - ldflags: - - "-s -w -X main.version={{ .Version }} -X main.revision={{ .ShortCommit }}" - hooks: - post: | - sh -c ' - cat > /tmp/fzf-gon-arm64.hcl << EOF - source = ["./dist/fzf-macos-arm_darwin_arm64/fzf"] - bundle_id = "kr.junegunn.fzf" - apple_id { - username = "junegunn.c@gmail.com" - password = "@env:AC_PASSWORD" - } - sign { - application_identity = "Developer ID Application: Junegunn Choi (Y254DRW44Z)" - } - zip { - output_path = "./dist/fzf-{{ .Version }}-darwin_arm64.zip" - } - EOF - gon /tmp/fzf-gon-arm64.hcl - ' - - - id: fzf - goos: - - linux - - windows - - freebsd - - openbsd - goarch: - - amd64 - - arm - - arm64 - goarm: - - 5 - - 6 - - 7 - ldflags: - - "-s -w -X main.version={{ .Version }} -X main.revision={{ .ShortCommit }}" - ignore: - - goos: freebsd - goarch: arm - - goos: openbsd - goarch: arm - - goos: freebsd - goarch: arm64 - - goos: openbsd - goarch: arm64 - -archives: - - name_template: "{{ .ProjectName }}-{{ .Version }}-{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}" - builds: - - fzf - format: tar.gz - format_overrides: - - goos: windows - format: zip - files: - - non-existent* - -checksum: - extra_files: - - glob: ./dist/fzf-*darwin*.zip - -release: - github: - owner: junegunn - name: fzf - prerelease: auto - name_template: '{{ .Tag }}' - extra_files: - - glob: ./dist/fzf-*darwin*.zip - -snapshot: - name_template: "{{ .Tag }}-devel" - -changelog: - sort: asc - filters: - exclude: - - README - - test diff --git a/dotfiles/.vim/plugged/fzf/.rubocop.yml b/dotfiles/.vim/plugged/fzf/.rubocop.yml deleted file mode 100644 index c131debb..00000000 --- a/dotfiles/.vim/plugged/fzf/.rubocop.yml +++ /dev/null @@ -1,28 +0,0 @@ -Layout/LineLength: - Enabled: false -Metrics: - Enabled: false -Lint/ShadowingOuterLocalVariable: - Enabled: false -Style/MethodCallWithArgsParentheses: - Enabled: true - IgnoredMethods: - - assert - - exit - - paste - - puts - - raise - - refute - - require - - send_keys - IgnoredPatterns: - - ^assert_ - - ^refute_ -Style/NumericPredicate: - Enabled: false -Style/StringConcatenation: - Enabled: false -Style/OptionalBooleanParameter: - Enabled: false -Style/WordArray: - MinSize: 1 diff --git a/dotfiles/.vim/plugged/fzf/.tool-versions b/dotfiles/.vim/plugged/fzf/.tool-versions deleted file mode 100644 index 1799f52f..00000000 --- a/dotfiles/.vim/plugged/fzf/.tool-versions +++ /dev/null @@ -1 +0,0 @@ -golang 1.19 diff --git a/dotfiles/.vim/plugged/fzf/ADVANCED.md b/dotfiles/.vim/plugged/fzf/ADVANCED.md deleted file mode 100644 index dcff947c..00000000 --- a/dotfiles/.vim/plugged/fzf/ADVANCED.md +++ /dev/null @@ -1,609 +0,0 @@ -Advanced fzf examples -====================== - -*(Last update: 2022/08/25)* - - - -* [Introduction](#introduction) -* [Screen Layout](#screen-layout) - * [`--height`](#--height) - * [`fzf-tmux`](#fzf-tmux) - * [Popup window support](#popup-window-support) -* [Dynamic reloading of the list](#dynamic-reloading-of-the-list) - * [Updating the list of processes by pressing CTRL-R](#updating-the-list-of-processes-by-pressing-ctrl-r) - * [Toggling between data sources](#toggling-between-data-sources) -* [Ripgrep integration](#ripgrep-integration) - * [Using fzf as the secondary filter](#using-fzf-as-the-secondary-filter) - * [Using fzf as interative Ripgrep launcher](#using-fzf-as-interative-ripgrep-launcher) - * [Switching to fzf-only search mode](#switching-to-fzf-only-search-mode) - * [Switching between Ripgrep mode and fzf mode](#switching-between-ripgrep-mode-and-fzf-mode) -* [Log tailing](#log-tailing) -* [Key bindings for git objects](#key-bindings-for-git-objects) - * [Files listed in `git status`](#files-listed-in-git-status) - * [Branches](#branches) - * [Commit hashes](#commit-hashes) -* [Color themes](#color-themes) - * [Generating fzf color theme from Vim color schemes](#generating-fzf-color-theme-from-vim-color-schemes) - - - -Introduction ------------- - -fzf is an interactive [Unix filter][filter] program that is designed to be -used with other Unix tools. It reads a list of items from the standard input, -allows you to select a subset of the items, and prints the selected ones to -the standard output. You can think of it as an interactive version of *grep*, -and it's already useful even if you don't know any of its options. - -```sh -# 1. ps: Feed the list of processes to fzf -# 2. fzf: Interactively select a process using fuzzy matching algorithm -# 3. awk: Take the PID from the selected line -# 3. kill: Kill the process with the PID -ps -ef | fzf | awk '{print $2}' | xargs kill -9 -``` - -[filter]: https://en.wikipedia.org/wiki/Filter_(software) - -While the above example succinctly summarizes the fundamental concept of fzf, -you can build much more sophisticated interactive workflows using fzf once you -learn its wide variety of features. - -- To see the full list of options and features, see `man fzf` -- To see the latest additions, see [CHANGELOG.md](CHANGELOG.md) - -This document will guide you through some examples that will familiarize you -with the advanced features of fzf. - -Screen Layout -------------- - -### `--height` - -fzf by default opens in fullscreen mode, but it's not always desirable. -Oftentimes, you want to see the current context of the terminal while using -fzf. `--height` is an option for opening fzf below the cursor in -non-fullscreen mode so you can still see the previous commands and their -results above it. - -```sh -fzf --height=40% -``` - -![image](https://user-images.githubusercontent.com/700826/113379893-c184c680-93b5-11eb-9676-c7c0a2f01748.png) - -You might also want to experiment with other layout options such as -`--layout=reverse`, `--info=inline`, `--border`, `--margin`, etc. - -```sh -fzf --height=40% --layout=reverse -fzf --height=40% --layout=reverse --info=inline -fzf --height=40% --layout=reverse --info=inline --border -fzf --height=40% --layout=reverse --info=inline --border --margin=1 -fzf --height=40% --layout=reverse --info=inline --border --margin=1 --padding=1 -``` - -![image](https://user-images.githubusercontent.com/700826/113379932-dfeac200-93b5-11eb-9e28-df1a2ee71f90.png) - -*(See `Layout` section of the man page to see the full list of options)* - -But you definitely don't want to repeat `--height=40% --layout=reverse ---info=inline --border --margin=1 --padding=1` every time you use fzf. You -could write a wrapper script or shell alias, but there is an easier option. -Define `$FZF_DEFAULT_OPTS` like so: - -```sh -export FZF_DEFAULT_OPTS="--height=40% --layout=reverse --info=inline --border --margin=1 --padding=1" -``` - -### `fzf-tmux` - -Before fzf had `--height` option, we would open fzf in a tmux split pane not -to take up the whole screen. This is done using `fzf-tmux` script. - -```sh -# Open fzf on a tmux split pane below the current pane. -# Takes the same set of options. -fzf-tmux --layout=reverse -``` - -![image](https://user-images.githubusercontent.com/700826/113379973-f1cc6500-93b5-11eb-8860-c9bc4498aadf.png) - -The limitation of `fzf-tmux` is that it only works when you're on tmux unlike -`--height` option. But the advantage of it is that it's more flexible. -(See `man fzf-tmux` for available options.) - -```sh -# On the right (50%) -fzf-tmux -r - -# On the left (30%) -fzf-tmux -l30% - -# Above the cursor -fzf-tmux -u30% -``` - -![image](https://user-images.githubusercontent.com/700826/113379983-fa24a000-93b5-11eb-93eb-8a3d39b2f163.png) - -![image](https://user-images.githubusercontent.com/700826/113380001-0577cb80-93b6-11eb-95d0-2ba453866882.png) - -![image](https://user-images.githubusercontent.com/700826/113380040-1d4f4f80-93b6-11eb-9bef-737fb120aafe.png) - -#### Popup window support - -But here's the really cool part; tmux 3.2 added support for popup windows. So -you can open fzf in a popup window, which is quite useful if you frequently -use split panes. - -```sh -# Open tmux in a tmux popup window (default size: 50% of the screen) -fzf-tmux -p - -# 80% width, 60% height -fzf-tmux -p 80%,60% -``` - -![image](https://user-images.githubusercontent.com/700826/113380106-4a9bfd80-93b6-11eb-8cee-aeb1c4ce1a1f.png) - -> You might also want to check out my tmux plugins which support this popup -> window layout. -> -> - https://github.com/junegunn/tmux-fzf-url -> - https://github.com/junegunn/tmux-fzf-maccy - -Dynamic reloading of the list ------------------------------ - -fzf can dynamically update the candidate list using an arbitrary program with -`reload` bindings (The design document for `reload` can be found -[here][reload]). - -[reload]: https://github.com/junegunn/fzf/issues/1750 - -### Updating the list of processes by pressing CTRL-R - -This example shows how you can set up a binding for dynamically updating the -list without restarting fzf. - -```sh -(date; ps -ef) | - fzf --bind='ctrl-r:reload(date; ps -ef)' \ - --header=$'Press CTRL-R to reload\n\n' --header-lines=2 \ - --preview='echo {}' --preview-window=down,3,wrap \ - --layout=reverse --height=80% | awk '{print $2}' | xargs kill -9 -``` - -![image](https://user-images.githubusercontent.com/700826/113465047-200c7c00-946c-11eb-918c-268f37a900c8.png) - -- The initial command is `(date; ps -ef)`. It prints the current date and - time, and the list of the processes. -- With `--header` option, you can show any message as the fixed header. -- To disallow selecting the first two lines (`date` and `ps` header), we use - `--header-lines=2` option. -- `--bind='ctrl-r:reload(date; ps -ef)'` binds CTRL-R to `reload` action that - runs `date; ps -ef`, so we can update the list of the processes by pressing - CTRL-R. -- We use simple `echo {}` preview option, so we can see the entire line on the - preview window below even if it's too long - -### Toggling between data sources - -You're not limited to just one reload binding. Set up multiple bindings so -you can switch between data sources. - -```sh -find * | fzf --prompt 'All> ' \ - --header 'CTRL-D: Directories / CTRL-F: Files' \ - --bind 'ctrl-d:change-prompt(Directories> )+reload(find * -type d)' \ - --bind 'ctrl-f:change-prompt(Files> )+reload(find * -type f)' -``` - -![image](https://user-images.githubusercontent.com/700826/113465073-4af6d000-946c-11eb-858f-2372c0955f67.png) - -![image](https://user-images.githubusercontent.com/700826/113465072-46321c00-946c-11eb-9b6f-cda3951df579.png) - -Ripgrep integration -------------------- - -### Using fzf as the secondary filter - -* Requires [bat][bat] -* Requires [Ripgrep][rg] - -[bat]: https://github.com/sharkdp/bat -[rg]: https://github.com/BurntSushi/ripgrep - -fzf is pretty fast for filtering a list that you will rarely have to think -about its performance. But it is not the right tool for searching for text -inside many large files, and in that case you should definitely use something -like [Ripgrep][rg]. - -In the next example, Ripgrep is the primary filter that searches for the given -text in files, and fzf is used as the secondary fuzzy filter that adds -interactivity to the workflow. And we use [bat][bat] to show the matching line in -the preview window. - -This is a bash script and it will not run as expected on other non-compliant -shells. To avoid the compatibility issue, let's save this snippet as a script -file called `rfv`. - -```bash -#!/usr/bin/env bash - -# 1. Search for text in files using Ripgrep -# 2. Interactively narrow down the list using fzf -# 3. Open the file in Vim -IFS=: read -ra selected < <( - rg --color=always --line-number --no-heading --smart-case "${*:-}" | - fzf --ansi \ - --color "hl:-1:underline,hl+:-1:underline:reverse" \ - --delimiter : \ - --preview 'bat --color=always {1} --highlight-line {2}' \ - --preview-window 'up,60%,border-bottom,+{2}+3/3,~3' -) -[ -n "${selected[0]}" ] && vim "${selected[0]}" "+${selected[1]}" -``` - -And run it with an initial query string. - -```sh -# Make the script executable -chmod +x rfv - -# Run it with the initial query "algo" -./rfv algo -``` - -> Ripgrep will perform the initial search and list all the lines that contain -`algo`. Then we further narrow down the list on fzf. - -![image](https://user-images.githubusercontent.com/700826/113683873-a42a6200-96ff-11eb-9666-26ce4091b0e4.png) - -I know it's a lot to digest, let's try to break down the code. - -- Ripgrep prints the matching lines in the following format - ``` - man/man1/fzf.1:54:.BI "--algo=" TYPE - man/man1/fzf.1:55:Fuzzy matching algorithm (default: v2) - man/man1/fzf.1:58:.BR v2 " Optimal scoring algorithm (quality)" - src/pattern_test.go:7: "github.com/junegunn/fzf/src/algo" - ``` - The first token delimited by `:` is the file path, and the second token is - the line number of the matching line. They respectively correspond to `{1}` - and `{2}` in the preview command. - - `--preview 'bat --color=always {1} --highlight-line {2}'` -- As we run `rg` with `--color=always` option, we should tell fzf to parse - ANSI color codes in the input by setting `--ansi`. -- We customize how fzf colors various text elements using `--color` option. - `-1` tells fzf to keep the original color from the input. See `man fzf` for - available color options. -- The value of `--preview-window` option consists of 5 components delimited - by `,` - 1. `up` — Position of the preview window - 1. `60%` — Size of the preview window - 1. `border-bottom` — Preview window border only on the bottom side - 1. `+{2}+3/3` — Scroll offset of the preview contents - 1. `~3` — Fixed header -- Let's break down the latter two. We want to display the bat output in the - preview window with a certain scroll offset so that the matching line is - positioned near the center of the preview window. - - `+{2}` — The base offset is extracted from the second token - - `+3` — We add 3 lines to the base offset to compensate for the header - part of `bat` output - - ``` - ───────┬────────────────────────────────────────────────────────── - │ File: CHANGELOG.md - ───────┼────────────────────────────────────────────────────────── - 1 │ CHANGELOG - 2 │ ========= - 3 │ - 4 │ 0.26.0 - 5 │ ------ - ``` - - `/3` adjusts the offset so that the matching line is shown at a third - position in the window - - `~3` makes the top three lines fixed header so that they are always - visible regardless of the scroll offset -- Once we selected a line, we open the file with `vim` (`vim - "${selected[0]}"`) and move the cursor to the line (`+${selected[1]}`). - -### Using fzf as interative Ripgrep launcher - -We have learned that we can bind `reload` action to a key (e.g. -`--bind=ctrl-r:execute(ps -ef)`). In the next example, we are going to **bind -`reload` action to `change` event** so that whenever the user *changes* the -query string on fzf, `reload` action is triggered. - -Here is a variation of the above `rfv` script. fzf will restart Ripgrep every -time the user updates the query string on fzf. Searching and filtering is -completely done by Ripgrep, and fzf merely provides the interactive interface. -So we lose the "fuzziness", but the performance will be better on larger -projects, and it will free up memory as you narrow down the results. - -```bash -#!/usr/bin/env bash - -# 1. Search for text in files using Ripgrep -# 2. Interactively restart Ripgrep with reload action -# 3. Open the file in Vim -RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case " -INITIAL_QUERY="${*:-}" -IFS=: read -ra selected < <( - FZF_DEFAULT_COMMAND="$RG_PREFIX $(printf %q "$INITIAL_QUERY")" \ - fzf --ansi \ - --disabled --query "$INITIAL_QUERY" \ - --bind "change:reload:sleep 0.1; $RG_PREFIX {q} || true" \ - --delimiter : \ - --preview 'bat --color=always {1} --highlight-line {2}' \ - --preview-window 'up,60%,border-bottom,+{2}+3/3,~3' -) -[ -n "${selected[0]}" ] && vim "${selected[0]}" "+${selected[1]}" -``` - -![image](https://user-images.githubusercontent.com/700826/113684212-f9ff0a00-96ff-11eb-8737-7bb571d320cc.png) - -- Instead of starting fzf in `rg ... | fzf` form, we start fzf without an - explicit input, but with a custom `FZF_DEFAULT_COMMAND` variable. This way - fzf can kill the initial Ripgrep process it starts with the initial query. - Otherwise, the initial Ripgrep process will keep consuming system resources - even after `reload` is triggered. -- Filtering is no longer a responsibility of fzf; hence `--disabled` -- `{q}` in the reload command evaluates to the query string on fzf prompt. -- `sleep 0.1` in the reload command is for "debouncing". This small delay will - reduce the number of intermediate Ripgrep processes while we're typing in - a query. - -### Switching to fzf-only search mode - -*(Requires fzf 0.27.1 or above)* - -In the previous example, we lost fuzzy matching capability as we completely -delegated search functionality to Ripgrep. But we can dynamically switch to -fzf-only search mode by *"unbinding"* `reload` action from `change` event. - -```sh -#!/usr/bin/env bash - -# Two-phase filtering with Ripgrep and fzf -# -# 1. Search for text in files using Ripgrep -# 2. Interactively restart Ripgrep with reload action -# * Press alt-enter to switch to fzf-only filtering -# 3. Open the file in Vim -RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case " -INITIAL_QUERY="${*:-}" -IFS=: read -ra selected < <( - FZF_DEFAULT_COMMAND="$RG_PREFIX $(printf %q "$INITIAL_QUERY")" \ - fzf --ansi \ - --color "hl:-1:underline,hl+:-1:underline:reverse" \ - --disabled --query "$INITIAL_QUERY" \ - --bind "change:reload:sleep 0.1; $RG_PREFIX {q} || true" \ - --bind "alt-enter:unbind(change,alt-enter)+change-prompt(2. fzf> )+enable-search+clear-query" \ - --prompt '1. ripgrep> ' \ - --delimiter : \ - --preview 'bat --color=always {1} --highlight-line {2}' \ - --preview-window 'up,60%,border-bottom,+{2}+3/3,~3' -) -[ -n "${selected[0]}" ] && vim "${selected[0]}" "+${selected[1]}" -``` - -* Phase 1. Filtering with Ripgrep -![image](https://user-images.githubusercontent.com/700826/119213880-735e8a80-bafd-11eb-8493-123e4be24fbc.png) -* Phase 2. Filtering with fzf -![image](https://user-images.githubusercontent.com/700826/119213887-7e191f80-bafd-11eb-98c9-71a1af9d7aab.png) - -- We added `--prompt` option to show that fzf is initially running in "Ripgrep - launcher mode". -- We added `alt-enter` binding that - 1. unbinds `change` event, so Ripgrep is no longer restarted on key press - 2. changes the prompt to `2. fzf>` - 3. enables search functionality of fzf - 4. clears the current query string that was used to start Ripgrep process - 5. and unbinds `alt-enter` itself as this is a one-off event -- We reverted `--color` option for customizing how the matching chunks are - displayed in the second phase - -### Switching between Ripgrep mode and fzf mode - -*(Requires fzf 0.30.0 or above)* - -fzf 0.30.0 added `rebind` action so we can "rebind" the bindings that were -previously "unbound" via `unbind`. - -This is an improved version of the previous example that allows us to switch -between Ripgrep launcher mode and fzf-only filtering mode via CTRL-R and -CTRL-F. - -```sh -#!/usr/bin/env bash - -# Switch between Ripgrep launcher mode (CTRL-R) and fzf filtering mode (CTRL-F) -RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case " -INITIAL_QUERY="${*:-}" -IFS=: read -ra selected < <( - FZF_DEFAULT_COMMAND="$RG_PREFIX $(printf %q "$INITIAL_QUERY")" \ - fzf --ansi \ - --color "hl:-1:underline,hl+:-1:underline:reverse" \ - --disabled --query "$INITIAL_QUERY" \ - --bind "change:reload:sleep 0.1; $RG_PREFIX {q} || true" \ - --bind "ctrl-f:unbind(change,ctrl-f)+change-prompt(2. fzf> )+enable-search+clear-query+rebind(ctrl-r)" \ - --bind "ctrl-r:unbind(ctrl-r)+change-prompt(1. ripgrep> )+disable-search+reload($RG_PREFIX {q} || true)+rebind(change,ctrl-f)" \ - --prompt '1. Ripgrep> ' \ - --delimiter : \ - --header '╱ CTRL-R (Ripgrep mode) ╱ CTRL-F (fzf mode) ╱' \ - --preview 'bat --color=always {1} --highlight-line {2}' \ - --preview-window 'up,60%,border-bottom,+{2}+3/3,~3' -) -[ -n "${selected[0]}" ] && vim "${selected[0]}" "+${selected[1]}" -``` - -Log tailing ------------ - -fzf can run long-running preview commands and render partial results before -completion. And when you specify `follow` flag in `--preview-window` option, -fzf will "`tail -f`" the result, automatically scrolling to the bottom. - -```bash -# With "follow", preview window will automatically scroll to the bottom. -# "\033[2J" is an ANSI escape sequence for clearing the screen. -# When fzf reads this code it clears the previous preview contents. -fzf --preview-window follow --preview 'for i in $(seq 100000); do - echo "$i" - sleep 0.01 - (( i % 300 == 0 )) && printf "\033[2J" -done' -``` - -![image](https://user-images.githubusercontent.com/700826/113473303-dd669600-94a3-11eb-88a9-1f61b996bb0e.png) - -Admittedly, that was a silly example. Here's a practical one for browsing -Kubernetes pods. - -```bash -pods() { - FZF_DEFAULT_COMMAND="kubectl get pods --all-namespaces" \ - fzf --info=inline --layout=reverse --header-lines=1 \ - --prompt "$(kubectl config current-context | sed 's/-context$//')> " \ - --header $'╱ Enter (kubectl exec) ╱ CTRL-O (open log in editor) ╱ CTRL-R (reload) ╱\n\n' \ - --bind 'ctrl-/:change-preview-window(80%,border-bottom|hidden|)' \ - --bind 'enter:execute:kubectl exec -it --namespace {1} {2} -- bash > /dev/tty' \ - --bind 'ctrl-o:execute:${EDITOR:-vim} <(kubectl logs --all-containers --namespace {1} {2}) > /dev/tty' \ - --bind 'ctrl-r:reload:$FZF_DEFAULT_COMMAND' \ - --preview-window up:follow \ - --preview 'kubectl logs --follow --all-containers --tail=10000 --namespace {1} {2}' "$@" -} -``` - -![image](https://user-images.githubusercontent.com/700826/113473547-1d7a4880-94a5-11eb-98ef-9aa6f0ed215a.png) - -- The preview window will *"log tail"* the pod - - Holding on to a large amount of log will consume a lot of memory. So we - limited the initial log amount with `--tail=10000`. -- `execute` bindings allow you to run any command without leaving fzf - - Press enter key on a pod to `kubectl exec` into it - - Press CTRL-O to open the log in your editor -- Press CTRL-R to reload the pod list -- Press CTRL-/ repeatedly to to rotate through a different sets of preview - window options - 1. `80%,border-bottom` - 1. `hidden` - 1. Empty string after `|` translates to the default options from `--preview-window` - -Key bindings for git objects ----------------------------- - -Oftentimes, you want to put the identifiers of various Git object to the -command-line. For example, it is common to write commands like these: - -```sh -git checkout [SOME_COMMIT_HASH or BRANCH or TAG] -git diff [SOME_COMMIT_HASH or BRANCH or TAG] [SOME_COMMIT_HASH or BRANCH or TAG] -``` - -[fzf-git.sh](https://github.com/junegunn/fzf-git.sh) project defines a set of -fzf-based key bindings for Git objects. I strongly recommend that you check -them out because they are seriously useful. - -### Files listed in `git status` - -CTRL-GCTRL-F - -![image](https://user-images.githubusercontent.com/700826/113473779-a9d93b00-94a6-11eb-87b5-f62a8d0a0efc.png) - -### Branches - -CTRL-GCTRL-B - -![image](https://user-images.githubusercontent.com/700826/113473758-87dfb880-94a6-11eb-82f4-9218103f10bd.png) - -### Commit hashes - -CTRL-GCTRL-H - -![image](https://user-images.githubusercontent.com/700826/113473765-91692080-94a6-11eb-8d38-ed4d41f27ac1.png) - -Color themes ------------- - -You can customize how fzf colors the text elements with `--color` option. Here -are a few color themes. Note that you need a terminal emulator that can -display 24-bit colors. - -```sh -# junegunn/seoul256.vim (dark) -export FZF_DEFAULT_OPTS='--color=bg+:#3F3F3F,bg:#4B4B4B,border:#6B6B6B,spinner:#98BC99,hl:#719872,fg:#D9D9D9,header:#719872,info:#BDBB72,pointer:#E12672,marker:#E17899,fg+:#D9D9D9,preview-bg:#3F3F3F,prompt:#98BEDE,hl+:#98BC99' -``` - -![seoul256](https://user-images.githubusercontent.com/700826/113475011-2c192d80-94ae-11eb-9d17-1e5867bae01f.png) - -```sh -# junegunn/seoul256.vim (light) -export FZF_DEFAULT_OPTS='--color=bg+:#D9D9D9,bg:#E1E1E1,border:#C8C8C8,spinner:#719899,hl:#719872,fg:#616161,header:#719872,info:#727100,pointer:#E12672,marker:#E17899,fg+:#616161,preview-bg:#D9D9D9,prompt:#0099BD,hl+:#719899' -``` - -![seoul256-light](https://user-images.githubusercontent.com/700826/113475022-389d8600-94ae-11eb-905f-0939dd535837.png) - -```sh -# morhetz/gruvbox -export FZF_DEFAULT_OPTS='--color=bg+:#3c3836,bg:#32302f,spinner:#fb4934,hl:#928374,fg:#ebdbb2,header:#928374,info:#8ec07c,pointer:#fb4934,marker:#fb4934,fg+:#ebdbb2,prompt:#fb4934,hl+:#fb4934' -``` - -![gruvbox](https://user-images.githubusercontent.com/700826/113475042-494dfc00-94ae-11eb-9322-cd03a027305a.png) - -```sh -# arcticicestudio/nord-vim -export FZF_DEFAULT_OPTS='--color=bg+:#3B4252,bg:#2E3440,spinner:#81A1C1,hl:#616E88,fg:#D8DEE9,header:#616E88,info:#81A1C1,pointer:#81A1C1,marker:#81A1C1,fg+:#D8DEE9,prompt:#81A1C1,hl+:#81A1C1' -``` - -![nord](https://user-images.githubusercontent.com/700826/113475063-67b3f780-94ae-11eb-9b24-5f0d22b63399.png) - -```sh -# tomasr/molokai -export FZF_DEFAULT_OPTS='--color=bg+:#293739,bg:#1B1D1E,border:#808080,spinner:#E6DB74,hl:#7E8E91,fg:#F8F8F2,header:#7E8E91,info:#A6E22E,pointer:#A6E22E,marker:#F92672,fg+:#F8F8F2,prompt:#F92672,hl+:#F92672' -``` - -![molokai](https://user-images.githubusercontent.com/700826/113475085-8619f300-94ae-11eb-85e4-2766fc3246bf.png) - -### Generating fzf color theme from Vim color schemes - -The Vim plugin of fzf can generate `--color` option from the current color -scheme according to `g:fzf_colors` variable. You can find the detailed -explanation [here](https://github.com/junegunn/fzf/blob/master/README-VIM.md#explanation-of-gfzf_colors). - -Here is an example. Add this to your Vim configuration file. - -```vim -let g:fzf_colors = -\ { 'fg': ['fg', 'Normal'], - \ 'bg': ['bg', 'Normal'], - \ 'preview-bg': ['bg', 'NormalFloat'], - \ 'hl': ['fg', 'Comment'], - \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], - \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], - \ 'hl+': ['fg', 'Statement'], - \ 'info': ['fg', 'PreProc'], - \ 'border': ['fg', 'Ignore'], - \ 'prompt': ['fg', 'Conditional'], - \ 'pointer': ['fg', 'Exception'], - \ 'marker': ['fg', 'Keyword'], - \ 'spinner': ['fg', 'Label'], - \ 'header': ['fg', 'Comment'] } -``` - -Then you can see how the `--color` option is generated by printing the result -of `fzf#wrap()`. - -```vim -:echo fzf#wrap() -``` - -Use this command to append `export FZF_DEFAULT_OPTS="..."` line to the end of -the current file. - -```vim -:call append('$', printf('export FZF_DEFAULT_OPTS="%s"', matchstr(fzf#wrap().options, "--color[^']*"))) -``` diff --git a/dotfiles/.vim/plugged/fzf/BUILD.md b/dotfiles/.vim/plugged/fzf/BUILD.md deleted file mode 100644 index bbff0520..00000000 --- a/dotfiles/.vim/plugged/fzf/BUILD.md +++ /dev/null @@ -1,49 +0,0 @@ -Building fzf -============ - -Build instructions ------------------- - -### Prerequisites - -- Go 1.17 or above - -### Using Makefile - -```sh -# Build fzf binary for your platform in target -make - -# Build fzf binary and copy it to bin directory -make install - -# Build fzf binaries and archives for all platforms using goreleaser -make build - -# Publish GitHub release -make release -``` - -> :warning: Makefile uses git commands to determine the version and the -> revision information for `fzf --version`. So if you're building fzf from an -> environment where its git information is not available, you have to manually -> set `$FZF_VERSION` and `$FZF_REVISION`. -> -> e.g. `FZF_VERSION=0.24.0 FZF_REVISION=tarball make` - -Third-party libraries used --------------------------- - -- [mattn/go-runewidth](https://github.com/mattn/go-runewidth) - - Licensed under [MIT](http://mattn.mit-license.org) -- [mattn/go-shellwords](https://github.com/mattn/go-shellwords) - - Licensed under [MIT](http://mattn.mit-license.org) -- [mattn/go-isatty](https://github.com/mattn/go-isatty) - - Licensed under [MIT](http://mattn.mit-license.org) -- [tcell](https://github.com/gdamore/tcell) - - Licensed under [Apache License 2.0](https://github.com/gdamore/tcell/blob/master/LICENSE) - -License -------- - -[MIT](LICENSE) diff --git a/dotfiles/.vim/plugged/fzf/CHANGELOG.md b/dotfiles/.vim/plugged/fzf/CHANGELOG.md deleted file mode 100644 index 5036d2ba..00000000 --- a/dotfiles/.vim/plugged/fzf/CHANGELOG.md +++ /dev/null @@ -1,1345 +0,0 @@ -CHANGELOG -========= - -0.34.0 ------- -- Added support for adaptive `--height`. If the `--height` value is prefixed - with `~`, fzf will automatically determine the height in the range according - to the input size. - ```sh - seq 1 | fzf --height ~70% --border --padding 1 --margin 1 - seq 10 | fzf --height ~70% --border --padding 1 --margin 1 - seq 100 | fzf --height ~70% --border --padding 1 --margin 1 - ``` - - There are a few limitations - - Not compatible with percent top/bottom margin/padding - ```sh - # This is not allowed (top/bottom margin in percent value) - fzf --height ~50% --border --margin 5%,10% - - # This is allowed (top/bottom margin in fixed value) - fzf --height ~50% --border --margin 2,10% - ``` - - fzf will not start until it can determine the right height for the input - ```sh - # fzf will open immediately - (sleep 2; seq 10) | fzf --height 50% - - # fzf will open after 2 seconds - (sleep 2; seq 10) | fzf --height ~50% - (sleep 2; seq 1000) | fzf --height ~50% - ``` -- Fixed tcell renderer used to render full-screen fzf on Windows -- `--no-clear` is deprecated. Use `reload` action instead. - -0.33.0 ------- -- Added `--scheme=[default|path|history]` option to choose scoring scheme - - (Experimental) - - We updated the scoring algorithm in 0.32.0, however we have learned that - this new scheme (`default`) is not always giving the optimal result - - `path`: Additional bonus point is only given to the characters after - path separator. You might want to choose this scheme if you have many - files with spaces in their paths. - - `history`: No additional bonus points are given so that we give more - weight to the chronological ordering. This is equivalent to the scoring - scheme before 0.32.0. This also sets `--tiebreak=index`. -- ANSI color sequences with colon delimiters are now supported. - ```sh - printf "\e[38;5;208mOption 1\e[m\nOption 2" | fzf --ansi - printf "\e[38:5:208mOption 1\e[m\nOption 2" | fzf --ansi - ``` -- Support `border-{up,down}` as the synonyms for `border-{top,bottom}` in - `--preview-window` -- Added support for ANSI `strikethrough` - ```sh - printf "\e[9mdeleted" | fzf --ansi - fzf --color fg+:strikethrough - ``` - -0.32.1 ------- -- Fixed incorrect ordering of `--tiebreak=chunk` -- fzf-tmux will show fzf border instead of tmux popup border (requires tmux 3.3) - ```sh - fzf-tmux -p70% - fzf-tmux -p70% --color=border:bright-red - fzf-tmux -p100%,60% --color=border:bright-yellow --border=horizontal --padding 1,5 --margin 1,0 - fzf-tmux -p70%,100% --color=border:bright-green --border=vertical - - # Key bindings (CTRL-T, CTRL-R, ALT-C) will use these options - export FZF_TMUX_OPTS='-p100%,60% --color=border:green --border=horizontal --padding 1,5 --margin 1,0' - ``` - -0.32.0 ------- -- Updated the scoring algorithm - - Different bonus points to different categories of word boundaries - (listed higher to lower bonus point) - - Word after whitespace characters or beginning of the string - - Word after common delimiter characters (`/,:;|`) - - Word after other non-word characters - ```sh - # foo/bar.sh` is preferred over `foo-bar.sh` on `bar` - fzf --query=bar --height=4 << EOF - foo-bar.sh - foo/bar.sh - EOF - ``` -- Added a new tiebreak `chunk` - - Favors the line with shorter matched chunk. A chunk is a set of - consecutive non-whitespace characters. - - Unlike the default `length`, this scheme works well with tabular input - ```sh - # length prefers item #1, because the whole line is shorter, - # chunk prefers item #2, because the matched chunk ("foo") is shorter - fzf --height=6 --header-lines=2 --tiebreak=chunk --reverse --query=fo << "EOF" - N | Field1 | Field2 | Field3 - - | ------ | ------ | ------ - 1 | hello | foobar | baz - 2 | world | foo | bazbaz - EOF - ``` - - If the input does not contain any spaces, `chunk` is equivalent to - `length`. But we're not going to set it as the default because it is - computationally more expensive. -- Bug fixes and improvements - -0.31.0 ------- -- Added support for an alternative preview window layout that is activated - when the size of the preview window is smaller than a certain threshold. - ```sh - # If the width of the preview window is smaller than 50 columns, - # it will be displayed above the search window. - fzf --preview 'cat {}' --preview-window 'right,50%,border-left,<50(up,30%,border-bottom)' - - # Or you can just hide it like so - fzf --preview 'cat {}' --preview-window '<50(hidden)' - ``` -- fzf now uses SGR mouse mode to properly support mouse on larger terminals -- You can now use characters that do not satisfy `unicode.IsGraphic` constraint - for `--marker`, `--pointer`, and `--ellipsis`. Allows Nerd Fonts and stuff. - Use at your own risk. -- Bug fixes and improvements -- Shell extension - - `kill` completion now requires trigger sequence (`**`) for consistency - -0.30.0 ------- -- Fixed cursor flickering over the screen by hiding it during rendering -- Added `--ellipsis` option. You can take advantage of it to make fzf - effectively search non-visible parts of the item. - ```sh - # Search against hidden line numbers on the far right - nl /usr/share/dict/words | - awk '{printf "%s%1000s\n", $2, $1}' | - fzf --nth=-1 --no-hscroll --ellipsis='' | - awk '{print $2}' - ``` -- Added `rebind` action for restoring bindings after `unbind` -- Bug fixes and improvements - -0.29.0 ------- -- Added `change-preview(...)` action to change the `--preview` command - - cf. `preview(...)` is a one-off action that doesn't change the default - preview command -- Added `change-preview-window(...)` action - - You can rotate through the different options separated by `|` - ```sh - fzf --preview 'cat {}' --preview-window right:40% \ - --bind 'ctrl-/:change-preview-window(right,70%|down,40%,border-top|hidden|)' - ``` -- Fixed rendering of the prompt line when overflow occurs with `--info=inline` - -0.28.0 ------- -- Added `--header-first` option to print header before the prompt line - ```sh - fzf --header $'Welcome to fzf\n▔▔▔▔▔▔▔▔▔▔▔▔▔▔' --reverse --height 30% --border --header-first - ``` -- Added `--scroll-off=LINES` option (similar to `scrolloff` option of Vim) - - You can set it to a very large number so that the cursor stays in the - middle of the screen while scrolling - ```sh - fzf --scroll-off=5 - fzf --scroll-off=999 - ``` -- Fixed bug where preview window is not updated on `reload` (#2644) -- fzf on Windows will also use `$SHELL` to execute external programs - - See #2638 and #2647 - - Thanks to @rashil2000, @vovcacik, and @janlazo - -0.27.3 ------- -- Preview window is `hidden` by default when there are `preview` bindings but - `--preview` command is not given -- Fixed bug where `{n}` is not properly reset on `reload` -- Fixed bug where spinner is not displayed on `reload` -- Enhancements in tcell renderer for Windows (#2616) -- Vim plugin - - `sinklist` is added as a synonym to `sink*` so that it's easier to add - a function to a spec dictionary - ```vim - let spec = { 'source': 'ls', 'options': ['--multi', '--preview', 'cat {}'] } - function spec.sinklist(matches) - echom string(a:matches) - endfunction - - call fzf#run(fzf#wrap(spec)) - ``` - - Vim 7 compatibility - -0.27.2 ------- -- 16 base ANSI colors can be specified by their names - ```sh - fzf --color fg:3,fg+:11 - fzf --color fg:yellow,fg+:bright-yellow - ``` -- Fix bug where `--read0` not properly displaying long lines - -0.27.1 ------- -- Added `unbind` action. In the following Ripgrep launcher example, you can - use `unbind(reload)` to switch to fzf-only filtering mode. - - See https://github.com/junegunn/fzf/blob/master/ADVANCED.md#switching-to-fzf-only-search-mode -- Vim plugin - - Vim plugin will stop immediately even when the source command hasn't finished - ```vim - " fzf will read the stream file while allowing other processes to append to it - call fzf#run({'source': 'cat /dev/null > /tmp/stream; tail -f /tmp/stream'}) - ``` - - It is now possible to open popup window relative to the current window - ```vim - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true, 'yoffset': 1.0 } } - ``` - -0.27.0 ------- -- More border options for `--preview-window` - ```sh - fzf --preview 'cat {}' --preview-window border-left - fzf --preview 'cat {}' --preview-window border-left --border horizontal - fzf --preview 'cat {}' --preview-window top:border-bottom - fzf --preview 'cat {}' --preview-window top:border-horizontal - ``` -- Automatically set `/dev/tty` as STDIN on execute action - ```sh - # Redirect /dev/tty to suppress "Vim: Warning: Input is not from a terminal" - # ls | fzf --bind "enter:execute(vim {} < /dev/tty)" - - # "< /dev/tty" part is no longer needed - ls | fzf --bind "enter:execute(vim {})" - ``` -- Bug fixes and improvements -- Signed and notarized macOS binaries - (Huge thanks to [BACKERS.md](https://github.com/junegunn/junegunn/blob/main/BACKERS.md)!) - -0.26.0 ------- -- Added support for fixed header in preview window - ```sh - # Display top 3 lines as the fixed header - fzf --preview 'bat --style=header,grid --color=always {}' --preview-window '~3' - ``` -- More advanced preview offset expression to better support the fixed header - ```sh - # Preview with bat, matching line in the middle of the window below - # the fixed header of the top 3 lines - # - # ~3 Top 3 lines as the fixed header - # +{2} Base scroll offset extracted from the second field - # +3 Extra offset to compensate for the 3-line header - # /2 Put in the middle of the preview area - # - git grep --line-number '' | - fzf --delimiter : \ - --preview 'bat --style=full --color=always --highlight-line {2} {1}' \ - --preview-window '~3:+{2}+3/2' - ``` -- Added `select` and `deselect` action for unconditionally selecting or - deselecting a single item in `--multi` mode. Complements `toggle` action. -- Significant performance improvement in ANSI code processing -- Bug fixes and improvements -- Built with Go 1.16 - -0.25.1 ------- -- Added `close` action - - Close preview window if open, abort fzf otherwise -- Bug fixes and improvements - -0.25.0 ------- -- Text attributes set in `--color` are not reset when fzf sees another - `--color` option for the same element. This allows you to put custom text - attributes in your `$FZF_DEFAULT_OPTS` and still have those attributes - even when you override the colors. - - ```sh - # Default colors and attributes - fzf - - # Apply custom text attributes - export FZF_DEFAULT_OPTS='--color fg+:italic,hl:-1:underline,hl+:-1:reverse:underline' - - fzf - - # Different colors but you still have the attributes - fzf --color hl:176,hl+:177 - - # Write "regular" if you want to clear the attributes - fzf --color hl:176:regular,hl+:177:regular - ``` -- Renamed `--phony` to `--disabled` -- You can dynamically enable and disable the search functionality using the - new `enable-search`, `disable-search`, and `toggle-search` actions -- You can assign a different color to the query string for when search is disabled - ```sh - fzf --color query:#ffffff,disabled:#999999 --bind space:toggle-search - ``` -- Added `last` action to move the cursor to the last match - - The opposite action `top` is renamed to `first`, but `top` is still - recognized as a synonym for backward compatibility -- Added `preview-top` and `preview-bottom` actions -- Extended support for alt key chords: alt with any case-sensitive single character - ```sh - fzf --bind alt-,:first,alt-.:last - ``` - -0.24.4 ------- -- Added `--preview-window` option `follow` - ```sh - # Preview window will automatically scroll to the bottom - fzf --preview-window follow --preview 'for i in $(seq 100000); do - echo "$i" - sleep 0.01 - (( i % 300 == 0 )) && printf "\033[2J" - done' - ``` -- Added `change-prompt` action - ```sh - fzf --prompt 'foo> ' --bind $'a:change-prompt:\x1b[31mbar> ' - ``` -- Bug fixes and improvements - -0.24.3 ------- -- Added `--padding` option - ```sh - fzf --margin 5% --padding 5% --border --preview 'cat {}' \ - --color bg:#222222,preview-bg:#333333 - ``` - -0.24.2 ------- -- Bug fixes and improvements - -0.24.1 ------- -- Fixed broken `--color=[bw|no]` option - -0.24.0 ------- -- Real-time rendering of preview window - ```sh - # fzf can render preview window before the command completes - fzf --preview 'sleep 1; for i in $(seq 100); do echo $i; sleep 0.01; done' - - # Preview window can process ANSI escape sequence (CSI 2 J) for clearing the display - fzf --preview 'for i in $(seq 100000); do - (( i % 200 == 0 )) && printf "\033[2J" - echo "$i" - sleep 0.01 - done' - ``` -- Updated `--color` option to support text styles - - `regular` / `bold` / `dim` / `underline` / `italic` / `reverse` / `blink` - ```sh - # * Set -1 to keep the original color - # * Multiple style attributes can be combined - # * Italic style may not be supported by some terminals - rg --line-number --no-heading --color=always "" | - fzf --ansi --prompt "Rg: " \ - --color fg+:italic,hl:underline:-1,hl+:italic:underline:reverse:-1 \ - --color pointer:reverse,prompt:reverse,input:159 \ - --pointer ' ' - ``` -- More `--border` options - - `vertical`, `top`, `bottom`, `left`, `right` - - Updated Vim plugin to use these new `--border` options - ```vim - " Floating popup window in the center of the screen - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } - - " Popup with 100% width - let g:fzf_layout = { 'window': { 'width': 1.0, 'height': 0.5, 'border': 'horizontal' } } - - " Popup with 100% height - let g:fzf_layout = { 'window': { 'width': 0.5, 'height': 1.0, 'border': 'vertical' } } - - " Similar to 'down' layout, but it uses a popup window and doesn't affect the window layout - let g:fzf_layout = { 'window': { 'width': 1.0, 'height': 0.5, 'yoffset': 1.0, 'border': 'top' } } - - " Opens on the right; - " 'highlight' option is still supported but it will only take the foreground color of the group - let g:fzf_layout = { 'window': { 'width': 0.5, 'height': 1.0, 'xoffset': 1.0, 'border': 'left', 'highlight': 'Comment' } } - ``` -- To indicate if `--multi` mode is enabled, fzf will print the number of - selected items even when no item is selected - ```sh - seq 100 | fzf - # 100/100 - seq 100 | fzf --multi - # 100/100 (0) - seq 100 | fzf --multi 5 - # 100/100 (0/5) - ``` -- Since 0.24.0, release binaries will be uploaded to https://github.com/junegunn/fzf/releases - -0.23.1 ------- -- Added `--preview-window` options for disabling flags - - `nocycle` - - `nohidden` - - `nowrap` - - `default` -- Built with Go 1.14.9 due to performance regression - - https://github.com/golang/go/issues/40727 - -0.23.0 ------- -- Support preview scroll offset relative to window height - ```sh - git grep --line-number '' | - fzf --delimiter : \ - --preview 'bat --style=numbers --color=always --highlight-line {2} {1}' \ - --preview-window +{2}-/2 - ``` -- Added `--preview-window` option for sharp edges (`--preview-window sharp`) -- Added `--preview-window` option for cyclic scrolling (`--preview-window cycle`) -- Reduced vertical padding around the preview window when `--preview-window - noborder` is used -- Added actions for preview window - - `preview-half-page-up` - - `preview-half-page-down` -- Vim - - Popup width and height can be given in absolute integer values - - Added `fzf#exec()` function for getting the path of fzf executable - - It also downloads the latest binary if it's not available by running - `./install --bin` -- Built with Go 1.15.2 - - We no longer provide 32-bit binaries - -0.22.0 ------- -- Added more options for `--bind` - - `backward-eof` event - ```sh - # Aborts when you delete backward when the query prompt is already empty - fzf --bind backward-eof:abort - ``` - - `refresh-preview` action - ```sh - # Rerun preview command when you hit '?' - fzf --preview 'echo $RANDOM' --bind '?:refresh-preview' - ``` - - `preview` action - ```sh - # Default preview command with an extra preview binding - fzf --preview 'file {}' --bind '?:preview:cat {}' - - # A preview binding with no default preview command - # (Preview window is initially empty) - fzf --bind '?:preview:cat {}' - - # Preview window hidden by default, it appears when you first hit '?' - fzf --bind '?:preview:cat {}' --preview-window hidden - ``` -- Added preview window option for setting the initial scroll offset - ```sh - # Initial scroll offset is set to the line number of each line of - # git grep output *minus* 5 lines - git grep --line-number '' | - fzf --delimiter : --preview 'nl {1}' --preview-window +{2}-5 - ``` -- Added support for ANSI colors in `--prompt` string -- Smart match of accented characters - - An unaccented character in the query string will match both accented and - unaccented characters, while an accented character will only match - accented characters. This is similar to how "smart-case" match works. -- Vim plugin - - `tmux` layout option for using fzf-tmux - ```vim - let g:fzf_layout = { 'tmux': '-p90%,60%' } - ``` - -0.21.1 ------- -- Shell extension - - CTRL-R will remove duplicate commands -- fzf-tmux - - Supports tmux popup window (require tmux 3.2 or above) - - ```sh - # 50% width and height - fzf-tmux -p - - # 80% width and height - fzf-tmux -p 80% - - # 80% width and 40% height - fzf-tmux -p 80%,40% - fzf-tmux -w 80% -h 40% - - # Window position - fzf-tmux -w 80% -h 40% -x 0 -y 0 - fzf-tmux -w 80% -h 40% -y 1000 - - # Write ordinary fzf options after -- - fzf-tmux -p -- --reverse --info=inline --margin 2,4 --border - ``` - - On macOS, you can build the latest tmux from the source with - `brew install tmux --HEAD` -- Bug fixes - - Fixed Windows file traversal not to include directories - - Fixed ANSI colors with `--keep-right` - - Fixed _fzf_complete for zsh -- Built with Go 1.14.1 - -0.21.0 ------- -- `--height` option is now available on Windows as well (@kelleyma49) -- Added `--pointer` and `--marker` options -- Added `--keep-right` option that keeps the right end of the line visible - when it's too long -- Style changes - - `--border` will now print border with rounded corners around the - finder instead of printing horizontal lines above and below it. - The previous style is available via `--border=horizontal` - - Unicode spinner -- More keys and actions for `--bind` -- Added PowerShell script for downloading Windows binary -- Vim plugin: Built-in floating windows support - ```vim - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } - ``` -- bash: Various improvements in key bindings (CTRL-T, CTRL-R, ALT-C) - - CTRL-R will start with the current command-line as the initial query - - CTRL-R properly supports multi-line commands -- Fuzzy completion API changed - ```sh - # Previous: fzf arguments given as a single string argument - # - This style is still supported, but it's deprecated - _fzf_complete "--multi --reverse --prompt=\"doge> \"" "$@" < <( - echo foo - ) - - # New API: multiple fzf arguments before "--" - # - Easier to write multiple options - _fzf_complete --multi --reverse --prompt="doge> " -- "$@" < <( - echo foo - ) - ``` -- Bug fixes and improvements - -0.20.0 ------- -- Customizable preview window color (`preview-fg` and `preview-bg` for `--color`) - ```sh - fzf --preview 'cat {}' \ - --color 'fg:#bbccdd,fg+:#ddeeff,bg:#334455,preview-bg:#223344,border:#778899' \ - --border --height 20 --layout reverse --info inline - ``` -- Removed the immediate flicking of the screen on `reload` action. - ```sh - : | fzf --bind 'change:reload:seq {q}' --phony - ``` -- Added `clear-query` and `clear-selection` actions for `--bind` -- It is now possible to split a composite bind action over multiple `--bind` - expressions by prefixing the later ones with `+`. - ```sh - fzf --bind 'ctrl-a:up+up' - - # Can be now written as - fzf --bind 'ctrl-a:up' --bind 'ctrl-a:+up' - - # This is useful when you need to write special execute/reload form (i.e. `execute:...`) - # to avoid parse errors and add more actions to the same key - fzf --multi --bind 'ctrl-l:select-all+execute:less {+f}' --bind 'ctrl-l:+deselect-all' - ``` -- Fixed parse error of `--bind` expression where concatenated execute/reload - action contains `+` character. - ```sh - fzf --multi --bind 'ctrl-l:select-all+execute(less {+f})+deselect-all' - ``` -- Fixed bugs of reload action - - Not triggered when there's no match even when the command doesn't have - any placeholder expressions - - Screen not properly cleared when `--header-lines` not filled on reload - -0.19.0 ------- - -- Added `--phony` option which completely disables search functionality. - Useful when you want to use fzf only as a selector interface. See below. -- Added "reload" action for dynamically updating the input list without - restarting fzf. See https://github.com/junegunn/fzf/issues/1750 to learn - more about it. - ```sh - # Using fzf as the selector interface for ripgrep - RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case " - INITIAL_QUERY="foo" - FZF_DEFAULT_COMMAND="$RG_PREFIX '$INITIAL_QUERY' || true" \ - fzf --bind "change:reload:$RG_PREFIX {q} || true" \ - --ansi --phony --query "$INITIAL_QUERY" - ``` -- `--multi` now takes an optional integer argument which indicates the maximum - number of items that can be selected - ```sh - seq 100 | fzf --multi 3 --reverse --height 50% - ``` -- If a placeholder expression for `--preview` and `execute` action (and the - new `reload` action) contains `f` flag, it is replaced to the - path of a temporary file that holds the evaluated list. This is useful - when you multi-select a large number of items and the length of the - evaluated string may exceed [`ARG_MAX`][argmax]. - ```sh - # Press CTRL-A to select 100K items and see the sum of all the numbers - seq 100000 | fzf --multi --bind ctrl-a:select-all \ - --preview "awk '{sum+=\$1} END {print sum}' {+f}" - ``` -- `deselect-all` no longer deselects unmatched items. It is now consistent - with `select-all` and `toggle-all` in that it only affects matched items. -- Due to the limitation of bash, fuzzy completion is enabled by default for - a fixed set of commands. A helper function for easily setting up fuzzy - completion for any command is now provided. - ```sh - # usage: _fzf_setup_completion path|dir COMMANDS... - _fzf_setup_completion path git kubectl - ``` -- Info line style can be changed by `--info=STYLE` - - `--info=default` - - `--info=inline` (same as old `--inline-info`) - - `--info=hidden` -- Preview window border can be disabled by adding `noborder` to - `--preview-window`. -- When you transform the input with `--with-nth`, the trailing white spaces - are removed. -- `ctrl-\`, `ctrl-]`, `ctrl-^`, and `ctrl-/` can now be used with `--bind` -- See https://github.com/junegunn/fzf/milestone/15?closed=1 for more details - -[argmax]: https://unix.stackexchange.com/questions/120642/what-defines-the-maximum-size-for-a-command-single-argument - -0.18.0 ------- - -- Added placeholder expression for zero-based item index: `{n}` and `{+n}` - - `fzf --preview 'echo {n}: {}'` -- Added color option for the gutter: `--color gutter:-1` -- Added `--no-unicode` option for drawing borders in non-Unicode, ASCII - characters -- `FZF_PREVIEW_LINES` and `FZF_PREVIEW_COLUMNS` are exported to preview process - - fzf still overrides `LINES` and `COLUMNS` as before, but they may be - reset by the default shell. -- Bug fixes and improvements - - See https://github.com/junegunn/fzf/milestone/14?closed=1 -- Built with Go 1.12.1 - -0.17.5 ------- - -- Bug fixes and improvements - - See https://github.com/junegunn/fzf/milestone/13?closed=1 -- Search query longer than the screen width is allowed (up to 300 chars) -- Built with Go 1.11.1 - -0.17.4 ------- - -- Added `--layout` option with a new layout called `reverse-list`. - - `--layout=reverse` is a synonym for `--reverse` - - `--layout=default` is a synonym for `--no-reverse` -- Preview window will be updated even when there is no match for the query - if any of the placeholder expressions (e.g. `{q}`, `{+}`) evaluates to - a non-empty string. -- More keys for binding: `shift-{up,down}`, `alt-{up,down,left,right}` -- fzf can now start even when `/dev/tty` is not available by making an - educated guess. -- Updated the default command for Windows. -- Fixes and improvements on bash/zsh completion -- install and uninstall scripts now supports generating files under - `XDG_CONFIG_HOME` on `--xdg` flag. - -See https://github.com/junegunn/fzf/milestone/12?closed=1 for the full list of -changes. - -0.17.3 ------- -- `$LINES` and `$COLUMNS` are exported to preview command so that the command - knows the exact size of the preview window. -- Better error messages when the default command or `$FZF_DEFAULT_COMMAND` - fails. -- Reverted #1061 to avoid having duplicate entries in the list when find - command detected a file system loop (#1120). The default command now - requires that find supports `-fstype` option. -- fzf now distinguishes mouse left click and right click (#1130) - - Right click is now bound to `toggle` action by default - - `--bind` understands `left-click` and `right-click` -- Added `replace-query` action (#1137) - - Replaces query string with the current selection -- Added `accept-non-empty` action (#1162) - - Same as accept, except that it prevents fzf from exiting without any - selection - -0.17.1 ------- - -- Fixed custom background color of preview window (#1046) -- Fixed background color issues of Windows binary -- Fixed Windows binary to execute command using cmd.exe with no parsing and - escaping (#1072) -- Added support for `window` layout on Vim 8 using Vim 8 terminal (#1055) - -0.17.0-2 --------- - -A maintenance release for auxiliary scripts. fzf binaries are not updated. - -- Experimental support for the builtin terminal of Vim 8 - - fzf can now run inside GVim -- Updated Vim plugin to better handle `&shell` issue on fish -- Fixed a bug of fzf-tmux where invalid output is generated -- Fixed fzf-tmux to work even when `tput` does not work - -0.17.0 ------- -- Performance optimization -- One can match literal spaces in extended-search mode with a space prepended - by a backslash. -- `--expect` is now additive and can be specified multiple times. - -0.16.11 -------- -- Performance optimization -- Fixed missing preview update - -0.16.10 -------- -- Fixed invalid handling of ANSI colors in preview window -- Further improved `--ansi` performance - -0.16.9 ------- -- Memory and performance optimization - - Around 20% performance improvement for general use cases - - Up to 5x faster processing of `--ansi` - - Up to 50% reduction of memory usage -- Bug fixes and usability improvements - - Fixed handling of bracketed paste mode - - [ERROR] on info line when the default command failed - - More efficient rendering of preview window - - `--no-clear` updated for repetitive relaunching scenarios - -0.16.8 ------- -- New `change` event and `top` action for `--bind` - - `fzf --bind change:top` - - Move cursor to the top result whenever the query string is changed - - `fzf --bind 'ctrl-w:unix-word-rubout+top,ctrl-u:unix-line-discard+top'` - - `top` combined with `unix-word-rubout` and `unix-line-discard` -- Fixed inconsistent tiebreak scores when `--nth` is used -- Proper display of tab characters in `--prompt` -- Fixed not to `--cycle` on page-up/page-down to prevent overshoot -- Git revision in `--version` output -- Basic support for Cygwin environment -- Many fixes in Vim plugin on Windows/Cygwin (thanks to @janlazo) - -0.16.7 ------- -- Added support for `ctrl-alt-[a-z]` key chords -- CTRL-Z (SIGSTOP) now works with fzf -- fzf will export `$FZF_PREVIEW_WINDOW` so that the scripts can use it -- Bug fixes and improvements in Vim plugin and shell extensions - -0.16.6 ------- -- Minor bug fixes and improvements -- Added `--no-clear` option for scripting purposes - -0.16.5 ------- -- Minor bug fixes -- Added `toggle-preview-wrap` action -- Built with Go 1.8 - -0.16.4 ------- -- Added `--border` option to draw border above and below the finder -- Bug fixes and improvements - -0.16.3 ------- -- Fixed a bug where fzf incorrectly display the lines when straddling tab - characters are trimmed -- Placeholder expression used in `--preview` and `execute` action can - optionally take `+` flag to be used with multiple selections - - e.g. `git log --oneline | fzf --multi --preview 'git show {+1}'` -- Added `execute-silent` action for executing a command silently without - switching to the alternate screen. This is useful when the process is - short-lived and you're not interested in its output. - - e.g. `fzf --bind 'ctrl-y:execute!(echo -n {} | pbcopy)'` -- `ctrl-space` is allowed in `--bind` - -0.16.2 ------- -- Dropped ncurses dependency -- Binaries for freebsd, openbsd, arm5, arm6, arm7, and arm8 -- Official 24-bit color support -- Added support for composite actions in `--bind`. Multiple actions can be - chained using `+` separator. - - e.g. `fzf --bind 'ctrl-y:execute(echo -n {} | pbcopy)+abort'` -- `--preview-window` with size 0 is allowed. This is used to make fzf execute - preview command in the background without displaying the result. -- Minor bug fixes and improvements - -0.16.1 ------- -- Fixed `--height` option to properly fill the window with the background - color -- Added `half-page-up` and `half-page-down` actions -- Added `-L` flag to the default find command - -0.16.0 ------- -- *Added `--height HEIGHT[%]` option* - - fzf can now display finder without occupying the full screen -- Preview window will truncate long lines by default. Line wrap can be enabled - by `:wrap` flag in `--preview-window`. -- Latin script letters will be normalized before matching so that it's easier - to match against accented letters. e.g. `sodanco` can match `Só Danço Samba`. - - Normalization can be disabled via `--literal` -- Added `--filepath-word` to make word-wise movements/actions (`alt-b`, - `alt-f`, `alt-bs`, `alt-d`) respect path separators - -0.15.9 ------- -- Fixed rendering glitches introduced in 0.15.8 -- The default escape delay is reduced to 50ms and is configurable via - `$ESCDELAY` -- Scroll indicator at the top-right corner of the preview window is always - displayed when there's overflow -- Can now be built with ncurses 6 or tcell to support extra features - - *ncurses 6* - - Supports more than 256 color pairs - - Supports italics - - *tcell* - - 24-bit color support - - See https://github.com/junegunn/fzf/blob/master/BUILD.md - -0.15.8 ------- -- Updated ANSI processor to handle more VT-100 escape sequences -- Added `--no-bold` (and `--bold`) option -- Improved escape sequence processing for WSL -- Added support for `alt-[0-9]`, `f11`, and `f12` for `--bind` and `--expect` - -0.15.7 ------- -- Fixed panic when color is disabled and header lines contain ANSI colors - -0.15.6 ------- -- Windows binaries! (@kelleyma49) -- Fixed the bug where header lines are cleared when preview window is toggled -- Fixed not to display ^N and ^O on screen -- Fixed cursor keys (or any key sequence that starts with ESC) on WSL by - making fzf wait for additional keystrokes after ESC for up to 100ms - -0.15.5 ------- -- Setting foreground color will no longer set background color to black - - e.g. `fzf --color fg:153` -- `--tiebreak=end` will consider relative position instead of absolute distance -- Updated `fzf#wrap` function to respect `g:fzf_colors` - -0.15.4 ------- -- Added support for range expression in preview and execute action - - e.g. `ls -l | fzf --preview="echo user={3} when={-4..-2}; cat {-1}" --header-lines=1` - - `{q}` will be replaced to the single-quoted string of the current query -- Fixed to properly handle unicode whitespace characters -- Display scroll indicator in preview window -- Inverse search term will use exact matcher by default - - This is a breaking change, but I believe it makes much more sense. It is - almost impossible to predict which entries will be filtered out due to - a fuzzy inverse term. You can still perform inverse-fuzzy-match by - prepending `!'` to the term. - -0.15.3 ------- -- Added support for more ANSI attributes: dim, underline, blink, and reverse -- Fixed race condition in `toggle-preview` - -0.15.2 ------- -- Preview window is now scrollable - - With mouse scroll or with bindable actions - - `preview-up` - - `preview-down` - - `preview-page-up` - - `preview-page-down` -- Updated ANSI processor to support high intensity colors and ignore - some VT100-related escape sequences - -0.15.1 ------- -- Fixed panic when the pattern occurs after 2^15-th column -- Fixed rendering delay when displaying extremely long lines - -0.15.0 ------- -- Improved fuzzy search algorithm - - Added `--algo=[v1|v2]` option so one can still choose the old algorithm - which values the search performance over the quality of the result -- Advanced scoring criteria -- `--read0` to read input delimited by ASCII NUL character -- `--print0` to print output delimited by ASCII NUL character - -0.13.5 ------- -- Memory and performance optimization - - Up to 2x performance with half the amount of memory - -0.13.4 ------- -- Performance optimization - - Memory footprint for ascii string is reduced by 60% - - 15 to 20% improvement of query performance - - Up to 45% better performance of `--nth` with non-regex delimiters -- Fixed invalid handling of `hidden` property of `--preview-window` - -0.13.3 ------- -- Fixed duplicate rendering of the last line in preview window - -0.13.2 ------- -- Fixed race condition where preview window is not properly cleared - -0.13.1 ------- -- Fixed UI issue with large `--preview` output with many ANSI codes - -0.13.0 ------- -- Added preview feature - - `--preview CMD` - - `--preview-window POS[:SIZE][:hidden]` -- `{}` in execute action is now replaced to the single-quoted (instead of - double-quoted) string of the current line -- Fixed to ignore control characters for bracketed paste mode - -0.12.2 ------- - -- 256-color capability detection does not require `256` in `$TERM` -- Added `print-query` action -- More named keys for binding; F1 ~ F10, - ALT-/, ALT-space, and ALT-enter -- Added `jump` and `jump-accept` actions that implement [EasyMotion][em]-like - movement - ![][jump] - -[em]: https://github.com/easymotion/vim-easymotion -[jump]: https://cloud.githubusercontent.com/assets/700826/15367574/b3999dc4-1d64-11e6-85da-28ceeb1a9bc2.png - -0.12.1 ------- - -- Ranking algorithm introduced in 0.12.0 is now universally applied -- Fixed invalid cache reference in exact mode -- Fixes and improvements in Vim plugin and shell extensions - -0.12.0 ------- - -- Enhanced ranking algorithm -- Minor bug fixes - -0.11.4 ------- - -- Added `--hscroll-off=COL` option (default: 10) (#513) -- Some fixes in Vim plugin and shell extensions - -0.11.3 ------- - -- Graceful exit on SIGTERM (#482) -- `$SHELL` instead of `sh` for `execute` action and `$FZF_DEFAULT_COMMAND` (#481) -- Changes in fuzzy completion API - - [`_fzf_compgen_{path,dir}`](https://github.com/junegunn/fzf/commit/9617647) - - [`_fzf_complete_COMMAND_post`](https://github.com/junegunn/fzf/commit/8206746) - for post-processing - -0.11.2 ------- - -- `--tiebreak` now accepts comma-separated list of sort criteria - - Each criterion should appear only once in the list - - `index` is only allowed at the end of the list - - `index` is implicitly appended to the list when not specified - - Default is `length` (or equivalently `length,index`) -- `begin` criterion will ignore leading whitespaces when calculating the index -- Added `toggle-in` and `toggle-out` actions - - Switch direction depending on `--reverse`-ness - - `export FZF_DEFAULT_OPTS="--bind tab:toggle-out,shift-tab:toggle-in"` -- Reduced the initial delay when `--tac` is not given - - fzf defers the initial rendering of the screen up to 100ms if the input - stream is ongoing to prevent unnecessary redraw during the initial - phase. However, 100ms delay is quite noticeable and might give the - impression that fzf is not snappy enough. This commit reduces the - maximum delay down to 20ms when `--tac` is not specified, in which case - the input list quickly fills the entire screen. - -0.11.1 ------- - -- Added `--tabstop=SPACES` option - -0.11.0 ------- - -- Added OR operator for extended-search mode -- Added `--execute-multi` action -- Fixed incorrect cursor position when unicode wide characters are used in - `--prompt` -- Fixes and improvements in shell extensions - -0.10.9 ------- - -- Extended-search mode is now enabled by default - - `--extended-exact` is deprecated and instead we have `--exact` for - orthogonally controlling "exactness" of search -- Fixed not to display non-printable characters -- Added `double-click` for `--bind` option -- More robust handling of SIGWINCH - -0.10.8 ------- - -- Fixed panic when trying to set colors after colors are disabled (#370) - -0.10.7 ------- - -- Fixed unserialized interrupt handling during execute action which often - caused invalid memory access and crash -- Changed `--tiebreak=length` (default) to use trimmed length when `--nth` is - used - -0.10.6 ------- - -- Replaced `--header-file` with `--header` option -- `--header` and `--header-lines` can be used together -- Changed exit status - - 0: Okay - - 1: No match - - 2: Error - - 130: Interrupted -- 64-bit linux binary is statically-linked with ncurses to avoid - compatibility issues. - -0.10.5 ------- - -- `'`-prefix to unquote the term in `--extended-exact` mode -- Backward scan when `--tiebreak=end` is set - -0.10.4 ------- - -- Fixed to remove ANSI code from output when `--with-nth` is set - -0.10.3 ------- - -- Fixed slow performance of `--with-nth` when used with `--delimiter` - - Regular expression engine of Golang as of now is very slow, so the fixed - version will treat the given delimiter pattern as a plain string instead - of a regular expression unless it contains special characters and is - a valid regular expression. - - Simpler regular expression for delimiter for better performance - -0.10.2 ------- - -### Fixes and improvements - -- Improvement in perceived response time of queries - - Eager, efficient rune array conversion -- Graceful exit when failed to initialize ncurses (invalid $TERM) -- Improved ranking algorithm when `--nth` option is set -- Changed the default command not to fail when there are files whose names - start with dash - -0.10.1 ------- - -### New features - -- Added `--margin` option -- Added options for sticky header - - `--header-file` - - `--header-lines` -- Added `cancel` action which clears the input or closes the finder when the - input is already empty - - e.g. `export FZF_DEFAULT_OPTS="--bind esc:cancel"` -- Added `delete-char/eof` action to differentiate `CTRL-D` and `DEL` - -### Minor improvements/fixes - -- Fixed to allow binding colon and comma keys -- Fixed ANSI processor to handle color regions spanning multiple lines - -0.10.0 ------- - -### New features - -- More actions for `--bind` - - `select-all` - - `deselect-all` - - `toggle-all` - - `ignore` -- `execute(...)` action for running arbitrary command without leaving fzf - - `fzf --bind "ctrl-m:execute(less {})"` - - `fzf --bind "ctrl-t:execute(tmux new-window -d 'vim {}')"` - - If the command contains parentheses, use any of the follows alternative - notations to avoid parse errors - - `execute[...]` - - `execute~...~` - - `execute!...!` - - `execute@...@` - - `execute#...#` - - `execute$...$` - - `execute%...%` - - `execute^...^` - - `execute&...&` - - `execute*...*` - - `execute;...;` - - `execute/.../` - - `execute|...|` - - `execute:...` - - This is the special form that frees you from parse errors as it - does not expect the closing character - - The catch is that it should be the last one in the - comma-separated list -- Added support for optional search history - - `--history HISTORY_FILE` - - When used, `CTRL-N` and `CTRL-P` are automatically remapped to - `next-history` and `previous-history` - - `--history-size MAX_ENTRIES` (default: 1000) -- Cyclic scrolling can be enabled with `--cycle` -- Fixed the bug where the spinner was not spinning on idle input stream - - e.g. `sleep 100 | fzf` - -### Minor improvements/fixes - -- Added synonyms for key names that can be specified for `--bind`, - `--toggle-sort`, and `--expect` -- Fixed the color of multi-select marker on the current line -- Fixed to allow `^pattern$` in extended-search mode - - -0.9.13 ------- - -### New features - -- Color customization with the extended `--color` option - -### Bug fixes - -- Fixed premature termination of Reader in the presence of a long line which - is longer than 64KB - -0.9.12 ------- - -### New features - -- Added `--bind` option for custom key bindings - -### Bug fixes - -- Fixed to update "inline-info" immediately after terminal resize -- Fixed ANSI code offset calculation - -0.9.11 ------- - -### New features - -- Added `--inline-info` option for saving screen estate (#202) - - Useful inside Neovim - - e.g. `let $FZF_DEFAULT_OPTS = $FZF_DEFAULT_OPTS.' --inline-info'` - -### Bug fixes - -- Invalid mutation of input on case conversion (#209) -- Smart-case for each term in extended-search mode (#208) -- Fixed double-click result when scroll offset is positive - -0.9.10 ------- - -### Improvements - -- Performance optimization -- Less aggressive memoization to limit memory usage - -### New features - -- Added color scheme for light background: `--color=light` - -0.9.9 ------ - -### New features - -- Added `--tiebreak` option (#191) -- Added `--no-hscroll` option (#193) -- Visual indication of `--toggle-sort` (#194) - -0.9.8 ------ - -### Bug fixes - -- Fixed Unicode case handling (#186) -- Fixed to terminate on RuneError (#185) - -0.9.7 ------ - -### New features - -- Added `--toggle-sort` option (#173) - - `--toggle-sort=ctrl-r` is applied to `CTRL-R` shell extension - -### Bug fixes - -- Fixed to print empty line if `--expect` is set and fzf is completed by - `--select-1` or `--exit-0` (#172) -- Fixed to allow comma character as an argument to `--expect` option - -0.9.6 ------ - -### New features - -#### Added `--expect` option (#163) - -If you provide a comma-separated list of keys with `--expect` option, fzf will -allow you to select the match and complete the finder when any of the keys is -pressed. Additionally, fzf will print the name of the key pressed as the first -line of the output so that your script can decide what to do next based on the -information. - -```sh -fzf --expect=ctrl-v,ctrl-t,alt-s,f1,f2,~,@ -``` - -The updated vim plugin uses this option to implement -[ctrlp](https://github.com/kien/ctrlp.vim)-compatible key bindings. - -### Bug fixes - -- Fixed to ignore ANSI escape code `\e[K` (#162) - -0.9.5 ------ - -### New features - -#### Added `--ansi` option (#150) - -If you give `--ansi` option to fzf, fzf will interpret ANSI color codes from -the input, display the item with the ANSI colors (true colors are not -supported), and strips the codes from the output. This option is off by -default as it entails some overhead. - -### Improvements - -#### Reduced initial memory footprint (#151) - -By removing unnecessary copy of pointers, fzf will use significantly smaller -amount of memory when it's started. The difference is hugely noticeable when -the input is extremely large. (e.g. `locate / | fzf`) - -### Bug fixes - -- Fixed panic on `--no-sort --filter ''` (#149) - -0.9.4 ------ - -### New features - -#### Added `--tac` option to reverse the order of the input. - -One might argue that this option is unnecessary since we can already put `tac` -or `tail -r` in the command pipeline to achieve the same result. However, the -advantage of `--tac` is that it does not block until the input is complete. - -### *Backward incompatible changes* - -#### Changed behavior on `--no-sort` - -`--no-sort` option will no longer reverse the display order within finder. You -may want to use the new `--tac` option with `--no-sort`. - -``` -history | fzf +s --tac -``` - -### Improvements - -#### `--filter` will not block when sort is disabled - -When fzf works in filtering mode (`--filter`) and sort is disabled -(`--no-sort`), there's no need to block until input is complete. The new -version of fzf will print the matches on-the-fly when the following condition -is met: - - --filter TERM --no-sort [--no-tac --no-sync] - -or simply: - - -f TERM +s - -This change removes unnecessary delay in the use cases like the following: - - fzf -f xxx +s | head -5 - -However, in this case, fzf processes the lines sequentially, so it cannot -utilize multiple cores, and fzf will run slightly slower than the previous -mode of execution where filtering is done in parallel after the entire input -is loaded. If the user is concerned about this performance problem, one can -add `--sync` option to re-enable buffering. - -0.9.3 ------ - -### New features -- Added `--sync` option for multi-staged filtering - -### Improvements -- `--select-1` and `--exit-0` will start finder immediately when the condition - cannot be met diff --git a/dotfiles/.vim/plugged/fzf/Dockerfile b/dotfiles/.vim/plugged/fzf/Dockerfile deleted file mode 100644 index 9cccaaa5..00000000 --- a/dotfiles/.vim/plugged/fzf/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM archlinux -RUN pacman -Sy && pacman --noconfirm -S awk git tmux zsh fish ruby procps go make gcc -RUN gem install --no-document -v 5.14.2 minitest -RUN echo '. /usr/share/bash-completion/completions/git' >> ~/.bashrc -RUN echo '. ~/.bashrc' >> ~/.bash_profile - -# Do not set default PS1 -RUN rm -f /etc/bash.bashrc -COPY . /fzf -RUN cd /fzf && make install && ./install --all -CMD tmux new 'set -o pipefail; ruby /fzf/test/test_go.rb | tee out && touch ok' && cat out && [ -e ok ] diff --git a/dotfiles/.vim/plugged/fzf/LICENSE b/dotfiles/.vim/plugged/fzf/LICENSE deleted file mode 100644 index 533a79de..00000000 --- a/dotfiles/.vim/plugged/fzf/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2022 Junegunn Choi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/dotfiles/.vim/plugged/fzf/Makefile b/dotfiles/.vim/plugged/fzf/Makefile deleted file mode 100644 index 15808154..00000000 --- a/dotfiles/.vim/plugged/fzf/Makefile +++ /dev/null @@ -1,173 +0,0 @@ -SHELL := bash -GO ?= go -GOOS ?= $(word 1, $(subst /, " ", $(word 4, $(shell go version)))) - -MAKEFILE := $(realpath $(lastword $(MAKEFILE_LIST))) -ROOT_DIR := $(shell dirname $(MAKEFILE)) -SOURCES := $(wildcard *.go src/*.go src/*/*.go) $(MAKEFILE) - -ifdef FZF_VERSION -VERSION := $(FZF_VERSION) -else -VERSION := $(shell git describe --abbrev=0 2> /dev/null) -endif -ifeq ($(VERSION),) -$(error Not on git repository; cannot determine $$FZF_VERSION) -endif -VERSION_TRIM := $(shell sed "s/-.*//" <<< $(VERSION)) -VERSION_REGEX := $(subst .,\.,$(VERSION_TRIM)) - -ifdef FZF_REVISION -REVISION := $(FZF_REVISION) -else -REVISION := $(shell git log -n 1 --pretty=format:%h -- $(SOURCES) 2> /dev/null) -endif -ifeq ($(REVISION),) -$(error Not on git repository; cannot determine $$FZF_REVISION) -endif -BUILD_FLAGS := -a -ldflags "-s -w -X main.version=$(VERSION) -X main.revision=$(REVISION)" -tags "$(TAGS)" - -BINARY32 := fzf-$(GOOS)_386 -BINARY64 := fzf-$(GOOS)_amd64 -BINARYARM5 := fzf-$(GOOS)_arm5 -BINARYARM6 := fzf-$(GOOS)_arm6 -BINARYARM7 := fzf-$(GOOS)_arm7 -BINARYARM8 := fzf-$(GOOS)_arm8 -BINARYPPC64LE := fzf-$(GOOS)_ppc64le -BINARYRISCV64 := fzf-$(GOOS)_riscv64 -BINARYLOONG64 := fzf-$(GOOS)_loong64 - -# https://en.wikipedia.org/wiki/Uname -UNAME_M := $(shell uname -m) -ifeq ($(UNAME_M),x86_64) - BINARY := $(BINARY64) -else ifeq ($(UNAME_M),amd64) - BINARY := $(BINARY64) -else ifeq ($(UNAME_M),i686) - BINARY := $(BINARY32) -else ifeq ($(UNAME_M),i386) - BINARY := $(BINARY32) -else ifeq ($(UNAME_M),armv5l) - BINARY := $(BINARYARM5) -else ifeq ($(UNAME_M),armv6l) - BINARY := $(BINARYARM6) -else ifeq ($(UNAME_M),armv7l) - BINARY := $(BINARYARM7) -else ifeq ($(UNAME_M),armv8l) - BINARY := $(BINARYARM8) -else ifeq ($(UNAME_M),arm64) - BINARY := $(BINARYARM8) -else ifeq ($(UNAME_M),aarch64) - BINARY := $(BINARYARM8) -else ifeq ($(UNAME_M),ppc64le) - BINARY := $(BINARYPPC64LE) -else ifeq ($(UNAME_M),riscv64) - BINARY := $(BINARYRISCV64) -else ifeq ($(UNAME_M),loongarch64) - BINARY := $(BINARYLOONG64) -else -$(error Build on $(UNAME_M) is not supported, yet.) -endif - -all: target/$(BINARY) - -test: $(SOURCES) - [ -z "$$(gofmt -s -d src)" ] || (gofmt -s -d src; exit 1) - SHELL=/bin/sh GOOS= $(GO) test -v -tags "$(TAGS)" \ - github.com/junegunn/fzf/src \ - github.com/junegunn/fzf/src/algo \ - github.com/junegunn/fzf/src/tui \ - github.com/junegunn/fzf/src/util - -bench: - cd src && SHELL=/bin/sh GOOS= $(GO) test -v -tags "$(TAGS)" -run=Bench -bench=. -benchmem - -install: bin/fzf - -build: - goreleaser --rm-dist --snapshot - -release: -ifndef GITHUB_TOKEN - $(error GITHUB_TOKEN is not defined) -endif - - # Check if we are on master branch -ifneq ($(shell git symbolic-ref --short HEAD),master) - $(error Not on master branch) -endif - - # Check if version numbers are properly updated - grep -q ^$(VERSION_REGEX)$$ CHANGELOG.md - grep -qF '"fzf $(VERSION_TRIM)"' man/man1/fzf.1 - grep -qF '"fzf $(VERSION_TRIM)"' man/man1/fzf-tmux.1 - grep -qF $(VERSION) install - grep -qF $(VERSION) install.ps1 - - # Make release note out of CHANGELOG.md - mkdir -p tmp - sed -n '/^$(VERSION_REGEX)$$/,/^[0-9]/p' CHANGELOG.md | tail -r | \ - sed '1,/^ *$$/d' | tail -r | sed 1,2d | tee tmp/release-note - - # Push to temp branch first so that install scripts always works on master branch - git checkout -B temp master - git push origin temp --follow-tags --force - - # Make a GitHub release - goreleaser --rm-dist --release-notes tmp/release-note - - # Push to master - git checkout master - git push origin master - - # Delete temp branch - git push origin --delete temp - -clean: - $(RM) -r dist target - -target/$(BINARY32): $(SOURCES) - GOARCH=386 $(GO) build $(BUILD_FLAGS) -o $@ - -target/$(BINARY64): $(SOURCES) - GOARCH=amd64 $(GO) build $(BUILD_FLAGS) -o $@ - -# https://github.com/golang/go/wiki/GoArm -target/$(BINARYARM5): $(SOURCES) - GOARCH=arm GOARM=5 $(GO) build $(BUILD_FLAGS) -o $@ - -target/$(BINARYARM6): $(SOURCES) - GOARCH=arm GOARM=6 $(GO) build $(BUILD_FLAGS) -o $@ - -target/$(BINARYARM7): $(SOURCES) - GOARCH=arm GOARM=7 $(GO) build $(BUILD_FLAGS) -o $@ - -target/$(BINARYARM8): $(SOURCES) - GOARCH=arm64 $(GO) build $(BUILD_FLAGS) -o $@ - -target/$(BINARYPPC64LE): $(SOURCES) - GOARCH=ppc64le $(GO) build $(BUILD_FLAGS) -o $@ - -target/$(BINARYRISCV64): $(SOURCES) - GOARCH=riscv64 $(GO) build $(BUILD_FLAGS) -o $@ - -target/$(BINARYLOONG64): $(SOURCES) - GOARCH=loong64 $(GO) build $(BUILD_FLAGS) -o $@ - -bin/fzf: target/$(BINARY) | bin - -rm -f bin/fzf - cp -f target/$(BINARY) bin/fzf - -docker: - docker build -t fzf-arch . - docker run -it fzf-arch tmux - -docker-test: - docker build -t fzf-arch . - docker run -it fzf-arch - -update: - $(GO) get -u - $(GO) mod tidy - -.PHONY: all build release test bench install clean docker docker-test update diff --git a/dotfiles/.vim/plugged/fzf/README-VIM.md b/dotfiles/.vim/plugged/fzf/README-VIM.md deleted file mode 100644 index 425bf672..00000000 --- a/dotfiles/.vim/plugged/fzf/README-VIM.md +++ /dev/null @@ -1,486 +0,0 @@ -FZF Vim integration -=================== - -Installation ------------- - -Once you have fzf installed, you can enable it inside Vim simply by adding the -directory to `&runtimepath` in your Vim configuration file. The path may -differ depending on the package manager. - -```vim -" If installed using Homebrew -set rtp+=/usr/local/opt/fzf - -" If installed using git -set rtp+=~/.fzf -``` - -If you use [vim-plug](https://github.com/junegunn/vim-plug), the same can be -written as: - -```vim -" If installed using Homebrew -Plug '/usr/local/opt/fzf' - -" If installed using git -Plug '~/.fzf' -``` - -But if you want the latest Vim plugin file from GitHub rather than the one -included in the package, write: - -```vim -Plug 'junegunn/fzf' -``` - -The Vim plugin will pick up fzf binary available on the system. If fzf is not -found on `$PATH`, it will ask you if it should download the latest binary for -you. - -To make sure that you have the latest version of the binary, set up -post-update hook like so: - -```vim -Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } -``` - -Summary -------- - -The Vim plugin of fzf provides two core functions, and `:FZF` command which is -the basic file selector command built on top of them. - -1. **`fzf#run([spec dict])`** - - Starts fzf inside Vim with the given spec - - `:call fzf#run({'source': 'ls'})` -2. **`fzf#wrap([spec dict]) -> (dict)`** - - Takes a spec for `fzf#run` and returns an extended version of it with - additional options for addressing global preferences (`g:fzf_xxx`) - - `:echo fzf#wrap({'source': 'ls'})` - - We usually *wrap* a spec with `fzf#wrap` before passing it to `fzf#run` - - `:call fzf#run(fzf#wrap({'source': 'ls'}))` -3. **`:FZF [fzf_options string] [path string]`** - - Basic fuzzy file selector - - A reference implementation for those who don't want to write VimScript - to implement custom commands - - If you're looking for more such commands, check out [fzf.vim](https://github.com/junegunn/fzf.vim) project. - -The most important of all is `fzf#run`, but it would be easier to understand -the whole if we start off with `:FZF` command. - -`:FZF[!]` ---------- - -```vim -" Look for files under current directory -:FZF - -" Look for files under your home directory -:FZF ~ - -" With fzf command-line options -:FZF --reverse --info=inline /tmp - -" Bang version starts fzf in fullscreen mode -:FZF! -``` - -Similarly to [ctrlp.vim](https://github.com/kien/ctrlp.vim), use enter key, -`CTRL-T`, `CTRL-X` or `CTRL-V` to open selected files in the current window, -in new tabs, in horizontal splits, or in vertical splits respectively. - -Note that the environment variables `FZF_DEFAULT_COMMAND` and -`FZF_DEFAULT_OPTS` also apply here. - -### Configuration - -- `g:fzf_action` - - Customizable extra key bindings for opening selected files in different ways -- `g:fzf_layout` - - Determines the size and position of fzf window -- `g:fzf_colors` - - Customizes fzf colors to match the current color scheme -- `g:fzf_history_dir` - - Enables history feature - -#### Examples - -```vim -" This is the default extra key bindings -let g:fzf_action = { - \ 'ctrl-t': 'tab split', - \ 'ctrl-x': 'split', - \ 'ctrl-v': 'vsplit' } - -" An action can be a reference to a function that processes selected lines -function! s:build_quickfix_list(lines) - call setqflist(map(copy(a:lines), '{ "filename": v:val }')) - copen - cc -endfunction - -let g:fzf_action = { - \ 'ctrl-q': function('s:build_quickfix_list'), - \ 'ctrl-t': 'tab split', - \ 'ctrl-x': 'split', - \ 'ctrl-v': 'vsplit' } - -" Default fzf layout -" - Popup window (center of the screen) -let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } - -" - Popup window (center of the current window) -let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true } } - -" - Popup window (anchored to the bottom of the current window) -let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true, 'yoffset': 1.0 } } - -" - down / up / left / right -let g:fzf_layout = { 'down': '40%' } - -" - Window using a Vim command -let g:fzf_layout = { 'window': 'enew' } -let g:fzf_layout = { 'window': '-tabnew' } -let g:fzf_layout = { 'window': '10new' } - -" Customize fzf colors to match your color scheme -" - fzf#wrap translates this to a set of `--color` options -let g:fzf_colors = -\ { 'fg': ['fg', 'Normal'], - \ 'bg': ['bg', 'Normal'], - \ 'hl': ['fg', 'Comment'], - \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], - \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], - \ 'hl+': ['fg', 'Statement'], - \ 'info': ['fg', 'PreProc'], - \ 'border': ['fg', 'Ignore'], - \ 'prompt': ['fg', 'Conditional'], - \ 'pointer': ['fg', 'Exception'], - \ 'marker': ['fg', 'Keyword'], - \ 'spinner': ['fg', 'Label'], - \ 'header': ['fg', 'Comment'] } - -" Enable per-command history -" - History files will be stored in the specified directory -" - When set, CTRL-N and CTRL-P will be bound to 'next-history' and -" 'previous-history' instead of 'down' and 'up'. -let g:fzf_history_dir = '~/.local/share/fzf-history' -``` - -##### Explanation of `g:fzf_colors` - -`g:fzf_colors` is a dictionary mapping fzf elements to a color specification -list: - - element: [ component, group1 [, group2, ...] ] - -- `element` is an fzf element to apply a color to: - - | Element | Description | - | --- | --- | - | `fg` / `bg` / `hl` | Item (foreground / background / highlight) | - | `fg+` / `bg+` / `hl+` | Current item (foreground / background / highlight) | - | `preview-fg` / `preview-bg` | Preview window text and background | - | `hl` / `hl+` | Highlighted substrings (normal / current) | - | `gutter` | Background of the gutter on the left | - | `pointer` | Pointer to the current line (`>`) | - | `marker` | Multi-select marker (`>`) | - | `border` | Border around the window (`--border` and `--preview`) | - | `header` | Header (`--header` or `--header-lines`) | - | `info` | Info line (match counters) | - | `spinner` | Streaming input indicator | - | `query` | Query string | - | `disabled` | Query string when search is disabled | - | `prompt` | Prompt before query (`> `) | - | `pointer` | Pointer to the current line (`>`) | - -- `component` specifies the component (`fg` / `bg`) from which to extract the - color when considering each of the following highlight groups - -- `group1 [, group2, ...]` is a list of highlight groups that are searched (in - order) for a matching color definition - -For example, consider the following specification: - -```vim - 'prompt': ['fg', 'Conditional', 'Comment'], -``` - -This means we color the **prompt** -- using the `fg` attribute of the `Conditional` if it exists, -- otherwise use the `fg` attribute of the `Comment` highlight group if it exists, -- otherwise fall back to the default color settings for the **prompt**. - -You can examine the color option generated according the setting by printing -the result of `fzf#wrap()` function like so: - -```vim -:echo fzf#wrap() -``` - -`fzf#run` ---------- - -`fzf#run()` function is the core of Vim integration. It takes a single -dictionary argument, *a spec*, and starts fzf process accordingly. At the very -least, specify `sink` option to tell what it should do with the selected -entry. - -```vim -call fzf#run({'sink': 'e'}) -``` - -We haven't specified the `source`, so this is equivalent to starting fzf on -command line without standard input pipe; fzf will use find command (or -`$FZF_DEFAULT_COMMAND` if defined) to list the files under the current -directory. When you select one, it will open it with the sink, `:e` command. -If you want to open it in a new tab, you can pass `:tabedit` command instead -as the sink. - -```vim -call fzf#run({'sink': 'tabedit'}) -``` - -Instead of using the default find command, you can use any shell command as -the source. The following example will list the files managed by git. It's -equivalent to running `git ls-files | fzf` on shell. - -```vim -call fzf#run({'source': 'git ls-files', 'sink': 'e'}) -``` - -fzf options can be specified as `options` entry in spec dictionary. - -```vim -call fzf#run({'sink': 'tabedit', 'options': '--multi --reverse'}) -``` - -You can also pass a layout option if you don't want fzf window to take up the -entire screen. - -```vim -" up / down / left / right / window are allowed -call fzf#run({'source': 'git ls-files', 'sink': 'e', 'left': '40%'}) -call fzf#run({'source': 'git ls-files', 'sink': 'e', 'window': '30vnew'}) -``` - -`source` doesn't have to be an external shell command, you can pass a Vim -array as the source. In the next example, we pass the names of color -schemes as the source to implement a color scheme selector. - -```vim -call fzf#run({'source': map(split(globpath(&rtp, 'colors/*.vim')), - \ 'fnamemodify(v:val, ":t:r")'), - \ 'sink': 'colo', 'left': '25%'}) -``` - -The following table summarizes the available options. - -| Option name | Type | Description | -| -------------------------- | ------------- | ---------------------------------------------------------------- | -| `source` | string | External command to generate input to fzf (e.g. `find .`) | -| `source` | list | Vim list as input to fzf | -| `sink` | string | Vim command to handle the selected item (e.g. `e`, `tabe`) | -| `sink` | funcref | Reference to function to process each selected item | -| `sinklist` (or `sink*`) | funcref | Similar to `sink`, but takes the list of output lines at once | -| `options` | string/list | Options to fzf | -| `dir` | string | Working directory | -| `up`/`down`/`left`/`right` | number/string | (Layout) Window position and size (e.g. `20`, `50%`) | -| `tmux` | string | (Layout) fzf-tmux options (e.g. `-p90%,60%`) | -| `window` (Vim 8 / Neovim) | string | (Layout) Command to open fzf window (e.g. `vertical aboveleft 30new`) | -| `window` (Vim 8 / Neovim) | dict | (Layout) Popup window settings (e.g. `{'width': 0.9, 'height': 0.6}`) | - -`options` entry can be either a string or a list. For simple cases, string -should suffice, but prefer to use list type to avoid escaping issues. - -```vim -call fzf#run({'options': '--reverse --prompt "C:\\Program Files\\"'}) -call fzf#run({'options': ['--reverse', '--prompt', 'C:\Program Files\']}) -``` - -When `window` entry is a dictionary, fzf will start in a popup window. The -following options are allowed: - -- Required: - - `width` [float range [0 ~ 1]] or [integer range [8 ~ ]] - - `height` [float range [0 ~ 1]] or [integer range [4 ~ ]] -- Optional: - - `yoffset` [float default 0.5 range [0 ~ 1]] - - `xoffset` [float default 0.5 range [0 ~ 1]] - - `relative` [boolean default v:false] - - `border` [string default `rounded`]: Border style - - `rounded` / `sharp` / `horizontal` / `vertical` / `top` / `bottom` / `left` / `right` / `no[ne]` - -`fzf#wrap` ----------- - -We have seen that several aspects of `:FZF` command can be configured with -a set of global option variables; different ways to open files -(`g:fzf_action`), window position and size (`g:fzf_layout`), color palette -(`g:fzf_colors`), etc. - -So how can we make our custom `fzf#run` calls also respect those variables? -Simply by *"wrapping"* the spec dictionary with `fzf#wrap` before passing it -to `fzf#run`. - -- **`fzf#wrap([name string], [spec dict], [fullscreen bool]) -> (dict)`** - - All arguments are optional. Usually we only need to pass a spec dictionary. - - `name` is for managing history files. It is ignored if - `g:fzf_history_dir` is not defined. - - `fullscreen` can be either `0` or `1` (default: 0). - -`fzf#wrap` takes a spec and returns an extended version of it (also -a dictionary) with additional options for addressing global preferences. You -can examine the return value of it like so: - -```vim -echo fzf#wrap({'source': 'ls'}) -``` - -After we *"wrap"* our spec, we pass it to `fzf#run`. - -```vim -call fzf#run(fzf#wrap({'source': 'ls'})) -``` - -Now it supports `CTRL-T`, `CTRL-V`, and `CTRL-X` key bindings (configurable -via `g:fzf_action`) and it opens fzf window according to `g:fzf_layout` -setting. - -To make it easier to use, let's define `LS` command. - -```vim -command! LS call fzf#run(fzf#wrap({'source': 'ls'})) -``` - -Type `:LS` and see how it works. - -We would like to make `:LS!` (bang version) open fzf in fullscreen, just like -`:FZF!`. Add `-bang` to command definition, and use `` value to set -the last `fullscreen` argument of `fzf#wrap` (see `:help `). - -```vim -" On :LS!, evaluates to '!', and '!0' becomes 1 -command! -bang LS call fzf#run(fzf#wrap({'source': 'ls'}, 0)) -``` - -Our `:LS` command will be much more useful if we can pass a directory argument -to it, so that something like `:LS /tmp` is possible. - -```vim -command! -bang -complete=dir -nargs=? LS - \ call fzf#run(fzf#wrap({'source': 'ls', 'dir': }, 0)) -``` - -Lastly, if you have enabled `g:fzf_history_dir`, you might want to assign -a unique name to our command and pass it as the first argument to `fzf#wrap`. - -```vim -" The query history for this command will be stored as 'ls' inside g:fzf_history_dir. -" The name is ignored if g:fzf_history_dir is not defined. -command! -bang -complete=dir -nargs=? LS - \ call fzf#run(fzf#wrap('ls', {'source': 'ls', 'dir': }, 0)) -``` - -### Global options supported by `fzf#wrap` - -- `g:fzf_layout` -- `g:fzf_action` - - **Works only when no custom `sink` (or `sinklist`) is provided** - - Having custom sink usually means that each entry is not an ordinary - file path (e.g. name of color scheme), so we can't blindly apply the - same strategy (i.e. `tabedit some-color-scheme` doesn't make sense) -- `g:fzf_colors` -- `g:fzf_history_dir` - -Tips ----- - -### fzf inside terminal buffer - -On the latest versions of Vim and Neovim, fzf will start in a terminal buffer. -If you find the default ANSI colors to be different, consider configuring the -colors using `g:terminal_ansi_colors` in regular Vim or `g:terminal_color_x` -in Neovim. - -```vim -" Terminal colors for seoul256 color scheme -if has('nvim') - let g:terminal_color_0 = '#4e4e4e' - let g:terminal_color_1 = '#d68787' - let g:terminal_color_2 = '#5f865f' - let g:terminal_color_3 = '#d8af5f' - let g:terminal_color_4 = '#85add4' - let g:terminal_color_5 = '#d7afaf' - let g:terminal_color_6 = '#87afaf' - let g:terminal_color_7 = '#d0d0d0' - let g:terminal_color_8 = '#626262' - let g:terminal_color_9 = '#d75f87' - let g:terminal_color_10 = '#87af87' - let g:terminal_color_11 = '#ffd787' - let g:terminal_color_12 = '#add4fb' - let g:terminal_color_13 = '#ffafaf' - let g:terminal_color_14 = '#87d7d7' - let g:terminal_color_15 = '#e4e4e4' -else - let g:terminal_ansi_colors = [ - \ '#4e4e4e', '#d68787', '#5f865f', '#d8af5f', - \ '#85add4', '#d7afaf', '#87afaf', '#d0d0d0', - \ '#626262', '#d75f87', '#87af87', '#ffd787', - \ '#add4fb', '#ffafaf', '#87d7d7', '#e4e4e4' - \ ] -endif -``` - -### Starting fzf in a popup window - -```vim -" Required: -" - width [float range [0 ~ 1]] or [integer range [8 ~ ]] -" - height [float range [0 ~ 1]] or [integer range [4 ~ ]] -" -" Optional: -" - xoffset [float default 0.5 range [0 ~ 1]] -" - yoffset [float default 0.5 range [0 ~ 1]] -" - relative [boolean default v:false] -" - border [string default 'rounded']: Border style -" - 'rounded' / 'sharp' / 'horizontal' / 'vertical' / 'top' / 'bottom' / 'left' / 'right' -let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } -``` - -Alternatively, you can make fzf open in a tmux popup window (requires tmux 3.2 -or above) by putting fzf-tmux options in `tmux` key. - -```vim -" See `man fzf-tmux` for available options -if exists('$TMUX') - let g:fzf_layout = { 'tmux': '-p90%,60%' } -else - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } -endif -``` - -### Hide statusline - -When fzf starts in a terminal buffer, the file type of the buffer is set to -`fzf`. So you can set up `FileType fzf` autocmd to customize the settings of -the window. - -For example, if you open fzf on the bottom on the screen (e.g. `{'down': -'40%'}`), you might want to temporarily disable the statusline for a cleaner -look. - -```vim -let g:fzf_layout = { 'down': '30%' } -autocmd! FileType fzf -autocmd FileType fzf set laststatus=0 noshowmode noruler - \| autocmd BufLeave set laststatus=2 showmode ruler -``` - -[License](LICENSE) ------------------- - -The MIT License (MIT) - -Copyright (c) 2013-2021 Junegunn Choi diff --git a/dotfiles/.vim/plugged/fzf/README.md b/dotfiles/.vim/plugged/fzf/README.md deleted file mode 100644 index ebd83e29..00000000 --- a/dotfiles/.vim/plugged/fzf/README.md +++ /dev/null @@ -1,711 +0,0 @@ -fzf - a command-line fuzzy finder [![github-actions](https://github.com/junegunn/fzf/workflows/Test%20fzf%20on%20Linux/badge.svg)](https://github.com/junegunn/fzf/actions) -=== - -fzf is a general-purpose command-line fuzzy finder. - - - -It's an interactive Unix filter for command-line that can be used with any -list; files, command history, processes, hostnames, bookmarks, git commits, -etc. - -Pros ----- - -- Portable, no dependencies -- Blazingly fast -- The most comprehensive feature set -- Flexible layout -- Batteries included - - Vim/Neovim plugin, key bindings, and fuzzy auto-completion - -Table of Contents ------------------ - - - -* [Installation](#installation) - * [Using Homebrew](#using-homebrew) - * [Using git](#using-git) - * [Using Linux package managers](#using-linux-package-managers) - * [Windows](#windows) - * [As Vim plugin](#as-vim-plugin) -* [Upgrading fzf](#upgrading-fzf) -* [Building fzf](#building-fzf) -* [Usage](#usage) - * [Using the finder](#using-the-finder) - * [Layout](#layout) - * [Search syntax](#search-syntax) - * [Environment variables](#environment-variables) - * [Options](#options) - * [Demo](#demo) -* [Examples](#examples) -* [`fzf-tmux` script](#fzf-tmux-script) -* [Key bindings for command-line](#key-bindings-for-command-line) -* [Fuzzy completion for bash and zsh](#fuzzy-completion-for-bash-and-zsh) - * [Files and directories](#files-and-directories) - * [Process IDs](#process-ids) - * [Host names](#host-names) - * [Environment variables / Aliases](#environment-variables--aliases) - * [Settings](#settings) - * [Supported commands](#supported-commands) - * [Custom fuzzy completion](#custom-fuzzy-completion) -* [Vim plugin](#vim-plugin) -* [Advanced topics](#advanced-topics) - * [Performance](#performance) - * [Executing external programs](#executing-external-programs) - * [Reloading the candidate list](#reloading-the-candidate-list) - * [1. Update the list of processes by pressing CTRL-R](#1-update-the-list-of-processes-by-pressing-ctrl-r) - * [2. Switch between sources by pressing CTRL-D or CTRL-F](#2-switch-between-sources-by-pressing-ctrl-d-or-ctrl-f) - * [3. Interactive ripgrep integration](#3-interactive-ripgrep-integration) - * [Preview window](#preview-window) -* [Tips](#tips) - * [Respecting `.gitignore`](#respecting-gitignore) - * [Fish shell](#fish-shell) -* [Related projects](#related-projects) -* [License](#license) - - - -Installation ------------- - -fzf project consists of the following components: - -- `fzf` executable -- `fzf-tmux` script for launching fzf in a tmux pane -- Shell extensions - - Key bindings (`CTRL-T`, `CTRL-R`, and `ALT-C`) (bash, zsh, fish) - - Fuzzy auto-completion (bash, zsh) -- Vim/Neovim plugin - -You can [download fzf executable][bin] alone if you don't need the extra -stuff. - -[bin]: https://github.com/junegunn/fzf/releases - -### Using Homebrew - -You can use [Homebrew](https://brew.sh/) (on macOS or Linux) -to install fzf. - -```sh -brew install fzf - -# To install useful key bindings and fuzzy completion: -$(brew --prefix)/opt/fzf/install -``` - -fzf is also available [via MacPorts][portfile]: `sudo port install fzf` - -[portfile]: https://github.com/macports/macports-ports/blob/master/sysutils/fzf/Portfile - -### Using git - -Alternatively, you can "git clone" this repository to any directory and run -[install](https://github.com/junegunn/fzf/blob/master/install) script. - -```sh -git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf -~/.fzf/install -``` - -### Using Linux package managers - -| Package Manager | Linux Distribution | Command | -| --- | --- | --- | -| APK | Alpine Linux | `sudo apk add fzf` | -| APT | Debian 9+/Ubuntu 19.10+ | `sudo apt-get install fzf` | -| Conda | | `conda install -c conda-forge fzf` | -| DNF | Fedora | `sudo dnf install fzf` | -| Nix | NixOS, etc. | `nix-env -iA nixpkgs.fzf` | -| Pacman | Arch Linux | `sudo pacman -S fzf` | -| pkg | FreeBSD | `pkg install fzf` | -| pkgin | NetBSD | `pkgin install fzf` | -| pkg_add | OpenBSD | `pkg_add fzf` | -| XBPS | Void Linux | `sudo xbps-install -S fzf` | -| Zypper | openSUSE | `sudo zypper install fzf` | - -> :warning: **Key bindings (CTRL-T / CTRL-R / ALT-C) and fuzzy auto-completion -> may not be enabled by default.** -> -> Refer to the package documentation for more information. (e.g. `apt-cache show fzf`) - -[![Packaging status](https://repology.org/badge/vertical-allrepos/fzf.svg)](https://repology.org/project/fzf/versions) - -### Windows - -Pre-built binaries for Windows can be downloaded [here][bin]. fzf is also -available via [Chocolatey][choco] and [Scoop][scoop]: - -| Package manager | Command | -| --- | --- | -| Chocolatey | `choco install fzf` | -| Scoop | `scoop install fzf` | - -[choco]: https://chocolatey.org/packages/fzf -[scoop]: https://github.com/ScoopInstaller/Main/blob/master/bucket/fzf.json - -Known issues and limitations on Windows can be found on [the wiki -page][windows-wiki]. - -[windows-wiki]: https://github.com/junegunn/fzf/wiki/Windows - -### As Vim plugin - -If you use -[vim-plug](https://github.com/junegunn/vim-plug), add this line to your Vim -configuration file: - -```vim -Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } -``` - -`fzf#install()` makes sure that you have the latest binary, but it's optional, -so you can omit it if you use a plugin manager that doesn't support hooks. - -For more installation options, see [README-VIM.md](README-VIM.md). - -Upgrading fzf -------------- - -fzf is being actively developed, and you might want to upgrade it once in a -while. Please follow the instruction below depending on the installation -method used. - -- git: `cd ~/.fzf && git pull && ./install` -- brew: `brew update; brew upgrade fzf` -- macports: `sudo port upgrade fzf` -- chocolatey: `choco upgrade fzf` -- vim-plug: `:PlugUpdate fzf` - -Building fzf ------------- - -See [BUILD.md](BUILD.md). - -Usage ------ - -fzf will launch interactive finder, read the list from STDIN, and write the -selected item to STDOUT. - -```sh -find * -type f | fzf > selected -``` - -Without STDIN pipe, fzf will use find command to fetch the list of -files excluding hidden ones. (You can override the default command with -`FZF_DEFAULT_COMMAND`) - -```sh -vim $(fzf) -``` - -#### Using the finder - -- `CTRL-K` / `CTRL-J` (or `CTRL-P` / `CTRL-N`) to move cursor up and down -- `Enter` key to select the item, `CTRL-C` / `CTRL-G` / `ESC` to exit -- On multi-select mode (`-m`), `TAB` and `Shift-TAB` to mark multiple items -- Emacs style key bindings -- Mouse: scroll, click, double-click; shift-click and shift-scroll on - multi-select mode - -#### Layout - -fzf by default starts in fullscreen mode, but you can make it start below the -cursor with `--height` option. - -```sh -vim $(fzf --height 40%) -``` - -Also, check out `--reverse` and `--layout` options if you prefer -"top-down" layout instead of the default "bottom-up" layout. - -```sh -vim $(fzf --height 40% --reverse) -``` - -You can add these options to `$FZF_DEFAULT_OPTS` so that they're applied by -default. For example, - -```sh -export FZF_DEFAULT_OPTS='--height 40% --layout=reverse --border' -``` - -#### Search syntax - -Unless otherwise specified, fzf starts in "extended-search mode" where you can -type in multiple search terms delimited by spaces. e.g. `^music .mp3$ sbtrkt -!fire` - -| Token | Match type | Description | -| --------- | -------------------------- | ------------------------------------ | -| `sbtrkt` | fuzzy-match | Items that match `sbtrkt` | -| `'wild` | exact-match (quoted) | Items that include `wild` | -| `^music` | prefix-exact-match | Items that start with `music` | -| `.mp3$` | suffix-exact-match | Items that end with `.mp3` | -| `!fire` | inverse-exact-match | Items that do not include `fire` | -| `!^music` | inverse-prefix-exact-match | Items that do not start with `music` | -| `!.mp3$` | inverse-suffix-exact-match | Items that do not end with `.mp3` | - -If you don't prefer fuzzy matching and do not wish to "quote" every word, -start fzf with `-e` or `--exact` option. Note that when `--exact` is set, -`'`-prefix "unquotes" the term. - -A single bar character term acts as an OR operator. For example, the following -query matches entries that start with `core` and end with either `go`, `rb`, -or `py`. - -``` -^core go$ | rb$ | py$ -``` - -#### Environment variables - -- `FZF_DEFAULT_COMMAND` - - Default command to use when input is tty - - e.g. `export FZF_DEFAULT_COMMAND='fd --type f'` - - > :warning: This variable is not used by shell extensions due to the - > slight difference in requirements. - > - > (e.g. `CTRL-T` runs `$FZF_CTRL_T_COMMAND` instead, `vim **` runs - > `_fzf_compgen_path()`, and `cd **` runs `_fzf_compgen_dir()`) - > - > The available options are described later in this document. -- `FZF_DEFAULT_OPTS` - - Default options - - e.g. `export FZF_DEFAULT_OPTS="--layout=reverse --inline-info"` - -#### Options - -See the man page (`man fzf`) for the full list of options. - -#### Demo -If you learn by watching videos, check out this screencast by [@samoshkin](https://github.com/samoshkin) to explore `fzf` features. - - - - - -Examples --------- - -* [Wiki page of examples](https://github.com/junegunn/fzf/wiki/examples) - * *Disclaimer: The examples on this page are maintained by the community - and are not thoroughly tested* -* [Advanced fzf examples](https://github.com/junegunn/fzf/blob/master/ADVANCED.md) - -`fzf-tmux` script ------------------ - -[fzf-tmux](bin/fzf-tmux) is a bash script that opens fzf in a tmux pane. - -```sh -# usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS] - -# See available options -fzf-tmux --help - -# select git branches in horizontal split below (15 lines) -git branch | fzf-tmux -d 15 - -# select multiple words in vertical split on the left (20% of screen width) -cat /usr/share/dict/words | fzf-tmux -l 20% --multi --reverse -``` - -It will still work even when you're not on tmux, silently ignoring `-[pudlr]` -options, so you can invariably use `fzf-tmux` in your scripts. - -Alternatively, you can use `--height HEIGHT[%]` option not to start fzf in -fullscreen mode. - -```sh -fzf --height 40% -``` - -Key bindings for command-line ------------------------------ - -The install script will setup the following key bindings for bash, zsh, and -fish. - -- `CTRL-T` - Paste the selected files and directories onto the command-line - - Set `FZF_CTRL_T_COMMAND` to override the default command - - Set `FZF_CTRL_T_OPTS` to pass additional options -- `CTRL-R` - Paste the selected command from history onto the command-line - - If you want to see the commands in chronological order, press `CTRL-R` - again which toggles sorting by relevance - - Set `FZF_CTRL_R_OPTS` to pass additional options -- `ALT-C` - cd into the selected directory - - Set `FZF_ALT_C_COMMAND` to override the default command - - Set `FZF_ALT_C_OPTS` to pass additional options - -If you're on a tmux session, you can start fzf in a tmux split-pane or in -a tmux popup window by setting `FZF_TMUX_OPTS` (e.g. `-d 40%`). -See `fzf-tmux --help` for available options. - -More tips can be found on [the wiki page](https://github.com/junegunn/fzf/wiki/Configuring-shell-key-bindings). - -Fuzzy completion for bash and zsh ---------------------------------- - -#### Files and directories - -Fuzzy completion for files and directories can be triggered if the word before -the cursor ends with the trigger sequence, which is by default `**`. - -- `COMMAND [DIRECTORY/][FUZZY_PATTERN]**` - -```sh -# Files under the current directory -# - You can select multiple items with TAB key -vim ** - -# Files under parent directory -vim ../** - -# Files under parent directory that match `fzf` -vim ../fzf** - -# Files under your home directory -vim ~/** - - -# Directories under current directory (single-selection) -cd ** - -# Directories under ~/github that match `fzf` -cd ~/github/fzf** -``` - -#### Process IDs - -Fuzzy completion for PIDs is provided for kill command. - -```sh -# Can select multiple processes with or keys -kill -9 ** -``` - -#### Host names - -For ssh and telnet commands, fuzzy completion for hostnames is provided. The -names are extracted from /etc/hosts and ~/.ssh/config. - -```sh -ssh ** -telnet ** -``` - -#### Environment variables / Aliases - -```sh -unset ** -export ** -unalias ** -``` - -#### Settings - -```sh -# Use ~~ as the trigger sequence instead of the default ** -export FZF_COMPLETION_TRIGGER='~~' - -# Options to fzf command -export FZF_COMPLETION_OPTS='--border --info=inline' - -# Use fd (https://github.com/sharkdp/fd) instead of the default find -# command for listing path candidates. -# - The first argument to the function ($1) is the base path to start traversal -# - See the source code (completion.{bash,zsh}) for the details. -_fzf_compgen_path() { - fd --hidden --follow --exclude ".git" . "$1" -} - -# Use fd to generate the list for directory completion -_fzf_compgen_dir() { - fd --type d --hidden --follow --exclude ".git" . "$1" -} - -# (EXPERIMENTAL) Advanced customization of fzf options via _fzf_comprun function -# - The first argument to the function is the name of the command. -# - You should make sure to pass the rest of the arguments to fzf. -_fzf_comprun() { - local command=$1 - shift - - case "$command" in - cd) fzf "$@" --preview 'tree -C {} | head -200' ;; - export|unset) fzf "$@" --preview "eval 'echo \$'{}" ;; - ssh) fzf "$@" --preview 'dig {}' ;; - *) fzf "$@" ;; - esac -} -``` - -#### Supported commands - -On bash, fuzzy completion is enabled only for a predefined set of commands -(`complete | grep _fzf` to see the list). But you can enable it for other -commands as well by using `_fzf_setup_completion` helper function. - -```sh -# usage: _fzf_setup_completion path|dir|var|alias|host COMMANDS... -_fzf_setup_completion path ag git kubectl -_fzf_setup_completion dir tree -``` - -#### Custom fuzzy completion - -_**(Custom completion API is experimental and subject to change)**_ - -For a command named _"COMMAND"_, define `_fzf_complete_COMMAND` function using -`_fzf_complete` helper. - -```sh -# Custom fuzzy completion for "doge" command -# e.g. doge ** -_fzf_complete_doge() { - _fzf_complete --multi --reverse --prompt="doge> " -- "$@" < <( - echo very - echo wow - echo such - echo doge - ) -} -``` - -- The arguments before `--` are the options to fzf. -- After `--`, simply pass the original completion arguments unchanged (`"$@"`). -- Then, write a set of commands that generates the completion candidates and - feed its output to the function using process substitution (`< <(...)`). - -zsh will automatically pick up the function using the naming convention but in -bash you have to manually associate the function with the command using the -`complete` command. - -```sh -[ -n "$BASH" ] && complete -F _fzf_complete_doge -o default -o bashdefault doge -``` - -If you need to post-process the output from fzf, define -`_fzf_complete_COMMAND_post` as follows. - -```sh -_fzf_complete_foo() { - _fzf_complete --multi --reverse --header-lines=3 -- "$@" < <( - ls -al - ) -} - -_fzf_complete_foo_post() { - awk '{print $NF}' -} - -[ -n "$BASH" ] && complete -F _fzf_complete_foo -o default -o bashdefault foo -``` - -Vim plugin ----------- - -See [README-VIM.md](README-VIM.md). - -Advanced topics ---------------- - -### Performance - -fzf is fast and is [getting even faster][perf]. Performance should not be -a problem in most use cases. However, you might want to be aware of the -options that affect performance. - -- `--ansi` tells fzf to extract and parse ANSI color codes in the input, and it - makes the initial scanning slower. So it's not recommended that you add it - to your `$FZF_DEFAULT_OPTS`. -- `--nth` makes fzf slower because it has to tokenize each line. -- `--with-nth` makes fzf slower as fzf has to tokenize and reassemble each - line. -- If you absolutely need better performance, you can consider using - `--algo=v1` (the default being `v2`) to make fzf use a faster greedy - algorithm. However, this algorithm is not guaranteed to find the optimal - ordering of the matches and is not recommended. - -[perf]: https://junegunn.kr/images/fzf-0.17.0.png - -### Executing external programs - -You can set up key bindings for starting external processes without leaving -fzf (`execute`, `execute-silent`). - -```bash -# Press F1 to open the file with less without leaving fzf -# Press CTRL-Y to copy the line to clipboard and aborts fzf (requires pbcopy) -fzf --bind 'f1:execute(less -f {}),ctrl-y:execute-silent(echo {} | pbcopy)+abort' -``` - -See *KEY BINDINGS* section of the man page for details. - -### Reloading the candidate list - -By binding `reload` action to a key or an event, you can make fzf dynamically -reload the candidate list. See https://github.com/junegunn/fzf/issues/1750 for -more details. - -#### 1. Update the list of processes by pressing CTRL-R - -```sh -FZF_DEFAULT_COMMAND='ps -ef' \ - fzf --bind 'ctrl-r:reload(eval "$FZF_DEFAULT_COMMAND")' \ - --header 'Press CTRL-R to reload' --header-lines=1 \ - --height=50% --layout=reverse -``` - -#### 2. Switch between sources by pressing CTRL-D or CTRL-F - -```sh -FZF_DEFAULT_COMMAND='find . -type f' \ - fzf --bind 'ctrl-d:reload(find . -type d),ctrl-f:reload(eval "$FZF_DEFAULT_COMMAND")' \ - --height=50% --layout=reverse -``` - -#### 3. Interactive ripgrep integration - -The following example uses fzf as the selector interface for ripgrep. We bound -`reload` action to `change` event, so every time you type on fzf, the ripgrep -process will restart with the updated query string denoted by the placeholder -expression `{q}`. Also, note that we used `--disabled` option so that fzf -doesn't perform any secondary filtering. - -```sh -INITIAL_QUERY="" -RG_PREFIX="rg --column --line-number --no-heading --color=always --smart-case " -FZF_DEFAULT_COMMAND="$RG_PREFIX '$INITIAL_QUERY'" \ - fzf --bind "change:reload:$RG_PREFIX {q} || true" \ - --ansi --disabled --query "$INITIAL_QUERY" \ - --height=50% --layout=reverse -``` - -If ripgrep doesn't find any matches, it will exit with a non-zero exit status, -and fzf will warn you about it. To suppress the warning message, we added -`|| true` to the command, so that it always exits with 0. - -See ["Using fzf as interative Ripgrep launcher"](https://github.com/junegunn/fzf/blob/master/ADVANCED.md#using-fzf-as-interative-ripgrep-launcher) -for a fuller example with preview window options. - -### Preview window - -When the `--preview` option is set, fzf automatically starts an external process -with the current line as the argument and shows the result in the split window. -Your `$SHELL` is used to execute the command with `$SHELL -c COMMAND`. -The window can be scrolled using the mouse or custom key bindings. - -```bash -# {} is replaced with the single-quoted string of the focused line -fzf --preview 'cat {}' -``` - -Preview window supports ANSI colors, so you can use any program that -syntax-highlights the content of a file, such as -[Bat](https://github.com/sharkdp/bat) or -[Highlight](http://www.andre-simon.de/doku/highlight/en/highlight.php): - -```bash -fzf --preview 'bat --style=numbers --color=always --line-range :500 {}' -``` - -You can customize the size, position, and border of the preview window using -`--preview-window` option, and the foreground and background color of it with -`--color` option. For example, - -```bash -fzf --height 40% --layout reverse --info inline --border \ - --preview 'file {}' --preview-window up,1,border-horizontal \ - --color 'fg:#bbccdd,fg+:#ddeeff,bg:#334455,preview-bg:#223344,border:#778899' -``` - -See the man page (`man fzf`) for the full list of options. - -More advanced examples can be found [here](https://github.com/junegunn/fzf/blob/master/ADVANCED.md). - ----- - -Since fzf is a general-purpose text filter rather than a file finder, **it is -not a good idea to add `--preview` option to your `$FZF_DEFAULT_OPTS`**. - -```sh -# ********************* -# ** DO NOT DO THIS! ** -# ********************* -export FZF_DEFAULT_OPTS='--preview "bat --style=numbers --color=always --line-range :500 {}"' - -# bat doesn't work with any input other than the list of files -ps -ef | fzf -seq 100 | fzf -history | fzf -``` - -Tips ----- - -#### Respecting `.gitignore` - -You can use [fd](https://github.com/sharkdp/fd), -[ripgrep](https://github.com/BurntSushi/ripgrep), or [the silver -searcher](https://github.com/ggreer/the_silver_searcher) instead of the -default find command to traverse the file system while respecting -`.gitignore`. - -```sh -# Feed the output of fd into fzf -fd --type f --strip-cwd-prefix | fzf - -# Setting fd as the default source for fzf -export FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix' - -# Now fzf (w/o pipe) will use fd instead of find -fzf - -# To apply the command to CTRL-T as well -export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND" -``` - -If you want the command to follow symbolic links and don't want it to exclude -hidden files, use the following command: - -```sh -export FZF_DEFAULT_COMMAND='fd --type f --strip-cwd-prefix --hidden --follow --exclude .git' -``` - -#### Fish shell - -`CTRL-T` key binding of fish, unlike those of bash and zsh, will use the last -token on the command-line as the root directory for the recursive search. For -instance, hitting `CTRL-T` at the end of the following command-line - -```sh -ls /var/ -``` - -will list all files and directories under `/var/`. - -When using a custom `FZF_CTRL_T_COMMAND`, use the unexpanded `$dir` variable to -make use of this feature. `$dir` defaults to `.` when the last token is not a -valid directory. Example: - -```sh -set -g FZF_CTRL_T_COMMAND "command find -L \$dir -type f 2> /dev/null | sed '1d; s#^\./##'" -``` - -Related projects ----------------- - -https://github.com/junegunn/fzf/wiki/Related-projects - -[License](LICENSE) ------------------- - -The MIT License (MIT) - -Copyright (c) 2013-2021 Junegunn Choi diff --git a/dotfiles/.vim/plugged/fzf/bin/fzf-tmux b/dotfiles/.vim/plugged/fzf/bin/fzf-tmux deleted file mode 100755 index e461fd77..00000000 --- a/dotfiles/.vim/plugged/fzf/bin/fzf-tmux +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/env bash -# fzf-tmux: starts fzf in a tmux pane -# usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS] - -fail() { - >&2 echo "$1" - exit 2 -} - -fzf="$(command -v fzf 2> /dev/null)" || fzf="$(dirname "$0")/fzf" -[[ -x "$fzf" ]] || fail 'fzf executable not found' - -args=() -opt="" -skip="" -swap="" -close="" -term="" -[[ -n "$LINES" ]] && lines=$LINES || lines=$(tput lines) || lines=$(tmux display-message -p "#{pane_height}") -[[ -n "$COLUMNS" ]] && columns=$COLUMNS || columns=$(tput cols) || columns=$(tmux display-message -p "#{pane_width}") - -help() { - >&2 echo 'usage: fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS] - - LAYOUT OPTIONS: - (default layout: -d 50%) - - Popup window (requires tmux 3.2 or above): - -p [WIDTH[%][,HEIGHT[%]]] (default: 50%) - -w WIDTH[%] - -h HEIGHT[%] - -x COL - -y ROW - - Split pane: - -u [HEIGHT[%]] Split above (up) - -d [HEIGHT[%]] Split below (down) - -l [WIDTH[%]] Split left - -r [WIDTH[%]] Split right -' - exit -} - -while [[ $# -gt 0 ]]; do - arg="$1" - shift - [[ -z "$skip" ]] && case "$arg" in - -) - term=1 - ;; - --help) - help - ;; - --version) - echo "fzf-tmux (with fzf $("$fzf" --version))" - exit - ;; - -p*|-w*|-h*|-x*|-y*|-d*|-u*|-r*|-l*) - if [[ "$arg" =~ ^-[pwhxy] ]]; then - [[ "$opt" =~ "-E" ]] || opt="-E" - elif [[ "$arg" =~ ^.[lr] ]]; then - opt="-h" - if [[ "$arg" =~ ^.l ]]; then - opt="$opt -d" - swap="; swap-pane -D ; select-pane -L" - close="; tmux swap-pane -D" - fi - else - opt="" - if [[ "$arg" =~ ^.u ]]; then - opt="$opt -d" - swap="; swap-pane -D ; select-pane -U" - close="; tmux swap-pane -D" - fi - fi - if [[ ${#arg} -gt 2 ]]; then - size="${arg:2}" - else - if [[ "$1" =~ ^[0-9%,]+$ ]] || [[ "$1" =~ ^[A-Z]$ ]]; then - size="$1" - shift - else - continue - fi - fi - - if [[ "$arg" =~ ^-p ]]; then - if [[ -n "$size" ]]; then - w=${size%%,*} - h=${size##*,} - opt="$opt -w$w -h$h" - fi - elif [[ "$arg" =~ ^-[whxy] ]]; then - opt="$opt ${arg:0:2}$size" - elif [[ "$size" =~ %$ ]]; then - size=${size:0:((${#size}-1))} - if [[ -n "$swap" ]]; then - opt="$opt -p $(( 100 - size ))" - else - opt="$opt -p $size" - fi - else - if [[ -n "$swap" ]]; then - if [[ "$arg" =~ ^.l ]]; then - max=$columns - else - max=$lines - fi - size=$(( max - size )) - [[ $size -lt 0 ]] && size=0 - opt="$opt -l $size" - else - opt="$opt -l $size" - fi - fi - ;; - --) - # "--" can be used to separate fzf-tmux options from fzf options to - # avoid conflicts - skip=1 - continue - ;; - *) - args+=("$arg") - ;; - esac - [[ -n "$skip" ]] && args+=("$arg") -done - -if [[ -z "$TMUX" ]]; then - "$fzf" "${args[@]}" - exit $? -fi - -# --height option is not allowed. CTRL-Z is also disabled. -args=("${args[@]}" "--no-height" "--bind=ctrl-z:ignore") - -# Handle zoomed tmux pane without popup options by moving it to a temp window -if [[ ! "$opt" =~ "-E" ]] && tmux list-panes -F '#F' | grep -q Z; then - zoomed_without_popup=1 - original_window=$(tmux display-message -p "#{window_id}") - tmp_window=$(tmux new-window -d -P -F "#{window_id}" "bash -c 'while :; do for c in \\| / - '\\;' do sleep 0.2; printf \"\\r\$c fzf-tmux is running\\r\"; done; done'") - tmux swap-pane -t $tmp_window \; select-window -t $tmp_window -fi - -set -e - -# Clean up named pipes on exit -id=$RANDOM -argsf="${TMPDIR:-/tmp}/fzf-args-$id" -fifo1="${TMPDIR:-/tmp}/fzf-fifo1-$id" -fifo2="${TMPDIR:-/tmp}/fzf-fifo2-$id" -fifo3="${TMPDIR:-/tmp}/fzf-fifo3-$id" -tmux_win_opts=( $(tmux show-window-options remain-on-exit \; show-window-options synchronize-panes | sed '/ off/d; s/^/set-window-option /; s/$/ \\;/') ) -cleanup() { - \rm -f $argsf $fifo1 $fifo2 $fifo3 - - # Restore tmux window options - if [[ "${#tmux_win_opts[@]}" -gt 0 ]]; then - eval "tmux ${tmux_win_opts[*]}" - fi - - # Remove temp window if we were zoomed without popup options - if [[ -n "$zoomed_without_popup" ]]; then - tmux display-message -p "#{window_id}" > /dev/null - tmux swap-pane -t $original_window \; \ - select-window -t $original_window \; \ - kill-window -t $tmp_window \; \ - resize-pane -Z - fi - - if [[ $# -gt 0 ]]; then - trap - EXIT - exit 130 - fi -} -trap 'cleanup 1' SIGUSR1 -trap 'cleanup' EXIT - -envs="export TERM=$TERM " -if [[ "$opt" =~ "-E" ]]; then - FZF_DEFAULT_OPTS="--margin 0,1 $FZF_DEFAULT_OPTS" - tmux_verson=$(tmux -V) - if [[ ! $tmux_verson =~ 3\.2 ]]; then - FZF_DEFAULT_OPTS="--border $FZF_DEFAULT_OPTS" - opt="-B $opt" - fi -fi -[[ -n "$FZF_DEFAULT_OPTS" ]] && envs="$envs FZF_DEFAULT_OPTS=$(printf %q "$FZF_DEFAULT_OPTS")" -[[ -n "$FZF_DEFAULT_COMMAND" ]] && envs="$envs FZF_DEFAULT_COMMAND=$(printf %q "$FZF_DEFAULT_COMMAND")" -echo "$envs;" > "$argsf" - -# Build arguments to fzf -opts=$(printf "%q " "${args[@]}") - -pppid=$$ -echo -n "trap 'kill -SIGUSR1 -$pppid' EXIT SIGINT SIGTERM;" >> $argsf -close="; trap - EXIT SIGINT SIGTERM $close" - -export TMUX=$(cut -d , -f 1,2 <<< "$TMUX") -mkfifo -m o+w $fifo2 -if [[ "$opt" =~ "-E" ]]; then - cat $fifo2 & - if [[ -n "$term" ]] || [[ -t 0 ]]; then - cat <<< "\"$fzf\" $opts > $fifo2; out=\$? $close; exit \$out" >> $argsf - else - mkfifo $fifo1 - cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; out=\$? $close; exit \$out" >> $argsf - cat <&0 > $fifo1 & - fi - - tmux popup -d "$PWD" $opt "bash $argsf" > /dev/null 2>&1 - exit $? -fi - -mkfifo -m o+w $fifo3 -if [[ -n "$term" ]] || [[ -t 0 ]]; then - cat <<< "\"$fzf\" $opts > $fifo2; echo \$? > $fifo3 $close" >> $argsf -else - mkfifo $fifo1 - cat <<< "\"$fzf\" $opts < $fifo1 > $fifo2; echo \$? > $fifo3 $close" >> $argsf - cat <&0 > $fifo1 & -fi -tmux set-window-option synchronize-panes off \;\ - set-window-option remain-on-exit off \;\ - split-window -c "$PWD" $opt "bash -c 'exec -a fzf bash $argsf'" $swap \ - > /dev/null 2>&1 || { "$fzf" "${args[@]}"; exit $?; } -cat $fifo2 -exit "$(cat $fifo3)" diff --git a/dotfiles/.vim/plugged/fzf/doc/fzf.txt b/dotfiles/.vim/plugged/fzf/doc/fzf.txt deleted file mode 100644 index 94857232..00000000 --- a/dotfiles/.vim/plugged/fzf/doc/fzf.txt +++ /dev/null @@ -1,512 +0,0 @@ -fzf.txt fzf Last change: May 19 2021 -FZF - TABLE OF CONTENTS *fzf* *fzf-toc* -============================================================================== - - FZF Vim integration |fzf-vim-integration| - Installation |fzf-installation| - Summary |fzf-summary| - :FZF[!] |:FZF| - Configuration |fzf-configuration| - Examples |fzf-examples| - Explanation of g:fzf_colors |fzf-explanation-of-gfzfcolors| - fzf#run |fzf#run| - fzf#wrap |fzf#wrap| - Global options supported by fzf#wrap |fzf-global-options-supported-by-fzf#wrap| - Tips |fzf-tips| - fzf inside terminal buffer |fzf-inside-terminal-buffer| - Starting fzf in a popup window |fzf-starting-fzf-in-a-popup-window| - Hide statusline |fzf-hide-statusline| - License |fzf-license| - -FZF VIM INTEGRATION *fzf-vim-integration* -============================================================================== - - -INSTALLATION *fzf-installation* -============================================================================== - -Once you have fzf installed, you can enable it inside Vim simply by adding the -directory to 'runtimepath' in your Vim configuration file. The path may differ -depending on the package manager. -> - " If installed using Homebrew - set rtp+=/usr/local/opt/fzf - - " If installed using git - set rtp+=~/.fzf -< -If you use {vim-plug}{1}, the same can be written as: -> - " If installed using Homebrew - Plug '/usr/local/opt/fzf' - - " If installed using git - Plug '~/.fzf' -< -But if you want the latest Vim plugin file from GitHub rather than the one -included in the package, write: -> - Plug 'junegunn/fzf' -< -The Vim plugin will pick up fzf binary available on the system. If fzf is not -found on `$PATH`, it will ask you if it should download the latest binary for -you. - -To make sure that you have the latest version of the binary, set up -post-update hook like so: - - *fzf#install* -> - Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } -< - {1} https://github.com/junegunn/vim-plug - - -SUMMARY *fzf-summary* -============================================================================== - -The Vim plugin of fzf provides two core functions, and `:FZF` command which is -the basic file selector command built on top of them. - - 1. `fzf#run([spec dict])` - - Starts fzf inside Vim with the given spec - - `:call fzf#run({'source': 'ls'})` - 2. `fzf#wrap([spec dict]) -> (dict)` - - Takes a spec for `fzf#run` and returns an extended version of it with - additional options for addressing global preferences (`g:fzf_xxx`) - - `:echo fzf#wrap({'source': 'ls'})` - - We usually wrap a spec with `fzf#wrap` before passing it to `fzf#run` - - `:call fzf#run(fzf#wrap({'source': 'ls'}))` - 3. `:FZF [fzf_options string] [path string]` - - Basic fuzzy file selector - - A reference implementation for those who don't want to write VimScript to - implement custom commands - - If you're looking for more such commands, check out {fzf.vim}{2} project. - -The most important of all is `fzf#run`, but it would be easier to understand -the whole if we start off with `:FZF` command. - - {2} https://github.com/junegunn/fzf.vim - - -:FZF[!] -============================================================================== - - *:FZF* -> - " Look for files under current directory - :FZF - - " Look for files under your home directory - :FZF ~ - - " With fzf command-line options - :FZF --reverse --info=inline /tmp - - " Bang version starts fzf in fullscreen mode - :FZF! -< -Similarly to {ctrlp.vim}{3}, use enter key, CTRL-T, CTRL-X or CTRL-V to open -selected files in the current window, in new tabs, in horizontal splits, or in -vertical splits respectively. - -Note that the environment variables `FZF_DEFAULT_COMMAND` and -`FZF_DEFAULT_OPTS` also apply here. - - {3} https://github.com/kien/ctrlp.vim - - -< Configuration >_____________________________________________________________~ - *fzf-configuration* - - *g:fzf_action* *g:fzf_layout* *g:fzf_colors* *g:fzf_history_dir* - - - `g:fzf_action` - - Customizable extra key bindings for opening selected files in different - ways - - `g:fzf_layout` - - Determines the size and position of fzf window - - `g:fzf_colors` - - Customizes fzf colors to match the current color scheme - - `g:fzf_history_dir` - - Enables history feature - - -Examples~ - *fzf-examples* -> - " This is the default extra key bindings - let g:fzf_action = { - \ 'ctrl-t': 'tab split', - \ 'ctrl-x': 'split', - \ 'ctrl-v': 'vsplit' } - - " An action can be a reference to a function that processes selected lines - function! s:build_quickfix_list(lines) - call setqflist(map(copy(a:lines), '{ "filename": v:val }')) - copen - cc - endfunction - - let g:fzf_action = { - \ 'ctrl-q': function('s:build_quickfix_list'), - \ 'ctrl-t': 'tab split', - \ 'ctrl-x': 'split', - \ 'ctrl-v': 'vsplit' } - - " Default fzf layout - " - Popup window (center of the screen) - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } - - " - Popup window (center of the current window) - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true } } - - " - Popup window (anchored to the bottom of the current window) - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6, 'relative': v:true, 'yoffset': 1.0 } } - - " - down / up / left / right - let g:fzf_layout = { 'down': '40%' } - - " - Window using a Vim command - let g:fzf_layout = { 'window': 'enew' } - let g:fzf_layout = { 'window': '-tabnew' } - let g:fzf_layout = { 'window': '10new' } - - " Customize fzf colors to match your color scheme - " - fzf#wrap translates this to a set of `--color` options - let g:fzf_colors = - \ { 'fg': ['fg', 'Normal'], - \ 'bg': ['bg', 'Normal'], - \ 'hl': ['fg', 'Comment'], - \ 'fg+': ['fg', 'CursorLine', 'CursorColumn', 'Normal'], - \ 'bg+': ['bg', 'CursorLine', 'CursorColumn'], - \ 'hl+': ['fg', 'Statement'], - \ 'info': ['fg', 'PreProc'], - \ 'border': ['fg', 'Ignore'], - \ 'prompt': ['fg', 'Conditional'], - \ 'pointer': ['fg', 'Exception'], - \ 'marker': ['fg', 'Keyword'], - \ 'spinner': ['fg', 'Label'], - \ 'header': ['fg', 'Comment'] } - - " Enable per-command history - " - History files will be stored in the specified directory - " - When set, CTRL-N and CTRL-P will be bound to 'next-history' and - " 'previous-history' instead of 'down' and 'up'. - let g:fzf_history_dir = '~/.local/share/fzf-history' -< - -Explanation of g:fzf_colors~ - *fzf-explanation-of-gfzfcolors* - -`g:fzf_colors` is a dictionary mapping fzf elements to a color specification -list: -> - element: [ component, group1 [, group2, ...] ] -< - - `element` is an fzf element to apply a color to: - - ----------------------------+------------------------------------------------------ - Element | Description ~ - ----------------------------+------------------------------------------------------ - `fg` / `bg` / `hl` | Item (foreground / background / highlight) - `fg+` / `bg+` / `hl+` | Current item (foreground / background / highlight) - `preview-fg` / `preview-bg` | Preview window text and background - `hl` / `hl+` | Highlighted substrings (normal / current) - `gutter` | Background of the gutter on the left - `pointer` | Pointer to the current line ( `>` ) - `marker` | Multi-select marker ( `>` ) - `border` | Border around the window ( `--border` and `--preview` ) - `header` | Header ( `--header` or `--header-lines` ) - `info` | Info line (match counters) - `spinner` | Streaming input indicator - `query` | Query string - `disabled` | Query string when search is disabled - `prompt` | Prompt before query ( `> ` ) - `pointer` | Pointer to the current line ( `>` ) - ----------------------------+------------------------------------------------------ - - `component` specifies the component (`fg` / `bg`) from which to extract the - color when considering each of the following highlight groups - - `group1 [, group2, ...]` is a list of highlight groups that are searched (in - order) for a matching color definition - -For example, consider the following specification: -> - 'prompt': ['fg', 'Conditional', 'Comment'], -< -This means we color the prompt - using the `fg` attribute of the `Conditional` -if it exists, - otherwise use the `fg` attribute of the `Comment` highlight -group if it exists, - otherwise fall back to the default color settings for -the prompt. - -You can examine the color option generated according the setting by printing -the result of `fzf#wrap()` function like so: -> - :echo fzf#wrap() -< - -FZF#RUN -============================================================================== - - *fzf#run* - -`fzf#run()` function is the core of Vim integration. It takes a single -dictionary argument, a spec, and starts fzf process accordingly. At the very -least, specify `sink` option to tell what it should do with the selected -entry. -> - call fzf#run({'sink': 'e'}) -< -We haven't specified the `source`, so this is equivalent to starting fzf on -command line without standard input pipe; fzf will use find command (or -`$FZF_DEFAULT_COMMAND` if defined) to list the files under the current -directory. When you select one, it will open it with the sink, `:e` command. -If you want to open it in a new tab, you can pass `:tabedit` command instead -as the sink. -> - call fzf#run({'sink': 'tabedit'}) -< -Instead of using the default find command, you can use any shell command as -the source. The following example will list the files managed by git. It's -equivalent to running `git ls-files | fzf` on shell. -> - call fzf#run({'source': 'git ls-files', 'sink': 'e'}) -< -fzf options can be specified as `options` entry in spec dictionary. -> - call fzf#run({'sink': 'tabedit', 'options': '--multi --reverse'}) -< -You can also pass a layout option if you don't want fzf window to take up the -entire screen. -> - " up / down / left / right / window are allowed - call fzf#run({'source': 'git ls-files', 'sink': 'e', 'left': '40%'}) - call fzf#run({'source': 'git ls-files', 'sink': 'e', 'window': '30vnew'}) -< -`source` doesn't have to be an external shell command, you can pass a Vim -array as the source. In the next example, we pass the names of color schemes -as the source to implement a color scheme selector. -> - call fzf#run({'source': map(split(globpath(&rtp, 'colors/*.vim')), - \ 'fnamemodify(v:val, ":t:r")'), - \ 'sink': 'colo', 'left': '25%'}) -< -The following table summarizes the available options. - - ---------------------------+---------------+---------------------------------------------------------------------- - Option name | Type | Description ~ - ---------------------------+---------------+---------------------------------------------------------------------- - `source` | string | External command to generate input to fzf (e.g. `find .` ) - `source` | list | Vim list as input to fzf - `sink` | string | Vim command to handle the selected item (e.g. `e` , `tabe` ) - `sink` | funcref | Reference to function to process each selected item - `sinklist` (or `sink*` ) | funcref | Similar to `sink` , but takes the list of output lines at once - `options` | string/list | Options to fzf - `dir` | string | Working directory - `up` / `down` / `left` / `right` | number/string | (Layout) Window position and size (e.g. `20` , `50%` ) - `tmux` | string | (Layout) fzf-tmux options (e.g. `-p90%,60%` ) - `window` (Vim 8 / Neovim) | string | (Layout) Command to open fzf window (e.g. `vertical aboveleft 30new` ) - `window` (Vim 8 / Neovim) | dict | (Layout) Popup window settings (e.g. `{'width': 0.9, 'height': 0.6}` ) - ---------------------------+---------------+---------------------------------------------------------------------- - -`options` entry can be either a string or a list. For simple cases, string -should suffice, but prefer to use list type to avoid escaping issues. -> - call fzf#run({'options': '--reverse --prompt "C:\\Program Files\\"'}) - call fzf#run({'options': ['--reverse', '--prompt', 'C:\Program Files\']}) -< -When `window` entry is a dictionary, fzf will start in a popup window. The -following options are allowed: - - - Required: - - `width` [float range [0 ~ 1]] or [integer range [8 ~ ]] - - `height` [float range [0 ~ 1]] or [integer range [4 ~ ]] - - Optional: - - `yoffset` [float default 0.5 range [0 ~ 1]] - - `xoffset` [float default 0.5 range [0 ~ 1]] - - `relative` [boolean default v:false] - - `border` [string default `rounded`]: Border style - - `rounded` / `sharp` / `horizontal` / `vertical` / `top` / `bottom` / `left` / `right` / `no[ne]` - - -FZF#WRAP -============================================================================== - - *fzf#wrap* - -We have seen that several aspects of `:FZF` command can be configured with a -set of global option variables; different ways to open files (`g:fzf_action`), -window position and size (`g:fzf_layout`), color palette (`g:fzf_colors`), -etc. - -So how can we make our custom `fzf#run` calls also respect those variables? -Simply by "wrapping" the spec dictionary with `fzf#wrap` before passing it to -`fzf#run`. - - - `fzf#wrap([name string], [spec dict], [fullscreen bool]) -> (dict)` - - All arguments are optional. Usually we only need to pass a spec - dictionary. - - `name` is for managing history files. It is ignored if `g:fzf_history_dir` - is not defined. - - `fullscreen` can be either `0` or `1` (default: 0). - -`fzf#wrap` takes a spec and returns an extended version of it (also a -dictionary) with additional options for addressing global preferences. You can -examine the return value of it like so: -> - echo fzf#wrap({'source': 'ls'}) -< -After we "wrap" our spec, we pass it to `fzf#run`. -> - call fzf#run(fzf#wrap({'source': 'ls'})) -< -Now it supports CTRL-T, CTRL-V, and CTRL-X key bindings (configurable via -`g:fzf_action`) and it opens fzf window according to `g:fzf_layout` setting. - -To make it easier to use, let's define `LS` command. -> - command! LS call fzf#run(fzf#wrap({'source': 'ls'})) -< -Type `:LS` and see how it works. - -We would like to make `:LS!` (bang version) open fzf in fullscreen, just like -`:FZF!`. Add `-bang` to command definition, and use value to set the -last `fullscreen` argument of `fzf#wrap` (see :help ). -> - " On :LS!, evaluates to '!', and '!0' becomes 1 - command! -bang LS call fzf#run(fzf#wrap({'source': 'ls'}, 0)) -< -Our `:LS` command will be much more useful if we can pass a directory argument -to it, so that something like `:LS /tmp` is possible. -> - command! -bang -complete=dir -nargs=? LS - \ call fzf#run(fzf#wrap({'source': 'ls', 'dir': }, 0)) -< -Lastly, if you have enabled `g:fzf_history_dir`, you might want to assign a -unique name to our command and pass it as the first argument to `fzf#wrap`. -> - " The query history for this command will be stored as 'ls' inside g:fzf_history_dir. - " The name is ignored if g:fzf_history_dir is not defined. - command! -bang -complete=dir -nargs=? LS - \ call fzf#run(fzf#wrap('ls', {'source': 'ls', 'dir': }, 0)) -< - -< Global options supported by fzf#wrap >______________________________________~ - *fzf-global-options-supported-by-fzf#wrap* - - - `g:fzf_layout` - - `g:fzf_action` - - Works only when no custom `sink` (or `sink*`) is provided - - Having custom sink usually means that each entry is not an ordinary - file path (e.g. name of color scheme), so we can't blindly apply the - same strategy (i.e. `tabedit some-color-scheme` doesn't make sense) - - `g:fzf_colors` - - `g:fzf_history_dir` - - -TIPS *fzf-tips* -============================================================================== - - -< fzf inside terminal buffer >________________________________________________~ - *fzf-inside-terminal-buffer* - -The latest versions of Vim and Neovim include builtin terminal emulator -(`:terminal`) and fzf will start in a terminal buffer in the following cases: - - - On Neovim - - On GVim - - On Terminal Vim with a non-default layout - - `call fzf#run({'left': '30%'})` or `let g:fzf_layout = {'left': '30%'}` - -On the latest versions of Vim and Neovim, fzf will start in a terminal buffer. -If you find the default ANSI colors to be different, consider configuring the -colors using `g:terminal_ansi_colors` in regular Vim or `g:terminal_color_x` -in Neovim. - - *g:terminal_color_15* *g:terminal_color_14* *g:terminal_color_13* -*g:terminal_color_12* *g:terminal_color_11* *g:terminal_color_10* *g:terminal_color_9* - *g:terminal_color_8* *g:terminal_color_7* *g:terminal_color_6* *g:terminal_color_5* - *g:terminal_color_4* *g:terminal_color_3* *g:terminal_color_2* *g:terminal_color_1* - *g:terminal_color_0* -> - " Terminal colors for seoul256 color scheme - if has('nvim') - let g:terminal_color_0 = '#4e4e4e' - let g:terminal_color_1 = '#d68787' - let g:terminal_color_2 = '#5f865f' - let g:terminal_color_3 = '#d8af5f' - let g:terminal_color_4 = '#85add4' - let g:terminal_color_5 = '#d7afaf' - let g:terminal_color_6 = '#87afaf' - let g:terminal_color_7 = '#d0d0d0' - let g:terminal_color_8 = '#626262' - let g:terminal_color_9 = '#d75f87' - let g:terminal_color_10 = '#87af87' - let g:terminal_color_11 = '#ffd787' - let g:terminal_color_12 = '#add4fb' - let g:terminal_color_13 = '#ffafaf' - let g:terminal_color_14 = '#87d7d7' - let g:terminal_color_15 = '#e4e4e4' - else - let g:terminal_ansi_colors = [ - \ '#4e4e4e', '#d68787', '#5f865f', '#d8af5f', - \ '#85add4', '#d7afaf', '#87afaf', '#d0d0d0', - \ '#626262', '#d75f87', '#87af87', '#ffd787', - \ '#add4fb', '#ffafaf', '#87d7d7', '#e4e4e4' - \ ] - endif -< - -< Starting fzf in a popup window >____________________________________________~ - *fzf-starting-fzf-in-a-popup-window* -> - " Required: - " - width [float range [0 ~ 1]] or [integer range [8 ~ ]] - " - height [float range [0 ~ 1]] or [integer range [4 ~ ]] - " - " Optional: - " - xoffset [float default 0.5 range [0 ~ 1]] - " - yoffset [float default 0.5 range [0 ~ 1]] - " - relative [boolean default v:false] - " - border [string default 'rounded']: Border style - " - 'rounded' / 'sharp' / 'horizontal' / 'vertical' / 'top' / 'bottom' / 'left' / 'right' - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } -< -Alternatively, you can make fzf open in a tmux popup window (requires tmux 3.2 -or above) by putting fzf-tmux options in `tmux` key. -> - " See `man fzf-tmux` for available options - if exists('$TMUX') - let g:fzf_layout = { 'tmux': '-p90%,60%' } - else - let g:fzf_layout = { 'window': { 'width': 0.9, 'height': 0.6 } } - endif -< - -< Hide statusline >___________________________________________________________~ - *fzf-hide-statusline* - -When fzf starts in a terminal buffer, the file type of the buffer is set to -`fzf`. So you can set up `FileType fzf` autocmd to customize the settings of -the window. - -For example, if you open fzf on the bottom on the screen (e.g. `{'down': -'40%'}`), you might want to temporarily disable the statusline for a cleaner -look. -> - let g:fzf_layout = { 'down': '30%' } - autocmd! FileType fzf - autocmd FileType fzf set laststatus=0 noshowmode noruler - \| autocmd BufLeave set laststatus=2 showmode ruler -< - -LICENSE *fzf-license* -============================================================================== - -The MIT License (MIT) - -Copyright (c) 2013-2021 Junegunn Choi - -============================================================================== -vim:tw=78:sw=2:ts=2:ft=help:norl:nowrap: diff --git a/dotfiles/.vim/plugged/fzf/go.mod b/dotfiles/.vim/plugged/fzf/go.mod deleted file mode 100644 index 5a5bdcb2..00000000 --- a/dotfiles/.vim/plugged/fzf/go.mod +++ /dev/null @@ -1,21 +0,0 @@ -module github.com/junegunn/fzf - -require ( - github.com/gdamore/tcell/v2 v2.5.3 - github.com/mattn/go-isatty v0.0.16 - github.com/mattn/go-runewidth v0.0.14 - github.com/mattn/go-shellwords v1.0.12 - github.com/rivo/uniseg v0.4.2 - github.com/saracen/walker v0.1.3 - golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 -) - -require ( - github.com/gdamore/encoding v1.0.0 // indirect - github.com/lucasb-eyer/go-colorful v1.2.0 // indirect - golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f // indirect - golang.org/x/text v0.3.7 // indirect -) - -go 1.17 diff --git a/dotfiles/.vim/plugged/fzf/go.sum b/dotfiles/.vim/plugged/fzf/go.sum deleted file mode 100644 index 5e774c68..00000000 --- a/dotfiles/.vim/plugged/fzf/go.sum +++ /dev/null @@ -1,32 +0,0 @@ -github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= -github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell/v2 v2.5.3 h1:b9XQrT6QGbgI7JvZOJXFNczOQeIYbo8BfeSMzt2sAV0= -github.com/gdamore/tcell/v2 v2.5.3/go.mod h1:wSkrPaXoiIWZqW/g7Px4xc79di6FTcpB8tvaKJ6uGBo= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0= -github.com/mattn/go-isatty v0.0.16 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-shellwords v1.0.12 h1:M2zGm7EW6UQJvDeQxo4T51eKPurbeFbe8WtebGE2xrk= -github.com/mattn/go-shellwords v1.0.12/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/rivo/uniseg v0.4.2 h1:YwD0ulJSJytLpiaWua0sBDusfsCZohxjxzVTYjwxfV8= -github.com/rivo/uniseg v0.4.2/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/saracen/walker v0.1.3 h1:YtcKKmpRPy6XJTHJ75J2QYXXZYWnZNQxPCVqZSHVV/g= -github.com/saracen/walker v0.1.3/go.mod h1:FU+7qU8DeQQgSZDmmThMJi93kPkLFgy0oVAcLxurjIk= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f h1:Ax0t5p6N38Ga0dThY21weqDEyz2oklo4IvDkpigvkD8= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220318055525-2edf467146b5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab h1:2QkjZIsXupsJbJIdSjjUOgWK3aEtzyuh2mPt3l/CkeU= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= diff --git a/dotfiles/.vim/plugged/fzf/install b/dotfiles/.vim/plugged/fzf/install deleted file mode 100755 index ae21ee89..00000000 --- a/dotfiles/.vim/plugged/fzf/install +++ /dev/null @@ -1,377 +0,0 @@ -#!/usr/bin/env bash - -set -u - -version=0.34.0 -auto_completion= -key_bindings= -update_config=2 -shells="bash zsh fish" -prefix='~/.fzf' -prefix_expand=~/.fzf -fish_dir=${XDG_CONFIG_HOME:-$HOME/.config}/fish - -help() { - cat << EOF -usage: $0 [OPTIONS] - - --help Show this message - --bin Download fzf binary only; Do not generate ~/.fzf.{bash,zsh} - --all Download fzf binary and update configuration files - to enable key bindings and fuzzy completion - --xdg Generate files under \$XDG_CONFIG_HOME/fzf - --[no-]key-bindings Enable/disable key bindings (CTRL-T, CTRL-R, ALT-C) - --[no-]completion Enable/disable fuzzy completion (bash & zsh) - --[no-]update-rc Whether or not to update shell configuration files - - --no-bash Do not set up bash configuration - --no-zsh Do not set up zsh configuration - --no-fish Do not set up fish configuration -EOF -} - -for opt in "$@"; do - case $opt in - --help) - help - exit 0 - ;; - --all) - auto_completion=1 - key_bindings=1 - update_config=1 - ;; - --xdg) - prefix='"${XDG_CONFIG_HOME:-$HOME/.config}"/fzf/fzf' - prefix_expand=${XDG_CONFIG_HOME:-$HOME/.config}/fzf/fzf - mkdir -p "${XDG_CONFIG_HOME:-$HOME/.config}/fzf" - ;; - --key-bindings) key_bindings=1 ;; - --no-key-bindings) key_bindings=0 ;; - --completion) auto_completion=1 ;; - --no-completion) auto_completion=0 ;; - --update-rc) update_config=1 ;; - --no-update-rc) update_config=0 ;; - --bin) ;; - --no-bash) shells=${shells/bash/} ;; - --no-zsh) shells=${shells/zsh/} ;; - --no-fish) shells=${shells/fish/} ;; - *) - echo "unknown option: $opt" - help - exit 1 - ;; - esac -done - -cd "$(dirname "${BASH_SOURCE[0]}")" -fzf_base=$(pwd) -fzf_base_esc=$(printf %q "$fzf_base") - -ask() { - while true; do - read -p "$1 ([y]/n) " -r - REPLY=${REPLY:-"y"} - if [[ $REPLY =~ ^[Yy]$ ]]; then - return 1 - elif [[ $REPLY =~ ^[Nn]$ ]]; then - return 0 - fi - done -} - -check_binary() { - echo -n " - Checking fzf executable ... " - local output - output=$("$fzf_base"/bin/fzf --version 2>&1) - if [ $? -ne 0 ]; then - echo "Error: $output" - binary_error="Invalid binary" - else - output=${output/ */} - if [ "$version" != "$output" ]; then - echo "$output != $version" - binary_error="Invalid version" - else - echo "$output" - binary_error="" - return 0 - fi - fi - rm -f "$fzf_base"/bin/fzf - return 1 -} - -link_fzf_in_path() { - if which_fzf="$(command -v fzf)"; then - echo " - Found in \$PATH" - echo " - Creating symlink: bin/fzf -> $which_fzf" - (cd "$fzf_base"/bin && rm -f fzf && ln -sf "$which_fzf" fzf) - check_binary && return - fi - return 1 -} - -try_curl() { - command -v curl > /dev/null && - if [[ $1 =~ tar.gz$ ]]; then - curl -fL $1 | tar -xzf - - else - local temp=${TMPDIR:-/tmp}/fzf.zip - curl -fLo "$temp" $1 && unzip -o "$temp" && rm -f "$temp" - fi -} - -try_wget() { - command -v wget > /dev/null && - if [[ $1 =~ tar.gz$ ]]; then - wget -O - $1 | tar -xzf - - else - local temp=${TMPDIR:-/tmp}/fzf.zip - wget -O "$temp" $1 && unzip -o "$temp" && rm -f "$temp" - fi -} - -download() { - echo "Downloading bin/fzf ..." - if [ -x "$fzf_base"/bin/fzf ]; then - echo " - Already exists" - check_binary && return - fi - link_fzf_in_path && return - mkdir -p "$fzf_base"/bin && cd "$fzf_base"/bin - if [ $? -ne 0 ]; then - binary_error="Failed to create bin directory" - return - fi - - local url - url=https://github.com/junegunn/fzf/releases/download/$version/${1} - set -o pipefail - if ! (try_curl $url || try_wget $url); then - set +o pipefail - binary_error="Failed to download with curl and wget" - return - fi - set +o pipefail - - if [ ! -f fzf ]; then - binary_error="Failed to download ${1}" - return - fi - - chmod +x fzf && check_binary -} - -# Try to download binary executable -archi=$(uname -sm) -binary_available=1 -binary_error="" -case "$archi" in - Darwin\ arm64) download fzf-$version-darwin_arm64.zip ;; - Darwin\ x86_64) download fzf-$version-darwin_amd64.zip ;; - Linux\ armv5*) download fzf-$version-linux_armv5.tar.gz ;; - Linux\ armv6*) download fzf-$version-linux_armv6.tar.gz ;; - Linux\ armv7*) download fzf-$version-linux_armv7.tar.gz ;; - Linux\ armv8*) download fzf-$version-linux_arm64.tar.gz ;; - Linux\ aarch64*) download fzf-$version-linux_arm64.tar.gz ;; - Linux\ *64) download fzf-$version-linux_amd64.tar.gz ;; - FreeBSD\ *64) download fzf-$version-freebsd_amd64.tar.gz ;; - OpenBSD\ *64) download fzf-$version-openbsd_amd64.tar.gz ;; - CYGWIN*\ *64) download fzf-$version-windows_amd64.zip ;; - MINGW*\ *64) download fzf-$version-windows_amd64.zip ;; - MSYS*\ *64) download fzf-$version-windows_amd64.zip ;; - Windows*\ *64) download fzf-$version-windows_amd64.zip ;; - *) binary_available=0 binary_error=1 ;; -esac - -cd "$fzf_base" -if [ -n "$binary_error" ]; then - if [ $binary_available -eq 0 ]; then - echo "No prebuilt binary for $archi ..." - else - echo " - $binary_error !!!" - fi - if command -v go > /dev/null; then - echo -n "Building binary (go get -u github.com/junegunn/fzf) ... " - if [ -z "${GOPATH-}" ]; then - export GOPATH="${TMPDIR:-/tmp}/fzf-gopath" - mkdir -p "$GOPATH" - fi - if go get -ldflags "-s -w -X main.version=$version -X main.revision=go-get" github.com/junegunn/fzf; then - echo "OK" - cp "$GOPATH/bin/fzf" "$fzf_base/bin/" - else - echo "Failed to build binary. Installation failed." - exit 1 - fi - else - echo "go executable not found. Installation failed." - exit 1 - fi -fi - -[[ "$*" =~ "--bin" ]] && exit 0 - -for s in $shells; do - if ! command -v "$s" > /dev/null; then - shells=${shells/$s/} - fi -done - -if [[ ${#shells} -lt 3 ]]; then - echo "No shell configuration to be updated." - exit 0 -fi - -# Auto-completion -if [ -z "$auto_completion" ]; then - ask "Do you want to enable fuzzy auto-completion?" - auto_completion=$? -fi - -# Key-bindings -if [ -z "$key_bindings" ]; then - ask "Do you want to enable key bindings?" - key_bindings=$? -fi - -echo -for shell in $shells; do - [[ "$shell" = fish ]] && continue - src=${prefix_expand}.${shell} - echo -n "Generate $src ... " - - fzf_completion="[[ \$- == *i* ]] && source \"$fzf_base/shell/completion.${shell}\" 2> /dev/null" - if [ $auto_completion -eq 0 ]; then - fzf_completion="# $fzf_completion" - fi - - fzf_key_bindings="source \"$fzf_base/shell/key-bindings.${shell}\"" - if [ $key_bindings -eq 0 ]; then - fzf_key_bindings="# $fzf_key_bindings" - fi - - cat > "$src" << EOF -# Setup fzf -# --------- -if [[ ! "\$PATH" == *$fzf_base_esc/bin* ]]; then - PATH="\${PATH:+\${PATH}:}$fzf_base/bin" -fi - -# Auto-completion -# --------------- -$fzf_completion - -# Key bindings -# ------------ -$fzf_key_bindings -EOF - echo "OK" -done - -# fish -if [[ "$shells" =~ fish ]]; then - echo -n "Update fish_user_paths ... " - fish << EOF - echo \$fish_user_paths | \grep "$fzf_base"/bin > /dev/null - or set --universal fish_user_paths \$fish_user_paths "$fzf_base"/bin -EOF - [ $? -eq 0 ] && echo "OK" || echo "Failed" - - mkdir -p "${fish_dir}/functions" - fish_binding="${fish_dir}/functions/fzf_key_bindings.fish" - if [ $key_bindings -ne 0 ]; then - echo -n "Symlink $fish_binding ... " - ln -sf "$fzf_base/shell/key-bindings.fish" \ - "$fish_binding" && echo "OK" || echo "Failed" - else - echo -n "Removing $fish_binding ... " - rm -f "$fish_binding" - echo "OK" - fi -fi - -append_line() { - set -e - - local update line file pat lno - update="$1" - line="$2" - file="$3" - pat="${4:-}" - lno="" - - echo "Update $file:" - echo " - $line" - if [ -f "$file" ]; then - if [ $# -lt 4 ]; then - lno=$(\grep -nF "$line" "$file" | sed 's/:.*//' | tr '\n' ' ') - else - lno=$(\grep -nF "$pat" "$file" | sed 's/:.*//' | tr '\n' ' ') - fi - fi - if [ -n "$lno" ]; then - echo " - Already exists: line #$lno" - else - if [ $update -eq 1 ]; then - [ -f "$file" ] && echo >> "$file" - echo "$line" >> "$file" - echo " + Added" - else - echo " ~ Skipped" - fi - fi - echo - set +e -} - -create_file() { - local file="$1" - shift - echo "Create $file:" - for line in "$@"; do - echo " $line" - echo "$line" >> "$file" - done - echo -} - -if [ $update_config -eq 2 ]; then - echo - ask "Do you want to update your shell configuration files?" - update_config=$? -fi -echo -for shell in $shells; do - [[ "$shell" = fish ]] && continue - [ $shell = zsh ] && dest=${ZDOTDIR:-~}/.zshrc || dest=~/.bashrc - append_line $update_config "[ -f ${prefix}.${shell} ] && source ${prefix}.${shell}" "$dest" "${prefix}.${shell}" -done - -if [ $key_bindings -eq 1 ] && [[ "$shells" =~ fish ]]; then - bind_file="${fish_dir}/functions/fish_user_key_bindings.fish" - if [ ! -e "$bind_file" ]; then - create_file "$bind_file" \ - 'function fish_user_key_bindings' \ - ' fzf_key_bindings' \ - 'end' - else - append_line $update_config "fzf_key_bindings" "$bind_file" - fi -fi - -if [ $update_config -eq 1 ]; then - echo 'Finished. Restart your shell or reload config file.' - if [[ "$shells" =~ bash ]]; then - echo -n ' source ~/.bashrc # bash' - [[ "$archi" =~ Darwin ]] && echo -n ' (.bashrc should be loaded from .bash_profile)' - echo - fi - [[ "$shells" =~ zsh ]] && echo " source ${ZDOTDIR:-~}/.zshrc # zsh" - [[ "$shells" =~ fish ]] && [ $key_bindings -eq 1 ] && echo ' fzf_key_bindings # fish' - echo - echo 'Use uninstall script to remove fzf.' - echo -fi -echo 'For more information, see: https://github.com/junegunn/fzf' diff --git a/dotfiles/.vim/plugged/fzf/install.ps1 b/dotfiles/.vim/plugged/fzf/install.ps1 deleted file mode 100644 index 8b4070b9..00000000 --- a/dotfiles/.vim/plugged/fzf/install.ps1 +++ /dev/null @@ -1,65 +0,0 @@ -$version="0.34.0" - -$fzf_base=Split-Path -Parent $MyInvocation.MyCommand.Definition - -function check_binary () { - Write-Host " - Checking fzf executable ... " -NoNewline - $output=cmd /c $fzf_base\bin\fzf.exe --version 2>&1 - if (-not $?) { - Write-Host "Error: $output" - $binary_error="Invalid binary" - } else { - $output=(-Split $output)[0] - if ($version -ne $output) { - Write-Host "$output != $version" - $binary_error="Invalid version" - } else { - Write-Host "$output" - $binary_error="" - return 1 - } - } - Remove-Item "$fzf_base\bin\fzf.exe" - return 0 -} - -function download { - param($file) - Write-Host "Downloading bin/fzf ..." - if (Test-Path "$fzf_base\bin\fzf.exe") { - Write-Host " - Already exists" - if (check_binary) { - return - } - } - if (-not (Test-Path "$fzf_base\bin")) { - md "$fzf_base\bin" - } - if (-not $?) { - $binary_error="Failed to create bin directory" - return - } - cd "$fzf_base\bin" - $url="https://github.com/junegunn/fzf/releases/download/$version/$file" - $temp=$env:TMP + "\fzf.zip" - [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 - if ($PSVersionTable.PSVersion.Major -ge 3) { - Invoke-WebRequest -Uri $url -OutFile $temp - } else { - (New-Object Net.WebClient).DownloadFile($url, $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath("$temp")) - } - if ($?) { - (Microsoft.PowerShell.Archive\Expand-Archive -Path $temp -DestinationPath .); (Remove-Item $temp) - } else { - $binary_error="Failed to download with powershell" - } - if (-not (Test-Path fzf.exe)) { - $binary_error="Failed to download $file" - return - } - echo y | icacls $fzf_base\bin\fzf.exe /grant Administrator:F ; check_binary >$null -} - -download "fzf-$version-windows_amd64.zip" - -Write-Host 'For more information, see: https://github.com/junegunn/fzf' diff --git a/dotfiles/.vim/plugged/fzf/main.go b/dotfiles/.vim/plugged/fzf/main.go deleted file mode 100644 index fe17a562..00000000 --- a/dotfiles/.vim/plugged/fzf/main.go +++ /dev/null @@ -1,14 +0,0 @@ -package main - -import ( - fzf "github.com/junegunn/fzf/src" - "github.com/junegunn/fzf/src/protector" -) - -var version string = "0.34" -var revision string = "devel" - -func main() { - protector.Protect() - fzf.Run(fzf.ParseOptions(), version, revision) -} diff --git a/dotfiles/.vim/plugged/fzf/man/man1/fzf-tmux.1 b/dotfiles/.vim/plugged/fzf/man/man1/fzf-tmux.1 deleted file mode 100644 index f3b35403..00000000 --- a/dotfiles/.vim/plugged/fzf/man/man1/fzf-tmux.1 +++ /dev/null @@ -1,68 +0,0 @@ -.ig -The MIT License (MIT) - -Copyright (c) 2013-2021 Junegunn Choi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -.. -.TH fzf-tmux 1 "Sep 2022" "fzf 0.34.0" "fzf-tmux - open fzf in tmux split pane" - -.SH NAME -fzf-tmux - open fzf in tmux split pane - -.SH SYNOPSIS -.B fzf-tmux [LAYOUT OPTIONS] [--] [FZF OPTIONS] - -.SH DESCRIPTION -fzf-tmux is a wrapper script for fzf that opens fzf in a tmux split pane or in -a tmux popup window. It is designed to work just like fzf except that it does -not take up the whole screen. You can safely use fzf-tmux instead of fzf in -your scripts as the extra options will be silently ignored if you're not on -tmux. - -.SH LAYOUT OPTIONS - -(default layout: \fB-d 50%\fR) - -.SS Popup window -(requires tmux 3.2 or above) -.TP -.B "-p [WIDTH[%][,HEIGHT[%]]]" -.TP -.B "-w WIDTH[%]" -.TP -.B "-h WIDTH[%]" -.TP -.B "-x COL" -.TP -.B "-y ROW" - -.SS Split pane -.TP -.B "-u [height[%]]" -Split above (up) -.TP -.B "-d [height[%]]" -Split below (down) -.TP -.B "-l [width[%]]" -Split left -.TP -.B "-r [width[%]]" -Split right diff --git a/dotfiles/.vim/plugged/fzf/man/man1/fzf.1 b/dotfiles/.vim/plugged/fzf/man/man1/fzf.1 deleted file mode 100644 index bf71e7cd..00000000 --- a/dotfiles/.vim/plugged/fzf/man/man1/fzf.1 +++ /dev/null @@ -1,1042 +0,0 @@ -.ig -The MIT License (MIT) - -Copyright (c) 2013-2021 Junegunn Choi - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. -.. -.TH fzf 1 "Sep 2022" "fzf 0.34.0" "fzf - a command-line fuzzy finder" - -.SH NAME -fzf - a command-line fuzzy finder - -.SH SYNOPSIS -fzf [options] - -.SH DESCRIPTION -fzf is a general-purpose command-line fuzzy finder. - -.SH OPTIONS -.SS Search mode -.TP -.B "-x, --extended" -Extended-search mode. Since 0.10.9, this is enabled by default. You can disable -it with \fB+x\fR or \fB--no-extended\fR. -.TP -.B "-e, --exact" -Enable exact-match -.TP -.B "-i" -Case-insensitive match (default: smart-case match) -.TP -.B "+i" -Case-sensitive match -.TP -.B "--literal" -Do not normalize latin script letters for matching. -.TP -.BI "--scheme=" SCHEME -Choose scoring scheme tailored for different types of input. - -.br -.BR default " Generic scoring scheme designed to work well with any type of input" -.br -.BR path " Scoring scheme for paths (additional bonus point only after path separator) -.br -.BR history " Scoring scheme for command history (no additional bonus points). - Sets \fB--tiebreak=index\fR as well. -.br -.TP -.BI "--algo=" TYPE -Fuzzy matching algorithm (default: v2) - -.br -.BR v2 " Optimal scoring algorithm (quality)" -.br -.BR v1 " Faster but not guaranteed to find the optimal result (performance)" -.br - -.TP -.BI "-n, --nth=" "N[,..]" -Comma-separated list of field index expressions for limiting search scope. -See \fBFIELD INDEX EXPRESSION\fR for the details. -.TP -.BI "--with-nth=" "N[,..]" -Transform the presentation of each line using field index expressions -.TP -.BI "-d, --delimiter=" "STR" -Field delimiter regex for \fB--nth\fR and \fB--with-nth\fR (default: AWK-style) -.TP -.BI "--disabled" -Do not perform search. With this option, fzf becomes a simple selector -interface rather than a "fuzzy finder". You can later enable the search using -\fBenable-search\fR or \fBtoggle-search\fR action. -.SS Search result -.TP -.B "+s, --no-sort" -Do not sort the result -.TP -.B "--tac" -Reverse the order of the input - -.RS -e.g. - \fBhistory | fzf --tac --no-sort\fR -.RE -.TP -.BI "--tiebreak=" "CRI[,..]" -Comma-separated list of sort criteria to apply when the scores are tied. -.br - -.br -.BR length " Prefers line with shorter length" -.br -.BR chunk " Prefers line with shorter matched chunk (delimited by whitespaces)" -.br -.BR begin " Prefers line with matched substring closer to the beginning" -.br -.BR end " Prefers line with matched substring closer to the end" -.br -.BR index " Prefers line that appeared earlier in the input stream" -.br - -.br -- Each criterion should appear only once in the list -.br -- \fBindex\fR is only allowed at the end of the list -.br -- \fBindex\fR is implicitly appended to the list when not specified -.br -- Default is \fBlength\fR (or equivalently \fBlength\fR,index) -.br -- If \fBend\fR is found in the list, fzf will scan each line backwards -.SS Interface -.TP -.B "-m, --multi" -Enable multi-select with tab/shift-tab. It optionally takes an integer argument -which denotes the maximum number of items that can be selected. -.TP -.B "+m, --no-multi" -Disable multi-select -.TP -.B "--no-mouse" -Disable mouse -.TP -.BI "--bind=" "KEYBINDS" -Comma-separated list of custom key bindings. See \fBKEY/EVENT BINDINGS\fR for -the details. -.TP -.B "--cycle" -Enable cyclic scroll -.TP -.B "--keep-right" -Keep the right end of the line visible when it's too long. Effective only when -the query string is empty. -.TP -.BI "--scroll-off=" "LINES" -Number of screen lines to keep above or below when scrolling to the top or to -the bottom (default: 0). -.TP -.B "--no-hscroll" -Disable horizontal scroll -.TP -.BI "--hscroll-off=" "COLS" -Number of screen columns to keep to the right of the highlighted substring -(default: 10). Setting it to a large value will cause the text to be positioned -on the center of the screen. -.TP -.B "--filepath-word" -Make word-wise movements and actions respect path separators. The following -actions are affected: - -\fBbackward-kill-word\fR -.br -\fBbackward-word\fR -.br -\fBforward-word\fR -.br -\fBkill-word\fR -.TP -.BI "--jump-labels=" "CHARS" -Label characters for \fBjump\fR and \fBjump-accept\fR -.SS Layout -.TP -.BI "--height=" "[~]HEIGHT[%]" -Display fzf window below the cursor with the given height instead of using -the full screen. When prefixed with \fB~\fR, fzf will automatically determine -the height in the range according to the input size. Note that adaptive height -is not compatible with top/bottom margin and padding given in percent size. -.TP -.BI "--min-height=" "HEIGHT" -Minimum height when \fB--height\fR is given in percent (default: 10). -Ignored when \fB--height\fR is not specified. -.TP -.BI "--layout=" "LAYOUT" -Choose the layout (default: default) - -.br -.BR default " Display from the bottom of the screen" -.br -.BR reverse " Display from the top of the screen" -.br -.BR reverse-list " Display from the top of the screen, prompt at the bottom" -.br - -.TP -.B "--reverse" -A synonym for \fB--layout=reverse\fB - -.TP -.BI "--border" [=BORDER_OPT] -Draw border around the finder - -.br -.BR rounded " Border with rounded corners (default)" -.br -.BR sharp " Border with sharp corners" -.br -.BR horizontal " Horizontal lines above and below the finder" -.br -.BR vertical " Vertical lines on each side of the finder" -.br -.BR top " (up)" -.br -.BR bottom " (down)" -.br -.BR left -.br -.BR right -.br -.BR none -.br - -.TP -.B "--no-unicode" -Use ASCII characters instead of Unicode box drawing characters to draw border - -.TP -.BI "--margin=" MARGIN -Comma-separated expression for margins around the finder. -.br - -.br -.RS -.BR TRBL " Same margin for top, right, bottom, and left" -.br -.BR TB,RL " Vertical, horizontal margin" -.br -.BR T,RL,B " Top, horizontal, bottom margin" -.br -.BR T,R,B,L " Top, right, bottom, left margin" -.br - -.br -Each part can be given in absolute number or in percentage relative to the -terminal size with \fB%\fR suffix. -.br - -.br -e.g. - \fBfzf --margin 10% - fzf --margin 1,5%\fR -.RE -.TP -.BI "--padding=" PADDING -Comma-separated expression for padding inside the border. Padding is -distinguishable from margin only when \fB--border\fR option is used. -.br - -.br -e.g. - \fBfzf --margin 5% --padding 5% --border --preview 'cat {}' \\ - --color bg:#222222,preview-bg:#333333\fR - -.br -.RS -.BR TRBL " Same padding for top, right, bottom, and left" -.br -.BR TB,RL " Vertical, horizontal padding" -.br -.BR T,RL,B " Top, horizontal, bottom padding" -.br -.BR T,R,B,L " Top, right, bottom, left padding" -.br -.RE - -.TP -.BI "--info=" "STYLE" -Determines the display style of finder info (match counters). - -.br -.BR default " Display on the next line to the prompt" -.br -.BR inline " Display on the same line" -.br -.BR hidden " Do not display finder info" -.br - -.TP -.B "--no-info" -A synonym for \fB--info=hidden\fB - -.TP -.BI "--prompt=" "STR" -Input prompt (default: '> ') -.TP -.BI "--pointer=" "STR" -Pointer to the current line (default: '>') -.TP -.BI "--marker=" "STR" -Multi-select marker (default: '>') -.TP -.BI "--header=" "STR" -The given string will be printed as the sticky header. The lines are displayed -in the given order from top to bottom regardless of \fB--layout\fR option, and -are not affected by \fB--with-nth\fR. ANSI color codes are processed even when -\fB--ansi\fR is not set. -.TP -.BI "--header-lines=" "N" -The first N lines of the input are treated as the sticky header. When -\fB--with-nth\fR is set, the lines are transformed just like the other -lines that follow. -.TP -.B "--header-first" -Print header before the prompt line -.TP -.BI "--ellipsis=" "STR" -Ellipsis to show when line is truncated (default: '..') -.SS Display -.TP -.B "--ansi" -Enable processing of ANSI color codes -.TP -.BI "--tabstop=" SPACES -Number of spaces for a tab character (default: 8) -.TP -.BI "--color=" "[BASE_SCHEME][,COLOR_NAME[:ANSI_COLOR][:ANSI_ATTRIBUTES]]..." -Color configuration. The name of the base color scheme is followed by custom -color mappings. - -.RS -.B BASE SCHEME: - (default: dark on 256-color terminal, otherwise 16) - - \fBdark \fRColor scheme for dark 256-color terminal - \fBlight \fRColor scheme for light 256-color terminal - \fB16 \fRColor scheme for 16-color terminal - \fBbw \fRNo colors (equivalent to \fB--no-color\fR) - -.B COLOR NAMES: - \fBfg \fRText - \fBbg \fRBackground - \fBpreview-fg \fRPreview window text - \fBpreview-bg \fRPreview window background - \fBhl \fRHighlighted substrings - \fBfg+ \fRText (current line) - \fBbg+ \fRBackground (current line) - \fBgutter \fRGutter on the left (defaults to \fBbg+\fR) - \fBhl+ \fRHighlighted substrings (current line) - \fBquery \fRQuery string - \fBdisabled \fRQuery string when search is disabled - \fBinfo \fRInfo line (match counters) - \fBborder \fRBorder around the window (\fB--border\fR and \fB--preview\fR) - \fBprompt \fRPrompt - \fBpointer \fRPointer to the current line - \fBmarker \fRMulti-select marker - \fBspinner \fRStreaming input indicator - \fBheader \fRHeader - -.B ANSI COLORS: - \fB-1 \fRDefault terminal foreground/background color - \fB \fR(or the original color of the text) - \fB0 ~ 15 \fR16 base colors - \fBblack\fR - \fBred\fR - \fBgreen\fR - \fByellow\fR - \fBblue\fR - \fBmagenta\fR - \fBcyan\fR - \fBwhite\fR - \fBbright-black\fR (gray | grey) - \fBbright-red\fR - \fBbright-green\fR - \fBbright-yellow\fR - \fBbright-blue\fR - \fBbright-magenta\fR - \fBbright-cyan\fR - \fBbright-white\fR - \fB16 ~ 255 \fRANSI 256 colors - \fB#rrggbb \fR24-bit colors - -.B ANSI ATTRIBUTES: (Only applies to foreground colors) - \fBregular \fRClears previously set attributes; should precede the other ones - \fBbold\fR - \fBunderline\fR - \fBreverse\fR - \fBdim\fR - \fBitalic\fR - \fBstrikethrough\fR - -.B EXAMPLES: - - \fB# Seoul256 theme with 8-bit colors - # (https://github.com/junegunn/seoul256.vim) - fzf --color='bg:237,bg+:236,info:143,border:240,spinner:108' \\ - --color='hl:65,fg:252,header:65,fg+:252' \\ - --color='pointer:161,marker:168,prompt:110,hl+:108' - - # Seoul256 theme with 24-bit colors - fzf --color='bg:#4B4B4B,bg+:#3F3F3F,info:#BDBB72,border:#6B6B6B,spinner:#98BC99' \\ - --color='hl:#719872,fg:#D9D9D9,header:#719872,fg+:#D9D9D9' \\ - --color='pointer:#E12672,marker:#E17899,prompt:#98BEDE,hl+:#98BC99'\fR -.RE -.TP -.B "--no-bold" -Do not use bold text -.TP -.B "--black" -Use black background -.SS History -.TP -.BI "--history=" "HISTORY_FILE" -Load search history from the specified file and update the file on completion. -When enabled, \fBCTRL-N\fR and \fBCTRL-P\fR are automatically remapped to -\fBnext-history\fR and \fBprevious-history\fR. -.TP -.BI "--history-size=" "N" -Maximum number of entries in the history file (default: 1000). The file is -automatically truncated when the number of the lines exceeds the value. -.SS Preview -.TP -.BI "--preview=" "COMMAND" -Execute the given command for the current line and display the result on the -preview window. \fB{}\fR in the command is the placeholder that is replaced to -the single-quoted string of the current line. To transform the replacement -string, specify field index expressions between the braces (See \fBFIELD INDEX -EXPRESSION\fR for the details). - -.RS -e.g. - \fBfzf --preview='head -$LINES {}' - ls -l | fzf --preview="echo user={3} when={-4..-2}; cat {-1}" --header-lines=1\fR - -fzf exports \fB$FZF_PREVIEW_LINES\fR and \fB$FZF_PREVIEW_COLUMNS\fR so that -they represent the exact size of the preview window. (It also overrides -\fB$LINES\fR and \fB$COLUMNS\fR with the same values but they can be reset -by the default shell, so prefer to refer to the ones with \fBFZF_PREVIEW_\fR -prefix.) - -A placeholder expression starting with \fB+\fR flag will be replaced to the -space-separated list of the selected lines (or the current line if no selection -was made) individually quoted. - -e.g. - \fBfzf --multi --preview='head -10 {+}' - git log --oneline | fzf --multi --preview 'git show {+1}'\fR - -When using a field index expression, leading and trailing whitespace is stripped -from the replacement string. To preserve the whitespace, use the \fBs\fR flag. - -Also, \fB{q}\fR is replaced to the current query string, and \fB{n}\fR is -replaced to zero-based ordinal index of the line. Use \fB{+n}\fR if you want -all index numbers when multiple lines are selected. - -A placeholder expression with \fBf\fR flag is replaced to the path of -a temporary file that holds the evaluated list. This is useful when you -multi-select a large number of items and the length of the evaluated string may -exceed \fBARG_MAX\fR. - -e.g. - \fB# Press CTRL-A to select 100K items and see the sum of all the numbers. - # This won't work properly without 'f' flag due to ARG_MAX limit. - seq 100000 | fzf --multi --bind ctrl-a:select-all \\ - --preview "awk '{sum+=\\$1} END {print sum}' {+f}"\fR - -Note that you can escape a placeholder pattern by prepending a backslash. - -Preview window will be updated even when there is no match for the current -query if any of the placeholder expressions evaluates to a non-empty string. - -Since 0.24.0, fzf can render partial preview content before the preview command -completes. ANSI escape sequence for clearing the display (\fBCSI 2 J\fR) is -supported, so you can use it to implement preview window that is constantly -updating. - -e.g. - \fBfzf --preview 'for i in $(seq 100000); do - (( i % 200 == 0 )) && printf "\\033[2J" - echo "$i" - sleep 0.01 - done'\fR -.RE -.TP -.BI "--preview-window=" "[POSITION][,SIZE[%]][,border-BORDER_OPT][,[no]wrap][,[no]follow][,[no]cycle][,[no]hidden][,+SCROLL[OFFSETS][/DENOM]][,~HEADER_LINES][,default][,